diff --git a/Cargo.lock b/Cargo.lock index 38e17a29be..9fc0d489e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2032,9 +2032,9 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.52.1" +version = "0.52.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ddb8b596eb158e19625ddfe56a4e74bd176313a75f8d9c1b5159dccff9bb073" +checksum = "733954023c0b39602439e60a65126fd31b003196d3a1e8e4531b055165a79b31" [[package]] name = "wasmprinter" diff --git a/build.rs b/build.rs index e979f918e9..5f9231f3b5 100644 --- a/build.rs +++ b/build.rs @@ -192,6 +192,11 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool { ("simd", "simd_load") => return true, // FIXME Unsupported feature: proposed SIMD operator I8x16Shl ("simd", "simd_splat") => return true, // FIXME Unsupported feature: proposed SIMD operator I8x16ShrS + // not parsed in wasmparser yet + ("simd", "simd_i32x4_arith2") => return true, + ("simd", "simd_i16x8_arith2") => return true, + ("simd", "simd_i8x16_arith2") => return true, + // waiting for the upstream spec to get updated with new binary // encodings of operations and for that to propagate to the // testsuite repo. @@ -203,6 +208,7 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool { ("misc_testsuite", "export_large_signature") | ("spec_testsuite", "call") + | ("spec_testsuite", "func") | ("multi_value", "call") | ("multi_value", "func") => { // FIXME These involves functions with very large stack frames that Cranelift currently diff --git a/crates/api/src/runtime.rs b/crates/api/src/runtime.rs index b9218f2c7b..f1a0b7892a 100644 --- a/crates/api/src/runtime.rs +++ b/crates/api/src/runtime.rs @@ -82,7 +82,7 @@ impl Config { enable_reference_types: false, enable_bulk_memory: false, enable_simd: false, - enable_multi_value: false, + enable_multi_value: true, }, }, flags, @@ -247,16 +247,10 @@ impl Config { /// Configures whether the WebAssembly multi-value proposal will /// be enabled for compilation. /// - /// The [WebAssembly multi-value proposal][proposal] is not - /// currently fully standardized and is undergoing development. - /// Additionally the support in wasmtime itself is still being worked on. - /// Support for this feature can be enabled through this method for - /// appropriate wasm modules. - /// /// This feature gates functions and blocks returning multiple values in a /// module, for example. /// - /// This is `false` by default. + /// This is `true` by default. /// /// [proposal]: https://github.com/webassembly/multi-value pub fn wasm_multi_value(&mut self, enable: bool) -> &mut Self { diff --git a/crates/fuzzing/src/lib.rs b/crates/fuzzing/src/lib.rs index 613912683d..f344e2bf0f 100644 --- a/crates/fuzzing/src/lib.rs +++ b/crates/fuzzing/src/lib.rs @@ -39,7 +39,6 @@ pub(crate) fn fuzz_default_config( config .cranelift_debug_verifier(true) .cranelift_nan_canonicalization(true) - .wasm_multi_value(true) .wasm_bulk_memory(true) .strategy(strategy)?; Ok(config) diff --git a/crates/misc/rust/macro/src/lib.rs b/crates/misc/rust/macro/src/lib.rs index 92c14ae92d..9c980d91bd 100644 --- a/crates/misc/rust/macro/src/lib.rs +++ b/crates/misc/rust/macro/src/lib.rs @@ -53,8 +53,7 @@ fn generate_load(item: &syn::ItemTrait) -> syn::Result { use #root::wasmtime::{Config, Extern, Engine, Store, Instance, Module}; use #root::anyhow::{bail, format_err}; - let engine = Engine::new(Config::new().wasm_multi_value(true)); - let store = Store::new(&engine); + let store = Store::default(); let data = #root::wasmtime_interface_types::ModuleData::new(bytes.as_ref())?; diff --git a/crates/wast/src/wast.rs b/crates/wast/src/wast.rs index 96fbc3ad42..83450bac9e 100644 --- a/crates/wast/src/wast.rs +++ b/crates/wast/src/wast.rs @@ -356,6 +356,8 @@ fn is_matching_assert_invalid_error_message(expected: &str, actual: &str) -> boo // `elem.wast` and `proposals/bulk-memory-operations/elem.wast` disagree // on the expected error message for the same error. || (expected.contains("out of bounds") && actual.contains("does not fit")) + // slight difference in error messages + || (expected.contains("unknown elem segment") && actual.contains("unknown element segment")) } fn extract_lane_as_i8(bytes: u128, lane: usize) -> i8 { diff --git a/examples/multi.c b/examples/multi.c index dfc9eea9a0..0006dd0e5d 100644 --- a/examples/multi.c +++ b/examples/multi.c @@ -61,10 +61,7 @@ wasm_trap_t* closure_callback( int main(int argc, const char* argv[]) { // Initialize. printf("Initializing...\n"); - wasm_config_t *config = wasm_config_new(); - assert(config != NULL); - wasmtime_config_wasm_multi_value_set(config, true); - wasm_engine_t* engine = wasm_engine_new_with_config(config); + wasm_engine_t* engine = wasm_engine_new(); wasm_store_t* store = wasm_store_new(engine); // Load our input file to parse it next diff --git a/examples/multi.rs b/examples/multi.rs index 0a5af63899..2fe75b0311 100644 --- a/examples/multi.rs +++ b/examples/multi.rs @@ -11,11 +11,8 @@ use anyhow::{format_err, Result}; use wasmtime::*; fn main() -> Result<()> { - // Configure our `Store`, but be sure to use a `Config` that enables the - // wasm multi-value feature since it's not stable yet. println!("Initializing..."); - let engine = Engine::new(Config::new().wasm_multi_value(true)); - let store = Store::new(&engine); + let store = Store::default(); // Compile. println!("Compiling module..."); diff --git a/src/lib.rs b/src/lib.rs index 90f8018ec8..6d2241d97d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -114,7 +114,7 @@ struct CommonOptions { /// Enable support for multi-value functions #[structopt(long)] - enable_multi_value: bool, + enable_multi_value: Option, /// Enable support for Wasm threads #[structopt(long)] @@ -176,7 +176,7 @@ impl CommonOptions { .wasm_bulk_memory(self.enable_bulk_memory || self.enable_all) .wasm_simd(self.enable_simd || self.enable_all) .wasm_reference_types(self.enable_reference_types || self.enable_all) - .wasm_multi_value(self.enable_multi_value || self.enable_all) + .wasm_multi_value(self.enable_multi_value.unwrap_or(true) || self.enable_all) .wasm_threads(self.enable_threads || self.enable_all) .cranelift_opt_level(self.opt_level()) .strategy(pick_compilation_strategy(self.cranelift, self.lightbeam)?)? diff --git a/tests/all/wast.rs b/tests/all/wast.rs index a95cebe2a0..8e3ed9743c 100644 --- a/tests/all/wast.rs +++ b/tests/all/wast.rs @@ -18,13 +18,10 @@ fn run_wast(wast: &str, strategy: Strategy) -> anyhow::Result<()> { // by reference types. let reftypes = simd || wast.iter().any(|s| s == "reference-types"); - let multi_val = wast.iter().any(|s| s == "multi-value"); - let mut cfg = Config::new(); cfg.wasm_simd(simd) .wasm_bulk_memory(bulk_mem) .wasm_reference_types(reftypes) - .wasm_multi_value(multi_val) .strategy(strategy)? .cranelift_debug_verifier(true); diff --git a/tests/spec_testsuite b/tests/spec_testsuite index c70c3c8b13..da56298ddd 160000 --- a/tests/spec_testsuite +++ b/tests/spec_testsuite @@ -1 +1 @@ -Subproject commit c70c3c8b136e5e7193135d40ec3960f4ef1cb20a +Subproject commit da56298dddb441d1af38492ee98fe001e625d156