macovedj edited PR #13970.
:thumbs_up: cfallin submitted PR review:
This seems reasonable to me -- thanks. Will merge once earlier PR merges and this rebases.
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
macovedj updated PR #13970.
:thumbs_up: alexcrichton submitted PR review.
macovedj updated PR #13970.
:thumbs_up: alexcrichton submitted PR review.
alexcrichton has enabled auto merge for PR #13970.
alexcrichton added PR #13970 winch: run spec suite with unsupported features disabled to the merge queue.
macovedj updated PR #13970.
github-merge-queue[bot] removed PR #13970 winch: run spec suite with unsupported features disabled from the merge queue.
alexcrichton added PR #13970 winch: run spec suite with unsupported features disabled to the merge queue.
github-merge-queue[bot] removed PR #13970 winch: run spec suite with unsupported features disabled from the merge queue.
github-actions[bot] added the label wasmtime:docs on PR #13970.
alexcrichton added PR #13970 winch: run spec suite with unsupported features disabled to the merge queue.
:check: alexcrichton merged PR #13970.
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