1 // RUN: %clang_cc1 %s -E -CC -verify 2 // RUN: %clang_cc1 %s -E -CC -DPEDANTIC -pedantic -verify 3 4 #define FOO && 1 5 #if defined FOO FOO 6 #endif 7 8 #define A 9 #define B defined(A) 10 #if B // expected-warning{{macro expansion producing 'defined' has undefined behavior}} 11 #endif 12 13 #define m_foo 14 #define TEST(a) (defined(m_##a) && a) 15 16 #if defined(PEDANTIC) 17 // expected-warning@+4{{macro expansion producing 'defined' has undefined behavior}} 18 #endif 19 20 // This shouldn't warn by default, only with pedantic: 21 #if TEST(foo) 22 #endif 23 24 25 // Only one diagnostic for this case: 26 #define INVALID defined( 27 #if INVALID // expected-error{{macro name missing}} 28 #endif 29