https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64883
--- Comment #7 from Iain Sandoe <iains at gcc dot gnu.org> --- (In reply to Jonathan Wakely from comment #5) > (In reply to Iain Sandoe from comment #4) > > hmm .. so cdefs.h does indeed use __attribute__((no return)) and > > __attribute__((deprecated)). > > > > (although both are still valid by GCC documentation) > > It's valid but the point is that "noreturn" is not a reserved name in any C > or POSIX standard, nor in any C++ standard before C++11, so users can > reasonably expect to be able to define a macro with that name and not get > problems. In order to support such valid usr code system headers should > avoid using that name, and should use the __noreturn__ form that is not a > valid macro name for users to define. > > The point of the new test is to ensure libstdc++ itself doesn't contain this > kind of bug ... but it fails because darwin has the bug, even though the > libstdc++ headers no longer have it. OK, thanks for clarifying. Perhaps, (a) given that the __attribute__((xyzzy)) etc. versions are in pretty wide use "in the wild". (b) Section 6.33 of the current GCC manual doesn't really mention the __xxxx__ versions and the examples throughout the section use undecorated versions (the only example with __xxxx__ seems to be __target__). This section specifically states the attributes may be identifiers or reserved words. ... we might implement some compatibility warning (again in the future) - or perhaps at least add a note to the manual. As far as Darwin's system headers, I guess someone needs to file a radar against the current edition (but that doesn't solve things for the systems already out there). > > What about a fixincludes? (not familiar with what level of stuff is feasible > > there). > > I think this could be solved with fixincludes, but that seems like something > for stage 1. For now I might just adjust the test to stop it failing. for my part, I'm happy with whatever solution you think is reasonable for stage4 - and we can re-visit this in stage #1.