The reproduction is below. Not sure if this is intended or a bug, sorry to clutter up the mailing list if it's intended! union __attribute__((may_alias)) works {}; // :3:18: note: attribute for 'union broken2' must follow the 'union' keyword union broken1 {} [[may_alias]]; // Okay, so let's move it so it follows union... // :7:21: warning: 'may_alias' attribute directive ignored [-Wattributes] // 7 | union [[may_alias]] broken2 {}; // | ^~~~~~~ union [[may_alias]] broken2 {};