Bus error with new gpc snapshot
Adriaan van Os
gpc at microbizz.nl
Thu Sep 20 10:38:17 CEST 2007
Russell Whitaker wrote:
>>> I suppose this is a back-end bug, reproducible on other platforms.
>>>
>>
>> I can not reproduce this on Amd64 Linux (tried verious option incuding
>> -fPIC). I will try i386 Linux, but it looks that the program uses
>> features
>> that Apple decided to implement in its own way.
>>
> On linux i686, compiles & runs ok.
Thanks for trying this out on other platforms. Looking into this further, the cause seems to be a
curious miscalculation of record sizes.
program prog;
type
pv1 = record
x, y: Extended;
v: array[1..2] of Boolean;
end;
pv2 = packed record
x, y: Extended;
v: array[1..2] of Boolean;
end;
pv3 = record
x, y: Extended;
end;
pv4 = packed record
x, y: Extended;
end;
pv5 = record
v: array[1..2] of Boolean;
end;
pv6 = packed record
v: array[1..2] of Boolean;
end;
procedure dcp;
var
sp: pv1;
z: Boolean;
procedure d(p: pv1);
begin
writeln('access z before');
if z then
writeln('z is true');
end;
begin { dcp }
z := True;
d(sp);
end;
begin
writeln( 'sizeof(pv1) = ', sizeof( pv1));
writeln( 'sizeof(pv2) = ', sizeof( pv2));
writeln( 'sizeof(pv3) = ', sizeof( pv3));
writeln( 'sizeof(pv4) = ', sizeof( pv4));
writeln( 'sizeof(pv5) = ', sizeof( pv5));
writeln( 'sizeof(pv6) = ', sizeof( pv6));
dcp;
end.
[p17:~/gpc/testgpc/adriaan] adriaan% gpc schorn2.pas -Os
[p17:~/gpc/testgpc/adriaan] adriaan% ./a.out
sizeof(pv1) = 48
sizeof(pv2) = 34
sizeof(pv3) = 32
sizeof(pv4) = 32
sizeof(pv5) = 2
sizeof(pv6) = 2
access z before
Bus error
Any hint where about to look in the back-end sources ?
Regards,
Adriaan van Os
More information about the Gpc
mailing list