summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/exceptions/bug-1744663.js
blob: 2ab1a6b9255e4ada1cadcef0fbab7fc0ff86dca3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
gczeal(2,1);

function failureCallingTestFunction() {
  let exports = wasmEvalText(
    `(module
       (tag $exn (export "exn"))
       (func $throwExn (export "throwExn")
         ;; Note that this does not fail if this function body is a plain (throw $exn).
         try
           (throw $exn)
         end
       ))`
  ).exports;

  let mod =
      `(module
         (type $exnType (func))
         (type $indirectFunctype (func))
         (import "m" "exn" (tag $exn (type $exnType)))
         (import "m" "throwExn" (func $throwExn (type $indirectFunctype)))
         (table funcref (elem $throwExn))
         (func (export "testFunc") (result i32)
           try
             (call_indirect (type $indirectFunctype) (i32.const 0))
           catch_all
           end
           i32.const 1))`;

  let testFunction = wasmEvalText(mod, { m : exports}).exports.testFunc;
  testFunction();
};

function failureRethrow1() {
  let exports = wasmEvalText(
    `(module
       (tag $exn (export "exn"))
       (func $throwExn (export "throwExn")
         try
           (throw $exn)
         catch_all
           try
             throw $exn
           catch_all
             (rethrow 1)
           end
         end
       ))`
  ).exports;

  let mod =
      `(module
         (type $exnType (func))
         (type $indirectFunctype (func))
         (import "m" "exn" (tag $exn (type $exnType)))
         (import "m" "throwExn" (func $throwExn (type $indirectFunctype)))
         (table funcref (elem $throwExn))
         (func (export "testFunc") (result i32)
           try
             (call_indirect (type $indirectFunctype) (i32.const 0))
           catch_all
           end
           (i32.const 1)))`;

  let testFunction = wasmEvalText(mod, { m : exports}).exports.testFunc;
  testFunction();
};

console.log("Calling failureCallingTestFunction.");
failureCallingTestFunction();
console.log("Calling failureRethrow1.");
failureRethrow1();