summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/ion-gc.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/jit-test/tests/wasm/ion-gc.js
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/wasm/ion-gc.js')
-rw-r--r--js/src/jit-test/tests/wasm/ion-gc.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/ion-gc.js b/js/src/jit-test/tests/wasm/ion-gc.js
new file mode 100644
index 0000000000..358afb2548
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/ion-gc.js
@@ -0,0 +1,53 @@
+// |jit-test| skip-if: !getJitCompilerOptions()['baseline.enable']
+// These tests need at least baseline to make sense.
+
+const options = getJitCompilerOptions();
+const TRIGGER = options['baseline.warmup.trigger'] + 10;
+const ITER = 2 * TRIGGER;
+const EXCEPTION_ITER = TRIGGER + 5;
+
+for (let type of ['i32', 'f32', 'f64']) {
+ var instance = wasmEvalText(`(module
+ (func $add (export "add") (param ${type}) (param ${type}) (result ${type})
+ local.get 0
+ local.get 1
+ ${type}.add
+ )
+ )`).exports;
+
+ function loopBody(a, b) {
+ var caught = null;
+ try {
+ instance.add(a, b);
+ } catch(e) {
+ caught = e;
+ }
+ assertEq(!!caught, b === EXCEPTION_ITER);
+ }
+
+ var x = 0;
+ function main() {
+ for (var i = 0; i <= EXCEPTION_ITER; i++) {
+ loopBody(i + 1, i + EXCEPTION_ITER + 1);
+
+ let otherArg = { valueOf() { return i|0; } };
+
+ if (i === EXCEPTION_ITER) {
+ x = { valueOf: function innerValueOf() {
+ // Supress callee.
+ instance = null;
+ // Suppress other arguments.
+ otherArg = null;
+ gc();
+ return 42;
+ }};
+ } else {
+ x = i;
+ }
+
+ loopBody({valueOf: function outerValueOf() { return x|0; }}, otherArg);
+ }
+ }
+
+ main();
+}