diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Lexer/cxx-features.cpp | 1 | ||||
-rw-r--r-- | clang/test/Preprocessor/expr_define_expansion.c | 26 |
2 files changed, 25 insertions, 2 deletions
diff --git a/clang/test/Lexer/cxx-features.cpp b/clang/test/Lexer/cxx-features.cpp index 6c4a092b1c4..b0f382ec253 100644 --- a/clang/test/Lexer/cxx-features.cpp +++ b/clang/test/Lexer/cxx-features.cpp @@ -6,6 +6,7 @@ // expected-no-diagnostics +// FIXME using `defined` in a macro has undefined behavior. #if __cplusplus < 201103L #define check(macro, cxx98, cxx11, cxx1y) cxx98 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx98 #elif __cplusplus < 201304L diff --git a/clang/test/Preprocessor/expr_define_expansion.c b/clang/test/Preprocessor/expr_define_expansion.c index 3e5a2c4b0e6..23cb4355eb8 100644 --- a/clang/test/Preprocessor/expr_define_expansion.c +++ b/clang/test/Preprocessor/expr_define_expansion.c @@ -1,6 +1,28 @@ -// RUN: %clang_cc1 %s -E -CC -pedantic -verify -// expected-no-diagnostics +// 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 |