summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2024-06-12 14:25:50 -0700
committerGitHub <noreply@github.com>2024-06-12 21:25:50 +0000
commit34686197f5a05854c0723214f3fdffbc9b19a7d5 (patch)
tree65b0750b174e29bba39b92289135b6887ba5b425 /test
parent0e1187664ebf93bd268ba7d77813441a4874d998 (diff)
downloadbinaryen-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.js20
-rw-r--r--test/wasm2js/refs.2asm.js.opt20
-rw-r--r--test/wasm2js/refs.wast19
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)
+ )
)