https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60304
--- Comment #18 from Jonathan Wakely <redi at gcc dot gnu.org> --- I assume that testcase is meant to be C++ (because it isn't valid C) but it's not valid C++ either: 17.6.4.3.1 [macro.names] "A translation unit that includes a header shall not contain any macros that define names declared or defined in that header. Nor shall such a translation unit define macros for names lexically identical to keywords."