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