Open Robbepop opened 1 year ago
The bulk memory and reference types proposals were heavily intertwined and very little care was given at the time when implementing them in wasmparser as to which precise feature went where, so I'm sure mistakes were made or the spec has drifted since. It's fine to recategorize features under different proposals retroactively.
It's fine to recategorize features under different proposals retroactively.
What does this mean with respect to this issue?
The elemexpr
was introduced in bulk-memory
alongside table.init
because without them it is impossible to initialize a table
to null
via table.init
from what I understood.
Fixing this issue in wasmparser
is a bit tricky since ref.null
and ref.func
instructions are only accepted in certain context under the bulk-memroy
Wasm proposal.
I'm not entirely sure unfortunately, I haven't put any effort into thinking about how to rationalize the bulk memory proposal without reference types or vice versa.
I stumbled upon this when implementing
bulk-memory
Wasm proposal support inwasmi
when integrating the new Wasm spec testsuite test cases for thebulk-memory
Wasm proposal. Note:wasmi
does not yet have support for thereference-types
Wasm proposal and I guess this is important for this issue.Namely, when parsing and validating the test cases via
wasmparser
(as always) it errors out with this message among others:The
wasmparser
error message is:reference types support is not enabled (at offset 0x74)
Querying thewasmparser
codebase got me the following code segments:https://github.com/bytecodealliance/wasm-tools/blob/cacda73ccb6f9f8cc42e8391c77480187c99b48d/crates/wasmparser/src/validator.rs#L256
Which filters out
ValType::FuncRef | ValType::ExternRef
types, however, thebulk-memory
Wasm proposal explicitly allowsValType::FuncRef
in so-calledelemexpr
which can only occur in Wasm element const experessions. I think this is the problematic code. (Not tested though.)Source:
bulk-memory
Wasm Proposal Overviewhttps://github.com/bytecodealliance/wasm-tools/blob/cacda73ccb6f9f8cc42e8391c77480187c99b48d/crates/wasmparser/src/validator/operators.rs#L934
Unfortunately I am on
wasmparser 0.91
so this issue might have already been resolved in a newer version. Here is a link to the WIPwasmi
PR in case this helps. (It is very WIP ...)