|  | // 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; | 
|  | } |