mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2024-11-26 15:32:05 +00:00
Fix issues detected by Coverity (#1776)
- wasm_func_call always return trap if failed - in Debug, always run LEAK_TEST in samples/wasm-c-api
This commit is contained in:
parent
1652f22a77
commit
fc8f70cfa4
|
@ -2112,6 +2112,7 @@ wasm_module_imports(const wasm_module_t *module, own wasm_importtype_vec_t *out)
|
||||||
memset(&module_name, 0, sizeof(wasm_val_vec_t));
|
memset(&module_name, 0, sizeof(wasm_val_vec_t));
|
||||||
memset(&name, 0, sizeof(wasm_val_vec_t));
|
memset(&name, 0, sizeof(wasm_val_vec_t));
|
||||||
extern_type = NULL;
|
extern_type = NULL;
|
||||||
|
import_type = NULL;
|
||||||
|
|
||||||
if (i < import_func_count) {
|
if (i < import_func_count) {
|
||||||
wasm_functype_t *type = NULL;
|
wasm_functype_t *type = NULL;
|
||||||
|
|
|
@ -199,11 +199,16 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
|
||||||
if(VALGRIND)
|
if(VALGRIND)
|
||||||
foreach(EX ${EXAMPLES})
|
foreach(EX ${EXAMPLES})
|
||||||
add_custom_target(${EX}_LEAK_TEST
|
add_custom_command(
|
||||||
COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes ./${EX}
|
OUTPUT ${EX}_leak_check.report
|
||||||
DEPENDS ${EX} ${EX}_WASM
|
DEPENDS ${EX} ${EX}_WASM
|
||||||
VERBATIM
|
COMMAND ${VALGRIND} --tool=memcheck --leak-check=summary -- ./${EX} > ${EX}_leak_check.report 2>&1
|
||||||
COMMENT "run a leak check on ${EX}"
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
)
|
||||||
|
add_custom_target(${EX}_LEAK_TEST ALL
|
||||||
|
DEPENDS ${EX}_leak_check.report
|
||||||
|
COMMAND grep "All heap blocks were freed -- no leaks are possible" ${EX}_leak_check.report
|
||||||
|
COMMENT "Please read ${EX}_leak_check.report when meeting Error"
|
||||||
)
|
)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif (VALGRIND)
|
endif (VALGRIND)
|
||||||
|
|
|
@ -169,8 +169,10 @@ int main(int argc, const char* argv[]) {
|
||||||
wasm_val_t rs[1] = { WASM_INIT_VAL };
|
wasm_val_t rs[1] = { WASM_INIT_VAL };
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(as);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(as);
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
||||||
if (wasm_func_call(run_func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(run_func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -231,10 +231,13 @@ vm_function_set_byte(const wasm_vm_t *vm, uint32_t offset, uint8_t byte)
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(a_v);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(a_v);
|
||||||
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
||||||
wasm_trap_t *trap = wasm_func_call(vm->function_list[0], &args, &results);
|
wasm_trap_t *trap = wasm_func_call(vm->function_list[0], &args, &results);
|
||||||
if (trap)
|
if (trap) {
|
||||||
printf("call wasm_set_byte failed");
|
printf("call wasm_set_byte failed");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return trap != NULL;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -247,6 +250,7 @@ vm_function_get_byte(const wasm_vm_t *vm, uint32_t offset, uint8_t *byte)
|
||||||
wasm_trap_t *trap = wasm_func_call(vm->function_list[1], &args, &results);
|
wasm_trap_t *trap = wasm_func_call(vm->function_list[1], &args, &results);
|
||||||
if (trap) {
|
if (trap) {
|
||||||
printf("call wasm_get_byte failed");
|
printf("call wasm_get_byte failed");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,8 +97,14 @@ int main(int argc, const char* argv[]) {
|
||||||
wasm_val_t results[1] = { WASM_INIT_VAL };
|
wasm_val_t results[1] = { WASM_INIT_VAL };
|
||||||
wasm_val_vec_t results_vec = WASM_ARRAY_VEC(results);
|
wasm_val_vec_t results_vec = WASM_ARRAY_VEC(results);
|
||||||
|
|
||||||
if (wasm_func_call(add_func, &args_vec, &results_vec)
|
wasm_trap_t *trap = wasm_func_call(add_func, &args_vec, &results_vec);
|
||||||
|| results_vec.data[0].of.i32 != 7) {
|
if (trap) {
|
||||||
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (results_vec.data[0].of.i32 != 7) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,16 +37,23 @@ wasm_func_t* get_export_func(const wasm_extern_vec_t* exports, size_t i) {
|
||||||
check(val, type, expected); \
|
check(val, type, expected); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define check_trap(trap) \
|
||||||
|
if (trap) { \
|
||||||
|
printf("> Error calling function\n"); \
|
||||||
|
wasm_trap_delete(trap); \
|
||||||
|
exit(1); \
|
||||||
|
}
|
||||||
|
|
||||||
#define check_call(func, type, expected) \
|
#define check_call(func, type, expected) \
|
||||||
{ \
|
{ \
|
||||||
wasm_val_t vs[1]; \
|
wasm_val_t vs[1]; \
|
||||||
wasm_val_vec_t args = WASM_EMPTY_VEC; \
|
wasm_val_vec_t args = WASM_EMPTY_VEC; \
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(vs); \
|
wasm_val_vec_t results = WASM_ARRAY_VEC(vs); \
|
||||||
wasm_func_call(func, &args, &results); \
|
wasm_trap_t *trap = wasm_func_call(func, &args, &results); \
|
||||||
|
check_trap(trap); \
|
||||||
check(vs[0], type, expected); \
|
check(vs[0], type, expected); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, const char* argv[]) {
|
int main(int argc, const char* argv[]) {
|
||||||
// Initialize.
|
// Initialize.
|
||||||
printf("Initializing...\n");
|
printf("Initializing...\n");
|
||||||
|
@ -225,16 +232,23 @@ int main(int argc, const char* argv[]) {
|
||||||
wasm_val_vec_t res = WASM_EMPTY_VEC;
|
wasm_val_vec_t res = WASM_EMPTY_VEC;
|
||||||
wasm_val_t vs73[] = { WASM_F32_VAL(73) };
|
wasm_val_t vs73[] = { WASM_F32_VAL(73) };
|
||||||
wasm_val_vec_t args73 = WASM_ARRAY_VEC(vs73);
|
wasm_val_vec_t args73 = WASM_ARRAY_VEC(vs73);
|
||||||
wasm_func_call(set_var_f32_import, &args73, &res);
|
wasm_trap_t *trap = wasm_func_call(set_var_f32_import, &args73, &res);
|
||||||
|
check_trap(trap);
|
||||||
|
|
||||||
wasm_val_t vs74[] = { WASM_I64_VAL(74) };
|
wasm_val_t vs74[] = { WASM_I64_VAL(74) };
|
||||||
wasm_val_vec_t args74 = WASM_ARRAY_VEC(vs74);
|
wasm_val_vec_t args74 = WASM_ARRAY_VEC(vs74);
|
||||||
wasm_func_call(set_var_i64_import, &args74, &res);
|
trap = wasm_func_call(set_var_i64_import, &args74, &res);
|
||||||
|
check_trap(trap);
|
||||||
|
|
||||||
wasm_val_t vs77[] = { WASM_F32_VAL(77) };
|
wasm_val_t vs77[] = { WASM_F32_VAL(77) };
|
||||||
wasm_val_vec_t args77 = WASM_ARRAY_VEC(vs77);
|
wasm_val_vec_t args77 = WASM_ARRAY_VEC(vs77);
|
||||||
wasm_func_call(set_var_f32_export, &args77, &res);
|
trap = wasm_func_call(set_var_f32_export, &args77, &res);
|
||||||
|
check_trap(trap);
|
||||||
|
|
||||||
wasm_val_t vs78[] = { WASM_I64_VAL(78) };
|
wasm_val_t vs78[] = { WASM_I64_VAL(78) };
|
||||||
wasm_val_vec_t args78 = WASM_ARRAY_VEC(vs78);
|
wasm_val_vec_t args78 = WASM_ARRAY_VEC(vs78);
|
||||||
wasm_func_call(set_var_i64_export, &args78, &res);
|
trap = wasm_func_call(set_var_i64_export, &args78, &res);
|
||||||
|
check_trap(trap);
|
||||||
|
|
||||||
check_global(var_f32_import, f32, 73);
|
check_global(var_f32_import, f32, 73);
|
||||||
check_global(var_i64_import, i64, 74);
|
check_global(var_i64_import, i64, 74);
|
||||||
|
|
|
@ -50,11 +50,19 @@ wasm_func_t* get_export_func(const wasm_extern_vec_t* exports, size_t i) {
|
||||||
check(val, type, expected); \
|
check(val, type, expected); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define check_trap(trap) \
|
||||||
|
if (trap) { \
|
||||||
|
printf("> Error calling function\n"); \
|
||||||
|
wasm_trap_delete(trap); \
|
||||||
|
exit(1); \
|
||||||
|
}
|
||||||
|
|
||||||
#define check_call(func, type, expected) \
|
#define check_call(func, type, expected) \
|
||||||
{ \
|
{ \
|
||||||
wasm_val_vec_t results; \
|
wasm_val_vec_t results; \
|
||||||
wasm_val_vec_new_uninitialized(&results, 1); \
|
wasm_val_vec_new_uninitialized(&results, 1); \
|
||||||
wasm_func_call(func, NULL, &results); \
|
wasm_trap_t *trap = wasm_func_call(func, NULL, &results); \
|
||||||
|
check_trap(trap); \
|
||||||
check(results.data[0], type, expected); \
|
check(results.data[0], type, expected); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +157,9 @@ int main(int argc, const char* argv[]) {
|
||||||
printf("Modify the variable to 77.0...\n");
|
printf("Modify the variable to 77.0...\n");
|
||||||
wasm_val_vec_t args77;
|
wasm_val_vec_t args77;
|
||||||
wasm_val_vec_new(&args77, 1, (wasm_val_t []){ {.kind = WASM_F32, .of = {.f32 = 77.0}} });
|
wasm_val_vec_new(&args77, 1, (wasm_val_t []){ {.kind = WASM_F32, .of = {.f32 = 77.0}} });
|
||||||
wasm_func_call(set_var_f32_export, &args77, NULL); //Call to module export
|
wasm_trap_t *trap = wasm_func_call(set_var_f32_export, &args77,
|
||||||
|
NULL); // Call to module export
|
||||||
|
check_trap(trap);
|
||||||
check_call(get_var_f32_export, f32, 77.0); //Call to module export
|
check_call(get_var_f32_export, f32, 77.0); //Call to module export
|
||||||
check_global(var_f32_export, f32, 77.0); //Failed here, still 37
|
check_global(var_f32_export, f32, 77.0); //Failed here, still 37
|
||||||
check_call(get_var_f32_import, f32, 77.0); //Call to module import Failed here, still 37
|
check_call(get_var_f32_import, f32, 77.0); //Call to module import Failed here, still 37
|
||||||
|
@ -158,7 +168,8 @@ int main(int argc, const char* argv[]) {
|
||||||
printf("Modify the variable to 78.0...\n");
|
printf("Modify the variable to 78.0...\n");
|
||||||
wasm_val_vec_t args78;
|
wasm_val_vec_t args78;
|
||||||
wasm_val_vec_new(&args78, 1, (wasm_val_t []){ {.kind = WASM_F32, .of = {.f32 = 78.0}} });
|
wasm_val_vec_new(&args78, 1, (wasm_val_t []){ {.kind = WASM_F32, .of = {.f32 = 78.0}} });
|
||||||
wasm_func_call(set_var_f32_import, &args78, NULL);
|
trap = wasm_func_call(set_var_f32_import, &args78, NULL);
|
||||||
|
check_trap(trap);
|
||||||
check_global(var_f32_export, f32, 78.0);
|
check_global(var_f32_export, f32, 78.0);
|
||||||
check_call(get_var_f32_export, f32, 78.0); //Call to module export Failed here, still 77
|
check_call(get_var_f32_export, f32, 78.0); //Call to module export Failed here, still 77
|
||||||
check_call(get_var_f32_import, f32, 78.0); //Call to module import
|
check_call(get_var_f32_import, f32, 78.0); //Call to module import
|
||||||
|
|
|
@ -118,8 +118,10 @@ int main(int argc, const char* argv[]) {
|
||||||
printf("Calling export...\n");
|
printf("Calling export...\n");
|
||||||
wasm_val_vec_t args = WASM_EMPTY_VEC;
|
wasm_val_vec_t args = WASM_EMPTY_VEC;
|
||||||
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
||||||
if (wasm_func_call(run_func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(run_func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,10 @@ own wasm_ref_t* call_v_r(const wasm_func_t* func) {
|
||||||
wasm_val_t rs[] = { WASM_INIT_VAL };
|
wasm_val_t rs[] = { WASM_INIT_VAL };
|
||||||
wasm_val_vec_t args = WASM_EMPTY_VEC;
|
wasm_val_vec_t args = WASM_EMPTY_VEC;
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
||||||
if (wasm_func_call(func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("okay\n");
|
printf("okay\n");
|
||||||
|
@ -63,8 +65,10 @@ void call_r_v(const wasm_func_t* func, wasm_ref_t* ref) {
|
||||||
wasm_val_t vs[1] = { WASM_REF_VAL(ref) };
|
wasm_val_t vs[1] = { WASM_REF_VAL(ref) };
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
||||||
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
||||||
if (wasm_func_call(func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("okay\n");
|
printf("okay\n");
|
||||||
|
@ -76,8 +80,10 @@ own wasm_ref_t* call_r_r(const wasm_func_t* func, wasm_ref_t* ref) {
|
||||||
wasm_val_t rs[1] = { WASM_INIT_VAL };
|
wasm_val_t rs[1] = { WASM_INIT_VAL };
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
||||||
if (wasm_func_call(func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("okay\n");
|
printf("okay\n");
|
||||||
|
@ -89,8 +95,10 @@ void call_ir_v(const wasm_func_t* func, int32_t i, wasm_ref_t* ref) {
|
||||||
wasm_val_t vs[2] = { WASM_I32_VAL(i), WASM_REF_VAL(ref) };
|
wasm_val_t vs[2] = { WASM_I32_VAL(i), WASM_REF_VAL(ref) };
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
||||||
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
||||||
if (wasm_func_call(func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("okay\n");
|
printf("okay\n");
|
||||||
|
@ -102,8 +110,10 @@ own wasm_ref_t* call_i_r(const wasm_func_t* func, int32_t i) {
|
||||||
wasm_val_t rs[1] = { WASM_INIT_VAL };
|
wasm_val_t rs[1] = { WASM_INIT_VAL };
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
wasm_val_vec_t results = WASM_ARRAY_VEC(rs);
|
||||||
if (wasm_func_call(func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("okay\n");
|
printf("okay\n");
|
||||||
|
|
|
@ -36,7 +36,14 @@ void check_call(wasm_func_t* func, int i, wasm_val_t args[], int32_t expected) {
|
||||||
wasm_val_t r[] = {WASM_INIT_VAL};
|
wasm_val_t r[] = {WASM_INIT_VAL};
|
||||||
wasm_val_vec_t args_ = {i, args, i, sizeof(wasm_val_t), NULL};
|
wasm_val_vec_t args_ = {i, args, i, sizeof(wasm_val_t), NULL};
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(r);
|
wasm_val_vec_t results = WASM_ARRAY_VEC(r);
|
||||||
if (wasm_func_call(func, &args_, &results) || r[0].of.i32 != expected) {
|
wasm_trap_t *trap = wasm_func_call(func, &args_, &results);
|
||||||
|
if (trap) {
|
||||||
|
printf("> Error on result\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r[0].of.i32 != expected) {
|
||||||
printf("> Error on result\n");
|
printf("> Error on result\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -59,8 +66,10 @@ void check_call2(wasm_func_t* func, int32_t arg1, int32_t arg2, int32_t expected
|
||||||
void check_ok(wasm_func_t* func, int i, wasm_val_t args[]) {
|
void check_ok(wasm_func_t* func, int i, wasm_val_t args[]) {
|
||||||
wasm_val_vec_t args_ = {i, args, i, sizeof(wasm_val_t), NULL};
|
wasm_val_vec_t args_ = {i, args, i, sizeof(wasm_val_t), NULL};
|
||||||
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
wasm_val_vec_t results = WASM_EMPTY_VEC;
|
||||||
if (wasm_func_call(func, &args_, &results)) {
|
wasm_trap_t *trap = wasm_func_call(func, &args_, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error on result, expected empty\n");
|
printf("> Error on result, expected empty\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,8 +133,10 @@ int main(int argc, const char* argv[]) {
|
||||||
};
|
};
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(vals);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(vals);
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(res);
|
wasm_val_vec_t results = WASM_ARRAY_VEC(res);
|
||||||
if (wasm_func_call(run_func, &args, &results)) {
|
wasm_trap_t *trap = wasm_func_call(run_func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,8 +111,10 @@ main(int argc, const char *argv[])
|
||||||
// Call.
|
// Call.
|
||||||
printf("Calling export...\n");
|
printf("Calling export...\n");
|
||||||
wasm_val_vec_t empty = WASM_EMPTY_VEC;
|
wasm_val_vec_t empty = WASM_EMPTY_VEC;
|
||||||
if (wasm_func_call(run_func, &empty, &empty)) {
|
wasm_trap_t *trap = wasm_func_call(run_func, &empty, &empty);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,14 @@ void check_call(wasm_func_t* func, int32_t arg1, int32_t arg2, int32_t expected)
|
||||||
wasm_val_t r[1] = { WASM_INIT_VAL };
|
wasm_val_t r[1] = { WASM_INIT_VAL };
|
||||||
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
wasm_val_vec_t args = WASM_ARRAY_VEC(vs);
|
||||||
wasm_val_vec_t results = WASM_ARRAY_VEC(r);
|
wasm_val_vec_t results = WASM_ARRAY_VEC(r);
|
||||||
if (wasm_func_call(func, &args, &results) || r[0].of.i32 != expected) {
|
wasm_trap_t *trap = wasm_func_call(func, &args, &results);
|
||||||
|
if (trap) {
|
||||||
|
printf("> Error on calling\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r[0].of.i32 != expected) {
|
||||||
printf("> Error on result\n");
|
printf("> Error on result\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,8 +85,10 @@ run(void *args_abs)
|
||||||
|
|
||||||
// Call.
|
// Call.
|
||||||
wasm_val_vec_t empty = WASM_EMPTY_VEC;
|
wasm_val_vec_t empty = WASM_EMPTY_VEC;
|
||||||
if (wasm_func_call(run_func, &empty, &empty)) {
|
wasm_trap_t *trap = wasm_func_call(run_func, &empty, &empty);
|
||||||
|
if (trap) {
|
||||||
printf("> Error calling function!\n");
|
printf("> Error calling function!\n");
|
||||||
|
wasm_trap_delete(trap);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user