|
@@ -70,7 +70,8 @@ interface
|
|
|
|
|
|
taddrnodeflag = (
|
|
taddrnodeflag = (
|
|
{ generated by the Ofs() internal function }
|
|
{ generated by the Ofs() internal function }
|
|
- anf_ofs
|
|
|
|
|
|
+ anf_ofs,
|
|
|
|
+ anf_typedaddr
|
|
);
|
|
);
|
|
taddrnodeflags = set of taddrnodeflag;
|
|
taddrnodeflags = set of taddrnodeflag;
|
|
|
|
|
|
@@ -682,7 +683,7 @@ implementation
|
|
inc(offset,hsym.fieldoffset);
|
|
inc(offset,hsym.fieldoffset);
|
|
hp:=tunarynode(hp).left;
|
|
hp:=tunarynode(hp).left;
|
|
end;
|
|
end;
|
|
- if nf_typedaddr in flags then
|
|
|
|
|
|
+ if anf_typedaddr in addrnodeflags then
|
|
res:=cpointerconstnode.create(offset,cpointerdef.getreusable(left.resultdef))
|
|
res:=cpointerconstnode.create(offset,cpointerdef.getreusable(left.resultdef))
|
|
else
|
|
else
|
|
res:=cpointerconstnode.create(offset,voidpointertype);
|
|
res:=cpointerconstnode.create(offset,voidpointertype);
|
|
@@ -691,7 +692,7 @@ implementation
|
|
else if (nf_internal in flags) or
|
|
else if (nf_internal in flags) or
|
|
valid_for_addr(left,true) then
|
|
valid_for_addr(left,true) then
|
|
begin
|
|
begin
|
|
- if not(nf_typedaddr in flags) then
|
|
|
|
|
|
+ if not(anf_typedaddr in addrnodeflags) then
|
|
resultdef:=voidpointertype
|
|
resultdef:=voidpointertype
|
|
else
|
|
else
|
|
resultdef:=cpointerdef.getreusable(left.resultdef);
|
|
resultdef:=cpointerdef.getreusable(left.resultdef);
|
|
@@ -1341,7 +1342,8 @@ implementation
|
|
function is_big_untyped_addrnode(p: tnode): boolean;
|
|
function is_big_untyped_addrnode(p: tnode): boolean;
|
|
begin
|
|
begin
|
|
is_big_untyped_addrnode:=(p.nodetype=addrn) and
|
|
is_big_untyped_addrnode:=(p.nodetype=addrn) and
|
|
- not (nf_typedaddr in p.flags) and (taddrnode(p).left.resultdef.size > 1);
|
|
|
|
|
|
+ not (anf_typedaddr in taddrnode(p).addrnodeflags) and
|
|
|
|
+ (taddrnode(p).left.resultdef.size > 1);
|
|
end;
|
|
end;
|
|
|
|
|
|
end.
|
|
end.
|