https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108796
--- Comment #6 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- The logic is that GNU attributes are declaration specifiers (and can mix anywhere with other declaration specifiers), but standard attributes aren't declaration specifiers; rather, they come in specified positions relative to declaration specifiers (the semantics before and after the declaration specifiers are different), and in the middle isn't such a position.