forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			25 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %s
 | |
| 
 | |
| int* j = false; // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
 | |
| 
 | |
| void foo(int* i, int *j=(false)) // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
 | |
| {
 | |
|   foo(false); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
 | |
|   foo((int*)false); // no-warning: explicit cast
 | |
|   foo(0); // no-warning: not a bool, even though its convertible to bool
 | |
| 
 | |
|   foo(false == true); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
 | |
|   foo((42 + 24) < 32); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
 | |
| 
 | |
|   const bool kFlag = false;
 | |
|   foo(kFlag); // expected-warning{{ initialization of pointer of type 'int *' to NULL from a constant boolean expression}}
 | |
| }
 | |
| 
 | |
| char f(struct Undefined*);
 | |
| double f(...);
 | |
| 
 | |
| // Ensure that when using false in metaprogramming machinery its conversion
 | |
| // isn't flagged.
 | |
| template <int N> struct S {};
 | |
| S<sizeof(f(false))> s;
 |