diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/jit-test/tests/wasm/ion-gc.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
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.js | 53 |
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(); +} |