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 = 0xFFFFFFFF;

        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

Reply via email to