* only make a copy of the finally code in pass_1 instead of in pass_typecheck,

to avoid an internalerror in case the finally code contains a goto outside
    the finally code (tbf/tb0209.pp)

git-svn-id: branches/debug_eh@41209 -
This commit is contained in:
Jonas Maebe 2019-02-03 21:09:51 +00:00
parent d93c05a90c
commit 7aa6a2ec81

View File

@ -60,7 +60,7 @@ interface
end;
tllvmtryfinallynode = class(tcgtryfinallynode)
function pass_typecheck: tnode; override;
function pass_1: tnode; override;
end;
tllvmraisenode = class(tcgraisenode)
@ -104,7 +104,7 @@ implementation
tllvmtryfinallynode
*****************************************************************************}
function tllvmtryfinallynode.pass_typecheck: tnode;
function tllvmtryfinallynode.pass_1: tnode;
begin
{ make a copy of the "finally" code for the "no exception happened"
case }
@ -267,8 +267,8 @@ implementation
else
begin
{ Need a begin_catch so that the reraise will know what exception to throw.
Don't need to add a "catch all" to the landing pad, as it contains one
we want to rethrow whatever exception was caught rather than guarantee
Don't need to add a "catch all" to the landing pad, as it contains one.
We want to rethrow whatever exception was caught rather than guarantee
that all possible kinds of exceptions get caught. }
catch_all_start_internal(list,false);
hlcg.g_call_system_proc(list,'fpc_reraise',[],nil).resetiftemp;