alexcrichton commented on Issue #2059:
I've marked this as a draft while the wasmparser changes have yet to be released.
github-actions[bot] commented on Issue #2059:
Subscribe to Label Action
cc @bnjbvr, @peterhuene
<details>
This issue or pull request has been labeled: "cranelift", "cranelift:wasm", "lightbeam", "wasmtime:api"Thus the following users have been cc'd because of the following labels:
- bnjbvr: cranelift
- peterhuene: wasmtime:api
To subscribe or unsubscribe from this label, edit the <code>.github/subscribe-to-label.json</code> configuration file.
Learn more.
</details>
alexcrichton commented on Issue #2059:
Ok the wasmparser bits are published and this should be good to go!
github-actions[bot] commented on Issue #2059:
Subscribe to Label Action
cc @fitzgen
<details>
This issue or pull request has been labeled: "fuzzing"Thus the following users have been cc'd because of the following labels:
- fitzgen: fuzzing
To subscribe or unsubscribe from this label, edit the <code>.github/subscribe-to-label.json</code> configuration file.
Learn more.
</details>
bnjbvr commented on Issue #2059:
The bits to implement don't seem terribly hard, we already required most of this information anyways, so it was around. It's nice to have a proper API to make sense of it!
One request, though: in wasmparser, most of the trait functions return a
&Self::Type
(or&Self::FuncType
, etc.), which makes it a bit hard to implement in some places. For instance, our Type representation is a plain packed u32 at the moment: the ret type being a borrow makes it hard to return a plain primitive value. Could it be aCow<Self::Type>
instead? (Unless there's a better API for this of course; my Rust knowledge is reaching its boundaries here.)Because of the above issue, I haven't gone through implementing it entirely in Spidermonkey. Since I wouldn't want to block this from landing, would it make sense to allow both APIs right now, mark the former one as deprecated, and allow for implementing the new one for clients who want it?
bnjbvr commented on Issue #2059:
(I'm being told Rust nightly has generic associated types, which would allow putting a lifetime type parameter in the
Type
trait declaration, making it possible to return something that depends on&'self
or not; this is not a viable possibility at the moment, though.)
alexcrichton commented on Issue #2059:
After some discussion on Zulip, I think https://github.com/bytecodealliance/wasm-tools/pull/68 will help address the issues here, so I'll get that landed/published and update it here before we merge this.
alexcrichton commented on Issue #2059:
Ok I think
wasmparser
should have the necessary changes now, @bnjbvr did you want to double-check this again?
bnjbvr commented on Issue #2059:
As agreed on Zulip, since i won't be around for some time, this should land later to give Julian/Chris an opportunity to look into Spidermonkey changes this coming week. Thanks Alex!
alexcrichton commented on Issue #2059:
Ok I've rebased this and further updated wasmparser to 0.62.0, which pulled in some multi-memory and memory64 bits. Multi-memory may work as-is (except for
memory.copy
between memories) but memory64 is just left asunimplemented!()
. In any case we'll want more official support for this later, for now it's just getting things to compile.
bnjbvr commented on Issue #2059:
Thanks for the update; i'll look into using this for Spidermonkey, probably early next week.
cfallin commented on Issue #2059:
I've done some work on the SpiderMonkey embedding of Cranelift to adapt to this change; we making progress. I rebased your patch here: commit
Patch on SM side for reference/curiosity (this is based on @bnjbvr's excellent work): on bug 1655042
There are a bunch of error-message regexes in unit tests that need to be updated, but we're almost there. Thanks for the patience!
cfallin edited a comment on Issue #2059:
I've done some work on the SpiderMonkey embedding of Cranelift to adapt to this change; we're making progress. I rebased your patch here: commit
Patch on SM side for reference/curiosity (this is based on @bnjbvr's excellent work): on bug 1655042
There are a bunch of error-message regexes in unit tests that need to be updated, but we're almost there. Thanks for the patience!
alexcrichton commented on Issue #2059:
Thanks for the update! I've gone ahead and pushed a rebased version here as well if that helps too.
alexcrichton commented on Issue #2059:
I've fixed the recent merge conflicts with a rebase!
cfallin commented on Issue #2059:
Getting closer on my end too; FWIW I had to make one small change to fix some tests, exposing a junk-bytes-at-end condition as an error return rather than panic: commit (feel free to incorporate). I just have to tackle some table/reftypes-related test failures and then SpiderMonkey will be ready for this!
alexcrichton commented on Issue #2059:
Oh oops, good catch! The intention was to let wasmparser's validator catch that naturally, so I pushed up a slightly tweaked commit which should remove the panic as well.
cfallin commented on Issue #2059:
I've gotten all tests to pass in SpiderMonkey using this validator, now! In order to do so, I locally updated the
wasmparser
dep incranelift-wasm
to 0.63.0; this included an update to the bytecode-operator enum so I have a local commit here on top of your two commits. (That patch-stack is rebased to currentmain
as well.) I'm not sure if the update is strictly necessary, now, but I did so as I was working through some weird validation mismatches, and have now baked the new version's error messages into the unit-test updates, so it has become a requirement for that reason :-)Given that, I think there isn't any further reason to hold this back -- thanks for waiting on SM to catch up!
(A tangential note, as hinted above -- the SpiderMonkey test suite has a whole bunch of "this wasm module should fail to compile in a way that matches this regex" tests, so we should be careful updating any error messages going forward, or at least consider the cost; I wish there were a better way (standardized error messages as per a spec?) but this is what we have for now...)
fitzgen commented on Issue #2059:
(A tangential note, as hinted above -- the SpiderMonkey test suite has a whole bunch of "this wasm module should fail to compile in a way that matches this regex" tests, so we should be careful updating any error messages going forward, or at least consider the cost; I wish there were a better way (standardized error messages as per a spec?) but this is what we have for now...)
The spec tests do have expected error messages and, except for a few exceptions, we match them in
wasmparser
. Does SpiderMonkey also (newly?) do this? Or am I misunderstanding which tests you're talking about?
cfallin commented on Issue #2059:
Ah, I hadn't realized there were standard error messages. I can dig further into why SpiderMonkey doesn't hit issues with this (perhaps the harness is tweaked?) but actually all of the issues I hit were in the SpiderMonkey-specific test suite. An example here matches on a specific "type mismatch: expression has type A but expected B" message;
wasmparser
(version 0.63) emits "type mismatch: expected Some(A), found Some(B)" and A and B are e.g.I32
,FuncRef
rather thani32
,funcref
. (Seems this is just a directDebug
rendering of the Rust type representation.) So I had to tweak a bunch of/a/
regexes to/(a)|(b)/
(because SM still has the old backends). Not ideal, but workable for now.
alexcrichton commented on Issue #2059:
"standard" is a bit of a stretch in that they're not super descriptitive, it's typically "type mismatch" for everything related to a type error and the implementation typically provides more descriptive stuff afterwards. That being said of
Some(...)
is showing up in wasmparser parser errors that's probably a bug on our end where we were too lazy to stringify something and went withformat!("{:?}")
for convenience. We'd be more than happy to update the error messages in wasmparser to be more readable, I don't think they've received too much love previously!It's great to hear though that SpiderMonkey is coming along well so I'm going to carry over the approval from before and go ahead and merge this. Thanks again for the heads up @cfallin!
Last updated: Dec 23 2024 at 12:05 UTC