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