diff --git a/clang/test/CXX/drs/dr2390.cpp b/clang/test/CXX/drs/dr2390.cpp new file mode 100644 --- /dev/null +++ b/clang/test/CXX/drs/dr2390.cpp @@ -0,0 +1,47 @@ +// RUN: %clang_cc1 -E -P %s -o - | FileCheck %s + +// dr2390: yes + +namespace PR48462 { +// Test that macro expansion of the builtin argument works. +#define C clang +#define F fallthrough +#define CF clang::fallthrough + +#if __has_cpp_attribute(F) +int has_fallthrough; +#endif +// CHECK: int has_fallthrough; + +#if __has_cpp_attribute(C::F) +int has_clang_fallthrough_1; +#endif +// CHECK: int has_clang_fallthrough_1; + +#if __has_cpp_attribute(clang::F) +int has_clang_fallthrough_2; +#endif +// CHECK: int has_clang_fallthrough_2; + +#if __has_cpp_attribute(C::fallthrough) +int has_clang_fallthrough_3; +#endif +// CHECK: int has_clang_fallthrough_3; + +#if __has_cpp_attribute(CF) +int has_clang_fallthrough_4; +#endif +// CHECK: int has_clang_fallthrough_4; + +#define FUNCLIKE1(x) clang::x +#if __has_cpp_attribute(FUNCLIKE1(fallthrough)) +int funclike_1; +#endif +// CHECK: int funclike_1; + +#define FUNCLIKE2(x) _Clang::x +#if __has_cpp_attribute(FUNCLIKE2(fallthrough)) +int funclike_2; +#endif +// CHECK: int funclike_2; +} // namespace PR48462