|
@@ -28,6 +28,20 @@ var
|
|
|
a,b,c : longint;
|
|
|
d,e,f : cardinal;
|
|
|
res,res2 : int64;
|
|
|
+ RTE201Buf : Jmp_Buf;
|
|
|
+ OldExit : pointer;
|
|
|
+
|
|
|
+procedure RTE201Exit;
|
|
|
+begin
|
|
|
+ ExitProc:=OldExit;
|
|
|
+ if ExitCode=201 then
|
|
|
+ begin
|
|
|
+ ErrorAddr:=0;
|
|
|
+ longjmp(RTE201Buf,1);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
begin
|
|
|
a:=2;
|
|
|
b:=-2;
|
|
@@ -35,104 +49,109 @@ begin
|
|
|
d:=1;
|
|
|
e:=$ffffffff;
|
|
|
f:=$fffffffe;
|
|
|
+ oldexit:=exitproc;
|
|
|
+ exitproc:=@RTE201Exit;
|
|
|
|
|
|
{$R+}
|
|
|
|
|
|
- res:=a+d;
|
|
|
- if res<>3 then
|
|
|
- fail(a,d,3,res,true);
|
|
|
-
|
|
|
- res:=a+e;
|
|
|
- res2:=e;
|
|
|
- res2:=res2+a;
|
|
|
- if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
|
|
|
- fail(a,e,res2,res,true);
|
|
|
-
|
|
|
- res:=a+f;
|
|
|
- res2:=f;
|
|
|
- res2:=res2+a;
|
|
|
- if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
|
|
|
- fail(a,f,res2,res,true);
|
|
|
-
|
|
|
- res:=b+d;
|
|
|
- if res<>-1 then
|
|
|
- fail(b,d,-1,res,true);
|
|
|
-
|
|
|
- res:=b+e;
|
|
|
- res2:=e;
|
|
|
- res2:=res2+b;
|
|
|
- if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
|
|
|
- fail(b,e,res2,res,true);
|
|
|
-
|
|
|
- res:=b+f;
|
|
|
- res2:=f;
|
|
|
- res2:=res2+b;
|
|
|
- if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
|
|
|
- fail(b,f,res2,res,true);
|
|
|
-
|
|
|
- res:=c+d;
|
|
|
- if res<>-4 then
|
|
|
- fail(c,d,-4,res,true);
|
|
|
-
|
|
|
- res:=c+e;
|
|
|
- res2:=e;
|
|
|
- res2:=res2+c;
|
|
|
- if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
|
|
|
- fail(c,e,res2,res,true);
|
|
|
-
|
|
|
- res:=c+f;
|
|
|
- res2:=f;
|
|
|
- res2:=res2+c;
|
|
|
- if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
|
|
|
- fail(c,f,res2,res,true);
|
|
|
-
|
|
|
- res:=d+a;
|
|
|
- if res<>3 then
|
|
|
- fail(d,a,3,res,true);
|
|
|
-
|
|
|
- res:=e+a;
|
|
|
- res2:=e;
|
|
|
- res2:=res2+a;
|
|
|
- if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
|
|
|
- fail(e,a,res2,res,true);
|
|
|
-
|
|
|
- res:=f+a;
|
|
|
- res2:=f;
|
|
|
- res2:=res2+a;
|
|
|
- if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
|
|
|
- fail(f,a,res2,res,true);
|
|
|
-
|
|
|
- res:=d+b;
|
|
|
- if res<>-1 then
|
|
|
- fail(d,b,-1,res,true);
|
|
|
-
|
|
|
- res:=e+b;
|
|
|
- res2:=e;
|
|
|
- res2:=res2+b;
|
|
|
- if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
|
|
|
- fail(e,b,res2,res,true);
|
|
|
-
|
|
|
- res:=f+b;
|
|
|
- res2:=f;
|
|
|
- res2:=res2+b;
|
|
|
- if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
|
|
|
- fail(f,b,res2,res,true);
|
|
|
-
|
|
|
- res:=d+c;
|
|
|
- if res<>-4 then
|
|
|
- fail(d,c,-4,res,true);
|
|
|
-
|
|
|
- res:=e+c;
|
|
|
- res2:=e;
|
|
|
- res2:=res2+c;
|
|
|
- if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
|
|
|
- fail(e,c,res2,res,true);
|
|
|
-
|
|
|
- res:=f+c;
|
|
|
- res2:=f;
|
|
|
- res2:=res2+c;
|
|
|
- if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
|
|
|
- fail(f,c,res2,res,true);
|
|
|
+ if setjmp(RTE201Buf)=0 then
|
|
|
+ begin
|
|
|
+ res:=a+d;
|
|
|
+ if res<>3 then
|
|
|
+ fail(a,d,3,res,true);
|
|
|
+
|
|
|
+ res:=a+e;
|
|
|
+ res2:=e;
|
|
|
+ res2:=res2+a;
|
|
|
+ if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
|
|
|
+ fail(a,e,res2,res,true);
|
|
|
+
|
|
|
+ res:=a+f;
|
|
|
+ res2:=f;
|
|
|
+ res2:=res2+a;
|
|
|
+ if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
|
|
|
+ fail(a,f,res2,res,true);
|
|
|
+
|
|
|
+ res:=b+d;
|
|
|
+ if res<>-1 then
|
|
|
+ fail(b,d,-1,res,true);
|
|
|
+
|
|
|
+ res:=b+e;
|
|
|
+ res2:=e;
|
|
|
+ res2:=res2+b;
|
|
|
+ if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
|
|
|
+ fail(b,e,res2,res,true);
|
|
|
+
|
|
|
+ res:=b+f;
|
|
|
+ res2:=f;
|
|
|
+ res2:=res2+b;
|
|
|
+ if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
|
|
|
+ fail(b,f,res2,res,true);
|
|
|
+
|
|
|
+ res:=c+d;
|
|
|
+ if res<>-4 then
|
|
|
+ fail(c,d,-4,res,true);
|
|
|
+
|
|
|
+ res:=c+e;
|
|
|
+ res2:=e;
|
|
|
+ res2:=res2+c;
|
|
|
+ if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
|
|
|
+ fail(c,e,res2,res,true);
|
|
|
+
|
|
|
+ res:=c+f;
|
|
|
+ res2:=f;
|
|
|
+ res2:=res2+c;
|
|
|
+ if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
|
|
|
+ fail(c,f,res2,res,true);
|
|
|
+
|
|
|
+ res:=d+a;
|
|
|
+ if res<>3 then
|
|
|
+ fail(d,a,3,res,true);
|
|
|
+
|
|
|
+ res:=e+a;
|
|
|
+ res2:=e;
|
|
|
+ res2:=res2+a;
|
|
|
+ if (res-2<>e) or ((res and $ffff) <>1) or (res<>res2) then
|
|
|
+ fail(e,a,res2,res,true);
|
|
|
+
|
|
|
+ res:=f+a;
|
|
|
+ res2:=f;
|
|
|
+ res2:=res2+a;
|
|
|
+ if (res-2<>f) or ((res and $ffff) <>0) or (res<>res2) then
|
|
|
+ fail(f,a,res2,res,true);
|
|
|
+
|
|
|
+ res:=d+b;
|
|
|
+ if res<>-1 then
|
|
|
+ fail(d,b,-1,res,true);
|
|
|
+
|
|
|
+ res:=e+b;
|
|
|
+ res2:=e;
|
|
|
+ res2:=res2+b;
|
|
|
+ if (res+2<>e) or ((res and $ffff) <>$fffd) or (res<>res2) then
|
|
|
+ fail(e,b,res2,res,true);
|
|
|
+
|
|
|
+ res:=f+b;
|
|
|
+ res2:=f;
|
|
|
+ res2:=res2+b;
|
|
|
+ if (res+2<>f) or ((res and $ffff) <>$fffc) or (res<>res2) then
|
|
|
+ fail(f,b,res2,res,true);
|
|
|
+
|
|
|
+ res:=d+c;
|
|
|
+ if res<>-4 then
|
|
|
+ fail(d,c,-4,res,true);
|
|
|
+
|
|
|
+ res:=e+c;
|
|
|
+ res2:=e;
|
|
|
+ res2:=res2+c;
|
|
|
+ if (res+5<>e) or ((res and $ffff) <>$fffa) or (res<>res2) then
|
|
|
+ fail(e,c,res2,res,true);
|
|
|
+
|
|
|
+ res:=f+c;
|
|
|
+ res2:=f;
|
|
|
+ res2:=res2+c;
|
|
|
+ if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
|
|
|
+ fail(f,c,res2,res,true);
|
|
|
+ end;
|
|
|
|
|
|
{$R-}
|
|
|
|
|
@@ -232,8 +251,13 @@ begin
|
|
|
if (res+5<>f) or ((res and $ffff) <>$fff9) or (res<>res2) then
|
|
|
fail(f,c,res2,res,false);
|
|
|
|
|
|
- if {$R-} a+e <> {$R+} a+e then
|
|
|
- has_severe_errors:=true;
|
|
|
+ exitproc:=@RTE201Exit;
|
|
|
+ if setjmp(RTE201Buf)=0 then
|
|
|
+ begin
|
|
|
+ if {$R-} a+e <> {$R+} a+e then
|
|
|
+ has_severe_errors:=true;
|
|
|
+ end;
|
|
|
+
|
|
|
if has_severe_errors then
|
|
|
halt(1);
|
|
|
|