diff options
author | Alon Zakai <azakai@google.com> | 2024-06-12 14:25:50 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-12 21:25:50 +0000 |
commit | 34686197f5a05854c0723214f3fdffbc9b19a7d5 (patch) | |
tree | 65b0750b174e29bba39b92289135b6887ba5b425 /test | |
parent | 0e1187664ebf93bd268ba7d77813441a4874d998 (diff) | |
download | binaryen-34686197f5a05854c0723214f3fdffbc9b19a7d5.tar.gz binaryen-34686197f5a05854c0723214f3fdffbc9b19a7d5.tar.bz2 binaryen-34686197f5a05854c0723214f3fdffbc9b19a7d5.zip |
wasm2js: Fix null handling and RefAsNonNull (#6656)
Diffstat (limited to 'test')
-rw-r--r-- | test/wasm2js/refs.2asm.js | 20 | ||||
-rw-r--r-- | test/wasm2js/refs.2asm.js.opt | 20 | ||||
-rw-r--r-- | test/wasm2js/refs.wast | 19 |
3 files changed, 57 insertions, 2 deletions
diff --git a/test/wasm2js/refs.2asm.js b/test/wasm2js/refs.2asm.js index 0133159b9..f538df6d6 100644 --- a/test/wasm2js/refs.2asm.js +++ b/test/wasm2js/refs.2asm.js @@ -1,4 +1,6 @@ +function wasm2js_trap() { throw new Error('abort'); } + function asmFunc(imports) { var Math_imul = Math.imul; var Math_fround = Math.fround; @@ -10,6 +12,7 @@ function asmFunc(imports) { var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; + var global = null; function null_() { return null; } @@ -28,11 +31,24 @@ function asmFunc(imports) { return x == y | 0; } + function ref_as(x) { + return x || wasm2js_trap(); + } + + function use_global(x) { + var temp = null; + temp = global; + global = x; + return temp; + } + return { "null_": null_, "is_null": is_null, "ref_func": ref_func, - "ref_eq": ref_eq + "ref_eq": ref_eq, + "ref_as": ref_as, + "use_global": use_global }; } @@ -42,3 +58,5 @@ export var null_ = retasmFunc.null_; export var is_null = retasmFunc.is_null; export var ref_func = retasmFunc.ref_func; export var ref_eq = retasmFunc.ref_eq; +export var ref_as = retasmFunc.ref_as; +export var use_global = retasmFunc.use_global; diff --git a/test/wasm2js/refs.2asm.js.opt b/test/wasm2js/refs.2asm.js.opt index e38afe1cf..251e63475 100644 --- a/test/wasm2js/refs.2asm.js.opt +++ b/test/wasm2js/refs.2asm.js.opt @@ -1,4 +1,6 @@ +function wasm2js_trap() { throw new Error('abort'); } + function asmFunc(imports) { var Math_imul = Math.imul; var Math_fround = Math.fround; @@ -10,6 +12,7 @@ function asmFunc(imports) { var Math_ceil = Math.ceil; var Math_trunc = Math.trunc; var Math_sqrt = Math.sqrt; + var global = null; function null_() { return null; } @@ -26,11 +29,24 @@ function asmFunc(imports) { return $0 == $1 | 0; } + function ref_as($0) { + return $0 || wasm2js_trap(); + } + + function use_global($0) { + var $1 = null; + $1 = global; + global = $0; + return $1; + } + return { "null_": null_, "is_null": is_null, "ref_func": ref_func, - "ref_eq": ref_eq + "ref_eq": ref_eq, + "ref_as": ref_as, + "use_global": use_global }; } @@ -40,3 +56,5 @@ export var null_ = retasmFunc.null_; export var is_null = retasmFunc.is_null; export var ref_func = retasmFunc.ref_func; export var ref_eq = retasmFunc.ref_eq; +export var ref_as = retasmFunc.ref_as; +export var use_global = retasmFunc.use_global; diff --git a/test/wasm2js/refs.wast b/test/wasm2js/refs.wast index 4e133c03e..964d0a60c 100644 --- a/test/wasm2js/refs.wast +++ b/test/wasm2js/refs.wast @@ -1,4 +1,6 @@ (module + (global $global (mut anyref) (ref.null any)) + (func $null (export "null") (result anyref) (ref.null any) ) @@ -30,4 +32,21 @@ (local.get $y) ) ) + + (func $ref.as (export "ref.as") (param $x anyref) (result anyref) + (ref.as_non_null + (local.get $x) + ) + ) + + (func $use-global (export "use-global") (param $x anyref) (result anyref) + (local $temp anyref) + (local.set $temp + (global.get $global) + ) + (global.set $global + (local.get $x) + ) + (local.get $temp) + ) ) |