https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64332
--- Comment #3 from Azat <a3at.mail at gmail dot com> --- On Tue, Dec 16, 2014 at 07:50:48PM +0300, Azat Khuzhin wrote: > > --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- > > I don't think it is system header which is being handled differently, > > rather I > > think it is warning for attribute is being handled differently. > > Maybe... I didn't check this. I've checked this and you are right: $ head main.c c-impl.h # the same is in attach ==> main.c <== #include "c-impl.h" ==> c-impl.h <== #pragma GCC system_header static inline int foo(int foo) { } $ gcc -Wall -Wextra -Wpedantic -Wattributes -c main.c $ g++ -Wall -Wextra -Wpedantic -Wattributes -c main.c Now drop system_header: $ head main.c c-impl.h ==> main.c <== #include "c-impl.h" ==> c-impl.h <== static inline int foo(int foo) { } $ gcc -Wall -Wextra -Wpedantic -Wattributes -c main.c In file included from main.c:1:0: c-impl.h: In function ‘foo’: c-impl.h:3:1: warning: no return statement in function returning non-void [-Wreturn-type] } ^ c-impl.h:1:27: warning: unused parameter ‘foo’ [-Wunused-parameter] static inline int foo(int foo) ^ $ g++ -Wall -Wextra -Wpedantic -Wattributes -c main.c In file included from main.c:1:0: c-impl.h: In function ‘int foo(int)’: c-impl.h:3:1: warning: no return statement in function returning non-void [-Wreturn-type] } ^ c-impl.h: At global scope: c-impl.h:1:27: warning: unused parameter ‘foo’ [-Wunused-parameter] static inline int foo(int foo) ^