mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-29 16:40:25 +02:00
* the function result of constructors always is self, always is valid and is
not stored in procdef.funcretsym -> fix check so that SSA is not performed on it in constructors when exit is used git-svn-id: trunk@26650 -
This commit is contained in:
parent
e6b68d19c8
commit
4e9c54278e
@ -1945,13 +1945,15 @@ implementation
|
||||
exit;
|
||||
end;
|
||||
|
||||
if not is_void(current_procinfo.procdef.returndef) and
|
||||
{ self is implicitly returned from constructors, even if there are no
|
||||
references to it; additionally, funcretsym is not set for constructor
|
||||
procdefs }
|
||||
if (current_procinfo.procdef.proctypeoption=potype_constructor) then
|
||||
rr.ressym:=tsym(current_procinfo.procdef.parast.Find('self'))
|
||||
else if not is_void(current_procinfo.procdef.returndef) and
|
||||
assigned(current_procinfo.procdef.funcretsym) and
|
||||
(tabstractvarsym(current_procinfo.procdef.funcretsym).refs <> 0) then
|
||||
if (current_procinfo.procdef.proctypeoption=potype_constructor) then
|
||||
rr.ressym:=tsym(current_procinfo.procdef.parast.Find('self'))
|
||||
else
|
||||
rr.ressym:=current_procinfo.procdef.funcretsym;
|
||||
rr.ressym:=current_procinfo.procdef.funcretsym;
|
||||
|
||||
if not foreachnodestatic(n,@doreplace,@rr) then
|
||||
exit;
|
||||
|
Loading…
Reference in New Issue
Block a user