Browse Source

* the offset parameter of reference_reset* must be asizeint rather than
longint (mantis #38636)

git-svn-id: trunk@49065 -

Jonas Maebe 4 years ago
parent
commit
308aee42a0
3 changed files with 25 additions and 4 deletions
  1. 1 0
      .gitattributes
  2. 4 4
      compiler/cgutils.pas
  3. 20 0
      tests/webtbs/tw38636.pp

+ 1 - 0
.gitattributes

@@ -18759,6 +18759,7 @@ tests/webtbs/tw38549b.pp svneol=native#text/plain
 tests/webtbs/tw38549c.pp svneol=native#text/plain
 tests/webtbs/tw38549d.pp svneol=native#text/plain
 tests/webtbs/tw3863.pp svneol=native#text/plain
+tests/webtbs/tw38636.pp svneol=native#text/plain
 tests/webtbs/tw3864.pp svneol=native#text/plain
 tests/webtbs/tw38642.pp svneol=native#text/pascal
 tests/webtbs/tw3865.pp svneol=native#text/plain

+ 4 - 4
compiler/cgutils.pas

@@ -192,8 +192,8 @@ unit cgutils;
     {# Clear to zero a treference, and set is base address
        to base register.
     }
-    procedure reference_reset_base(var ref : treference;base : tregister;offset : longint; temppos : treftemppos; alignment : longint; volatility: tvolatilityset);
-    procedure reference_reset_symbol(var ref : treference;sym : tasmsymbol;offset, alignment : longint; volatility: tvolatilityset);
+    procedure reference_reset_base(var ref: treference; base: tregister; offset: asizeint; temppos: treftemppos; alignment: longint; volatility: tvolatilityset);
+    procedure reference_reset_symbol(var ref: treference;sym: tasmsymbol; offset: asizeint; alignment : longint; volatility: tvolatilityset);
     { This routine verifies if two references are the same, and
        if so, returns TRUE, otherwise returns false.
     }
@@ -244,7 +244,7 @@ uses
       end;
 
 
-    procedure reference_reset_base(var ref: treference; base: tregister; offset : longint; temppos : treftemppos ; alignment : longint; volatility: tvolatilityset);
+    procedure reference_reset_base(var ref: treference; base: tregister; offset: asizeint; temppos: treftemppos ; alignment: longint; volatility: tvolatilityset);
       begin
         reference_reset(ref,alignment,volatility);
         ref.base:=base;
@@ -253,7 +253,7 @@ uses
       end;
 
 
-    procedure reference_reset_symbol(var ref: treference; sym: tasmsymbol; offset, alignment: longint; volatility: tvolatilityset);
+    procedure reference_reset_symbol(var ref: treference; sym: tasmsymbol; offset: asizeint; alignment: longint; volatility: tvolatilityset);
       begin
         reference_reset(ref,alignment,volatility);
         ref.symbol:=sym;

+ 20 - 0
tests/webtbs/tw38636.pp

@@ -0,0 +1,20 @@
+program Project1;
+
+{$ifdef cpu64}
+const
+    lowlimit = 536879040;
+
+procedure test(i : integer);
+const
+  myarray : array[lowlimit..lowlimit+2] of integer = (1,2,3);
+begin
+  if @myarray[i]<>@myarray then
+    halt(1);
+end;
+
+begin
+  test(lowlimit);
+{$else}
+begin
+{$endif}
+end.