1*60fc557cSAlex Crichton;;! gc = true 2*60fc557cSAlex Crichton 392024ad1SLuna P-C(module 492024ad1SLuna P-C (type $res-i32 (func (result i32))) 592024ad1SLuna P-C (table $t2 2 externref) 692024ad1SLuna P-C (table $t3 3 funcref) 792024ad1SLuna P-C (table $t4 (ref null $res-i32) (elem (ref.func $returns-five))) 892024ad1SLuna P-C (elem (table $t3) (i32.const 1) func $returns-five) 992024ad1SLuna P-C (func $returns-five (result i32) (i32.const 5)) 1092024ad1SLuna P-C 1192024ad1SLuna P-C (func (export "init") (param $r externref) 1292024ad1SLuna P-C (table.set $t2 (i32.const 1) (local.get $r)) 1392024ad1SLuna P-C (table.set $t3 (i32.const 2) (table.get $t3 (i32.const 1))) 1492024ad1SLuna P-C ) 1592024ad1SLuna P-C 1692024ad1SLuna P-C (func (export "get-externref") (param $i i32) (result externref) 1792024ad1SLuna P-C (table.get $t2 (local.get $i)) 1892024ad1SLuna P-C ) 1992024ad1SLuna P-C (func $f3 (export "get-funcref") (param $i i32) (result funcref) 2092024ad1SLuna P-C (table.get $t3 (local.get $i)) 2192024ad1SLuna P-C ) 2292024ad1SLuna P-C (func $f4 (export "get-typed-func") (param $i i32) (result (ref $res-i32)) 2392024ad1SLuna P-C (ref.as_non_null (table.get $t4 (local.get $i))) 2492024ad1SLuna P-C ) 2592024ad1SLuna P-C 2692024ad1SLuna P-C (func (export "is_null-funcref") (param $i i32) (result i32) 2792024ad1SLuna P-C (ref.is_null (call $f3 (local.get $i))) 2892024ad1SLuna P-C ) 2992024ad1SLuna P-C (func (export "get-typed-and-call") (param $i i32) (result i32) (call_ref $res-i32 (call $f4 (local.get $i)))) 3092024ad1SLuna P-C) 3192024ad1SLuna P-C 3292024ad1SLuna P-C(invoke "init" (ref.extern 1)) 3392024ad1SLuna P-C 3492024ad1SLuna P-C(assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) 3592024ad1SLuna P-C(assert_return (invoke "get-externref" (i32.const 1)) (ref.extern 1)) 3692024ad1SLuna P-C 3792024ad1SLuna P-C(assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) 3892024ad1SLuna P-C(assert_return (invoke "is_null-funcref" (i32.const 1)) (i32.const 0)) 3992024ad1SLuna P-C(assert_return (invoke "is_null-funcref" (i32.const 2)) (i32.const 0)) 4092024ad1SLuna P-C 4192024ad1SLuna P-C(assert_return (invoke "get-typed-and-call" (i32.const 0)) (i32.const 5)) 4292024ad1SLuna P-C 4392024ad1SLuna P-C(assert_trap (invoke "get-externref" (i32.const 2)) "out of bounds table access") 4492024ad1SLuna P-C(assert_trap (invoke "get-funcref" (i32.const 3)) "out of bounds table access") 4592024ad1SLuna P-C(assert_trap (invoke "get-typed-func" (i32.const 2)) "out of bounds table access") 4692024ad1SLuna P-C(assert_trap (invoke "get-externref" (i32.const -1)) "out of bounds table access") 4792024ad1SLuna P-C(assert_trap (invoke "get-funcref" (i32.const -1)) "out of bounds table access") 4892024ad1SLuna P-C(assert_trap (invoke "get-typed-func" (i32.const -1)) "out of bounds table access") 4992024ad1SLuna P-C 5092024ad1SLuna P-C 5192024ad1SLuna P-C;; Type errors 5292024ad1SLuna P-C 5392024ad1SLuna P-C(assert_invalid 5492024ad1SLuna P-C (module 5592024ad1SLuna P-C (table $t 10 externref) 5692024ad1SLuna P-C (func $type-index-empty-vs-i32 (result externref) 5792024ad1SLuna P-C (table.get $t) 5892024ad1SLuna P-C ) 5992024ad1SLuna P-C ) 6092024ad1SLuna P-C "type mismatch" 6192024ad1SLuna P-C) 6292024ad1SLuna P-C(assert_invalid 6392024ad1SLuna P-C (module 6492024ad1SLuna P-C (table $t 10 externref) 6592024ad1SLuna P-C (func $type-index-f32-vs-i32 (result externref) 6692024ad1SLuna P-C (table.get $t (f32.const 1)) 6792024ad1SLuna P-C ) 6892024ad1SLuna P-C ) 6992024ad1SLuna P-C "type mismatch" 7092024ad1SLuna P-C) 7192024ad1SLuna P-C 7292024ad1SLuna P-C(assert_invalid 7392024ad1SLuna P-C (module 7492024ad1SLuna P-C (table $t 10 externref) 7592024ad1SLuna P-C (func $type-result-externref-vs-empty 7692024ad1SLuna P-C (table.get $t (i32.const 0)) 7792024ad1SLuna P-C ) 7892024ad1SLuna P-C ) 7992024ad1SLuna P-C "type mismatch" 8092024ad1SLuna P-C) 8192024ad1SLuna P-C(assert_invalid 8292024ad1SLuna P-C (module 8392024ad1SLuna P-C (table $t 10 externref) 8492024ad1SLuna P-C (func $type-result-externref-vs-funcref (result funcref) 8592024ad1SLuna P-C (table.get $t (i32.const 1)) 8692024ad1SLuna P-C ) 8792024ad1SLuna P-C ) 8892024ad1SLuna P-C "type mismatch" 8992024ad1SLuna P-C) 9092024ad1SLuna P-C 9192024ad1SLuna P-C(assert_invalid 9292024ad1SLuna P-C (module 9392024ad1SLuna P-C (table $t1 1 funcref) 9492024ad1SLuna P-C (table $t2 1 externref) 9592024ad1SLuna P-C (func $type-result-externref-vs-funcref-multi (result funcref) 9692024ad1SLuna P-C (table.get $t2 (i32.const 0)) 9792024ad1SLuna P-C ) 9892024ad1SLuna P-C ) 9992024ad1SLuna P-C "type mismatch" 10092024ad1SLuna P-C) 101