|
@@ -2472,6 +2472,9 @@ implementation
|
|
addstatement(tempinfo^.createstatement,tempnode);
|
|
addstatement(tempinfo^.createstatement,tempnode);
|
|
addstatement(tempinfo^.deletestatement,ctempdeletenode.create(tempnode));
|
|
addstatement(tempinfo^.deletestatement,ctempdeletenode.create(tempnode));
|
|
end;
|
|
end;
|
|
|
|
+ { inherit addr_taken flag }
|
|
|
|
+ if (tabstractvarsym(p).addr_taken) then
|
|
|
|
+ include(tempnode.tempinfo^.flags,ti_addr_taken);
|
|
inlinelocals[indexnr] := ctemprefnode.create(tempnode);
|
|
inlinelocals[indexnr] := ctemprefnode.create(tempnode);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
@@ -2629,6 +2632,9 @@ implementation
|
|
|
|
|
|
tempnode := ctempcreatenode.create(para.parasym.vardef,para.parasym.vardef.size,tt_persistent,tparavarsym(para.parasym).is_regvar(false));
|
|
tempnode := ctempcreatenode.create(para.parasym.vardef,para.parasym.vardef.size,tt_persistent,tparavarsym(para.parasym).is_regvar(false));
|
|
addstatement(createstatement,tempnode);
|
|
addstatement(createstatement,tempnode);
|
|
|
|
+ { inherit addr_taken flag }
|
|
|
|
+ if (tabstractvarsym(para.parasym).addr_taken) then
|
|
|
|
+ include(tempnode.tempinfo^.flags,ti_addr_taken);
|
|
{ assign the value of the parameter to the temp, except in case of the function result }
|
|
{ assign the value of the parameter to the temp, except in case of the function result }
|
|
{ (in that case, para.left is a block containing the creation of a new temp, while we }
|
|
{ (in that case, para.left is a block containing the creation of a new temp, while we }
|
|
{ only need a temprefnode, so delete the old stuff) }
|
|
{ only need a temprefnode, so delete the old stuff) }
|
|
@@ -2657,6 +2663,9 @@ implementation
|
|
begin
|
|
begin
|
|
tempnode := ctempcreatenode.create(voidpointertype,voidpointertype.size,tt_persistent,tparavarsym(para.parasym).is_regvar(true));
|
|
tempnode := ctempcreatenode.create(voidpointertype,voidpointertype.size,tt_persistent,tparavarsym(para.parasym).is_regvar(true));
|
|
addstatement(createstatement,tempnode);
|
|
addstatement(createstatement,tempnode);
|
|
|
|
+ { inherit addr_taken flag }
|
|
|
|
+ if (tabstractvarsym(para.parasym).addr_taken) then
|
|
|
|
+ include(tempnode.tempinfo^.flags,ti_addr_taken);
|
|
addstatement(createstatement,cassignmentnode.create(ctemprefnode.create(tempnode),
|
|
addstatement(createstatement,cassignmentnode.create(ctemprefnode.create(tempnode),
|
|
caddrnode.create_internal(para.left)));
|
|
caddrnode.create_internal(para.left)));
|
|
para.left := ctypeconvnode.create_internal(cderefnode.create(ctemprefnode.create(tempnode)),para.left.resultdef);
|
|
para.left := ctypeconvnode.create_internal(cderefnode.create(ctemprefnode.create(tempnode)),para.left.resultdef);
|