http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59293

            Bug ID: 59293
           Summary: Bogus -Wsign-compare warning when using typeof() on a
                    constant
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: shawn at churchofgit dot com

#define MAX(a,b)                                 \
        __extension__ ({                         \
                        typeof(a) _a = (a);      \
                        typeof(b) _b = (b);      \
                        _a > _b ? _a : _b;       \
                })

int main() {
    if (MAX(5, (unsigned)3))
        return 1;
    return 0;
}


gives:
excessive_signed_compare.c:5:28: warning: comparison between signed and
unsigned integer expressions [-Wsign-compare]
                         _a > _b ? _a : _b;       \
                            ^
excessive_signed_compare.c:9:6: note: in expansion of macro ‘MAX’
  if (MAX(5, (unsigned)3))
      ^
excessive_signed_compare.c:5:38: warning: signed and unsigned type in
conditional expression [-Wsign-compare]
                         _a > _b ? _a : _b;       \

Reply via email to