* 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:
Jonas Maebe 2014-02-02 09:09:44 +00:00
parent e6b68d19c8
commit 4e9c54278e

View File

@ -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;