http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59495
--- Comment #3 from Doron Tsur doront at mellanox dot com ---
It is probably a false positive bug - warning is undetected.
Consider the following code:
$ cat define_compare_test.c
#include define_compare_test.h
#include stdio.h
int main(int argc __attribute__((unused)), char** argv __attribute__((unused)))
{
const int number_int = -1;
const unsigned int number_unsigned_int = 0x;
printf(%d and %u are %s\n, number_int, number_unsigned_int,
DEFINE_COMPARE(number_int, number_unsigned_int) );
return 0;
}
$ cat define_compare_test/define_compare_test.h
#define DEFINE_COMPARE(X,Y) \
((X)==(Y)) ? equal : different
$ ... cp -v define_compare_test/define_compare_test.h /usr/include
'define_compare_test/define_compare_test.h' -
'/usr/include/define_compare_test.h'
$ gcc -Wall -Wextra -Werror define_compare_test.c -I define_compare_test -H
. define_compare_test/define_compare_test.h
...
In file included from define_compare_test.c:1:0:
define_compare_test.c: In function 'main':
define_compare_test/define_compare_test.h:3:7: error: comparison between signed
and unsigned integer expressions [-Werror=sign-compare]
((X)==(Y)) ? equal : different
^
define_compare_test.c:9:9: note: in expansion of macro 'DEFINE_COMPARE'
DEFINE_COMPARE(number_int, number_unsigned_int) );
^
Multiple include guards may be useful for:
/usr/include/wchar.h
...
/usr/include/x86_64-linux-gnu/gnu/stubs.h
define_compare_test/define_compare_test.h
cc1: all warnings being treated as errors
$ gcc -Wall -Wextra -Werror define_compare_test.c -H
. /usr/include/define_compare_test.h
. /usr/include/stdio.h
...
Multiple include guards may be useful for:
/usr/include/define_compare_test.h
/usr/include/wchar.h
...
$ ./a.out
-1 and 4294967295 are equal