https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82051
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #1) > I don't know if this is defined or not. Basically 0x549E5CE9L is really > 0xCE9 which is stored in the bit-field. The rest of the bits might be still > undefined or zero. I don't remember what the C standard says here. They are undefined. The question is what the standard says about the initializer, what union member gets initialized / activated. One may read 6.7.9/20 as to always the first member being initialized / activated. In this case this PR is INVALID. I suppose you want = { .f1 = 0x549E5CE9L };