Source code

Revision control

Copy as Markdown

Other Tools

const oob = /index out of bounds/;
const unaligned = /unaligned memory access/;
const RuntimeError = WebAssembly.RuntimeError;
// Test memory.atomic.notify unaligned access.
const module = new WebAssembly.Module(wasmTextToBinary(`(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)))`));
const instance = new WebAssembly.Instance(module);
assertErrorMessage(() => instance.exports.main(), RuntimeError, unaligned);
// Test memory.atomic.notify oob access.
const module2 = new WebAssembly.Module(wasmTextToBinary(`(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)))`));
const instance2 = new WebAssembly.Instance(module2);
assertErrorMessage(() => instance2.exports.main(), RuntimeError, oob);
// Test memory.atomic.wait32 and .wait64 unaligned access.
const module3 = new WebAssembly.Module(wasmTextToBinary(`(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 shared)
(export "wait32" (func $wait32))
(export "wait64" (func $wait64)))`));
const instance3 = new WebAssembly.Instance(module3);
assertErrorMessage(() => instance3.exports.wait32(), RuntimeError, unaligned);
assertErrorMessage(() => instance3.exports.wait64(), RuntimeError, unaligned);