summaryrefslogtreecommitdiff
path: root/test/spec/table_copy.wast
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2023-11-06 12:29:19 -0800
committerGitHub <noreply@github.com>2023-11-06 12:29:19 -0800
commite3d27166370da202bef6c012014604beac41d43f (patch)
treef9e0515c0c6044e6c9b12f6d5d83f8ba99ab0fc3 /test/spec/table_copy.wast
parent4fba26a77ea344b8d2b49cc8e1afdc8fcda13e96 (diff)
downloadbinaryen-e3d27166370da202bef6c012014604beac41d43f.tar.gz
binaryen-e3d27166370da202bef6c012014604beac41d43f.tar.bz2
binaryen-e3d27166370da202bef6c012014604beac41d43f.zip
Implement table.copy (#6078)
Helps #5951
Diffstat (limited to 'test/spec/table_copy.wast')
-rw-r--r--test/spec/table_copy.wast2216
1 files changed, 2216 insertions, 0 deletions
diff --git a/test/spec/table_copy.wast b/test/spec/table_copy.wast
new file mode 100644
index 000000000..a23dbcba5
--- /dev/null
+++ b/test/spec/table_copy.wast
@@ -0,0 +1,2216 @@
+(module
+ (func (export "ef0") (result i32) (i32.const 0))
+ (func (export "ef1") (result i32) (i32.const 1))
+ (func (export "ef2") (result i32) (i32.const 2))
+ (func (export "ef3") (result i32) (i32.const 3))
+ (func (export "ef4") (result i32) (i32.const 4))
+)
+(register "a")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (nop))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 13) (i32.const 2) (i32.const 3)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 25) (i32.const 15) (i32.const 2)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 25)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 26)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 13) (i32.const 25) (i32.const 3)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 20) (i32.const 22) (i32.const 4)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 25) (i32.const 1) (i32.const 3)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 26)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 27)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 10) (i32.const 12) (i32.const 7)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 10)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 11)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 12) (i32.const 10) (i32.const 7)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 17)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 18)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t1) (i32.const 3) func 1 3 1 4)
+ (elem (table $t1) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 10) (i32.const 0) (i32.const 20)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 4))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 1))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 22)) (i32.const 7))
+(assert_return (invoke "check_t1" (i32.const 23)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 24)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 25)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 26)) (i32.const 6))
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (nop))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t1 (i32.const 13) (i32.const 2) (i32.const 3)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t1 (i32.const 25) (i32.const 15) (i32.const 2)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 25)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 26)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t1 (i32.const 13) (i32.const 25) (i32.const 3)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t1 (i32.const 20) (i32.const 22) (i32.const 4)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t1 (i32.const 25) (i32.const 1) (i32.const 3)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 26)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 27)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t1 (i32.const 10) (i32.const 12) (i32.const 7)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 10)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 11)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t1 $t1 (i32.const 12) (i32.const 10) (i32.const 7)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 13)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 17)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 18)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 11)) (i32.const 6))
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 7))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (type (func (result i32))) ;; type #0
+ (import "a" "ef0" (func (result i32))) ;; index 0
+ (import "a" "ef1" (func (result i32)))
+ (import "a" "ef2" (func (result i32)))
+ (import "a" "ef3" (func (result i32)))
+ (import "a" "ef4" (func (result i32))) ;; index 4
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t1) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t1) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (elem (table $t0) (i32.const 3) func 1 3 1 4)
+ (elem (table $t0) (i32.const 11) func 6 3 2 5 7)
+ (func (result i32) (i32.const 5)) ;; index 5
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9)) ;; index 9
+ (func (export "test")
+ (table.copy $t0 $t1 (i32.const 10) (i32.const 0) (i32.const 20)))
+ (func (export "check_t0") (param i32) (result i32)
+ (call_indirect $t1 (type 0) (local.get 0)))
+ (func (export "check_t1") (param i32) (result i32)
+ (call_indirect $t0 (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check_t0" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t0" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check_t0" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check_t0" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t0" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check_t0" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check_t0" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check_t0" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check_t0" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check_t0" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t0" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 2)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 4)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 5)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 6)) (i32.const 4))
+(assert_trap (invoke "check_t1" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 12)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 13)) (i32.const 1))
+(assert_return (invoke "check_t1" (i32.const 14)) (i32.const 4))
+(assert_return (invoke "check_t1" (i32.const 15)) (i32.const 1))
+(assert_trap (invoke "check_t1" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 21)) "uninitialized element")
+(assert_return (invoke "check_t1" (i32.const 22)) (i32.const 7))
+(assert_return (invoke "check_t1" (i32.const 23)) (i32.const 5))
+(assert_return (invoke "check_t1" (i32.const 24)) (i32.const 2))
+(assert_return (invoke "check_t1" (i32.const 25)) (i32.const 3))
+(assert_return (invoke "check_t1" (i32.const 26)) (i32.const 6))
+(assert_trap (invoke "check_t1" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check_t1" (i32.const 29)) "uninitialized element")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 28) (i32.const 1) (i32.const 3))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 0xFFFFFFFE) (i32.const 1) (i32.const 2))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 15) (i32.const 25) (i32.const 6))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 15) (i32.const 0xFFFFFFFE) (i32.const 2))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 15) (i32.const 25) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 30) (i32.const 15) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 31) (i32.const 15) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 15) (i32.const 30) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 15) (i32.const 31) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 30) (i32.const 30) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t0 $t0 (i32.const 31) (i32.const 31) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 28) (i32.const 1) (i32.const 3))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 0xFFFFFFFE) (i32.const 1) (i32.const 2))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 15) (i32.const 25) (i32.const 6))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 15) (i32.const 0xFFFFFFFE) (i32.const 2))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 15) (i32.const 25) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 30) (i32.const 15) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 31) (i32.const 15) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 15) (i32.const 30) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 15) (i32.const 31) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 30) (i32.const 30) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table $t0 30 30 funcref)
+ (table $t1 30 30 funcref)
+ (elem (table $t0) (i32.const 2) func 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (table $t0) (i32.const 12) func 7 5 2 3 6)
+ (elem funcref
+ (ref.func 5) (ref.func 9) (ref.func 2) (ref.func 7) (ref.func 6))
+ (func (result i32) (i32.const 0))
+ (func (result i32) (i32.const 1))
+ (func (result i32) (i32.const 2))
+ (func (result i32) (i32.const 3))
+ (func (result i32) (i32.const 4))
+ (func (result i32) (i32.const 5))
+ (func (result i32) (i32.const 6))
+ (func (result i32) (i32.const 7))
+ (func (result i32) (i32.const 8))
+ (func (result i32) (i32.const 9))
+ (func (export "test")
+ (table.copy $t1 $t0 (i32.const 31) (i32.const 31) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds table access")
+
+;; TODO: add remaining parts that do not pass yet