summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rwxr-xr-xtest/run-spec-wasm2c.py4
-rw-r--r--test/wasm2c/old-spec/bulk-memory-operations/imports.txt607
-rw-r--r--test/wasm2c/old-spec/bulk-memory-operations/linking.txt399
-rw-r--r--test/wasm2c/old-spec/bulk-memory-operations/table_copy.txt1599
-rw-r--r--test/wasm2c/old-spec/bulk-memory-operations/table_init.txt1780
-rw-r--r--test/wasm2c/old-spec/elem.txt447
-rw-r--r--test/wasm2c/spec/bulk.txt5
-rw-r--r--test/wasm2c/spec/elem.txt5
-rw-r--r--test/wasm2c/spec/memory_copy.txt5
-rw-r--r--test/wasm2c/spec/memory_fill.txt5
-rw-r--r--test/wasm2c/spec/memory_init.txt5
-rw-r--r--test/wasm2c/spec/multi-memory/load.txt6
-rw-r--r--test/wasm2c/spec/multi-memory/store.txt6
13 files changed, 4426 insertions, 447 deletions
diff --git a/test/run-spec-wasm2c.py b/test/run-spec-wasm2c.py
index e32c9078..59c50ed9 100755
--- a/test/run-spec-wasm2c.py
+++ b/test/run-spec-wasm2c.py
@@ -122,6 +122,7 @@ class CWriter(object):
self.module_name_to_idx = {}
self.module_prefix_map = {}
self.unmangled_names = {}
+ self.idx_to_module_name = {}
self._MaybeWriteDummyModule()
self._CacheModulePrefixes()
@@ -162,6 +163,7 @@ class CWriter(object):
if 'name' in command:
self.module_name_to_idx[command['name']] = idx
+ self.idx_to_module_name[idx] = command['name']
self.module_prefix_map[command['name']] = name
idx += 1
@@ -173,6 +175,8 @@ class CWriter(object):
else:
name_idx = idx - 1
+ if name_idx in self.idx_to_module_name:
+ self.module_prefix_map[self.idx_to_module_name[name_idx]] = name
self.module_prefix_map[name_idx] = name
self.unmangled_names[name_idx] = command['as']
diff --git a/test/wasm2c/old-spec/bulk-memory-operations/imports.txt b/test/wasm2c/old-spec/bulk-memory-operations/imports.txt
new file mode 100644
index 00000000..3084f059
--- /dev/null
+++ b/test/wasm2c/old-spec/bulk-memory-operations/imports.txt
@@ -0,0 +1,607 @@
+;;; TOOL: run-spec-wasm2c
+;; Auxiliary module to import from
+
+(module
+ (func (export "func"))
+ (func (export "func-i32") (param i32))
+ (func (export "func-f32") (param f32))
+ (func (export "func->i32") (result i32) (i32.const 22))
+ (func (export "func->f32") (result f32) (f32.const 11))
+ (func (export "func-i32->i32") (param i32) (result i32) (local.get 0))
+ (func (export "func-i64->i64") (param i64) (result i64) (local.get 0))
+ (global (export "global-i32") i32 (i32.const 55))
+ (global (export "global-f32") f32 (f32.const 44))
+ (table (export "table-10-inf") 10 funcref)
+ ;; (table (export "table-10-20") 10 20 funcref)
+ (memory (export "memory-2-inf") 2)
+ ;; (memory (export "memory-2-4") 2 4)
+)
+
+(register "test")
+
+
+;; Functions
+
+(module
+ (type $func_i32 (func (param i32)))
+ (type $func_i64 (func (param i64)))
+ (type $func_f32 (func (param f32)))
+ (type $func_f64 (func (param f64)))
+
+ (import "spectest" "print_i32" (func (param i32)))
+ ;; JavaScript can't handle i64 yet.
+ ;; (func (import "spectest" "print_i64") (param i64))
+ (import "spectest" "print_i32" (func $print_i32 (param i32)))
+ ;; JavaScript can't handle i64 yet.
+ ;; (import "spectest" "print_i64" (func $print_i64 (param i64)))
+ (import "spectest" "print_f32" (func $print_f32 (param f32)))
+ (import "spectest" "print_f64" (func $print_f64 (param f64)))
+ (import "spectest" "print_i32_f32" (func $print_i32_f32 (param i32 f32)))
+ (import "spectest" "print_f64_f64" (func $print_f64_f64 (param f64 f64)))
+ (func $print_i32-2 (import "spectest" "print_i32") (param i32))
+ (func $print_f64-2 (import "spectest" "print_f64") (param f64))
+ (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64)))
+
+ (func (export "p1") (import "spectest" "print_i32") (param i32))
+ (func $p (export "p2") (import "spectest" "print_i32") (param i32))
+ (func (export "p3") (export "p4") (import "spectest" "print_i32") (param i32))
+ (func (export "p5") (import "spectest" "print_i32") (type 0))
+ (func (export "p6") (import "spectest" "print_i32") (type 0) (param i32) (result))
+
+ (import "spectest" "print_i32" (func (type $forward)))
+ (func (import "spectest" "print_i32") (type $forward))
+ (type $forward (func (param i32)))
+
+ (table funcref (elem $print_i32 $print_f64))
+
+ (func (export "print32") (param $i i32)
+ (local $x f32)
+ (local.set $x (f32.convert_i32_s (local.get $i)))
+ (call 0 (local.get $i))
+ (call $print_i32_f32
+ (i32.add (local.get $i) (i32.const 1))
+ (f32.const 42)
+ )
+ (call $print_i32 (local.get $i))
+ (call $print_i32-2 (local.get $i))
+ (call $print_f32 (local.get $x))
+ (call_indirect (type $func_i32) (local.get $i) (i32.const 0))
+ )
+
+ (func (export "print64") (param $i i64)
+ (local $x f64)
+ (local.set $x (f64.convert_i64_s (call $i64->i64 (local.get $i))))
+ ;; JavaScript can't handle i64 yet.
+ ;; (call 1 (local.get $i))
+ (call $print_f64_f64
+ (f64.add (local.get $x) (f64.const 1))
+ (f64.const 53)
+ )
+ ;; JavaScript can't handle i64 yet.
+ ;; (call $print_i64 (local.get $i))
+ (call $print_f64 (local.get $x))
+ (call $print_f64-2 (local.get $x))
+ (call_indirect (type $func_f64) (local.get $x) (i32.const 1))
+ )
+)
+
+(assert_return (invoke "print32" (i32.const 13)))
+(assert_return (invoke "print64" (i64.const 24)))
+
+(assert_invalid
+ (module
+ (type (func (result i32)))
+ (import "test" "func" (func (type 1)))
+ )
+ "unknown type"
+)
+
+(module (import "test" "func" (func)))
+(module (import "test" "func-i32" (func (param i32))))
+(module (import "test" "func-f32" (func (param f32))))
+(module (import "test" "func->i32" (func (result i32))))
+(module (import "test" "func->f32" (func (result f32))))
+(module (import "test" "func-i32->i32" (func (param i32) (result i32))))
+(module (import "test" "func-i64->i64" (func (param i64) (result i64))))
+
+(assert_unlinkable
+ (module (import "test" "unknown" (func)))
+ "unknown import"
+)
+(assert_unlinkable
+ (module (import "spectest" "unknown" (func)))
+ "unknown import"
+)
+
+(assert_unlinkable
+ (module (import "test" "func" (func (param i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func" (func (result i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func" (func (param i32) (result i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32" (func)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32" (func (result i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32" (func (param f32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32" (func (param i64))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32" (func (param i32) (result i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func->i32" (func)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func->i32" (func (param i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func->i32" (func (result f32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func->i32" (func (result i64))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func->i32" (func (param i32) (result i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32->i32" (func)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32->i32" (func (param i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "func-i32->i32" (func (result i32))))
+ "incompatible import type"
+)
+
+(assert_unlinkable
+ (module (import "test" "global-i32" (func (result i32))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "table-10-inf" (func)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "memory-2-inf" (func)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "global_i32" (func)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "table" (func)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "memory" (func)))
+ "incompatible import type"
+)
+
+
+;; Globals
+
+(module
+ (import "spectest" "global_i32" (global i32))
+ (global (import "spectest" "global_i32") i32)
+
+ (import "spectest" "global_i32" (global $x i32))
+ (global $y (import "spectest" "global_i32") i32)
+
+ ;; JavaScript can't handle i64 yet.
+ ;; (import "spectest" "global_i64" (global i64))
+ (import "spectest" "global_f32" (global f32))
+ (import "spectest" "global_f64" (global f64))
+
+ (func (export "get-0") (result i32) (global.get 0))
+ (func (export "get-1") (result i32) (global.get 1))
+ (func (export "get-x") (result i32) (global.get $x))
+ (func (export "get-y") (result i32) (global.get $y))
+)
+
+(assert_return (invoke "get-0") (i32.const 666))
+(assert_return (invoke "get-1") (i32.const 666))
+(assert_return (invoke "get-x") (i32.const 666))
+(assert_return (invoke "get-y") (i32.const 666))
+
+(module (import "test" "global-i32" (global i32)))
+(module (import "test" "global-f32" (global f32)))
+
+(assert_unlinkable
+ (module (import "test" "unknown" (global i32)))
+ "unknown import"
+)
+(assert_unlinkable
+ (module (import "spectest" "unknown" (global i32)))
+ "unknown import"
+)
+
+(assert_unlinkable
+ (module (import "test" "func" (global i32)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "table-10-inf" (global i32)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "memory-2-inf" (global i32)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "print_i32" (global i32)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "table" (global i32)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "memory" (global i32)))
+ "incompatible import type"
+)
+
+
+;; Tables
+
+(module
+ (type (func (result i32)))
+ (import "spectest" "table" (table 10 20 funcref))
+ (elem (table 0) (i32.const 1) func $f $g)
+
+ (func (export "call") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0))
+ )
+ (func $f (result i32) (i32.const 11))
+ (func $g (result i32) (i32.const 22))
+)
+
+(assert_trap (invoke "call" (i32.const 0)) "uninitialized element")
+(assert_return (invoke "call" (i32.const 1)) (i32.const 11))
+(assert_return (invoke "call" (i32.const 2)) (i32.const 22))
+(assert_trap (invoke "call" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "call" (i32.const 100)) "undefined element")
+
+
+(module
+ (type (func (result i32)))
+ (table (import "spectest" "table") 10 20 funcref)
+ (elem (table 0) (i32.const 1) func $f $g)
+
+ (func (export "call") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0))
+ )
+ (func $f (result i32) (i32.const 11))
+ (func $g (result i32) (i32.const 22))
+)
+
+(assert_trap (invoke "call" (i32.const 0)) "uninitialized element")
+(assert_return (invoke "call" (i32.const 1)) (i32.const 11))
+(assert_return (invoke "call" (i32.const 2)) (i32.const 22))
+(assert_trap (invoke "call" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "call" (i32.const 100)) "undefined element")
+
+
+(assert_invalid
+ (module (import "" "" (table 10 funcref)) (import "" "" (table 10 funcref)))
+ "multiple tables"
+)
+(assert_invalid
+ (module (import "" "" (table 10 funcref)) (table 10 funcref))
+ "multiple tables"
+)
+(assert_invalid
+ (module (table 10 funcref) (table 10 funcref))
+ "multiple tables"
+)
+
+(module (import "test" "table-10-inf" (table 10 funcref)))
+(module (import "test" "table-10-inf" (table 5 funcref)))
+(module (import "test" "table-10-inf" (table 0 funcref)))
+(module (import "spectest" "table" (table 10 funcref)))
+(module (import "spectest" "table" (table 5 funcref)))
+(module (import "spectest" "table" (table 0 funcref)))
+(module (import "spectest" "table" (table 10 20 funcref)))
+(module (import "spectest" "table" (table 5 20 funcref)))
+(module (import "spectest" "table" (table 0 20 funcref)))
+(module (import "spectest" "table" (table 10 25 funcref)))
+(module (import "spectest" "table" (table 5 25 funcref)))
+
+(assert_unlinkable
+ (module (import "test" "unknown" (table 10 funcref)))
+ "unknown import"
+)
+(assert_unlinkable
+ (module (import "spectest" "unknown" (table 10 funcref)))
+ "unknown import"
+)
+
+(assert_unlinkable
+ (module (import "test" "table-10-inf" (table 12 funcref)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "table-10-inf" (table 10 20 funcref)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "table" (table 12 funcref)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "table" (table 10 15 funcref)))
+ "incompatible import type"
+)
+
+(assert_unlinkable
+ (module (import "test" "func" (table 10 funcref)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "global-i32" (table 10 funcref)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "memory-2-inf" (table 10 funcref)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "print_i32" (table 10 funcref)))
+ "incompatible import type"
+)
+
+
+
+;; Memories
+
+(module
+ (import "spectest" "memory" (memory 1 2))
+ (data (memory 0) (i32.const 10) "\10")
+
+ (func (export "load") (param i32) (result i32) (i32.load (local.get 0)))
+)
+
+(assert_return (invoke "load" (i32.const 0)) (i32.const 0))
+(assert_return (invoke "load" (i32.const 10)) (i32.const 16))
+(assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000))
+(assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access")
+
+(module
+ (memory (import "spectest" "memory") 1 2)
+ (data (memory 0) (i32.const 10) "\10")
+
+ (func (export "load") (param i32) (result i32) (i32.load (local.get 0)))
+)
+(assert_return (invoke "load" (i32.const 0)) (i32.const 0))
+(assert_return (invoke "load" (i32.const 10)) (i32.const 16))
+(assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000))
+(assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access")
+
+(assert_invalid
+ (module (import "" "" (memory 1)) (import "" "" (memory 1)))
+ "multiple memories"
+)
+(assert_invalid
+ (module (import "" "" (memory 1)) (memory 0))
+ "multiple memories"
+)
+(assert_invalid
+ (module (memory 0) (memory 0))
+ "multiple memories"
+)
+
+(module (import "test" "memory-2-inf" (memory 2)))
+(module (import "test" "memory-2-inf" (memory 1)))
+(module (import "test" "memory-2-inf" (memory 0)))
+(module (import "spectest" "memory" (memory 1)))
+(module (import "spectest" "memory" (memory 0)))
+(module (import "spectest" "memory" (memory 1 2)))
+(module (import "spectest" "memory" (memory 0 2)))
+(module (import "spectest" "memory" (memory 1 3)))
+(module (import "spectest" "memory" (memory 0 3)))
+
+(assert_unlinkable
+ (module (import "test" "unknown" (memory 1)))
+ "unknown import"
+)
+(assert_unlinkable
+ (module (import "spectest" "unknown" (memory 1)))
+ "unknown import"
+)
+
+(assert_unlinkable
+ (module (import "test" "memory-2-inf" (memory 3)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "memory-2-inf" (memory 2 3)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "memory" (memory 2)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "memory" (memory 1 1)))
+ "incompatible import type"
+)
+
+(assert_unlinkable
+ (module (import "test" "func-i32" (memory 1)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "global-i32" (memory 1)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "test" "table-10-inf" (memory 1)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "print_i32" (memory 1)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "global_i32" (memory 1)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "table" (memory 1)))
+ "incompatible import type"
+)
+
+(assert_unlinkable
+ (module (import "spectest" "memory" (memory 2)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "spectest" "memory" (memory 1 1)))
+ "incompatible import type"
+)
+
+(module
+ (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2
+ (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0)))
+)
+(assert_return (invoke "grow" (i32.const 0)) (i32.const 1))
+(assert_return (invoke "grow" (i32.const 1)) (i32.const 1))
+(assert_return (invoke "grow" (i32.const 0)) (i32.const 2))
+(assert_return (invoke "grow" (i32.const 1)) (i32.const -1))
+(assert_return (invoke "grow" (i32.const 0)) (i32.const 2))
+
+
+;; Syntax errors
+
+(assert_malformed
+ (module quote "(func) (import \"\" \"\" (func))")
+ "import after function"
+)
+(assert_malformed
+ (module quote "(func) (import \"\" \"\" (global i64))")
+ "import after function"
+)
+(assert_malformed
+ (module quote "(func) (import \"\" \"\" (table 0 funcref))")
+ "import after function"
+)
+(assert_malformed
+ (module quote "(func) (import \"\" \"\" (memory 0))")
+ "import after function"
+)
+
+(assert_malformed
+ (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))")
+ "import after global"
+)
+(assert_malformed
+ (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))")
+ "import after global"
+)
+(assert_malformed
+ (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 funcref))")
+ "import after global"
+)
+(assert_malformed
+ (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))")
+ "import after global"
+)
+
+(assert_malformed
+ (module quote "(table 0 funcref) (import \"\" \"\" (func))")
+ "import after table"
+)
+(assert_malformed
+ (module quote "(table 0 funcref) (import \"\" \"\" (global i32))")
+ "import after table"
+)
+(assert_malformed
+ (module quote "(table 0 funcref) (import \"\" \"\" (table 0 funcref))")
+ "import after table"
+)
+(assert_malformed
+ (module quote "(table 0 funcref) (import \"\" \"\" (memory 0))")
+ "import after table"
+)
+
+(assert_malformed
+ (module quote "(memory 0) (import \"\" \"\" (func))")
+ "import after memory"
+)
+(assert_malformed
+ (module quote "(memory 0) (import \"\" \"\" (global i32))")
+ "import after memory"
+)
+(assert_malformed
+ (module quote "(memory 0) (import \"\" \"\" (table 1 3 funcref))")
+ "import after memory"
+)
+(assert_malformed
+ (module quote "(memory 0) (import \"\" \"\" (memory 1 2))")
+ "import after memory"
+)
+
+;; This module is required to validate, regardless of whether it can be
+;; linked. Overloading is not possible in wasm itself, but it is possible
+;; in modules from which wasm can import.
+(module)
+(register "not wasm")
+(assert_unlinkable
+ (module
+ (import "not wasm" "overloaded" (func))
+ (import "not wasm" "overloaded" (func (param i32)))
+ (import "not wasm" "overloaded" (func (param i32 i32)))
+ (import "not wasm" "overloaded" (func (param i64)))
+ (import "not wasm" "overloaded" (func (param f32)))
+ (import "not wasm" "overloaded" (func (param f64)))
+ (import "not wasm" "overloaded" (func (result i32)))
+ (import "not wasm" "overloaded" (func (result i64)))
+ (import "not wasm" "overloaded" (func (result f32)))
+ (import "not wasm" "overloaded" (func (result f64)))
+ (import "not wasm" "overloaded" (global i32))
+ (import "not wasm" "overloaded" (global i64))
+ (import "not wasm" "overloaded" (global f32))
+ (import "not wasm" "overloaded" (global f64))
+ (import "not wasm" "overloaded" (table 0 funcref))
+ (import "not wasm" "overloaded" (memory 0))
+ )
+ "unknown import"
+)
+(;; STDOUT ;;;
+spectest.print_i32(13)
+spectest.print_i32_f32(14 42)
+spectest.print_i32(13)
+spectest.print_i32(13)
+spectest.print_f32(13)
+spectest.print_i32(13)
+spectest.print_f64_f64(25 53)
+spectest.print_f64(24)
+spectest.print_f64(24)
+spectest.print_f64(24)
+29/29 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/old-spec/bulk-memory-operations/linking.txt b/test/wasm2c/old-spec/bulk-memory-operations/linking.txt
new file mode 100644
index 00000000..d2a8bc75
--- /dev/null
+++ b/test/wasm2c/old-spec/bulk-memory-operations/linking.txt
@@ -0,0 +1,399 @@
+;;; TOOL: run-spec-wasm2c
+;; Functions
+
+(module $Mf
+ (func (export "call") (result i32) (call $g))
+ (func $g (result i32) (i32.const 2))
+)
+(register "Mf" $Mf)
+
+(module $Nf
+ (func $f (import "Mf" "call") (result i32))
+ (export "Mf.call" (func $f))
+ (func (export "call Mf.call") (result i32) (call $f))
+ (func (export "call") (result i32) (call $g))
+ (func $g (result i32) (i32.const 3))
+)
+
+(assert_return (invoke $Mf "call") (i32.const 2))
+(assert_return (invoke $Nf "Mf.call") (i32.const 2))
+(assert_return (invoke $Nf "call") (i32.const 3))
+(assert_return (invoke $Nf "call Mf.call") (i32.const 2))
+
+(module
+ (import "spectest" "print_i32" (func $f (param i32)))
+ (export "print" (func $f))
+)
+(register "reexport_f")
+(assert_unlinkable
+ (module (import "reexport_f" "print" (func (param i64))))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "reexport_f" "print" (func (param i32) (result i32))))
+ "incompatible import type"
+)
+
+
+;; Globals
+
+(module $Mg
+ (global $glob (export "glob") i32 (i32.const 42))
+ (func (export "get") (result i32) (global.get $glob))
+
+ ;; export mutable globals
+ (global $mut_glob (export "mut_glob") (mut i32) (i32.const 142))
+ (func (export "get_mut") (result i32) (global.get $mut_glob))
+ (func (export "set_mut") (param i32) (global.set $mut_glob (local.get 0)))
+)
+(register "Mg" $Mg)
+
+(module $Ng
+ (global $x (import "Mg" "glob") i32)
+ (global $mut_glob (import "Mg" "mut_glob") (mut i32))
+ (func $f (import "Mg" "get") (result i32))
+ (func $get_mut (import "Mg" "get_mut") (result i32))
+ (func $set_mut (import "Mg" "set_mut") (param i32))
+
+ (export "Mg.glob" (global $x))
+ (export "Mg.get" (func $f))
+ (global $glob (export "glob") i32 (i32.const 43))
+ (func (export "get") (result i32) (global.get $glob))
+
+ (export "Mg.mut_glob" (global $mut_glob))
+ (export "Mg.get_mut" (func $get_mut))
+ (export "Mg.set_mut" (func $set_mut))
+)
+
+(assert_return (get $Mg "glob") (i32.const 42))
+(assert_return (get $Ng "Mg.glob") (i32.const 42))
+(assert_return (get $Ng "glob") (i32.const 43))
+(assert_return (invoke $Mg "get") (i32.const 42))
+(assert_return (invoke $Ng "Mg.get") (i32.const 42))
+(assert_return (invoke $Ng "get") (i32.const 43))
+
+(assert_return (get $Mg "mut_glob") (i32.const 142))
+(assert_return (get $Ng "Mg.mut_glob") (i32.const 142))
+(assert_return (invoke $Mg "get_mut") (i32.const 142))
+(assert_return (invoke $Ng "Mg.get_mut") (i32.const 142))
+
+(assert_return (invoke $Mg "set_mut" (i32.const 241)))
+(assert_return (get $Mg "mut_glob") (i32.const 241))
+(assert_return (get $Ng "Mg.mut_glob") (i32.const 241))
+(assert_return (invoke $Mg "get_mut") (i32.const 241))
+(assert_return (invoke $Ng "Mg.get_mut") (i32.const 241))
+
+
+(assert_unlinkable
+ (module (import "Mg" "mut_glob" (global i32)))
+ "incompatible import type"
+)
+(assert_unlinkable
+ (module (import "Mg" "glob" (global (mut i32))))
+ "incompatible import type"
+)
+
+;; Tables
+
+(module $Mt
+ (type (func (result i32)))
+ (type (func))
+
+ (table (export "tab") 10 funcref)
+ (elem (i32.const 2) $g $g $g $g)
+ (func $g (result i32) (i32.const 4))
+ (func (export "h") (result i32) (i32.const -4))
+
+ (func (export "call") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0))
+ )
+)
+(register "Mt" $Mt)
+
+(module $Nt
+ (type (func))
+ (type (func (result i32)))
+
+ (func $f (import "Mt" "call") (param i32) (result i32))
+ (func $h (import "Mt" "h") (result i32))
+
+ (table funcref (elem $g $g $g $h $f))
+ (func $g (result i32) (i32.const 5))
+
+ (export "Mt.call" (func $f))
+ (func (export "call Mt.call") (param i32) (result i32)
+ (call $f (local.get 0))
+ )
+ (func (export "call") (param i32) (result i32)
+ (call_indirect (type 1) (local.get 0))
+ )
+)
+
+(assert_return (invoke $Mt "call" (i32.const 2)) (i32.const 4))
+(assert_return (invoke $Nt "Mt.call" (i32.const 2)) (i32.const 4))
+(assert_return (invoke $Nt "call" (i32.const 2)) (i32.const 5))
+(assert_return (invoke $Nt "call Mt.call" (i32.const 2)) (i32.const 4))
+
+(assert_trap (invoke $Mt "call" (i32.const 1)) "uninitialized")
+(assert_trap (invoke $Nt "Mt.call" (i32.const 1)) "uninitialized")
+(assert_return (invoke $Nt "call" (i32.const 1)) (i32.const 5))
+(assert_trap (invoke $Nt "call Mt.call" (i32.const 1)) "uninitialized")
+
+(assert_trap (invoke $Mt "call" (i32.const 0)) "uninitialized")
+(assert_trap (invoke $Nt "Mt.call" (i32.const 0)) "uninitialized")
+(assert_return (invoke $Nt "call" (i32.const 0)) (i32.const 5))
+(assert_trap (invoke $Nt "call Mt.call" (i32.const 0)) "uninitialized")
+
+(assert_trap (invoke $Mt "call" (i32.const 20)) "undefined")
+(assert_trap (invoke $Nt "Mt.call" (i32.const 20)) "undefined")
+(assert_trap (invoke $Nt "call" (i32.const 7)) "undefined")
+(assert_trap (invoke $Nt "call Mt.call" (i32.const 20)) "undefined")
+
+(assert_return (invoke $Nt "call" (i32.const 3)) (i32.const -4))
+(assert_trap (invoke $Nt "call" (i32.const 4)) "indirect call")
+
+(module $Ot
+ (type (func (result i32)))
+
+ (func $h (import "Mt" "h") (result i32))
+ (table (import "Mt" "tab") 5 funcref)
+ (elem (i32.const 1) $i $h)
+ (func $i (result i32) (i32.const 6))
+
+ (func (export "call") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0))
+ )
+)
+
+(assert_return (invoke $Mt "call" (i32.const 3)) (i32.const 4))
+(assert_return (invoke $Nt "Mt.call" (i32.const 3)) (i32.const 4))
+(assert_return (invoke $Nt "call Mt.call" (i32.const 3)) (i32.const 4))
+(assert_return (invoke $Ot "call" (i32.const 3)) (i32.const 4))
+
+(assert_return (invoke $Mt "call" (i32.const 2)) (i32.const -4))
+(assert_return (invoke $Nt "Mt.call" (i32.const 2)) (i32.const -4))
+(assert_return (invoke $Nt "call" (i32.const 2)) (i32.const 5))
+(assert_return (invoke $Nt "call Mt.call" (i32.const 2)) (i32.const -4))
+(assert_return (invoke $Ot "call" (i32.const 2)) (i32.const -4))
+
+(assert_return (invoke $Mt "call" (i32.const 1)) (i32.const 6))
+(assert_return (invoke $Nt "Mt.call" (i32.const 1)) (i32.const 6))
+(assert_return (invoke $Nt "call" (i32.const 1)) (i32.const 5))
+(assert_return (invoke $Nt "call Mt.call" (i32.const 1)) (i32.const 6))
+(assert_return (invoke $Ot "call" (i32.const 1)) (i32.const 6))
+
+(assert_trap (invoke $Mt "call" (i32.const 0)) "uninitialized")
+(assert_trap (invoke $Nt "Mt.call" (i32.const 0)) "uninitialized")
+(assert_return (invoke $Nt "call" (i32.const 0)) (i32.const 5))
+(assert_trap (invoke $Nt "call Mt.call" (i32.const 0)) "uninitialized")
+(assert_trap (invoke $Ot "call" (i32.const 0)) "uninitialized")
+
+(assert_trap (invoke $Ot "call" (i32.const 20)) "undefined")
+
+(module
+ (table (import "Mt" "tab") 0 funcref)
+ (elem (i32.const 9) $f)
+ (func $f)
+)
+
+(module $G1 (global (export "g") i32 (i32.const 5)))
+(register "G1" $G1)
+(module $G2
+ (global (import "G1" "g") i32)
+ (global (export "g") i32 (global.get 0))
+)
+(assert_return (get $G2 "g") (i32.const 5))
+
+(assert_trap
+ (module
+ (table (import "Mt" "tab") 0 funcref)
+ (elem (i32.const 10) $f)
+ (func $f)
+ )
+ "out of bounds"
+)
+
+(assert_unlinkable
+ (module
+ (table (import "Mt" "tab") 10 funcref)
+ (memory (import "Mt" "mem") 1) ;; does not exist
+ (func $f (result i32) (i32.const 0))
+ (elem (i32.const 7) $f)
+ (elem (i32.const 9) $f)
+ )
+ "unknown import"
+)
+(assert_trap (invoke $Mt "call" (i32.const 7)) "uninitialized")
+
+;; Unlike in the v1 spec, the elements stored before an out-of-bounds access
+;; persist after the instantiation failure.
+(assert_trap
+ (module
+ (table (import "Mt" "tab") 10 funcref)
+ (func $f (result i32) (i32.const 0))
+ (elem (i32.const 7) $f)
+ (elem (i32.const 8) $f $f $f $f $f) ;; (partially) out of bounds
+ )
+ "out of bounds"
+)
+(assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0))
+(assert_trap (invoke $Mt "call" (i32.const 8)) "uninitialized")
+
+(assert_trap
+ (module
+ (table (import "Mt" "tab") 10 funcref)
+ (func $f (result i32) (i32.const 0))
+ (elem (i32.const 7) $f)
+ (memory 1)
+ (data (i32.const 0x10000) "d") ;; out of bounds
+ )
+ "out of bounds"
+)
+(assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0))
+
+
+;; Memories
+
+(module $Mm
+ (memory (export "mem") 1 5)
+ (data (i32.const 10) "\00\01\02\03\04\05\06\07\08\09")
+
+ (func (export "load") (param $a i32) (result i32)
+ (i32.load8_u (local.get 0))
+ )
+)
+(register "Mm" $Mm)
+
+(module $Nm
+ (func $loadM (import "Mm" "load") (param i32) (result i32))
+
+ (memory 1)
+ (data (i32.const 10) "\f0\f1\f2\f3\f4\f5")
+
+ (export "Mm.load" (func $loadM))
+ (func (export "load") (param $a i32) (result i32)
+ (i32.load8_u (local.get 0))
+ )
+)
+
+(assert_return (invoke $Mm "load" (i32.const 12)) (i32.const 2))
+(assert_return (invoke $Nm "Mm.load" (i32.const 12)) (i32.const 2))
+(assert_return (invoke $Nm "load" (i32.const 12)) (i32.const 0xf2))
+
+(module $Om
+ (memory (import "Mm" "mem") 1)
+ (data (i32.const 5) "\a0\a1\a2\a3\a4\a5\a6\a7")
+
+ (func (export "load") (param $a i32) (result i32)
+ (i32.load8_u (local.get 0))
+ )
+)
+
+(assert_return (invoke $Mm "load" (i32.const 12)) (i32.const 0xa7))
+(assert_return (invoke $Nm "Mm.load" (i32.const 12)) (i32.const 0xa7))
+(assert_return (invoke $Nm "load" (i32.const 12)) (i32.const 0xf2))
+(assert_return (invoke $Om "load" (i32.const 12)) (i32.const 0xa7))
+
+(module
+ (memory (import "Mm" "mem") 0)
+ (data (i32.const 0xffff) "a")
+)
+
+(assert_trap
+ (module
+ (memory (import "Mm" "mem") 0)
+ (data (i32.const 0x10000) "a")
+ )
+ "out of bounds"
+)
+
+(module $Pm
+ (memory (import "Mm" "mem") 1 8)
+
+ (func (export "grow") (param $a i32) (result i32)
+ (memory.grow (local.get 0))
+ )
+)
+
+(assert_return (invoke $Pm "grow" (i32.const 0)) (i32.const 1))
+(assert_return (invoke $Pm "grow" (i32.const 2)) (i32.const 1))
+(assert_return (invoke $Pm "grow" (i32.const 0)) (i32.const 3))
+(assert_return (invoke $Pm "grow" (i32.const 1)) (i32.const 3))
+(assert_return (invoke $Pm "grow" (i32.const 1)) (i32.const 4))
+(assert_return (invoke $Pm "grow" (i32.const 0)) (i32.const 5))
+(assert_return (invoke $Pm "grow" (i32.const 1)) (i32.const -1))
+(assert_return (invoke $Pm "grow" (i32.const 0)) (i32.const 5))
+
+(assert_unlinkable
+ (module
+ (func $host (import "spectest" "print"))
+ (memory (import "Mm" "mem") 1)
+ (table (import "Mm" "tab") 0 funcref) ;; does not exist
+ (data (i32.const 0) "abc")
+ )
+ "unknown import"
+)
+(assert_return (invoke $Mm "load" (i32.const 0)) (i32.const 0))
+
+;; Unlike in v1 spec, bytes written before an out-of-bounds access persist
+;; after the instantiation failure.
+(assert_trap
+ (module
+ ;; Note: the memory is 5 pages large by the time we get here.
+ (memory (import "Mm" "mem") 1)
+ (data (i32.const 0) "abc")
+ (data (i32.const 327670) "zzzzzzzzzzzzzzzzzz") ;; (partially) out of bounds
+ )
+ "out of bounds"
+)
+(assert_return (invoke $Mm "load" (i32.const 0)) (i32.const 97))
+(assert_return (invoke $Mm "load" (i32.const 327670)) (i32.const 0))
+
+(assert_trap
+ (module
+ (memory (import "Mm" "mem") 1)
+ (data (i32.const 0) "abc")
+ (table 0 funcref)
+ (func)
+ (elem (i32.const 0) 0) ;; out of bounds
+ )
+ "out of bounds"
+)
+(assert_return (invoke $Mm "load" (i32.const 0)) (i32.const 97))
+
+;; Store is modified if the start function traps.
+(module $Ms
+ (type $t (func (result i32)))
+ (memory (export "memory") 1)
+ (table (export "table") 1 funcref)
+ (func (export "get memory[0]") (type $t)
+ (i32.load8_u (i32.const 0))
+ )
+ (func (export "get table[0]") (type $t)
+ (call_indirect (type $t) (i32.const 0))
+ )
+)
+(register "Ms" $Ms)
+
+(assert_trap
+ (module
+ (import "Ms" "memory" (memory 1))
+ (import "Ms" "table" (table 1 funcref))
+ (data (i32.const 0) "hello")
+ (elem (i32.const 0) $f)
+ (func $f (result i32)
+ (i32.const 0xdead)
+ )
+ (func $main
+ (unreachable)
+ )
+ (start $main)
+ )
+ "unreachable"
+)
+
+(assert_return (invoke $Ms "get memory[0]") (i32.const 104)) ;; 'h'
+(assert_return (invoke $Ms "get table[0]") (i32.const 0xdead))
+(;; STDOUT ;;;
+90/90 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/old-spec/bulk-memory-operations/table_copy.txt b/test/wasm2c/old-spec/bulk-memory-operations/table_copy.txt
new file mode 100644
index 00000000..ab5fd914
--- /dev/null
+++ b/test/wasm2c/old-spec/bulk-memory-operations/table_copy.txt
@@ -0,0 +1,1599 @@
+;;; TOOL: run-spec-wasm2c
+;;
+;; Generated by ../meta/generate_table_copy.js
+;;
+
+(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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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 (i32.const 13) (i32.const 2) (i32.const 3)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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 (i32.const 25) (i32.const 15) (i32.const 2)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 25)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 26)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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 (i32.const 13) (i32.const 25) (i32.const 3)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_trap (invoke "check" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 15)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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 (i32.const 20) (i32.const 22) (i32.const 4)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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 (i32.const 25) (i32.const 1) (i32.const 3)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 26)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 27)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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 (i32.const 10) (i32.const 12) (i32.const 7)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 10)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 11)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 12)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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 (i32.const 12) (i32.const 10) (i32.const 7)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 13)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 14)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 17)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 18)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 29)) "uninitialized element")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 28) (i32.const 1) (i32.const 3))
+ ))
+
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 0xFFFFFFFE) (i32.const 1) (i32.const 2))
+ ))
+
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 15) (i32.const 25) (i32.const 6))
+ ))
+
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 15) (i32.const 0xFFFFFFFE) (i32.const 2))
+ ))
+
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 15) (i32.const 25) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 30) (i32.const 15) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 31) (i32.const 15) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 15) (i32.const 30) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 15) (i32.const 31) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 30) (i32.const 30) (i32.const 0))
+ ))
+
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 (i32.const 31) (i32.const 31) (i32.const 0))
+ ))
+
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 0)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 24) (i32.const 0) (i32.const 16))
+ "out of bounds")
+(assert_return (invoke "test" (i32.const 0)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 1)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 2)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 3)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 5)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 6)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 7)) (i32.const 7))
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 0)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 23) (i32.const 0) (i32.const 15))
+ "out of bounds")
+(assert_return (invoke "test" (i32.const 0)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 1)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 2)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 3)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 5)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 6)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 7)) (i32.const 7))
+(assert_return (invoke "test" (i32.const 8)) (i32.const 8))
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 24)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 0) (i32.const 24) (i32.const 16))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 24)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 25)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 26)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 27)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 28)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 29)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 30)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 31)) (i32.const 7))
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 23)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 0) (i32.const 23) (i32.const 15))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 23)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 24)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 25)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 26)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 27)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 28)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 29)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 30)) (i32.const 7))
+(assert_return (invoke "test" (i32.const 31)) (i32.const 8))
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 11)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 24) (i32.const 11) (i32.const 16))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 11)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 12)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 13)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 14)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 15)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 16)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 17)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 18)) (i32.const 7))
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 24)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 11) (i32.const 24) (i32.const 16))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 24)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 25)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 26)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 27)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 28)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 29)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 30)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 31)) (i32.const 7))
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 21)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 24) (i32.const 21) (i32.const 16))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 21)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 22)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 23)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 24)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 25)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 26)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 27)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 28)) (i32.const 7))
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 24)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 21) (i32.const 24) (i32.const 16))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 24)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 25)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 26)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 27)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 28)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 29)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 30)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 31)) (i32.const 7))
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem (i32.const 21)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 21) (i32.const 21) (i32.const 16))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 21)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 22)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 23)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 24)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 25)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 26)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 27)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 28)) (i32.const 7))
+(assert_return (invoke "test" (i32.const 29)) (i32.const 8))
+(assert_return (invoke "test" (i32.const 30)) (i32.const 9))
+(assert_return (invoke "test" (i32.const 31)) (i32.const 10))
+
+(module
+ (type (func (result i32)))
+ (table 128 128 funcref)
+ (elem (i32.const 112)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 0) (i32.const 112) (i32.const 4294967264))
+ "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 32)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 33)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 34)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 35)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 36)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 37)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 38)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 39)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 40)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 41)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 42)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 43)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 44)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 45)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 46)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 47)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 48)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 49)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 50)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 51)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 52)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 53)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 54)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 55)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 56)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 57)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 58)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 59)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 60)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 61)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 62)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 63)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 64)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 65)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 66)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 67)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 68)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 69)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 70)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 71)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 72)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 73)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 74)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 75)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 76)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 77)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 78)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 79)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 80)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 81)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 82)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 83)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 84)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 85)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 86)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 87)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 88)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 89)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 90)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 91)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 92)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 93)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 94)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 95)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 96)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 97)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 98)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 99)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 100)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 101)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 102)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 103)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 104)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 105)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 106)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 107)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 108)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 109)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 110)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 111)) "uninitialized element")
+(assert_return (invoke "test" (i32.const 112)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 113)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 114)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 115)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 116)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 117)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 118)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 119)) (i32.const 7))
+(assert_return (invoke "test" (i32.const 120)) (i32.const 8))
+(assert_return (invoke "test" (i32.const 121)) (i32.const 9))
+(assert_return (invoke "test" (i32.const 122)) (i32.const 10))
+(assert_return (invoke "test" (i32.const 123)) (i32.const 11))
+(assert_return (invoke "test" (i32.const 124)) (i32.const 12))
+(assert_return (invoke "test" (i32.const 125)) (i32.const 13))
+(assert_return (invoke "test" (i32.const 126)) (i32.const 14))
+(assert_return (invoke "test" (i32.const 127)) (i32.const 15))
+
+(module
+ (type (func (result i32)))
+ (table 128 128 funcref)
+ (elem (i32.const 0)
+ $f0 $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15)
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $targetOffs i32) (param $srcOffs i32) (param $len i32)
+ (table.copy (local.get $targetOffs) (local.get $srcOffs) (local.get $len))))
+
+(assert_trap (invoke "run" (i32.const 112) (i32.const 0) (i32.const 4294967264))
+ "out of bounds")
+(assert_return (invoke "test" (i32.const 0)) (i32.const 0))
+(assert_return (invoke "test" (i32.const 1)) (i32.const 1))
+(assert_return (invoke "test" (i32.const 2)) (i32.const 2))
+(assert_return (invoke "test" (i32.const 3)) (i32.const 3))
+(assert_return (invoke "test" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "test" (i32.const 5)) (i32.const 5))
+(assert_return (invoke "test" (i32.const 6)) (i32.const 6))
+(assert_return (invoke "test" (i32.const 7)) (i32.const 7))
+(assert_return (invoke "test" (i32.const 8)) (i32.const 8))
+(assert_return (invoke "test" (i32.const 9)) (i32.const 9))
+(assert_return (invoke "test" (i32.const 10)) (i32.const 10))
+(assert_return (invoke "test" (i32.const 11)) (i32.const 11))
+(assert_return (invoke "test" (i32.const 12)) (i32.const 12))
+(assert_return (invoke "test" (i32.const 13)) (i32.const 13))
+(assert_return (invoke "test" (i32.const 14)) (i32.const 14))
+(assert_return (invoke "test" (i32.const 15)) (i32.const 15))
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 32)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 33)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 34)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 35)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 36)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 37)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 38)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 39)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 40)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 41)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 42)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 43)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 44)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 45)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 46)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 47)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 48)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 49)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 50)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 51)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 52)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 53)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 54)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 55)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 56)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 57)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 58)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 59)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 60)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 61)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 62)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 63)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 64)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 65)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 66)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 67)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 68)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 69)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 70)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 71)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 72)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 73)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 74)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 75)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 76)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 77)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 78)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 79)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 80)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 81)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 82)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 83)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 84)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 85)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 86)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 87)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 88)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 89)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 90)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 91)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 92)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 93)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 94)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 95)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 96)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 97)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 98)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 99)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 100)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 101)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 102)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 103)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 104)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 105)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 106)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 107)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 108)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 109)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 110)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 111)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 112)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 113)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 114)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 115)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 116)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 117)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 118)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 119)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 120)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 121)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 122)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 123)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 124)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 125)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 126)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 127)) "uninitialized element")
+(;; STDOUT ;;;
+802/802 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/old-spec/bulk-memory-operations/table_init.txt b/test/wasm2c/old-spec/bulk-memory-operations/table_init.txt
new file mode 100644
index 00000000..0c69a894
--- /dev/null
+++ b/test/wasm2c/old-spec/bulk-memory-operations/table_init.txt
@@ -0,0 +1,1780 @@
+;;; TOOL: run-spec-wasm2c
+;;
+;; Generated by ../meta/generate_table_init.js
+;;
+
+(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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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.init 1 (i32.const 7) (i32.const 0) (i32.const 4)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 7)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 8)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 9)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 10)) (i32.const 8))
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 6))
+(assert_trap (invoke "check" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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.init 3 (i32.const 15) (i32.const 1) (i32.const 3)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 13)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 14)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 9))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 17)) (i32.const 7))
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (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 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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 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.init 1 (i32.const 7) (i32.const 0) (i32.const 4))
+ (elem.drop 1)
+ (table.init 3 (i32.const 15) (i32.const 1) (i32.const 3))
+ (elem.drop 3)
+ (table.copy (i32.const 20) (i32.const 15) (i32.const 5))
+ (table.copy (i32.const 21) (i32.const 29) (i32.const 1))
+ (table.copy (i32.const 24) (i32.const 10) (i32.const 1))
+ (table.copy (i32.const 13) (i32.const 11) (i32.const 4))
+ (table.copy (i32.const 19) (i32.const 20) (i32.const 5)))
+ (func (export "check") (param i32) (result i32)
+ (call_indirect (type 0) (local.get 0)))
+)
+
+(invoke "test")
+(assert_trap (invoke "check" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 1)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 2)) (i32.const 3))
+(assert_return (invoke "check" (i32.const 3)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 4)) (i32.const 4))
+(assert_return (invoke "check" (i32.const 5)) (i32.const 1))
+(assert_trap (invoke "check" (i32.const 6)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 7)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 8)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 9)) (i32.const 1))
+(assert_return (invoke "check" (i32.const 10)) (i32.const 8))
+(assert_trap (invoke "check" (i32.const 11)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 12)) (i32.const 7))
+(assert_trap (invoke "check" (i32.const 13)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 14)) (i32.const 7))
+(assert_return (invoke "check" (i32.const 15)) (i32.const 5))
+(assert_return (invoke "check" (i32.const 16)) (i32.const 2))
+(assert_return (invoke "check" (i32.const 17)) (i32.const 7))
+(assert_trap (invoke "check" (i32.const 18)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 19)) (i32.const 9))
+(assert_trap (invoke "check" (i32.const 20)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 21)) (i32.const 7))
+(assert_trap (invoke "check" (i32.const 22)) "uninitialized element")
+(assert_return (invoke "check" (i32.const 23)) (i32.const 8))
+(assert_return (invoke "check" (i32.const 24)) (i32.const 8))
+(assert_trap (invoke "check" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "check" (i32.const 29)) "uninitialized element")
+(assert_invalid
+ (module
+ (func (export "test")
+ (elem.drop 0)))
+ "unknown elem segment 0")
+
+(assert_invalid
+ (module
+ (func (export "test")
+ (table.init 0 (i32.const 12) (i32.const 1) (i32.const 1))))
+ "unknown table 0")
+
+(assert_invalid
+ (module
+ (elem funcref (ref.func 0))
+ (func (result i32) (i32.const 0))
+ (func (export "test")
+ (elem.drop 4)))
+ "unknown elem segment 4")
+
+(assert_invalid
+ (module
+ (elem funcref (ref.func 0))
+ (func (result i32) (i32.const 0))
+ (func (export "test")
+ (table.init 4 (i32.const 12) (i32.const 1) (i32.const 1))))
+ "unknown table 0")
+
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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")
+ (elem.drop 2)
+ ))
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 2 (i32.const 12) (i32.const 1) (i32.const 1))
+ ))
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 12) (i32.const 1) (i32.const 1))
+ (table.init 1 (i32.const 21) (i32.const 1) (i32.const 1))))
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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")
+ (elem.drop 1)
+ (elem.drop 1)))
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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")
+ (elem.drop 1)
+ (table.init 1 (i32.const 12) (i32.const 1) (i32.const 1))))
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 12) (i32.const 0) (i32.const 5))
+ ))
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 12) (i32.const 2) (i32.const 3))
+ ))
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 28) (i32.const 1) (i32.const 3))
+ ))
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 12) (i32.const 4) (i32.const 0))
+ ))
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 12) (i32.const 5) (i32.const 0))
+ ))
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 30) (i32.const 2) (i32.const 0))
+ ))
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 31) (i32.const 2) (i32.const 0))
+ ))
+(assert_trap (invoke "test") "out of bounds")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 30) (i32.const 4) (i32.const 0))
+ ))
+(invoke "test")
+
+(module
+ (table 30 30 funcref)
+ (elem (i32.const 2) 3 1 4 1)
+ (elem funcref
+ (ref.func 2) (ref.func 7) (ref.func 1) (ref.func 8))
+ (elem (i32.const 12) 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.init 1 (i32.const 31) (i32.const 5) (i32.const 0))
+ ))
+(assert_trap (invoke "test") "out of bounds")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (i32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (i32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (i32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f32.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (i64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (i64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (i64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (i64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i32.const 1) (f64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i32.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f32.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (i64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f32.const 1) (f64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i32.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f32.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (i64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (i64.const 1) (f64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i32.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f32.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f32.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f32.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f32.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (i64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f64.const 1) (i32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f64.const 1) (f32.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f64.const 1) (i64.const 1))))
+ "type mismatch")
+
+(assert_invalid
+ (module
+ (table 10 funcref)
+ (elem funcref (ref.func $f0) (ref.func $f0) (ref.func $f0))
+ (func $f0)
+ (func (export "test")
+ (table.init 0 (f64.const 1) (f64.const 1) (f64.const 1))))
+ "type mismatch")
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem funcref
+ (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3)
+ (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7)
+ (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11)
+ (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15))
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $offs i32) (param $len i32)
+ (table.init 0 (local.get $offs) (i32.const 0) (local.get $len))))
+(assert_trap (invoke "run" (i32.const 24) (i32.const 16)) "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 32 64 funcref)
+ (elem funcref
+ (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3)
+ (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7)
+ (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11)
+ (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15))
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $offs i32) (param $len i32)
+ (table.init 0 (local.get $offs) (i32.const 0) (local.get $len))))
+(assert_trap (invoke "run" (i32.const 25) (i32.const 16)) "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 160 320 funcref)
+ (elem funcref
+ (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3)
+ (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7)
+ (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11)
+ (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15))
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $offs i32) (param $len i32)
+ (table.init 0 (local.get $offs) (i32.const 0) (local.get $len))))
+(assert_trap (invoke "run" (i32.const 96) (i32.const 32)) "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 32)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 33)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 34)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 35)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 36)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 37)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 38)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 39)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 40)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 41)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 42)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 43)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 44)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 45)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 46)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 47)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 48)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 49)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 50)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 51)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 52)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 53)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 54)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 55)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 56)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 57)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 58)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 59)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 60)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 61)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 62)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 63)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 64)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 65)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 66)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 67)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 68)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 69)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 70)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 71)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 72)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 73)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 74)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 75)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 76)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 77)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 78)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 79)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 80)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 81)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 82)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 83)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 84)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 85)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 86)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 87)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 88)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 89)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 90)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 91)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 92)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 93)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 94)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 95)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 96)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 97)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 98)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 99)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 100)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 101)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 102)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 103)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 104)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 105)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 106)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 107)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 108)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 109)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 110)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 111)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 112)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 113)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 114)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 115)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 116)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 117)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 118)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 119)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 120)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 121)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 122)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 123)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 124)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 125)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 126)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 127)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 128)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 129)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 130)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 131)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 132)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 133)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 134)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 135)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 136)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 137)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 138)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 139)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 140)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 141)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 142)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 143)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 144)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 145)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 146)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 147)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 148)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 149)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 150)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 151)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 152)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 153)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 154)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 155)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 156)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 157)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 158)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 159)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 160 320 funcref)
+ (elem funcref
+ (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3)
+ (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7)
+ (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11)
+ (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15))
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $offs i32) (param $len i32)
+ (table.init 0 (local.get $offs) (i32.const 0) (local.get $len))))
+(assert_trap (invoke "run" (i32.const 97) (i32.const 31)) "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 32)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 33)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 34)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 35)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 36)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 37)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 38)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 39)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 40)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 41)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 42)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 43)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 44)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 45)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 46)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 47)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 48)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 49)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 50)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 51)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 52)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 53)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 54)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 55)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 56)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 57)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 58)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 59)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 60)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 61)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 62)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 63)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 64)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 65)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 66)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 67)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 68)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 69)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 70)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 71)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 72)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 73)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 74)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 75)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 76)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 77)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 78)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 79)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 80)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 81)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 82)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 83)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 84)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 85)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 86)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 87)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 88)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 89)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 90)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 91)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 92)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 93)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 94)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 95)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 96)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 97)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 98)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 99)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 100)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 101)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 102)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 103)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 104)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 105)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 106)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 107)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 108)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 109)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 110)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 111)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 112)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 113)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 114)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 115)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 116)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 117)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 118)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 119)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 120)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 121)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 122)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 123)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 124)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 125)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 126)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 127)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 128)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 129)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 130)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 131)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 132)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 133)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 134)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 135)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 136)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 137)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 138)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 139)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 140)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 141)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 142)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 143)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 144)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 145)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 146)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 147)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 148)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 149)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 150)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 151)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 152)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 153)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 154)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 155)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 156)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 157)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 158)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 159)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 64 64 funcref)
+ (elem funcref
+ (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3)
+ (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7)
+ (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11)
+ (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15))
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $offs i32) (param $len i32)
+ (table.init 0 (local.get $offs) (i32.const 0) (local.get $len))))
+(assert_trap (invoke "run" (i32.const 48) (i32.const 4294967280)) "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 16)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 17)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 18)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 19)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 20)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 21)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 22)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 23)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 24)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 25)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 26)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 27)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 28)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 29)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 30)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 31)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 32)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 33)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 34)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 35)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 36)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 37)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 38)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 39)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 40)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 41)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 42)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 43)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 44)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 45)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 46)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 47)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 48)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 49)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 50)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 51)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 52)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 53)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 54)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 55)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 56)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 57)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 58)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 59)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 60)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 61)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 62)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 63)) "uninitialized element")
+
+(module
+ (type (func (result i32)))
+ (table 16 16 funcref)
+ (elem funcref
+ (ref.func $f0) (ref.func $f1) (ref.func $f2) (ref.func $f3)
+ (ref.func $f4) (ref.func $f5) (ref.func $f6) (ref.func $f7)
+ (ref.func $f8) (ref.func $f9) (ref.func $f10) (ref.func $f11)
+ (ref.func $f12) (ref.func $f13) (ref.func $f14) (ref.func $f15))
+ (func $f0 (export "f0") (result i32) (i32.const 0))
+ (func $f1 (export "f1") (result i32) (i32.const 1))
+ (func $f2 (export "f2") (result i32) (i32.const 2))
+ (func $f3 (export "f3") (result i32) (i32.const 3))
+ (func $f4 (export "f4") (result i32) (i32.const 4))
+ (func $f5 (export "f5") (result i32) (i32.const 5))
+ (func $f6 (export "f6") (result i32) (i32.const 6))
+ (func $f7 (export "f7") (result i32) (i32.const 7))
+ (func $f8 (export "f8") (result i32) (i32.const 8))
+ (func $f9 (export "f9") (result i32) (i32.const 9))
+ (func $f10 (export "f10") (result i32) (i32.const 10))
+ (func $f11 (export "f11") (result i32) (i32.const 11))
+ (func $f12 (export "f12") (result i32) (i32.const 12))
+ (func $f13 (export "f13") (result i32) (i32.const 13))
+ (func $f14 (export "f14") (result i32) (i32.const 14))
+ (func $f15 (export "f15") (result i32) (i32.const 15))
+ (func (export "test") (param $n i32) (result i32)
+ (call_indirect (type 0) (local.get $n)))
+ (func (export "run") (param $offs i32) (param $len i32)
+ (table.init 0 (local.get $offs) (i32.const 8) (local.get $len))))
+(assert_trap (invoke "run" (i32.const 0) (i32.const 4294967292)) "out of bounds")
+(assert_trap (invoke "test" (i32.const 0)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 1)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 2)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 3)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 4)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 5)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 6)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 7)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 8)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 9)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 10)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 11)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 12)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 13)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 14)) "uninitialized element")
+(assert_trap (invoke "test" (i32.const 15)) "uninitialized element")
+
+(module
+ (table 1 funcref)
+ ;; 65 elem segments. 64 is the smallest positive number that is encoded
+ ;; differently as a signed LEB.
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref) (elem funcref) (elem funcref) (elem funcref)
+ (elem funcref)
+ (func (table.init 64 (i32.const 0) (i32.const 0) (i32.const 0))))
+
+(;; STDOUT ;;;
+568/568 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/old-spec/elem.txt b/test/wasm2c/old-spec/elem.txt
deleted file mode 100644
index 982f0747..00000000
--- a/test/wasm2c/old-spec/elem.txt
+++ /dev/null
@@ -1,447 +0,0 @@
-;;; TOOL: run-spec-wasm2c
-;;; ARGS*: --disable-bulk-memory --disable-reference-types
-;; Test the element section
-
-;; Syntax
-(module
- (table $t 10 funcref)
- (func $f)
- (elem (i32.const 0))
- (elem (i32.const 0) $f $f)
- (elem (offset (i32.const 0)))
- (elem (offset (i32.const 0)) $f $f)
- (elem 0 (i32.const 0))
- (elem 0x0 (i32.const 0) $f $f)
- (elem 0x000 (offset (i32.const 0)))
- (elem 0 (offset (i32.const 0)) $f $f)
- (elem $t (i32.const 0))
- (elem $t (i32.const 0) $f $f)
- (elem $t (offset (i32.const 0)))
- (elem $t (offset (i32.const 0)) $f $f)
-)
-
-;; Basic use
-
-(module
- (table 10 funcref)
- (func $f)
- (elem (i32.const 0) $f)
-)
-(module
- (import "spectest" "table" (table 10 funcref))
- (func $f)
- (elem (i32.const 0) $f)
-)
-
-(module
- (table 10 funcref)
- (func $f)
- (elem (i32.const 0) $f)
- (elem (i32.const 3) $f)
- (elem (i32.const 7) $f)
- (elem (i32.const 5) $f)
- (elem (i32.const 3) $f)
-)
-(module
- (import "spectest" "table" (table 10 funcref))
- (func $f)
- (elem (i32.const 9) $f)
- (elem (i32.const 3) $f)
- (elem (i32.const 7) $f)
- (elem (i32.const 3) $f)
- (elem (i32.const 5) $f)
-)
-
-(module
- (global (import "spectest" "global_i32") i32)
- (table 1000 funcref)
- (func $f)
- (elem (global.get 0) $f)
-)
-
-(module
- (global $g (import "spectest" "global_i32") i32)
- (table 1000 funcref)
- (func $f)
- (elem (global.get $g) $f)
-)
-
-(module
- (type $out-i32 (func (result i32)))
- (table 10 funcref)
- (elem (i32.const 7) $const-i32-a)
- (elem (i32.const 9) $const-i32-b)
- (func $const-i32-a (type $out-i32) (i32.const 65))
- (func $const-i32-b (type $out-i32) (i32.const 66))
- (func (export "call-7") (type $out-i32)
- (call_indirect (type $out-i32) (i32.const 7))
- )
- (func (export "call-9") (type $out-i32)
- (call_indirect (type $out-i32) (i32.const 9))
- )
-)
-(assert_return (invoke "call-7") (i32.const 65))
-(assert_return (invoke "call-9") (i32.const 66))
-
-;; Corner cases
-
-(module
- (table 10 funcref)
- (func $f)
- (elem (i32.const 9) $f)
-)
-(module
- (import "spectest" "table" (table 10 funcref))
- (func $f)
- (elem (i32.const 9) $f)
-)
-
-(module
- (table 0 funcref)
- (elem (i32.const 0))
-)
-(module
- (import "spectest" "table" (table 0 funcref))
- (elem (i32.const 0))
-)
-
-(module
- (table 0 0 funcref)
- (elem (i32.const 0))
-)
-
-(module
- (table 20 funcref)
- (elem (i32.const 20))
-)
-
-(module
- (import "spectest" "table" (table 0 funcref))
- (func $f)
- (elem (i32.const 0) $f)
-)
-
-(module
- (import "spectest" "table" (table 0 100 funcref))
- (func $f)
- (elem (i32.const 0) $f)
-)
-
-(module
- (import "spectest" "table" (table 0 funcref))
- (func $f)
- (elem (i32.const 1) $f)
-)
-
-(module
- (import "spectest" "table" (table 0 30 funcref))
- (func $f)
- (elem (i32.const 1) $f)
-)
-
-;; Invalid bounds for elements
-
-(assert_unlinkable
- (module
- (table 0 funcref)
- (func $f)
- (elem (i32.const 0) $f)
- )
- "elements segment does not fit"
-)
-
-(assert_unlinkable
- (module
- (table 0 0 funcref)
- (func $f)
- (elem (i32.const 0) $f)
- )
- "elements segment does not fit"
-)
-
-(assert_unlinkable
- (module
- (table 0 1 funcref)
- (func $f)
- (elem (i32.const 0) $f)
- )
- "elements segment does not fit"
-)
-
-(assert_unlinkable
- (module
- (table 0 funcref)
- (elem (i32.const 1))
- )
- "elements segment does not fit"
-)
-
-(assert_unlinkable
- (module
- (table 10 funcref)
- (func $f)
- (elem (i32.const 10) $f)
- )
- "elements segment does not fit"
-)
-(assert_unlinkable
- (module
- (import "spectest" "table" (table 10 funcref))
- (func $f)
- (elem (i32.const 10) $f)
- )
- "elements segment does not fit"
-)
-
-(assert_unlinkable
- (module
- (table 10 20 funcref)
- (func $f)
- (elem (i32.const 10) $f)
- )
- "elements segment does not fit"
-)
-(assert_unlinkable
- (module
- (import "spectest" "table" (table 10 funcref))
- (func $f)
- (elem (i32.const 10) $f)
- )
- "elements segment does not fit"
-)
-
-(assert_unlinkable
- (module
- (table 10 funcref)
- (func $f)
- (elem (i32.const -1) $f)
- )
- "elements segment does not fit"
-)
-(assert_unlinkable
- (module
- (import "spectest" "table" (table 10 funcref))
- (func $f)
- (elem (i32.const -1) $f)
- )
- "elements segment does not fit"
-)
-
-(assert_unlinkable
- (module
- (table 10 funcref)
- (func $f)
- (elem (i32.const -10) $f)
- )
- "elements segment does not fit"
-)
-(assert_unlinkable
- (module
- (import "spectest" "table" (table 10 funcref))
- (func $f)
- (elem (i32.const -10) $f)
- )
- "elements segment does not fit"
-)
-
-;; Element without table
-
-(assert_invalid
- (module
- (func $f)
- (elem (i32.const 0) $f)
- )
- "unknown table"
-)
-
-;; Invalid offsets
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (i64.const 0))
- )
- "type mismatch"
-)
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (offset (;empty instruction sequence;)))
- )
- "type mismatch"
-)
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (offset (i32.const 0) (i32.const 0)))
- )
- "type mismatch"
-)
-
-(assert_invalid
- (module
- (global (import "test" "global-i32") i32)
- (table 1 funcref)
- (elem (offset (global.get 0) (global.get 0)))
- )
- "type mismatch"
-)
-
-(assert_invalid
- (module
- (global (import "test" "global-i32") i32)
- (table 1 funcref)
- (elem (offset (global.get 0) (i32.const 0)))
- )
- "type mismatch"
-)
-
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (i32.ctz (i32.const 0)))
- )
- "constant expression required"
-)
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (nop))
- )
- "constant expression required"
-)
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (offset (nop) (i32.const 0)))
- )
- "constant expression required"
-)
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (offset (i32.const 0) (nop)))
- )
- "constant expression required"
-)
-
-;; Use of internal globals in constant expressions is not allowed in MVP.
-;; (assert_invalid
-;; (module (memory 1) (data (global.get $g)) (global $g (mut i32) (i32.const 0)))
-;; "constant expression required"
-;; )
-
-(assert_invalid
- (module
- (table 1 funcref)
- (elem (global.get 0))
- )
- "unknown global 0"
-)
-
-(assert_invalid
- (module
- (global (import "test" "global-i32") i32)
- (table 1 funcref)
- (elem (global.get 1))
- )
- "unknown global 1"
-)
-
-(assert_invalid
- (module
- (global (import "test" "global-mut-i32") (mut i32))
- (table 1 funcref)
- (elem (global.get 0))
- )
- "constant expression required"
-)
-
-;; Two elements target the same slot
-
-(module
- (type $out-i32 (func (result i32)))
- (table 10 funcref)
- (elem (i32.const 9) $const-i32-a)
- (elem (i32.const 9) $const-i32-b)
- (func $const-i32-a (type $out-i32) (i32.const 65))
- (func $const-i32-b (type $out-i32) (i32.const 66))
- (func (export "call-overwritten") (type $out-i32)
- (call_indirect (type $out-i32) (i32.const 9))
- )
-)
-(assert_return (invoke "call-overwritten") (i32.const 66))
-
-(module
- (type $out-i32 (func (result i32)))
- (import "spectest" "table" (table 10 funcref))
- (elem (i32.const 9) $const-i32-a)
- (elem (i32.const 9) $const-i32-b)
- (func $const-i32-a (type $out-i32) (i32.const 65))
- (func $const-i32-b (type $out-i32) (i32.const 66))
- (func (export "call-overwritten-element") (type $out-i32)
- (call_indirect (type $out-i32) (i32.const 9))
- )
-)
-(assert_return (invoke "call-overwritten-element") (i32.const 66))
-
-;; Element sections across multiple modules change the same table
-
-(module $module1
- (type $out-i32 (func (result i32)))
- (table (export "shared-table") 10 funcref)
- (elem (i32.const 8) $const-i32-a)
- (elem (i32.const 9) $const-i32-b)
- (func $const-i32-a (type $out-i32) (i32.const 65))
- (func $const-i32-b (type $out-i32) (i32.const 66))
- (func (export "call-7") (type $out-i32)
- (call_indirect (type $out-i32) (i32.const 7))
- )
- (func (export "call-8") (type $out-i32)
- (call_indirect (type $out-i32) (i32.const 8))
- )
- (func (export "call-9") (type $out-i32)
- (call_indirect (type $out-i32) (i32.const 9))
- )
-)
-
-(register "module1" $module1)
-
-(assert_trap (invoke $module1 "call-7") "uninitialized element")
-(assert_return (invoke $module1 "call-8") (i32.const 65))
-(assert_return (invoke $module1 "call-9") (i32.const 66))
-
-(module $module2
- (type $out-i32 (func (result i32)))
- (import "module1" "shared-table" (table 10 funcref))
- (elem (i32.const 7) $const-i32-c)
- (elem (i32.const 8) $const-i32-d)
- (func $const-i32-c (type $out-i32) (i32.const 67))
- (func $const-i32-d (type $out-i32) (i32.const 68))
-)
-
-(assert_return (invoke $module1 "call-7") (i32.const 67))
-(assert_return (invoke $module1 "call-8") (i32.const 68))
-(assert_return (invoke $module1 "call-9") (i32.const 66))
-
-(module $module3
- (type $out-i32 (func (result i32)))
- (import "module1" "shared-table" (table 10 funcref))
- (elem (i32.const 8) $const-i32-e)
- (elem (i32.const 9) $const-i32-f)
- (func $const-i32-e (type $out-i32) (i32.const 69))
- (func $const-i32-f (type $out-i32) (i32.const 70))
-)
-
-(assert_return (invoke $module1 "call-7") (i32.const 67))
-(assert_return (invoke $module1 "call-8") (i32.const 69))
-(assert_return (invoke $module1 "call-9") (i32.const 70))
-(;; STDOUT ;;;
-13/13 tests passed.
-;;; STDOUT ;;)
diff --git a/test/wasm2c/spec/bulk.txt b/test/wasm2c/spec/bulk.txt
new file mode 100644
index 00000000..f5a3891b
--- /dev/null
+++ b/test/wasm2c/spec/bulk.txt
@@ -0,0 +1,5 @@
+;;; TOOL: run-spec-wasm2c
+;;; STDIN_FILE: third_party/testsuite/bulk.wast
+(;; STDOUT ;;;
+66/66 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/spec/elem.txt b/test/wasm2c/spec/elem.txt
new file mode 100644
index 00000000..498990d3
--- /dev/null
+++ b/test/wasm2c/spec/elem.txt
@@ -0,0 +1,5 @@
+;;; TOOL: run-spec-wasm2c
+;;; STDIN_FILE: third_party/testsuite/elem.wast
+(;; STDOUT ;;;
+27/27 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/spec/memory_copy.txt b/test/wasm2c/spec/memory_copy.txt
new file mode 100644
index 00000000..a585f545
--- /dev/null
+++ b/test/wasm2c/spec/memory_copy.txt
@@ -0,0 +1,5 @@
+;;; TOOL: run-spec-wasm2c
+;;; STDIN_FILE: third_party/testsuite/memory_copy.wast
+(;; STDOUT ;;;
+4338/4338 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/spec/memory_fill.txt b/test/wasm2c/spec/memory_fill.txt
new file mode 100644
index 00000000..fb599802
--- /dev/null
+++ b/test/wasm2c/spec/memory_fill.txt
@@ -0,0 +1,5 @@
+;;; TOOL: run-spec-wasm2c
+;;; STDIN_FILE: third_party/testsuite/memory_fill.wast
+(;; STDOUT ;;;
+20/20 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/spec/memory_init.txt b/test/wasm2c/spec/memory_init.txt
new file mode 100644
index 00000000..cd79f158
--- /dev/null
+++ b/test/wasm2c/spec/memory_init.txt
@@ -0,0 +1,5 @@
+;;; TOOL: run-spec-wasm2c
+;;; STDIN_FILE: third_party/testsuite/memory_init.wast
+(;; STDOUT ;;;
+140/140 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/spec/multi-memory/load.txt b/test/wasm2c/spec/multi-memory/load.txt
new file mode 100644
index 00000000..7618e6b0
--- /dev/null
+++ b/test/wasm2c/spec/multi-memory/load.txt
@@ -0,0 +1,6 @@
+;;; TOOL: run-spec-wasm2c
+;;; STDIN_FILE: third_party/testsuite/proposals/multi-memory/load.wast
+;;; ARGS*: --enable-multi-memory
+(;; STDOUT ;;;
+54/54 tests passed.
+;;; STDOUT ;;)
diff --git a/test/wasm2c/spec/multi-memory/store.txt b/test/wasm2c/spec/multi-memory/store.txt
new file mode 100644
index 00000000..a0af0042
--- /dev/null
+++ b/test/wasm2c/spec/multi-memory/store.txt
@@ -0,0 +1,6 @@
+;;; TOOL: run-spec-wasm2c
+;;; STDIN_FILE: third_party/testsuite/proposals/multi-memory/store.wast
+;;; ARGS*: --enable-multi-memory
+(;; STDOUT ;;;
+35/35 tests passed.
+;;; STDOUT ;;)