]> granicus.if.org Git - clang/commitdiff
Disable __has_cpp_attribute when not compiling in C++ mode. As this feature test...
authorAaron Ballman <aaron@aaronballman.com>
Mon, 11 May 2015 14:09:50 +0000 (14:09 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Mon, 11 May 2015 14:09:50 +0000 (14:09 +0000)
This addresses PR23435.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236996 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/PPMacroExpansion.cpp
test/Preprocessor/has_attribute.c

index 5af0205af3764733b7ce5cac508e0c3f0ecb5958..87a07a43d084842213130c4bd896d526e23346cf 100644 (file)
@@ -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__");
index 0ef5b4857a388fd0f051e3a330ef79223b7c529c..1a3c2a0e18c035282803f1f6854a015b1fc7193a 100644 (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