Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[spectec] SpecTec interpreter: array.new_data and array.init_data fail on arrays of v128

Đã đóng Phù hợp với người mới
#2,285 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Một pull request liên quan đã được merge.

  • #2293 của @rossberg — đã merge

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
wasm
Lĩnh vực
testing

Hướng nghiên cứu

Bắt đầu trong trình thông dịch SpecTec tại inv_zbytes và so sánh cách xử lý các giá trị vector với inv_cbytes, vốn đã chuyển V128 đến inv_vbytes. Chạy spectec specification/wasm-3.0/*.spectec --interpreter với module được cung cấp; hoàn tất khi cả array.new_data và array.init_data đều trả về các giá trị lane như mong đợi mà không có ArgMismatch.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

(module
  (type $av (array (mut v128)))
  (data $d "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f")
  (func (export "new") (result i32)
    (i32x4.extract_lane 3 (array.get $av (array.new_data $av $d (i32.const 0) (i32.const 1)) (i32.const 0))))
  (func (export "init") (result i32)
    (local $x (ref $av))
    (local.set $x (array.new_default $av (i32.const 1)))
    (array.init_data $av $d (local.get $x) (i32.const 0) (i32.const 0) (i32.const 1))
    (i32x4.extract_lane 1 (array.get $av (local.get $x) (i32.const 0)))))
(assert_return (invoke "new") (i32.const 0x0f0e0d0c))
(assert_return (invoke "init") (i32.const 0x07060504))

The reference interpreter passes. spectec specification/wasm-3.0/*.spectec --interpreter fails both:

$ARRAY.NEW_DATA: Backend_interpreter.Exception.ArgMismatch("inv_nbytes: [V128, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]]")

array.new_data-num and array.init_data-num decode the segment with $zbytes_(zt, c). In the interpreter, inv_zbytes handles I8 and I16 and passes everything else to inv_nbytes, which has no V128 case. inv_cbytes already sends V128 to inv_vbytes; inv_zbytes needs the same case.

Tested at 340650f.

Ngôn ngữ chính
WebAssembly
Star
3.5k
Fork
540
Merge trung bình
23 giờ 36 phút
Pull request đã merge (30 ngày)
26

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của WebAssembly/spec

Tất cả issue của WebAssembly/spec

Issue tương tự

Thêm issue về Testing & QA

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.