forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			33 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -x c -fsyntax-only -verify -Wtautological-constant-compare %s
 | |
| // RUN: %clang_cc1 -x c -fsyntax-only -verify %s
 | |
| // RUN: %clang_cc1 -x c++ -fsyntax-only -verify -Wtautological-constant-compare %s
 | |
| // RUN: %clang_cc1 -x c++ -fsyntax-only -verify %s
 | |
| 
 | |
| #define ONE 1
 | |
| #define TWO 2
 | |
| 
 | |
| #define TERN(c, l, r) c ? l : r
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| typedef bool boolean;
 | |
| #else
 | |
| typedef _Bool boolean;
 | |
| #endif
 | |
| 
 | |
| void test(boolean a) {
 | |
|   boolean r;
 | |
|   r = a ? (1) : TWO;
 | |
|   r = a ? 3 : TWO; // expected-warning {{converting the result of '?:' with integer constants to a boolean always evaluates to 'true'}}
 | |
|   r = a ? -2 : 0;
 | |
|   r = a ? 3 : -2;  // expected-warning {{converting the result of '?:' with integer constants to a boolean always evaluates to 'true'}}
 | |
|   r = a ? 0 : TWO;
 | |
|   r = a ? 3 : ONE; // expected-warning {{converting the result of '?:' with integer constants to a boolean always evaluates to 'true'}}
 | |
|   r = a ? ONE : 0;
 | |
|   r = a ? 0 : -0;
 | |
|   r = a ? 1 : 0;
 | |
|   r = a ? ONE : 0;
 | |
|   r = a ? ONE : ONE;
 | |
|   r = TERN(a, 4, 8);   // expected-warning {{converting the result of '?:' with integer constants to a boolean always evaluates to 'true'}}
 | |
|   r = TERN(a, -1, -8); // expected-warning {{converting the result of '?:' with integer constants to a boolean always evaluates to 'true'}}
 | |
| }
 |