@@ -1,11 +1,22 @@
{ Old file: tbs0193.pp }
{ overflow checking for 8 and 16 bit operations wrong }
+{$mode objfpc}
+
+uses sysutils;
+procedure doerror(l: longint);
+begin
+ writeln('error near ',l);
+ halt(1);
+end;
{$R-}
{$Q+}
var i: integer;
b: byte;
-
+ l: longint;
+ c: cardinal;
begin
i := 32767;
i := i + 15;
@@ -14,5 +25,96 @@ begin
b := 255;
b := b * 8;
- b := b * 17
+ b := b * 17;
+ l := high(longint);
+ try
+ l := l+1;
+ doerror(1);
+ except
+ on eintoverflow do
+ ;
+ else
+ doerror(2);
+ end;
+ l := low(longint);
+ l := l-1;
+ doerror(3);
+ doerror(4);
+ l := l*2;
+ doerror(5);
+ doerror(6);
+ l := high(longint) div 2;
+ l := l*3;
+ doerror(7);
+ doerror(8);
+ c := 0;
+ c := c-1;
+ doerror(9);
+ doerror(10);
+ c := high(cardinal);
+ c := c+1;
+ doerror(11);
+ doerror(12);
+ c := high(cardinal) div 2;
+ c := c*3;
+ doerror(13);
+ doerror(14);
+ c := c*high(cardinal);
+ doerror(15);
+ doerror(16);
End.