fpc/tests/webtbs/tw9174.pp
Jonas Maebe b99c1e9fed * fixed calculation of offset of constant indexing of bitpacked arrays of
non-ordinal types (mantis #9174)

git-svn-id: trunk@7847 -
2007-06-29 15:34:11 +00:00

57 lines
1.4 KiB
ObjectPascal

{$mode macpas}
program packed_offset_bug;
type
SInt16 = integer;
Point = record
case SInt16 of
0: (
v: SInt16;
h: SInt16;
);
1: (
vh: array [0..1] of SInt16;
);
end;
PointPtr = ^Point;
Rect = record
case SInt16 of
0: (
top: SInt16;
left: SInt16;
bottom: SInt16;
right: SInt16;
);
1: (
topLeft: Point;
botRight: Point;
);
end;
RectPtr = ^Rect;
var
gMeasStrs: packed array[1..64] of string[4];
gMeasStrRects: array[1..64] of Rect;
var
i,j,k: longint;
begin
writeln( 'SizeOf gMeasStrs) = ', SizeOf( gMeasStrs));
writeln( 'SizeOf gMeasStrRects) = ', SizeOf( gMeasStrRects));
writeln( 'Offset gMeasStrs[ 1 ] = ', ptruint( @gMeasStrs[ 1]) -ptruint( @gMeasStrs));
writeln( 'Offset gMeasStrs[ 64, 4] = ', ptruint( @gMeasStrs[ 64, 4]) - ptruint( @gMeasStrs));
writeln( 'Offset gMeasStrRects = ', ptruint( @gMeasStrRects) - ptruint( @gMeasStrs));
i:=1;
j:=64;
k:=4;
if (SizeOf( gMeasStrs) <> 320) or
(SizeOf( gMeasStrRects) <> 512) or
(ptruint( @gMeasStrs[ 1]) - ptruint( @gMeasStrs) <> 0) or
(ptruint( @gMeasStrs[ 64, 4])- ptruint( @gMeasStrs)<>319) or
(ptruint( @gMeasStrs[ i]) - ptruint( @gMeasStrs) <> 0) or
(ptruint( @gMeasStrs[ j, k])- ptruint( @gMeasStrs)<>319) then
halt(1);
end.