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

git-svn-id: trunk@14866 -
This commit is contained in:
florian 2010-02-04 21:30:25 +00:00
parent 7d7a3d20ed
commit f8bf268406
2 changed files with 50 additions and 1 deletions

View File

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

View File

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