mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-31 13:17:31 +00:00 
			
		
		
		
	Update spec test to latest commit (#3293)
- Update spec test cases to commit bc76fd79cfe61033d7f4ad4a7e8fc4f996dc5ba8 on Apr. 3 - Update wabt binary to 1.0.34 to support newer spec cases - Add comparison between table declared elem type and table elem segment value type - Add a function to decide whether to execute test cases in a running mode - Keep using interpreter in GC spec because wat2wasm in wabt can't compile if.wast w/o errors - Re-factoring threads spec test case processing - Since wabt 1.0.34 release isn't compatible with ubuntu 20.04, compile it from source code - Disable CI to run aot multi-module temporarily, and will enable it in another PR
This commit is contained in:
		
							parent
							
								
									6b1d81650d
								
							
						
					
					
						commit
						b2eb7d838d
					
				
							
								
								
									
										18
									
								
								.github/workflows/compilation_on_sgx.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/workflows/compilation_on_sgx.yml
									
									
									
									
										vendored
									
									
								
							|  | @ -269,23 +269,24 @@ jobs: | |||
|     strategy: | ||||
|       matrix: | ||||
|         running_mode: ["classic-interp", "fast-interp", "aot", "fast-jit"] | ||||
|         test_option: ["-x -p -s spec -b -P", "-x -p -s spec -S -b -P", "-x -p -s spec -X -b -P"] | ||||
|         # FIXME: use binary release(adding -b) instead of building from source after upgrading to 22.04 | ||||
|         test_option: ["-x -p -s spec -P", "-x -p -s spec -S -P", "-x -p -s spec -X -P"] | ||||
|         llvm_cache_key: ["${{ needs.build_llvm_libraries.outputs.cache_key }}"] | ||||
|         exclude: | ||||
|           # classic-interp, fast-interp and fast-jit don't support simd | ||||
|           - running_mode: "classic-interp" | ||||
|             test_option: "-x -p -s spec -S -b -P" | ||||
|             test_option: "-x -p -s spec -S -P" | ||||
|           - running_mode: "fast-interp" | ||||
|             test_option: "-x -p -s spec -S -b -P" | ||||
|             test_option: "-x -p -s spec -S -P" | ||||
|           - running_mode: "fast-jit" | ||||
|             test_option: "-x -p -s spec -S -b -P" | ||||
|             test_option: "-x -p -s spec -S -P" | ||||
|           # classic-interp, fast-interp and fast jit don't support XIP | ||||
|           - running_mode: "classic-interp" | ||||
|             test_option: "-x -p -s spec -X -b -P" | ||||
|             test_option: "-x -p -s spec -X -P" | ||||
|           - running_mode: "fast-interp" | ||||
|             test_option: "-x -p -s spec -X -b -P" | ||||
|             test_option: "-x -p -s spec -X -P" | ||||
|           - running_mode: "fast-jit" | ||||
|             test_option: "-x -p -s spec -X -b -P" | ||||
|             test_option: "-x -p -s spec -X -P" | ||||
| 
 | ||||
|     steps: | ||||
|       - name: checkout | ||||
|  | @ -320,6 +321,9 @@ jobs: | |||
|           sudo apt update | ||||
|           sudo apt install -y libsgx-launch libsgx-urts | ||||
| 
 | ||||
|       - name: install for wabt compilation | ||||
|         run: sudo apt update && sudo apt install -y ninja-build | ||||
| 
 | ||||
|       - name: run spec tests | ||||
|         run: | | ||||
|           source /opt/intel/sgxsdk/environment | ||||
|  |  | |||
							
								
								
									
										12
									
								
								.github/workflows/nightly_run.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/nightly_run.yml
									
									
									
									
										vendored
									
									
								
							|  | @ -36,10 +36,11 @@ env: | |||
|   LLVM_EAGER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_JIT=0 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=0" | ||||
|   MULTI_TIER_JIT_BUILD_OPTIONS: "-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_FAST_INTERP=0 -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=1" | ||||
|   # For Spec Test | ||||
|   DEFAULT_TEST_OPTIONS: "-s spec -b -P" | ||||
|   MULTI_MODULES_TEST_OPTIONS: "-s spec -b -M -P" | ||||
|   SIMD_TEST_OPTIONS: "-s spec -b -S -P" | ||||
|   THREADS_TEST_OPTIONS: "-s spec -b -p -P" | ||||
|   # FIXME: use binary release(adding -b) instead of building from source after upgrading to 22.04 | ||||
|   DEFAULT_TEST_OPTIONS: "-s spec -P" | ||||
|   MULTI_MODULES_TEST_OPTIONS: "-s spec -M -P" | ||||
|   SIMD_TEST_OPTIONS: "-s spec -S -P" | ||||
|   THREADS_TEST_OPTIONS: "-s spec -p -P" | ||||
|   X86_32_TARGET_TEST_OPTIONS: "-m x86_32 -P" | ||||
|   WASI_TEST_OPTIONS: "-s wasi_certification -w" | ||||
| 
 | ||||
|  | @ -719,6 +720,9 @@ jobs: | |||
|         if: matrix.running_mode == 'aot' && matrix.test_option == '$WASI_TEST_OPTIONS' | ||||
|         run: sudo apt-get update && sudo apt install -y jq | ||||
| 
 | ||||
|       - name: install for wabt compilation | ||||
|         run: sudo apt update && sudo apt install -y ninja-build | ||||
| 
 | ||||
|       - name: Build WASI thread tests | ||||
|         if: matrix.test_option == '$WASI_TEST_OPTIONS' | ||||
|         run: bash build.sh --sysroot "$SYSROOT_PATH" | ||||
|  |  | |||
|  | @ -120,7 +120,6 @@ check_global_init_expr(const AOTModule *module, uint32 global_index, | |||
|         return false; | ||||
|     } | ||||
| 
 | ||||
| #if WASM_ENABLE_GC == 0 | ||||
|     /**
 | ||||
|      * Currently, constant expressions occurring as initializers of | ||||
|      * globals are further constrained in that contained global.get | ||||
|  | @ -129,24 +128,26 @@ check_global_init_expr(const AOTModule *module, uint32 global_index, | |||
|      * And initializer expression cannot reference a mutable global. | ||||
|      */ | ||||
|     if (global_index >= module->import_global_count | ||||
|         || module->import_globals->type.is_mutable) { | ||||
|         set_error_buf(error_buf, error_buf_size, | ||||
|                       "constant expression required"); | ||||
|         return false; | ||||
|     } | ||||
| #else | ||||
|     if (global_index >= module->import_global_count + module->global_count) { | ||||
|     /* make spec test happy */ | ||||
| #if WASM_ENABLE_GC != 0 | ||||
|                             + module->global_count | ||||
| #endif | ||||
|     ) { | ||||
|         set_error_buf_v(error_buf, error_buf_size, "unknown global %u", | ||||
|                         global_index); | ||||
|         return false; | ||||
|     } | ||||
|     if (global_index < module->import_global_count | ||||
|         && module->import_globals[global_index].type.is_mutable) { | ||||
| 
 | ||||
|     if ( | ||||
|     /* make spec test happy */ | ||||
| #if WASM_ENABLE_GC != 0 | ||||
|         global_index < module->import_global_count && | ||||
| #endif | ||||
|         module->import_globals[global_index].type.is_mutable) { | ||||
|         set_error_buf(error_buf, error_buf_size, | ||||
|                       "constant expression required"); | ||||
|         return false; | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
|  |  | |||
|  | @ -830,39 +830,35 @@ load_init_expr(WASMModule *module, const uint8 **p_buf, const uint8 *buf_end, | |||
|                 read_leb_uint32(p, p_end, cur_value.global_index); | ||||
|                 global_idx = cur_value.global_index; | ||||
| 
 | ||||
| #if WASM_ENABLE_GC == 0 | ||||
|                 if (global_idx >= module->import_global_count) { | ||||
|                     /**
 | ||||
|                      * Currently, constant expressions occurring as initializers | ||||
|                      * of globals are further constrained in that contained | ||||
|                      * global.get instructions are | ||||
|                      * only allowed to refer to imported globals. | ||||
|                      */ | ||||
|                 /*
 | ||||
|                  * Currently, constant expressions occurring as initializers | ||||
|                  * of globals are further constrained in that contained | ||||
|                  * global.get instructions are | ||||
|                  * only allowed to refer to imported globals. | ||||
|                  * | ||||
|                  * https://webassembly.github.io/spec/core/valid/instructions.html#constant-expressions
 | ||||
|                  */ | ||||
|                 if (global_idx >= module->import_global_count | ||||
|                 /* make spec test happy */ | ||||
| #if WASM_ENABLE_GC != 0 | ||||
|                                       + module->global_count | ||||
| #endif | ||||
|                 ) { | ||||
|                     set_error_buf_v(error_buf, error_buf_size, | ||||
|                                     "unknown global %u", global_idx); | ||||
|                     goto fail; | ||||
|                 } | ||||
|                 if (module->import_globals[global_idx] | ||||
|                 if ( | ||||
|                 /* make spec test happy */ | ||||
| #if WASM_ENABLE_GC != 0 | ||||
|                     global_idx < module->import_global_count && | ||||
| #endif | ||||
|                     module->import_globals[global_idx] | ||||
|                         .u.global.type.is_mutable) { | ||||
|                     set_error_buf_v(error_buf, error_buf_size, | ||||
|                                     "constant expression required"); | ||||
|                     goto fail; | ||||
|                 } | ||||
| #else | ||||
|                 if (global_idx | ||||
|                     >= module->import_global_count + module->global_count) { | ||||
|                     set_error_buf_v(error_buf, error_buf_size, | ||||
|                                     "unknown global %u", global_idx); | ||||
|                     goto fail; | ||||
|                 } | ||||
|                 if (global_idx < module->import_global_count | ||||
|                     && module->import_globals[global_idx] | ||||
|                            .u.global.type.is_mutable) { | ||||
|                     set_error_buf_v(error_buf, error_buf_size, | ||||
|                                     "constant expression required"); | ||||
|                     goto fail; | ||||
|                 } | ||||
| #endif | ||||
| 
 | ||||
|                 if (global_idx < module->import_global_count) { | ||||
|                     global_type = module->import_globals[global_idx] | ||||
|  | @ -4244,6 +4240,43 @@ fail: | |||
|     return false; | ||||
| } | ||||
| 
 | ||||
| /* Element segments must match element type of table */ | ||||
| static bool | ||||
| check_table_elem_type(WASMModule *module, uint32 table_index, | ||||
|                       uint32 type_from_elem_seg, char *error_buf, | ||||
|                       uint32 error_buf_size) | ||||
| { | ||||
|     uint32 table_declared_elem_type; | ||||
| 
 | ||||
|     if (table_index < module->import_table_count) | ||||
|         table_declared_elem_type = | ||||
|             module->import_tables[table_index].u.table.elem_type; | ||||
|     else | ||||
|         table_declared_elem_type = (module->tables + table_index)->elem_type; | ||||
| 
 | ||||
|     if (table_declared_elem_type == type_from_elem_seg) | ||||
|         return true; | ||||
| 
 | ||||
| #if WASM_ENABLE_GC != 0 | ||||
|     /*
 | ||||
|      * balance in: anyref, funcref, (ref.null func) and (ref.func) | ||||
|      */ | ||||
|     if (table_declared_elem_type == REF_TYPE_ANYREF) | ||||
|         return true; | ||||
| 
 | ||||
|     if (table_declared_elem_type == VALUE_TYPE_FUNCREF | ||||
|         && type_from_elem_seg == REF_TYPE_HT_NON_NULLABLE) | ||||
|         return true; | ||||
| 
 | ||||
|     if (table_declared_elem_type == REF_TYPE_HT_NULLABLE | ||||
|         && type_from_elem_seg == REF_TYPE_HT_NON_NULLABLE) | ||||
|         return true; | ||||
| #endif | ||||
| 
 | ||||
|     set_error_buf(error_buf, error_buf_size, "type mismatch"); | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| #if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0 | ||||
| static bool | ||||
| load_elem_type(WASMModule *module, const uint8 **p_buf, const uint8 *buf_end, | ||||
|  | @ -4479,6 +4512,12 @@ load_table_segment_section(const uint8 *buf, const uint8 *buf_end, | |||
|                             return false; | ||||
|                     } | ||||
| 
 | ||||
|                     if (!check_table_elem_type(module, | ||||
|                                                table_segment->table_index, | ||||
|                                                table_segment->elem_type, | ||||
|                                                error_buf, error_buf_size)) | ||||
|                         return false; | ||||
| 
 | ||||
|                     break; | ||||
|                 } | ||||
|                 /* elemkind + passive/declarative */ | ||||
|  | @ -4530,6 +4569,13 @@ load_table_segment_section(const uint8 *buf, const uint8 *buf_end, | |||
|                                                 error_buf_size)) | ||||
|                             return false; | ||||
|                     } | ||||
| 
 | ||||
|                     if (!check_table_elem_type(module, | ||||
|                                                table_segment->table_index, | ||||
|                                                table_segment->elem_type, | ||||
|                                                error_buf, error_buf_size)) | ||||
|                         return false; | ||||
| 
 | ||||
|                     break; | ||||
|                 case 5: | ||||
|                 case 7: | ||||
|  | @ -4566,6 +4612,13 @@ load_table_segment_section(const uint8 *buf, const uint8 *buf_end, | |||
|             if (!load_func_index_vec(&p, p_end, module, table_segment, | ||||
|                                      error_buf, error_buf_size)) | ||||
|                 return false; | ||||
| 
 | ||||
|             table_segment->elem_type = VALUE_TYPE_FUNCREF; | ||||
| 
 | ||||
|             if (!check_table_elem_type(module, table_segment->table_index, | ||||
|                                        table_segment->elem_type, error_buf, | ||||
|                                        error_buf_size)) | ||||
|                 return false; | ||||
| #endif /* end of WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0 */ | ||||
| 
 | ||||
| #if WASM_ENABLE_WAMR_COMPILER != 0 | ||||
|  |  | |||
|  | @ -1001,6 +1001,12 @@ print_i32_wrapper(wasm_exec_env_t exec_env, int32 i32) | |||
|     os_printf("in specttest.print_i32(%" PRId32 ")\n", i32); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_i64_wrapper(wasm_exec_env_t exec_env, int64 i64) | ||||
| { | ||||
|     os_printf("in specttest.print_i64(%" PRId32 ")\n", i64); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| print_i32_f32_wrapper(wasm_exec_env_t exec_env, int32 i32, float f32) | ||||
| { | ||||
|  | @ -1091,6 +1097,7 @@ static NativeSymbol native_symbols_libc_builtin[] = { | |||
| static NativeSymbol native_symbols_spectest[] = { | ||||
|     REG_NATIVE_FUNC(print, "()"), | ||||
|     REG_NATIVE_FUNC(print_i32, "(i)"), | ||||
|     REG_NATIVE_FUNC(print_i64, "(I)"), | ||||
|     REG_NATIVE_FUNC(print_i32_f32, "(if)"), | ||||
|     REG_NATIVE_FUNC(print_f64_f64, "(FF)"), | ||||
|     REG_NATIVE_FUNC(print_f32, "(f)"), | ||||
|  | @ -1136,6 +1143,7 @@ static WASMNativeGlobalDef native_global_defs[] = { | |||
|     { "test", "global-f32", VALUE_TYPE_F32, false, .value.f32 = 0 }, | ||||
|     { "test", "global-mut-i32", VALUE_TYPE_I32, true, .value.i32 = 0 }, | ||||
|     { "test", "global-mut-i64", VALUE_TYPE_I64, true, .value.i64 = 0 }, | ||||
|     { "test", "g", VALUE_TYPE_I32, true, .value.i32 = 0 }, | ||||
| #if WASM_ENABLE_GC != 0 | ||||
|     { "G", "g", VALUE_TYPE_I32, false, .value.i32 = 4 }, | ||||
|     { "M", "g", REF_TYPE_HT_NON_NULLABLE, false, .value.gc_obj = 0 }, | ||||
|  |  | |||
|  | @ -47,7 +47,6 @@ IWASM_CMD = get_iwasm_cmd(PLATFORM_NAME) | |||
| IWASM_SGX_CMD = "../../../product-mini/platforms/linux-sgx/enclave-sample/iwasm" | ||||
| IWASM_QEMU_CMD = "iwasm" | ||||
| SPEC_TEST_DIR = "spec/test/core" | ||||
| EXCE_HANDLING_DIR = "exception-handling/test/core" | ||||
| WAST2WASM_CMD = exe_file_path("./wabt/out/gcc/Release/wat2wasm") | ||||
| SPEC_INTERPRETER_CMD = "spec/interpreter/wasm" | ||||
| WAMRC_CMD = "../../../wamr-compiler/build/wamrc" | ||||
|  | @ -87,7 +86,7 @@ def ignore_the_case( | |||
|     if case_name in ["comments", "inline-module", "names"]: | ||||
|         return True | ||||
| 
 | ||||
|     if not multi_module_flag and case_name in ["imports", "linking"]: | ||||
|     if not multi_module_flag and case_name in ["imports", "linking", "simd_linking"]: | ||||
|         return True | ||||
| 
 | ||||
|     # Note: x87 doesn't preserve sNaN and makes some relevant tests fail. | ||||
|  | @ -143,10 +142,6 @@ def preflight_check(aot_flag, eh_flag): | |||
|         print(f"Can not find {WAMRC_CMD}") | ||||
|         return False | ||||
| 
 | ||||
|     if eh_flag and not pathlib.Path(EXCE_HANDLING_DIR).resolve().exists(): | ||||
|         print(f"Can not find {EXCE_HANDLING_DIR}") | ||||
|         return False | ||||
| 
 | ||||
|     return True | ||||
| 
 | ||||
| 
 | ||||
|  | @ -171,7 +166,7 @@ def test_case( | |||
| ): | ||||
|     CMD = [sys.executable, "runtest.py"] | ||||
|     CMD.append("--wast2wasm") | ||||
|     CMD.append(WAST2WASM_CMD if not gc_flag and not memory64_flag else SPEC_INTERPRETER_CMD) | ||||
|     CMD.append(WAST2WASM_CMD if not gc_flag else SPEC_INTERPRETER_CMD) | ||||
|     CMD.append("--interpreter") | ||||
|     if sgx_flag: | ||||
|         CMD.append(IWASM_SGX_CMD) | ||||
|  | @ -310,11 +305,7 @@ def test_suite( | |||
|         case_list.extend(gc_case_list) | ||||
| 
 | ||||
|     if eh_flag: | ||||
|         eh_path = pathlib.Path(EXCE_HANDLING_DIR).resolve() | ||||
|         if not eh_path.exists(): | ||||
|             print(f"can not find spec test cases at {eh_path}") | ||||
|             return False | ||||
|         eh_case_list = sorted(eh_path.glob("*.wast")) | ||||
|         eh_case_list = sorted(suite_path.glob("*.wast")) | ||||
|         eh_case_list_include = [test for test in eh_case_list if test.stem in ["throw", "tag", "try_catch", "rethrow", "try_delegate"]] | ||||
|         case_list.extend(eh_case_list_include) | ||||
| 
 | ||||
|  | @ -337,7 +328,9 @@ def test_suite( | |||
|             qemu_flag, | ||||
|         ): | ||||
|             filtered_case_list.append(case_path) | ||||
|     print(f"---> {len(case_list)} --filter--> {len(filtered_case_list)}") | ||||
|         else: | ||||
|             print(f"---> skip {case_name}") | ||||
|     print(f"---> {len(case_list)} ---filter--> {len(filtered_case_list)}") | ||||
|     case_list = filtered_case_list | ||||
| 
 | ||||
|     case_count = len(case_list) | ||||
|  |  | |||
|  | @ -1,20 +1,548 @@ | |||
| diff --git a/test/core/data.wast b/test/core/data.wast
 | ||||
| index b1e1239..a0f6967 100644
 | ||||
| --- a/test/core/data.wast
 | ||||
| +++ b/test/core/data.wast
 | ||||
| @@ -312,7 +312,8 @@
 | ||||
|      "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
| 
 | ||||
|  ;; Data segment with memory index 0 (no memory section) | ||||
| @@ -334,7 +335,8 @@
 | ||||
|      "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
| 
 | ||||
|  ;; Data segment with memory index 1 and vec(byte) as above, | ||||
| @@ -354,7 +356,8 @@
 | ||||
|      "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" | ||||
|      "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
| 
 | ||||
|  ;; Data segment with memory index 1 and specially crafted vec(byte) after. | ||||
| @@ -374,7 +377,8 @@
 | ||||
|      "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" | ||||
|      "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
| 
 | ||||
| 
 | ||||
| diff --git a/test/core/elem.wast b/test/core/elem.wast
 | ||||
| index 33b3f67..c72431c 100644
 | ||||
| --- a/test/core/elem.wast
 | ||||
| +++ b/test/core/elem.wast
 | ||||
| @@ -595,9 +595,11 @@
 | ||||
|    (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))) | ||||
| @@ -608,9 +610,11 @@
 | ||||
|    (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)) | ||||
| +;)
 | ||||
| 
 | ||||
|  ;; Element segments must match element type of table | ||||
| 
 | ||||
| @@ -643,6 +647,7 @@
 | ||||
| 
 | ||||
|  ;; Initializing a table with an externref-type element segment | ||||
| 
 | ||||
| +(;
 | ||||
|  (module $m | ||||
|  	(table $t (export "table") 2 externref) | ||||
|  	(func (export "get") (param $i i32) (result externref) | ||||
| @@ -667,9 +672,11 @@
 | ||||
| 
 | ||||
|  (assert_return (invoke $m "get" (i32.const 0)) (ref.null extern)) | ||||
|  (assert_return (invoke $m "get" (i32.const 1)) (ref.extern 137)) | ||||
| +;)
 | ||||
| 
 | ||||
|  ;; Initializing a table with imported funcref global | ||||
| 
 | ||||
| +(;
 | ||||
|  (module $module4 | ||||
|    (func (result i32) | ||||
|      i32.const 42 | ||||
| @@ -690,3 +697,4 @@
 | ||||
|  ) | ||||
| 
 | ||||
|  (assert_return (invoke "call_imported_elem") (i32.const 42)) | ||||
| +;)
 | ||||
| \ No newline at end of file | ||||
| diff --git a/test/core/try_catch.wast b/test/core/try_catch.wast
 | ||||
| index 2a0e9ff6..f243489d 100644
 | ||||
| --- a/test/core/try_catch.wast
 | ||||
| +++ b/test/core/try_catch.wast
 | ||||
| @@ -203,7 +203,6 @@
 | ||||
|   | ||||
| 
 | ||||
|  (assert_return (invoke "catch-param-i32" (i32.const 5)) (i32.const 5)) | ||||
|   | ||||
| 
 | ||||
| -(assert_return (invoke "catch-imported") (i32.const 2))
 | ||||
|   | ||||
| 
 | ||||
|  (assert_return (invoke "catchless-try" (i32.const 0)) (i32.const 0)) | ||||
|  (assert_return (invoke "catchless-try" (i32.const 1)) (i32.const 1)) | ||||
| @@ -231,7 +230,6 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| 
 | ||||
| -(assert_return (invoke "imported-mismatch") (i32.const 3))
 | ||||
|   | ||||
| 
 | ||||
|  (assert_malformed | ||||
|    (module quote "(module (func (catch_all)))") | ||||
| 
 | ||||
| diff --git a/test/core/ref_func.wast b/test/core/ref_func.wast
 | ||||
| index adb5cb7..6396013 100644
 | ||||
| --- a/test/core/ref_func.wast
 | ||||
| +++ b/test/core/ref_func.wast
 | ||||
| @@ -4,7 +4,7 @@
 | ||||
|  (register "M") | ||||
| 
 | ||||
|  (module | ||||
| -  (func $f (import "M" "f") (param i32) (result i32))
 | ||||
| +  (func $f (param $x i32) (result i32) (local.get $x))
 | ||||
|    (func $g (param $x i32) (result i32) | ||||
|      (i32.add (local.get $x) (i32.const 1)) | ||||
|    ) | ||||
| diff --git a/test/core/table_copy.wast b/test/core/table_copy.wast
 | ||||
| index 380e84e..59230cf 100644
 | ||||
| --- a/test/core/table_copy.wast
 | ||||
| +++ b/test/core/table_copy.wast
 | ||||
| @@ -14,11 +14,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -106,11 +106,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -198,11 +198,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -290,11 +290,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -382,11 +382,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -474,11 +474,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -566,11 +566,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -658,11 +658,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -750,11 +750,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -842,11 +842,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -934,11 +934,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1026,11 +1026,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1118,11 +1118,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1210,11 +1210,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1302,11 +1302,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1394,11 +1394,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1486,11 +1486,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1578,11 +1578,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| diff --git a/test/core/table_init.wast b/test/core/table_init.wast
 | ||||
| index 0b2d26f..3c595e5 100644
 | ||||
| --- a/test/core/table_init.wast
 | ||||
| +++ b/test/core/table_init.wast
 | ||||
| @@ -14,11 +14,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -72,11 +72,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -130,11 +130,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -196,11 +196,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -254,11 +254,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -312,11 +312,11 @@
 | ||||
| 
 | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
|  |  | |||
|  | @ -1,120 +1,52 @@ | |||
| diff --git a/test/core/binary.wast b/test/core/binary.wast
 | ||||
| index 891aad3..07356a3 100644
 | ||||
| --- a/test/core/binary.wast
 | ||||
| +++ b/test/core/binary.wast
 | ||||
| @@ -206,7 +206,7 @@
 | ||||
|  ) | ||||
|   | ||||
|  ;; Type section with signed LEB128 encoded type | ||||
| -(assert_malformed
 | ||||
| +(;assert_malformed
 | ||||
|    (module binary | ||||
|      "\00asm" "\01\00\00\00" | ||||
|      "\01"                     ;; Type section id | ||||
| @@ -216,7 +216,7 @@
 | ||||
|      "\00\00" | ||||
|    ) | ||||
|    "integer representation too long" | ||||
| -)
 | ||||
| +;)
 | ||||
|   | ||||
|  ;; Unsigned LEB128 must not be overlong | ||||
|  (assert_malformed | ||||
| @@ -1683,7 +1683,7 @@
 | ||||
|  ) | ||||
|   | ||||
|  ;; 2 elem segment declared, 1 given | ||||
| -(assert_malformed
 | ||||
| +(;assert_malformed
 | ||||
|    (module binary | ||||
|      "\00asm" "\01\00\00\00" | ||||
|      "\01\04\01"                             ;; type section | ||||
| @@ -1696,7 +1696,7 @@
 | ||||
|      ;; "\00\41\00\0b\01\00"                 ;; elem 1 (missed) | ||||
|    ) | ||||
|    "unexpected end" | ||||
| -)
 | ||||
| +;)
 | ||||
|   | ||||
|  ;; 2 elem segment declared, 1.5 given | ||||
|  (assert_malformed | ||||
| @@ -1813,7 +1813,7 @@
 | ||||
|  ) | ||||
|   | ||||
|  ;; 1 br_table target declared, 2 given | ||||
| -(assert_malformed
 | ||||
| +(;assert_malformed
 | ||||
|    (module binary | ||||
|      "\00asm" "\01\00\00\00" | ||||
|      "\01\04\01"                             ;; type section | ||||
| @@ -1832,7 +1832,7 @@
 | ||||
|      "\0b\0b\0b"                             ;; end | ||||
|    ) | ||||
|    "unexpected end" | ||||
| -)
 | ||||
| +;)
 | ||||
|   | ||||
|  ;; Start section | ||||
|  (module binary | ||||
| diff --git a/test/core/data.wast b/test/core/data.wast
 | ||||
| index 4f339be..0b5b3e6 100644
 | ||||
| index b1e1239..a0f6967 100644
 | ||||
| --- a/test/core/data.wast
 | ||||
| +++ b/test/core/data.wast
 | ||||
| @@ -306,9 +306,10 @@
 | ||||
| @@ -312,7 +312,8 @@
 | ||||
|      "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
| +(; not supported by wat2wasm
 | ||||
|  ;; Data segment with memory index 0 (no memory section) | ||||
|  (assert_invalid | ||||
|    (module binary | ||||
| @@ -317,7 +318,7 @@
 | ||||
|      "\00\41\00\0b"                          ;; active data segment 0 for memory 0 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 0"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
|  ;; Data segment with memory index 1 (no memory section) | ||||
| @@ -328,7 +329,7 @@
 | ||||
| @@ -334,7 +335,8 @@
 | ||||
|      "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
|  ;; Data segment with memory index 1 and vec(byte) as above, | ||||
| @@ -348,7 +349,7 @@
 | ||||
| @@ -354,7 +356,8 @@
 | ||||
|      "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" | ||||
|      "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
|  ;; Data segment with memory index 1 and specially crafted vec(byte) after. | ||||
| @@ -368,8 +369,9 @@
 | ||||
| @@ -374,7 +377,8 @@
 | ||||
|      "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" | ||||
|      "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  ;; TODO: restore after supporting multi memory"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  ;; Invalid offsets | ||||
| diff --git a/test/core/elem.wast b/test/core/elem.wast
 | ||||
| index 575ecef..6eecab9 100644
 | ||||
| index 33b3f67..c72431c 100644
 | ||||
| --- a/test/core/elem.wast
 | ||||
| +++ b/test/core/elem.wast
 | ||||
| @@ -571,9 +571,11 @@
 | ||||
| @@ -595,9 +595,11 @@
 | ||||
|    (func $const-i32-d (type $out-i32) (i32.const 68)) | ||||
|  ) | ||||
|   | ||||
|  | @ -126,7 +58,7 @@ index 575ecef..6eecab9 100644 | |||
|   | ||||
|  (module $module3 | ||||
|    (type $out-i32 (func (result i32))) | ||||
| @@ -584,6 +586,8 @@
 | ||||
| @@ -608,9 +610,11 @@
 | ||||
|    (func $const-i32-f (type $out-i32) (i32.const 70)) | ||||
|  ) | ||||
|   | ||||
|  | @ -135,254 +67,69 @@ index 575ecef..6eecab9 100644 | |||
|  (assert_return (invoke $module1 "call-8") (i32.const 69)) | ||||
|  (assert_return (invoke $module1 "call-9") (i32.const 70)) | ||||
| +;)
 | ||||
| diff --git a/test/core/global.wast b/test/core/global.wast
 | ||||
| index 9fa5e22..8c4b949 100644
 | ||||
| --- a/test/core/global.wast
 | ||||
| +++ b/test/core/global.wast
 | ||||
| @@ -328,10 +328,12 @@
 | ||||
|    "type mismatch" | ||||
|  ) | ||||
|   | ||||
|  ;; Element segments must match element type of table | ||||
|   | ||||
| @@ -643,6 +647,7 @@
 | ||||
|   | ||||
|  ;; Initializing a table with an externref-type element segment | ||||
|   | ||||
| +(;
 | ||||
|  (assert_invalid | ||||
|    (module (global (import "" "") externref) (global funcref (global.get 0))) | ||||
|    "type mismatch" | ||||
|  ) | ||||
|  (module $m | ||||
|  	(table $t (export "table") 2 externref) | ||||
|  	(func (export "get") (param $i i32) (result externref) | ||||
| @@ -667,9 +672,11 @@
 | ||||
|   | ||||
|  (assert_return (invoke $m "get" (i32.const 0)) (ref.null extern)) | ||||
|  (assert_return (invoke $m "get" (i32.const 1)) (ref.extern 137)) | ||||
| +;)
 | ||||
|   | ||||
|  (assert_invalid | ||||
|    (module (global (import "test" "global-i32") i32) (global i32 (global.get 0) (global.get 0))) | ||||
| diff --git a/test/core/imports.wast b/test/core/imports.wast
 | ||||
| index 35e8c91..a7a459d 100644
 | ||||
| --- a/test/core/imports.wast
 | ||||
| +++ b/test/core/imports.wast
 | ||||
| @@ -577,6 +577,7 @@
 | ||||
|  (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) | ||||
|  (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) | ||||
|   | ||||
| +(; unsupported by multi-module currently
 | ||||
|  (module $Mgm | ||||
|    (memory (export "memory") 1) ;; initial size is 1 | ||||
|    (func (export "grow") (result i32) (memory.grow (i32.const 1))) | ||||
| @@ -596,6 +597,7 @@
 | ||||
|    (func (export "size") (result i32) (memory.size)) | ||||
|  ) | ||||
|  (assert_return (invoke $Mgim2 "size") (i32.const 3)) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  ;; Syntax errors | ||||
| diff --git a/test/core/linking.wast b/test/core/linking.wast
 | ||||
| index 994e0f4..d0bfb5f 100644
 | ||||
| --- a/test/core/linking.wast
 | ||||
| +++ b/test/core/linking.wast
 | ||||
| @@ -64,6 +64,7 @@
 | ||||
|    (export "Mg.set_mut" (func $set_mut)) | ||||
|  ) | ||||
|  ;; Initializing a table with imported funcref global | ||||
|   | ||||
| +(;
 | ||||
|  (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)) | ||||
| @@ -81,6 +82,7 @@
 | ||||
|  (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)) | ||||
|  (module $module4 | ||||
|    (func (result i32) | ||||
|      i32.const 42 | ||||
| @@ -690,3 +697,4 @@
 | ||||
|  ) | ||||
|   | ||||
|  (assert_return (invoke "call_imported_elem") (i32.const 42)) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  (assert_unlinkable | ||||
| @@ -165,6 +167,7 @@
 | ||||
| \ No newline at end of file | ||||
| diff --git a/test/core/if.wast b/test/core/if.wast
 | ||||
| index 2ea45f6..6f07304 100644
 | ||||
| --- a/test/core/if.wast
 | ||||
| +++ b/test/core/if.wast
 | ||||
| @@ -530,7 +530,10 @@
 | ||||
|    (func (export "atypical-condition") | ||||
|      i32.const 0 | ||||
|      (if (then) (else)) | ||||
| -    (if (i32.const 1) (i32.eqz) (then) (else))
 | ||||
| +    ;; restore after wabt(> 1.34.0) supports it
 | ||||
| +    (i32.const 1)
 | ||||
| +    (i32.eqz)
 | ||||
| +    (if (then) (else))
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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)) | ||||
| @@ -187,6 +190,7 @@
 | ||||
|   | ||||
|  (assert_return (invoke $Nt "call" (i32.const 3)) (i32.const -4)) | ||||
|  (assert_trap (invoke $Nt "call" (i32.const 4)) "indirect call type mismatch") | ||||
| +;)
 | ||||
|   | ||||
|  (module $Ot | ||||
|    (type (func (result i32))) | ||||
| @@ -201,6 +205,7 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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)) | ||||
| @@ -225,6 +230,7 @@
 | ||||
|  (assert_trap (invoke $Ot "call" (i32.const 0)) "uninitialized element") | ||||
|   | ||||
|  (assert_trap (invoke $Ot "call" (i32.const 20)) "undefined element") | ||||
| +;)
 | ||||
|   | ||||
|  (module | ||||
|    (table (import "Mt" "tab") 0 funcref) | ||||
| @@ -263,6 +269,7 @@
 | ||||
|   | ||||
|  ;; Unlike in the v1 spec, active element segments stored before an | ||||
|  ;; out-of-bounds access persist after the instantiation failure. | ||||
| +(;
 | ||||
|  (assert_trap | ||||
|    (module | ||||
|      (table (import "Mt" "tab") 10 funcref) | ||||
| @@ -274,7 +281,9 @@
 | ||||
|  ) | ||||
|  (assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0)) | ||||
|  (assert_trap (invoke $Mt "call" (i32.const 8)) "uninitialized element") | ||||
| +;)
 | ||||
|   | ||||
| +(;
 | ||||
|  (assert_trap | ||||
|    (module | ||||
|      (table (import "Mt" "tab") 10 funcref) | ||||
| @@ -286,6 +295,7 @@
 | ||||
|    "out of bounds memory access" | ||||
|  ) | ||||
|  (assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0)) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  (module $Mtable_ex | ||||
| @@ -299,6 +309,7 @@
 | ||||
|    (table (import "Mtable_ex" "t-extern") 1 externref) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (assert_unlinkable | ||||
|    (module (table (import "Mtable_ex" "t-func") 1 externref)) | ||||
|    "incompatible import type" | ||||
| @@ -307,6 +318,7 @@
 | ||||
|    (module (table (import "Mtable_ex" "t-extern") 1 funcref)) | ||||
|    "incompatible import type" | ||||
|  ) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  ;; Memories | ||||
| @@ -346,10 +358,12 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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) | ||||
| @@ -372,6 +386,7 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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)) | ||||
| @@ -380,6 +395,7 @@
 | ||||
|  (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 | ||||
| @@ -403,8 +419,10 @@
 | ||||
|    ) | ||||
|    "out of bounds memory access" | ||||
|  ) | ||||
| +(;
 | ||||
|  (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 | ||||
| @@ -416,7 +434,9 @@
 | ||||
|    ) | ||||
|    "out of bounds table access" | ||||
|  ) | ||||
| +(;
 | ||||
|  (assert_return (invoke $Mm "load" (i32.const 0)) (i32.const 97)) | ||||
| +;)
 | ||||
|   | ||||
|  ;; Store is modified if the start function traps. | ||||
|  (module $Ms | ||||
| @@ -432,6 +452,7 @@
 | ||||
|  ) | ||||
|  (register "Ms" $Ms) | ||||
|   | ||||
| +(;
 | ||||
|  (assert_trap | ||||
|    (module | ||||
|      (import "Ms" "memory" (memory 1)) | ||||
| @@ -451,3 +472,4 @@
 | ||||
|   | ||||
|  (assert_return (invoke $Ms "get memory[0]") (i32.const 104))  ;; 'h' | ||||
|  (assert_return (invoke $Ms "get table[0]") (i32.const 0xdead)) | ||||
| +;)
 | ||||
| diff --git a/test/core/ref_func.wast b/test/core/ref_func.wast
 | ||||
| index adb5cb7..590f626 100644
 | ||||
| index adb5cb7..6396013 100644
 | ||||
| --- a/test/core/ref_func.wast
 | ||||
| +++ b/test/core/ref_func.wast
 | ||||
| @@ -4,7 +4,8 @@
 | ||||
| @@ -4,7 +4,7 @@
 | ||||
|  (register "M") | ||||
|   | ||||
|  (module | ||||
| -  (func $f (import "M" "f") (param i32) (result i32))
 | ||||
| +  (; aot mode does not support module linking ;)
 | ||||
| +  (func $f (param $x i32) (result i32) (local.get $x))
 | ||||
|    (func $g (param $x i32) (result i32) | ||||
|      (i32.add (local.get $x) (i32.const 1)) | ||||
|    ) | ||||
| diff --git a/test/core/table_copy.wast b/test/core/table_copy.wast
 | ||||
| index 380e84e..f37e745 100644
 | ||||
| index 380e84e..59230cf 100644
 | ||||
| --- a/test/core/table_copy.wast
 | ||||
| +++ b/test/core/table_copy.wast
 | ||||
| @@ -14,11 +14,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -106,11 +107,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (export "ef0") (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -198,11 +199,11 @@
 | ||||
| @@ -14,11 +14,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -395,11 +142,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -290,11 +291,11 @@
 | ||||
| @@ -106,11 +106,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -412,11 +159,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -382,11 +383,11 @@
 | ||||
| @@ -198,11 +198,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -429,11 +176,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -474,11 +475,11 @@
 | ||||
| @@ -290,11 +290,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -446,11 +193,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -566,11 +567,11 @@
 | ||||
| @@ -382,11 +382,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -463,11 +210,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -658,11 +659,11 @@
 | ||||
| @@ -474,11 +474,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -480,11 +227,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -750,11 +751,11 @@
 | ||||
| @@ -566,11 +566,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -497,11 +244,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -842,11 +843,11 @@
 | ||||
| @@ -658,11 +658,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -514,11 +261,45 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -750,11 +750,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -842,11 +842,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -934,11 +935,11 @@
 | ||||
| @@ -934,11 +934,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -531,11 +312,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1026,11 +1027,11 @@
 | ||||
| @@ -1026,11 +1026,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -548,11 +329,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1118,11 +1119,11 @@
 | ||||
| @@ -1118,11 +1118,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -565,11 +346,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1210,11 +1211,11 @@
 | ||||
| @@ -1210,11 +1210,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -582,11 +363,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1302,11 +1303,11 @@
 | ||||
| @@ -1302,11 +1302,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -599,11 +380,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1394,11 +1395,11 @@
 | ||||
| @@ -1394,11 +1394,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -616,11 +397,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1486,11 +1487,11 @@
 | ||||
| @@ -1486,11 +1486,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -633,11 +414,11 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1578,11 +1579,11 @@
 | ||||
| @@ -1578,11 +1578,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -650,15 +431,15 @@ index 380e84e..f37e745 100644 | |||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
| +  (func (result i32) (i32.const 3))
 | ||||
| +  (func (result i32) (i32.const 4))     ;; index 4
 | ||||
| +  (func (result i32) (i32.const 4))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| diff --git a/test/core/table_init.wast b/test/core/table_init.wast
 | ||||
| index 0b2d26f..bdab6a0 100644
 | ||||
| index 0b2d26f..3c595e5 100644
 | ||||
| --- a/test/core/table_init.wast
 | ||||
| +++ b/test/core/table_init.wast
 | ||||
| @@ -14,11 +14,12 @@
 | ||||
| @@ -14,11 +14,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -667,7 +448,6 @@ index 0b2d26f..bdab6a0 100644 | |||
| -  (import "a" "ef2" (func (result i32)))
 | ||||
| -  (import "a" "ef3" (func (result i32)))
 | ||||
| -  (import "a" "ef4" (func (result i32)))    ;; index 4
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 0
 | ||||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
|  | @ -676,7 +456,7 @@ index 0b2d26f..bdab6a0 100644 | |||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -72,11 +73,12 @@
 | ||||
| @@ -72,11 +72,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -685,7 +465,6 @@ index 0b2d26f..bdab6a0 100644 | |||
| -  (import "a" "ef2" (func (result i32)))
 | ||||
| -  (import "a" "ef3" (func (result i32)))
 | ||||
| -  (import "a" "ef4" (func (result i32)))    ;; index 4
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 0
 | ||||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
|  | @ -694,7 +473,7 @@ index 0b2d26f..bdab6a0 100644 | |||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -130,11 +132,12 @@
 | ||||
| @@ -130,11 +130,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -703,7 +482,6 @@ index 0b2d26f..bdab6a0 100644 | |||
| -  (import "a" "ef2" (func (result i32)))
 | ||||
| -  (import "a" "ef3" (func (result i32)))
 | ||||
| -  (import "a" "ef4" (func (result i32)))    ;; index 4
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 0
 | ||||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
|  | @ -712,7 +490,7 @@ index 0b2d26f..bdab6a0 100644 | |||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -196,11 +199,12 @@
 | ||||
| @@ -196,11 +196,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -721,7 +499,6 @@ index 0b2d26f..bdab6a0 100644 | |||
| -  (import "a" "ef2" (func (result i32)))
 | ||||
| -  (import "a" "ef3" (func (result i32)))
 | ||||
| -  (import "a" "ef4" (func (result i32)))    ;; index 4
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 0
 | ||||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
|  | @ -730,7 +507,7 @@ index 0b2d26f..bdab6a0 100644 | |||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -254,11 +258,12 @@
 | ||||
| @@ -254,11 +254,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -739,7 +516,6 @@ index 0b2d26f..bdab6a0 100644 | |||
| -  (import "a" "ef2" (func (result i32)))
 | ||||
| -  (import "a" "ef3" (func (result i32)))
 | ||||
| -  (import "a" "ef4" (func (result i32)))    ;; index 4
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 0
 | ||||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
|  | @ -748,7 +524,7 @@ index 0b2d26f..bdab6a0 100644 | |||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -312,11 +317,12 @@
 | ||||
| @@ -312,11 +312,11 @@
 | ||||
|   | ||||
|  (module | ||||
|    (type (func (result i32)))  ;; type #0 | ||||
|  | @ -757,7 +533,6 @@ index 0b2d26f..bdab6a0 100644 | |||
| -  (import "a" "ef2" (func (result i32)))
 | ||||
| -  (import "a" "ef3" (func (result i32)))
 | ||||
| -  (import "a" "ef4" (func (result i32)))    ;; index 4
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 0
 | ||||
| +  (func (result i32) (i32.const 1))
 | ||||
| +  (func (result i32) (i32.const 2))
 | ||||
|  | @ -766,20 +541,3 @@ index 0b2d26f..bdab6a0 100644 | |||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| diff --git a/test/core/unreached-valid.wast b/test/core/unreached-valid.wast
 | ||||
| index b7ebabf..4f2abfb 100644
 | ||||
| --- a/test/core/unreached-valid.wast
 | ||||
| +++ b/test/core/unreached-valid.wast
 | ||||
| @@ -46,6 +46,7 @@
 | ||||
|   | ||||
|  ;; Validation after unreachable | ||||
|   | ||||
| +(;
 | ||||
|  (module | ||||
|    (func (export "meet-bottom") | ||||
|      (block (result f64) | ||||
| @@ -61,3 +62,4 @@
 | ||||
|  ) | ||||
|   | ||||
|  (assert_trap (invoke "meet-bottom") "unreachable") | ||||
| +;)
 | ||||
|  |  | |||
|  | @ -1,28 +0,0 @@ | |||
| diff --git a/test/core/memory.wast b/test/core/memory.wast
 | ||||
| index 1dd5b84..497b69f 100644
 | ||||
| --- a/test/core/memory.wast
 | ||||
| +++ b/test/core/memory.wast
 | ||||
| @@ -76,17 +76,17 @@
 | ||||
|    "memory size must be at most 65536 pages (4GiB)" | ||||
|  ) | ||||
|   | ||||
| -(assert_invalid
 | ||||
| +(assert_malformed
 | ||||
|    (module quote "(memory 0x1_0000_0000)") | ||||
| -  "memory size must be at most 65536 pages (4GiB)"
 | ||||
| +  "i32 constant out of range"
 | ||||
|  ) | ||||
| -(assert_invalid
 | ||||
| +(assert_malformed
 | ||||
|    (module quote "(memory 0x1_0000_0000 0x1_0000_0000)") | ||||
| -  "memory size must be at most 65536 pages (4GiB)"
 | ||||
| +  "i32 constant out of range"
 | ||||
|  ) | ||||
| -(assert_invalid
 | ||||
| +(assert_malformed
 | ||||
|    (module quote "(memory 0 0x1_0000_0000)") | ||||
| -  "memory size must be at most 65536 pages (4GiB)"
 | ||||
| +  "i32 constant out of range"
 | ||||
|  ) | ||||
|   | ||||
|  (module | ||||
|  | @ -0,0 +1,857 @@ | |||
| diff --git a/test/core/address.wast b/test/core/address.wast
 | ||||
| index 8e52030..de0d0cb 100644
 | ||||
| --- a/test/core/address.wast
 | ||||
| +++ b/test/core/address.wast
 | ||||
| @@ -210,7 +210,7 @@
 | ||||
|  (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access") | ||||
|  (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access") | ||||
|   | ||||
| -(assert_invalid
 | ||||
| +(assert_malformed
 | ||||
|    (module quote | ||||
|      "(memory 1)" | ||||
|      "(func (drop (i32.load offset=4294967296 (i32.const 0))))" | ||||
| diff --git a/test/core/binary.wast b/test/core/binary.wast
 | ||||
| index 4090b2c..18f66b4 100644
 | ||||
| --- a/test/core/binary.wast
 | ||||
| +++ b/test/core/binary.wast
 | ||||
| @@ -206,7 +206,7 @@
 | ||||
|  ) | ||||
|   | ||||
|  ;; Type section with signed LEB128 encoded type | ||||
| -(assert_malformed
 | ||||
| +(;assert_malformed
 | ||||
|    (module binary | ||||
|      "\00asm" "\01\00\00\00" | ||||
|      "\01"                     ;; Type section id | ||||
| @@ -216,7 +216,7 @@
 | ||||
|      "\00\00" | ||||
|    ) | ||||
|    "integer representation too long" | ||||
| -)
 | ||||
| +;)
 | ||||
|   | ||||
|  ;; Unsigned LEB128 must not be overlong | ||||
|  (assert_malformed | ||||
| @@ -1683,7 +1683,7 @@
 | ||||
|  ) | ||||
|   | ||||
|  ;; 2 elem segment declared, 1 given | ||||
| -(assert_malformed
 | ||||
| +(;assert_malformed
 | ||||
|    (module binary | ||||
|      "\00asm" "\01\00\00\00" | ||||
|      "\01\04\01"                             ;; type section | ||||
| @@ -1696,7 +1696,7 @@
 | ||||
|      ;; "\00\41\00\0b\01\00"                 ;; elem 1 (missed) | ||||
|    ) | ||||
|    "unexpected end" | ||||
| -)
 | ||||
| +;)
 | ||||
|   | ||||
|  ;; 2 elem segment declared, 1.5 given | ||||
|  (assert_malformed | ||||
| @@ -1813,7 +1813,7 @@
 | ||||
|  ) | ||||
|   | ||||
|  ;; 1 br_table target declared, 2 given | ||||
| -(assert_malformed
 | ||||
| +(;assert_malformed
 | ||||
|    (module binary | ||||
|      "\00asm" "\01\00\00\00" | ||||
|      "\01\04\01"                             ;; type section | ||||
| @@ -1832,7 +1832,7 @@
 | ||||
|      "\0b\0b\0b"                             ;; end | ||||
|    ) | ||||
|    "unexpected end" | ||||
| -)
 | ||||
| +;)
 | ||||
|   | ||||
|  ;; Start section | ||||
|  (module binary | ||||
| diff --git a/test/core/data.wast b/test/core/data.wast
 | ||||
| index b1e1239..74a7b04 100644
 | ||||
| --- a/test/core/data.wast
 | ||||
| +++ b/test/core/data.wast
 | ||||
| @@ -312,9 +312,10 @@
 | ||||
|      "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
| +(; not supported by wat2wasm
 | ||||
|  ;; Data segment with memory index 0 (no memory section) | ||||
|  (assert_invalid | ||||
|    (module binary | ||||
| @@ -323,7 +324,7 @@
 | ||||
|      "\00\41\00\0b"                          ;; active data segment 0 for memory 0 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 0"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
|  ;; Data segment with memory index 1 (no memory section) | ||||
| @@ -334,7 +335,7 @@
 | ||||
|      "\02\01\41\00\0b"                       ;; active data segment 0 for memory 1 | ||||
|      "\00"                                   ;; empty vec(byte) | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
|  ;; Data segment with memory index 1 and vec(byte) as above, | ||||
| @@ -354,7 +355,7 @@
 | ||||
|      "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" | ||||
|      "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
|   | ||||
|  ;; Data segment with memory index 1 and specially crafted vec(byte) after. | ||||
| @@ -374,8 +375,9 @@
 | ||||
|      "\20\21\22\23\24\25\26\27\28\29\2a\2b\2c\2d\2e\2f" | ||||
|      "\30\31\32\33\34\35\36\37\38\39\3a\3b\3c\3d" | ||||
|    ) | ||||
| -  "unknown memory 1"
 | ||||
| +  "unknown memory"
 | ||||
|  ) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  ;; Invalid offsets | ||||
| diff --git a/test/core/elem.wast b/test/core/elem.wast
 | ||||
| index 575ecef..6eecab9 100644
 | ||||
| --- a/test/core/elem.wast
 | ||||
| +++ b/test/core/elem.wast
 | ||||
| @@ -571,9 +571,11 @@
 | ||||
|    (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))) | ||||
| @@ -584,6 +586,8 @@
 | ||||
|    (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)) | ||||
| +;)
 | ||||
| diff --git a/test/core/global.wast b/test/core/global.wast
 | ||||
| index e40a305..8f8f25b 100644
 | ||||
| --- a/test/core/global.wast
 | ||||
| +++ b/test/core/global.wast
 | ||||
| @@ -328,10 +328,12 @@
 | ||||
|    "type mismatch" | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (assert_invalid | ||||
|    (module (global (import "" "") externref) (global funcref (global.get 0))) | ||||
|    "type mismatch" | ||||
|  ) | ||||
| +;)
 | ||||
|   | ||||
|  (assert_invalid | ||||
|    (module (global (import "test" "global-i32") i32) (global i32 (global.get 0) (global.get 0))) | ||||
| diff --git a/test/core/if.wast b/test/core/if.wast
 | ||||
| index 2ea45f6..b6dd504 100644
 | ||||
| --- a/test/core/if.wast
 | ||||
| +++ b/test/core/if.wast
 | ||||
| @@ -527,11 +527,12 @@
 | ||||
|   | ||||
|    ;; Atypical folded condition syntax | ||||
|   | ||||
| -  (func (export "atypical-condition")
 | ||||
| -    i32.const 0
 | ||||
| -    (if (then) (else))
 | ||||
| -    (if (i32.const 1) (i32.eqz) (then) (else))
 | ||||
| -  )
 | ||||
| +  ;; FIXME: uncomment me if the next wabt can compile it w/o error
 | ||||
| +  ;; (func (export "atypical-condition")
 | ||||
| +  ;;   i32.const 0
 | ||||
| +  ;;   (if (then) (else))
 | ||||
| +  ;;   (if (i32.const 1) (i32.eqz) (then) (else))
 | ||||
| +  ;; )
 | ||||
|  ) | ||||
|   | ||||
|  (assert_return (invoke "empty" (i32.const 0))) | ||||
| @@ -730,7 +731,7 @@
 | ||||
|   | ||||
|  (assert_return (invoke "type-use")) | ||||
|   | ||||
| -(assert_return (invoke "atypical-condition"))
 | ||||
| +;; (assert_return (invoke "atypical-condition"))
 | ||||
|   | ||||
|  (assert_malformed | ||||
|    (module quote | ||||
| diff --git a/test/core/imports.wast b/test/core/imports.wast
 | ||||
| index 69f76a0..a3844c6 100644
 | ||||
| --- a/test/core/imports.wast
 | ||||
| +++ b/test/core/imports.wast
 | ||||
| @@ -572,6 +572,7 @@
 | ||||
|  (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) | ||||
|  (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) | ||||
|   | ||||
| +(; unsupported by multi-module currently
 | ||||
|  (module $Mgm | ||||
|    (memory (export "memory") 1) ;; initial size is 1 | ||||
|    (func (export "grow") (result i32) (memory.grow (i32.const 1))) | ||||
| @@ -591,6 +592,7 @@
 | ||||
|    (func (export "size") (result i32) (memory.size)) | ||||
|  ) | ||||
|  (assert_return (invoke $Mgim2 "size") (i32.const 3)) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  ;; Syntax errors | ||||
| diff --git a/test/core/linking.wast b/test/core/linking.wast
 | ||||
| index 994e0f4..d0bfb5f 100644
 | ||||
| --- a/test/core/linking.wast
 | ||||
| +++ b/test/core/linking.wast
 | ||||
| @@ -64,6 +64,7 @@
 | ||||
|    (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)) | ||||
| @@ -81,6 +82,7 @@
 | ||||
|  (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 | ||||
| @@ -165,6 +167,7 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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)) | ||||
| @@ -187,6 +190,7 @@
 | ||||
|   | ||||
|  (assert_return (invoke $Nt "call" (i32.const 3)) (i32.const -4)) | ||||
|  (assert_trap (invoke $Nt "call" (i32.const 4)) "indirect call type mismatch") | ||||
| +;)
 | ||||
|   | ||||
|  (module $Ot | ||||
|    (type (func (result i32))) | ||||
| @@ -201,6 +205,7 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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)) | ||||
| @@ -225,6 +230,7 @@
 | ||||
|  (assert_trap (invoke $Ot "call" (i32.const 0)) "uninitialized element") | ||||
|   | ||||
|  (assert_trap (invoke $Ot "call" (i32.const 20)) "undefined element") | ||||
| +;)
 | ||||
|   | ||||
|  (module | ||||
|    (table (import "Mt" "tab") 0 funcref) | ||||
| @@ -263,6 +269,7 @@
 | ||||
|   | ||||
|  ;; Unlike in the v1 spec, active element segments stored before an | ||||
|  ;; out-of-bounds access persist after the instantiation failure. | ||||
| +(;
 | ||||
|  (assert_trap | ||||
|    (module | ||||
|      (table (import "Mt" "tab") 10 funcref) | ||||
| @@ -274,7 +281,9 @@
 | ||||
|  ) | ||||
|  (assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0)) | ||||
|  (assert_trap (invoke $Mt "call" (i32.const 8)) "uninitialized element") | ||||
| +;)
 | ||||
|   | ||||
| +(;
 | ||||
|  (assert_trap | ||||
|    (module | ||||
|      (table (import "Mt" "tab") 10 funcref) | ||||
| @@ -286,6 +295,7 @@
 | ||||
|    "out of bounds memory access" | ||||
|  ) | ||||
|  (assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0)) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  (module $Mtable_ex | ||||
| @@ -299,6 +309,7 @@
 | ||||
|    (table (import "Mtable_ex" "t-extern") 1 externref) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (assert_unlinkable | ||||
|    (module (table (import "Mtable_ex" "t-func") 1 externref)) | ||||
|    "incompatible import type" | ||||
| @@ -307,6 +318,7 @@
 | ||||
|    (module (table (import "Mtable_ex" "t-extern") 1 funcref)) | ||||
|    "incompatible import type" | ||||
|  ) | ||||
| +;)
 | ||||
|   | ||||
|   | ||||
|  ;; Memories | ||||
| @@ -346,10 +358,12 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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) | ||||
| @@ -372,6 +386,7 @@
 | ||||
|    ) | ||||
|  ) | ||||
|   | ||||
| +(;
 | ||||
|  (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)) | ||||
| @@ -380,6 +395,7 @@
 | ||||
|  (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 | ||||
| @@ -403,8 +419,10 @@
 | ||||
|    ) | ||||
|    "out of bounds memory access" | ||||
|  ) | ||||
| +(;
 | ||||
|  (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 | ||||
| @@ -416,7 +434,9 @@
 | ||||
|    ) | ||||
|    "out of bounds table access" | ||||
|  ) | ||||
| +(;
 | ||||
|  (assert_return (invoke $Mm "load" (i32.const 0)) (i32.const 97)) | ||||
| +;)
 | ||||
|   | ||||
|  ;; Store is modified if the start function traps. | ||||
|  (module $Ms | ||||
| @@ -432,6 +452,7 @@
 | ||||
|  ) | ||||
|  (register "Ms" $Ms) | ||||
|   | ||||
| +(;
 | ||||
|  (assert_trap | ||||
|    (module | ||||
|      (import "Ms" "memory" (memory 1)) | ||||
| @@ -451,3 +472,4 @@
 | ||||
|   | ||||
|  (assert_return (invoke $Ms "get memory[0]") (i32.const 104))  ;; 'h' | ||||
|  (assert_return (invoke $Ms "get table[0]") (i32.const 0xdead)) | ||||
| +;)
 | ||||
| diff --git a/test/core/memory.wast b/test/core/memory.wast
 | ||||
| index 1dd5b84..497b69f 100644
 | ||||
| --- a/test/core/memory.wast
 | ||||
| +++ b/test/core/memory.wast
 | ||||
| @@ -76,17 +76,17 @@
 | ||||
|    "memory size must be at most 65536 pages (4GiB)" | ||||
|  ) | ||||
|   | ||||
| -(assert_invalid
 | ||||
| +(assert_malformed
 | ||||
|    (module quote "(memory 0x1_0000_0000)") | ||||
| -  "memory size must be at most 65536 pages (4GiB)"
 | ||||
| +  "i32 constant out of range"
 | ||||
|  ) | ||||
| -(assert_invalid
 | ||||
| +(assert_malformed
 | ||||
|    (module quote "(memory 0x1_0000_0000 0x1_0000_0000)") | ||||
| -  "memory size must be at most 65536 pages (4GiB)"
 | ||||
| +  "i32 constant out of range"
 | ||||
|  ) | ||||
| -(assert_invalid
 | ||||
| +(assert_malformed
 | ||||
|    (module quote "(memory 0 0x1_0000_0000)") | ||||
| -  "memory size must be at most 65536 pages (4GiB)"
 | ||||
| +  "i32 constant out of range"
 | ||||
|  ) | ||||
|   | ||||
|  (module | ||||
| diff --git a/test/core/ref_func.wast b/test/core/ref_func.wast
 | ||||
| index adb5cb7..590f626 100644
 | ||||
| --- a/test/core/ref_func.wast
 | ||||
| +++ b/test/core/ref_func.wast
 | ||||
| @@ -4,7 +4,8 @@
 | ||||
|  (register "M") | ||||
|   | ||||
|  (module | ||||
| -  (func $f (import "M" "f") (param i32) (result i32))
 | ||||
| +  (; aot mode does not support module linking ;)
 | ||||
| +  (func $f (param $x i32) (result i32) (local.get $x))
 | ||||
|    (func $g (param $x i32) (result i32) | ||||
|      (i32.add (local.get $x) (i32.const 1)) | ||||
|    ) | ||||
| diff --git a/test/core/table_copy.wast b/test/core/table_copy.wast
 | ||||
| index 380e84e..f37e745 100644
 | ||||
| --- a/test/core/table_copy.wast
 | ||||
| +++ b/test/core/table_copy.wast
 | ||||
| @@ -14,11 +14,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -106,11 +107,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (export "ef0") (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -198,11 +199,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -290,11 +291,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -382,11 +383,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -474,11 +475,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -566,11 +567,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -658,11 +659,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -750,11 +751,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -842,11 +843,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -934,11 +935,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1026,11 +1027,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1118,11 +1119,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1210,11 +1211,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1302,11 +1303,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1394,11 +1395,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1486,11 +1487,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -1578,11 +1579,11 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))     ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| diff --git a/test/core/table_init.wast b/test/core/table_init.wast
 | ||||
| index 0b2d26f..bdab6a0 100644
 | ||||
| --- a/test/core/table_init.wast
 | ||||
| +++ b/test/core/table_init.wast
 | ||||
| @@ -14,11 +14,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -72,11 +73,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -130,11 +132,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t0) (i32.const 2) func 3 1 4 1) | ||||
| @@ -196,11 +199,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -254,11 +258,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| @@ -312,11 +317,12 @@
 | ||||
|   | ||||
|  (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
 | ||||
| +  ;; aot mode does not support module linking
 | ||||
| +  (func (result i32) (i32.const 0))    ;; index 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))    ;; index 4
 | ||||
|    (table $t0 30 30 funcref) | ||||
|    (table $t1 30 30 funcref) | ||||
|    (elem (table $t1) (i32.const 2) func 3 1 4 1) | ||||
| diff --git a/test/core/unreached-valid.wast b/test/core/unreached-valid.wast
 | ||||
| index b7ebabf..4f2abfb 100644
 | ||||
| --- a/test/core/unreached-valid.wast
 | ||||
| +++ b/test/core/unreached-valid.wast
 | ||||
| @@ -46,6 +46,7 @@
 | ||||
|   | ||||
|  ;; Validation after unreachable | ||||
|   | ||||
| +(;
 | ||||
|  (module | ||||
|    (func (export "meet-bottom") | ||||
|      (block (result f64) | ||||
| @@ -61,3 +62,4 @@
 | ||||
|  ) | ||||
|   | ||||
|  (assert_trap (invoke "meet-bottom") "unreachable") | ||||
| +;)
 | ||||
|  | @ -1,174 +1,124 @@ | |||
| diff --git a/test/core/imports.wast b/test/core/imports.wast
 | ||||
| index 0cc07cb..4e8367a 100644
 | ||||
| --- a/test/core/imports.wast
 | ||||
| +++ b/test/core/imports.wast
 | ||||
| @@ -86,7 +86,7 @@
 | ||||
|  (assert_return (invoke "print64" (i64.const 24))) | ||||
|   | ||||
|  (assert_invalid | ||||
| -  (module 
 | ||||
| +  (module
 | ||||
|      (type (func (result i32))) | ||||
|      (import "test" "func" (func (type 1))) | ||||
|    ) | ||||
| @@ -578,6 +578,7 @@
 | ||||
|  (assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) | ||||
|  (assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) | ||||
|   | ||||
| +(;
 | ||||
|  (module $Mgm | ||||
|    (memory (export "memory") 1) ;; initial size is 1 | ||||
|    (func (export "grow") (result i32) (memory.grow (i32.const 1))) | ||||
| @@ -586,7 +587,7 @@
 | ||||
|  (assert_return (invoke $Mgm "grow") (i32.const 1)) ;; now size is 2 | ||||
|  (module $Mgim1 | ||||
|    ;; imported memory limits should match, because external memory size is 2 now | ||||
| -  (memory (export "memory") (import "grown-memory" "memory") 2) 
 | ||||
| +  (memory (export "memory") (import "grown-memory" "memory") 2)
 | ||||
|    (func (export "grow") (result i32) (memory.grow (i32.const 1))) | ||||
|  ) | ||||
|  (register "grown-imported-memory" $Mgim1) | ||||
| @@ -597,7 +598,7 @@
 | ||||
|    (func (export "size") (result i32) (memory.size)) | ||||
|  ) | ||||
|  (assert_return (invoke $Mgim2 "size") (i32.const 3)) | ||||
| -
 | ||||
| +;)
 | ||||
|   | ||||
|  ;; Syntax errors | ||||
|   | ||||
| @@ -669,6 +670,7 @@
 | ||||
|    "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. | ||||
| @@ -695,3 +697,4 @@
 | ||||
|    ) | ||||
|    "unknown import" | ||||
|  ) | ||||
| +;)
 | ||||
| \ No newline at end of file | ||||
| diff --git a/test/core/linking.wast b/test/core/linking.wast
 | ||||
| index d0bfb5f..6617945 100644
 | ||||
| index 994e0f4..8fbcc02 100644
 | ||||
| --- a/test/core/linking.wast
 | ||||
| +++ b/test/core/linking.wast
 | ||||
| @@ -35,7 +35,7 @@
 | ||||
| @@ -19,11 +19,11 @@
 | ||||
|  (assert_return (invoke $Nf "call") (i32.const 3)) | ||||
|  (assert_return (invoke $Nf "call Mf.call") (i32.const 2)) | ||||
|   | ||||
| -(module
 | ||||
| +(module $M1
 | ||||
|    (import "spectest" "print_i32" (func $f (param i32))) | ||||
|    (export "print" (func $f)) | ||||
|  ) | ||||
| -(register "reexport_f")
 | ||||
| +(register "reexport_f" $M1)
 | ||||
|  (assert_unlinkable | ||||
|    (module (import "reexport_f" "print" (func (param i64)))) | ||||
|    "incompatible import type" | ||||
| @@ -35,7 +35,6 @@
 | ||||
|   | ||||
|   | ||||
|  ;; Globals | ||||
| -
 | ||||
| +(;
 | ||||
|  (module $Mg | ||||
|    (global $glob (export "glob") i32 (i32.const 42)) | ||||
|    (func (export "get") (result i32) (global.get $glob)) | ||||
| @@ -63,7 +63,7 @@
 | ||||
|    (export "Mg.get_mut" (func $get_mut)) | ||||
|    (export "Mg.set_mut" (func $set_mut)) | ||||
| @@ -47,6 +46,7 @@
 | ||||
|  ) | ||||
|  (register "Mg" $Mg) | ||||
|   | ||||
| +(; only sharing initial values
 | ||||
|  (module $Ng | ||||
|    (global $x (import "Mg" "glob") i32) | ||||
|    (global $mut_glob (import "Mg" "mut_glob") (mut i32)) | ||||
| @@ -81,7 +81,7 @@
 | ||||
|  (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_return (get $Mg "glob") (i32.const 42)) | ||||
|  (assert_return (get $Ng "Mg.glob") (i32.const 42)) | ||||
| @@ -84,7 +84,7 @@
 | ||||
|  (assert_return (invoke $Ng "Mg.get_mut") (i32.const 241)) | ||||
|  ;) | ||||
|   | ||||
| -
 | ||||
| +(;
 | ||||
|  (assert_unlinkable | ||||
|    (module (import "Mg" "mut_glob" (global i32))) | ||||
|    "incompatible import type" | ||||
| @@ -166,7 +166,7 @@
 | ||||
|      (call_indirect (type 1) (local.get 0)) | ||||
|    ) | ||||
|  ) | ||||
| @@ -130,7 +130,7 @@
 | ||||
|   | ||||
|   | ||||
|  ;; Tables | ||||
| -
 | ||||
| +;)
 | ||||
|  (; | ||||
|  (assert_return (invoke $Mt "call" (i32.const 2)) (i32.const 4)) | ||||
|  (assert_return (invoke $Nt "Mt.call" (i32.const 2)) (i32.const 4)) | ||||
| @@ -191,7 +191,7 @@
 | ||||
|  (assert_return (invoke $Nt "call" (i32.const 3)) (i32.const -4)) | ||||
|  (assert_trap (invoke $Nt "call" (i32.const 4)) "indirect call type mismatch") | ||||
|  ;) | ||||
| -
 | ||||
| +(;
 | ||||
|  (module $Ot | ||||
| +(; no such support
 | ||||
|  (module $Mt | ||||
|    (type (func (result i32))) | ||||
|   | ||||
| @@ -204,7 +204,7 @@
 | ||||
|      (call_indirect (type 0) (local.get 0)) | ||||
|    ) | ||||
|    (type (func)) | ||||
| @@ -307,10 +307,11 @@
 | ||||
|    (module (table (import "Mtable_ex" "t-extern") 1 funcref)) | ||||
|    "incompatible import type" | ||||
|  ) | ||||
| -
 | ||||
| +;)
 | ||||
|  (; | ||||
|  (assert_return (invoke $Mt "call" (i32.const 3)) (i32.const 4)) | ||||
|  (assert_return (invoke $Nt "Mt.call" (i32.const 3)) (i32.const 4)) | ||||
| @@ -231,7 +231,7 @@
 | ||||
|   | ||||
|  (assert_trap (invoke $Ot "call" (i32.const 20)) "undefined element") | ||||
|  ;) | ||||
| -
 | ||||
| +(;
 | ||||
|  (module | ||||
|    (table (import "Mt" "tab") 0 funcref) | ||||
|    (elem (i32.const 9) $f) | ||||
| @@ -266,7 +266,7 @@
 | ||||
|    "unknown import" | ||||
|  ) | ||||
|  (assert_trap (invoke $Mt "call" (i32.const 7)) "uninitialized element") | ||||
| -
 | ||||
| +;)
 | ||||
|  ;; Unlike in the v1 spec, active element segments stored before an | ||||
|  ;; out-of-bounds access persist after the instantiation failure. | ||||
|  (; | ||||
| @@ -297,7 +297,7 @@
 | ||||
|  (assert_return (invoke $Mt "call" (i32.const 7)) (i32.const 0)) | ||||
|  ;) | ||||
|   | ||||
| -
 | ||||
| +(;
 | ||||
|  (module $Mtable_ex | ||||
|    (table $t1 (export "t-func") 1 funcref) | ||||
|    (table $t2 (export "t-extern") 1 externref) | ||||
| @@ -308,7 +308,7 @@
 | ||||
|    (table (import "Mtable_ex" "t-func") 1 funcref) | ||||
|    (table (import "Mtable_ex" "t-extern") 1 externref) | ||||
|  ) | ||||
| -
 | ||||
| +;)
 | ||||
|  (; | ||||
|  (assert_unlinkable | ||||
|    (module (table (import "Mtable_ex" "t-func") 1 externref)) | ||||
| @@ -322,7 +322,7 @@
 | ||||
|   | ||||
|   | ||||
|  ;; Memories | ||||
| -
 | ||||
| +(;
 | ||||
| +(; no such support
 | ||||
|  (module $Mm | ||||
|    (memory (export "mem") 1 5) | ||||
|    (data (i32.const 10) "\00\01\02\03\04\05\06\07\08\09") | ||||
| @@ -357,14 +357,14 @@
 | ||||
|      (i32.load8_u (local.get 0)) | ||||
|    ) | ||||
|  ) | ||||
| -
 | ||||
| @@ -451,3 +452,4 @@
 | ||||
|   | ||||
|  (assert_return (invoke $Ms "get memory[0]") (i32.const 104))  ;; 'h' | ||||
|  (assert_return (invoke $Ms "get table[0]") (i32.const 0xdead)) | ||||
| +;)
 | ||||
|  (; | ||||
|  (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") | ||||
| @@ -385,7 +385,7 @@
 | ||||
|      (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)) | ||||
| @@ -396,7 +396,7 @@
 | ||||
|  (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")) | ||||
| @@ -419,11 +419,12 @@
 | ||||
|    ) | ||||
|    "out of bounds memory access" | ||||
|  ) | ||||
| +;)
 | ||||
|  (; | ||||
|  (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) | ||||
| @@ -434,10 +435,11 @@
 | ||||
|    ) | ||||
|    "out of bounds table access" | ||||
|  ) | ||||
| +;)
 | ||||
|  (; | ||||
|  (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))) | ||||
| @@ -451,7 +453,7 @@
 | ||||
|    ) | ||||
|  ) | ||||
|  (register "Ms" $Ms) | ||||
| -
 | ||||
| +;)
 | ||||
|  (; | ||||
|  (assert_trap | ||||
|    (module | ||||
| \ No newline at end of file | ||||
|  |  | |||
|  | @ -1074,12 +1074,14 @@ def compile_wast_to_wasm(form, wast_tempfile, wasm_tempfile, opts): | |||
|     log("Compiling WASM to '%s'" % wasm_tempfile) | ||||
| 
 | ||||
|     # default arguments | ||||
|     if opts.gc or opts.memory64: | ||||
|     if opts.gc: | ||||
|         cmd = [opts.wast2wasm, "-u", "-d", wast_tempfile, "-o", wasm_tempfile] | ||||
|     elif opts.eh: | ||||
|         cmd = [opts.wast2wasm, "--enable-thread", "--no-check", "--enable-exceptions", "--enable-tail-call", wast_tempfile, "-o", wasm_tempfile ] | ||||
|         cmd = [opts.wast2wasm, "--enable-threads", "--no-check", "--enable-exceptions", "--enable-tail-call", wast_tempfile, "-o", wasm_tempfile ] | ||||
|     elif opts.memory64: | ||||
|         cmd = [opts.wast2wasm, "--enable-memory64", "--no-check", wast_tempfile, "-o", wasm_tempfile ] | ||||
|     else: | ||||
|         cmd = [opts.wast2wasm, "--enable-thread", "--no-check", | ||||
|         cmd = [opts.wast2wasm, "--enable-threads", "--no-check", | ||||
|                wast_tempfile, "-o", wasm_tempfile ] | ||||
| 
 | ||||
|     # remove reference-type and bulk-memory enabling options since a WABT | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| diff --git a/test/core/simd/simd_lane.wast b/test/core/simd/simd_lane.wast
 | ||||
| index 9d4b5fd7..4656dd2b 100644
 | ||||
| index 9b66f53..48a4e6d 100644
 | ||||
| --- a/test/core/simd/simd_lane.wast
 | ||||
| +++ b/test/core/simd/simd_lane.wast
 | ||||
| @@ -602,23 +602,23 @@
 | ||||
|  | @ -50,7 +50,7 @@ index 9d4b5fd7..4656dd2b 100644 | |||
|  ;; Non-nat lane index | ||||
|   | ||||
| diff --git a/test/core/simd/simd_load.wast b/test/core/simd/simd_load.wast
 | ||||
| index 4b2edc16..c7639218 100644
 | ||||
| index 4b2edc1..c763921 100644
 | ||||
| --- a/test/core/simd/simd_load.wast
 | ||||
| +++ b/test/core/simd/simd_load.wast
 | ||||
| @@ -124,7 +124,7 @@
 | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| function DEBUG() { | ||||
|   [[ -n $(env | grep "\<DEBUG\>") ]] && $@ | ||||
| } | ||||
| DEBUG set -xv pipefail | ||||
| DEBUG set -exv pipefail | ||||
| 
 | ||||
| function help() | ||||
| { | ||||
|  | @ -361,6 +361,7 @@ function sightglass_test() | |||
| 
 | ||||
| function setup_wabt() | ||||
| { | ||||
|     WABT_VERSION=1.0.34 | ||||
|     if [ ${WABT_BINARY_RELEASE} == "YES" ]; then | ||||
|         echo "download a binary release and install" | ||||
|         local WAT2WASM=${WORK_DIR}/wabt/out/gcc/Release/wat2wasm | ||||
|  | @ -382,16 +383,16 @@ function setup_wabt() | |||
|                     exit 1 | ||||
|                     ;; | ||||
|             esac | ||||
|             if [ ! -f /tmp/wabt-1.0.31-${WABT_PLATFORM}.tar.gz ]; then | ||||
|             if [ ! -f /tmp/wabt-${WABT_VERSION}-${WABT_PLATFORM}.tar.gz ]; then | ||||
|                 curl -L \ | ||||
|                     https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-${WABT_PLATFORM}.tar.gz \ | ||||
|                     -o /tmp/wabt-1.0.31-${WABT_PLATFORM}.tar.gz | ||||
|                     https://github.com/WebAssembly/wabt/releases/download/${WABT_VERSION}/wabt-${WABT_VERSION}-${WABT_PLATFORM}.tar.gz \ | ||||
|                     -o /tmp/wabt-${WABT_VERSION}-${WABT_PLATFORM}.tar.gz | ||||
|             fi | ||||
| 
 | ||||
|             cd /tmp \ | ||||
|             && tar zxf wabt-1.0.31-${WABT_PLATFORM}.tar.gz \ | ||||
|             && tar zxf wabt-${WABT_VERSION}-${WABT_PLATFORM}.tar.gz \ | ||||
|             && mkdir -p ${WORK_DIR}/wabt/out/gcc/Release/ \ | ||||
|             && install wabt-1.0.31/bin/wa* ${WORK_DIR}/wabt/out/gcc/Release/ \ | ||||
|             && install wabt-${WABT_VERSION}/bin/* ${WORK_DIR}/wabt/out/gcc/Release/ \ | ||||
|             && cd - | ||||
|         fi | ||||
|     else | ||||
|  | @ -402,10 +403,11 @@ function setup_wabt() | |||
|         fi | ||||
|         echo "upate wabt" | ||||
|         cd wabt | ||||
|         git pull | ||||
|         git fetch origin | ||||
|         git reset --hard origin/main | ||||
|         git checkout tags/${WABT_VERSION} -B ${WABT_VERSION} | ||||
|         cd .. | ||||
|         make -C wabt gcc-release -j 4 | ||||
|         make -C wabt gcc-release -j 4 || exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
|  | @ -429,112 +431,76 @@ function spec_test() | |||
|     touch ${REPORT_DIR}/spec_test_report.txt | ||||
| 
 | ||||
|     cd ${WORK_DIR} | ||||
|     if [ ! -d "spec" ];then | ||||
|         echo "spec not exist, clone it from github" | ||||
|         git clone -b master --single-branch https://github.com/WebAssembly/spec | ||||
|     fi | ||||
| 
 | ||||
|     pushd spec | ||||
| 
 | ||||
|     # restore and clean everything | ||||
|     git reset --hard HEAD | ||||
| 
 | ||||
|     # update basic test cases | ||||
|     echo "update spec test cases" | ||||
|     git fetch origin main | ||||
|     # restore from XX_ignore_cases.patch | ||||
|     # resotre branch | ||||
|     git checkout -B main | ||||
|     # [spec] Update note on module initialization trapping (#1493) | ||||
|     git reset --hard 044d0d2e77bdcbe891f7e0b9dd2ac01d56435f0b | ||||
|     git apply ../../spec-test-script/ignore_cases.patch | ||||
|     if [[ ${ENABLE_SIMD} == 1 ]]; then | ||||
|         git apply ../../spec-test-script/simd_ignore_cases.patch | ||||
|     fi | ||||
|     if [[ ${ENABLE_MULTI_MODULE} == 1 && $1 == 'aot'  ]]; then | ||||
|         git apply ../../spec-test-script/multi_module_aot_ignore_cases.patch | ||||
|     fi | ||||
|     echo "downloading spec test cases..." | ||||
| 
 | ||||
|     # udpate thread cases | ||||
|     rm -rf spec | ||||
|     if [ ${ENABLE_MULTI_THREAD} == 1 ]; then | ||||
|         echo "checkout spec for threads proposal" | ||||
|         if [[ -z $(git remote -v | grep "\<threads\>") ]]; then | ||||
|             git remote add threads https://github.com/WebAssembly/threads | ||||
|         fi | ||||
|         echo "checkout spec from threads proposal" | ||||
| 
 | ||||
|         # fetch spec for threads proposal | ||||
|         git fetch threads | ||||
|         # Fix error in Web embedding desc for atomic.notify (#185) | ||||
|         git reset --hard 85b562cd6805947876ec5e8b975ab0127c55a0a2 | ||||
|         git checkout threads/main | ||||
|         # check spec test cases for threads | ||||
|         git clone -b main --single-branch https://github.com/WebAssembly/threads.git spec | ||||
|         pushd spec | ||||
| 
 | ||||
|         git apply ../../spec-test-script/thread_proposal_ignore_cases.patch | ||||
|         git apply ../../spec-test-script/thread_proposal_fix_atomic_case.patch | ||||
|         # May 31, 2012 [interpreter] implement atomic.wait and atomic.notify (#194) | ||||
|         git reset --hard 09f2831349bf409187abb6f7868482a8079f2264 | ||||
|         git apply ../../spec-test-script/thread_proposal_ignore_cases.patch || exit 1 | ||||
|         git apply ../../spec-test-script/thread_proposal_fix_atomic_case.patch || exit 1 | ||||
|         git apply ../../spec-test-script/thread_proposal_remove_memory64_flag_case.patch | ||||
|     fi | ||||
| 
 | ||||
|     if [ ${ENABLE_EH} == 1 ]; then | ||||
|     elif [ ${ENABLE_EH} == 1 ]; then | ||||
|         echo "checkout exception-handling test cases" | ||||
|         popd | ||||
|         if [ ! -d "exception-handling" ];then | ||||
|             echo "exception-handling not exist, clone it from github" | ||||
|             git clone -b master --single-branch https://github.com/WebAssembly/exception-handling | ||||
|         fi | ||||
|         pushd exception-handling | ||||
| 
 | ||||
|         # restore and clean everything | ||||
|         git clone -b main --single-branch https://github.com/WebAssembly/exception-handling spec | ||||
|         pushd spec | ||||
| 
 | ||||
|         # Jun 6, 2023 Merge branch 'upstream' into merge-upstream | ||||
|         git reset --hard 51c721661b671bb7dc4b3a3acb9e079b49778d36 | ||||
| 
 | ||||
|         if [[ ${ENABLE_MULTI_MODULE} == 0 ]]; then | ||||
|             git apply ../../spec-test-script/exception_handling.patch | ||||
|         fi | ||||
| 
 | ||||
|         popd | ||||
|         echo $(pwd) | ||||
|     fi | ||||
| 
 | ||||
|     # update GC cases | ||||
|     if [[ ${ENABLE_GC} == 1 ]]; then | ||||
|         git apply ../../spec-test-script/exception_handling.patch || exit 1 | ||||
|     elif [[ ${ENABLE_GC} == 1 ]]; then | ||||
|         echo "checkout spec for GC proposal" | ||||
| 
 | ||||
|         popd | ||||
|         rm -fr spec | ||||
|         # check spec test cases for GC | ||||
|         git clone -b main --single-branch https://github.com/WebAssembly/gc.git spec | ||||
|         pushd spec | ||||
| 
 | ||||
|         git restore . && git clean -ffd . | ||||
|         # Reset to commit: "[test] Unify the error message." | ||||
|         git reset --hard 0caaadc65b5e1910512d8ae228502edcf9d60390 | ||||
|         git apply ../../spec-test-script/gc_ignore_cases.patch | ||||
|         git apply ../../spec-test-script/gc_ignore_cases.patch || exit 1 | ||||
| 
 | ||||
|         if [[ ${ENABLE_QEMU} == 1 ]]; then | ||||
|             # Decrease the recursive count for tail call cases as nuttx qemu's | ||||
|             # native stack size is much smaller | ||||
|             git apply ../../spec-test-script/gc_nuttx_tail_call.patch | ||||
|             git apply ../../spec-test-script/gc_nuttx_tail_call.patch || exit 1 | ||||
|         fi | ||||
| 
 | ||||
|         compile_reference_interpreter | ||||
|     fi | ||||
| 
 | ||||
|     # update memory64 cases | ||||
|     if [[ ${ENABLE_MEMORY64} == 1 ]]; then | ||||
|     elif [[ ${ENABLE_MEMORY64} == 1 ]]; then | ||||
|         echo "checkout spec for memory64 proposal" | ||||
| 
 | ||||
|         popd | ||||
|         rm -fr spec | ||||
|         # check spec test cases for memory64 | ||||
|         git clone -b main --single-branch https://github.com/WebAssembly/memory64.git spec | ||||
|         pushd spec | ||||
| 
 | ||||
|         git restore . && git clean -ffd . | ||||
|         # Reset to commit: "Merge remote-tracking branch 'upstream/main' into merge2" | ||||
|         git reset --hard 48e69f394869c55b7bbe14ac963c09f4605490b6 | ||||
|         git checkout 044d0d2e77bdcbe891f7e0b9dd2ac01d56435f0b -- test/core/elem.wast test/core/data.wast | ||||
|         git apply ../../spec-test-script/ignore_cases.patch | ||||
|         git apply ../../spec-test-script/memory64.patch | ||||
|         git apply ../../spec-test-script/memory64_ignore_cases.patch || exit 1 | ||||
|     else | ||||
|         echo "checkout spec for default proposal" | ||||
| 
 | ||||
|         compile_reference_interpreter | ||||
|         git clone -b main --single-branch https://github.com/WebAssembly/spec | ||||
|         pushd spec | ||||
| 
 | ||||
|         # Apr 3, 2024 [js-api] Integrate with the ResizableArrayBuffer proposal (#1300) | ||||
|         git reset --hard bc76fd79cfe61033d7f4ad4a7e8fc4f996dc5ba8 | ||||
|         git apply ../../spec-test-script/ignore_cases.patch || exit 1 | ||||
|         if [[ ${ENABLE_SIMD} == 1 ]]; then | ||||
|             git apply ../../spec-test-script/simd_ignore_cases.patch || exit 1 | ||||
|         fi | ||||
|         if [[ ${ENABLE_MULTI_MODULE} == 1 ]]; then | ||||
|             git apply ../../spec-test-script/multi_module_aot_ignore_cases.patch || exit 1 | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     popd | ||||
|  | @ -547,29 +513,20 @@ function spec_test() | |||
| 
 | ||||
|     local ARGS_FOR_SPEC_TEST="" | ||||
| 
 | ||||
|     # multi-module only enable in interp mode and aot mode | ||||
|     if [[ 1 == ${ENABLE_MULTI_MODULE} ]]; then | ||||
|         if [[ $1 == 'classic-interp' || $1 == 'fast-interp' || $1 == 'aot' ]]; then | ||||
|             ARGS_FOR_SPEC_TEST+="-M " | ||||
|         fi | ||||
|         ARGS_FOR_SPEC_TEST+="-M " | ||||
|     fi | ||||
| 
 | ||||
|     if [[ 1 == ${ENABLE_EH} ]]; then | ||||
|         ARGS_FOR_SPEC_TEST+="-e " | ||||
|     fi | ||||
| 
 | ||||
|     # sgx only enable in interp mode and aot mode | ||||
|     if [[ ${SGX_OPT} == "--sgx" ]];then | ||||
|         if [[ $1 == 'classic-interp' || $1 == 'fast-interp' || $1 == 'aot' || $1 == 'fast-jit' ]]; then | ||||
|           ARGS_FOR_SPEC_TEST+="-x " | ||||
|         fi | ||||
|         ARGS_FOR_SPEC_TEST+="-x " | ||||
|     fi | ||||
| 
 | ||||
|     # simd only enable in jit mode and aot mode | ||||
|     if [[ ${ENABLE_SIMD} == 1 ]]; then | ||||
|         if [[ $1 == 'jit' || $1 == 'aot' ]]; then | ||||
|           ARGS_FOR_SPEC_TEST+="-S " | ||||
|         fi | ||||
|         ARGS_FOR_SPEC_TEST+="-S " | ||||
|     fi | ||||
| 
 | ||||
|     if [[ ${ENABLE_MULTI_THREAD} == 1 ]]; then | ||||
|  | @ -596,11 +553,8 @@ function spec_test() | |||
|         ARGS_FOR_SPEC_TEST+="--gc " | ||||
|     fi | ||||
| 
 | ||||
|     # wasm64(memory64) is only enabled in interp and aot mode | ||||
|     if [[ 1 == ${ENABLE_MEMORY64} ]]; then | ||||
|         if [[ $1 == 'classic-interp' || $1 == 'aot' ]]; then | ||||
|             ARGS_FOR_SPEC_TEST+="--memory64 " | ||||
|         fi | ||||
|         ARGS_FOR_SPEC_TEST+="--memory64 " | ||||
|     fi | ||||
| 
 | ||||
|     if [[ ${ENABLE_QEMU} == 1 ]]; then | ||||
|  | @ -888,11 +842,79 @@ function collect_coverage() | |||
|     fi | ||||
| } | ||||
| 
 | ||||
| # decide whether execute test cases in current running mode based on the current configuration or not | ||||
| # return 1 if the test case should be executed, otherwise return 0 | ||||
| function do_execute_in_running_mode() | ||||
| { | ||||
|     local RUNNING_MODE="$1" | ||||
| 
 | ||||
|     if [[ ${ENABLE_MEMORY64} -eq 1 ]]; then | ||||
|         if [[ "${RUNNING_MODE}" != "classic-interp" \ | ||||
|                 && "${RUNNING_MODE}" != "aot" ]]; then | ||||
|             echo "support memory64(wasm64) in classic-interp mode and aot mode" | ||||
|             return 0 | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     # FIXME: add "aot" after fix the linking failure | ||||
|     if [[ ${ENABLE_MULTI_MODULE} -eq 1 ]]; then | ||||
|         if [[ "${RUNNING_MODE}" != "classic-interp" \ | ||||
|                 && "${RUNNING_MODE}" != "fast-interp" ]]; then | ||||
|             echo "support multi-module in both interp modes" | ||||
|             return 0 | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     if [[ ${SGX_OPT} == "--sgx" ]]; then | ||||
|         if [[ "${RUNNING_MODE}" != "classic-interp" \ | ||||
|                 && "${RUNNING_MODE}" != "fast-interp" \ | ||||
|                 && "${RUNNING_MODE}" != "aot" \ | ||||
|                 && "${RUNNING_MODE}" != "fast-jit" ]]; then | ||||
|             echo "support sgx in both interp modes, fast-jit mode and aot mode" | ||||
|             return 0 | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     if [[ ${ENABLE_SIMD} -eq 1 ]]; then | ||||
|         if [[ "${RUNNING_MODE}" != "jit" && "${RUNNING_MODE}" != "aot" ]]; then | ||||
|             echo "support simd in llvm-jit mode and aot mode" | ||||
|             return 0; | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     if [[ ${TARGET} == "X86_32" ]]; then | ||||
|         if [[ "${RUNNING_MODE}" == "jit" || "${RUNNING_MODE}" == "fast-jit" ]]; then | ||||
|             echo "both llvm-jit mode and fast-jit mode do not support X86_32 target" | ||||
|             return 0; | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     if [[ ${ENABLE_GC} -eq 1 ]]; then | ||||
|         if [[ "${RUNNING_MODE}" != "classic-interp" \ | ||||
|                 && "${RUNNING_MODE}" != "fast-interp" \ | ||||
|                 && "${RUNNING_MODE}" != "jit" \ | ||||
|                 && "${RUNNING_MODE}" != "aot" ]]; then | ||||
|             echo "support gc in both interp modes, llvm-jit mode and aot mode" | ||||
|             return 0; | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     if [[ ${ENABLE_EH} -eq 1 ]]; then | ||||
|         if [[ "${RUNNING_MODE}" != "classic-interp" ]]; then | ||||
|             echo "support exception handling in classic-interp" | ||||
|             return 0; | ||||
|         fi | ||||
|     fi | ||||
| 
 | ||||
|     # by default, always execute the test case | ||||
|     return 1 | ||||
| } | ||||
| 
 | ||||
| function trigger() | ||||
| { | ||||
|     # Check if REQUIREMENT_NAME is set, if set, only calling requirement test and early return | ||||
|     if [[ -n $REQUIREMENT_NAME ]]; then | ||||
|         python ${REQUIREMENT_SCRIPT_DIR}/run_requirement.py -o ${REPORT_DIR}/ -r "$REQUIREMENT_NAME" "${SUBREQUIREMENT_IDS[@]}"  | ||||
|         python ${REQUIREMENT_SCRIPT_DIR}/run_requirement.py -o ${REPORT_DIR}/ -r "$REQUIREMENT_NAME" "${SUBREQUIREMENT_IDS[@]}" | ||||
|         # early return with the python script exit status | ||||
|         return $? | ||||
|     fi | ||||
|  | @ -901,6 +923,7 @@ function trigger() | |||
|     # default enabled features | ||||
|     EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_BULK_MEMORY=1" | ||||
|     EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_REF_TYPES=1" | ||||
|     EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_LIBC_WASI=0" | ||||
| 
 | ||||
|     if [[ ${ENABLE_MULTI_MODULE} == 1 ]];then | ||||
|         EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_MULTI_MODULE=1" | ||||
|  | @ -976,14 +999,16 @@ function trigger() | |||
|     fi | ||||
| 
 | ||||
|     for t in "${TYPE[@]}"; do | ||||
|         do_execute_in_running_mode $t | ||||
|         if [[ $? -eq 1 ]]; then | ||||
|             echo "execute in running mode" $t | ||||
|         else | ||||
|             echo "skip in running mode" $t | ||||
|             continue | ||||
|         fi | ||||
| 
 | ||||
|         case $t in | ||||
|             "classic-interp") | ||||
|                 if [[ ${ENABLE_SIMD} == 1 ]]; then | ||||
|                     echo "does not support SIMD in interp mode, bypass" | ||||
|                     continue | ||||
|                 fi | ||||
| 
 | ||||
|                 echo "work in classic-interp mode" | ||||
|                 # classic-interp | ||||
|                 BUILD_FLAGS="$CLASSIC_INTERP_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" | ||||
|                 if [[ ${ENABLE_QEMU} == 0 ]]; then | ||||
|  | @ -996,12 +1021,6 @@ function trigger() | |||
|             ;; | ||||
| 
 | ||||
|             "fast-interp") | ||||
|                 if [[ ${ENABLE_SIMD} == 1 ]]; then | ||||
|                     echo "does not support SIMD in interp mode, bypass" | ||||
|                     continue | ||||
|                 fi | ||||
| 
 | ||||
|                 echo "work in fast-interp mode" | ||||
|                 # fast-interp | ||||
|                 BUILD_FLAGS="$FAST_INTERP_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" | ||||
|                 if [[ ${ENABLE_QEMU} == 0 ]]; then | ||||
|  | @ -1014,11 +1033,6 @@ function trigger() | |||
|             ;; | ||||
| 
 | ||||
|             "jit") | ||||
|                 if [[ ${TARGET} == "X86_32" ]]; then | ||||
|                     echo "does not support an X86_32 target in JIT mode, bypass" | ||||
|                     continue | ||||
|                 fi | ||||
| 
 | ||||
|                 echo "work in orc jit eager compilation mode" | ||||
|                 BUILD_FLAGS="$ORC_EAGER_JIT_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" | ||||
|                 build_iwasm_with_cfg $BUILD_FLAGS | ||||
|  | @ -1098,6 +1112,6 @@ else | |||
| fi | ||||
| 
 | ||||
| echo -e "Test finish. Reports are under ${REPORT_DIR}" | ||||
| DEBUG set +xv pipefail | ||||
| DEBUG set +exv pipefail | ||||
| echo "TEST SUCCESSFUL" | ||||
| exit 0 | ||||
|  |  | |||
|  | @ -18,5 +18,5 @@ for wat_file in ../../wamr-compiler/*.wat; do | |||
|     echo "Compiling $wasm_file to $aot_file" | ||||
|     $WAMRC_CMD -o $aot_file $wasm_file | ||||
|     echo "Testing $aot_file" | ||||
|     $IWASM_CMD "$aot_file" | ||||
|     $IWASM_CMD -f _start "$aot_file" | ||||
| done | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 liang.he
						liang.he