Pārlūkot izejas kodu

* 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 -

Jonas Maebe 9 gadi atpakaļ
vecāks
revīzija
7a966345e5
1 mainītis faili ar 13 papildinājumiem un 10 dzēšanām
  1. 13 10
      compiler/symsym.pas

+ 13 - 10
compiler/symsym.pas

@@ -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
 ****************************************************************************}