mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-11 20:10:19 +02:00
222 lines
2.7 KiB
ObjectPascal
222 lines
2.7 KiB
ObjectPascal
{ Old file: tbs0193.pp }
|
|
{ overflow checking for 8 and 16 bit operations wrong }
|
|
|
|
{$mode objfpc}
|
|
|
|
uses sysutils;
|
|
|
|
var
|
|
has_errors: boolean;
|
|
|
|
procedure doerror(l: longint);
|
|
begin
|
|
writeln('error near ',l);
|
|
has_errors:=true;
|
|
end;
|
|
|
|
{$R-}
|
|
{$Q+}
|
|
var i: integer;
|
|
b: byte;
|
|
l: longint;
|
|
c: cardinal;
|
|
n: int64;
|
|
q: qword;
|
|
begin
|
|
has_errors:=false;
|
|
i := 32767;
|
|
i := i + 15;
|
|
b := 255;
|
|
b := b + 18;
|
|
b := 255;
|
|
b := b * 8;
|
|
b := 255;
|
|
b := b * 17;
|
|
|
|
{ 64 bit cpus do all calculations in 64 bit so longint and cardinal can't overflow }
|
|
{$ifndef CPU64}
|
|
l := high(longint);
|
|
try
|
|
l := l+1;
|
|
doerror(1);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(2);
|
|
end;
|
|
|
|
l := low(longint);
|
|
try
|
|
l := l-1;
|
|
doerror(3);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(4);
|
|
end;
|
|
|
|
l := low(longint);
|
|
try
|
|
l := l*2;
|
|
doerror(5);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(6);
|
|
end;
|
|
|
|
l := high(longint) div 2;
|
|
try
|
|
l := l*3;
|
|
doerror(7);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(8);
|
|
end;
|
|
|
|
c := high(cardinal);
|
|
try
|
|
c := c+1;
|
|
doerror(11);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(12);
|
|
end;
|
|
|
|
c := high(cardinal) div 2;
|
|
try
|
|
c := c*3;
|
|
doerror(13);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(14);
|
|
end;
|
|
|
|
c := high(cardinal);
|
|
try
|
|
c := c*high(cardinal);
|
|
doerror(15);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(16);
|
|
end;
|
|
|
|
{$endif CPU64}
|
|
|
|
{$ifdef fpc}
|
|
|
|
n := high(int64);
|
|
try
|
|
n := n+1;
|
|
doerror(17);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(18);
|
|
end;
|
|
|
|
n := low(int64);
|
|
try
|
|
n := n-1;
|
|
doerror(19);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(20);
|
|
end;
|
|
|
|
n := 0;
|
|
try
|
|
n := n-1;
|
|
except
|
|
on eintoverflow do
|
|
doerror(39);
|
|
end;
|
|
|
|
|
|
n := low(int64);
|
|
try
|
|
n := n*2;
|
|
doerror(21);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(22);
|
|
end;
|
|
|
|
n := high(int64) div 2;
|
|
try
|
|
n := n*3;
|
|
doerror(23);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(24);
|
|
end;
|
|
|
|
|
|
q := 0;
|
|
try
|
|
q := q-1;
|
|
doerror(25);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(26);
|
|
end;
|
|
|
|
|
|
q := qword(high(qword));
|
|
try
|
|
q := q+1;
|
|
doerror(27);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(28);
|
|
end;
|
|
|
|
q := qword(high(qword)) div qword(2);
|
|
try
|
|
q := q*qword(3);
|
|
doerror(29);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(30);
|
|
end;
|
|
|
|
q := high(qword);
|
|
try
|
|
q := q*high(qword);
|
|
doerror(31);
|
|
except
|
|
on eintoverflow do
|
|
;
|
|
else
|
|
doerror(32);
|
|
end;
|
|
|
|
{$endif fpc}
|
|
if has_errors then
|
|
halt(1);
|
|
End.
|