@@ -1387,18 +1387,23 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
13871387 /* push exception_tag_index and
13881388 * exception values for rethrow */
13891389 PUSH_I32 (exception_tag_index );
1390- word_copy (frame_sp ,
1391- frame_sp_old
1392- - cell_num_to_copy ,
1393- cell_num_to_copy );
1394- frame_sp += cell_num_to_copy ;
1395- /* push exception values for catch
1396- */
1397- word_copy (frame_sp ,
1398- frame_sp_old
1399- - cell_num_to_copy ,
1400- cell_num_to_copy );
1401- frame_sp += cell_num_to_copy ;
1390+ if (cell_num_to_copy > 0 ) {
1391+ word_copy (
1392+ frame_sp ,
1393+ frame_sp_old
1394+ - cell_num_to_copy ,
1395+ cell_num_to_copy );
1396+ frame_sp += cell_num_to_copy ;
1397+ /* push exception values for
1398+ * catch
1399+ */
1400+ word_copy (
1401+ frame_sp ,
1402+ frame_sp_old
1403+ - cell_num_to_copy ,
1404+ cell_num_to_copy );
1405+ frame_sp += cell_num_to_copy ;
1406+ }
14021407
14031408 /* advance to handler */
14041409 HANDLE_OP_END ();
@@ -1427,11 +1432,13 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
14271432 frame_csp -= lookup_depth ;
14281433
14291434 /* push exception values for catch */
1430- word_copy (frame_sp ,
1431- frame_sp_old
1432- - cell_num_to_copy ,
1433- cell_num_to_copy );
1434- frame_sp += cell_num_to_copy ;
1435+ if (cell_num_to_copy > 0 ) {
1436+ word_copy (frame_sp ,
1437+ frame_sp_old
1438+ - cell_num_to_copy ,
1439+ cell_num_to_copy );
1440+ frame_sp += cell_num_to_copy ;
1441+ }
14351442
14361443 /* tag_index is already stored in
14371444 * exception_tag_index */
@@ -1452,11 +1459,13 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
14521459 /* push exception_tag_index and
14531460 * exception values for rethrow */
14541461 PUSH_I32 (exception_tag_index );
1455- word_copy (frame_sp ,
1456- frame_sp_old
1457- - cell_num_to_copy ,
1458- cell_num_to_copy );
1459- frame_sp += cell_num_to_copy ;
1462+ if (cell_num_to_copy > 0 ) {
1463+ word_copy (frame_sp ,
1464+ frame_sp_old
1465+ - cell_num_to_copy ,
1466+ cell_num_to_copy );
1467+ frame_sp += cell_num_to_copy ;
1468+ }
14601469 /* catch_all has no exception values */
14611470
14621471 /* advance to handler */
@@ -1483,10 +1492,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
14831492 * The values are copied to the CALLER FRAME
14841493 * (prev_frame->sp) same behvior ad WASM_OP_RETURN
14851494 */
1486- word_copy (prev_frame -> sp ,
1487- frame_sp_old - cell_num_to_copy ,
1488- cell_num_to_copy );
1489- prev_frame -> sp += cell_num_to_copy ;
1495+ if (cell_num_to_copy > 0 ) {
1496+ word_copy (prev_frame -> sp ,
1497+ frame_sp_old - cell_num_to_copy ,
1498+ cell_num_to_copy );
1499+ prev_frame -> sp += cell_num_to_copy ;
1500+ }
14901501 * ((int32 * )(prev_frame -> sp )) = exception_tag_index ;
14911502 prev_frame -> sp ++ ;
14921503
0 commit comments