]> granicus.if.org Git - clang/commitdiff
[Lex] Add __has_builtin support for __make_integer_seq
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 5 Nov 2015 01:01:47 +0000 (01:01 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 5 Nov 2015 01:01:47 +0000 (01:01 +0000)
Differential Revision: http://reviews.llvm.org/D14349

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

lib/Lex/PPMacroExpansion.cpp
test/SemaCXX/make_integer_seq.cpp

index d8d6b0b90dd25cd3d4cb2d233ed2bf16fafa1e3d..40b5496ad7c8e1e6e93b4fc744bb0d76621289dc 100644 (file)
@@ -1636,7 +1636,15 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
       Value = FeatureII->getTokenID() == tok::identifier;
     else if (II == Ident__has_builtin) {
       // Check for a builtin is trivial.
-      Value = FeatureII->getBuiltinID() != 0;
+      if (FeatureII->getBuiltinID() != 0) {
+        Value = true;
+      } else {
+        const LangOptions &LangOpts = PP.getLangOpts();
+        StringRef Feature = FeatureII->getName();
+        Value = llvm::StringSwitch<bool>(Feature)
+                    .Case("__make_integer_seq", LangOpts.CPlusPlus)
+                    .Default(false);
+      }
     } else if (II == Ident__has_attribute)
       Value = hasAttribute(AttrSyntax::GNU, nullptr, FeatureII,
                            getTargetInfo(), getLangOpts());
index f19bed2786f9917546b64e38331e9b800fbefc83..4e15414cbe67c81596cc7708934746b375f5aeb2 100644 (file)
@@ -1,5 +1,7 @@
 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 
+static_assert(__has_builtin(__make_integer_seq), "");
+
 template <class T, T... I>
 struct Seq {
   static constexpr T PackSize = sizeof...(I);