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 1 externref) 692024ad1SLuna P-C (table $t3 2 funcref) 792024ad1SLuna P-C (table $t4 1 (ref null $res-i32)) 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 "get-externref") (param $i i32) (result externref) 1292024ad1SLuna P-C (table.get $t2 (local.get $i)) 1392024ad1SLuna P-C ) 1492024ad1SLuna P-C (func $f3 (export "get-funcref") (param $i i32) (result funcref) 1592024ad1SLuna P-C (table.get $t3 (local.get $i)) 1692024ad1SLuna P-C ) 1792024ad1SLuna P-C (func $f4 (export "get-typed-func") (param $i i32) (result (ref null $res-i32)) 1892024ad1SLuna P-C (table.get $t4 (local.get $i)) 1992024ad1SLuna P-C ) 2092024ad1SLuna P-C 2192024ad1SLuna P-C (func (export "set-externref") (param $i i32) (param $r externref) 2292024ad1SLuna P-C (table.set $t2 (local.get $i) (local.get $r)) 2392024ad1SLuna P-C ) 2492024ad1SLuna P-C (func (export "set-funcref") (param $i i32) (param $r funcref) 2592024ad1SLuna P-C (table.set $t3 (local.get $i) (local.get $r)) 2692024ad1SLuna P-C ) 2792024ad1SLuna P-C (func (export "set-funcref-from") (param $i i32) (param $j i32) 2892024ad1SLuna P-C (table.set $t3 (local.get $i) (table.get $t3 (local.get $j))) 2992024ad1SLuna P-C ) 3092024ad1SLuna P-C (func $f5 (export "set-typed-func") (param $i i32) (param $r (ref $res-i32)) 3192024ad1SLuna P-C (table.set $t4 (local.get $i) (local.get $r)) 3292024ad1SLuna P-C ) 3392024ad1SLuna P-C 3492024ad1SLuna P-C (func (export "is_null-funcref") (param $i i32) (result i32) 3592024ad1SLuna P-C (ref.is_null (call $f3 (local.get $i))) 3692024ad1SLuna P-C ) 3792024ad1SLuna P-C (func (export "is_null-typed-func") (param $i i32) (result i32) 3892024ad1SLuna P-C (ref.is_null (call $f4 (local.get $i))) 3992024ad1SLuna P-C ) 4092024ad1SLuna P-C (func (export "set-returns-five") (param $i i32) 4192024ad1SLuna P-C (call $f5 (local.get $i) (ref.func $returns-five)) 4292024ad1SLuna P-C ) 4392024ad1SLuna P-C (func (export "get-typed-and-call") (param $i i32) (result i32) (call_ref $res-i32 (call $f4 (local.get $i)))) 4492024ad1SLuna P-C) 4592024ad1SLuna P-C 4692024ad1SLuna P-C(assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) 4792024ad1SLuna P-C(assert_return (invoke "set-externref" (i32.const 0) (ref.extern 1))) 4892024ad1SLuna P-C(assert_return (invoke "get-externref" (i32.const 0)) (ref.extern 1)) 4992024ad1SLuna P-C(assert_return (invoke "set-externref" (i32.const 0) (ref.null extern))) 5092024ad1SLuna P-C(assert_return (invoke "get-externref" (i32.const 0)) (ref.null extern)) 5192024ad1SLuna P-C 5292024ad1SLuna P-C(assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) 5392024ad1SLuna P-C(assert_return (invoke "set-funcref-from" (i32.const 0) (i32.const 1))) 5492024ad1SLuna P-C(assert_return (invoke "is_null-funcref" (i32.const 0)) (i32.const 0)) 5592024ad1SLuna P-C(assert_return (invoke "set-funcref" (i32.const 0) (ref.null func))) 5692024ad1SLuna P-C(assert_return (invoke "get-funcref" (i32.const 0)) (ref.null func)) 5792024ad1SLuna P-C 5892024ad1SLuna P-C(assert_return (invoke "is_null-typed-func" (i32.const 0)) (i32.const 1)) 5992024ad1SLuna P-C(invoke "set-returns-five" (i32.const 0)) 6092024ad1SLuna P-C(assert_return (invoke "get-typed-and-call" (i32.const 0)) (i32.const 5)) 6192024ad1SLuna P-C 6292024ad1SLuna P-C(assert_trap (invoke "set-externref" (i32.const 2) (ref.null extern)) "out of bounds table access") 6392024ad1SLuna P-C(assert_trap (invoke "set-funcref" (i32.const 3) (ref.null func)) "out of bounds table access") 6492024ad1SLuna P-C(assert_trap (invoke "set-returns-five" (i32.const 2)) "out of bounds table access") 6592024ad1SLuna P-C(assert_trap (invoke "set-externref" (i32.const -1) (ref.null extern)) "out of bounds table access") 6692024ad1SLuna P-C(assert_trap (invoke "set-funcref" (i32.const -1) (ref.null func)) "out of bounds table access") 6792024ad1SLuna P-C(assert_trap (invoke "set-returns-five" (i32.const -1)) "out of bounds table access") 6892024ad1SLuna P-C 6992024ad1SLuna P-C(assert_trap (invoke "set-externref" (i32.const 2) (ref.extern 0)) "out of bounds table access") 7092024ad1SLuna P-C(assert_trap (invoke "set-funcref-from" (i32.const 3) (i32.const 1)) "out of bounds table access") 7192024ad1SLuna P-C(assert_trap (invoke "set-externref" (i32.const -1) (ref.extern 0)) "out of bounds table access") 7292024ad1SLuna P-C(assert_trap (invoke "set-funcref-from" (i32.const -1) (i32.const 1)) "out of bounds table access") 7392024ad1SLuna P-C 7492024ad1SLuna P-C 7592024ad1SLuna P-C;; Type errors 7692024ad1SLuna P-C 7792024ad1SLuna P-C(assert_invalid 7892024ad1SLuna P-C (module 7992024ad1SLuna P-C (table $t 10 externref) 8092024ad1SLuna P-C (func $type-index-value-empty-vs-i32-externref 8192024ad1SLuna P-C (table.set $t) 8292024ad1SLuna P-C ) 8392024ad1SLuna P-C ) 8492024ad1SLuna P-C "type mismatch" 8592024ad1SLuna P-C) 8692024ad1SLuna P-C(assert_invalid 8792024ad1SLuna P-C (module 8892024ad1SLuna P-C (table $t 10 externref) 8992024ad1SLuna P-C (func $type-index-empty-vs-i32 9092024ad1SLuna P-C (table.set $t (ref.null extern)) 9192024ad1SLuna P-C ) 9292024ad1SLuna P-C ) 9392024ad1SLuna P-C "type mismatch" 9492024ad1SLuna P-C) 9592024ad1SLuna P-C(assert_invalid 9692024ad1SLuna P-C (module 9792024ad1SLuna P-C (table $t 10 externref) 9892024ad1SLuna P-C (func $type-value-empty-vs-externref 9992024ad1SLuna P-C (table.set $t (i32.const 1)) 10092024ad1SLuna P-C ) 10192024ad1SLuna P-C ) 10292024ad1SLuna P-C "type mismatch" 10392024ad1SLuna P-C) 10492024ad1SLuna P-C(assert_invalid 10592024ad1SLuna P-C (module 10692024ad1SLuna P-C (table $t 10 externref) 10792024ad1SLuna P-C (func $type-size-f32-vs-i32 10892024ad1SLuna P-C (table.set $t (f32.const 1) (ref.null extern)) 10992024ad1SLuna P-C ) 11092024ad1SLuna P-C ) 11192024ad1SLuna P-C "type mismatch" 11292024ad1SLuna P-C) 11392024ad1SLuna P-C(assert_invalid 11492024ad1SLuna P-C (module 11592024ad1SLuna P-C (table $t 10 funcref) 11692024ad1SLuna P-C (func $type-value-externref-vs-funcref (param $r externref) 11792024ad1SLuna P-C (table.set $t (i32.const 1) (local.get $r)) 11892024ad1SLuna P-C ) 11992024ad1SLuna P-C ) 12092024ad1SLuna P-C "type mismatch" 12192024ad1SLuna P-C) 12292024ad1SLuna P-C 12392024ad1SLuna P-C(assert_invalid 12492024ad1SLuna P-C (module 12592024ad1SLuna P-C (table $t1 1 externref) 12692024ad1SLuna P-C (table $t2 1 funcref) 12792024ad1SLuna P-C (func $type-value-externref-vs-funcref-multi (param $r externref) 12892024ad1SLuna P-C (table.set $t2 (i32.const 0) (local.get $r)) 12992024ad1SLuna P-C ) 13092024ad1SLuna P-C ) 13192024ad1SLuna P-C "type mismatch" 13292024ad1SLuna P-C) 13392024ad1SLuna P-C 13492024ad1SLuna P-C(assert_invalid 13592024ad1SLuna P-C (module 13692024ad1SLuna P-C (table $t 10 externref) 13792024ad1SLuna P-C (func $type-result-empty-vs-num (result i32) 13892024ad1SLuna P-C (table.set $t (i32.const 0) (ref.null extern)) 13992024ad1SLuna P-C ) 14092024ad1SLuna P-C ) 14192024ad1SLuna P-C "type mismatch" 14292024ad1SLuna P-C) 143