Add test about bus error generated in sparc compiler

This commit is contained in:
Pierre Muller 2023-07-16 02:16:56 -05:00
parent a6e0e1fe59
commit e1a216a4aa

View File

@ -0,0 +1,59 @@
{ This test was created to check
a code generation problem on sparc CPU
in which OS_32 LD/ST operations were
used on memory not aligned on a 4-byte
boundary, leading to BUS error at execution.
The test execution also checks that the value
parameter changes are not passed back
to the original variable in calling code. }
type
trec = record
w1 : word;
b1 : boolean;
b2 : byte;
end;
trec2 = record
b3 : boolean;
rec : trec;
end;
const
const_b2 = 45;
const_w1 = 23456;
count : integer = 0;
procedure check_trec(tr : trec);
begin
if not tr.b1 or (tr.b2<>const_b2) or (tr.w1<>const_w1) then
begin
writeln('Wrong value passed to check_trec');
halt(1);
end
else
begin
writeln(count,': check_rec ok');
end;
inc(tr.b2);
dec(tr.w1);
inc(count);
end;
var
tr : trec;
tr2 : trec2;
begin
tr.b1:=true;
tr.b2:=const_b2;
tr.w1:=const_w1;
check_trec(tr);
check_trec(tr);
tr2.b3:=true;
tr2.rec:=tr;
check_trec(tr2.rec);
check_trec(tr2.rec);
end.