compiler: calculate offset of record fields in taddrnode also for bitpacked structures (Jonas comment in bug #0019357)

git-svn-id: trunk@23437 -
This commit is contained in:
paul 2013-01-18 01:56:55 +00:00
parent 1b8369dd99
commit fe338013a5
2 changed files with 12 additions and 3 deletions

View File

@ -587,9 +587,18 @@ implementation
begin
offset:=tabsolutevarsym(tloadnode(hp).symtableentry).addroffset;
hp:=left;
while assigned(hp) and (hp.nodetype=subscriptn) do
while assigned(hp)and(hp.nodetype=subscriptn) do
begin
inc(offset,tsubscriptnode(hp).vs.fieldoffset);
hsym:=tsubscriptnode(hp).vs;
if tabstractrecordsymtable(hsym.owner).is_packed then
begin
{ can't calculate the address of a non-byte aligned field }
if (hsym.fieldoffset mod 8)<>0 then
exit;
inc(offset,hsym.fieldoffset div 8)
end
else
inc(offset,hsym.fieldoffset);
hp:=tunarynode(hp).left;
end;
if nf_typedaddr in flags then

View File

@ -1,6 +1,6 @@
program tw19357;
type
TLvl0 = packed record
TLvl0 = bitpacked record
a,b: longword;
end;