* moved the default procedure CurrRaiseLabel to the end of the procedure, not

at the exit label. This fixes problems when using units with finalization
  code that contain classes with class destructors in branchful WebAssembly
  exceptions mode.
This commit is contained in:
Nikolay Nikolov 2021-10-22 10:32:47 +03:00
parent 470e77a572
commit 6fe647ee3d
2 changed files with 6 additions and 2 deletions

View File

@ -353,8 +353,6 @@ implementation
list.concat(taicpu.op_none(a_end_block));
thlcgwasm(hlcg).decblock;
inherited generate_exit_label(list);
if ts_wasm_bf_exceptions in current_settings.targetswitches then
hlcg.a_label(list,CurrRaiseLabel);
end;
procedure tcpuprocinfo.postprocess_code;

View File

@ -2191,10 +2191,16 @@ implementation
inherited;
list.concat(taicpu.op_none(a_block));
incblock;
list.concat(taicpu.op_none(a_block));
incblock;
end;
procedure thlcgwasm.gen_exit_code(list: TAsmList);
begin
list.concat(taicpu.op_none(a_end_block));
thlcgwasm(hlcg).decblock;
if ts_wasm_bf_exceptions in current_settings.targetswitches then
a_label(list,tcpuprocinfo(current_procinfo).CurrRaiseLabel);
if fevalstackheight<>0 then
{$ifdef DEBUG_WASMSTACK}
list.concat(tai_comment.Create(strpnew('!!! values remaining on stack at end of block !!!')));