diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-11-05 01:01:47 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-11-05 01:01:47 +0000 |
commit | 5088cdf4d1216ce39d1f975811cdd989f295a719 (patch) | |
tree | 8e42e9cd7f6fcdde72c629fda84442d0a8f8286f | |
parent | 8a308ec24d627e22c29b1e6305c334dc2ba4c4b4 (diff) | |
download | bcm5719-llvm-5088cdf4d1216ce39d1f975811cdd989f295a719.tar.gz bcm5719-llvm-5088cdf4d1216ce39d1f975811cdd989f295a719.zip |
[Lex] Add __has_builtin support for __make_integer_seq
Differential Revision: http://reviews.llvm.org/D14349
llvm-svn: 252115
-rw-r--r-- | clang/lib/Lex/PPMacroExpansion.cpp | 10 | ||||
-rw-r--r-- | clang/test/SemaCXX/make_integer_seq.cpp | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index d8d6b0b90dd..40b5496ad7c 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/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<bool>(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/clang/test/SemaCXX/make_integer_seq.cpp b/clang/test/SemaCXX/make_integer_seq.cpp index f19bed2786f..4e15414cbe6 100644 --- a/clang/test/SemaCXX/make_integer_seq.cpp +++ b/clang/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 <class T, T... I> struct Seq { static constexpr T PackSize = sizeof...(I); |