Synchronize the GC spec tests to the commit from December 9. 2024. (#4022)
- Synchronize the GC spec tests to the commit from December 9. 2024. - Revise the error messages to be consistent with the spec test cases. - bypass gc spec test on the nuttx platform as a workaround
This commit is contained in:
3
.github/workflows/spec_test_on_nuttx.yml
vendored
3
.github/workflows/spec_test_on_nuttx.yml
vendored
@ -127,7 +127,8 @@ jobs:
|
|||||||
wamr_feature_option:
|
wamr_feature_option:
|
||||||
# Empty option for default
|
# Empty option for default
|
||||||
- { option: "", mode: "" }
|
- { option: "", mode: "" }
|
||||||
- { option: "CONFIG_INTERPRETERS_WAMR_GC CONFIG_INTERPRETERS_WAMR_AOT_STACK_FRAME", mode: "-G" }
|
# need to install menhir
|
||||||
|
# - { option: "CONFIG_INTERPRETERS_WAMR_GC CONFIG_INTERPRETERS_WAMR_AOT_STACK_FRAME", mode: "-G" }
|
||||||
|
|
||||||
exclude:
|
exclude:
|
||||||
# XIP is not fully supported yet on RISCV64, some relocations can not be resolved
|
# XIP is not fully supported yet on RISCV64, some relocations can not be resolved
|
||||||
|
|||||||
@ -3014,9 +3014,9 @@ static const char *exception_msgs[] = {
|
|||||||
"wasm operand stack overflow", /* EXCE_OPERAND_STACK_OVERFLOW */
|
"wasm operand stack overflow", /* EXCE_OPERAND_STACK_OVERFLOW */
|
||||||
"failed to compile fast jit function", /* EXCE_FAILED_TO_COMPILE_FAST_JIT_FUNC */
|
"failed to compile fast jit function", /* EXCE_FAILED_TO_COMPILE_FAST_JIT_FUNC */
|
||||||
/* GC related exceptions */
|
/* GC related exceptions */
|
||||||
"null function object", /* EXCE_NULL_FUNC_OBJ */
|
"null function reference", /* EXCE_NULL_FUNC_OBJ */
|
||||||
"null structure object", /* EXCE_NULL_STRUCT_OBJ */
|
"null structure reference", /* EXCE_NULL_STRUCT_OBJ */
|
||||||
"null array reference", /* EXCE_NULL_ARRAY_OBJ */
|
"null array reference", /* EXCE_NULL_ARRAY_OBJ */
|
||||||
"null i31 reference", /* EXCE_NULL_I31_OBJ */
|
"null i31 reference", /* EXCE_NULL_I31_OBJ */
|
||||||
"null reference", /* EXCE_NULL_REFERENCE */
|
"null reference", /* EXCE_NULL_REFERENCE */
|
||||||
"create rtt type failed", /* EXCE_FAILED_TO_CREATE_RTT_TYPE */
|
"create rtt type failed", /* EXCE_FAILED_TO_CREATE_RTT_TYPE */
|
||||||
@ -3024,7 +3024,7 @@ static const char *exception_msgs[] = {
|
|||||||
"create array object failed", /* EXCE_FAILED_TO_CREATE_ARRAY_OBJ */
|
"create array object failed", /* EXCE_FAILED_TO_CREATE_ARRAY_OBJ */
|
||||||
"create externref object failed", /* EXCE_FAILED_TO_CREATE_EXTERNREF_OBJ */
|
"create externref object failed", /* EXCE_FAILED_TO_CREATE_EXTERNREF_OBJ */
|
||||||
"cast failure", /* EXCE_CAST_FAILURE */
|
"cast failure", /* EXCE_CAST_FAILURE */
|
||||||
"out of bounds array access", /* EXCE_ARRAY_IDX_OOB */
|
"out of bounds array access", /* EXCE_ARRAY_IDX_OOB */
|
||||||
/* stringref related exceptions */
|
/* stringref related exceptions */
|
||||||
"create string object failed", /* EXCE_FAILED_TO_CREATE_STRING */
|
"create string object failed", /* EXCE_FAILED_TO_CREATE_STRING */
|
||||||
"create stringref failed", /* EXCE_FAILED_TO_CREATE_STRINGREF */
|
"create stringref failed", /* EXCE_FAILED_TO_CREATE_STRINGREF */
|
||||||
|
|||||||
@ -2649,7 +2649,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
read_leb_uint32(frame_ip, frame_ip_end, type_index);
|
read_leb_uint32(frame_ip, frame_ip_end, type_index);
|
||||||
func_obj = POP_REF();
|
func_obj = POP_REF();
|
||||||
if (!func_obj) {
|
if (!func_obj) {
|
||||||
wasm_set_exception(module, "null function object");
|
wasm_set_exception(module, "null function reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2666,7 +2666,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
read_leb_uint32(frame_ip, frame_ip_end, type_index);
|
read_leb_uint32(frame_ip, frame_ip_end, type_index);
|
||||||
func_obj = POP_REF();
|
func_obj = POP_REF();
|
||||||
if (!func_obj) {
|
if (!func_obj) {
|
||||||
wasm_set_exception(module, "null function object");
|
wasm_set_exception(module, "null function reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2813,7 +2813,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
struct_obj = POP_REF();
|
struct_obj = POP_REF();
|
||||||
|
|
||||||
if (!struct_obj) {
|
if (!struct_obj) {
|
||||||
wasm_set_exception(module, "null structure object");
|
wasm_set_exception(module,
|
||||||
|
"null structure reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2869,7 +2870,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
|
|
||||||
struct_obj = POP_REF();
|
struct_obj = POP_REF();
|
||||||
if (!struct_obj) {
|
if (!struct_obj) {
|
||||||
wasm_set_exception(module, "null structure object");
|
wasm_set_exception(module,
|
||||||
|
"null structure reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1992,7 +1992,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
#endif
|
#endif
|
||||||
func_obj = POP_REF();
|
func_obj = POP_REF();
|
||||||
if (!func_obj) {
|
if (!func_obj) {
|
||||||
wasm_set_exception(module, "null function object");
|
wasm_set_exception(module, "null function reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2007,7 +2007,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
#endif
|
#endif
|
||||||
func_obj = POP_REF();
|
func_obj = POP_REF();
|
||||||
if (!func_obj) {
|
if (!func_obj) {
|
||||||
wasm_set_exception(module, "null function object");
|
wasm_set_exception(module, "null function reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2148,7 +2148,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
struct_obj = POP_REF();
|
struct_obj = POP_REF();
|
||||||
|
|
||||||
if (!struct_obj) {
|
if (!struct_obj) {
|
||||||
wasm_set_exception(module, "null structure object");
|
wasm_set_exception(module,
|
||||||
|
"null structure reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2204,7 +2205,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|||||||
|
|
||||||
struct_obj = POP_REF();
|
struct_obj = POP_REF();
|
||||||
if (!struct_obj) {
|
if (!struct_obj) {
|
||||||
wasm_set_exception(module, "null structure object");
|
wasm_set_exception(module,
|
||||||
|
"null structure reference");
|
||||||
goto got_exception;
|
goto got_exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2139,8 +2139,9 @@ load_type_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
|
|||||||
if (!wasm_type_is_subtype_of(cur_type, parent_type,
|
if (!wasm_type_is_subtype_of(cur_type, parent_type,
|
||||||
module->types,
|
module->types,
|
||||||
module->type_count)) {
|
module->type_count)) {
|
||||||
set_error_buf(error_buf, error_buf_size,
|
set_error_buf_v(error_buf, error_buf_size,
|
||||||
"sub type does not match super type");
|
"sub type %u does not match super type",
|
||||||
|
processed_type_count + j);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4660,7 +4660,7 @@ llvm_jit_table_init(WASMModuleInstance *module_inst, uint32 tbl_idx,
|
|||||||
if (!(func_obj = wasm_create_func_obj(module_inst,
|
if (!(func_obj = wasm_create_func_obj(module_inst,
|
||||||
init_values[i].u.ref_index,
|
init_values[i].u.ref_index,
|
||||||
true, NULL, 0))) {
|
true, NULL, 0))) {
|
||||||
wasm_set_exception(module_inst, "null function object");
|
wasm_set_exception(module_inst, "null function reference");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
table_elems[i] = func_obj;
|
table_elems[i] = func_obj;
|
||||||
|
|||||||
@ -100,7 +100,12 @@ def ignore_the_case(
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
if gc_flag:
|
if gc_flag:
|
||||||
if case_name in ["array_init_elem", "array_init_data"]:
|
if case_name in [
|
||||||
|
"array_init_elem",
|
||||||
|
"array_init_data",
|
||||||
|
"array_new_data",
|
||||||
|
"array_new_elem"
|
||||||
|
]:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if sgx_flag:
|
if sgx_flag:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,53 +1,56 @@
|
|||||||
diff --git a/test/core/return_call.wast b/test/core/return_call.wast
|
diff --git a/test/core/return_call.wast b/test/core/return_call.wast
|
||||||
index ad66acca..b27af19b 100644
|
index 8a3d7512..5a4eba68 100644
|
||||||
--- a/test/core/return_call.wast
|
--- a/test/core/return_call.wast
|
||||||
+++ b/test/core/return_call.wast
|
+++ b/test/core/return_call.wast
|
||||||
@@ -102,20 +102,20 @@
|
@@ -103,22 +103,22 @@
|
||||||
|
|
||||||
(assert_return (invoke "count" (i64.const 0)) (i64.const 0))
|
(assert_return (invoke "count" (i64.const 0)) (i64.const 0))
|
||||||
(assert_return (invoke "count" (i64.const 1000)) (i64.const 0))
|
(assert_return (invoke "count" (i64.const 1000)) (i64.const 0))
|
||||||
|
(;Return to the original configuration after we have corrected the error in the AOT/JIT tail-call implementation.;)
|
||||||
-(assert_return (invoke "count" (i64.const 100_000)) (i64.const 0))
|
-(assert_return (invoke "count" (i64.const 100_000)) (i64.const 0))
|
||||||
+(assert_return (invoke "count" (i64.const 1001)) (i64.const 0))
|
+(assert_return (invoke "count" (i64.const 1_001)) (i64.const 0))
|
||||||
|
|
||||||
(assert_return (invoke "even" (i64.const 0)) (i32.const 44))
|
(assert_return (invoke "even" (i64.const 0)) (i32.const 44))
|
||||||
(assert_return (invoke "even" (i64.const 1)) (i32.const 99))
|
(assert_return (invoke "even" (i64.const 1)) (i32.const 99))
|
||||||
(assert_return (invoke "even" (i64.const 100)) (i32.const 44))
|
(assert_return (invoke "even" (i64.const 100)) (i32.const 44))
|
||||||
(assert_return (invoke "even" (i64.const 77)) (i32.const 99))
|
(assert_return (invoke "even" (i64.const 77)) (i32.const 99))
|
||||||
|
(;Return to the original configuration after we have corrected the error in the AOT/JIT tail-call implementation.;)
|
||||||
-(assert_return (invoke "even" (i64.const 100_000)) (i32.const 44))
|
-(assert_return (invoke "even" (i64.const 100_000)) (i32.const 44))
|
||||||
-(assert_return (invoke "even" (i64.const 100_001)) (i32.const 99))
|
-(assert_return (invoke "even" (i64.const 100_001)) (i32.const 99))
|
||||||
+(assert_return (invoke "even" (i64.const 1000)) (i32.const 44))
|
+(assert_return (invoke "even" (i64.const 1_000)) (i32.const 44))
|
||||||
+(assert_return (invoke "even" (i64.const 1001)) (i32.const 99))
|
+(assert_return (invoke "even" (i64.const 1_001)) (i32.const 99))
|
||||||
(assert_return (invoke "odd" (i64.const 0)) (i32.const 99))
|
(assert_return (invoke "odd" (i64.const 0)) (i32.const 99))
|
||||||
(assert_return (invoke "odd" (i64.const 1)) (i32.const 44))
|
(assert_return (invoke "odd" (i64.const 1)) (i32.const 44))
|
||||||
(assert_return (invoke "odd" (i64.const 200)) (i32.const 99))
|
(assert_return (invoke "odd" (i64.const 200)) (i32.const 99))
|
||||||
(assert_return (invoke "odd" (i64.const 77)) (i32.const 44))
|
(assert_return (invoke "odd" (i64.const 77)) (i32.const 44))
|
||||||
|
(;Return to the original configuration after we have corrected the error in the AOT/JIT tail-call implementation.;)
|
||||||
-(assert_return (invoke "odd" (i64.const 100_000)) (i32.const 99))
|
-(assert_return (invoke "odd" (i64.const 100_000)) (i32.const 99))
|
||||||
-(assert_return (invoke "odd" (i64.const 99_999)) (i32.const 44))
|
-(assert_return (invoke "odd" (i64.const 99_999)) (i32.const 44))
|
||||||
+(assert_return (invoke "odd" (i64.const 1000)) (i32.const 99))
|
+(assert_return (invoke "odd" (i64.const 1_000)) (i32.const 99))
|
||||||
+(assert_return (invoke "odd" (i64.const 999)) (i32.const 44))
|
+(assert_return (invoke "odd" (i64.const 999)) (i32.const 44))
|
||||||
|
|
||||||
|
|
||||||
;; Invalid typing
|
;; Invalid typing
|
||||||
diff --git a/test/core/return_call_indirect.wast b/test/core/return_call_indirect.wast
|
diff --git a/test/core/return_call_indirect.wast b/test/core/return_call_indirect.wast
|
||||||
index 6b95c24b..a9e86d42 100644
|
index 7f68b4a5..08a31417 100644
|
||||||
--- a/test/core/return_call_indirect.wast
|
--- a/test/core/return_call_indirect.wast
|
||||||
+++ b/test/core/return_call_indirect.wast
|
+++ b/test/core/return_call_indirect.wast
|
||||||
@@ -257,14 +257,14 @@
|
@@ -257,15 +257,15 @@
|
||||||
(assert_return (invoke "even" (i32.const 1)) (i32.const 99))
|
(assert_return (invoke "even" (i32.const 1)) (i32.const 99))
|
||||||
(assert_return (invoke "even" (i32.const 100)) (i32.const 44))
|
(assert_return (invoke "even" (i32.const 100)) (i32.const 44))
|
||||||
(assert_return (invoke "even" (i32.const 77)) (i32.const 99))
|
(assert_return (invoke "even" (i32.const 77)) (i32.const 99))
|
||||||
-(assert_return (invoke "even" (i32.const 100_000)) (i32.const 44))
|
-(assert_return (invoke "even" (i32.const 100_000)) (i32.const 44))
|
||||||
-(assert_return (invoke "even" (i32.const 111_111)) (i32.const 99))
|
-(assert_return (invoke "even" (i32.const 111_111)) (i32.const 99))
|
||||||
+(assert_return (invoke "even" (i32.const 1000)) (i32.const 44))
|
+(assert_return (invoke "even" (i32.const 1_000)) (i32.const 44))
|
||||||
+(assert_return (invoke "even" (i32.const 1111)) (i32.const 99))
|
+(assert_return (invoke "even" (i32.const 1_001)) (i32.const 99))
|
||||||
(assert_return (invoke "odd" (i32.const 0)) (i32.const 99))
|
(assert_return (invoke "odd" (i32.const 0)) (i32.const 99))
|
||||||
(assert_return (invoke "odd" (i32.const 1)) (i32.const 44))
|
(assert_return (invoke "odd" (i32.const 1)) (i32.const 44))
|
||||||
(assert_return (invoke "odd" (i32.const 200)) (i32.const 99))
|
(assert_return (invoke "odd" (i32.const 200)) (i32.const 99))
|
||||||
(assert_return (invoke "odd" (i32.const 77)) (i32.const 44))
|
(assert_return (invoke "odd" (i32.const 77)) (i32.const 44))
|
||||||
|
(;Return to the original configuration after we have corrected the error in the AOT/JIT tail-call implementation.;)
|
||||||
-(assert_return (invoke "odd" (i32.const 100_002)) (i32.const 99))
|
-(assert_return (invoke "odd" (i32.const 100_002)) (i32.const 99))
|
||||||
-(assert_return (invoke "odd" (i32.const 100_003)) (i32.const 44))
|
-(assert_return (invoke "odd" (i32.const 100_003)) (i32.const 44))
|
||||||
+(assert_return (invoke "odd" (i32.const 1002)) (i32.const 99))
|
+(assert_return (invoke "odd" (i32.const 1_002)) (i32.const 99))
|
||||||
+(assert_return (invoke "odd" (i32.const 1003)) (i32.const 44))
|
+(assert_return (invoke "odd" (i32.const 1_003)) (i32.const 44))
|
||||||
|
|
||||||
|
|
||||||
;; Invalid syntax
|
;; Invalid syntax
|
||||||
|
|||||||
@ -467,8 +467,8 @@ function spec_test()
|
|||||||
git clone -b main --single-branch https://github.com/WebAssembly/gc.git spec
|
git clone -b main --single-branch https://github.com/WebAssembly/gc.git spec
|
||||||
pushd spec
|
pushd spec
|
||||||
|
|
||||||
# Reset to commit: "[test] Unify the error message."
|
# Dec 9, 2024. Merge branch 'funcref'
|
||||||
git reset --hard 0caaadc65b5e1910512d8ae228502edcf9d60390
|
git reset --hard 756060f5816c7e2159f4817fbdee76cf52f9c923
|
||||||
git apply ../../spec-test-script/gc_ignore_cases.patch || exit 1
|
git apply ../../spec-test-script/gc_ignore_cases.patch || exit 1
|
||||||
|
|
||||||
if [[ ${ENABLE_QEMU} == 1 ]]; then
|
if [[ ${ENABLE_QEMU} == 1 ]]; then
|
||||||
@ -477,6 +477,13 @@ function spec_test()
|
|||||||
git apply ../../spec-test-script/gc_nuttx_tail_call.patch || exit 1
|
git apply ../../spec-test-script/gc_nuttx_tail_call.patch || exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# As of version 1.0.36, wabt is still unable to correctly handle the GC proposal.
|
||||||
|
#
|
||||||
|
# $ $ /opt/wabt-1.0.36/bin/wast2json --enable-all ../spec/test/core/br_if.wast
|
||||||
|
#
|
||||||
|
# ../spec/test/core/br_if.wast:670:26: error: unexpected token "null", expected a numeric index or a name (e.g. 12 or $foo).
|
||||||
|
# (func $f (param (ref null $t)) (result funcref) (local.get 0))
|
||||||
|
#
|
||||||
compile_reference_interpreter
|
compile_reference_interpreter
|
||||||
elif [[ ${ENABLE_MEMORY64} == 1 ]]; then
|
elif [[ ${ENABLE_MEMORY64} == 1 ]]; then
|
||||||
echo "checkout spec for memory64 proposal"
|
echo "checkout spec for memory64 proposal"
|
||||||
|
|||||||
Reference in New Issue
Block a user