https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49928
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Johannes Schaub from comment #0) > It appears that to inhibit a warning about using an undefined macro > identifier, one has to employ the following work-around > > #define FOO BAR > #if FOO // warns about 'BAR' > > Instead: > > #define FOO defined BAR && BAR > #if FOO I don't think a new GCC-specific builtin just to avoid an optional warning is a good idea. It seems to me that a better workaround that doesn't involve undefined behaviour, and is much simpler to understand, would be to simply ensure that BAR is always defined: #define BAR 0 #define FOO BAR If WebKit wants to be able to compile cleanly with -Wundef then they should ensure all macros are defined, not create nasty hacks using undefined behaviour. So e.g. // define everything to 0 initially #define WTF_PLATFORM_CHROMIUM 0 #define WTF_PLATFORM_QT 0 #define WTF_PLATFORM_MAC 0 #if defined(BUILDING_CHROMIUM__) # undef WTF_PLATFORM_CHROMIUM # define WTF_PLATFORM_CHROMIUM 1 #elif ... Alternatively, it would be nice to use: #pragma GCC diagnostic ignored "-Wundef" to suppress the warnings in code bases that are (by design) not compatible with -Wundef ... unfortunately that doesn't work (PR 53431).