https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87363

--- Comment #2 from joseph at codesourcery dot com <joseph at codesourcery dot 
com> ---
On Wed, 19 Sep 2018, msebor at gcc dot gnu.org wrote:

> Other than that, since
> 
>   When a value is stored in a member of an object of union type, the bytes of
> the object representation that do not correspond to that member but do
> correspond to other members take unspecified values.
> 
> the value of u.z is unspecified after the initialization of the union u in the
> test case.

No, that's only about those bytes that are outside the member that was 
stored (so if you have a union between int and double, and store in the 
int, the parts of the double after the initial sizeof (int) bytes become 
undefined, for example).  Type-punning between union members (when you 
explicitly access using the union type), up to the lesser of the sizes of 
the two members in question, has been defined since C99 TC3 (in a 
footnote, so not normative, but the intent is clear).

Reply via email to