Stream: git-wasmtime

Topic: wasmtime / PR #13970 winch: run spec suite with unsupport...


view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 22:42):

macovedj edited PR #13970.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 22:42):

:thumbs_up: cfallin submitted PR review:

This seems reasonable to me -- thanks. Will merge once earlier PR merges and this rebases.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 22:44):

alexcrichton commented on PR #13970:

Thanks again for the work on Winch & simd here, it's much appreciated! I'd ideally like to keep Winch/engine-specific logic out of the test config as much as possible as it otherwise makes it more difficult to update/understand over time. What I might recommend for this is making our "figure out configuration for spec tests" function a bit fancier than it is right now, as opposed to enabling all the features for all the tests. One example is this:

diff --git a/crates/test-util/src/wast.rs b/crates/test-util/src/wast.rs
index 983b315ee2..2dd8e8a256 100644
--- a/crates/test-util/src/wast.rs
+++ b/crates/test-util/src/wast.rs
@@ -149,18 +149,73 @@ fn spec_test_config(test: &Path) -> TestConfig {
             ret.custom_descriptors = Some(true);
         }
         Some(proposal) => panic!("unsupported proposal {proposal:?}"),
+
+        // The rough goal here is to enable a minimal set of features for the
+        // spec test `test_name` in question. The fewer features required the
+        // more configurations this can run on. For example Winch doesn't
+        // currently support GC but it can still run all the simd tests which
+        // don't use GC. In general the upstream spec tests are not silo'd by
+        // feature meaning that one test probably requires a whole bunch of
+        // proposals. The tests are also quite large meaning the entire test
+        // may not need a particular feature, but there's not much we can do
+        // about that.
+        //
+        // What follows is a coarse algorithm of guessing, based on a tests's
+        // name, what features are needed. The upstream spec test suite is a
+        // frozen commit in a git submodule within this repo meaning that
+        // this should work but will need updates when new tests are added or
+        // preexisting tests are changed.
         None => {
+            let test_name = test.file_name().unwrap().to_str().unwrap();
             ret.reference_types = Some(true);
-            ret.simd = Some(true);
-            ret.simd = Some(true);
-            ret.relaxed_simd = Some(true);
             ret.multi_memory = Some(true);
-            ret.gc = Some(true);
-            ret.reference_types = Some(true);
-            ret.memory64 = Some(true);
-            ret.tail_call = Some(true);
-            ret.extended_const = Some(true);
-            ret.exceptions = Some(true);
+            if test_name.contains("simd") {
+                ret.simd = Some(true);
+            }
+            if test_name.contains("relaxed") {
+                ret.relaxed_simd = Some(true);
+            }
+            if test_name.contains("64") || test_name.contains("mixed") {
+                ret.memory64 = Some(true);
+            }
+            if test_name.contains("ref")
+                || test_name.contains("array")
+                || test_name.contains("struct")
+                || test_name.contains("table")
+                || test_name.contains("type")
+                || test_name.contains("tag")
+                || test_name.contains("extern")
+                || test_name.contains("br_on_")
+                || test_name.contains("linking")
+                || test_name.contains("instance")
+                || test_name.contains("local_init")
+                || test_name.contains("elem")
+                || test_name.contains("global")
+                || test_name.contains("i31")
+                || test_name.contains("unreached-valid")
+                || test_name.contains("select")
+                || test_name.contains("data")
+            {
+                ret.gc = Some(true);
+            }
+            if test_name.contains("return_") || test_name.contains("try_table") {
+                ret.tail_call = Some(true);
+            }
+            if test_name.contains("tag")
+                || test_name.contains("try_table")
+                || test_name.contains("throw")
+                || test_name.contains("ref")
+                || test_name.contains("instance")
+                || test_name.contains("imports")
+            {
+                ret.exceptions = Some(true);
+            }
+            if test_name.contains("global")
+                || test_name.contains("elem")
+                || test_name.contains("data")
+            {
+                ret.extended_const = Some(true);
+            }

             if test.parent().unwrap().ends_with("legacy") {
                 ret.legacy_exceptions = Some(true);

where that attempts to selectively enable features for tests that require it (using bad filename-guessing heuristics). Personally I'd prefer this over adding Winch-specific logic or having to list out spec tests that Winch explicitly doesn't pass

view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 22:56):

macovedj updated PR #13970.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 22:58):

:thumbs_up: alexcrichton submitted PR review.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 23:57):

macovedj updated PR #13970.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 23:59):

:thumbs_up: alexcrichton submitted PR review.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 24 2026 at 23:59):

alexcrichton has enabled auto merge for PR #13970.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 00:06):

alexcrichton added PR #13970 winch: run spec suite with unsupported features disabled to the merge queue.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 00:26):

macovedj updated PR #13970.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 00:33):

github-merge-queue[bot] removed PR #13970 winch: run spec suite with unsupported features disabled from the merge queue.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 00:47):

alexcrichton added PR #13970 winch: run spec suite with unsupported features disabled to the merge queue.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 01:12):

github-merge-queue[bot] removed PR #13970 winch: run spec suite with unsupported features disabled from the merge queue.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 02:34):

github-actions[bot] added the label wasmtime:docs on PR #13970.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 27 2026 at 14:17):

alexcrichton added PR #13970 winch: run spec suite with unsupported features disabled to the merge queue.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 27 2026 at 14:45):

:check: alexcrichton merged PR #13970.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 27 2026 at 14:45):

alexcrichton removed PR #13970 winch: run spec suite with unsupported features disabled from the merge queue.


Last updated: Jul 29 2026 at 05:03 UTC