See http://gcc.gnu.org/ml/gcc-bugs/2008-10/msg01511.html
/* { dg-options "-O -W -Wall -Wdeclaration-after-statement -fpreprocessed" } # 1 "my.c" 1 # 1 "my.h" 1 3 4 void foo (void); # 2 "my.c" 2 void foo (void) { } int bar (void) { return 0; int j; return j; } doesn't warn in bar, supposedly in_system_header hasn't been cleared when done with foo function. This is fixed on the trunk supposedly by http://gcc.gnu.org/ml/gcc-patches/2008-07/msg01264.html but that patch is definitely not backportable to 4.3 branch. -- Summary: [4.3 Regression] in_system_header bug Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37902