[Cranelift][Atomics] Add address folding for atomic notify/wait. (#2556)
* fold address in wasm wait and notify ops * add atomics addr folding tests
This commit is contained in:
@@ -14,6 +14,7 @@ fn run_wast(wast: &str, strategy: Strategy) -> anyhow::Result<()> {
|
||||
|
||||
let multi_memory = wast.iter().any(|s| s == "multi-memory");
|
||||
let module_linking = wast.iter().any(|s| s == "module-linking");
|
||||
let threads = wast.iter().any(|s| s == "threads");
|
||||
let bulk_mem = multi_memory || wast.iter().any(|s| s == "bulk-memory-operations");
|
||||
|
||||
// Some simd tests assume support for multiple tables, which are introduced
|
||||
@@ -26,6 +27,7 @@ fn run_wast(wast: &str, strategy: Strategy) -> anyhow::Result<()> {
|
||||
.wasm_reference_types(reftypes || module_linking)
|
||||
.wasm_multi_memory(multi_memory || module_linking)
|
||||
.wasm_module_linking(module_linking)
|
||||
.wasm_threads(threads)
|
||||
.strategy(strategy)?
|
||||
.cranelift_debug_verifier(true);
|
||||
|
||||
|
||||
52
tests/misc_testsuite/threads/atomics_wait_address.wast
Normal file
52
tests/misc_testsuite/threads/atomics_wait_address.wast
Normal file
@@ -0,0 +1,52 @@
|
||||
;; From https://bugzilla.mozilla.org/show_bug.cgi?id=1684861.
|
||||
;;
|
||||
|
||||
(module
|
||||
(type (;0;) (func))
|
||||
(func $main (type 0)
|
||||
i32.const -64
|
||||
i32.const -63
|
||||
memory.atomic.notify offset=1
|
||||
unreachable)
|
||||
(memory (;0;) 4 4)
|
||||
(export "main" (func $main))
|
||||
)
|
||||
|
||||
(assert_trap (invoke "main") "misaligned memory access")
|
||||
|
||||
|
||||
(module
|
||||
(type (;0;) (func))
|
||||
(func $main (type 0)
|
||||
i32.const -64
|
||||
i32.const -63
|
||||
memory.atomic.notify offset=65536
|
||||
unreachable)
|
||||
(memory (;0;) 4 4)
|
||||
(export "main" (func $main))
|
||||
)
|
||||
|
||||
(assert_trap (invoke "main") "out of bounds memory access")
|
||||
|
||||
|
||||
(module
|
||||
(type (;0;) (func))
|
||||
(func $wait32 (type 0)
|
||||
i32.const -64
|
||||
i32.const 42
|
||||
i64.const 0
|
||||
memory.atomic.wait32 offset=1
|
||||
unreachable)
|
||||
(func $wait64 (type 0)
|
||||
i32.const -64
|
||||
i64.const 43
|
||||
i64.const 0
|
||||
memory.atomic.wait64 offset=3
|
||||
unreachable)
|
||||
(memory (;0;) 4 4)
|
||||
(export "wait32" (func $wait32))
|
||||
(export "wait64" (func $wait64))
|
||||
)
|
||||
|
||||
(assert_trap (invoke "wait32") "misaligned memory access")
|
||||
(assert_trap (invoke "wait64") "misaligned memory access")
|
||||
Reference in New Issue
Block a user