From 803b5cfe83080ade3545680f126e7398ad95b064 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 27 Apr 2026 14:57:41 -0700 Subject: [PATCH] Gate synchronous future/stream read/write separately This commit renames the previous `CM_ASYNC_BUILTINS` feature to `CM_MORE_ASYNC_BUILTINS` and then moves synchronous future/stream reads/writes behind this feature. This is inspired by bytecodealliance/wasmtime#13212 and corresponds to WebAssembly/component-model#641. --- crates/wasmparser/src/features.rs | 4 +- crates/wasmparser/src/validator/component.rs | 68 +++++++++++++------ crates/wit-component/src/dummy.rs | 8 +-- .../ui/parse-fail/bad-include1.wit.result | 2 +- .../component-model/async/async-builtins.wast | 12 +++- tests/cli/component-model/async/futures.wast | 4 +- tests/cli/component-model/async/streams.wast | 4 +- .../component-model/async/task-builtins.wast | 16 ++--- .../component-model/async-builtins.wast | 37 ++++++++-- .../component-model/async-stackful.wast | 2 +- .../component-model/async.wast | 2 +- .../cli/validate-unknown-features.wat.stderr | 2 +- .../async/async-builtins.wast.json | 6 ++ .../async/async-builtins.wast/9.print | 8 +++ .../component-model/async/futures.wast.json | 4 +- .../component-model/async/streams.wast.json | 4 +- .../async/task-builtins.wast/44.print | 16 ++--- .../component-model/async-builtins.wast.json | 38 +++++++++-- .../component-model/async.wast.json | 2 +- 19 files changed, 169 insertions(+), 70 deletions(-) create mode 100644 tests/snapshots/cli/component-model/async/async-builtins.wast/9.print diff --git a/crates/wasmparser/src/features.rs b/crates/wasmparser/src/features.rs index 6aa6dd290d..2b6a21d001 100644 --- a/crates/wasmparser/src/features.rs +++ b/crates/wasmparser/src/features.rs @@ -259,12 +259,12 @@ define_wasm_features! { /// Corresponds to the ๐ŸšŸ character in /// . pub cm_async_stackful: CM_ASYNC_STACKFUL(1 << 28) = false; - /// Gates some intrinsics being marked with `async` in the component + /// Gates some intrinsics and options on intrinsics in the component /// model async proposal. /// /// Corresponds to the ๐Ÿš character in /// . - pub cm_async_builtins: CM_ASYNC_BUILTINS(1 << 29) = false; + pub cm_more_async_builtins: CM_MORE_ASYNC_BUILTINS(1 << 29) = false; /// Support for threading in the component model proposal. /// /// Corresponds to the ๐Ÿงต character in diff --git a/crates/wasmparser/src/validator/component.rs b/crates/wasmparser/src/validator/component.rs index 14ea06f83c..02f43fd349 100644 --- a/crates/wasmparser/src/validator/component.rs +++ b/crates/wasmparser/src/validator/component.rs @@ -1234,7 +1234,7 @@ impl ComponentState { self.future_read(ty, &options, types, offset) } CanonicalFunction::FutureWrite { ty, options } => { - self.future_write(ty, options.into_vec(), types, offset) + self.future_write(ty, &options, types, offset) } CanonicalFunction::FutureCancelRead { ty, async_ } => { self.future_cancel_read(ty, async_, types, offset) @@ -1386,10 +1386,10 @@ impl ComponentState { types: &mut TypeAlloc, offset: usize, ) -> Result<()> { - if !self.features.cm_async_builtins() { + if !self.features.cm_more_async_builtins() { bail!( offset, - "`resource.drop` as `async` requires the component model async builtins feature" + "`resource.drop` as `async` requires the component model more async builtins feature" ) } self.resource_at(resource, types, offset)?; @@ -1608,10 +1608,10 @@ impl ComponentState { "`subtask.cancel` requires the component model async feature" ) } - if async_ && !self.features.cm_async_builtins() { + if async_ && !self.features.cm_more_async_builtins() { bail!( offset, - "async `subtask.cancel` requires the component model async builtins feature" + "async `subtask.cancel` requires the component model more async builtins feature" ) } @@ -1657,8 +1657,14 @@ impl ComponentState { bail!(offset, "`stream.read` requires a stream type") }; - let ty_id = self - .check_options(types, options, offset)? + let options = self.check_options(types, options, offset)?; + if options.concurrency.is_sync() && !self.features.cm_more_async_builtins() { + bail!( + offset, + "synchronous `stream.read` requires the component model more async builtins feature" + ); + } + let ty_id = options .require_memory_if(offset, || elem_ty.is_some())? .require_realloc_if(offset, || elem_ty.is_some_and(|ty| ty.contains_ptr(types)))? .check_lower(offset)? @@ -1691,8 +1697,14 @@ impl ComponentState { bail!(offset, "`stream.write` requires a stream type") }; - let ty_id = self - .check_options(types, options, offset)? + let options = self.check_options(types, options, offset)?; + if options.concurrency.is_sync() && !self.features.cm_more_async_builtins() { + bail!( + offset, + "synchronous `stream.write` requires the component model more async builtins feature" + ); + } + let ty_id = options .require_memory_if(offset, || elem_ty.is_some())? .check_lower(offset)? .check_core_type( @@ -1718,10 +1730,10 @@ impl ComponentState { "`stream.cancel-read` requires the component model async feature" ) } - if cancellable && !self.features.cm_async_builtins() { + if cancellable && !self.features.cm_more_async_builtins() { bail!( offset, - "async `stream.cancel-read` requires the component model async builtins feature" + "async `stream.cancel-read` requires the component model more async builtins feature" ) } @@ -1748,10 +1760,10 @@ impl ComponentState { "`stream.cancel-write` requires the component model async feature" ) } - if cancellable && !self.features.cm_async_builtins() { + if cancellable && !self.features.cm_more_async_builtins() { bail!( offset, - "async `stream.cancel-write` requires the component model async builtins feature" + "async `stream.cancel-write` requires the component model more async builtins feature" ) } @@ -1848,8 +1860,14 @@ impl ComponentState { bail!(offset, "`future.read` requires a future type") }; - let ty_id = self - .check_options(types, options, offset)? + let options = self.check_options(types, options, offset)?; + if options.concurrency.is_sync() && !self.features.cm_more_async_builtins() { + bail!( + offset, + "synchronous `future.read` requires the component model more async builtins feature" + ); + } + let ty_id = options .require_memory_if(offset, || elem_ty.is_some())? .require_realloc_if(offset, || elem_ty.is_some_and(|ty| ty.contains_ptr(types)))? .check_lower(offset)? @@ -1866,7 +1884,7 @@ impl ComponentState { fn future_write( &mut self, ty: u32, - options: Vec, + options: &[CanonicalOption], types: &mut TypeAlloc, offset: usize, ) -> Result<()> { @@ -1882,8 +1900,14 @@ impl ComponentState { bail!(offset, "`future.write` requires a future type") }; - let ty_id = self - .check_options(types, &options, offset)? + let options = self.check_options(types, &options, offset)?; + if options.concurrency.is_sync() && !self.features.cm_more_async_builtins() { + bail!( + offset, + "synchronous `future.write` requires the component model more async builtins feature" + ); + } + let ty_id = options .require_memory_if(offset, || elem_ty.is_some())? .check_core_type( types, @@ -1908,10 +1932,10 @@ impl ComponentState { "`future.cancel-read` requires the component model async feature" ) } - if cancellable && !self.features.cm_async_builtins() { + if cancellable && !self.features.cm_more_async_builtins() { bail!( offset, - "async `future.cancel-read` requires the component model async builtins feature" + "async `future.cancel-read` requires the component model more async builtins feature" ) } @@ -1938,10 +1962,10 @@ impl ComponentState { "`future.cancel-write` requires the component model async feature" ) } - if cancellable && !self.features.cm_async_builtins() { + if cancellable && !self.features.cm_more_async_builtins() { bail!( offset, - "async `future.cancel-write` requires the component model async builtins feature" + "async `future.cancel-write` requires the component model more async builtins feature" ) } diff --git a/crates/wit-component/src/dummy.rs b/crates/wit-component/src/dummy.rs index 257b21053f..047df7b4fd 100644 --- a/crates/wit-component/src/dummy.rs +++ b/crates/wit-component/src/dummy.rs @@ -208,8 +208,6 @@ fn push_imported_future_and_stream_intrinsics( wat.push_str(&format!( r#" (import {module:?} {new:?} (func (result i64))) -(import {module:?} {read:?} (func (param i32 i32) (result i32))) -(import {module:?} {write:?} (func (param i32 i32) (result i32))) (import {module:?} {cancel_read:?} (func (param i32) (result i32))) (import {module:?} {cancel_write:?} (func (param i32) (result i32))) (import {module:?} {drop_readable:?} (func (param i32))) @@ -218,6 +216,8 @@ fn push_imported_future_and_stream_intrinsics( (import {module:?} {async_write:?} (func (param i32 i32) (result i32))) ;; deferred behind ๐Ÿš +;;(import {module:?} {read:?} (func (param i32 i32) (result i32))) +;;(import {module:?} {write:?} (func (param i32 i32) (result i32))) ;;(import {module:?} {async_cancel_read:?} (func (param i32) (result i32))) ;;(import {module:?} {async_cancel_write:?} (func (param i32) (result i32))) "# @@ -261,8 +261,6 @@ fn push_imported_future_and_stream_intrinsics( wat.push_str(&format!( r#" (import {module:?} {new:?} (func (result i64))) -(import {module:?} {read:?} (func (param i32 i32 i32) (result i32))) -(import {module:?} {write:?} (func (param i32 i32 i32) (result i32))) (import {module:?} {cancel_read:?} (func (param i32) (result i32))) (import {module:?} {cancel_write:?} (func (param i32) (result i32))) (import {module:?} {drop_readable:?} (func (param i32))) @@ -271,6 +269,8 @@ fn push_imported_future_and_stream_intrinsics( (import {module:?} {async_write:?} (func (param i32 i32 i32) (result i32))) ;; deferred behind ๐Ÿš +;;(import {module:?} {read:?} (func (param i32 i32 i32) (result i32))) +;;(import {module:?} {write:?} (func (param i32 i32 i32) (result i32))) ;;(import {module:?} {async_cancel_read:?} (func (param i32) (result i32))) ;;(import {module:?} {async_cancel_write:?} (func (param i32) (result i32))) "# diff --git a/crates/wit-parser/tests/ui/parse-fail/bad-include1.wit.result b/crates/wit-parser/tests/ui/parse-fail/bad-include1.wit.result index 97d72c9331..0567d8756d 100644 --- a/crates/wit-parser/tests/ui/parse-fail/bad-include1.wit.result +++ b/crates/wit-parser/tests/ui/parse-fail/bad-include1.wit.result @@ -2,4 +2,4 @@ interface or world `non-existence` does not exist --> tests/ui/parse-fail/bad-include1.wit:4:11 | 4 | include non-existence; - | ^------------ + | ^------------ \ No newline at end of file diff --git a/tests/cli/component-model/async/async-builtins.wast b/tests/cli/component-model/async/async-builtins.wast index b4f2defff2..e9c71fc4e6 100644 --- a/tests/cli/component-model/async/async-builtins.wast +++ b/tests/cli/component-model/async/async-builtins.wast @@ -1,4 +1,4 @@ -;; RUN: wast --assert default --snapshot tests/snapshots % -f cm-async,cm-async-builtins +;; RUN: wast --assert default --snapshot tests/snapshots % -f cm-async,cm-more-async-builtins ;; stream.cancel-read (component @@ -101,3 +101,13 @@ ) "type mismatch for export `future.cancel-write` of module instantiation argument ``" ) + +;; synchronous future/stream read/write +(component + (type $f (future)) + (type $s (stream)) + (core func (canon future.read $f)) + (core func (canon future.write $f)) + (core func (canon stream.read $s)) + (core func (canon stream.write $s)) +) diff --git a/tests/cli/component-model/async/futures.wast b/tests/cli/component-model/async/futures.wast index 7366f8fc08..8a2e24b93d 100644 --- a/tests/cli/component-model/async/futures.wast +++ b/tests/cli/component-model/async/futures.wast @@ -161,7 +161,7 @@ (core func $future-cancel-read (canon future.cancel-read $future-type async)) (core instance $i (instantiate $m (with "" (instance (export "future.cancel-read" (func $future-cancel-read)))))) ) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") ;; future.cancel-read; incorrect type (assert_invalid @@ -195,7 +195,7 @@ (core func $future-cancel-write (canon future.cancel-write $future-type async)) (core instance $i (instantiate $m (with "" (instance (export "future.cancel-write" (func $future-cancel-write)))))) ) - "requires the component model async builtins feature" + "requires the component model more async builtins feature" ) ;; future.cancel-write; incorrect type diff --git a/tests/cli/component-model/async/streams.wast b/tests/cli/component-model/async/streams.wast index 6f144107f7..0bea0682b7 100644 --- a/tests/cli/component-model/async/streams.wast +++ b/tests/cli/component-model/async/streams.wast @@ -152,7 +152,7 @@ (core func $stream-cancel-read (canon stream.cancel-read $stream-type async)) (core instance $i (instantiate $m (with "" (instance (export "stream.cancel-read" (func $stream-cancel-read)))))) ) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") ;; stream.drop-readable (component @@ -187,7 +187,7 @@ (core func $stream-cancel-write (canon stream.cancel-write $stream-type async)) (core instance $i (instantiate $m (with "" (instance (export "stream.cancel-write" (func $stream-cancel-write)))))) ) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") ;; stream.drop-writable (component diff --git a/tests/cli/component-model/async/task-builtins.wast b/tests/cli/component-model/async/task-builtins.wast index 87a5694ac4..1f41779abc 100644 --- a/tests/cli/component-model/async/task-builtins.wast +++ b/tests/cli/component-model/async/task-builtins.wast @@ -425,14 +425,14 @@ (canon stream.drop-readable $s (core func)) (core func (canon stream.drop-writable $s)) (canon stream.drop-writable $s (core func)) - (core func (canon future.read $f (memory $m))) - (canon future.read $f (memory $m) (core func)) - (core func (canon future.write $f (memory $m))) - (canon future.write $f (memory $m) (core func)) - (core func (canon stream.read $s (memory $m))) - (canon stream.read $s (memory $m) (core func)) - (core func (canon stream.write $s (memory $m))) - (canon stream.write $s (memory $m) (core func)) + (core func (canon future.read $f (memory $m) async)) + (canon future.read $f (memory $m) async (core func)) + (core func (canon future.write $f (memory $m) async)) + (canon future.write $f (memory $m) async (core func)) + (core func (canon stream.read $s (memory $m) async)) + (canon stream.read $s (memory $m) async (core func)) + (core func (canon stream.write $s (memory $m) async)) + (canon stream.write $s (memory $m) async (core func)) (core func (canon context.get i32 0)) (canon context.get i32 0 (core func)) diff --git a/tests/cli/missing-features/component-model/async-builtins.wast b/tests/cli/missing-features/component-model/async-builtins.wast index e39c9855ef..57f9fe9388 100644 --- a/tests/cli/missing-features/component-model/async-builtins.wast +++ b/tests/cli/missing-features/component-model/async-builtins.wast @@ -1,27 +1,27 @@ ;; RUN: wast % --assert default --snapshot tests/snapshots \ -;; -f=cm-async,-cm-async-builtins +;; -f=cm-async,-cm-more-async-builtins ;; {future,stream}.cancel-{read,write} (assert_invalid (component (type $t (future)) (core func (canon future.cancel-read $t async))) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") (assert_invalid (component (type $t (future)) (core func (canon future.cancel-write $t async))) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") (assert_invalid (component (type $t (stream)) (core func (canon stream.cancel-read $t async))) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") (assert_invalid (component (type $t (stream)) (core func (canon stream.cancel-write $t async))) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") (component (type $f (future)) @@ -37,8 +37,31 @@ (component (type $t (resource (rep i32))) (core func (canon resource.drop $t async))) - "requires the component model async builtins feature") + "requires the component model more async builtins feature") (component (type $t (resource (rep i32))) (core func (canon resource.drop $t))) - \ No newline at end of file + +(assert_invalid + (component + (type $t (stream)) + (core func (canon stream.write $t))) + "requires the component model more async builtins feature") + +(assert_invalid + (component + (type $t (stream)) + (core func (canon stream.read $t))) + "requires the component model more async builtins feature") + +(assert_invalid + (component + (type $t (future)) + (core func (canon future.write $t))) + "requires the component model more async builtins feature") + +(assert_invalid + (component + (type $t (future)) + (core func (canon future.read $t))) + "requires the component model more async builtins feature") diff --git a/tests/cli/missing-features/component-model/async-stackful.wast b/tests/cli/missing-features/component-model/async-stackful.wast index 756a75ff3e..f1f50bef4d 100644 --- a/tests/cli/missing-features/component-model/async-stackful.wast +++ b/tests/cli/missing-features/component-model/async-stackful.wast @@ -1,5 +1,5 @@ ;; RUN: wast % --assert default --snapshot tests/snapshots \ -;; -f=cm-async,-cm-async-builtins +;; -f=cm-async,-cm-more-async-builtins (assert_invalid (component diff --git a/tests/cli/missing-features/component-model/async.wast b/tests/cli/missing-features/component-model/async.wast index 08d4dae954..7217dcef40 100644 --- a/tests/cli/missing-features/component-model/async.wast +++ b/tests/cli/missing-features/component-model/async.wast @@ -352,7 +352,7 @@ (type $t (resource (rep i32))) (core func $f (canon resource.drop $t async)) ) - "requires the component model async builtins feature" + "requires the component model more async builtins feature" ) ;; async function types diff --git a/tests/cli/validate-unknown-features.wat.stderr b/tests/cli/validate-unknown-features.wat.stderr index 509b6c7333..8be24bf0b1 100644 --- a/tests/cli/validate-unknown-features.wat.stderr +++ b/tests/cli/validate-unknown-features.wat.stderr @@ -1,4 +1,4 @@ error: invalid value 'unknown' for '--features ': unknown feature `unknown` -Valid features: mutable-global, saturating-float-to-int, sign-extension, reference-types, multi-value, bulk-memory, simd, relaxed-simd, threads, shared-everything-threads, tail-call, floats, multi-memory, exceptions, memory64, extended-const, component-model, function-references, memory-control, gc, custom-page-sizes, legacy-exceptions, gc-types, stack-switching, wide-arithmetic, cm-values, cm-nested-names, cm-async, cm-async-stackful, cm-async-builtins, cm-threading, cm-error-context, cm-fixed-length-lists, cm-gc, call-indirect-overlong, bulk-memory-opt, custom-descriptors, compact-imports, cm-map, cm64, mvp, wasm1, wasm2, wasm3, lime1, all +Valid features: mutable-global, saturating-float-to-int, sign-extension, reference-types, multi-value, bulk-memory, simd, relaxed-simd, threads, shared-everything-threads, tail-call, floats, multi-memory, exceptions, memory64, extended-const, component-model, function-references, memory-control, gc, custom-page-sizes, legacy-exceptions, gc-types, stack-switching, wide-arithmetic, cm-values, cm-nested-names, cm-async, cm-async-stackful, cm-more-async-builtins, cm-threading, cm-error-context, cm-fixed-length-lists, cm-gc, call-indirect-overlong, bulk-memory-opt, custom-descriptors, compact-imports, cm-map, cm64, mvp, wasm1, wasm2, wasm3, lime1, all For more information, try '--help'. diff --git a/tests/snapshots/cli/component-model/async/async-builtins.wast.json b/tests/snapshots/cli/component-model/async/async-builtins.wast.json index 279015d9c6..0427fd62b5 100644 --- a/tests/snapshots/cli/component-model/async/async-builtins.wast.json +++ b/tests/snapshots/cli/component-model/async/async-builtins.wast.json @@ -58,6 +58,12 @@ "filename": "async-builtins.8.wasm", "module_type": "binary", "text": "type mismatch for export `future.cancel-write` of module instantiation argument ``" + }, + { + "type": "module", + "line": 106, + "filename": "async-builtins.9.wasm", + "module_type": "binary" } ] } \ No newline at end of file diff --git a/tests/snapshots/cli/component-model/async/async-builtins.wast/9.print b/tests/snapshots/cli/component-model/async/async-builtins.wast/9.print new file mode 100644 index 0000000000..99efc262df --- /dev/null +++ b/tests/snapshots/cli/component-model/async/async-builtins.wast/9.print @@ -0,0 +1,8 @@ +(component + (type $f (;0;) (future)) + (type $s (;1;) (stream)) + (core func (;0;) (canon future.read $f)) + (core func (;1;) (canon future.write $f)) + (core func (;2;) (canon stream.read $s)) + (core func (;3;) (canon stream.write $s)) +) diff --git a/tests/snapshots/cli/component-model/async/futures.wast.json b/tests/snapshots/cli/component-model/async/futures.wast.json index 4bea516410..751d5f4f92 100644 --- a/tests/snapshots/cli/component-model/async/futures.wast.json +++ b/tests/snapshots/cli/component-model/async/futures.wast.json @@ -83,7 +83,7 @@ "line": 156, "filename": "futures.12.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "assert_invalid", @@ -103,7 +103,7 @@ "line": 190, "filename": "futures.15.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "assert_invalid", diff --git a/tests/snapshots/cli/component-model/async/streams.wast.json b/tests/snapshots/cli/component-model/async/streams.wast.json index 3c1f8ca7e1..eff886cac5 100644 --- a/tests/snapshots/cli/component-model/async/streams.wast.json +++ b/tests/snapshots/cli/component-model/async/streams.wast.json @@ -77,7 +77,7 @@ "line": 147, "filename": "streams.11.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "module", @@ -97,7 +97,7 @@ "line": 182, "filename": "streams.14.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "module", diff --git a/tests/snapshots/cli/component-model/async/task-builtins.wast/44.print b/tests/snapshots/cli/component-model/async/task-builtins.wast/44.print index ec9bb3db84..f1b671f75e 100644 --- a/tests/snapshots/cli/component-model/async/task-builtins.wast/44.print +++ b/tests/snapshots/cli/component-model/async/task-builtins.wast/44.print @@ -39,14 +39,14 @@ (core func (;29;) (canon stream.drop-readable $s)) (core func (;30;) (canon stream.drop-writable $s)) (core func (;31;) (canon stream.drop-writable $s)) - (core func (;32;) (canon future.read $f (memory $m))) - (core func (;33;) (canon future.read $f (memory $m))) - (core func (;34;) (canon future.write $f (memory $m))) - (core func (;35;) (canon future.write $f (memory $m))) - (core func (;36;) (canon stream.read $s (memory $m))) - (core func (;37;) (canon stream.read $s (memory $m))) - (core func (;38;) (canon stream.write $s (memory $m))) - (core func (;39;) (canon stream.write $s (memory $m))) + (core func (;32;) (canon future.read $f (memory $m) async)) + (core func (;33;) (canon future.read $f (memory $m) async)) + (core func (;34;) (canon future.write $f (memory $m) async)) + (core func (;35;) (canon future.write $f (memory $m) async)) + (core func (;36;) (canon stream.read $s (memory $m) async)) + (core func (;37;) (canon stream.read $s (memory $m) async)) + (core func (;38;) (canon stream.write $s (memory $m) async)) + (core func (;39;) (canon stream.write $s (memory $m) async)) (core func (;40;) (canon context.get i32 0)) (core func (;41;) (canon context.get i32 0)) (core func (;42;) (canon context.set i32 0)) diff --git a/tests/snapshots/cli/missing-features/component-model/async-builtins.wast.json b/tests/snapshots/cli/missing-features/component-model/async-builtins.wast.json index e1105da089..cffea7f510 100644 --- a/tests/snapshots/cli/missing-features/component-model/async-builtins.wast.json +++ b/tests/snapshots/cli/missing-features/component-model/async-builtins.wast.json @@ -6,28 +6,28 @@ "line": 6, "filename": "async-builtins.0.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "assert_invalid", "line": 11, "filename": "async-builtins.1.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "assert_invalid", "line": 16, "filename": "async-builtins.2.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "assert_invalid", "line": 21, "filename": "async-builtins.3.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "module", @@ -40,13 +40,41 @@ "line": 37, "filename": "async-builtins.5.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "module", "line": 41, "filename": "async-builtins.6.wasm", "module_type": "binary" + }, + { + "type": "assert_invalid", + "line": 46, + "filename": "async-builtins.7.wasm", + "module_type": "binary", + "text": "requires the component model more async builtins feature" + }, + { + "type": "assert_invalid", + "line": 52, + "filename": "async-builtins.8.wasm", + "module_type": "binary", + "text": "requires the component model more async builtins feature" + }, + { + "type": "assert_invalid", + "line": 58, + "filename": "async-builtins.9.wasm", + "module_type": "binary", + "text": "requires the component model more async builtins feature" + }, + { + "type": "assert_invalid", + "line": 64, + "filename": "async-builtins.10.wasm", + "module_type": "binary", + "text": "requires the component model more async builtins feature" } ] } \ No newline at end of file diff --git a/tests/snapshots/cli/missing-features/component-model/async.wast.json b/tests/snapshots/cli/missing-features/component-model/async.wast.json index a277bb97d6..efcc7510c8 100644 --- a/tests/snapshots/cli/missing-features/component-model/async.wast.json +++ b/tests/snapshots/cli/missing-features/component-model/async.wast.json @@ -209,7 +209,7 @@ "line": 351, "filename": "async.29.wasm", "module_type": "binary", - "text": "requires the component model async builtins feature" + "text": "requires the component model more async builtins feature" }, { "type": "assert_invalid",