forked from OSchip/llvm-project
Disable __has_cpp_attribute when not compiling in C++ mode. As this feature test macro only supports C++ style attributes, it doesn't apply to code compiled as C code, and can lead to diagnostics when given a scoped attribute.
This addresses PR23435. llvm-svn: 236996
This commit is contained in:
parent
d9ff035de8
commit
416b127456
|
@ -283,7 +283,11 @@ void Preprocessor::RegisterBuiltinMacros() {
|
|||
Ident_Pragma = RegisterBuiltinMacro(*this, "_Pragma");
|
||||
|
||||
// C++ Standing Document Extensions.
|
||||
Ident__has_cpp_attribute = RegisterBuiltinMacro(*this, "__has_cpp_attribute");
|
||||
if (LangOpts.CPlusPlus)
|
||||
Ident__has_cpp_attribute =
|
||||
RegisterBuiltinMacro(*this, "__has_cpp_attribute");
|
||||
else
|
||||
Ident__has_cpp_attribute = nullptr;
|
||||
|
||||
// GCC Extensions.
|
||||
Ident__BASE_FILE__ = RegisterBuiltinMacro(*this, "__BASE_FILE__");
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -triple arm-unknown-linux -E %s -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple arm-unknown-linux -verify -E %s -o - | FileCheck %s
|
||||
|
||||
// CHECK: always_inline
|
||||
#if __has_attribute(always_inline)
|
||||
|
@ -53,3 +53,6 @@ int has_no_volatile_attribute();
|
|||
#if !__has_attribute(uuid)
|
||||
int does_not_have_uuid
|
||||
#endif
|
||||
|
||||
#if __has_cpp_attribute(selectany) // expected-error {{token is not a valid binary operator in a preprocessor subexpression}}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue