mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 08:49:33 +02:00
* Do not create SEH finalization procedures in generic methods, their similarity with nested procedures causes compilation errors because actual nested procedures are not allowed for generics. Not creating them doesn't hurt because generic node tree is not used for code generation. Resolves #23724.
git-svn-id: trunk@23519 -
This commit is contained in:
parent
d8902af3d6
commit
cb1098c26c
@ -186,7 +186,14 @@ function copy_parasize(var n: tnode; arg: pointer): foreachnoderesult;
|
||||
constructor tx64tryfinallynode.create(l, r: TNode);
|
||||
begin
|
||||
inherited create(l,r);
|
||||
if (target_info.system<>system_x86_64_win64) then
|
||||
if (target_info.system<>system_x86_64_win64) or (
|
||||
{ Don't create child procedures for generic methods, their nested-like
|
||||
behavior causes compilation errors because real nested procedures
|
||||
aren't allowed for generics. Not creating them doesn't harm because
|
||||
generic node tree is discarded without generating code. }
|
||||
assigned(current_procinfo.procdef.struct) and
|
||||
(df_generic in current_procinfo.procdef.struct.defoptions)
|
||||
) then
|
||||
exit;
|
||||
finalizepi:=tcgprocinfo(cprocinfo.create(current_procinfo));
|
||||
finalizepi.force_nested;
|
||||
@ -205,6 +212,11 @@ constructor tx64tryfinallynode.create_implicit(l, r, _t1: TNode);
|
||||
inherited create_implicit(l, r, _t1);
|
||||
if (target_info.system<>system_x86_64_win64) then
|
||||
exit;
|
||||
|
||||
if assigned(current_procinfo.procdef.struct) and
|
||||
(df_generic in current_procinfo.procdef.struct.defoptions) then
|
||||
InternalError(2013012501);
|
||||
|
||||
finalizepi:=tcgprocinfo(cprocinfo.create(current_procinfo));
|
||||
finalizepi.force_nested;
|
||||
finalizepi.procdef:=create_pd;
|
||||
|
Loading…
Reference in New Issue
Block a user