|
|
@@ -6487,6 +6487,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|
|
WASMFuncType *func_type = cur_wasm_func->func_type;
|
|
|
uint32 max_stack_cell_num = cur_wasm_func->max_stack_cell_num;
|
|
|
uint32 cell_num_of_local_stack;
|
|
|
+#if WASM_ENABLE_REF_TYPES != 0 && WASM_ENABLE_GC == 0
|
|
|
+ uint32 local_cell_idx;
|
|
|
+#endif
|
|
|
|
|
|
#if WASM_ENABLE_EXCE_HANDLING != 0
|
|
|
/* account for exception handlers, bundle them here */
|
|
|
@@ -6546,6 +6549,19 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
|
|
memset(frame_lp + cur_func->param_cell_num, 0,
|
|
|
(uint32)(cur_func->local_cell_num * 4));
|
|
|
|
|
|
+#if WASM_ENABLE_REF_TYPES != 0 && WASM_ENABLE_GC == 0
|
|
|
+ /* externref/funcref should be NULL_REF rather than 0 */
|
|
|
+ local_cell_idx = cur_func->param_cell_num;
|
|
|
+ for (i = 0; i < cur_wasm_func->local_count; i++) {
|
|
|
+ if (cur_wasm_func->local_types[i] == VALUE_TYPE_EXTERNREF
|
|
|
+ || cur_wasm_func->local_types[i] == VALUE_TYPE_FUNCREF) {
|
|
|
+ *(frame_lp + local_cell_idx) = NULL_REF;
|
|
|
+ }
|
|
|
+ local_cell_idx +=
|
|
|
+ wasm_value_type_cell_num(cur_wasm_func->local_types[i]);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
/* Push function block as first block */
|
|
|
cell_num = func_type->ret_cell_num;
|
|
|
PUSH_CSP(LABEL_TYPE_FUNCTION, 0, cell_num, frame_ip_end - 1);
|