mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-23 01:49:26 +02:00
* don't recalculate the regable info when dereferencing a symbol's vardef:
o avoid having to save and restore the original info o avoids problems in case determining the regable state depends on variables that may not have been initialised yet at that point (such as voidpointertype/voidcodepointertype in case the size of procvardefs needs to be calculated by the regable-determining code) git-svn-id: trunk@33179 -
This commit is contained in:
parent
2483ad5939
commit
7a966345e5
@ -192,9 +192,10 @@ interface
|
||||
vardefderef : tderef;
|
||||
|
||||
procedure setregable;
|
||||
procedure setvardef(def:tdef);
|
||||
procedure setvardef(const def: tdef);
|
||||
procedure setvardef_and_regable(def:tdef);
|
||||
public
|
||||
property vardef: tdef read _vardef write setvardef;
|
||||
property vardef: tdef read _vardef write setvardef_and_regable;
|
||||
end;
|
||||
|
||||
tfieldvarsym = class(tabstractvarsym)
|
||||
@ -1616,16 +1617,12 @@ implementation
|
||||
|
||||
|
||||
procedure tabstractvarsym.deref;
|
||||
var
|
||||
oldvarregable: tvarregable;
|
||||
begin
|
||||
{ setting the vardef also updates varregable. We just loaded this }
|
||||
{ assigning vardef also updates varregable. We just loaded this }
|
||||
{ value from a ppu, so it must not be changed (e.g. tw7817a.pp/ }
|
||||
{ tw7817b.pp: the address is taken of a local variable in an }
|
||||
{ inlined procedure -> must remain non-regable when inlining) }
|
||||
oldvarregable:=varregable;
|
||||
vardef:=tdef(vardefderef.resolve);
|
||||
varregable:=oldvarregable;
|
||||
setvardef(tdef(vardefderef.resolve));
|
||||
end;
|
||||
|
||||
|
||||
@ -1691,9 +1688,9 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tabstractvarsym.setvardef(def:tdef);
|
||||
procedure tabstractvarsym.setvardef_and_regable(def:tdef);
|
||||
begin
|
||||
_vardef := def;
|
||||
setvardef(def);
|
||||
setregable;
|
||||
end;
|
||||
|
||||
@ -1736,6 +1733,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tabstractvarsym.setvardef(const def: tdef);
|
||||
begin
|
||||
_vardef := def;
|
||||
end;
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
TFIELDVARSYM
|
||||
****************************************************************************}
|
||||
|
Loading…
Reference in New Issue
Block a user