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