diff options
Diffstat (limited to 'js/src/jit-test/tests/wasm/spec/gc/type-subtyping.wast.js')
-rw-r--r-- | js/src/jit-test/tests/wasm/spec/gc/type-subtyping.wast.js | 943 |
1 files changed, 943 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/spec/gc/type-subtyping.wast.js b/js/src/jit-test/tests/wasm/spec/gc/type-subtyping.wast.js new file mode 100644 index 0000000000..474789c145 --- /dev/null +++ b/js/src/jit-test/tests/wasm/spec/gc/type-subtyping.wast.js @@ -0,0 +1,943 @@ +/* Copyright 2021 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ./test/core/gc/type-subtyping.wast + +// ./test/core/gc/type-subtyping.wast:3 +let $0 = instantiate(`(module + (type $$e0 (sub (array i32))) + (type $$e1 (sub $$e0 (array i32))) + + (type $$e2 (sub (array anyref))) + (type $$e3 (sub (array (ref null $$e0)))) + (type $$e4 (sub (array (ref $$e1)))) + + (type $$m1 (sub (array (mut i32)))) + (type $$m2 (sub $$m1 (array (mut i32)))) +)`); + +// ./test/core/gc/type-subtyping.wast:15 +let $1 = instantiate(`(module + (type $$e0 (sub (struct))) + (type $$e1 (sub $$e0 (struct))) + (type $$e2 (sub $$e1 (struct (field i32)))) + (type $$e3 (sub $$e2 (struct (field i32 (ref null $$e0))))) + (type $$e4 (sub $$e3 (struct (field i32 (ref $$e0) (mut i64))))) + (type $$e5 (sub $$e4 (struct (field i32 (ref $$e1) (mut i64))))) +)`); + +// ./test/core/gc/type-subtyping.wast:24 +let $2 = instantiate(`(module + (type $$s (sub (struct))) + (type $$s' (sub $$s (struct))) + + (type $$f1 (sub (func (param (ref $$s')) (result anyref)))) + (type $$f2 (sub $$f1 (func (param (ref $$s)) (result (ref any))))) + (type $$f3 (sub $$f2 (func (param (ref null $$s)) (result (ref $$s))))) + (type $$f4 (sub $$f3 (func (param (ref null struct)) (result (ref $$s'))))) +)`); + +// ./test/core/gc/type-subtyping.wast:37 +let $3 = instantiate(`(module + (type $$t (sub (struct (field anyref)))) + (rec (type $$r (sub $$t (struct (field (ref $$r)))))) + (type $$t' (sub $$r (struct (field (ref $$r) i32)))) +)`); + +// ./test/core/gc/type-subtyping.wast:43 +let $4 = instantiate(`(module + (rec + (type $$r1 (sub (struct (field i32 (ref $$r1))))) + ) + (rec + (type $$r2 (sub $$r1 (struct (field i32 (ref $$r3))))) + (type $$r3 (sub $$r1 (struct (field i32 (ref $$r2))))) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:53 +let $5 = instantiate(`(module + (rec + (type $$a1 (sub (struct (field i32 (ref $$a2))))) + (type $$a2 (sub (struct (field i64 (ref $$a1))))) + ) + (rec + (type $$b1 (sub $$a2 (struct (field i64 (ref $$a1) i32)))) + (type $$b2 (sub $$a1 (struct (field i32 (ref $$a2) i32)))) + (type $$b3 (sub $$a2 (struct (field i64 (ref $$b2) i32)))) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:68 +let $6 = instantiate(`(module + (rec + (type $$t1 (sub (func (param i32 (ref $$t3))))) + (type $$t2 (sub $$t1 (func (param i32 (ref $$t2))))) + (type $$t3 (sub $$t2 (func (param i32 (ref $$t1))))) + ) + + (func $$f1 (param $$r (ref $$t1)) + (call $$f1 (local.get $$r)) + ) + (func $$f2 (param $$r (ref $$t2)) + (call $$f1 (local.get $$r)) + (call $$f2 (local.get $$r)) + ) + (func $$f3 (param $$r (ref $$t3)) + (call $$f1 (local.get $$r)) + (call $$f2 (local.get $$r)) + (call $$f3 (local.get $$r)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:89 +let $7 = instantiate(`(module + (rec + (type $$t1 (sub (func (result i32 (ref $$u1))))) + (type $$u1 (sub (func (result f32 (ref $$t1))))) + ) + + (rec + (type $$t2 (sub $$t1 (func (result i32 (ref $$u3))))) + (type $$u2 (sub $$u1 (func (result f32 (ref $$t3))))) + (type $$t3 (sub $$t1 (func (result i32 (ref $$u2))))) + (type $$u3 (sub $$u1 (func (result f32 (ref $$t2))))) + ) + + (func $$f1 (param $$r (ref $$t1)) + (call $$f1 (local.get $$r)) + ) + (func $$f2 (param $$r (ref $$t2)) + (call $$f1 (local.get $$r)) + (call $$f2 (local.get $$r)) + ) + (func $$f3 (param $$r (ref $$t3)) + (call $$f1 (local.get $$r)) + (call $$f3 (local.get $$r)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:115 +let $8 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f2))))) + (rec (type $$g1 (sub $$f1 (func))) (type (struct))) + (rec (type $$g2 (sub $$f2 (func))) (type (struct))) + (func $$g (type $$g2)) + (global (ref $$g1) (ref.func $$g)) +)`); + +// ./test/core/gc/type-subtyping.wast:124 +let $9 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g1 (sub $$f1 (func))) + (type (sub $$s1 (struct (field (ref $$f1) (ref $$f1) (ref $$f2) (ref $$f2) (ref $$g1))))) + ) + (rec + (type $$g2 (sub $$f2 (func))) + (type (sub $$s2 (struct (field (ref $$f1) (ref $$f2) (ref $$f1) (ref $$f2) (ref $$g2))))) + ) + (func $$g (type $$g2)) + (global (ref $$g1) (ref.func $$g)) +)`); + +// ./test/core/gc/type-subtyping.wast:139 +assert_invalid( + () => instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$g1 (sub $$f1 (func))) (type (struct))) + (rec (type $$g2 (sub $$f2 (func))) (type (struct))) + (func $$g (type $$g2)) + (global (ref $$g1) (ref.func $$g)) + )`), + `type mismatch`, +); + +// ./test/core/gc/type-subtyping.wast:151 +let $10 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f2))))) + (rec (type $$g (sub $$f1 (func))) (type (struct))) + (func $$g (type $$g)) + (global (ref $$f1) (ref.func $$g)) +)`); + +// ./test/core/gc/type-subtyping.wast:159 +let $11 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g1 (sub $$f1 (func))) + (type (sub $$s1 (struct (field (ref $$f1) (ref $$f1) (ref $$f2) (ref $$f2) (ref $$g1))))) + ) + (rec + (type $$g2 (sub $$f2 (func))) + (type (sub $$s2 (struct (field (ref $$f1) (ref $$f2) (ref $$f1) (ref $$f2) (ref $$g2))))) + ) + (rec (type $$h (sub $$g2 (func))) (type (struct))) + (func $$h (type $$h)) + (global (ref $$f1) (ref.func $$h)) + (global (ref $$g1) (ref.func $$h)) +)`); + +// ./test/core/gc/type-subtyping.wast:177 +let $12 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (func $$f11 (type $$f11) (unreachable)) + (func $$f12 (type $$f12) (unreachable)) + (global (ref $$f11) (ref.func $$f11)) + (global (ref $$f21) (ref.func $$f11)) + (global (ref $$f12) (ref.func $$f12)) + (global (ref $$f22) (ref.func $$f12)) +)`); + +// ./test/core/gc/type-subtyping.wast:188 +let $13 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (rec (type $$g11 (sub $$f11 (func (result (ref func))))) (type $$g12 (sub $$g11 (func (result (ref $$g11)))))) + (rec (type $$g21 (sub $$f21 (func (result (ref func))))) (type $$g22 (sub $$g21 (func (result (ref $$g21)))))) + (func $$g11 (type $$g11) (unreachable)) + (func $$g12 (type $$g12) (unreachable)) + (global (ref $$f11) (ref.func $$g11)) + (global (ref $$f21) (ref.func $$g11)) + (global (ref $$f11) (ref.func $$g12)) + (global (ref $$f21) (ref.func $$g12)) + (global (ref $$g11) (ref.func $$g11)) + (global (ref $$g21) (ref.func $$g11)) + (global (ref $$g12) (ref.func $$g12)) + (global (ref $$g22) (ref.func $$g12)) +)`); + +// ./test/core/gc/type-subtyping.wast:205 +assert_invalid( + () => instantiate(`(module + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f11 (func)))) + (rec (type $$f21 (sub (func))) (type $$f22 (sub $$f11 (func)))) + (func $$f (type $$f21)) + (global (ref $$f11) (ref.func $$f)) + )`), + `type mismatch`, +); + +// ./test/core/gc/type-subtyping.wast:215 +assert_invalid( + () => instantiate(`(module + (rec (type $$f01 (sub (func))) (type $$f02 (sub $$f01 (func)))) + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f01 (func)))) + (rec (type $$f21 (sub (func))) (type $$f22 (sub $$f11 (func)))) + (func $$f (type $$f21)) + (global (ref $$f11) (ref.func $$f)) + )`), + `type mismatch`, +); + +// ./test/core/gc/type-subtyping.wast:229 +let $14 = instantiate(`(module + (type $$t0 (sub (func (result (ref null func))))) + (rec (type $$t1 (sub $$t0 (func (result (ref null $$t1)))))) + (rec (type $$t2 (sub $$t1 (func (result (ref null $$t2)))))) + + (func $$f0 (type $$t0) (ref.null func)) + (func $$f1 (type $$t1) (ref.null $$t1)) + (func $$f2 (type $$t2) (ref.null $$t2)) + (table funcref (elem $$f0 $$f1 $$f2)) + + (func (export "run") + (block (result (ref null func)) (call_indirect (type $$t0) (i32.const 0))) + (block (result (ref null func)) (call_indirect (type $$t0) (i32.const 1))) + (block (result (ref null func)) (call_indirect (type $$t0) (i32.const 2))) + (block (result (ref null $$t1)) (call_indirect (type $$t1) (i32.const 1))) + (block (result (ref null $$t1)) (call_indirect (type $$t1) (i32.const 2))) + (block (result (ref null $$t2)) (call_indirect (type $$t2) (i32.const 2))) + + (block (result (ref null $$t0)) (ref.cast (ref $$t0) (table.get (i32.const 0)))) + (block (result (ref null $$t0)) (ref.cast (ref $$t0) (table.get (i32.const 1)))) + (block (result (ref null $$t0)) (ref.cast (ref $$t0) (table.get (i32.const 2)))) + (block (result (ref null $$t1)) (ref.cast (ref $$t1) (table.get (i32.const 1)))) + (block (result (ref null $$t1)) (ref.cast (ref $$t1) (table.get (i32.const 2)))) + (block (result (ref null $$t2)) (ref.cast (ref $$t2) (table.get (i32.const 2)))) + (br 0) + ) + + (func (export "fail1") + (block (result (ref null $$t1)) (call_indirect (type $$t1) (i32.const 0))) + (br 0) + ) + (func (export "fail2") + (block (result (ref null $$t1)) (call_indirect (type $$t2) (i32.const 0))) + (br 0) + ) + (func (export "fail3") + (block (result (ref null $$t1)) (call_indirect (type $$t2) (i32.const 1))) + (br 0) + ) + + (func (export "fail4") + (ref.cast (ref $$t1) (table.get (i32.const 0))) + (br 0) + ) + (func (export "fail5") + (ref.cast (ref $$t2) (table.get (i32.const 0))) + (br 0) + ) + (func (export "fail6") + (ref.cast (ref $$t2) (table.get (i32.const 1))) + (br 0) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:282 +assert_return(() => invoke($14, `run`, []), []); + +// ./test/core/gc/type-subtyping.wast:283 +assert_trap(() => invoke($14, `fail1`, []), `indirect call`); + +// ./test/core/gc/type-subtyping.wast:284 +assert_trap(() => invoke($14, `fail2`, []), `indirect call`); + +// ./test/core/gc/type-subtyping.wast:285 +assert_trap(() => invoke($14, `fail3`, []), `indirect call`); + +// ./test/core/gc/type-subtyping.wast:286 +assert_trap(() => invoke($14, `fail4`, []), `cast`); + +// ./test/core/gc/type-subtyping.wast:287 +assert_trap(() => invoke($14, `fail5`, []), `cast`); + +// ./test/core/gc/type-subtyping.wast:288 +assert_trap(() => invoke($14, `fail6`, []), `cast`); + +// ./test/core/gc/type-subtyping.wast:290 +let $15 = instantiate(`(module + (type $$t1 (sub (func))) + (type $$t2 (sub final (func))) + + (func $$f1 (type $$t1)) + (func $$f2 (type $$t2)) + (table funcref (elem $$f1 $$f2)) + + (func (export "fail1") + (block (call_indirect (type $$t1) (i32.const 1))) + ) + (func (export "fail2") + (block (call_indirect (type $$t2) (i32.const 0))) + ) + + (func (export "fail3") + (ref.cast (ref $$t1) (table.get (i32.const 1))) + (drop) + ) + (func (export "fail4") + (ref.cast (ref $$t2) (table.get (i32.const 0))) + (drop) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:314 +assert_trap(() => invoke($15, `fail1`, []), `indirect call`); + +// ./test/core/gc/type-subtyping.wast:315 +assert_trap(() => invoke($15, `fail2`, []), `indirect call`); + +// ./test/core/gc/type-subtyping.wast:316 +assert_trap(() => invoke($15, `fail3`, []), `cast`); + +// ./test/core/gc/type-subtyping.wast:317 +assert_trap(() => invoke($15, `fail4`, []), `cast`); + +// ./test/core/gc/type-subtyping.wast:320 +let $16 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f2))))) + (rec (type $$g1 (sub $$f1 (func))) (type (struct))) + (rec (type $$g2 (sub $$f2 (func))) (type (struct))) + (func $$g (type $$g2)) (elem declare func $$g) + (func (export "run") (result i32) + (ref.test (ref $$g1) (ref.func $$g)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:330 +assert_return(() => invoke($16, `run`, []), [value("i32", 1)]); + +// ./test/core/gc/type-subtyping.wast:332 +let $17 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g1 (sub $$f1 (func))) + (type (sub $$s1 (struct (field (ref $$f1) (ref $$f1) (ref $$f2) (ref $$f2) (ref $$g1))))) + ) + (rec + (type $$g2 (sub $$f2 (func))) + (type (sub $$s2 (struct (field (ref $$f1) (ref $$f2) (ref $$f1) (ref $$f2) (ref $$g2))))) + ) + (func $$g (type $$g2)) (elem declare func $$g) + (func (export "run") (result i32) + (ref.test (ref $$g1) (ref.func $$g)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:348 +assert_return(() => invoke($17, `run`, []), [value("i32", 1)]); + +// ./test/core/gc/type-subtyping.wast:350 +let $18 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$g1 (sub $$f1 (func))) (type (struct))) + (rec (type $$g2 (sub $$f2 (func))) (type (struct))) + (func $$g (type $$g2)) (elem declare func $$g) + (func (export "run") (result i32) + (ref.test (ref $$g1) (ref.func $$g)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:360 +assert_return(() => invoke($18, `run`, []), [value("i32", 0)]); + +// ./test/core/gc/type-subtyping.wast:362 +let $19 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f2))))) + (rec (type $$g (sub $$f1 (func))) (type (struct))) + (func $$g (type $$g)) (elem declare func $$g) + (func (export "run") (result i32) + (ref.test (ref $$f1) (ref.func $$g)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:371 +assert_return(() => invoke($19, `run`, []), [value("i32", 1)]); + +// ./test/core/gc/type-subtyping.wast:373 +let $20 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g1 (sub $$f1 (func))) + (type (sub $$s1 (struct (field (ref $$f1) (ref $$f1) (ref $$f2) (ref $$f2) (ref $$g1))))) + ) + (rec + (type $$g2 (sub $$f2 (func))) + (type (sub $$s2 (struct (field (ref $$f1) (ref $$f2) (ref $$f1) (ref $$f2) (ref $$g2))))) + ) + (rec (type $$h (sub $$g2 (func))) (type (struct))) + (func $$h (type $$h)) (elem declare func $$h) + (func (export "run") (result i32 i32) + (ref.test (ref $$f1) (ref.func $$h)) + (ref.test (ref $$g1) (ref.func $$h)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:391 +assert_return(() => invoke($20, `run`, []), [value("i32", 1), value("i32", 1)]); + +// ./test/core/gc/type-subtyping.wast:394 +let $21 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (func $$f11 (type $$f11) (unreachable)) (elem declare func $$f11) + (func $$f12 (type $$f12) (unreachable)) (elem declare func $$f12) + (func (export "run") (result i32 i32 i32 i32) + (ref.test (ref $$f11) (ref.func $$f11)) + (ref.test (ref $$f21) (ref.func $$f11)) + (ref.test (ref $$f12) (ref.func $$f12)) + (ref.test (ref $$f22) (ref.func $$f12)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:406 +assert_return( + () => invoke($21, `run`, []), + [value("i32", 1), value("i32", 1), value("i32", 1), value("i32", 1)], +); + +// ./test/core/gc/type-subtyping.wast:410 +let $22 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (rec (type $$g11 (sub $$f11 (func (result (ref func))))) (type $$g12 (sub $$g11 (func (result (ref $$g11)))))) + (rec (type $$g21 (sub $$f21 (func (result (ref func))))) (type $$g22 (sub $$g21 (func (result (ref $$g21)))))) + (func $$g11 (type $$g11) (unreachable)) (elem declare func $$g11) + (func $$g12 (type $$g12) (unreachable)) (elem declare func $$g12) + (func (export "run") (result i32 i32 i32 i32 i32 i32 i32 i32) + (ref.test (ref $$f11) (ref.func $$g11)) + (ref.test (ref $$f21) (ref.func $$g11)) + (ref.test (ref $$f11) (ref.func $$g12)) + (ref.test (ref $$f21) (ref.func $$g12)) + (ref.test (ref $$g11) (ref.func $$g11)) + (ref.test (ref $$g21) (ref.func $$g11)) + (ref.test (ref $$g12) (ref.func $$g12)) + (ref.test (ref $$g22) (ref.func $$g12)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:428 +assert_return( + () => invoke($22, `run`, []), + [ + value("i32", 1), + value("i32", 1), + value("i32", 1), + value("i32", 1), + value("i32", 1), + value("i32", 1), + value("i32", 1), + value("i32", 1), + ], +); + +// ./test/core/gc/type-subtyping.wast:433 +let $23 = instantiate(`(module + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f11 (func)))) + (rec (type $$f21 (sub (func))) (type $$f22 (sub $$f11 (func)))) + (func $$f (type $$f21)) (elem declare func $$f) + (func (export "run") (result i32) + (ref.test (ref $$f11) (ref.func $$f)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:441 +assert_return(() => invoke($23, `run`, []), [value("i32", 0)]); + +// ./test/core/gc/type-subtyping.wast:443 +let $24 = instantiate(`(module + (rec (type $$f01 (sub (func))) (type $$f02 (sub $$f01 (func)))) + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f01 (func)))) + (rec (type $$f21 (sub (func))) (type $$f22 (sub $$f11 (func)))) + (func $$f (type $$f21)) (elem declare func $$f) + (func (export "run") (result i32) + (ref.test (ref $$f11) (ref.func $$f)) + ) +)`); + +// ./test/core/gc/type-subtyping.wast:452 +assert_return(() => invoke($24, `run`, []), [value("i32", 0)]); + +// ./test/core/gc/type-subtyping.wast:458 +let $25 = instantiate(`(module + (type $$t0 (sub (func (result (ref null func))))) + (rec (type $$t1 (sub $$t0 (func (result (ref null $$t1)))))) + (rec (type $$t2 (sub $$t1 (func (result (ref null $$t2)))))) + + (func (export "f0") (type $$t0) (ref.null func)) + (func (export "f1") (type $$t1) (ref.null $$t1)) + (func (export "f2") (type $$t2) (ref.null $$t2)) +)`); + +// ./test/core/gc/type-subtyping.wast:467 +register($25, `M`); + +// ./test/core/gc/type-subtyping.wast:469 +let $26 = instantiate(`(module + (type $$t0 (sub (func (result (ref null func))))) + (rec (type $$t1 (sub $$t0 (func (result (ref null $$t1)))))) + (rec (type $$t2 (sub $$t1 (func (result (ref null $$t2)))))) + + (func (import "M" "f0") (type $$t0)) + (func (import "M" "f1") (type $$t0)) + (func (import "M" "f1") (type $$t1)) + (func (import "M" "f2") (type $$t0)) + (func (import "M" "f2") (type $$t1)) + (func (import "M" "f2") (type $$t2)) +)`); + +// ./test/core/gc/type-subtyping.wast:482 +assert_unlinkable( + () => instantiate(`(module + (type $$t0 (sub (func (result (ref null func))))) + (rec (type $$t1 (sub $$t0 (func (result (ref null $$t1)))))) + (rec (type $$t2 (sub $$t1 (func (result (ref null $$t2)))))) + (func (import "M" "f0") (type $$t1)) + )`), + `incompatible import type`, +); + +// ./test/core/gc/type-subtyping.wast:492 +assert_unlinkable( + () => instantiate(`(module + (type $$t0 (sub (func (result (ref null func))))) + (rec (type $$t1 (sub $$t0 (func (result (ref null $$t1)))))) + (rec (type $$t2 (sub $$t1 (func (result (ref null $$t2)))))) + (func (import "M" "f0") (type $$t2)) + )`), + `incompatible import type`, +); + +// ./test/core/gc/type-subtyping.wast:502 +assert_unlinkable( + () => instantiate(`(module + (type $$t0 (sub (func (result (ref null func))))) + (rec (type $$t1 (sub $$t0 (func (result (ref null $$t1)))))) + (rec (type $$t2 (sub $$t1 (func (result (ref null $$t2)))))) + (func (import "M" "f1") (type $$t2)) + )`), + `incompatible import type`, +); + +// ./test/core/gc/type-subtyping.wast:512 +let $27 = instantiate(`(module + (type $$t1 (sub (func))) + (type $$t2 (sub final (func))) + (func (export "f1") (type $$t1)) + (func (export "f2") (type $$t2)) +)`); + +// ./test/core/gc/type-subtyping.wast:518 +register($27, `M2`); + +// ./test/core/gc/type-subtyping.wast:520 +assert_unlinkable( + () => instantiate(`(module + (type $$t1 (sub (func))) + (type $$t2 (sub final (func))) + (func (import "M2" "f1") (type $$t2)) + )`), + `incompatible import type`, +); + +// ./test/core/gc/type-subtyping.wast:528 +assert_unlinkable( + () => instantiate(`(module + (type $$t1 (sub (func))) + (type $$t2 (sub final (func))) + (func (import "M2" "f2") (type $$t1)) + )`), + `incompatible import type`, +); + +// ./test/core/gc/type-subtyping.wast:538 +let $28 = instantiate(`(module + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f2))))) + (rec (type $$g2 (sub $$f2 (func))) (type (struct))) + (func (export "g") (type $$g2)) +)`); + +// ./test/core/gc/type-subtyping.wast:543 +register($28, `M3`); + +// ./test/core/gc/type-subtyping.wast:544 +let $29 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$g1 (sub $$f1 (func))) (type (struct))) + (func (import "M3" "g") (type $$g1)) +)`); + +// ./test/core/gc/type-subtyping.wast:550 +let $30 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g2 (sub $$f2 (func))) + (type (sub $$s2 (struct (field (ref $$f1) (ref $$f2) (ref $$f1) (ref $$f2) (ref $$g2))))) + ) + (func (export "g") (type $$g2)) +)`); + +// ./test/core/gc/type-subtyping.wast:559 +register($30, `M4`); + +// ./test/core/gc/type-subtyping.wast:560 +let $31 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g1 (sub $$f1 (func))) + (type (sub $$s1 (struct (field (ref $$f1) (ref $$f1) (ref $$f2) (ref $$f2) (ref $$g1))))) + ) + (func (import "M4" "g") (type $$g1)) +)`); + +// ./test/core/gc/type-subtyping.wast:570 +let $32 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$g2 (sub $$f2 (func))) (type (struct))) + (func (export "g") (type $$g2)) +)`); + +// ./test/core/gc/type-subtyping.wast:576 +register($32, `M5`); + +// ./test/core/gc/type-subtyping.wast:577 +assert_unlinkable( + () => instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$g1 (sub $$f1 (func))) (type (struct))) + (func (import "M5" "g") (type $$g1)) + )`), + `incompatible import`, +); + +// ./test/core/gc/type-subtyping.wast:586 +let $33 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f2))))) + (rec (type $$g (sub $$f1 (func))) (type (struct))) + (func (export "g") (type $$g)) +)`); + +// ./test/core/gc/type-subtyping.wast:592 +register($33, `M6`); + +// ./test/core/gc/type-subtyping.wast:593 +let $34 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type (struct (field (ref $$f1))))) + (rec (type $$f2 (sub (func))) (type (struct (field (ref $$f2))))) + (rec (type $$g (sub $$f1 (func))) (type (struct))) + (func (import "M6" "g") (type $$f1)) +)`); + +// ./test/core/gc/type-subtyping.wast:600 +let $35 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g2 (sub $$f2 (func))) + (type (sub $$s2 (struct (field (ref $$f1) (ref $$f2) (ref $$f1) (ref $$f2) (ref $$g2))))) + ) + (rec (type $$h (sub $$g2 (func))) (type (struct))) + (func (export "h") (type $$h)) +)`); + +// ./test/core/gc/type-subtyping.wast:610 +register($35, `M7`); + +// ./test/core/gc/type-subtyping.wast:611 +let $36 = instantiate(`(module + (rec (type $$f1 (sub (func))) (type $$s1 (sub (struct (field (ref $$f1)))))) + (rec (type $$f2 (sub (func))) (type $$s2 (sub (struct (field (ref $$f2)))))) + (rec + (type $$g1 (sub $$f1 (func))) + (type (sub $$s1 (struct (field (ref $$f1) (ref $$f1) (ref $$f2) (ref $$f2) (ref $$g1))))) + ) + (rec (type $$h (sub $$g1 (func))) (type (struct))) + (func (import "M7" "h") (type $$f1)) + (func (import "M7" "h") (type $$g1)) +)`); + +// ./test/core/gc/type-subtyping.wast:624 +let $37 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (func (export "f11") (type $$f11) (unreachable)) + (func (export "f12") (type $$f12) (unreachable)) +)`); + +// ./test/core/gc/type-subtyping.wast:630 +register($37, `M8`); + +// ./test/core/gc/type-subtyping.wast:631 +let $38 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (func (import "M8" "f11") (type $$f11)) + (func (import "M8" "f11") (type $$f21)) + (func (import "M8" "f12") (type $$f12)) + (func (import "M8" "f12") (type $$f22)) +)`); + +// ./test/core/gc/type-subtyping.wast:640 +let $39 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (rec (type $$g11 (sub $$f11 (func (result (ref func))))) (type $$g12 (sub $$g11 (func (result (ref $$g11)))))) + (rec (type $$g21 (sub $$f21 (func (result (ref func))))) (type $$g22 (sub $$g21 (func (result (ref $$g21)))))) + (func (export "g11") (type $$g11) (unreachable)) + (func (export "g12") (type $$g12) (unreachable)) +)`); + +// ./test/core/gc/type-subtyping.wast:648 +register($39, `M9`); + +// ./test/core/gc/type-subtyping.wast:649 +let $40 = instantiate(`(module + (rec (type $$f11 (sub (func (result (ref func))))) (type $$f12 (sub $$f11 (func (result (ref $$f11)))))) + (rec (type $$f21 (sub (func (result (ref func))))) (type $$f22 (sub $$f21 (func (result (ref $$f21)))))) + (rec (type $$g11 (sub $$f11 (func (result (ref func))))) (type $$g12 (sub $$g11 (func (result (ref $$g11)))))) + (rec (type $$g21 (sub $$f21 (func (result (ref func))))) (type $$g22 (sub $$g21 (func (result (ref $$g21)))))) + (func (import "M9" "g11") (type $$f11)) + (func (import "M9" "g11") (type $$f21)) + (func (import "M9" "g12") (type $$f11)) + (func (import "M9" "g12") (type $$f21)) + (func (import "M9" "g11") (type $$g11)) + (func (import "M9" "g11") (type $$g21)) + (func (import "M9" "g12") (type $$g12)) + (func (import "M9" "g12") (type $$g22)) +)`); + +// ./test/core/gc/type-subtyping.wast:664 +let $41 = instantiate(`(module + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f11 (func)))) + (rec (type $$f21 (sub (func))) (type $$f22 (sub $$f11 (func)))) + (func (export "f") (type $$f21)) +)`); + +// ./test/core/gc/type-subtyping.wast:669 +register($41, `M10`); + +// ./test/core/gc/type-subtyping.wast:670 +assert_unlinkable( + () => instantiate(`(module + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f11 (func)))) + (func (import "M10" "f") (type $$f11)) + )`), + `incompatible import`, +); + +// ./test/core/gc/type-subtyping.wast:678 +let $42 = instantiate(`(module + (rec (type $$f01 (sub (func))) (type $$f02 (sub $$f01 (func)))) + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f01 (func)))) + (rec (type $$f21 (sub (func))) (type $$f22 (sub $$f11 (func)))) + (func (export "f") (type $$f21)) +)`); + +// ./test/core/gc/type-subtyping.wast:684 +register($42, `M11`); + +// ./test/core/gc/type-subtyping.wast:685 +assert_unlinkable( + () => instantiate(`(module + (rec (type $$f01 (sub (func))) (type $$f02 (sub $$f01 (func)))) + (rec (type $$f11 (sub (func))) (type $$f12 (sub $$f01 (func)))) + (func (import "M11" "f") (type $$f11)) + )`), + `incompatible import`, +); + +// ./test/core/gc/type-subtyping.wast:698 +assert_invalid( + () => instantiate(`(module + (type $$t (func)) + (type $$s (sub $$t (func))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:706 +assert_invalid( + () => instantiate(`(module + (type $$t (struct)) + (type $$s (sub $$t (struct))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:714 +assert_invalid( + () => instantiate(`(module + (type $$t (sub final (func))) + (type $$s (sub $$t (func))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:722 +assert_invalid( + () => instantiate(`(module + (type $$t (sub (func))) + (type $$s (sub final $$t (func))) + (type $$u (sub $$s (func))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:735 +assert_invalid( + () => instantiate(`(module + (type $$a0 (sub (array i32))) + (type $$s0 (sub $$a0 (struct))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:743 +assert_invalid( + () => instantiate(`(module + (type $$f0 (sub (func (param i32) (result i32)))) + (type $$s0 (sub $$f0 (struct))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:751 +assert_invalid( + () => instantiate(`(module + (type $$s0 (sub (struct))) + (type $$a0 (sub $$s0 (array i32))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:759 +assert_invalid( + () => instantiate(`(module + (type $$f0 (sub (func (param i32) (result i32)))) + (type $$a0 (sub $$f0 (array i32))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:767 +assert_invalid( + () => instantiate(`(module + (type $$s0 (sub (struct))) + (type $$f0 (sub $$s0 (func (param i32) (result i32)))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:775 +assert_invalid( + () => instantiate(`(module + (type $$a0 (sub (array i32))) + (type $$f0 (sub $$a0 (func (param i32) (result i32)))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:783 +assert_invalid( + () => instantiate(`(module + (type $$a0 (sub (array i32))) + (type $$a1 (sub $$a0 (array i64))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:791 +assert_invalid( + () => instantiate(`(module + (type $$s0 (sub (struct (field i32)))) + (type $$s1 (sub $$s0 (struct (field i64)))) + )`), + `sub type`, +); + +// ./test/core/gc/type-subtyping.wast:799 +assert_invalid( + () => instantiate(`(module + (type $$f0 (sub (func))) + (type $$f1 (sub $$f0 (func (param i32)))) + )`), + `sub type`, +); |