| // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -DUNSIGNED -verify -Wsign-compare %s |
| // RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -DSIGNED -verify -Wsign-compare %s |
| // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -DUNSIGNED -DSILENCE -verify %s |
| // RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -DSIGNED -DSILENCE -verify %s |
| |
| int main() { |
| enum A { A_a = 0, A_b = 1 }; |
| static const int message[] = {0, 1}; |
| enum A a; |
| |
| if (a < 2) |
| return 0; |
| |
| #if defined(SIGNED) && !defined(SILENCE) |
| if (a < sizeof(message)/sizeof(message[0])) // expected-warning {{comparison of integers of different signs: 'enum A' and 'unsigned long long'}} |
| return 0; |
| #else |
| // expected-no-diagnostics |
| if (a < 2U) |
| return 0; |
| if (a < sizeof(message)/sizeof(message[0])) |
| return 0; |
| #endif |
| } |