tbaeder created this revision. tbaeder added a reviewer: aaron.ballman. tbaeder requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
DR2390 clarifies that the argument to `__has_cpp_attribute()` needs to be macro-expanded. Clang already supports this and tests it explicitly in `clang/test/Preprocessor/has_attribute.cpp`. Copy the test over to `clang/test/CXX/drs/` so the `make_cxx_drs` script picks it up. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D119230 Files: clang/test/CXX/drs/dr2390.cpp Index: clang/test/CXX/drs/dr2390.cpp =================================================================== --- /dev/null +++ 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
Index: clang/test/CXX/drs/dr2390.cpp =================================================================== --- /dev/null +++ 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
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits