Index: lib/Lex/PPMacroExpansion.cpp =================================================================== --- lib/Lex/PPMacroExpansion.cpp +++ lib/Lex/PPMacroExpansion.cpp @@ -1636,7 +1636,15 @@ 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()); Index: test/SemaCXX/make_integer_seq.cpp =================================================================== --- test/SemaCXX/make_integer_seq.cpp +++ 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);