https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87363
--- Comment #4 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- I think the *member* of the union here (the one that is active after the initialization) is the anonymous struct containing x and y. That would surely be the case if you named the two struct members (does that make any difference to how GCC behaves on this testcase?), and I believe anonymous structs and unions purely provide a convenient syntax for accessing nested members, without changing other semantics from what they would be if there were names given to the members at every level and fully-qualified names were used for all member accesses.