This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Incorrect bitfield aliasing with Tree SSA
> > struct foo {int x; float y; } bar;
> > int *pi;
> > float *pf;
> >
> > and mark X as "nonaddressable", I know that an assigment to *pi can't
> > affect bar.x.
>
> But if you add
>
> struct foo *foop = &bar.
>
> foop->x = 5.
>
> It can, even though we *claim* X is nonaddressable.
I don't follow. It's still the case that
*pi = 10;
cannot change bar.x. Making a pointer to the entire structure doesn't
change that.
> If you told me this is what you meant by "nonaddressable", i'd
> probably call you crazy.
>
> It is most certainly addressable, because you can form the address of it.
I'd certainly have no problem replacing that name with a better one.
The Ada terminology is "aliased", but that seemed too obscure. The name
doesn't refer to the machine-level concept of "address", but to the C
operator "&", which is normally called "address of". DECL_NONADDRESSABLE_P
means you can't apply the C operator "&" to that field.