Browse Source

* handle sarX(<const>,<var>) properly. resolves #15653

git-svn-id: trunk@14866 -
florian 15 years ago
parent
commit
f8bf268406
2 changed files with 50 additions and 1 deletions
  1. 1 1
      compiler/ninl.pas
  2. 49 0
      tests/test/cg/tsar1.pp

+ 1 - 1
compiler/ninl.pas

@@ -1437,7 +1437,7 @@ implementation
                       vl2:=tordconstnode(tcallparanode(tcallparanode(left).right).left).value;
                       vl2:=tordconstnode(tcallparanode(tcallparanode(left).right).left).value;
                     end
                     end
                   else
                   else
-                    internalerror(2010013101);
+                    exit;
                 end
                 end
               else
               else
                 begin
                 begin

+ 49 - 0
tests/test/cg/tsar1.pp

@@ -3,6 +3,10 @@ program tsar1;
 {$o-}
 {$o-}
 var
 var
   c0,c4,c7,c15,c31,c63,c36,c20,c68,c12 : integer;
   c0,c4,c7,c15,c31,c63,c36,c20,c68,c12 : integer;
+  c3f : shortint;
+  c3fff : smallint;
+  c3fffffff : longint;
+  c3fffffffffffffff : int64;
 
 
 begin
 begin
  c0:=0;
  c0:=0;
@@ -15,6 +19,11 @@ begin
  c20:=20;
  c20:=20;
  c68:=68;
  c68:=68;
  c12:=12;
  c12:=12;
+ c3f:=$3f;
+ c3fff:=$3fff;
+ c3fffffff:=$3fffffff;
+ c3fffffffffffffff:=$3fffffffffffffff;
+
  writeln('Testing constant SarInt64...');
  writeln('Testing constant SarInt64...');
  if SarInt64(-$3FFFFFFFFFFFFFFF,4)<>-$400000000000000 then begin
  if SarInt64(-$3FFFFFFFFFFFFFFF,4)<>-$400000000000000 then begin
   writeln('Fail!');
   writeln('Fail!');
@@ -291,6 +300,16 @@ begin
  end else begin
  end else begin
   writeln('Pass!');
   writeln('Pass!');
  end;
  end;
+ if SarInt64(-c3FFFFFFFFFFFFFFF,63)<>-1 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
+ if SarInt64(c3FFFFFFFFFFFFFFF,63)<>0 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
  if SarInt64(-$3FFFFFFFFFFFFFFF)<>-$2000000000000000 then begin
  if SarInt64(-$3FFFFFFFFFFFFFFF)<>-$2000000000000000 then begin
   halt(1);
   halt(1);
  end else begin
  end else begin
@@ -344,6 +363,16 @@ begin
  end else begin
  end else begin
   writeln('Pass!');
   writeln('Pass!');
  end;
  end;
+ if SarLongint(-c3FFFFFFF,31)<>-1 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
+ if SarLongint(c3FFFFFFF,31)<>0 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
  if SarLongint(-$3FFFFFFF)<>-$20000000 then begin
  if SarLongint(-$3FFFFFFF)<>-$20000000 then begin
   halt(1);
   halt(1);
  end else begin
  end else begin
@@ -397,6 +426,16 @@ begin
  end else begin
  end else begin
   writeln('Pass!');
   writeln('Pass!');
  end;
  end;
+ if SarSmallint(-c3FFF,15)<>-1 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
+ if SarSmallint(c3FFF,15)<>0 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
  if SarSmallint(-$3FFF)<>-$2000 then begin
  if SarSmallint(-$3FFF)<>-$2000 then begin
   halt(1);
   halt(1);
  end else begin
  end else begin
@@ -445,6 +484,16 @@ begin
  end else begin
  end else begin
   writeln('Pass!');
   writeln('Pass!');
  end;
  end;
+ if SarShortint(c3F,7)<>0 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
+ if SarShortint(-c3F,7)<>-1 then begin
+  halt(1);
+ end else begin
+  writeln('Pass!');
+ end;
  if SarShortint($3F,c7)<>0 then begin
  if SarShortint($3F,c7)<>0 then begin
   halt(1);
   halt(1);
  end else begin
  end else begin