29 lines
		
	
	
		
			636 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			636 B
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 %s -E -CC -verify
 | |
| // RUN: %clang_cc1 %s -E -CC -DPEDANTIC -pedantic -verify
 | |
| 
 | |
| #define FOO && 1
 | |
| #if defined FOO FOO
 | |
| #endif
 | |
| 
 | |
| #define A
 | |
| #define B defined(A)
 | |
| #if B // expected-warning{{macro expansion producing 'defined' has undefined behavior}}
 | |
| #endif
 | |
| 
 | |
| #define m_foo
 | |
| #define TEST(a) (defined(m_##a) && a)
 | |
| 
 | |
| #if defined(PEDANTIC)
 | |
| // expected-warning@+4{{macro expansion producing 'defined' has undefined behavior}}
 | |
| #endif
 | |
| 
 | |
| // This shouldn't warn by default, only with pedantic:
 | |
| #if TEST(foo)
 | |
| #endif
 | |
| 
 | |
| 
 | |
| // Only one diagnostic for this case:
 | |
| #define INVALID defined(
 | |
| #if INVALID // expected-error{{macro name missing}}
 | |
| #endif
 |