[PATCH] D32199: [TBAASan] A TBAA Sanitizer (Clang)

Daniel Berlin via cfe-commits cfe-commits at lists.llvm.org
Mon May 1 12:31:00 PDT 2017


>
>
>>
>>
> 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 :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170501/37a7fd3e/attachment.html>


More information about the cfe-commits mailing list