[PATCH] D32199: [TBAASan] A TBAA Sanitizer (Clang)
Krzysztof Parzyszek via cfe-commits
cfe-commits at lists.llvm.org
Tue May 2 05:23:17 PDT 2017
On 5/1/2017 6:17 PM, Hal Finkel wrote:
> However, the example can also be written as:
>
> struct X { int a, b; };
> X x { 50, 100 };
> X *o = (X*) &x.b;
>
> int a_is_b = o->a; // This is UB (or so we say)?
>
> and then the pointer arithmetic considerations don't seem to apply.
I know what you mean. There is a statement somewhere that makes this
illegal, but it's really hard to find this kind of information in the
standards so I'm not sure I can find any definite proof in a finite time...
There is this paragraph that may give some clue (pointer to a struct
points to the first element):
6.7.2.1 Structure and union specifiers
13 Within a structure object, the non-bit-field members and the units in
which bit-fields reside have addresses that increase in the order in
which they are declared. A pointer to a structure object, suitably
converted, points to its initial member (or if that member is a
bit-field, then to the unit in which it resides), and vice versa. There
may be unnamed padding within a structure object, but not at its beginning.
There are also some other relevant sections:
6.2.7 Compatible type and composite type
2 All declarations that refer to the same object or function shall have
compatible type; otherwise, the behavior is undefined.
6.5 Expressions
7 An object shall have its stored value accessed only by an lvalue
expression that has one of the following types:73)
— a type compatible with the effective type of the object,
— a qualified version of a type compatible with the effective type of
the object,
— a type that is the signed or unsigned type corresponding to the
effective type of the object,
— a type that is the signed or unsigned type corresponding to a
qualified version of the effective type of the object,
— an aggregate or union type that includes one of the aforementioned
types among its members (including, recursively, a member of a
subaggregate or contained union), or
— a character type.
73) The intent of this list is to specify those circumstances in which
an object may or may not be aliased.
-Krzysztof
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the cfe-commits
mailing list