summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/ion-error-throw.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/ion-error-throw.js')
-rw-r--r--js/src/jit-test/tests/wasm/ion-error-throw.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/ion-error-throw.js b/js/src/jit-test/tests/wasm/ion-error-throw.js
new file mode 100644
index 0000000000..c760dbe237
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/ion-error-throw.js
@@ -0,0 +1,43 @@
+// |jit-test| skip-if: !getJitCompilerOptions()['baseline.enable']
+// These tests need at least baseline to make sense.
+
+const { assertStackTrace, startProfiling, endProfiling, assertEqPreciseStacks } = WasmHelpers;
+
+enableGeckoProfiling();
+
+let { add } = wasmEvalText(`(module
+ (func (export "add") (param i32) (param i32) (result i32)
+ local.get 0
+ i32.const 42
+ i32.eq
+ if
+ unreachable
+ end
+
+ local.get 0
+ local.get 1
+ i32.add
+ )
+)`).exports;
+
+const SLOW_ENTRY_STACK = ['', '!>', '0,!>', '!>', ''];
+const FAST_ENTRY_STACK = ['', '>', '0,>', '>', ''];
+const FAST_ENTRY_STACK_THROW = ['', '>', '0,>', '>', '', '>', ''];
+const INLINED_CALL_STACK = ['', '0', ''];
+
+function main() {
+ for (let i = 0; i < 50; i++) {
+ startProfiling();
+ try {
+ assertEq(add(i, i+1), 2*i+1);
+ } catch (e) {
+ assertEq(i, 42);
+ assertEq(e.message.includes("unreachable"), true);
+ assertStackTrace(e, ['wasm-function[0]', 'main', '']);
+ }
+ let stack = endProfiling();
+ assertEqPreciseStacks(stack, [INLINED_CALL_STACK, FAST_ENTRY_STACK, FAST_ENTRY_STACK_THROW, SLOW_ENTRY_STACK]);
+ }
+}
+
+main();