From 7cdb53900ad540406dd667e03fe3ff037f621d99 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Thu, 5 Nov 2015 01:01:47 +0000 Subject: [PATCH] [Lex] Add __has_builtin support for __make_integer_seq 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 | 10 +++++++++- test/SemaCXX/make_integer_seq.cpp | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp index d8d6b0b90d..40b5496ad7 100644 --- a/lib/Lex/PPMacroExpansion.cpp +++ b/lib/Lex/PPMacroExpansion.cpp @@ -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(Feature) + .Case("__make_integer_seq", LangOpts.CPlusPlus) + .Default(false); + } } else if (II == Ident__has_attribute) Value = hasAttribute(AttrSyntax::GNU, nullptr, FeatureII, getTargetInfo(), getLangOpts()); diff --git a/test/SemaCXX/make_integer_seq.cpp b/test/SemaCXX/make_integer_seq.cpp index f19bed2786..4e15414cbe 100644 --- a/test/SemaCXX/make_integer_seq.cpp +++ b/test/SemaCXX/make_integer_seq.cpp @@ -1,5 +1,7 @@ // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s +static_assert(__has_builtin(__make_integer_seq), ""); + template struct Seq { static constexpr T PackSize = sizeof...(I); -- 2.40.0