WebAssembly / WebAssembly/binaryen

Improve interpreter spec test coverage

Open
#8,261 21 comments 0 reactions 1 assignee View on GitHub

@stevenfontanella is already working on this.

Since Feb 3, 2026.

  • #8058 by @stevenfontanella — merged
  • #8076 by @stevenfontanella — merged
  • #8086 by @stevenfontanella — merged
  • #8222 by @stevenfontanella — merged
  • #8233 by @stevenfontanella — merged
  • #8234 by @stevenfontanella — merged
  • #8254 by @stevenfontanella — merged
  • #8270 by @stevenfontanella — merged
  • #8357 by @stevenfontanella — merged
  • #8380 by @stevenfontanella — merged
  • #8396 by @stevenfontanella — merged
Dominant language
WebAssembly
Stars
8.6k
Forks
885
Avg merge
1d 19h
Merged PRs (30d)
69

Description

Failing spec tests as of November:

test/spec/

  • const.wast,
  • linking.wast,
  • unreached-invalid.wast,
  • elem.wast,

test/spec/threads (to be upstreamed into testsuite from the threads repo), ported in #8418.

  • atomic.wast
  • deeply_nested.wast
  • LB_atomic.wast
  • LB.wast
  • MP_atomic.wast
  • MP.wast
  • nested.wast
  • SB_atomic.wast
  • SB.wast
  • simple.wast
  • thread.wast
  • unlinkable.wast
  • wait_notify.wast

test/spec/testsuite/

  • address.wast, # 64-bit offset allowed by memory64
  • array_new_elem.wast, # Failure to parse element segment item abbreviation
  • binary.wast, # Missing data count section validation
  • call_indirect64.wast, # Failure to parse element segment abbreviation
  • comments.wast, # Issue with carriage returns being treated as newlines
  • const.wast, # Hex float constant not recognized as out of range
  • conversions.wast, # Promoted NaN should be canonical
  • data.wast, # Fail to parse data segment offset abbreviation
  • elem.wast, # Requires modeling empty declarative segments
  • f32.wast, # Adding -0 and -nan should give a canonical NaN
  • f64.wast, # Adding -0 and -nan should give a canonical NaN
  • float_exprs.wast, # Adding 0 and NaN should give canonical NaN
  • float_misc.wast, # Rounding wrong on f64.sqrt
  • func.wast, # Duplicate parameter names not properly rejected
  • global.wast, # Fail to parse table
  • if.wast, # Requires more precise unreachable validation
  • imports.wast, # Missing validation of missing function on instantiation
  • proposals/threads/imports.wast, # Missing memory type validation on instantiation
  • linking.wast, # Missing function type validation on instantiation
  • memory.wast, # Requires wast module definition support
  • proposals/threads/memory.wast, # Missing memory type validation on instantiation
  • memory64-imports.wast, # Missing validation on instantiation
  • annotations.wast, # String annotations IDs should be allowed
  • id.wast, # Empty IDs should be disallowed
  • instance.wast, # Requires wast module definition support
  • table64.wast, # Requires wast module definition support
  • table_grow.wast, # Incorrect table linking semantics in interpreter
  • tag.wast, # Non-empty tag results allowed by stack switching
  • try_table.wast, # Requires try_table interpretation
  • local_init.wast, # Requires local validation to respect unnamed blocks
  • ref_func.wast, # Requires rejecting undeclared functions references
  • ref_is_null.wast, # Requires ref.null wast constants
  • ref_null.wast, # Requires ref.null wast constants
  • return_call_indirect.wast, # Requires more precise unreachable validation
  • select.wast, # Requires ref.null wast constants
  • table.wast, # Requires support for table default elements
  • unreached-invalid.wast, # Requires more precise unreachable validation
  • array.wast, # Requires support for table default elements
  • br_if.wast, # Requires more precise branch validation
  • br_on_cast.wast, # Requires host references to not be externalized i31refs
  • br_on_cast_fail.wast, # Requires host references to not be externalized i31refs
  • extern.wast, # Requires ref.host wast constants
  • i31.wast, # Requires support for table default elements
  • ref_cast.wast, # Requires host references to not be externalized i31refs
  • ref_test.wast, # Requires host references to not be externalized i31refs
  • struct.wast, # Duplicate field names not properly rejected
  • type-rec.wast, # Missing function type validation on instantiation
  • type-subtyping.wast, # ShellExternalInterface::callTable does not handle subtyping
  • call_indirect.wast, # Bug with 64-bit inline element segment parsing
  • memory64.wast, # Requires wast module definition support
  • imports0.wast, # Missing memory type validation on instantiation
  • imports2.wast, # Missing memory type validation on instantiation
  • imports3.wast, # Missing memory type validation on instantiation
  • linking0.wast, # Missing memory type validation on instantiation
  • linking3.wast, # Fatal error on missing table.
  • i16x8_relaxed_q15mulr_s.wast, # Requires wast either support
  • i32x4_relaxed_trunc.wast, # Requires wast either support
  • i8x16_relaxed_swizzle.wast, # Requires wast either support
  • relaxed_dot_product.wast, # Requires wast either support
  • relaxed_laneselect.wast, # Requires wast either support
  • relaxed_madd_nmadd.wast, # Requires wast either support
  • relaxed_min_max.wast, # Requires wast either support
  • simd_const.wast, # Hex float constant not recognized as out of range
  • simd_conversions.wast, # Promoted NaN should be canonical
  • simd_f32x4.wast, # Min of 0 and NaN should give a canonical NaN
  • simd_f32x4_arith.wast, # Adding inf and -inf should give a canonical NaN
  • simd_f32x4_rounding.wast, # Ceil of NaN should give a canonical NaN
  • simd_f64x2.wast, # Min of 0 and NaN should give a canonical NaN
  • simd_f64x2_arith.wast, # Adding inf and -inf should give a canonical NaN
  • simd_f64x2_rounding.wast, # Ceil of NaN should give a canonical NaN
  • simd_i32x4_cmp.wast, # UBSan error on integer overflow
  • simd_i32x4_arith2.wast, # UBSan error on integer overflow
  • simd_i32x4_dot_i16x8.wast, # UBSan error on integer overflow
  • token.wast, # Lexer should require spaces between strings and non-paren tokens

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.