From b2eb7d838d17f203e3979cd9f32ced401a39a6f8 Mon Sep 17 00:00:00 2001 From: "liang.he" Date: Fri, 17 May 2024 10:40:47 +0800 Subject: [PATCH] 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 --- .github/workflows/compilation_on_sgx.yml | 18 +- .github/workflows/nightly_run.yml | 12 +- core/iwasm/aot/aot_runtime.c | 23 +- core/iwasm/interpreter/wasm_loader.c | 101 ++- .../libc-builtin/libc_builtin_wrapper.c | 8 + .../wamr-test-suites/spec-test-script/all.py | 19 +- .../spec-test-script/exception_handling.patch | 538 ++++++++++- .../spec-test-script/ignore_cases.patch | 488 +++------- .../spec-test-script/memory64.patch | 28 - .../memory64_ignore_cases.patch | 857 ++++++++++++++++++ .../multi_module_aot_ignore_cases.patch | 242 ++--- .../spec-test-script/runtest.py | 8 +- .../spec-test-script/simd_ignore_cases.patch | 4 +- tests/wamr-test-suites/test_wamr.sh | 242 ++--- .../run_wamr_compiler_tests.sh | 2 +- 15 files changed, 1867 insertions(+), 723 deletions(-) delete mode 100644 tests/wamr-test-suites/spec-test-script/memory64.patch create mode 100644 tests/wamr-test-suites/spec-test-script/memory64_ignore_cases.patch diff --git a/.github/workflows/compilation_on_sgx.yml b/.github/workflows/compilation_on_sgx.yml index a533e183..b7bc216e 100644 --- a/.github/workflows/compilation_on_sgx.yml +++ b/.github/workflows/compilation_on_sgx.yml @@ -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 diff --git a/.github/workflows/nightly_run.yml b/.github/workflows/nightly_run.yml index c99175a4..1124df62 100644 --- a/.github/workflows/nightly_run.yml +++ b/.github/workflows/nightly_run.yml @@ -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" diff --git a/core/iwasm/aot/aot_runtime.c b/core/iwasm/aot/aot_runtime.c index 5f0fe662..e01b8d20 100644 --- a/core/iwasm/aot/aot_runtime.c +++ b/core/iwasm/aot/aot_runtime.c @@ -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; } diff --git a/core/iwasm/interpreter/wasm_loader.c b/core/iwasm/interpreter/wasm_loader.c index ba9f45a5..54e7041a 100644 --- a/core/iwasm/interpreter/wasm_loader.c +++ b/core/iwasm/interpreter/wasm_loader.c @@ -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 diff --git a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c index e266ba6c..24edd3c0 100644 --- a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c +++ b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c @@ -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 }, diff --git a/tests/wamr-test-suites/spec-test-script/all.py b/tests/wamr-test-suites/spec-test-script/all.py index 13db4720..dadf394d 100644 --- a/tests/wamr-test-suites/spec-test-script/all.py +++ b/tests/wamr-test-suites/spec-test-script/all.py @@ -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) diff --git a/tests/wamr-test-suites/spec-test-script/exception_handling.patch b/tests/wamr-test-suites/spec-test-script/exception_handling.patch index 0c9e8d40..e2723459 100644 --- a/tests/wamr-test-suites/spec-test-script/exception_handling.patch +++ b/tests/wamr-test-suites/spec-test-script/exception_handling.patch @@ -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) diff --git a/tests/wamr-test-suites/spec-test-script/ignore_cases.patch b/tests/wamr-test-suites/spec-test-script/ignore_cases.patch index bfb4383f..a617c460 100644 --- a/tests/wamr-test-suites/spec-test-script/ignore_cases.patch +++ b/tests/wamr-test-suites/spec-test-script/ignore_cases.patch @@ -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") -+;) diff --git a/tests/wamr-test-suites/spec-test-script/memory64.patch b/tests/wamr-test-suites/spec-test-script/memory64.patch deleted file mode 100644 index 739a1df6..00000000 --- a/tests/wamr-test-suites/spec-test-script/memory64.patch +++ /dev/null @@ -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 diff --git a/tests/wamr-test-suites/spec-test-script/memory64_ignore_cases.patch b/tests/wamr-test-suites/spec-test-script/memory64_ignore_cases.patch new file mode 100644 index 00000000..43dcda6a --- /dev/null +++ b/tests/wamr-test-suites/spec-test-script/memory64_ignore_cases.patch @@ -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") ++;) diff --git a/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch b/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch index 4494e085..9f908488 100644 --- a/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch +++ b/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch @@ -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 diff --git a/tests/wamr-test-suites/spec-test-script/runtest.py b/tests/wamr-test-suites/spec-test-script/runtest.py index 3c32481f..adb1ae47 100755 --- a/tests/wamr-test-suites/spec-test-script/runtest.py +++ b/tests/wamr-test-suites/spec-test-script/runtest.py @@ -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 diff --git a/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch b/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch index 87d3871e..0819980f 100644 --- a/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch +++ b/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch @@ -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 @@ diff --git a/tests/wamr-test-suites/test_wamr.sh b/tests/wamr-test-suites/test_wamr.sh index 0b27df46..06c3ebd2 100755 --- a/tests/wamr-test-suites/test_wamr.sh +++ b/tests/wamr-test-suites/test_wamr.sh @@ -8,7 +8,7 @@ function DEBUG() { [[ -n $(env | grep "\") ]] && $@ } -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 "\") ]]; 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 diff --git a/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh b/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh index 19c8030d..6b841223 100755 --- a/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh +++ b/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh @@ -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