https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61280
Bug ID: 61280
Summary: GCC 4.8.2 suppresses -Wsign-compare caused by macro
defined in system header
Product: gcc
Version: 4.8.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: java4ada at yahoo dot com
It seems that since 4.8 GCC grants -Wsign-compare immunity to macro defined in
system header. To reproduce it:
$ cat > test.h <<EOF
#pragma GCC system_header
#define LESS(a, b) ((a) < (b))
EOF
$ cat > test.c <<EOF
#include "test.h"
int foo(int i, unsigned j) { return LESS(i, j); }
EOF
$ gcc -W -c test.c # no warning
$ gcc -W -c test.c -save-temps # system-header bit lost in the preprocessed
file
test.c: In function 'foo':
test.c:2:42: warning: comparison between signed and unsigned integer
expressions [-Wsign-compare]
int foo(int i, unsigned j) { return LESS(i, j); }
Prefixing gcc with ccache reproduces the same issue since ccache calls "gcc -E"
and uses preprocessed file (among other things) to compute key, and passes the
preprocessed file to cc1 for compilation when cache miss.
Wondering if this is a new features in gcc4.8 or a bug.