summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js')
-rw-r--r--js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js b/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js
new file mode 100644
index 0000000000..44474f100e
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/gc/tables-generalized-struct.js
@@ -0,0 +1,48 @@
+// |jit-test| skip-if: !wasmGcEnabled()
+
+// table.set in bounds with i32 x eqref - works, no value generated
+// table.set with (ref null T) - works
+// table.set with null - works
+// table.set out of bounds - fails
+
+{
+ let ins = wasmEvalText(
+ `(module
+ (table (export "t") 10 eqref)
+ (type $dummy (struct (field i32)))
+ (func (export "set_eqref") (param i32) (param eqref)
+ (table.set (local.get 0) (local.get 1)))
+ (func (export "set_null") (param i32)
+ (table.set (local.get 0) (ref.null eq)))
+ (func (export "set_ref") (param i32) (param eqref)
+ (table.set (local.get 0) (ref.cast $dummy (local.get 1))))
+ (func (export "make_struct") (result eqref)
+ (struct.new $dummy (i32.const 37))))`);
+ let a = ins.exports.make_struct();
+ ins.exports.set_eqref(3, a);
+ assertEq(ins.exports.t.get(3), a);
+ ins.exports.set_null(3);
+ assertEq(ins.exports.t.get(3), null);
+ let b = ins.exports.make_struct();
+ ins.exports.set_ref(5, b);
+ assertEq(ins.exports.t.get(5), b);
+
+ assertErrorMessage(() => ins.exports.set_eqref(10, a), WebAssembly.RuntimeError, /index out of bounds/);
+ assertErrorMessage(() => ins.exports.set_eqref(-1, a), WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// table.grow on table of eqref with non-null ref value
+
+{
+ let ins = wasmEvalText(
+ `(module
+ (type $S (struct (field i32) (field f64)))
+ (table (export "t") 2 eqref)
+ (func (export "f") (result i32)
+ (table.grow (struct.new $S (i32.const 0) (f64.const 3.14)) (i32.const 1))))`);
+ assertEq(ins.exports.t.length, 2);
+ assertEq(ins.exports.f(), 2);
+ assertEq(ins.exports.t.length, 3);
+ assertEq(typeof ins.exports.t.get(2), "object");
+}
+