mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 14:24:24 +02:00
135 lines
2.5 KiB
ObjectPascal
135 lines
2.5 KiB
ObjectPascal
{$mode objfpc}
|
|
uses sysutils;
|
|
|
|
{$r+}
|
|
|
|
var
|
|
a1: array[-5..6] of byte;
|
|
a2: array[-12..-1] of byte;
|
|
a3: array[0..6] of byte;
|
|
a4: array[1..12] of byte;
|
|
|
|
c: cardinal;
|
|
l: longint;
|
|
b: byte;
|
|
finalerror: boolean;
|
|
|
|
function check_longint(l: longint; res1, res2, res3, res4: boolean): boolean;
|
|
var
|
|
caught,
|
|
error: boolean;
|
|
begin
|
|
result := false;
|
|
|
|
caught := false;
|
|
try
|
|
b := a1[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res1;
|
|
if error then writeln('long 1 failed for ',l);
|
|
result := result or error;
|
|
|
|
caught := false;
|
|
try
|
|
b := a2[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res2;
|
|
if error then writeln('long 2 failed for ',l);
|
|
result := result or error;
|
|
|
|
caught := false;
|
|
try
|
|
b := a3[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res3;
|
|
if error then writeln('long 3 failed for ',l);
|
|
result := result or error;
|
|
|
|
caught := false;
|
|
try
|
|
b := a4[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res4;
|
|
if error then writeln('long 4 failed for ',l);
|
|
result := result or error;
|
|
writeln;
|
|
end;
|
|
|
|
function check_cardinal(l: cardinal; res1, res2, res3, res4: boolean): boolean;
|
|
var
|
|
caught,
|
|
error: boolean;
|
|
begin
|
|
result := false;
|
|
|
|
caught := false;
|
|
try
|
|
b := a1[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res1;
|
|
if error then writeln('card 1 failed for ',l);
|
|
result := result or error;
|
|
|
|
caught := false;
|
|
try
|
|
b := a2[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res2;
|
|
if error then writeln('card 2 failed for ',l);
|
|
result := result or error;
|
|
|
|
caught := false;
|
|
try
|
|
b := a3[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res3;
|
|
if error then writeln('card 3 failed for ',l);
|
|
result := result or error;
|
|
|
|
caught := false;
|
|
try
|
|
b := a4[l];
|
|
except
|
|
caught := true;
|
|
end;
|
|
error := caught <> res4;
|
|
if error then writeln('card 4 failed for ',l);
|
|
result := result or error;
|
|
writeln;
|
|
end;
|
|
|
|
|
|
begin
|
|
finalerror :=
|
|
check_longint(-1,false,false,true,true);
|
|
finalerror :=
|
|
check_longint(-6,true,false,true,true) or finalerror;
|
|
finalerror :=
|
|
check_longint(0,false,true,false,true) or finalerror;
|
|
finalerror :=
|
|
check_cardinal(0,false,true,false,true);
|
|
finalerror :=
|
|
check_cardinal(cardinal($ffffffff),true,true,true,true) or finalerror;
|
|
finalerror :=
|
|
check_cardinal(5,false,true,false,false) or finalerror;
|
|
if finalerror then
|
|
begin
|
|
writeln('Still errors in range checking for array indexes');
|
|
halt(1);
|
|
end;
|
|
end.
|