https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65892
--- Comment #53 from James Kuyper Jr. <jameskuyper at alumni dot caltech.edu> --- (In reply to Davin McCall from comment #52) > (In reply to James Kuyper Jr. from comment #48) > > > The "one special guarantee" clause appears in the section describing union > > > member access via the "." or "->" operators, implying that it only applies > > > to the access of union members via the union. ... > > > > I find nothing objectionable about that statement - it is indeed impossible > > to create code which relies upon the special guarantee in 6.5.2.3p6 without > > accessing the union members via the '.' or '->' operators. However, I > > believe that you mean something more restricted than what you're actually > > saying, because the code given in the original bug report does in fact > > access the union members via '.' operator, in the expressions &u.s1 and > > &u.s2, to create a situation where, as I understand it, that special > > guarantee is fully applicable. > > Could you expand on your description of what you think is required, to make > > it clear why it doesn't apply in this case? > > It isn't clear that "&u.s1" for example actually accesses either "u" or its > member "s1", and I would argue that it doesn't for either. I agree: that expression does not access u or s1. However, because those pointers are passed to f(), which does dereference them, f() does accesses those members, and it does so via the use of the '.' operator in the calling routine. Therefore, you need, at a minimum, to modify "accesses via" to "accesses directly via", in order to convey your intended meaning. I don't see anything in the standard's wording of 6.5.2.3p6 to justify restricting what it says to direct accesses - it says "it is permitted to inspect", without specifying restrictions on how the inspection may be performed. The words "anywhere that a declaration of the completed type of the union is visible." would become pointless with your interpretation. You already need a visible complete declaration of the union to directly access it's members without violating a constraint. Those words are only needed if the guarantee was intended to apply even when the access is not direct.