https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64175
Bug ID: 64175 Summary: #pragma GCC diagnostic pop doesn't re-disable -Wnested-externs Product: gcc Version: 4.9.2 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: plokinom at gmail dot com $ cat foo.c #pragma GCC diagnostic warning "-Wnested-externs" #pragma GCC diagnostic pop static void bar(void) { extern int main(void); } int main(void) { return 0; } $ gcc foo.c foo.c: In function ‘bar’: foo.c:3:1: warning: nested extern declaration of ‘main’ [-Wnested-externs] static void bar(void) { extern int main(void); } ^ I think this is a bug because according to the documentation "If a 'pop' has no matching 'push', the command-line options are restored" and there is no -Wnested-externs on the command line, so gcc shouldn't warn.