From b70e1c204c1574dfc0d662bfb02ea3ee55dda987 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Fri, 15 May 2026 10:54:48 -0700 Subject: [PATCH 1/9] Update the wasm-tools family of crates to version 249 --- Cargo.lock | 140 +++++++++--------- Cargo.toml | 24 +-- crates/environ/src/component/translate.rs | 21 ++- .../environ/src/component/translate/inline.rs | 6 +- crates/environ/src/component/types_builder.rs | 27 ++-- .../src/component/types_builder/resources.rs | 2 +- .../code_builder/compile_time_builtins.rs | 4 +- crates/wizer/src/component/rewrite.rs | 2 +- tests/all/component_model/bindgen.rs | 2 +- tests/all/component_model/func.rs | 4 +- .../async/backpressure-deadlock.wast | 2 +- .../async/callback-yield-then-exit.wast | 2 +- .../component-model/async/drop-deadlock.wast | 2 +- .../component-model/async/fused.wast | 8 +- .../component-model/async/future-read.wast | 3 +- .../component-model/async/lift.wast | 2 +- .../component-model/async/lower.wast | 2 +- .../component-model/async/reentrance.wast | 8 +- .../component-model/async/stackful.wast | 8 +- .../async/streams-massive-send.wast | 4 +- .../async/task-return-traps.wast | 14 +- 21 files changed, 141 insertions(+), 146 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e9584eae852b..1c8350e3fe86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,7 +645,7 @@ dependencies = [ "test-programs-artifacts", "tokio", "wasm-compose", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmtime", "wasmtime-wasi", ] @@ -2253,14 +2253,14 @@ dependencies = [ [[package]] name = "json-from-wast" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692e5e6883558fb83746e7ab1da0d94a69b31286f88ecaa9ce6add0f269da0b6" +checksum = "37f89300ae0e8a5a1d462beb0549078ff0e6a592f26d75350e667c70dccc9cec" dependencies = [ "anyhow", "serde", "serde_derive", - "wast 248.0.0", + "wast 249.0.0", ] [[package]] @@ -3821,7 +3821,7 @@ dependencies = [ "wasmtime", "wasmtime-test-util", "wat", - "wit-component 0.248.0", + "wit-component 0.249.0", ] [[package]] @@ -4291,7 +4291,7 @@ name = "verify-component-adapter" version = "46.0.0" dependencies = [ "anyhow", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wat", ] @@ -4399,7 +4399,7 @@ dependencies = [ "byte-array-literals", "object 0.39.0", "wasip1", - "wasm-encoder 0.248.0", + "wasm-encoder 0.249.0", "wit-bindgen-rust-macro 0.57.0", ] @@ -4484,9 +4484,9 @@ checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" [[package]] name = "wasm-compose" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba953e2b9b4b4b52a31cf4e3ee1c1374c872b6e012cf2138d1c37cba00bfd6" +checksum = "210c8e8da7a8d3ef8280c72ffcb32289c8354d905033b3daa6333a57c17b5181" dependencies = [ "anyhow", "heck 0.5.0", @@ -4494,8 +4494,8 @@ dependencies = [ "log", "petgraph", "smallvec 1.15.1", - "wasm-encoder 0.248.0", - "wasmparser 0.248.0", + "wasm-encoder 0.249.0", + "wasmparser 0.249.0", "wat", ] @@ -4521,12 +4521,12 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac92cf547bc18d27ecc521015c08c353b4f18b84ab388bb6d1b6b682c620d9b6" +checksum = "69830ccbbf41c55eb585991659fb70867ef628193af3a495f09a6956f7615e59" dependencies = [ "leb128fmt", - "wasmparser 0.248.0", + "wasmparser 0.249.0", ] [[package]] @@ -4555,42 +4555,42 @@ dependencies = [ [[package]] name = "wasm-metadata" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4f85f11dcdabc91e805c03eb84ccc7b7ef2282c6610bb83c7a7c853425850c" +checksum = "bf6f124f965aeeec4ed97f7176a7bb2c862f550d098d488ff258db2867893894" dependencies = [ "anyhow", "indexmap 2.14.0", - "wasm-encoder 0.248.0", - "wasmparser 0.248.0", + "wasm-encoder 0.249.0", + "wasmparser 0.249.0", ] [[package]] name = "wasm-mutate" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6210f23d92145ecdbc04e27d4b570714148e45c61db913f1f69a38fe80fb61d7" +checksum = "bf42997760f4823609a837dd3433b3abe174ec265fe7ed4b1a4a704e32c033fb" dependencies = [ "egg", "log", "rand 0.10.1", "thiserror 2.0.17", - "wasm-encoder 0.248.0", - "wasmparser 0.248.0", + "wasm-encoder 0.249.0", + "wasmparser 0.249.0", ] [[package]] name = "wasm-smith" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "050b559c1cec6dd6b9a558ae984d91d61e5e7b4c3e47081305a13efe6869eea0" +checksum = "bbd31d0a3861a8eb5c19024a1ee39a7c805151c44074a19a416599ff25b0540a" dependencies = [ "anyhow", "arbitrary", "flagset", "serde", "serde_derive", - "wasm-encoder 0.248.0", + "wasm-encoder 0.249.0", "wat", ] @@ -4604,13 +4604,13 @@ dependencies = [ [[package]] name = "wasm-wave" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8c928a58132ecc6a4daee3795bb3560702436f6516b5f8c5b3086113031e76" +checksum = "90b6425ded10a93d45df352b941eebf8891ba30ddee9233e21cbe23de4fefbbe" dependencies = [ "logos", "thiserror 2.0.17", - "wit-parser 0.248.0", + "wit-parser 0.249.0", ] [[package]] @@ -4689,9 +4689,9 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4439c5eee9df71ee0c6efb37f63b1fcb1fec38f85f5142c54e7ed05d33091a" +checksum = "30538cae9a794215f490b532df01c557e2e2bfac92569482554acd0992a102ea" dependencies = [ "bitflags 2.11.1", "hashbrown 0.17.0", @@ -4702,13 +4702,13 @@ dependencies = [ [[package]] name = "wasmprinter" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b264a5410b008d4d199a92bf536eae703cbd614482fc1ec53831cf19e1c183" +checksum = "a4e227e800fc74c0d60117391f71d60e4c956333cfc3be796ae72d269002aa52" dependencies = [ "anyhow", "termcolor", - "wasmparser 0.248.0", + "wasmparser 0.249.0", ] [[package]] @@ -4751,9 +4751,9 @@ dependencies = [ "tempfile", "tokio", "wasm-compose", - "wasm-encoder 0.248.0", + "wasm-encoder 0.249.0", "wasm-wave", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmtime-environ", "wasmtime-internal-cache", "wasmtime-internal-component-macro", @@ -4864,8 +4864,8 @@ dependencies = [ "tracing", "walkdir", "wasi-common", - "wasm-encoder 0.248.0", - "wasmparser 0.248.0", + "wasm-encoder 0.249.0", + "wasmparser 0.249.0", "wasmprinter", "wasmtime", "wasmtime-cli-flags", @@ -4888,10 +4888,10 @@ dependencies = [ "wasmtime-wasi-tls", "wasmtime-wast", "wasmtime-wizer", - "wast 248.0.0", + "wast 249.0.0", "wat", "windows-sys 0.61.2", - "wit-component 0.248.0", + "wit-component 0.249.0", ] [[package]] @@ -4934,8 +4934,8 @@ dependencies = [ "sha2", "smallvec 1.15.1", "target-lexicon", - "wasm-encoder 0.248.0", - "wasmparser 0.248.0", + "wasm-encoder 0.249.0", + "wasmparser 0.249.0", "wasmprinter", "wasmtime-internal-component-util", "wasmtime-internal-core", @@ -4949,7 +4949,7 @@ dependencies = [ "arbitrary", "env_logger 0.11.5", "libfuzzer-sys", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmprinter", "wasmtime-environ", "wasmtime-test-util", @@ -4981,7 +4981,7 @@ dependencies = [ "rand 0.10.1", "smallvec 1.15.1", "target-lexicon", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmtime", "wasmtime-fuzzing", "wasmtime-test-util", @@ -5008,12 +5008,12 @@ dependencies = [ "tempfile", "tokio", "v8", - "wasm-encoder 0.248.0", + "wasm-encoder 0.249.0", "wasm-mutate", "wasm-smith", "wasm-spec-interpreter", "wasmi", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmprinter", "wasmtime", "wasmtime-cli-flags", @@ -5070,7 +5070,7 @@ dependencies = [ "wasmtime", "wasmtime-internal-component-util", "wasmtime-internal-wit-bindgen", - "wit-parser 0.248.0", + "wit-parser 0.249.0", ] [[package]] @@ -5105,7 +5105,7 @@ dependencies = [ "smallvec 1.15.1", "target-lexicon", "thiserror 2.0.17", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmtime-environ", "wasmtime-internal-core", "wasmtime-internal-unwinder", @@ -5222,7 +5222,7 @@ dependencies = [ "log", "object 0.39.0", "target-lexicon", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmtime-environ", "wasmtime-internal-cranelift", "winch-codegen", @@ -5236,7 +5236,7 @@ dependencies = [ "bitflags 2.11.1", "heck 0.5.0", "indexmap 2.14.0", - "wit-parser 0.248.0", + "wit-parser 0.249.0", ] [[package]] @@ -5269,7 +5269,7 @@ dependencies = [ "serde_derive", "target-lexicon", "toml", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmprinter", "wasmtime", "wasmtime-environ", @@ -5435,9 +5435,9 @@ dependencies = [ "object 0.39.0", "serde_json", "tokio", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmtime", - "wast 248.0.0", + "wast 249.0.0", ] [[package]] @@ -5451,8 +5451,8 @@ dependencies = [ "rayon", "test-programs-artifacts", "tokio", - "wasm-encoder 0.248.0", - "wasmparser 0.248.0", + "wasm-encoder 0.249.0", + "wasmparser 0.249.0", "wasmprinter", "wasmtime", "wasmtime-wasi", @@ -5470,25 +5470,25 @@ dependencies = [ [[package]] name = "wast" -version = "248.0.0" +version = "249.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc54622ed5a5cddafcdf152043f9d4aed54d4a653d686b7dfe874809fca99d7" +checksum = "2474a321bf9ae2808e9fa23ac4ec2b27300e70985e30bcb5a38d43b76bfc901a" dependencies = [ "bumpalo", "gimli 0.32.3", "leb128fmt", "memchr", "unicode-width 0.2.0", - "wasm-encoder 0.248.0", + "wasm-encoder 0.249.0", ] [[package]] name = "wat" -version = "1.248.0" +version = "1.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75cd9e510603909748e6ebab89f27cd04472c1d9d85a3c88a7a6fc51a1a7934" +checksum = "28af699d0a9c7e4e250b7b8e36167ae5215fbb4b7ae526bb4ce7b234ba0afc90" dependencies = [ - "wast 248.0.0", + "wast 249.0.0", ] [[package]] @@ -5615,7 +5615,7 @@ dependencies = [ "smallvec 1.15.1", "target-lexicon", "thiserror 2.0.17", - "wasmparser 0.248.0", + "wasmparser 0.249.0", "wasmtime-environ", "wasmtime-internal-core", "wasmtime-internal-cranelift", @@ -6011,9 +6011,9 @@ dependencies = [ [[package]] name = "wit-component" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0012379f0ff47e1d44dd312e76cfa42de2589251f093fb105e9de9db90c89221" +checksum = "d66a8d940b203e145ddd71f7790118f4ae17f240c670a3b80fe3c2373d7c0e57" dependencies = [ "anyhow", "bitflags 2.11.1", @@ -6022,10 +6022,10 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "wasm-encoder 0.248.0", - "wasm-metadata 0.248.0", - "wasmparser 0.248.0", - "wit-parser 0.248.0", + "wasm-encoder 0.249.0", + "wasm-metadata 0.249.0", + "wasmparser 0.249.0", + "wit-parser 0.249.0", ] [[package]] @@ -6067,9 +6067,9 @@ dependencies = [ [[package]] name = "wit-parser" -version = "0.248.0" +version = "0.249.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "247ad505da2915a082fe13204c5ba8788425aea1de54f43b284818cf82637856" +checksum = "50840f2e2cf170d910858089d7dfb3e97c6f9a0d6ec7bff7f7cc28f5aeacc15f" dependencies = [ "anyhow", "hashbrown 0.17.0", @@ -6081,7 +6081,7 @@ dependencies = [ "serde_derive", "serde_json", "unicode-xid", - "wasmparser 0.248.0", + "wasmparser 0.249.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index dd3525492496..d71faafa0b06 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -351,18 +351,18 @@ wit-bindgen = { version = "0.57.0", default-features = false } wit-bindgen-rust-macro = { version = "0.57.0", default-features = false } # wasm-tools family: -wasmparser = { version = "0.248.0", default-features = false, features = ['simd'] } -wat = "1.248.0" -wast = "248.0.0" -wasmprinter = "0.248.0" -wasm-encoder = "0.248.0" -wasm-smith = "0.248.0" -wasm-mutate = "0.248.0" -wit-parser = "0.248.0" -wit-component = "0.248.0" -wasm-wave = "0.248.0" -wasm-compose = { version = "0.248.0", default-features = false } -json-from-wast = "0.248.0" +wasmparser = { version = "0.249.0", default-features = false, features = ['simd'] } +wat = "1.249.0" +wast = "249.0.0" +wasmprinter = "0.249.0" +wasm-encoder = "0.249.0" +wasm-smith = "0.249.0" +wasm-mutate = "0.249.0" +wit-parser = "0.249.0" +wit-component = "0.249.0" +wasm-wave = "0.249.0" +wasm-compose = { version = "0.249.0", default-features = false } +json-from-wast = "0.249.0" wstd = "0.6.5" wasip2 = "1.0" diff --git a/crates/environ/src/component/translate.rs b/crates/environ/src/component/translate.rs index c3772dd0b255..ce9478449d32 100644 --- a/crates/environ/src/component/translate.rs +++ b/crates/environ/src/component/translate.rs @@ -18,7 +18,7 @@ use wasmparser::component_types::{ ComponentFuncTypeId, ComponentInstanceTypeId, ComponentValType, }; use wasmparser::types::Types; -use wasmparser::{Chunk, ComponentImportName, Encoding, Parser, Payload, Validator}; +use wasmparser::{Chunk, ComponentExternName, Encoding, Parser, Payload, Validator}; mod adapt; pub use self::adapt::*; @@ -176,7 +176,7 @@ struct Translation<'data> { // is straight from `wasmparser`'s passes. enum LocalInitializer<'data> { // imports - Import(ComponentImportName<'data>, ComponentEntityType), + Import(ComponentExternName<'data>, ComponentEntityType), // An import of an intrinsic for compile-time builtins. IntrinsicsImport, @@ -767,12 +767,10 @@ impl<'a, 'data> Translator<'a, 'data> { for import in s { let import = import?; let types = self.validator.types(0).unwrap(); - let ty = types - .component_entity_type_of_import(import.name.0) - .unwrap(); + let ty = types.component_item_for_import(import.name.name).unwrap().ty; - if self.is_unsafe_intrinsics_import(import.name.0) { - self.check_unsafe_intrinsics_import(import.name.0, ty)?; + if self.is_unsafe_intrinsics_import(import.name.name) { + self.check_unsafe_intrinsics_import(import.name.name, ty)?; self.result .initializers .push(LocalInitializer::IntrinsicsImport); @@ -1309,7 +1307,7 @@ impl<'a, 'data> Translator<'a, 'data> { for export in s { let export = export?; let item = self.kind_to_item(export.kind, export.index)?; - let prev = self.result.exports.insert(export.name.0, item); + let prev = self.result.exports.insert(export.name.name, item); assert!(prev.is_none()); self.result .initializers @@ -1451,7 +1449,7 @@ impl<'a, 'data> Translator<'a, 'data> { let mut map = HashMap::with_capacity(exports.len()); for export in exports { let idx = self.kind_to_item(export.kind, export.index)?; - map.insert(export.name.0, idx); + map.insert(export.name.name, idx); } Ok(LocalInitializer::ComponentSynthetic(map, ty)) @@ -1487,6 +1485,7 @@ impl<'a, 'data> Translator<'a, 'data> { let ty = types.component_any_type_at(index); ComponentItem::Type(ty) } + }) } @@ -1662,13 +1661,13 @@ impl<'a, 'data> Translator<'a, 'data> { ); for (name, ty) in &instance_ty.exports { - let ComponentEntityType::Func(func_ty) = ty else { + let ComponentEntityType::Func(func_ty) = ty.ty else { bail!( "bad unsafe intrinsics import: imported instance `{import}` must \ only export functions" ) }; - let func_ty = &types[*func_ty]; + let func_ty = &types[func_ty]; fn ty_eq(a: &InterfaceType, b: &wasmparser::component_types::ComponentValType) -> bool { use wasmparser::{PrimitiveValType as P, component_types::ComponentValType as C}; diff --git a/crates/environ/src/component/translate/inline.rs b/crates/environ/src/component/translate/inline.rs index 8d01cc5503c1..5be02df21e76 100644 --- a/crates/environ/src/component/translate/inline.rs +++ b/crates/environ/src/component/translate/inline.rs @@ -114,9 +114,9 @@ pub(super) fn run( if let TypeDef::Interface(_) = ty { continue; } - let index = inliner.result.import_types.push((name.0.to_string(), ty)); + let index = inliner.result.import_types.push((name.name.to_string(), ty)); let path = ImportPath::root(index); - args.insert(name.0, ComponentItemDef::from_import(path, ty)?); + args.insert(name.name, ComponentItemDef::from_import(path, ty)?); } // This will run the inliner to completion after being seeded with the @@ -441,7 +441,7 @@ impl<'a> Inliner<'a> { // was provided as an import at the instantiation-site to what was // needed during the component's instantiation. Import(name, ty) => { - let arg = match frame.args.get(name.0) { + let arg = match frame.args.get(name.name) { Some(arg) => arg, // Not all arguments need to be provided for instantiation, diff --git a/crates/environ/src/component/types_builder.rs b/crates/environ/src/component/types_builder.rs index 94ad80c324e4..0b225d9d3a8f 100644 --- a/crates/environ/src/component/types_builder.rs +++ b/crates/environ/src/component/types_builder.rs @@ -325,18 +325,16 @@ impl ComponentTypesBuilder { let ty = &types[id]; let mut result = TypeComponent::default(); for (name, ty) in ty.imports.iter() { - self.register_abstract_component_entity_type(types, *ty); - result.imports.insert( - name.clone(), - self.convert_component_entity_type(types, *ty)?, - ); + self.register_abstract_component_entity_type(types, ty.ty); + result + .imports + .insert(name.clone(), self.convert_component_entity_type(types, ty.ty)?); } for (name, ty) in ty.exports.iter() { - self.register_abstract_component_entity_type(types, *ty); - result.exports.insert( - name.clone(), - self.convert_component_entity_type(types, *ty)?, - ); + self.register_abstract_component_entity_type(types, ty.ty); + result + .exports + .insert(name.clone(), self.convert_component_entity_type(types, ty.ty)?); } Ok(self.component_types.components.push(result)) } @@ -350,11 +348,10 @@ impl ComponentTypesBuilder { let ty = &types[id]; let mut result = TypeComponentInstance::default(); for (name, ty) in ty.exports.iter() { - self.register_abstract_component_entity_type(types, *ty); - result.exports.insert( - name.clone(), - self.convert_component_entity_type(types, *ty)?, - ); + self.register_abstract_component_entity_type(types, ty.ty); + result + .exports + .insert(name.clone(), self.convert_component_entity_type(types, ty.ty)?); } Ok(self.component_types.component_instances.push(result)) } diff --git a/crates/environ/src/component/types_builder/resources.rs b/crates/environ/src/component/types_builder/resources.rs index c423104bf49c..7cec292d9cd2 100644 --- a/crates/environ/src/component/types_builder/resources.rs +++ b/crates/environ/src/component/types_builder/resources.rs @@ -247,7 +247,7 @@ impl ResourcesBuilder { let ty = &types[id]; for (name, ty) in ty.exports.iter() { path.push(name); - self.register_component_entity_type_(types, *ty, path, register); + self.register_component_entity_type_(types, ty.ty, path, register); path.pop(); } } diff --git a/crates/wasmtime/src/compile/code_builder/compile_time_builtins.rs b/crates/wasmtime/src/compile/code_builder/compile_time_builtins.rs index dd572d893263..aaf111ccb1df 100644 --- a/crates/wasmtime/src/compile/code_builder/compile_time_builtins.rs +++ b/crates/wasmtime/src/compile/code_builder/compile_time_builtins.rs @@ -89,13 +89,13 @@ impl<'a> CodeBuilder<'a> { // unfortunately the `wasm-compose` API is not powerful // enough for us to do all that. ensure!( - imp.name.0 != intrinsics_import, + imp.name.name != intrinsics_import, "main Wasm cannot import the unsafe intrinsics (`{intrinsics_import}`) \ when using compile-time builtins" ); if let wasmparser::ComponentTypeRef::Instance(_) = imp.ty { - instance_imports.insert(imp.name.0); + instance_imports.insert(imp.name.name); } } } diff --git a/crates/wizer/src/component/rewrite.rs b/crates/wizer/src/component/rewrite.rs index 4f7c5fc631e0..7a2de6658fc3 100644 --- a/crates/wizer/src/component/rewrite.rs +++ b/crates/wizer/src/component/rewrite.rs @@ -236,7 +236,7 @@ impl ReencodeComponent for Reencoder<'_> { ) -> Result<(), Error> { for export in section { let export = export?; - if !self.wizer.get_keep_init_func() && export.name.0 == self.wizer.get_init_func() { + if !self.wizer.get_keep_init_func() && export.name.name == self.wizer.get_init_func() { self.removed_func = Some(self.funcs); } else { if export.kind == wasmparser::ComponentExternalKind::Func { diff --git a/tests/all/component_model/bindgen.rs b/tests/all/component_model/bindgen.rs index 22adebfb793f..5df31dc32dd9 100644 --- a/tests/all/component_model/bindgen.rs +++ b/tests/all/component_model/bindgen.rs @@ -108,7 +108,7 @@ mod no_imports_concurrent { (with "" (instance (export "task.return" (func $task-return)))) )) - (func $f (export "bar") + (func $f (export "bar") async (canon lift (core func $i "bar") async (callback (func $i "callback"))) ) diff --git a/tests/all/component_model/func.rs b/tests/all/component_model/func.rs index 59c6c1119568..819aa99f6f09 100644 --- a/tests/all/component_model/func.rs +++ b/tests/all/component_model/func.rs @@ -908,7 +908,7 @@ async fn test_many_parameters(dynamic: bool, concurrent: bool) -> Result<()> { (with "libc" (instance $libc)) )) - (type $t (func + (type $t (func async (param "p1" s8) ;; offset 0, size 1 (param "p2" u64) ;; offset 8, size 8 (param "p3" float32) ;; offset 16, size 4 @@ -1379,7 +1379,7 @@ async fn test_many_results(dynamic: bool, concurrent: bool) -> Result<()> { (with "libc" (instance $libc)) )) - (type $t (func (result $tuple))) + (type $t (func async (result $tuple))) (func (export "many-results") (type $t) (canon lift (core func $i "foo") diff --git a/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast b/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast index 06e6df3df447..3d90ed4dbb70 100644 --- a/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast +++ b/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast @@ -33,7 +33,7 @@ )) (func (export "turn-on-backpressure") (canon lift (core func $i "turn-on-backpressure"))) - (func (export "f") + (func (export "f") async (canon lift (core func $i "f") async (callback (func $i "callback")))) ) (instance $A (instantiate $A)) diff --git a/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast b/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast index 6e83efd251ea..a85ebafeb398 100644 --- a/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast +++ b/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast @@ -21,7 +21,7 @@ (with "" (instance (export "task.return" (func $task.return)))) )) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo") async (callback (func $i "callback"))) ) ) diff --git a/tests/misc_testsuite/component-model/async/drop-deadlock.wast b/tests/misc_testsuite/component-model/async/drop-deadlock.wast index 2d7b77dde6a3..98ad9eef3beb 100644 --- a/tests/misc_testsuite/component-model/async/drop-deadlock.wast +++ b/tests/misc_testsuite/component-model/async/drop-deadlock.wast @@ -17,7 +17,7 @@ (func (export "set-backpressure") (canon lift (core func $i "set-backpressure"))) - (func (export "target") + (func (export "target") async (canon lift (core func $i "target") async (callback (func $i "callback")))) ) diff --git a/tests/misc_testsuite/component-model/async/fused.wast b/tests/misc_testsuite/component-model/async/fused.wast index c0a3f3ff8691..81f5090a209d 100644 --- a/tests/misc_testsuite/component-model/async/fused.wast +++ b/tests/misc_testsuite/component-model/async/fused.wast @@ -20,13 +20,13 @@ (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo") async (callback (func $i "callback"))) ) ) (component $lowerer - (import "a" (func $foo (param "p1" u32) (result u32))) + (import "a" (func $foo async (param "p1" u32) (result u32))) (core module $libc (memory (export "memory") 1)) (core instance $libc (instantiate $libc)) (core func $foo (canon lower (func $foo) async (memory $libc "memory"))) @@ -117,13 +117,13 @@ (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo") async (callback (func $i "callback"))) ) ) (component $lowerer - (import "a" (func $foo (param "p1" u32) (result u32))) + (import "a" (func $foo async (param "p1" u32) (result u32))) (core func $foo (canon lower (func $foo))) (core module $m (import "" "foo" (func $foo (param i32) (result i32))) diff --git a/tests/misc_testsuite/component-model/async/future-read.wast b/tests/misc_testsuite/component-model/async/future-read.wast index d936369185cf..fa82bcb0dd59 100644 --- a/tests/misc_testsuite/component-model/async/future-read.wast +++ b/tests/misc_testsuite/component-model/async/future-read.wast @@ -220,7 +220,7 @@ (export "return" (func $return)) )) )) - (func (export "run") (param "x" $future) + (func (export "run") async (param "x" $future) (canon lift (core func $i "run") async (callback (func $i "cb")))) ) (instance $child (instantiate $child)) @@ -257,4 +257,3 @@ ) (assert_return (invoke "run")) - diff --git a/tests/misc_testsuite/component-model/async/lift.wast b/tests/misc_testsuite/component-model/async/lift.wast index b91ab0d279a2..1ee381e24374 100644 --- a/tests/misc_testsuite/component-model/async/lift.wast +++ b/tests/misc_testsuite/component-model/async/lift.wast @@ -9,7 +9,7 @@ ) (core instance $i (instantiate $m)) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo") async (callback (func $i "callback"))) ) ) diff --git a/tests/misc_testsuite/component-model/async/lower.wast b/tests/misc_testsuite/component-model/async/lower.wast index bcb4862fc8b4..a58509b044e4 100644 --- a/tests/misc_testsuite/component-model/async/lower.wast +++ b/tests/misc_testsuite/component-model/async/lower.wast @@ -2,7 +2,7 @@ ;; async lower (component - (import "host-echo-u32" (func $foo (param "p1" u32) (result u32))) + (import "host-echo-u32" (func $foo async (param "p1" u32) (result u32))) (core module $libc (memory (export "memory") 1)) (core instance $libc (instantiate $libc)) (core func $foo (canon lower (func $foo) async (memory $libc "memory"))) diff --git a/tests/misc_testsuite/component-model/async/reentrance.wast b/tests/misc_testsuite/component-model/async/reentrance.wast index 65707f13294d..197798e7ccce 100644 --- a/tests/misc_testsuite/component-model/async/reentrance.wast +++ b/tests/misc_testsuite/component-model/async/reentrance.wast @@ -14,12 +14,12 @@ (core instance $shim (instantiate $shim (with "" (instance (export "task.return" (func $task-return)))) )) - (func $shim-export (param "p1" u32) (result u32) + (func $shim-export async (param "p1" u32) (result u32) (canon lift (core func $shim "export") async (callback (func $shim "callback"))) ) (component $inner - (import "import" (func $import (param "p1" u32) (result u32))) + (import "import" (func $import async (param "p1" u32) (result u32))) (core module $libc (memory (export "memory") 1)) (core instance $libc (instantiate $libc)) (core func $import (canon lower (func $import) async (memory $libc "memory"))) @@ -46,7 +46,7 @@ )) (with "libc" (instance $libc)) )) - (func (export "export") (param "p1" u32) (result u32) + (func (export "export") async (param "p1" u32) (result u32) (canon lift (core func $i "export") async (callback (func $i "callback"))) ) ) @@ -84,7 +84,7 @@ )) (with "libc" (instance $libc)) )) - (func (export "export") (param "p1" u32) (result u32) + (func (export "export") async (param "p1" u32) (result u32) (canon lift (core func $donut "export") async (callback (func $donut "callback"))) ) ) diff --git a/tests/misc_testsuite/component-model/async/stackful.wast b/tests/misc_testsuite/component-model/async/stackful.wast index c1e9250cfa0b..fc729096081d 100644 --- a/tests/misc_testsuite/component-model/async/stackful.wast +++ b/tests/misc_testsuite/component-model/async/stackful.wast @@ -11,7 +11,7 @@ ) (core instance $i (instantiate $m)) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo") async) ) ) @@ -28,13 +28,13 @@ (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo") async) ) ) (component $lowerer - (import "a" (func $foo (param "p1" u32) (result u32))) + (import "a" (func $foo async (param "p1" u32) (result u32))) (core module $libc (memory (export "memory") 1)) (core instance $libc (instantiate $libc)) (core func $foo (canon lower (func $foo) async (memory $libc "memory"))) @@ -76,7 +76,7 @@ (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo") async) ) ) diff --git a/tests/misc_testsuite/component-model/async/streams-massive-send.wast b/tests/misc_testsuite/component-model/async/streams-massive-send.wast index 9b6b60333129..469602247902 100644 --- a/tests/misc_testsuite/component-model/async/streams-massive-send.wast +++ b/tests/misc_testsuite/component-model/async/streams-massive-send.wast @@ -156,10 +156,10 @@ )) )) - (func (export "big-stream") (result $s) + (func (export "big-stream") async (result $s) (canon lift (core func $m "big-stream") async (callback (func $m "cb")))) - (func (export "big-future") (result $f) + (func (export "big-future") async (result $f) (canon lift (core func $m "big-future") async (callback (func $m "cb")))) ) diff --git a/tests/misc_testsuite/component-model/async/task-return-traps.wast b/tests/misc_testsuite/component-model/async/task-return-traps.wast index 9d483b055828..1f8c5df9fdf5 100644 --- a/tests/misc_testsuite/component-model/async/task-return-traps.wast +++ b/tests/misc_testsuite/component-model/async/task-return-traps.wast @@ -14,7 +14,7 @@ (core instance $i (instantiate $m (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (canon lift (core func $i "foo") async (callback (func $i "callback")))) + (func (export "foo") async (canon lift (core func $i "foo") async (callback (func $i "callback")))) ) (assert_trap (invoke "foo") "async-lifted export failed to produce a result") @@ -50,7 +50,7 @@ )) (with "libc" (instance $libc)) )) - (func (export "foo") (canon lift (core func $i "foo") async (callback (func $i "callback")))) + (func (export "foo") async (canon lift (core func $i "foo") async (callback (func $i "callback")))) ) (assert_trap (invoke "foo") "async-lifted export failed to produce a result") @@ -85,7 +85,7 @@ )) (with "libc" (instance $libc)) )) - (func (export "foo") (canon lift (core func $i "foo") async)) + (func (export "foo") async (canon lift (core func $i "foo") async)) ) (assert_trap (invoke "foo") "async-lifted export failed to produce a result") @@ -99,7 +99,7 @@ (core instance $i (instantiate $m (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (canon lift (core func $i "foo") async)) + (func (export "foo") async (canon lift (core func $i "foo") async)) ) (assert_trap (invoke "foo") "async-lifted export failed to produce a result") @@ -112,7 +112,7 @@ (core instance $i (instantiate $m (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (canon lift (core func $i "foo") async)) + (func (export "foo") async (canon lift (core func $i "foo") async)) ) (assert_trap (invoke "foo") @@ -129,7 +129,7 @@ (core instance $i (instantiate $m (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (canon lift (core func $i "foo") async)) + (func (export "foo") async (canon lift (core func $i "foo") async)) ) (assert_trap (invoke "foo") @@ -144,7 +144,7 @@ (core instance $i (instantiate $m (with "" (instance (export "task.return" (func $task-return)))) )) - (func (export "foo") (canon lift (core func $i "foo") async)) + (func (export "foo") async (canon lift (core func $i "foo") async)) ) (assert_trap (invoke "foo") From d06774c525d391a6ebb9b39f6682ad4b57e71b6c Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Sat, 16 May 2026 12:12:23 -0700 Subject: [PATCH 2/9] More test updates/fixes --- crates/wast/src/spectest.rs | 4 +++- .../async/backpressure-deadlock.wast | 2 +- .../async/callback-yield-then-exit.wast | 6 +++--- .../component-model/async/fused.wast | 6 +++--- .../component-model/async/future-read.wast | 16 ++++++++-------- .../async/partial-stream-copies.wast | 4 ++-- .../component-model/async/stackful.wast | 4 ++-- .../async/streams-massive-send.wast | 4 ++-- .../component-model/async/task-builtins.wast | 4 ++-- 9 files changed, 26 insertions(+), 24 deletions(-) diff --git a/crates/wast/src/spectest.rs b/crates/wast/src/spectest.rs index f53572395152..b99421d7e0cc 100644 --- a/crates/wast/src/spectest.rs +++ b/crates/wast/src/spectest.rs @@ -96,7 +96,9 @@ pub fn link_component_spectest(linker: &mut component::Linker) -> Result<( let engine = linker.engine().clone(); linker .root() - .func_wrap("host-echo-u32", |_, v: (u32,)| Ok(v))?; + .func_wrap_concurrent("host-echo-u32", |_, (v,): (u32,)| { + Box::pin(async move { Ok((v,)) }) + })?; linker .root() .func_wrap("host-return-two", |_, _: ()| Ok((2u32,)))?; diff --git a/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast b/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast index 3d90ed4dbb70..8277b4002479 100644 --- a/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast +++ b/tests/misc_testsuite/component-model/async/backpressure-deadlock.wast @@ -40,7 +40,7 @@ (component $B (import "A" (instance $A - (export "f" (func)) + (export "f" (func async)) (export "turn-on-backpressure" (func)) )) diff --git a/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast b/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast index a85ebafeb398..8d2df57239f0 100644 --- a/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast +++ b/tests/misc_testsuite/component-model/async/callback-yield-then-exit.wast @@ -27,7 +27,7 @@ ) (component $B - (import "a" (func $foo (param "p1" u32) (result u32))) + (import "a" (func $foo async (param "p1" u32) (result u32))) (core func $foo (canon lower (func $foo))) (core module $m (import "" "foo" (func $foo (param i32) (result i32))) @@ -47,5 +47,5 @@ (func (export "run") (alias export $B "run")) ) -(assert_return (invoke "run")) -(assert_return (invoke "run")) +(assert_trap (invoke "run") "wasm trap: cannot block a synchronous task before returning") +(assert_trap (invoke "run") "wasm trap: cannot enter component instance") diff --git a/tests/misc_testsuite/component-model/async/fused.wast b/tests/misc_testsuite/component-model/async/fused.wast index 81f5090a209d..ecc488cdc2ff 100644 --- a/tests/misc_testsuite/component-model/async/fused.wast +++ b/tests/misc_testsuite/component-model/async/fused.wast @@ -65,13 +65,13 @@ ) ) (core instance $i (instantiate $m)) - (func (export "foo") (param "p1" u32) (result u32) + (func (export "foo") async (param "p1" u32) (result u32) (canon lift (core func $i "foo")) ) ) (component $lowerer - (import "a" (func $foo (param "p1" u32) (result u32))) + (import "a" (func $foo async (param "p1" u32) (result u32))) (core module $libc (memory (export "memory") 1)) (core instance $libc (instantiate $libc)) (core func $foo (canon lower (func $foo) async (memory $libc "memory"))) @@ -146,4 +146,4 @@ (func (export "run") (alias export $lowerer "run")) ) -(assert_return (invoke "run")) +(assert_trap (invoke "run") "wasm trap: cannot block a synchronous task before returning") diff --git a/tests/misc_testsuite/component-model/async/future-read.wast b/tests/misc_testsuite/component-model/async/future-read.wast index fa82bcb0dd59..1bcdfffd4532 100644 --- a/tests/misc_testsuite/component-model/async/future-read.wast +++ b/tests/misc_testsuite/component-model/async/future-read.wast @@ -26,7 +26,7 @@ (export "read" (func $read)) )) )) - (func (export "run") async (param "x" $future) + (func (export "run") (param "x" $future) (canon lift (core func $i "run"))) ) (instance $child (instantiate $child)) @@ -34,7 +34,7 @@ (component $other-child (type $future (future)) (import "child" (instance $child - (export "run" (func async (param "x" $future))) + (export "run" (func (param "x" $future))) )) (core func $new (canon future.new $future)) @@ -62,8 +62,8 @@ (func (export "run") (alias export $other-child "run")) ) -;; We expect deadlock since the write end is leaked: -(assert_trap (invoke "run") "deadlock detected: event loop cannot make further progress") +;; Sync lower of this async path now traps before the leaked write end can deadlock. +(assert_trap (invoke "run") "wasm trap: cannot block a synchronous task before returning") ;; asynchronous future.read; sync lift (component @@ -87,7 +87,7 @@ (export "read" (func $read)) )) )) - (func (export "run") (param "x" $future) + (func (export "run") async (param "x" $future) (canon lift (core func $i "run"))) ) (instance $child (instantiate $child)) @@ -95,7 +95,7 @@ (component $other-child (type $future (future)) (import "child" (instance $child - (export "run" (func (param "x" $future))) + (export "run" (func async (param "x" $future))) )) (core func $new (canon future.new $future)) (core func $child-run (canon lower (func $child "run"))) @@ -123,7 +123,7 @@ (func (export "run") (alias export $other-child "run")) ) -(assert_return (invoke "run")) +(assert_trap (invoke "run") "wasm trap: cannot block a synchronous task before returning") ;; synchronous future.read; async lift (component @@ -228,7 +228,7 @@ (component $other-child (type $future (future)) (import "child" (instance $child - (export "run" (func (param "x" $future))) + (export "run" (func async (param "x" $future))) )) (core func $new (canon future.new $future)) (core func $child-run (canon lower (func $child "run"))) diff --git a/tests/misc_testsuite/component-model/async/partial-stream-copies.wast b/tests/misc_testsuite/component-model/async/partial-stream-copies.wast index 8632a8ea9286..6172cc7bd060 100644 --- a/tests/misc_testsuite/component-model/async/partial-stream-copies.wast +++ b/tests/misc_testsuite/component-model/async/partial-stream-copies.wast @@ -129,14 +129,14 @@ (export "stream.drop-readable" (func $stream.drop-readable)) (export "stream.drop-writable" (func $stream.drop-writable)) )))) - (func (export "transform") (param "in" (stream u8)) (result (stream u8)) (canon lift + (func (export "transform") async (param "in" (stream u8)) (result (stream u8)) (canon lift (core func $cm "transform") async (memory $memory "mem") (callback (func $cm "transform_cb")) )) ) (component $D - (import "transform" (func $transform (param "in" (stream u8)) (result (stream u8)))) + (import "transform" (func $transform async (param "in" (stream u8)) (result (stream u8)))) (core module $Memory (memory (export "mem") 1)) (core instance $memory (instantiate $Memory)) diff --git a/tests/misc_testsuite/component-model/async/stackful.wast b/tests/misc_testsuite/component-model/async/stackful.wast index fc729096081d..63bebe21932e 100644 --- a/tests/misc_testsuite/component-model/async/stackful.wast +++ b/tests/misc_testsuite/component-model/async/stackful.wast @@ -82,7 +82,7 @@ ) (component $lowerer - (import "a" (func $foo (param "p1" u32) (result u32))) + (import "a" (func $foo async (param "p1" u32) (result u32))) (core func $foo (canon lower (func $foo))) (core module $m (import "" "foo" (func $foo (param i32) (result i32))) @@ -105,7 +105,7 @@ (func (export "run") (alias export $lowerer "run")) ) -(assert_return (invoke "run")) +(assert_trap (invoke "run") "wasm trap: cannot block a synchronous task before returning") ;; waitable-set.wait (component diff --git a/tests/misc_testsuite/component-model/async/streams-massive-send.wast b/tests/misc_testsuite/component-model/async/streams-massive-send.wast index 469602247902..cef67174def7 100644 --- a/tests/misc_testsuite/component-model/async/streams-massive-send.wast +++ b/tests/misc_testsuite/component-model/async/streams-massive-send.wast @@ -166,8 +166,8 @@ (component $B (import "a" (instance $a - (export "big-future" (func (result $f))) - (export "big-stream" (func (result $s))) + (export "big-future" (func async (result $f))) + (export "big-stream" (func async (result $s))) )) (core module $libc diff --git a/tests/misc_testsuite/component-model/async/task-builtins.wast b/tests/misc_testsuite/component-model/async/task-builtins.wast index c4cf350fce9c..966ece64ba40 100644 --- a/tests/misc_testsuite/component-model/async/task-builtins.wast +++ b/tests/misc_testsuite/component-model/async/task-builtins.wast @@ -296,14 +296,14 @@ ) ) (core func $async-to-sync - (canon lower (func $a "run-sync") + (canon lower (func $a "run-async") async (memory $libc "memory") (realloc (func $libc "realloc")) ) ) (core func $sync-to-async - (canon lower (func $a "run-async") + (canon lower (func $a "run-sync") (memory $libc "memory") (realloc (func $libc "realloc")) ) From 18659070102bfb522ac84480bd019a9fe152541d Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Sat, 16 May 2026 12:16:23 -0700 Subject: [PATCH 3/9] Update component-model tests for `async` keyword changes --- tests/component-model | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/component-model b/tests/component-model index dac78059d47d..2615024a479e 160000 --- a/tests/component-model +++ b/tests/component-model @@ -1 +1 @@ -Subproject commit dac78059d47dadf3221a71548463fadb294412e3 +Subproject commit 2615024a479e2a327ae83bfd347277407060ee2b From a7b88e64497e6472e38be9e022bb42a14b9755f9 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 18 May 2026 08:35:10 -0700 Subject: [PATCH 4/9] cargo fmt --- crates/environ/src/component/translate.rs | 6 ++++-- .../environ/src/component/translate/inline.rs | 5 ++++- crates/environ/src/component/types_builder.rs | 21 +++++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/crates/environ/src/component/translate.rs b/crates/environ/src/component/translate.rs index ce9478449d32..0bf7dd5d0bad 100644 --- a/crates/environ/src/component/translate.rs +++ b/crates/environ/src/component/translate.rs @@ -767,7 +767,10 @@ impl<'a, 'data> Translator<'a, 'data> { for import in s { let import = import?; let types = self.validator.types(0).unwrap(); - let ty = types.component_item_for_import(import.name.name).unwrap().ty; + let ty = types + .component_item_for_import(import.name.name) + .unwrap() + .ty; if self.is_unsafe_intrinsics_import(import.name.name) { self.check_unsafe_intrinsics_import(import.name.name, ty)?; @@ -1485,7 +1488,6 @@ impl<'a, 'data> Translator<'a, 'data> { let ty = types.component_any_type_at(index); ComponentItem::Type(ty) } - }) } diff --git a/crates/environ/src/component/translate/inline.rs b/crates/environ/src/component/translate/inline.rs index 5be02df21e76..ca174a6ee07c 100644 --- a/crates/environ/src/component/translate/inline.rs +++ b/crates/environ/src/component/translate/inline.rs @@ -114,7 +114,10 @@ pub(super) fn run( if let TypeDef::Interface(_) = ty { continue; } - let index = inliner.result.import_types.push((name.name.to_string(), ty)); + let index = inliner + .result + .import_types + .push((name.name.to_string(), ty)); let path = ImportPath::root(index); args.insert(name.name, ComponentItemDef::from_import(path, ty)?); } diff --git a/crates/environ/src/component/types_builder.rs b/crates/environ/src/component/types_builder.rs index 0b225d9d3a8f..a91c73e2403f 100644 --- a/crates/environ/src/component/types_builder.rs +++ b/crates/environ/src/component/types_builder.rs @@ -326,15 +326,17 @@ impl ComponentTypesBuilder { let mut result = TypeComponent::default(); for (name, ty) in ty.imports.iter() { self.register_abstract_component_entity_type(types, ty.ty); - result - .imports - .insert(name.clone(), self.convert_component_entity_type(types, ty.ty)?); + result.imports.insert( + name.clone(), + self.convert_component_entity_type(types, ty.ty)?, + ); } for (name, ty) in ty.exports.iter() { self.register_abstract_component_entity_type(types, ty.ty); - result - .exports - .insert(name.clone(), self.convert_component_entity_type(types, ty.ty)?); + result.exports.insert( + name.clone(), + self.convert_component_entity_type(types, ty.ty)?, + ); } Ok(self.component_types.components.push(result)) } @@ -349,9 +351,10 @@ impl ComponentTypesBuilder { let mut result = TypeComponentInstance::default(); for (name, ty) in ty.exports.iter() { self.register_abstract_component_entity_type(types, ty.ty); - result - .exports - .insert(name.clone(), self.convert_component_entity_type(types, ty.ty)?); + result.exports.insert( + name.clone(), + self.convert_component_entity_type(types, ty.ty)?, + ); } Ok(self.component_types.component_instances.push(result)) } From 6164dc74838e864664898fa6453e055ff2c6b01b Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 18 May 2026 08:35:36 -0700 Subject: [PATCH 5/9] cargo vet --- supply-chain/imports.lock | 44 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/supply-chain/imports.lock b/supply-chain/imports.lock index d01726ff911d..188835397f2e 100644 --- a/supply-chain/imports.lock +++ b/supply-chain/imports.lock @@ -1001,8 +1001,8 @@ user-login = "alexcrichton" user-name = "Alex Crichton" [[publisher.json-from-wast]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.libc]] @@ -1500,8 +1500,8 @@ user-login = "alexcrichton" user-name = "Alex Crichton" [[publisher.wasm-compose]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasm-encoder]] @@ -1515,8 +1515,8 @@ when = "2026-04-17" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasm-encoder]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasm-metadata]] @@ -1531,13 +1531,13 @@ when = "2026-04-17" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasm-metadata]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasm-wave]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasmparser]] @@ -1551,13 +1551,13 @@ when = "2026-04-17" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasmparser]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasmprinter]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wasmtime]] @@ -1716,13 +1716,13 @@ when = "2026-04-30" trusted-publisher = "github:bytecodealliance/wasmtime" [[publisher.wast]] -version = "248.0.0" -when = "2026-04-28" +version = "249.0.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wat]] -version = "1.248.0" -when = "2026-04-28" +version = "1.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wiggle]] @@ -2011,8 +2011,8 @@ when = "2026-04-17" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wit-component]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wit-parser]] @@ -2026,8 +2026,8 @@ when = "2026-04-17" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.wit-parser]] -version = "0.248.0" -when = "2026-04-28" +version = "0.249.0" +when = "2026-05-15" trusted-publisher = "github:bytecodealliance/wasm-tools" [[publisher.witx]] From 1b2312add7d8282633005e5471ac9c27ffb133f5 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 18 May 2026 09:20:12 -0700 Subject: [PATCH 6/9] Update component-model git submodule for test fixes Includes https://github.com/WebAssembly/component-model/pull/653 --- crates/test-util/src/wast.rs | 9 +++++++-- tests/component-model | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/test-util/src/wast.rs b/crates/test-util/src/wast.rs index 72c35e4648cd..be8a7ce244eb 100644 --- a/crates/test-util/src/wast.rs +++ b/crates/test-util/src/wast.rs @@ -469,9 +469,14 @@ impl WastTest { let unsupported = [ // These tests in the `component-model` submodule have not yet been // updated to account for the recent threading-related intrinsic - // changes - "test/async/same-component-stream-future.wast", + // changes. "test/async/trap-if-block-and-sync.wast", + // Wasmtime doesn't expose the component-model `cm64` feature toggle + // yet, so this parser-only test can't be enabled here. + "test/wasm-tools/memory64.wast", + // Cancellable `thread.yield` semantics still diverge from the + // latest submodule expectation. + "test/async/cancellable.wast", ]; if unsupported.iter().any(|part| self.path.ends_with(part)) { return true; diff --git a/tests/component-model b/tests/component-model index 2615024a479e..c4405527b17c 160000 --- a/tests/component-model +++ b/tests/component-model @@ -1 +1 @@ -Subproject commit 2615024a479e2a327ae83bfd347277407060ee2b +Subproject commit c4405527b17c836f49312b6dbf4a9969530af45c From a4ba9587e846c1ce5e7e2589468b7c5d5b537296 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 18 May 2026 09:20:41 -0700 Subject: [PATCH 7/9] Fix wizer compilation --- crates/wizer/tests/all/component.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/wizer/tests/all/component.rs b/crates/wizer/tests/all/component.rs index 98df09db4b90..6b204d8d45a4 100644 --- a/crates/wizer/tests/all/component.rs +++ b/crates/wizer/tests/all/component.rs @@ -637,7 +637,7 @@ async fn export_is_removed() -> Result<()> { wasmparser::Payload::ComponentExportSection(s) => Some(s), _ => None, }) - .flat_map(|section| section.into_iter().map(|e| e.unwrap().name.0)) + .flat_map(|section| section.into_iter().map(|e| e.unwrap().name.name)) .collect() } } From 7c4ebc8421219c08614bb652a81c14f492a2c901 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 18 May 2026 09:35:52 -0700 Subject: [PATCH 8/9] Fix component_fuzz for component-model async updates --- crates/test-util/src/component_fuzz.rs | 44 ++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/crates/test-util/src/component_fuzz.rs b/crates/test-util/src/component_fuzz.rs index 98f625670e89..9daf8d6b4818 100644 --- a/crates/test-util/src/component_fuzz.rs +++ b/crates/test-util/src/component_fuzz.rs @@ -1708,6 +1708,28 @@ pub enum LowerAbi { Async, } +impl LiftAbi { + fn is_async(self) -> bool { + !matches!(self, Self::Sync) + } + + fn ensure_async(&mut self) { + if !self.is_async() { + *self = Self::AsyncStackful; + } + } +} + +impl LowerAbi { + fn is_async(self) -> bool { + matches!(self, Self::Async) + } + + fn ensure_async(&mut self) { + *self = Self::Async; + } +} + impl<'a> TestCase<'a> { pub fn generate(types: &'a [Type], u: &mut Unstructured<'_>) -> arbitrary::Result { let max_params = if types.len() > 0 { 5 } else { 0 }; @@ -1722,15 +1744,25 @@ impl<'a> TestCase<'a> { let mut options = u.arbitrary::()?; - // Sync tasks cannot call async functions via a sync lower, nor can they - // block in other ways (e.g. by calling `waitable-set.wait`, returning - // `CALLBACK_CODE_WAIT`, etc.) prior to returning. Therefore, - // async-ness cascades to the callers: - if options.host_async { + // Keep each boundary self-consistent: async function types require async + // lowering/lifting, and async callees force their callers async too. + if options.host_async || options.callee_lower_abi.is_async() { + options.host_async = true; + options.callee_lower_abi.ensure_async(); options.guest_callee_async = true; } - if options.guest_callee_async { + if options.guest_callee_async + || options.callee_lift_abi.is_async() + || options.caller_lower_abi.is_async() + { + options.guest_callee_async = true; + options.callee_lift_abi.ensure_async(); + options.caller_lower_abi.ensure_async(); + options.guest_caller_async = true; + } + if options.guest_caller_async || options.caller_lift_abi.is_async() { options.guest_caller_async = true; + options.caller_lift_abi.ensure_async(); } Ok(Self { From 6b8dac3b2bd8af09698c62d22f3e7105351f8327 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Tue, 19 May 2026 09:23:49 -0700 Subject: [PATCH 9/9] Update component model git submodule to latest `main` --- tests/component-model | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/component-model b/tests/component-model index c4405527b17c..dd1f6fa66e5e 160000 --- a/tests/component-model +++ b/tests/component-model @@ -1 +1 @@ -Subproject commit c4405527b17c836f49312b6dbf4a9969530af45c +Subproject commit dd1f6fa66e5e26dd7a1f6449133f825edbd8f614