| // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -verify -Wsign-compare %s |
| // RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -verify -Wsign-compare %s |
| // RUN: %clang_cc1 -x c++ -triple=x86_64-pc-linux-gnu -fsyntax-only -verify -Wsign-compare %s |
| // RUN: %clang_cc1 -x c++ -triple=x86_64-pc-win32 -fsyntax-only -verify -Wsign-compare %s |
| |
| // Check that -Wsign-compare is off by default. |
| // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -verify -DSILENCE %s |
| |
| #ifdef SILENCE |
| // expected-no-diagnostics |
| #endif |
| |
| enum PosEnum { |
| A_a = 0, |
| A_b = 1, |
| A_c = 10 |
| }; |
| |
| static const int message[] = {0, 1}; |
| |
| int test_pos(enum PosEnum a) { |
| if (a < 2) |
| return 0; |
| |
| // No warning, except in Windows C mode, where PosEnum is 'int' and it can |
| // take on any value according to the C standard. |
| #if !defined(SILENCE) && defined(_WIN32) && !defined(__cplusplus) |
| // expected-warning@+2 {{comparison of integers of different signs}} |
| #endif |
| if (a < 2U) |
| return 0; |
| |
| unsigned uv = 2; |
| #if !defined(SILENCE) && defined(_WIN32) && !defined(__cplusplus) |
| // expected-warning@+2 {{comparison of integers of different signs}} |
| #endif |
| if (a < uv) |
| return 1; |
| |
| #if !defined(SILENCE) && defined(_WIN32) && !defined(__cplusplus) |
| // expected-warning@+2 {{comparison of integers of different signs}} |
| #endif |
| if (a < sizeof(message)/sizeof(message[0])) |
| return 0; |
| return 4; |
| } |
| |
| enum NegEnum { |
| NE_a = -1, |
| NE_b = 0, |
| NE_c = 10 |
| }; |
| |
| int test_neg(enum NegEnum a) { |
| if (a < 2) |
| return 0; |
| |
| #ifndef SILENCE |
| // expected-warning@+2 {{comparison of integers of different signs}} |
| #endif |
| if (a < 2U) |
| return 0; |
| |
| unsigned uv = 2; |
| #ifndef SILENCE |
| // expected-warning@+2 {{comparison of integers of different signs}} |
| #endif |
| if (a < uv) |
| return 1; |
| |
| #ifndef SILENCE |
| // expected-warning@+2 {{comparison of integers of different signs}} |
| #endif |
| if (a < sizeof(message)/sizeof(message[0])) |
| return 0; |
| return 4; |
| } |