mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 05:19:17 +02:00
Add test about bus error generated in sparc compiler
This commit is contained in:
parent
a6e0e1fe59
commit
e1a216a4aa
59
tests/test/cg/tbuserror.pp
Normal file
59
tests/test/cg/tbuserror.pp
Normal 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.
|
Loading…
Reference in New Issue
Block a user