fpc/tests/test/cg/tvec64cmp.pp
Pierre Muller 49ddf159b2 Fix internalerror generated with riscv32 compiler.
Fix
  Compiling ./fcl-passrc/src/pscanner.pp
  pscanner.pp(2512,40) Fatal: Internal error 2006010801
  error generated for riscv32-linux target after commit #c83e6c34
  by correcting expectloc for riscv32 for 64-bit comparisons.
  Add a small test.
2022-10-25 18:42:14 +02:00

69 lines
1.3 KiB
ObjectPascal

{ Small test to check correct handling of
comparison of 64-bit values as boolean
index of a vector, which lead
to internal error for riscv32 cpu
after commit #c83e6c34 }
const
error_count : longint = 0;
procedure error(v : integer);
begin
writeln('Error ',v);
inc(error_count);
end;
const
test_counter : longint = 0;
procedure check(b1,b2 : boolean);
begin
inc(test_counter);
if (b1<>b2) then
error(test_counter);
end;
const
Res : array[boolean] of boolean = (False,True);
var
A,B : Int64;
UA,UB : Qword;
begin
A:=1;
B:=-1;
check(Res[A<B],false);
check(Res[A>B],true);
check(Res[A<=B],false);
check(Res[A>=B],true);
check(Res[A=B],false);
check(Res[A<>B],true);
A:=$123456789;
B:=-$ABCDEF12345;
check(Res[A<B],false);
check(Res[A>B],true);
check(Res[A<=B],false);
check(Res[A>=B],true);
check(Res[A=B],false);
check(Res[A<>B],true);
UA:=qword(1 shl 63) + qword(1 shl 36) + qword(1 shl 9);
UB:=1;
check(Res[UA<UB],false);
check(Res[UA>UB],true);
check(Res[UA<=UB],false);
check(Res[UA>=UB],true);
check(Res[UA=UB],false);
check(Res[UA<>UB],true);
if (error_count>0) then
begin
writeln('The test generated ',error_count,' failures');
halt(1);
end
else
writeln('Test completed without error');
end.