>
>
>>
>>
> So you believe that you can index into an object randomly by pointer
> arithmetic and pull out a different field?
>
> For starters, this is  illegal because you don't know where the padding
> bytes are.
> You cannot assume that X.a + 1 == X.b
> "Implementation alignment requirements might cause two adjacent members
> not to be allocated immediately after each other;"
>
> See 9.2.14
>

IE at best you'd have to add

 &(struct X*(0))->b - &(struct X*(0))->a


I don't believe this is legal either.

Let me try to dredge up the long discussions we had about these cases on
the gcc mailing lists.
The conclusion was, i believe:

"if you want to go marching through an object as a char *, that's fine, if
you expect to be able to get at fields by playing pointer arithmetic games,
from other fields, that is not)
I feel like every couple years, a different compiler has the same aliasing
discussions :)
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to