Home | History | Annotate | Download | only in Sema
      1 //===--- SemaTemplateInstantiateDecl.cpp - C++ Template Decl Instantiation ===/
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //===----------------------------------------------------------------------===/
      8 //
      9 //  This file implements C++ template instantiation for declarations.
     10 //
     11 //===----------------------------------------------------------------------===/
     12 #include "clang/Sema/SemaInternal.h"
     13 #include "clang/AST/ASTConsumer.h"
     14 #include "clang/AST/ASTContext.h"
     15 #include "clang/AST/ASTMutationListener.h"
     16 #include "clang/AST/DeclTemplate.h"
     17 #include "clang/AST/DeclVisitor.h"
     18 #include "clang/AST/DependentDiagnostic.h"
     19 #include "clang/AST/Expr.h"
     20 #include "clang/AST/ExprCXX.h"
     21 #include "clang/AST/TypeLoc.h"
     22 #include "clang/Sema/Lookup.h"
     23 #include "clang/Sema/PrettyDeclStackTrace.h"
     24 #include "clang/Sema/Template.h"
     25 
     26 using namespace clang;
     27 
     28 static bool isDeclWithinFunction(const Decl *D) {
     29   const DeclContext *DC = D->getDeclContext();
     30   if (DC->isFunctionOrMethod())
     31     return true;
     32 
     33   if (DC->isRecord())
     34     return cast<CXXRecordDecl>(DC)->isLocalClass();
     35 
     36   return false;
     37 }
     38 
     39 template<typename DeclT>
     40 static bool SubstQualifier(Sema &SemaRef, const DeclT *OldDecl, DeclT *NewDecl,
     41                            const MultiLevelTemplateArgumentList &TemplateArgs) {
     42   if (!OldDecl->getQualifierLoc())
     43     return false;
     44 
     45   assert((NewDecl->getFriendObjectKind() ||
     46           !OldDecl->getLexicalDeclContext()->isDependentContext()) &&
     47          "non-friend with qualified name defined in dependent context");
     48   Sema::ContextRAII SavedContext(
     49       SemaRef,
     50       const_cast<DeclContext *>(NewDecl->getFriendObjectKind()
     51                                     ? NewDecl->getLexicalDeclContext()
     52                                     : OldDecl->getLexicalDeclContext()));
     53 
     54   NestedNameSpecifierLoc NewQualifierLoc
     55       = SemaRef.SubstNestedNameSpecifierLoc(OldDecl->getQualifierLoc(),
     56                                             TemplateArgs);
     57 
     58   if (!NewQualifierLoc)
     59     return true;
     60 
     61   NewDecl->setQualifierInfo(NewQualifierLoc);
     62   return false;
     63 }
     64 
     65 bool TemplateDeclInstantiator::SubstQualifier(const DeclaratorDecl *OldDecl,
     66                                               DeclaratorDecl *NewDecl) {
     67   return ::SubstQualifier(SemaRef, OldDecl, NewDecl, TemplateArgs);
     68 }
     69 
     70 bool TemplateDeclInstantiator::SubstQualifier(const TagDecl *OldDecl,
     71                                               TagDecl *NewDecl) {
     72   return ::SubstQualifier(SemaRef, OldDecl, NewDecl, TemplateArgs);
     73 }
     74 
     75 // Include attribute instantiation code.
     76 #include "clang/Sema/AttrTemplateInstantiate.inc"
     77 
     78 static void instantiateDependentAlignedAttr(
     79     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
     80     const AlignedAttr *Aligned, Decl *New, bool IsPackExpansion) {
     81   if (Aligned->isAlignmentExpr()) {
     82     // The alignment expression is a constant expression.
     83     EnterExpressionEvaluationContext Unevaluated(S, Sema::ConstantEvaluated);
     84     ExprResult Result = S.SubstExpr(Aligned->getAlignmentExpr(), TemplateArgs);
     85     if (!Result.isInvalid())
     86       S.AddAlignedAttr(Aligned->getLocation(), New, Result.getAs<Expr>(),
     87                        Aligned->getSpellingListIndex(), IsPackExpansion);
     88   } else {
     89     TypeSourceInfo *Result = S.SubstType(Aligned->getAlignmentType(),
     90                                          TemplateArgs, Aligned->getLocation(),
     91                                          DeclarationName());
     92     if (Result)
     93       S.AddAlignedAttr(Aligned->getLocation(), New, Result,
     94                        Aligned->getSpellingListIndex(), IsPackExpansion);
     95   }
     96 }
     97 
     98 static void instantiateDependentAlignedAttr(
     99     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
    100     const AlignedAttr *Aligned, Decl *New) {
    101   if (!Aligned->isPackExpansion()) {
    102     instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, false);
    103     return;
    104   }
    105 
    106   SmallVector<UnexpandedParameterPack, 2> Unexpanded;
    107   if (Aligned->isAlignmentExpr())
    108     S.collectUnexpandedParameterPacks(Aligned->getAlignmentExpr(),
    109                                       Unexpanded);
    110   else
    111     S.collectUnexpandedParameterPacks(Aligned->getAlignmentType()->getTypeLoc(),
    112                                       Unexpanded);
    113   assert(!Unexpanded.empty() && "Pack expansion without parameter packs?");
    114 
    115   // Determine whether we can expand this attribute pack yet.
    116   bool Expand = true, RetainExpansion = false;
    117   Optional<unsigned> NumExpansions;
    118   // FIXME: Use the actual location of the ellipsis.
    119   SourceLocation EllipsisLoc = Aligned->getLocation();
    120   if (S.CheckParameterPacksForExpansion(EllipsisLoc, Aligned->getRange(),
    121                                         Unexpanded, TemplateArgs, Expand,
    122                                         RetainExpansion, NumExpansions))
    123     return;
    124 
    125   if (!Expand) {
    126     Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, -1);
    127     instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, true);
    128   } else {
    129     for (unsigned I = 0; I != *NumExpansions; ++I) {
    130       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, I);
    131       instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, false);
    132     }
    133   }
    134 }
    135 
    136 static void instantiateDependentAssumeAlignedAttr(
    137     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
    138     const AssumeAlignedAttr *Aligned, Decl *New) {
    139   // The alignment expression is a constant expression.
    140   EnterExpressionEvaluationContext Unevaluated(S, Sema::ConstantEvaluated);
    141 
    142   Expr *E, *OE = nullptr;
    143   ExprResult Result = S.SubstExpr(Aligned->getAlignment(), TemplateArgs);
    144   if (Result.isInvalid())
    145     return;
    146   E = Result.getAs<Expr>();
    147 
    148   if (Aligned->getOffset()) {
    149     Result = S.SubstExpr(Aligned->getOffset(), TemplateArgs);
    150     if (Result.isInvalid())
    151       return;
    152     OE = Result.getAs<Expr>();
    153   }
    154 
    155   S.AddAssumeAlignedAttr(Aligned->getLocation(), New, E, OE,
    156                          Aligned->getSpellingListIndex());
    157 }
    158 
    159 static void instantiateDependentAlignValueAttr(
    160     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
    161     const AlignValueAttr *Aligned, Decl *New) {
    162   // The alignment expression is a constant expression.
    163   EnterExpressionEvaluationContext Unevaluated(S, Sema::ConstantEvaluated);
    164   ExprResult Result = S.SubstExpr(Aligned->getAlignment(), TemplateArgs);
    165   if (!Result.isInvalid())
    166     S.AddAlignValueAttr(Aligned->getLocation(), New, Result.getAs<Expr>(),
    167                         Aligned->getSpellingListIndex());
    168 }
    169 
    170 static void instantiateDependentEnableIfAttr(
    171     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
    172     const EnableIfAttr *A, const Decl *Tmpl, Decl *New) {
    173   Expr *Cond = nullptr;
    174   {
    175     EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
    176     ExprResult Result = S.SubstExpr(A->getCond(), TemplateArgs);
    177     if (Result.isInvalid())
    178       return;
    179     Cond = Result.getAs<Expr>();
    180   }
    181   if (A->getCond()->isTypeDependent() && !Cond->isTypeDependent()) {
    182     ExprResult Converted = S.PerformContextuallyConvertToBool(Cond);
    183     if (Converted.isInvalid())
    184       return;
    185     Cond = Converted.get();
    186   }
    187 
    188   SmallVector<PartialDiagnosticAt, 8> Diags;
    189   if (A->getCond()->isValueDependent() && !Cond->isValueDependent() &&
    190       !Expr::isPotentialConstantExprUnevaluated(Cond, cast<FunctionDecl>(Tmpl),
    191                                                 Diags)) {
    192     S.Diag(A->getLocation(), diag::err_enable_if_never_constant_expr);
    193     for (int I = 0, N = Diags.size(); I != N; ++I)
    194       S.Diag(Diags[I].first, Diags[I].second);
    195     return;
    196   }
    197 
    198   EnableIfAttr *EIA = new (S.getASTContext())
    199                         EnableIfAttr(A->getLocation(), S.getASTContext(), Cond,
    200                                      A->getMessage(),
    201                                      A->getSpellingListIndex());
    202   New->addAttr(EIA);
    203 }
    204 
    205 // Constructs and adds to New a new instance of CUDALaunchBoundsAttr using
    206 // template A as the base and arguments from TemplateArgs.
    207 static void instantiateDependentCUDALaunchBoundsAttr(
    208     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
    209     const CUDALaunchBoundsAttr &Attr, Decl *New) {
    210   // The alignment expression is a constant expression.
    211   EnterExpressionEvaluationContext Unevaluated(S, Sema::ConstantEvaluated);
    212 
    213   ExprResult Result = S.SubstExpr(Attr.getMaxThreads(), TemplateArgs);
    214   if (Result.isInvalid())
    215     return;
    216   Expr *MaxThreads = Result.getAs<Expr>();
    217 
    218   Expr *MinBlocks = nullptr;
    219   if (Attr.getMinBlocks()) {
    220     Result = S.SubstExpr(Attr.getMinBlocks(), TemplateArgs);
    221     if (Result.isInvalid())
    222       return;
    223     MinBlocks = Result.getAs<Expr>();
    224   }
    225 
    226   S.AddLaunchBoundsAttr(Attr.getLocation(), New, MaxThreads, MinBlocks,
    227                         Attr.getSpellingListIndex());
    228 }
    229 
    230 static void
    231 instantiateDependentModeAttr(Sema &S,
    232                              const MultiLevelTemplateArgumentList &TemplateArgs,
    233                              const ModeAttr &Attr, Decl *New) {
    234   S.AddModeAttr(Attr.getRange(), New, Attr.getMode(),
    235                 Attr.getSpellingListIndex(), /*InInstantiation=*/true);
    236 }
    237 
    238 /// Instantiation of 'declare simd' attribute and its arguments.
    239 static void instantiateOMPDeclareSimdDeclAttr(
    240     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
    241     const OMPDeclareSimdDeclAttr &Attr, Decl *New) {
    242   // Allow 'this' in clauses with varlists.
    243   if (auto *FTD = dyn_cast<FunctionTemplateDecl>(New))
    244     New = FTD->getTemplatedDecl();
    245   auto *FD = cast<FunctionDecl>(New);
    246   auto *ThisContext = dyn_cast_or_null<CXXRecordDecl>(FD->getDeclContext());
    247   SmallVector<Expr *, 4> Uniforms, Aligneds, Alignments, Linears, Steps;
    248   SmallVector<unsigned, 4> LinModifiers;
    249 
    250   auto &&Subst = [&](Expr *E) -> ExprResult {
    251     if (auto *DRE = dyn_cast<DeclRefExpr>(E->IgnoreParenImpCasts()))
    252       if (auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {
    253         Sema::ContextRAII SavedContext(S, FD);
    254         LocalInstantiationScope Local(S);
    255         if (FD->getNumParams() > PVD->getFunctionScopeIndex())
    256           Local.InstantiatedLocal(
    257               PVD, FD->getParamDecl(PVD->getFunctionScopeIndex()));
    258         return S.SubstExpr(E, TemplateArgs);
    259       }
    260     Sema::CXXThisScopeRAII ThisScope(S, ThisContext, /*TypeQuals=*/0,
    261                                      FD->isCXXInstanceMember());
    262     return S.SubstExpr(E, TemplateArgs);
    263   };
    264 
    265   ExprResult Simdlen;
    266   if (auto *E = Attr.getSimdlen())
    267     Simdlen = Subst(E);
    268 
    269   if (Attr.uniforms_size() > 0) {
    270     for(auto *E : Attr.uniforms()) {
    271       ExprResult Inst = Subst(E);
    272       if (Inst.isInvalid())
    273         continue;
    274       Uniforms.push_back(Inst.get());
    275     }
    276   }
    277 
    278   auto AI = Attr.alignments_begin();
    279   for (auto *E : Attr.aligneds()) {
    280     ExprResult Inst = Subst(E);
    281     if (Inst.isInvalid())
    282       continue;
    283     Aligneds.push_back(Inst.get());
    284     Inst = ExprEmpty();
    285     if (*AI)
    286       Inst = S.SubstExpr(*AI, TemplateArgs);
    287     Alignments.push_back(Inst.get());
    288     ++AI;
    289   }
    290 
    291   auto SI = Attr.steps_begin();
    292   for (auto *E : Attr.linears()) {
    293     ExprResult Inst = Subst(E);
    294     if (Inst.isInvalid())
    295       continue;
    296     Linears.push_back(Inst.get());
    297     Inst = ExprEmpty();
    298     if (*SI)
    299       Inst = S.SubstExpr(*SI, TemplateArgs);
    300     Steps.push_back(Inst.get());
    301     ++SI;
    302   }
    303   LinModifiers.append(Attr.modifiers_begin(), Attr.modifiers_end());
    304   (void)S.ActOnOpenMPDeclareSimdDirective(
    305       S.ConvertDeclToDeclGroup(New), Attr.getBranchState(), Simdlen.get(),
    306       Uniforms, Aligneds, Alignments, Linears, LinModifiers, Steps,
    307       Attr.getRange());
    308 }
    309 
    310 void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
    311                             const Decl *Tmpl, Decl *New,
    312                             LateInstantiatedAttrVec *LateAttrs,
    313                             LocalInstantiationScope *OuterMostScope) {
    314   for (const auto *TmplAttr : Tmpl->attrs()) {
    315     // FIXME: This should be generalized to more than just the AlignedAttr.
    316     const AlignedAttr *Aligned = dyn_cast<AlignedAttr>(TmplAttr);
    317     if (Aligned && Aligned->isAlignmentDependent()) {
    318       instantiateDependentAlignedAttr(*this, TemplateArgs, Aligned, New);
    319       continue;
    320     }
    321 
    322     const AssumeAlignedAttr *AssumeAligned = dyn_cast<AssumeAlignedAttr>(TmplAttr);
    323     if (AssumeAligned) {
    324       instantiateDependentAssumeAlignedAttr(*this, TemplateArgs, AssumeAligned, New);
    325       continue;
    326     }
    327 
    328     const AlignValueAttr *AlignValue = dyn_cast<AlignValueAttr>(TmplAttr);
    329     if (AlignValue) {
    330       instantiateDependentAlignValueAttr(*this, TemplateArgs, AlignValue, New);
    331       continue;
    332     }
    333 
    334     const EnableIfAttr *EnableIf = dyn_cast<EnableIfAttr>(TmplAttr);
    335     if (EnableIf && EnableIf->getCond()->isValueDependent()) {
    336       instantiateDependentEnableIfAttr(*this, TemplateArgs, EnableIf, Tmpl,
    337                                        New);
    338       continue;
    339     }
    340 
    341     if (const CUDALaunchBoundsAttr *CUDALaunchBounds =
    342             dyn_cast<CUDALaunchBoundsAttr>(TmplAttr)) {
    343       instantiateDependentCUDALaunchBoundsAttr(*this, TemplateArgs,
    344                                                *CUDALaunchBounds, New);
    345       continue;
    346     }
    347 
    348     if (const ModeAttr *Mode = dyn_cast<ModeAttr>(TmplAttr)) {
    349       instantiateDependentModeAttr(*this, TemplateArgs, *Mode, New);
    350       continue;
    351     }
    352 
    353     if (const auto *OMPAttr = dyn_cast<OMPDeclareSimdDeclAttr>(TmplAttr)) {
    354       instantiateOMPDeclareSimdDeclAttr(*this, TemplateArgs, *OMPAttr, New);
    355       continue;
    356     }
    357 
    358     // Existing DLL attribute on the instantiation takes precedence.
    359     if (TmplAttr->getKind() == attr::DLLExport ||
    360         TmplAttr->getKind() == attr::DLLImport) {
    361       if (New->hasAttr<DLLExportAttr>() || New->hasAttr<DLLImportAttr>()) {
    362         continue;
    363       }
    364     }
    365 
    366     if (auto ABIAttr = dyn_cast<ParameterABIAttr>(TmplAttr)) {
    367       AddParameterABIAttr(ABIAttr->getRange(), New, ABIAttr->getABI(),
    368                           ABIAttr->getSpellingListIndex());
    369       continue;
    370     }
    371 
    372     if (isa<NSConsumedAttr>(TmplAttr) || isa<CFConsumedAttr>(TmplAttr)) {
    373       AddNSConsumedAttr(TmplAttr->getRange(), New,
    374                         TmplAttr->getSpellingListIndex(),
    375                         isa<NSConsumedAttr>(TmplAttr),
    376                         /*template instantiation*/ true);
    377       continue;
    378     }
    379 
    380     assert(!TmplAttr->isPackExpansion());
    381     if (TmplAttr->isLateParsed() && LateAttrs) {
    382       // Late parsed attributes must be instantiated and attached after the
    383       // enclosing class has been instantiated.  See Sema::InstantiateClass.
    384       LocalInstantiationScope *Saved = nullptr;
    385       if (CurrentInstantiationScope)
    386         Saved = CurrentInstantiationScope->cloneScopes(OuterMostScope);
    387       LateAttrs->push_back(LateInstantiatedAttribute(TmplAttr, Saved, New));
    388     } else {
    389       // Allow 'this' within late-parsed attributes.
    390       NamedDecl *ND = dyn_cast<NamedDecl>(New);
    391       CXXRecordDecl *ThisContext =
    392           dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext());
    393       CXXThisScopeRAII ThisScope(*this, ThisContext, /*TypeQuals*/0,
    394                                  ND && ND->isCXXInstanceMember());
    395 
    396       Attr *NewAttr = sema::instantiateTemplateAttribute(TmplAttr, Context,
    397                                                          *this, TemplateArgs);
    398       if (NewAttr)
    399         New->addAttr(NewAttr);
    400     }
    401   }
    402 }
    403 
    404 /// Get the previous declaration of a declaration for the purposes of template
    405 /// instantiation. If this finds a previous declaration, then the previous
    406 /// declaration of the instantiation of D should be an instantiation of the
    407 /// result of this function.
    408 template<typename DeclT>
    409 static DeclT *getPreviousDeclForInstantiation(DeclT *D) {
    410   DeclT *Result = D->getPreviousDecl();
    411 
    412   // If the declaration is within a class, and the previous declaration was
    413   // merged from a different definition of that class, then we don't have a
    414   // previous declaration for the purpose of template instantiation.
    415   if (Result && isa<CXXRecordDecl>(D->getDeclContext()) &&
    416       D->getLexicalDeclContext() != Result->getLexicalDeclContext())
    417     return nullptr;
    418 
    419   return Result;
    420 }
    421 
    422 Decl *
    423 TemplateDeclInstantiator::VisitTranslationUnitDecl(TranslationUnitDecl *D) {
    424   llvm_unreachable("Translation units cannot be instantiated");
    425 }
    426 
    427 Decl *
    428 TemplateDeclInstantiator::VisitPragmaCommentDecl(PragmaCommentDecl *D) {
    429   llvm_unreachable("pragma comment cannot be instantiated");
    430 }
    431 
    432 Decl *TemplateDeclInstantiator::VisitPragmaDetectMismatchDecl(
    433     PragmaDetectMismatchDecl *D) {
    434   llvm_unreachable("pragma comment cannot be instantiated");
    435 }
    436 
    437 Decl *
    438 TemplateDeclInstantiator::VisitExternCContextDecl(ExternCContextDecl *D) {
    439   llvm_unreachable("extern \"C\" context cannot be instantiated");
    440 }
    441 
    442 Decl *
    443 TemplateDeclInstantiator::VisitLabelDecl(LabelDecl *D) {
    444   LabelDecl *Inst = LabelDecl::Create(SemaRef.Context, Owner, D->getLocation(),
    445                                       D->getIdentifier());
    446   Owner->addDecl(Inst);
    447   return Inst;
    448 }
    449 
    450 Decl *
    451 TemplateDeclInstantiator::VisitNamespaceDecl(NamespaceDecl *D) {
    452   llvm_unreachable("Namespaces cannot be instantiated");
    453 }
    454 
    455 Decl *
    456 TemplateDeclInstantiator::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
    457   NamespaceAliasDecl *Inst
    458     = NamespaceAliasDecl::Create(SemaRef.Context, Owner,
    459                                  D->getNamespaceLoc(),
    460                                  D->getAliasLoc(),
    461                                  D->getIdentifier(),
    462                                  D->getQualifierLoc(),
    463                                  D->getTargetNameLoc(),
    464                                  D->getNamespace());
    465   Owner->addDecl(Inst);
    466   return Inst;
    467 }
    468 
    469 Decl *TemplateDeclInstantiator::InstantiateTypedefNameDecl(TypedefNameDecl *D,
    470                                                            bool IsTypeAlias) {
    471   bool Invalid = false;
    472   TypeSourceInfo *DI = D->getTypeSourceInfo();
    473   if (DI->getType()->isInstantiationDependentType() ||
    474       DI->getType()->isVariablyModifiedType()) {
    475     DI = SemaRef.SubstType(DI, TemplateArgs,
    476                            D->getLocation(), D->getDeclName());
    477     if (!DI) {
    478       Invalid = true;
    479       DI = SemaRef.Context.getTrivialTypeSourceInfo(SemaRef.Context.IntTy);
    480     }
    481   } else {
    482     SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
    483   }
    484 
    485   // HACK: g++ has a bug where it gets the value kind of ?: wrong.
    486   // libstdc++ relies upon this bug in its implementation of common_type.
    487   // If we happen to be processing that implementation, fake up the g++ ?:
    488   // semantics. See LWG issue 2141 for more information on the bug.
    489   const DecltypeType *DT = DI->getType()->getAs<DecltypeType>();
    490   CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
    491   if (DT && RD && isa<ConditionalOperator>(DT->getUnderlyingExpr()) &&
    492       DT->isReferenceType() &&
    493       RD->getEnclosingNamespaceContext() == SemaRef.getStdNamespace() &&
    494       RD->getIdentifier() && RD->getIdentifier()->isStr("common_type") &&
    495       D->getIdentifier() && D->getIdentifier()->isStr("type") &&
    496       SemaRef.getSourceManager().isInSystemHeader(D->getLocStart()))
    497     // Fold it to the (non-reference) type which g++ would have produced.
    498     DI = SemaRef.Context.getTrivialTypeSourceInfo(
    499       DI->getType().getNonReferenceType());
    500 
    501   // Create the new typedef
    502   TypedefNameDecl *Typedef;
    503   if (IsTypeAlias)
    504     Typedef = TypeAliasDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
    505                                     D->getLocation(), D->getIdentifier(), DI);
    506   else
    507     Typedef = TypedefDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
    508                                   D->getLocation(), D->getIdentifier(), DI);
    509   if (Invalid)
    510     Typedef->setInvalidDecl();
    511 
    512   // If the old typedef was the name for linkage purposes of an anonymous
    513   // tag decl, re-establish that relationship for the new typedef.
    514   if (const TagType *oldTagType = D->getUnderlyingType()->getAs<TagType>()) {
    515     TagDecl *oldTag = oldTagType->getDecl();
    516     if (oldTag->getTypedefNameForAnonDecl() == D && !Invalid) {
    517       TagDecl *newTag = DI->getType()->castAs<TagType>()->getDecl();
    518       assert(!newTag->hasNameForLinkage());
    519       newTag->setTypedefNameForAnonDecl(Typedef);
    520     }
    521   }
    522 
    523   if (TypedefNameDecl *Prev = getPreviousDeclForInstantiation(D)) {
    524     NamedDecl *InstPrev = SemaRef.FindInstantiatedDecl(D->getLocation(), Prev,
    525                                                        TemplateArgs);
    526     if (!InstPrev)
    527       return nullptr;
    528 
    529     TypedefNameDecl *InstPrevTypedef = cast<TypedefNameDecl>(InstPrev);
    530 
    531     // If the typedef types are not identical, reject them.
    532     SemaRef.isIncompatibleTypedef(InstPrevTypedef, Typedef);
    533 
    534     Typedef->setPreviousDecl(InstPrevTypedef);
    535   }
    536 
    537   SemaRef.InstantiateAttrs(TemplateArgs, D, Typedef);
    538 
    539   Typedef->setAccess(D->getAccess());
    540 
    541   return Typedef;
    542 }
    543 
    544 Decl *TemplateDeclInstantiator::VisitTypedefDecl(TypedefDecl *D) {
    545   Decl *Typedef = InstantiateTypedefNameDecl(D, /*IsTypeAlias=*/false);
    546   if (Typedef)
    547     Owner->addDecl(Typedef);
    548   return Typedef;
    549 }
    550 
    551 Decl *TemplateDeclInstantiator::VisitTypeAliasDecl(TypeAliasDecl *D) {
    552   Decl *Typedef = InstantiateTypedefNameDecl(D, /*IsTypeAlias=*/true);
    553   if (Typedef)
    554     Owner->addDecl(Typedef);
    555   return Typedef;
    556 }
    557 
    558 Decl *
    559 TemplateDeclInstantiator::VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D) {
    560   // Create a local instantiation scope for this type alias template, which
    561   // will contain the instantiations of the template parameters.
    562   LocalInstantiationScope Scope(SemaRef);
    563 
    564   TemplateParameterList *TempParams = D->getTemplateParameters();
    565   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
    566   if (!InstParams)
    567     return nullptr;
    568 
    569   TypeAliasDecl *Pattern = D->getTemplatedDecl();
    570 
    571   TypeAliasTemplateDecl *PrevAliasTemplate = nullptr;
    572   if (getPreviousDeclForInstantiation<TypedefNameDecl>(Pattern)) {
    573     DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
    574     if (!Found.empty()) {
    575       PrevAliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Found.front());
    576     }
    577   }
    578 
    579   TypeAliasDecl *AliasInst = cast_or_null<TypeAliasDecl>(
    580     InstantiateTypedefNameDecl(Pattern, /*IsTypeAlias=*/true));
    581   if (!AliasInst)
    582     return nullptr;
    583 
    584   TypeAliasTemplateDecl *Inst
    585     = TypeAliasTemplateDecl::Create(SemaRef.Context, Owner, D->getLocation(),
    586                                     D->getDeclName(), InstParams, AliasInst);
    587   AliasInst->setDescribedAliasTemplate(Inst);
    588   if (PrevAliasTemplate)
    589     Inst->setPreviousDecl(PrevAliasTemplate);
    590 
    591   Inst->setAccess(D->getAccess());
    592 
    593   if (!PrevAliasTemplate)
    594     Inst->setInstantiatedFromMemberTemplate(D);
    595 
    596   Owner->addDecl(Inst);
    597 
    598   return Inst;
    599 }
    600 
    601 Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D) {
    602   return VisitVarDecl(D, /*InstantiatingVarTemplate=*/false);
    603 }
    604 
    605 Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D,
    606                                              bool InstantiatingVarTemplate) {
    607 
    608   // Do substitution on the type of the declaration
    609   TypeSourceInfo *DI = SemaRef.SubstType(D->getTypeSourceInfo(),
    610                                          TemplateArgs,
    611                                          D->getTypeSpecStartLoc(),
    612                                          D->getDeclName());
    613   if (!DI)
    614     return nullptr;
    615 
    616   if (DI->getType()->isFunctionType()) {
    617     SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function)
    618       << D->isStaticDataMember() << DI->getType();
    619     return nullptr;
    620   }
    621 
    622   DeclContext *DC = Owner;
    623   if (D->isLocalExternDecl())
    624     SemaRef.adjustContextForLocalExternDecl(DC);
    625 
    626   // Build the instantiated declaration.
    627   VarDecl *Var = VarDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(),
    628                                  D->getLocation(), D->getIdentifier(),
    629                                  DI->getType(), DI, D->getStorageClass());
    630 
    631   // In ARC, infer 'retaining' for variables of retainable type.
    632   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
    633       SemaRef.inferObjCARCLifetime(Var))
    634     Var->setInvalidDecl();
    635 
    636   // Substitute the nested name specifier, if any.
    637   if (SubstQualifier(D, Var))
    638     return nullptr;
    639 
    640   SemaRef.BuildVariableInstantiation(Var, D, TemplateArgs, LateAttrs, Owner,
    641                                      StartingScope, InstantiatingVarTemplate);
    642 
    643   if (D->isNRVOVariable()) {
    644     QualType ReturnType = cast<FunctionDecl>(DC)->getReturnType();
    645     if (SemaRef.isCopyElisionCandidate(ReturnType, Var, false))
    646       Var->setNRVOVariable(true);
    647   }
    648 
    649   Var->setImplicit(D->isImplicit());
    650 
    651   return Var;
    652 }
    653 
    654 Decl *TemplateDeclInstantiator::VisitAccessSpecDecl(AccessSpecDecl *D) {
    655   AccessSpecDecl* AD
    656     = AccessSpecDecl::Create(SemaRef.Context, D->getAccess(), Owner,
    657                              D->getAccessSpecifierLoc(), D->getColonLoc());
    658   Owner->addHiddenDecl(AD);
    659   return AD;
    660 }
    661 
    662 Decl *TemplateDeclInstantiator::VisitFieldDecl(FieldDecl *D) {
    663   bool Invalid = false;
    664   TypeSourceInfo *DI = D->getTypeSourceInfo();
    665   if (DI->getType()->isInstantiationDependentType() ||
    666       DI->getType()->isVariablyModifiedType())  {
    667     DI = SemaRef.SubstType(DI, TemplateArgs,
    668                            D->getLocation(), D->getDeclName());
    669     if (!DI) {
    670       DI = D->getTypeSourceInfo();
    671       Invalid = true;
    672     } else if (DI->getType()->isFunctionType()) {
    673       // C++ [temp.arg.type]p3:
    674       //   If a declaration acquires a function type through a type
    675       //   dependent on a template-parameter and this causes a
    676       //   declaration that does not use the syntactic form of a
    677       //   function declarator to have function type, the program is
    678       //   ill-formed.
    679       SemaRef.Diag(D->getLocation(), diag::err_field_instantiates_to_function)
    680         << DI->getType();
    681       Invalid = true;
    682     }
    683   } else {
    684     SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
    685   }
    686 
    687   Expr *BitWidth = D->getBitWidth();
    688   if (Invalid)
    689     BitWidth = nullptr;
    690   else if (BitWidth) {
    691     // The bit-width expression is a constant expression.
    692     EnterExpressionEvaluationContext Unevaluated(SemaRef,
    693                                                  Sema::ConstantEvaluated);
    694 
    695     ExprResult InstantiatedBitWidth
    696       = SemaRef.SubstExpr(BitWidth, TemplateArgs);
    697     if (InstantiatedBitWidth.isInvalid()) {
    698       Invalid = true;
    699       BitWidth = nullptr;
    700     } else
    701       BitWidth = InstantiatedBitWidth.getAs<Expr>();
    702   }
    703 
    704   FieldDecl *Field = SemaRef.CheckFieldDecl(D->getDeclName(),
    705                                             DI->getType(), DI,
    706                                             cast<RecordDecl>(Owner),
    707                                             D->getLocation(),
    708                                             D->isMutable(),
    709                                             BitWidth,
    710                                             D->getInClassInitStyle(),
    711                                             D->getInnerLocStart(),
    712                                             D->getAccess(),
    713                                             nullptr);
    714   if (!Field) {
    715     cast<Decl>(Owner)->setInvalidDecl();
    716     return nullptr;
    717   }
    718 
    719   SemaRef.InstantiateAttrs(TemplateArgs, D, Field, LateAttrs, StartingScope);
    720 
    721   if (Field->hasAttrs())
    722     SemaRef.CheckAlignasUnderalignment(Field);
    723 
    724   if (Invalid)
    725     Field->setInvalidDecl();
    726 
    727   if (!Field->getDeclName()) {
    728     // Keep track of where this decl came from.
    729     SemaRef.Context.setInstantiatedFromUnnamedFieldDecl(Field, D);
    730   }
    731   if (CXXRecordDecl *Parent= dyn_cast<CXXRecordDecl>(Field->getDeclContext())) {
    732     if (Parent->isAnonymousStructOrUnion() &&
    733         Parent->getRedeclContext()->isFunctionOrMethod())
    734       SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Field);
    735   }
    736 
    737   Field->setImplicit(D->isImplicit());
    738   Field->setAccess(D->getAccess());
    739   Owner->addDecl(Field);
    740 
    741   return Field;
    742 }
    743 
    744 Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {
    745   bool Invalid = false;
    746   TypeSourceInfo *DI = D->getTypeSourceInfo();
    747 
    748   if (DI->getType()->isVariablyModifiedType()) {
    749     SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified)
    750       << D;
    751     Invalid = true;
    752   } else if (DI->getType()->isInstantiationDependentType())  {
    753     DI = SemaRef.SubstType(DI, TemplateArgs,
    754                            D->getLocation(), D->getDeclName());
    755     if (!DI) {
    756       DI = D->getTypeSourceInfo();
    757       Invalid = true;
    758     } else if (DI->getType()->isFunctionType()) {
    759       // C++ [temp.arg.type]p3:
    760       //   If a declaration acquires a function type through a type
    761       //   dependent on a template-parameter and this causes a
    762       //   declaration that does not use the syntactic form of a
    763       //   function declarator to have function type, the program is
    764       //   ill-formed.
    765       SemaRef.Diag(D->getLocation(), diag::err_field_instantiates_to_function)
    766       << DI->getType();
    767       Invalid = true;
    768     }
    769   } else {
    770     SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
    771   }
    772 
    773   MSPropertyDecl *Property = MSPropertyDecl::Create(
    774       SemaRef.Context, Owner, D->getLocation(), D->getDeclName(), DI->getType(),
    775       DI, D->getLocStart(), D->getGetterId(), D->getSetterId());
    776 
    777   SemaRef.InstantiateAttrs(TemplateArgs, D, Property, LateAttrs,
    778                            StartingScope);
    779 
    780   if (Invalid)
    781     Property->setInvalidDecl();
    782 
    783   Property->setAccess(D->getAccess());
    784   Owner->addDecl(Property);
    785 
    786   return Property;
    787 }
    788 
    789 Decl *TemplateDeclInstantiator::VisitIndirectFieldDecl(IndirectFieldDecl *D) {
    790   NamedDecl **NamedChain =
    791     new (SemaRef.Context)NamedDecl*[D->getChainingSize()];
    792 
    793   int i = 0;
    794   for (auto *PI : D->chain()) {
    795     NamedDecl *Next = SemaRef.FindInstantiatedDecl(D->getLocation(), PI,
    796                                               TemplateArgs);
    797     if (!Next)
    798       return nullptr;
    799 
    800     NamedChain[i++] = Next;
    801   }
    802 
    803   QualType T = cast<FieldDecl>(NamedChain[i-1])->getType();
    804   IndirectFieldDecl *IndirectField = IndirectFieldDecl::Create(
    805       SemaRef.Context, Owner, D->getLocation(), D->getIdentifier(), T,
    806       {NamedChain, D->getChainingSize()});
    807 
    808   for (const auto *Attr : D->attrs())
    809     IndirectField->addAttr(Attr->clone(SemaRef.Context));
    810 
    811   IndirectField->setImplicit(D->isImplicit());
    812   IndirectField->setAccess(D->getAccess());
    813   Owner->addDecl(IndirectField);
    814   return IndirectField;
    815 }
    816 
    817 Decl *TemplateDeclInstantiator::VisitFriendDecl(FriendDecl *D) {
    818   // Handle friend type expressions by simply substituting template
    819   // parameters into the pattern type and checking the result.
    820   if (TypeSourceInfo *Ty = D->getFriendType()) {
    821     TypeSourceInfo *InstTy;
    822     // If this is an unsupported friend, don't bother substituting template
    823     // arguments into it. The actual type referred to won't be used by any
    824     // parts of Clang, and may not be valid for instantiating. Just use the
    825     // same info for the instantiated friend.
    826     if (D->isUnsupportedFriend()) {
    827       InstTy = Ty;
    828     } else {
    829       InstTy = SemaRef.SubstType(Ty, TemplateArgs,
    830                                  D->getLocation(), DeclarationName());
    831     }
    832     if (!InstTy)
    833       return nullptr;
    834 
    835     FriendDecl *FD = SemaRef.CheckFriendTypeDecl(D->getLocStart(),
    836                                                  D->getFriendLoc(), InstTy);
    837     if (!FD)
    838       return nullptr;
    839 
    840     FD->setAccess(AS_public);
    841     FD->setUnsupportedFriend(D->isUnsupportedFriend());
    842     Owner->addDecl(FD);
    843     return FD;
    844   }
    845 
    846   NamedDecl *ND = D->getFriendDecl();
    847   assert(ND && "friend decl must be a decl or a type!");
    848 
    849   // All of the Visit implementations for the various potential friend
    850   // declarations have to be carefully written to work for friend
    851   // objects, with the most important detail being that the target
    852   // decl should almost certainly not be placed in Owner.
    853   Decl *NewND = Visit(ND);
    854   if (!NewND) return nullptr;
    855 
    856   FriendDecl *FD =
    857     FriendDecl::Create(SemaRef.Context, Owner, D->getLocation(),
    858                        cast<NamedDecl>(NewND), D->getFriendLoc());
    859   FD->setAccess(AS_public);
    860   FD->setUnsupportedFriend(D->isUnsupportedFriend());
    861   Owner->addDecl(FD);
    862   return FD;
    863 }
    864 
    865 Decl *TemplateDeclInstantiator::VisitStaticAssertDecl(StaticAssertDecl *D) {
    866   Expr *AssertExpr = D->getAssertExpr();
    867 
    868   // The expression in a static assertion is a constant expression.
    869   EnterExpressionEvaluationContext Unevaluated(SemaRef,
    870                                                Sema::ConstantEvaluated);
    871 
    872   ExprResult InstantiatedAssertExpr
    873     = SemaRef.SubstExpr(AssertExpr, TemplateArgs);
    874   if (InstantiatedAssertExpr.isInvalid())
    875     return nullptr;
    876 
    877   return SemaRef.BuildStaticAssertDeclaration(D->getLocation(),
    878                                               InstantiatedAssertExpr.get(),
    879                                               D->getMessage(),
    880                                               D->getRParenLoc(),
    881                                               D->isFailed());
    882 }
    883 
    884 Decl *TemplateDeclInstantiator::VisitEnumDecl(EnumDecl *D) {
    885   EnumDecl *PrevDecl = nullptr;
    886   if (EnumDecl *PatternPrev = getPreviousDeclForInstantiation(D)) {
    887     NamedDecl *Prev = SemaRef.FindInstantiatedDecl(D->getLocation(),
    888                                                    PatternPrev,
    889                                                    TemplateArgs);
    890     if (!Prev) return nullptr;
    891     PrevDecl = cast<EnumDecl>(Prev);
    892   }
    893 
    894   EnumDecl *Enum = EnumDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
    895                                     D->getLocation(), D->getIdentifier(),
    896                                     PrevDecl, D->isScoped(),
    897                                     D->isScopedUsingClassTag(), D->isFixed());
    898   if (D->isFixed()) {
    899     if (TypeSourceInfo *TI = D->getIntegerTypeSourceInfo()) {
    900       // If we have type source information for the underlying type, it means it
    901       // has been explicitly set by the user. Perform substitution on it before
    902       // moving on.
    903       SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
    904       TypeSourceInfo *NewTI = SemaRef.SubstType(TI, TemplateArgs, UnderlyingLoc,
    905                                                 DeclarationName());
    906       if (!NewTI || SemaRef.CheckEnumUnderlyingType(NewTI))
    907         Enum->setIntegerType(SemaRef.Context.IntTy);
    908       else
    909         Enum->setIntegerTypeSourceInfo(NewTI);
    910     } else {
    911       assert(!D->getIntegerType()->isDependentType()
    912              && "Dependent type without type source info");
    913       Enum->setIntegerType(D->getIntegerType());
    914     }
    915   }
    916 
    917   SemaRef.InstantiateAttrs(TemplateArgs, D, Enum);
    918 
    919   Enum->setInstantiationOfMemberEnum(D, TSK_ImplicitInstantiation);
    920   Enum->setAccess(D->getAccess());
    921   // Forward the mangling number from the template to the instantiated decl.
    922   SemaRef.Context.setManglingNumber(Enum, SemaRef.Context.getManglingNumber(D));
    923   // See if the old tag was defined along with a declarator.
    924   // If it did, mark the new tag as being associated with that declarator.
    925   if (DeclaratorDecl *DD = SemaRef.Context.getDeclaratorForUnnamedTagDecl(D))
    926     SemaRef.Context.addDeclaratorForUnnamedTagDecl(Enum, DD);
    927   // See if the old tag was defined along with a typedef.
    928   // If it did, mark the new tag as being associated with that typedef.
    929   if (TypedefNameDecl *TND = SemaRef.Context.getTypedefNameForUnnamedTagDecl(D))
    930     SemaRef.Context.addTypedefNameForUnnamedTagDecl(Enum, TND);
    931   if (SubstQualifier(D, Enum)) return nullptr;
    932   Owner->addDecl(Enum);
    933 
    934   EnumDecl *Def = D->getDefinition();
    935   if (Def && Def != D) {
    936     // If this is an out-of-line definition of an enum member template, check
    937     // that the underlying types match in the instantiation of both
    938     // declarations.
    939     if (TypeSourceInfo *TI = Def->getIntegerTypeSourceInfo()) {
    940       SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
    941       QualType DefnUnderlying =
    942         SemaRef.SubstType(TI->getType(), TemplateArgs,
    943                           UnderlyingLoc, DeclarationName());
    944       SemaRef.CheckEnumRedeclaration(Def->getLocation(), Def->isScoped(),
    945                                      DefnUnderlying,
    946                                      /*EnumUnderlyingIsImplicit=*/false, Enum);
    947     }
    948   }
    949 
    950   // C++11 [temp.inst]p1: The implicit instantiation of a class template
    951   // specialization causes the implicit instantiation of the declarations, but
    952   // not the definitions of scoped member enumerations.
    953   //
    954   // DR1484 clarifies that enumeration definitions inside of a template
    955   // declaration aren't considered entities that can be separately instantiated
    956   // from the rest of the entity they are declared inside of.
    957   if (isDeclWithinFunction(D) ? D == Def : Def && !Enum->isScoped()) {
    958     SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Enum);
    959     InstantiateEnumDefinition(Enum, Def);
    960   }
    961 
    962   return Enum;
    963 }
    964 
    965 void TemplateDeclInstantiator::InstantiateEnumDefinition(
    966     EnumDecl *Enum, EnumDecl *Pattern) {
    967   Enum->startDefinition();
    968 
    969   // Update the location to refer to the definition.
    970   Enum->setLocation(Pattern->getLocation());
    971 
    972   SmallVector<Decl*, 4> Enumerators;
    973 
    974   EnumConstantDecl *LastEnumConst = nullptr;
    975   for (auto *EC : Pattern->enumerators()) {
    976     // The specified value for the enumerator.
    977     ExprResult Value((Expr *)nullptr);
    978     if (Expr *UninstValue = EC->getInitExpr()) {
    979       // The enumerator's value expression is a constant expression.
    980       EnterExpressionEvaluationContext Unevaluated(SemaRef,
    981                                                    Sema::ConstantEvaluated);
    982 
    983       Value = SemaRef.SubstExpr(UninstValue, TemplateArgs);
    984     }
    985 
    986     // Drop the initial value and continue.
    987     bool isInvalid = false;
    988     if (Value.isInvalid()) {
    989       Value = nullptr;
    990       isInvalid = true;
    991     }
    992 
    993     EnumConstantDecl *EnumConst
    994       = SemaRef.CheckEnumConstant(Enum, LastEnumConst,
    995                                   EC->getLocation(), EC->getIdentifier(),
    996                                   Value.get());
    997 
    998     if (isInvalid) {
    999       if (EnumConst)
   1000         EnumConst->setInvalidDecl();
   1001       Enum->setInvalidDecl();
   1002     }
   1003 
   1004     if (EnumConst) {
   1005       SemaRef.InstantiateAttrs(TemplateArgs, EC, EnumConst);
   1006 
   1007       EnumConst->setAccess(Enum->getAccess());
   1008       Enum->addDecl(EnumConst);
   1009       Enumerators.push_back(EnumConst);
   1010       LastEnumConst = EnumConst;
   1011 
   1012       if (Pattern->getDeclContext()->isFunctionOrMethod() &&
   1013           !Enum->isScoped()) {
   1014         // If the enumeration is within a function or method, record the enum
   1015         // constant as a local.
   1016         SemaRef.CurrentInstantiationScope->InstantiatedLocal(EC, EnumConst);
   1017       }
   1018     }
   1019   }
   1020 
   1021   // FIXME: Fixup LBraceLoc
   1022   SemaRef.ActOnEnumBody(Enum->getLocation(), SourceLocation(),
   1023                         Enum->getRBraceLoc(), Enum,
   1024                         Enumerators,
   1025                         nullptr, nullptr);
   1026 }
   1027 
   1028 Decl *TemplateDeclInstantiator::VisitEnumConstantDecl(EnumConstantDecl *D) {
   1029   llvm_unreachable("EnumConstantDecls can only occur within EnumDecls.");
   1030 }
   1031 
   1032 Decl *
   1033 TemplateDeclInstantiator::VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D) {
   1034   llvm_unreachable("BuiltinTemplateDecls cannot be instantiated.");
   1035 }
   1036 
   1037 Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {
   1038   bool isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
   1039 
   1040   // Create a local instantiation scope for this class template, which
   1041   // will contain the instantiations of the template parameters.
   1042   LocalInstantiationScope Scope(SemaRef);
   1043   TemplateParameterList *TempParams = D->getTemplateParameters();
   1044   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
   1045   if (!InstParams)
   1046     return nullptr;
   1047 
   1048   CXXRecordDecl *Pattern = D->getTemplatedDecl();
   1049 
   1050   // Instantiate the qualifier.  We have to do this first in case
   1051   // we're a friend declaration, because if we are then we need to put
   1052   // the new declaration in the appropriate context.
   1053   NestedNameSpecifierLoc QualifierLoc = Pattern->getQualifierLoc();
   1054   if (QualifierLoc) {
   1055     QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
   1056                                                        TemplateArgs);
   1057     if (!QualifierLoc)
   1058       return nullptr;
   1059   }
   1060 
   1061   CXXRecordDecl *PrevDecl = nullptr;
   1062   ClassTemplateDecl *PrevClassTemplate = nullptr;
   1063 
   1064   if (!isFriend && getPreviousDeclForInstantiation(Pattern)) {
   1065     DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
   1066     if (!Found.empty()) {
   1067       PrevClassTemplate = dyn_cast<ClassTemplateDecl>(Found.front());
   1068       if (PrevClassTemplate)
   1069         PrevDecl = PrevClassTemplate->getTemplatedDecl();
   1070     }
   1071   }
   1072 
   1073   // If this isn't a friend, then it's a member template, in which
   1074   // case we just want to build the instantiation in the
   1075   // specialization.  If it is a friend, we want to build it in
   1076   // the appropriate context.
   1077   DeclContext *DC = Owner;
   1078   if (isFriend) {
   1079     if (QualifierLoc) {
   1080       CXXScopeSpec SS;
   1081       SS.Adopt(QualifierLoc);
   1082       DC = SemaRef.computeDeclContext(SS);
   1083       if (!DC) return nullptr;
   1084     } else {
   1085       DC = SemaRef.FindInstantiatedContext(Pattern->getLocation(),
   1086                                            Pattern->getDeclContext(),
   1087                                            TemplateArgs);
   1088     }
   1089 
   1090     // Look for a previous declaration of the template in the owning
   1091     // context.
   1092     LookupResult R(SemaRef, Pattern->getDeclName(), Pattern->getLocation(),
   1093                    Sema::LookupOrdinaryName, Sema::ForRedeclaration);
   1094     SemaRef.LookupQualifiedName(R, DC);
   1095 
   1096     if (R.isSingleResult()) {
   1097       PrevClassTemplate = R.getAsSingle<ClassTemplateDecl>();
   1098       if (PrevClassTemplate)
   1099         PrevDecl = PrevClassTemplate->getTemplatedDecl();
   1100     }
   1101 
   1102     if (!PrevClassTemplate && QualifierLoc) {
   1103       SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope)
   1104         << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC
   1105         << QualifierLoc.getSourceRange();
   1106       return nullptr;
   1107     }
   1108 
   1109     bool AdoptedPreviousTemplateParams = false;
   1110     if (PrevClassTemplate) {
   1111       bool Complain = true;
   1112 
   1113       // HACK: libstdc++ 4.2.1 contains an ill-formed friend class
   1114       // template for struct std::tr1::__detail::_Map_base, where the
   1115       // template parameters of the friend declaration don't match the
   1116       // template parameters of the original declaration. In this one
   1117       // case, we don't complain about the ill-formed friend
   1118       // declaration.
   1119       if (isFriend && Pattern->getIdentifier() &&
   1120           Pattern->getIdentifier()->isStr("_Map_base") &&
   1121           DC->isNamespace() &&
   1122           cast<NamespaceDecl>(DC)->getIdentifier() &&
   1123           cast<NamespaceDecl>(DC)->getIdentifier()->isStr("__detail")) {
   1124         DeclContext *DCParent = DC->getParent();
   1125         if (DCParent->isNamespace() &&
   1126             cast<NamespaceDecl>(DCParent)->getIdentifier() &&
   1127             cast<NamespaceDecl>(DCParent)->getIdentifier()->isStr("tr1")) {
   1128           if (cast<Decl>(DCParent)->isInStdNamespace())
   1129             Complain = false;
   1130         }
   1131       }
   1132 
   1133       TemplateParameterList *PrevParams
   1134         = PrevClassTemplate->getTemplateParameters();
   1135 
   1136       // Make sure the parameter lists match.
   1137       if (!SemaRef.TemplateParameterListsAreEqual(InstParams, PrevParams,
   1138                                                   Complain,
   1139                                                   Sema::TPL_TemplateMatch)) {
   1140         if (Complain)
   1141           return nullptr;
   1142 
   1143         AdoptedPreviousTemplateParams = true;
   1144         InstParams = PrevParams;
   1145       }
   1146 
   1147       // Do some additional validation, then merge default arguments
   1148       // from the existing declarations.
   1149       if (!AdoptedPreviousTemplateParams &&
   1150           SemaRef.CheckTemplateParameterList(InstParams, PrevParams,
   1151                                              Sema::TPC_ClassTemplate))
   1152         return nullptr;
   1153     }
   1154   }
   1155 
   1156   CXXRecordDecl *RecordInst
   1157     = CXXRecordDecl::Create(SemaRef.Context, Pattern->getTagKind(), DC,
   1158                             Pattern->getLocStart(), Pattern->getLocation(),
   1159                             Pattern->getIdentifier(), PrevDecl,
   1160                             /*DelayTypeCreation=*/true);
   1161 
   1162   if (QualifierLoc)
   1163     RecordInst->setQualifierInfo(QualifierLoc);
   1164 
   1165   ClassTemplateDecl *Inst
   1166     = ClassTemplateDecl::Create(SemaRef.Context, DC, D->getLocation(),
   1167                                 D->getIdentifier(), InstParams, RecordInst,
   1168                                 PrevClassTemplate);
   1169   RecordInst->setDescribedClassTemplate(Inst);
   1170 
   1171   if (isFriend) {
   1172     if (PrevClassTemplate)
   1173       Inst->setAccess(PrevClassTemplate->getAccess());
   1174     else
   1175       Inst->setAccess(D->getAccess());
   1176 
   1177     Inst->setObjectOfFriendDecl();
   1178     // TODO: do we want to track the instantiation progeny of this
   1179     // friend target decl?
   1180   } else {
   1181     Inst->setAccess(D->getAccess());
   1182     if (!PrevClassTemplate)
   1183       Inst->setInstantiatedFromMemberTemplate(D);
   1184   }
   1185 
   1186   // Trigger creation of the type for the instantiation.
   1187   SemaRef.Context.getInjectedClassNameType(RecordInst,
   1188                                     Inst->getInjectedClassNameSpecialization());
   1189 
   1190   // Finish handling of friends.
   1191   if (isFriend) {
   1192     DC->makeDeclVisibleInContext(Inst);
   1193     Inst->setLexicalDeclContext(Owner);
   1194     RecordInst->setLexicalDeclContext(Owner);
   1195     return Inst;
   1196   }
   1197 
   1198   if (D->isOutOfLine()) {
   1199     Inst->setLexicalDeclContext(D->getLexicalDeclContext());
   1200     RecordInst->setLexicalDeclContext(D->getLexicalDeclContext());
   1201   }
   1202 
   1203   Owner->addDecl(Inst);
   1204 
   1205   if (!PrevClassTemplate) {
   1206     // Queue up any out-of-line partial specializations of this member
   1207     // class template; the client will force their instantiation once
   1208     // the enclosing class has been instantiated.
   1209     SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs;
   1210     D->getPartialSpecializations(PartialSpecs);
   1211     for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I)
   1212       if (PartialSpecs[I]->getFirstDecl()->isOutOfLine())
   1213         OutOfLinePartialSpecs.push_back(std::make_pair(Inst, PartialSpecs[I]));
   1214   }
   1215 
   1216   return Inst;
   1217 }
   1218 
   1219 Decl *
   1220 TemplateDeclInstantiator::VisitClassTemplatePartialSpecializationDecl(
   1221                                    ClassTemplatePartialSpecializationDecl *D) {
   1222   ClassTemplateDecl *ClassTemplate = D->getSpecializedTemplate();
   1223 
   1224   // Lookup the already-instantiated declaration in the instantiation
   1225   // of the class template and return that.
   1226   DeclContext::lookup_result Found
   1227     = Owner->lookup(ClassTemplate->getDeclName());
   1228   if (Found.empty())
   1229     return nullptr;
   1230 
   1231   ClassTemplateDecl *InstClassTemplate
   1232     = dyn_cast<ClassTemplateDecl>(Found.front());
   1233   if (!InstClassTemplate)
   1234     return nullptr;
   1235 
   1236   if (ClassTemplatePartialSpecializationDecl *Result
   1237         = InstClassTemplate->findPartialSpecInstantiatedFromMember(D))
   1238     return Result;
   1239 
   1240   return InstantiateClassTemplatePartialSpecialization(InstClassTemplate, D);
   1241 }
   1242 
   1243 Decl *TemplateDeclInstantiator::VisitVarTemplateDecl(VarTemplateDecl *D) {
   1244   assert(D->getTemplatedDecl()->isStaticDataMember() &&
   1245          "Only static data member templates are allowed.");
   1246 
   1247   // Create a local instantiation scope for this variable template, which
   1248   // will contain the instantiations of the template parameters.
   1249   LocalInstantiationScope Scope(SemaRef);
   1250   TemplateParameterList *TempParams = D->getTemplateParameters();
   1251   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
   1252   if (!InstParams)
   1253     return nullptr;
   1254 
   1255   VarDecl *Pattern = D->getTemplatedDecl();
   1256   VarTemplateDecl *PrevVarTemplate = nullptr;
   1257 
   1258   if (getPreviousDeclForInstantiation(Pattern)) {
   1259     DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
   1260     if (!Found.empty())
   1261       PrevVarTemplate = dyn_cast<VarTemplateDecl>(Found.front());
   1262   }
   1263 
   1264   VarDecl *VarInst =
   1265       cast_or_null<VarDecl>(VisitVarDecl(Pattern,
   1266                                          /*InstantiatingVarTemplate=*/true));
   1267   if (!VarInst) return nullptr;
   1268 
   1269   DeclContext *DC = Owner;
   1270 
   1271   VarTemplateDecl *Inst = VarTemplateDecl::Create(
   1272       SemaRef.Context, DC, D->getLocation(), D->getIdentifier(), InstParams,
   1273       VarInst);
   1274   VarInst->setDescribedVarTemplate(Inst);
   1275   Inst->setPreviousDecl(PrevVarTemplate);
   1276 
   1277   Inst->setAccess(D->getAccess());
   1278   if (!PrevVarTemplate)
   1279     Inst->setInstantiatedFromMemberTemplate(D);
   1280 
   1281   if (D->isOutOfLine()) {
   1282     Inst->setLexicalDeclContext(D->getLexicalDeclContext());
   1283     VarInst->setLexicalDeclContext(D->getLexicalDeclContext());
   1284   }
   1285 
   1286   Owner->addDecl(Inst);
   1287 
   1288   if (!PrevVarTemplate) {
   1289     // Queue up any out-of-line partial specializations of this member
   1290     // variable template; the client will force their instantiation once
   1291     // the enclosing class has been instantiated.
   1292     SmallVector<VarTemplatePartialSpecializationDecl *, 4> PartialSpecs;
   1293     D->getPartialSpecializations(PartialSpecs);
   1294     for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I)
   1295       if (PartialSpecs[I]->getFirstDecl()->isOutOfLine())
   1296         OutOfLineVarPartialSpecs.push_back(
   1297             std::make_pair(Inst, PartialSpecs[I]));
   1298   }
   1299 
   1300   return Inst;
   1301 }
   1302 
   1303 Decl *TemplateDeclInstantiator::VisitVarTemplatePartialSpecializationDecl(
   1304     VarTemplatePartialSpecializationDecl *D) {
   1305   assert(D->isStaticDataMember() &&
   1306          "Only static data member templates are allowed.");
   1307 
   1308   VarTemplateDecl *VarTemplate = D->getSpecializedTemplate();
   1309 
   1310   // Lookup the already-instantiated declaration and return that.
   1311   DeclContext::lookup_result Found = Owner->lookup(VarTemplate->getDeclName());
   1312   assert(!Found.empty() && "Instantiation found nothing?");
   1313 
   1314   VarTemplateDecl *InstVarTemplate = dyn_cast<VarTemplateDecl>(Found.front());
   1315   assert(InstVarTemplate && "Instantiation did not find a variable template?");
   1316 
   1317   if (VarTemplatePartialSpecializationDecl *Result =
   1318           InstVarTemplate->findPartialSpecInstantiatedFromMember(D))
   1319     return Result;
   1320 
   1321   return InstantiateVarTemplatePartialSpecialization(InstVarTemplate, D);
   1322 }
   1323 
   1324 Decl *
   1325 TemplateDeclInstantiator::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
   1326   // Create a local instantiation scope for this function template, which
   1327   // will contain the instantiations of the template parameters and then get
   1328   // merged with the local instantiation scope for the function template
   1329   // itself.
   1330   LocalInstantiationScope Scope(SemaRef);
   1331 
   1332   TemplateParameterList *TempParams = D->getTemplateParameters();
   1333   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
   1334   if (!InstParams)
   1335     return nullptr;
   1336 
   1337   FunctionDecl *Instantiated = nullptr;
   1338   if (CXXMethodDecl *DMethod = dyn_cast<CXXMethodDecl>(D->getTemplatedDecl()))
   1339     Instantiated = cast_or_null<FunctionDecl>(VisitCXXMethodDecl(DMethod,
   1340                                                                  InstParams));
   1341   else
   1342     Instantiated = cast_or_null<FunctionDecl>(VisitFunctionDecl(
   1343                                                           D->getTemplatedDecl(),
   1344                                                                 InstParams));
   1345 
   1346   if (!Instantiated)
   1347     return nullptr;
   1348 
   1349   // Link the instantiated function template declaration to the function
   1350   // template from which it was instantiated.
   1351   FunctionTemplateDecl *InstTemplate
   1352     = Instantiated->getDescribedFunctionTemplate();
   1353   InstTemplate->setAccess(D->getAccess());
   1354   assert(InstTemplate &&
   1355          "VisitFunctionDecl/CXXMethodDecl didn't create a template!");
   1356 
   1357   bool isFriend = (InstTemplate->getFriendObjectKind() != Decl::FOK_None);
   1358 
   1359   // Link the instantiation back to the pattern *unless* this is a
   1360   // non-definition friend declaration.
   1361   if (!InstTemplate->getInstantiatedFromMemberTemplate() &&
   1362       !(isFriend && !D->getTemplatedDecl()->isThisDeclarationADefinition()))
   1363     InstTemplate->setInstantiatedFromMemberTemplate(D);
   1364 
   1365   // Make declarations visible in the appropriate context.
   1366   if (!isFriend) {
   1367     Owner->addDecl(InstTemplate);
   1368   } else if (InstTemplate->getDeclContext()->isRecord() &&
   1369              !getPreviousDeclForInstantiation(D)) {
   1370     SemaRef.CheckFriendAccess(InstTemplate);
   1371   }
   1372 
   1373   return InstTemplate;
   1374 }
   1375 
   1376 Decl *TemplateDeclInstantiator::VisitCXXRecordDecl(CXXRecordDecl *D) {
   1377   CXXRecordDecl *PrevDecl = nullptr;
   1378   if (D->isInjectedClassName())
   1379     PrevDecl = cast<CXXRecordDecl>(Owner);
   1380   else if (CXXRecordDecl *PatternPrev = getPreviousDeclForInstantiation(D)) {
   1381     NamedDecl *Prev = SemaRef.FindInstantiatedDecl(D->getLocation(),
   1382                                                    PatternPrev,
   1383                                                    TemplateArgs);
   1384     if (!Prev) return nullptr;
   1385     PrevDecl = cast<CXXRecordDecl>(Prev);
   1386   }
   1387 
   1388   CXXRecordDecl *Record
   1389     = CXXRecordDecl::Create(SemaRef.Context, D->getTagKind(), Owner,
   1390                             D->getLocStart(), D->getLocation(),
   1391                             D->getIdentifier(), PrevDecl);
   1392 
   1393   // Substitute the nested name specifier, if any.
   1394   if (SubstQualifier(D, Record))
   1395     return nullptr;
   1396 
   1397   Record->setImplicit(D->isImplicit());
   1398   // FIXME: Check against AS_none is an ugly hack to work around the issue that
   1399   // the tag decls introduced by friend class declarations don't have an access
   1400   // specifier. Remove once this area of the code gets sorted out.
   1401   if (D->getAccess() != AS_none)
   1402     Record->setAccess(D->getAccess());
   1403   if (!D->isInjectedClassName())
   1404     Record->setInstantiationOfMemberClass(D, TSK_ImplicitInstantiation);
   1405 
   1406   // If the original function was part of a friend declaration,
   1407   // inherit its namespace state.
   1408   if (D->getFriendObjectKind())
   1409     Record->setObjectOfFriendDecl();
   1410 
   1411   // Make sure that anonymous structs and unions are recorded.
   1412   if (D->isAnonymousStructOrUnion())
   1413     Record->setAnonymousStructOrUnion(true);
   1414 
   1415   if (D->isLocalClass())
   1416     SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Record);
   1417 
   1418   // Forward the mangling number from the template to the instantiated decl.
   1419   SemaRef.Context.setManglingNumber(Record,
   1420                                     SemaRef.Context.getManglingNumber(D));
   1421 
   1422   // See if the old tag was defined along with a declarator.
   1423   // If it did, mark the new tag as being associated with that declarator.
   1424   if (DeclaratorDecl *DD = SemaRef.Context.getDeclaratorForUnnamedTagDecl(D))
   1425     SemaRef.Context.addDeclaratorForUnnamedTagDecl(Record, DD);
   1426 
   1427   // See if the old tag was defined along with a typedef.
   1428   // If it did, mark the new tag as being associated with that typedef.
   1429   if (TypedefNameDecl *TND = SemaRef.Context.getTypedefNameForUnnamedTagDecl(D))
   1430     SemaRef.Context.addTypedefNameForUnnamedTagDecl(Record, TND);
   1431 
   1432   Owner->addDecl(Record);
   1433 
   1434   // DR1484 clarifies that the members of a local class are instantiated as part
   1435   // of the instantiation of their enclosing entity.
   1436   if (D->isCompleteDefinition() && D->isLocalClass()) {
   1437     Sema::SavePendingLocalImplicitInstantiationsRAII
   1438         SavedPendingLocalImplicitInstantiations(SemaRef);
   1439 
   1440     SemaRef.InstantiateClass(D->getLocation(), Record, D, TemplateArgs,
   1441                              TSK_ImplicitInstantiation,
   1442                              /*Complain=*/true);
   1443 
   1444     SemaRef.InstantiateClassMembers(D->getLocation(), Record, TemplateArgs,
   1445                                     TSK_ImplicitInstantiation);
   1446 
   1447     // This class may have local implicit instantiations that need to be
   1448     // performed within this scope.
   1449     SemaRef.PerformPendingInstantiations(/*LocalOnly=*/true);
   1450   }
   1451 
   1452   SemaRef.DiagnoseUnusedNestedTypedefs(Record);
   1453 
   1454   return Record;
   1455 }
   1456 
   1457 /// \brief Adjust the given function type for an instantiation of the
   1458 /// given declaration, to cope with modifications to the function's type that
   1459 /// aren't reflected in the type-source information.
   1460 ///
   1461 /// \param D The declaration we're instantiating.
   1462 /// \param TInfo The already-instantiated type.
   1463 static QualType adjustFunctionTypeForInstantiation(ASTContext &Context,
   1464                                                    FunctionDecl *D,
   1465                                                    TypeSourceInfo *TInfo) {
   1466   const FunctionProtoType *OrigFunc
   1467     = D->getType()->castAs<FunctionProtoType>();
   1468   const FunctionProtoType *NewFunc
   1469     = TInfo->getType()->castAs<FunctionProtoType>();
   1470   if (OrigFunc->getExtInfo() == NewFunc->getExtInfo())
   1471     return TInfo->getType();
   1472 
   1473   FunctionProtoType::ExtProtoInfo NewEPI = NewFunc->getExtProtoInfo();
   1474   NewEPI.ExtInfo = OrigFunc->getExtInfo();
   1475   return Context.getFunctionType(NewFunc->getReturnType(),
   1476                                  NewFunc->getParamTypes(), NewEPI);
   1477 }
   1478 
   1479 /// Normal class members are of more specific types and therefore
   1480 /// don't make it here.  This function serves two purposes:
   1481 ///   1) instantiating function templates
   1482 ///   2) substituting friend declarations
   1483 Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
   1484                                        TemplateParameterList *TemplateParams) {
   1485   // Check whether there is already a function template specialization for
   1486   // this declaration.
   1487   FunctionTemplateDecl *FunctionTemplate = D->getDescribedFunctionTemplate();
   1488   if (FunctionTemplate && !TemplateParams) {
   1489     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
   1490 
   1491     void *InsertPos = nullptr;
   1492     FunctionDecl *SpecFunc
   1493       = FunctionTemplate->findSpecialization(Innermost, InsertPos);
   1494 
   1495     // If we already have a function template specialization, return it.
   1496     if (SpecFunc)
   1497       return SpecFunc;
   1498   }
   1499 
   1500   bool isFriend;
   1501   if (FunctionTemplate)
   1502     isFriend = (FunctionTemplate->getFriendObjectKind() != Decl::FOK_None);
   1503   else
   1504     isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
   1505 
   1506   bool MergeWithParentScope = (TemplateParams != nullptr) ||
   1507     Owner->isFunctionOrMethod() ||
   1508     !(isa<Decl>(Owner) &&
   1509       cast<Decl>(Owner)->isDefinedOutsideFunctionOrMethod());
   1510   LocalInstantiationScope Scope(SemaRef, MergeWithParentScope);
   1511 
   1512   SmallVector<ParmVarDecl *, 4> Params;
   1513   TypeSourceInfo *TInfo = SubstFunctionType(D, Params);
   1514   if (!TInfo)
   1515     return nullptr;
   1516   QualType T = adjustFunctionTypeForInstantiation(SemaRef.Context, D, TInfo);
   1517 
   1518   NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc();
   1519   if (QualifierLoc) {
   1520     QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
   1521                                                        TemplateArgs);
   1522     if (!QualifierLoc)
   1523       return nullptr;
   1524   }
   1525 
   1526   // If we're instantiating a local function declaration, put the result
   1527   // in the enclosing namespace; otherwise we need to find the instantiated
   1528   // context.
   1529   DeclContext *DC;
   1530   if (D->isLocalExternDecl()) {
   1531     DC = Owner;
   1532     SemaRef.adjustContextForLocalExternDecl(DC);
   1533   } else if (isFriend && QualifierLoc) {
   1534     CXXScopeSpec SS;
   1535     SS.Adopt(QualifierLoc);
   1536     DC = SemaRef.computeDeclContext(SS);
   1537     if (!DC) return nullptr;
   1538   } else {
   1539     DC = SemaRef.FindInstantiatedContext(D->getLocation(), D->getDeclContext(),
   1540                                          TemplateArgs);
   1541   }
   1542 
   1543   FunctionDecl *Function =
   1544       FunctionDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(),
   1545                            D->getNameInfo(), T, TInfo,
   1546                            D->getCanonicalDecl()->getStorageClass(),
   1547                            D->isInlineSpecified(), D->hasWrittenPrototype(),
   1548                            D->isConstexpr());
   1549   Function->setRangeEnd(D->getSourceRange().getEnd());
   1550 
   1551   if (D->isInlined())
   1552     Function->setImplicitlyInline();
   1553 
   1554   if (QualifierLoc)
   1555     Function->setQualifierInfo(QualifierLoc);
   1556 
   1557   if (D->isLocalExternDecl())
   1558     Function->setLocalExternDecl();
   1559 
   1560   DeclContext *LexicalDC = Owner;
   1561   if (!isFriend && D->isOutOfLine() && !D->isLocalExternDecl()) {
   1562     assert(D->getDeclContext()->isFileContext());
   1563     LexicalDC = D->getDeclContext();
   1564   }
   1565 
   1566   Function->setLexicalDeclContext(LexicalDC);
   1567 
   1568   // Attach the parameters
   1569   for (unsigned P = 0; P < Params.size(); ++P)
   1570     if (Params[P])
   1571       Params[P]->setOwningFunction(Function);
   1572   Function->setParams(Params);
   1573 
   1574   SourceLocation InstantiateAtPOI;
   1575   if (TemplateParams) {
   1576     // Our resulting instantiation is actually a function template, since we
   1577     // are substituting only the outer template parameters. For example, given
   1578     //
   1579     //   template<typename T>
   1580     //   struct X {
   1581     //     template<typename U> friend void f(T, U);
   1582     //   };
   1583     //
   1584     //   X<int> x;
   1585     //
   1586     // We are instantiating the friend function template "f" within X<int>,
   1587     // which means substituting int for T, but leaving "f" as a friend function
   1588     // template.
   1589     // Build the function template itself.
   1590     FunctionTemplate = FunctionTemplateDecl::Create(SemaRef.Context, DC,
   1591                                                     Function->getLocation(),
   1592                                                     Function->getDeclName(),
   1593                                                     TemplateParams, Function);
   1594     Function->setDescribedFunctionTemplate(FunctionTemplate);
   1595 
   1596     FunctionTemplate->setLexicalDeclContext(LexicalDC);
   1597 
   1598     if (isFriend && D->isThisDeclarationADefinition()) {
   1599       // TODO: should we remember this connection regardless of whether
   1600       // the friend declaration provided a body?
   1601       FunctionTemplate->setInstantiatedFromMemberTemplate(
   1602                                            D->getDescribedFunctionTemplate());
   1603     }
   1604   } else if (FunctionTemplate) {
   1605     // Record this function template specialization.
   1606     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
   1607     Function->setFunctionTemplateSpecialization(FunctionTemplate,
   1608                             TemplateArgumentList::CreateCopy(SemaRef.Context,
   1609                                                              Innermost),
   1610                                                 /*InsertPos=*/nullptr);
   1611   } else if (isFriend) {
   1612     // Note, we need this connection even if the friend doesn't have a body.
   1613     // Its body may exist but not have been attached yet due to deferred
   1614     // parsing.
   1615     // FIXME: It might be cleaner to set this when attaching the body to the
   1616     // friend function declaration, however that would require finding all the
   1617     // instantiations and modifying them.
   1618     Function->setInstantiationOfMemberFunction(D, TSK_ImplicitInstantiation);
   1619   }
   1620 
   1621   if (InitFunctionInstantiation(Function, D))
   1622     Function->setInvalidDecl();
   1623 
   1624   bool isExplicitSpecialization = false;
   1625 
   1626   LookupResult Previous(
   1627       SemaRef, Function->getDeclName(), SourceLocation(),
   1628       D->isLocalExternDecl() ? Sema::LookupRedeclarationWithLinkage
   1629                              : Sema::LookupOrdinaryName,
   1630       Sema::ForRedeclaration);
   1631 
   1632   if (DependentFunctionTemplateSpecializationInfo *Info
   1633         = D->getDependentSpecializationInfo()) {
   1634     assert(isFriend && "non-friend has dependent specialization info?");
   1635 
   1636     // This needs to be set now for future sanity.
   1637     Function->setObjectOfFriendDecl();
   1638 
   1639     // Instantiate the explicit template arguments.
   1640     TemplateArgumentListInfo ExplicitArgs(Info->getLAngleLoc(),
   1641                                           Info->getRAngleLoc());
   1642     if (SemaRef.Subst(Info->getTemplateArgs(), Info->getNumTemplateArgs(),
   1643                       ExplicitArgs, TemplateArgs))
   1644       return nullptr;
   1645 
   1646     // Map the candidate templates to their instantiations.
   1647     for (unsigned I = 0, E = Info->getNumTemplates(); I != E; ++I) {
   1648       Decl *Temp = SemaRef.FindInstantiatedDecl(D->getLocation(),
   1649                                                 Info->getTemplate(I),
   1650                                                 TemplateArgs);
   1651       if (!Temp) return nullptr;
   1652 
   1653       Previous.addDecl(cast<FunctionTemplateDecl>(Temp));
   1654     }
   1655 
   1656     if (SemaRef.CheckFunctionTemplateSpecialization(Function,
   1657                                                     &ExplicitArgs,
   1658                                                     Previous))
   1659       Function->setInvalidDecl();
   1660 
   1661     isExplicitSpecialization = true;
   1662 
   1663   } else if (TemplateParams || !FunctionTemplate) {
   1664     // Look only into the namespace where the friend would be declared to
   1665     // find a previous declaration. This is the innermost enclosing namespace,
   1666     // as described in ActOnFriendFunctionDecl.
   1667     SemaRef.LookupQualifiedName(Previous, DC);
   1668 
   1669     // In C++, the previous declaration we find might be a tag type
   1670     // (class or enum). In this case, the new declaration will hide the
   1671     // tag type. Note that this does does not apply if we're declaring a
   1672     // typedef (C++ [dcl.typedef]p4).
   1673     if (Previous.isSingleTagDecl())
   1674       Previous.clear();
   1675   }
   1676 
   1677   SemaRef.CheckFunctionDeclaration(/*Scope*/ nullptr, Function, Previous,
   1678                                    isExplicitSpecialization);
   1679 
   1680   NamedDecl *PrincipalDecl = (TemplateParams
   1681                               ? cast<NamedDecl>(FunctionTemplate)
   1682                               : Function);
   1683 
   1684   // If the original function was part of a friend declaration,
   1685   // inherit its namespace state and add it to the owner.
   1686   if (isFriend) {
   1687     PrincipalDecl->setObjectOfFriendDecl();
   1688     DC->makeDeclVisibleInContext(PrincipalDecl);
   1689 
   1690     bool QueuedInstantiation = false;
   1691 
   1692     // C++11 [temp.friend]p4 (DR329):
   1693     //   When a function is defined in a friend function declaration in a class
   1694     //   template, the function is instantiated when the function is odr-used.
   1695     //   The same restrictions on multiple declarations and definitions that
   1696     //   apply to non-template function declarations and definitions also apply
   1697     //   to these implicit definitions.
   1698     if (D->isThisDeclarationADefinition()) {
   1699       // Check for a function body.
   1700       const FunctionDecl *Definition = nullptr;
   1701       if (Function->isDefined(Definition) &&
   1702           Definition->getTemplateSpecializationKind() == TSK_Undeclared) {
   1703         SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
   1704             << Function->getDeclName();
   1705         SemaRef.Diag(Definition->getLocation(), diag::note_previous_definition);
   1706       }
   1707       // Check for redefinitions due to other instantiations of this or
   1708       // a similar friend function.
   1709       else for (auto R : Function->redecls()) {
   1710         if (R == Function)
   1711           continue;
   1712 
   1713         // If some prior declaration of this function has been used, we need
   1714         // to instantiate its definition.
   1715         if (!QueuedInstantiation && R->isUsed(false)) {
   1716           if (MemberSpecializationInfo *MSInfo =
   1717                   Function->getMemberSpecializationInfo()) {
   1718             if (MSInfo->getPointOfInstantiation().isInvalid()) {
   1719               SourceLocation Loc = R->getLocation(); // FIXME
   1720               MSInfo->setPointOfInstantiation(Loc);
   1721               SemaRef.PendingLocalImplicitInstantiations.push_back(
   1722                                                std::make_pair(Function, Loc));
   1723               QueuedInstantiation = true;
   1724             }
   1725           }
   1726         }
   1727 
   1728         // If some prior declaration of this function was a friend with an
   1729         // uninstantiated definition, reject it.
   1730         if (R->getFriendObjectKind()) {
   1731           if (const FunctionDecl *RPattern =
   1732                   R->getTemplateInstantiationPattern()) {
   1733             if (RPattern->isDefined(RPattern)) {
   1734               SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
   1735                 << Function->getDeclName();
   1736               SemaRef.Diag(R->getLocation(), diag::note_previous_definition);
   1737               break;
   1738             }
   1739           }
   1740         }
   1741       }
   1742     }
   1743   }
   1744 
   1745   if (Function->isLocalExternDecl() && !Function->getPreviousDecl())
   1746     DC->makeDeclVisibleInContext(PrincipalDecl);
   1747 
   1748   if (Function->isOverloadedOperator() && !DC->isRecord() &&
   1749       PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
   1750     PrincipalDecl->setNonMemberOperator();
   1751 
   1752   assert(!D->isDefaulted() && "only methods should be defaulted");
   1753   return Function;
   1754 }
   1755 
   1756 Decl *
   1757 TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
   1758                                       TemplateParameterList *TemplateParams,
   1759                                       bool IsClassScopeSpecialization) {
   1760   FunctionTemplateDecl *FunctionTemplate = D->getDescribedFunctionTemplate();
   1761   if (FunctionTemplate && !TemplateParams) {
   1762     // We are creating a function template specialization from a function
   1763     // template. Check whether there is already a function template
   1764     // specialization for this particular set of template arguments.
   1765     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
   1766 
   1767     void *InsertPos = nullptr;
   1768     FunctionDecl *SpecFunc
   1769       = FunctionTemplate->findSpecialization(Innermost, InsertPos);
   1770 
   1771     // If we already have a function template specialization, return it.
   1772     if (SpecFunc)
   1773       return SpecFunc;
   1774   }
   1775 
   1776   bool isFriend;
   1777   if (FunctionTemplate)
   1778     isFriend = (FunctionTemplate->getFriendObjectKind() != Decl::FOK_None);
   1779   else
   1780     isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
   1781 
   1782   bool MergeWithParentScope = (TemplateParams != nullptr) ||
   1783     !(isa<Decl>(Owner) &&
   1784       cast<Decl>(Owner)->isDefinedOutsideFunctionOrMethod());
   1785   LocalInstantiationScope Scope(SemaRef, MergeWithParentScope);
   1786 
   1787   // Instantiate enclosing template arguments for friends.
   1788   SmallVector<TemplateParameterList *, 4> TempParamLists;
   1789   unsigned NumTempParamLists = 0;
   1790   if (isFriend && (NumTempParamLists = D->getNumTemplateParameterLists())) {
   1791     TempParamLists.resize(NumTempParamLists);
   1792     for (unsigned I = 0; I != NumTempParamLists; ++I) {
   1793       TemplateParameterList *TempParams = D->getTemplateParameterList(I);
   1794       TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
   1795       if (!InstParams)
   1796         return nullptr;
   1797       TempParamLists[I] = InstParams;
   1798     }
   1799   }
   1800 
   1801   SmallVector<ParmVarDecl *, 4> Params;
   1802   TypeSourceInfo *TInfo = SubstFunctionType(D, Params);
   1803   if (!TInfo)
   1804     return nullptr;
   1805   QualType T = adjustFunctionTypeForInstantiation(SemaRef.Context, D, TInfo);
   1806 
   1807   NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc();
   1808   if (QualifierLoc) {
   1809     QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
   1810                                                  TemplateArgs);
   1811     if (!QualifierLoc)
   1812       return nullptr;
   1813   }
   1814 
   1815   DeclContext *DC = Owner;
   1816   if (isFriend) {
   1817     if (QualifierLoc) {
   1818       CXXScopeSpec SS;
   1819       SS.Adopt(QualifierLoc);
   1820       DC = SemaRef.computeDeclContext(SS);
   1821 
   1822       if (DC && SemaRef.RequireCompleteDeclContext(SS, DC))
   1823         return nullptr;
   1824     } else {
   1825       DC = SemaRef.FindInstantiatedContext(D->getLocation(),
   1826                                            D->getDeclContext(),
   1827                                            TemplateArgs);
   1828     }
   1829     if (!DC) return nullptr;
   1830   }
   1831 
   1832   // Build the instantiated method declaration.
   1833   CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
   1834   CXXMethodDecl *Method = nullptr;
   1835 
   1836   SourceLocation StartLoc = D->getInnerLocStart();
   1837   DeclarationNameInfo NameInfo
   1838     = SemaRef.SubstDeclarationNameInfo(D->getNameInfo(), TemplateArgs);
   1839   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
   1840     Method = CXXConstructorDecl::Create(SemaRef.Context, Record,
   1841                                         StartLoc, NameInfo, T, TInfo,
   1842                                         Constructor->isExplicit(),
   1843                                         Constructor->isInlineSpecified(),
   1844                                         false, Constructor->isConstexpr());
   1845   } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) {
   1846     Method = CXXDestructorDecl::Create(SemaRef.Context, Record,
   1847                                        StartLoc, NameInfo, T, TInfo,
   1848                                        Destructor->isInlineSpecified(),
   1849                                        false);
   1850   } else if (CXXConversionDecl *Conversion = dyn_cast<CXXConversionDecl>(D)) {
   1851     Method = CXXConversionDecl::Create(SemaRef.Context, Record,
   1852                                        StartLoc, NameInfo, T, TInfo,
   1853                                        Conversion->isInlineSpecified(),
   1854                                        Conversion->isExplicit(),
   1855                                        Conversion->isConstexpr(),
   1856                                        Conversion->getLocEnd());
   1857   } else {
   1858     StorageClass SC = D->isStatic() ? SC_Static : SC_None;
   1859     Method = CXXMethodDecl::Create(SemaRef.Context, Record,
   1860                                    StartLoc, NameInfo, T, TInfo,
   1861                                    SC, D->isInlineSpecified(),
   1862                                    D->isConstexpr(), D->getLocEnd());
   1863   }
   1864 
   1865   if (D->isInlined())
   1866     Method->setImplicitlyInline();
   1867 
   1868   if (QualifierLoc)
   1869     Method->setQualifierInfo(QualifierLoc);
   1870 
   1871   if (TemplateParams) {
   1872     // Our resulting instantiation is actually a function template, since we
   1873     // are substituting only the outer template parameters. For example, given
   1874     //
   1875     //   template<typename T>
   1876     //   struct X {
   1877     //     template<typename U> void f(T, U);
   1878     //   };
   1879     //
   1880     //   X<int> x;
   1881     //
   1882     // We are instantiating the member template "f" within X<int>, which means
   1883     // substituting int for T, but leaving "f" as a member function template.
   1884     // Build the function template itself.
   1885     FunctionTemplate = FunctionTemplateDecl::Create(SemaRef.Context, Record,
   1886                                                     Method->getLocation(),
   1887                                                     Method->getDeclName(),
   1888                                                     TemplateParams, Method);
   1889     if (isFriend) {
   1890       FunctionTemplate->setLexicalDeclContext(Owner);
   1891       FunctionTemplate->setObjectOfFriendDecl();
   1892     } else if (D->isOutOfLine())
   1893       FunctionTemplate->setLexicalDeclContext(D->getLexicalDeclContext());
   1894     Method->setDescribedFunctionTemplate(FunctionTemplate);
   1895   } else if (FunctionTemplate) {
   1896     // Record this function template specialization.
   1897     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
   1898     Method->setFunctionTemplateSpecialization(FunctionTemplate,
   1899                          TemplateArgumentList::CreateCopy(SemaRef.Context,
   1900                                                           Innermost),
   1901                                               /*InsertPos=*/nullptr);
   1902   } else if (!isFriend) {
   1903     // Record that this is an instantiation of a member function.
   1904     Method->setInstantiationOfMemberFunction(D, TSK_ImplicitInstantiation);
   1905   }
   1906 
   1907   // If we are instantiating a member function defined
   1908   // out-of-line, the instantiation will have the same lexical
   1909   // context (which will be a namespace scope) as the template.
   1910   if (isFriend) {
   1911     if (NumTempParamLists)
   1912       Method->setTemplateParameterListsInfo(
   1913           SemaRef.Context,
   1914           llvm::makeArrayRef(TempParamLists.data(), NumTempParamLists));
   1915 
   1916     Method->setLexicalDeclContext(Owner);
   1917     Method->setObjectOfFriendDecl();
   1918   } else if (D->isOutOfLine())
   1919     Method->setLexicalDeclContext(D->getLexicalDeclContext());
   1920 
   1921   // Attach the parameters
   1922   for (unsigned P = 0; P < Params.size(); ++P)
   1923     Params[P]->setOwningFunction(Method);
   1924   Method->setParams(Params);
   1925 
   1926   if (InitMethodInstantiation(Method, D))
   1927     Method->setInvalidDecl();
   1928 
   1929   LookupResult Previous(SemaRef, NameInfo, Sema::LookupOrdinaryName,
   1930                         Sema::ForRedeclaration);
   1931 
   1932   if (!FunctionTemplate || TemplateParams || isFriend) {
   1933     SemaRef.LookupQualifiedName(Previous, Record);
   1934 
   1935     // In C++, the previous declaration we find might be a tag type
   1936     // (class or enum). In this case, the new declaration will hide the
   1937     // tag type. Note that this does does not apply if we're declaring a
   1938     // typedef (C++ [dcl.typedef]p4).
   1939     if (Previous.isSingleTagDecl())
   1940       Previous.clear();
   1941   }
   1942 
   1943   if (!IsClassScopeSpecialization)
   1944     SemaRef.CheckFunctionDeclaration(nullptr, Method, Previous, false);
   1945 
   1946   if (D->isPure())
   1947     SemaRef.CheckPureMethod(Method, SourceRange());
   1948 
   1949   // Propagate access.  For a non-friend declaration, the access is
   1950   // whatever we're propagating from.  For a friend, it should be the
   1951   // previous declaration we just found.
   1952   if (isFriend && Method->getPreviousDecl())
   1953     Method->setAccess(Method->getPreviousDecl()->getAccess());
   1954   else
   1955     Method->setAccess(D->getAccess());
   1956   if (FunctionTemplate)
   1957     FunctionTemplate->setAccess(Method->getAccess());
   1958 
   1959   SemaRef.CheckOverrideControl(Method);
   1960 
   1961   // If a function is defined as defaulted or deleted, mark it as such now.
   1962   if (D->isExplicitlyDefaulted())
   1963     SemaRef.SetDeclDefaulted(Method, Method->getLocation());
   1964   if (D->isDeletedAsWritten())
   1965     SemaRef.SetDeclDeleted(Method, Method->getLocation());
   1966 
   1967   // If there's a function template, let our caller handle it.
   1968   if (FunctionTemplate) {
   1969     // do nothing
   1970 
   1971   // Don't hide a (potentially) valid declaration with an invalid one.
   1972   } else if (Method->isInvalidDecl() && !Previous.empty()) {
   1973     // do nothing
   1974 
   1975   // Otherwise, check access to friends and make them visible.
   1976   } else if (isFriend) {
   1977     // We only need to re-check access for methods which we didn't
   1978     // manage to match during parsing.
   1979     if (!D->getPreviousDecl())
   1980       SemaRef.CheckFriendAccess(Method);
   1981 
   1982     Record->makeDeclVisibleInContext(Method);
   1983 
   1984   // Otherwise, add the declaration.  We don't need to do this for
   1985   // class-scope specializations because we'll have matched them with
   1986   // the appropriate template.
   1987   } else if (!IsClassScopeSpecialization) {
   1988     Owner->addDecl(Method);
   1989   }
   1990 
   1991   return Method;
   1992 }
   1993 
   1994 Decl *TemplateDeclInstantiator::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
   1995   return VisitCXXMethodDecl(D);
   1996 }
   1997 
   1998 Decl *TemplateDeclInstantiator::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
   1999   return VisitCXXMethodDecl(D);
   2000 }
   2001 
   2002 Decl *TemplateDeclInstantiator::VisitCXXConversionDecl(CXXConversionDecl *D) {
   2003   return VisitCXXMethodDecl(D);
   2004 }
   2005 
   2006 Decl *TemplateDeclInstantiator::VisitParmVarDecl(ParmVarDecl *D) {
   2007   return SemaRef.SubstParmVarDecl(D, TemplateArgs, /*indexAdjustment*/ 0, None,
   2008                                   /*ExpectParameterPack=*/ false);
   2009 }
   2010 
   2011 Decl *TemplateDeclInstantiator::VisitTemplateTypeParmDecl(
   2012                                                     TemplateTypeParmDecl *D) {
   2013   // TODO: don't always clone when decls are refcounted.
   2014   assert(D->getTypeForDecl()->isTemplateTypeParmType());
   2015 
   2016   TemplateTypeParmDecl *Inst =
   2017     TemplateTypeParmDecl::Create(SemaRef.Context, Owner,
   2018                                  D->getLocStart(), D->getLocation(),
   2019                                  D->getDepth() - TemplateArgs.getNumLevels(),
   2020                                  D->getIndex(), D->getIdentifier(),
   2021                                  D->wasDeclaredWithTypename(),
   2022                                  D->isParameterPack());
   2023   Inst->setAccess(AS_public);
   2024 
   2025   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) {
   2026     TypeSourceInfo *InstantiatedDefaultArg =
   2027         SemaRef.SubstType(D->getDefaultArgumentInfo(), TemplateArgs,
   2028                           D->getDefaultArgumentLoc(), D->getDeclName());
   2029     if (InstantiatedDefaultArg)
   2030       Inst->setDefaultArgument(InstantiatedDefaultArg);
   2031   }
   2032 
   2033   // Introduce this template parameter's instantiation into the instantiation
   2034   // scope.
   2035   SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Inst);
   2036 
   2037   return Inst;
   2038 }
   2039 
   2040 Decl *TemplateDeclInstantiator::VisitNonTypeTemplateParmDecl(
   2041                                                  NonTypeTemplateParmDecl *D) {
   2042   // Substitute into the type of the non-type template parameter.
   2043   TypeLoc TL = D->getTypeSourceInfo()->getTypeLoc();
   2044   SmallVector<TypeSourceInfo *, 4> ExpandedParameterPackTypesAsWritten;
   2045   SmallVector<QualType, 4> ExpandedParameterPackTypes;
   2046   bool IsExpandedParameterPack = false;
   2047   TypeSourceInfo *DI;
   2048   QualType T;
   2049   bool Invalid = false;
   2050 
   2051   if (D->isExpandedParameterPack()) {
   2052     // The non-type template parameter pack is an already-expanded pack
   2053     // expansion of types. Substitute into each of the expanded types.
   2054     ExpandedParameterPackTypes.reserve(D->getNumExpansionTypes());
   2055     ExpandedParameterPackTypesAsWritten.reserve(D->getNumExpansionTypes());
   2056     for (unsigned I = 0, N = D->getNumExpansionTypes(); I != N; ++I) {
   2057       TypeSourceInfo *NewDI =SemaRef.SubstType(D->getExpansionTypeSourceInfo(I),
   2058                                                TemplateArgs,
   2059                                                D->getLocation(),
   2060                                                D->getDeclName());
   2061       if (!NewDI)
   2062         return nullptr;
   2063 
   2064       ExpandedParameterPackTypesAsWritten.push_back(NewDI);
   2065       QualType NewT =SemaRef.CheckNonTypeTemplateParameterType(NewDI->getType(),
   2066                                                               D->getLocation());
   2067       if (NewT.isNull())
   2068         return nullptr;
   2069       ExpandedParameterPackTypes.push_back(NewT);
   2070     }
   2071 
   2072     IsExpandedParameterPack = true;
   2073     DI = D->getTypeSourceInfo();
   2074     T = DI->getType();
   2075   } else if (D->isPackExpansion()) {
   2076     // The non-type template parameter pack's type is a pack expansion of types.
   2077     // Determine whether we need to expand this parameter pack into separate
   2078     // types.
   2079     PackExpansionTypeLoc Expansion = TL.castAs<PackExpansionTypeLoc>();
   2080     TypeLoc Pattern = Expansion.getPatternLoc();
   2081     SmallVector<UnexpandedParameterPack, 2> Unexpanded;
   2082     SemaRef.collectUnexpandedParameterPacks(Pattern, Unexpanded);
   2083 
   2084     // Determine whether the set of unexpanded parameter packs can and should
   2085     // be expanded.
   2086     bool Expand = true;
   2087     bool RetainExpansion = false;
   2088     Optional<unsigned> OrigNumExpansions
   2089       = Expansion.getTypePtr()->getNumExpansions();
   2090     Optional<unsigned> NumExpansions = OrigNumExpansions;
   2091     if (SemaRef.CheckParameterPacksForExpansion(Expansion.getEllipsisLoc(),
   2092                                                 Pattern.getSourceRange(),
   2093                                                 Unexpanded,
   2094                                                 TemplateArgs,
   2095                                                 Expand, RetainExpansion,
   2096                                                 NumExpansions))
   2097       return nullptr;
   2098 
   2099     if (Expand) {
   2100       for (unsigned I = 0; I != *NumExpansions; ++I) {
   2101         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, I);
   2102         TypeSourceInfo *NewDI = SemaRef.SubstType(Pattern, TemplateArgs,
   2103                                                   D->getLocation(),
   2104                                                   D->getDeclName());
   2105         if (!NewDI)
   2106           return nullptr;
   2107 
   2108         ExpandedParameterPackTypesAsWritten.push_back(NewDI);
   2109         QualType NewT = SemaRef.CheckNonTypeTemplateParameterType(
   2110                                                               NewDI->getType(),
   2111                                                               D->getLocation());
   2112         if (NewT.isNull())
   2113           return nullptr;
   2114         ExpandedParameterPackTypes.push_back(NewT);
   2115       }
   2116 
   2117       // Note that we have an expanded parameter pack. The "type" of this
   2118       // expanded parameter pack is the original expansion type, but callers
   2119       // will end up using the expanded parameter pack types for type-checking.
   2120       IsExpandedParameterPack = true;
   2121       DI = D->getTypeSourceInfo();
   2122       T = DI->getType();
   2123     } else {
   2124       // We cannot fully expand the pack expansion now, so substitute into the
   2125       // pattern and create a new pack expansion type.
   2126       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
   2127       TypeSourceInfo *NewPattern = SemaRef.SubstType(Pattern, TemplateArgs,
   2128                                                      D->getLocation(),
   2129                                                      D->getDeclName());
   2130       if (!NewPattern)
   2131         return nullptr;
   2132 
   2133       DI = SemaRef.CheckPackExpansion(NewPattern, Expansion.getEllipsisLoc(),
   2134                                       NumExpansions);
   2135       if (!DI)
   2136         return nullptr;
   2137 
   2138       T = DI->getType();
   2139     }
   2140   } else {
   2141     // Simple case: substitution into a parameter that is not a parameter pack.
   2142     DI = SemaRef.SubstType(D->getTypeSourceInfo(), TemplateArgs,
   2143                            D->getLocation(), D->getDeclName());
   2144     if (!DI)
   2145       return nullptr;
   2146 
   2147     // Check that this type is acceptable for a non-type template parameter.
   2148     T = SemaRef.CheckNonTypeTemplateParameterType(DI->getType(),
   2149                                                   D->getLocation());
   2150     if (T.isNull()) {
   2151       T = SemaRef.Context.IntTy;
   2152       Invalid = true;
   2153     }
   2154   }
   2155 
   2156   NonTypeTemplateParmDecl *Param;
   2157   if (IsExpandedParameterPack)
   2158     Param = NonTypeTemplateParmDecl::Create(
   2159         SemaRef.Context, Owner, D->getInnerLocStart(), D->getLocation(),
   2160         D->getDepth() - TemplateArgs.getNumLevels(), D->getPosition(),
   2161         D->getIdentifier(), T, DI, ExpandedParameterPackTypes,
   2162         ExpandedParameterPackTypesAsWritten);
   2163   else
   2164     Param = NonTypeTemplateParmDecl::Create(SemaRef.Context, Owner,
   2165                                             D->getInnerLocStart(),
   2166                                             D->getLocation(),
   2167                                     D->getDepth() - TemplateArgs.getNumLevels(),
   2168                                             D->getPosition(),
   2169                                             D->getIdentifier(), T,
   2170                                             D->isParameterPack(), DI);
   2171 
   2172   Param->setAccess(AS_public);
   2173   if (Invalid)
   2174     Param->setInvalidDecl();
   2175 
   2176   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) {
   2177     EnterExpressionEvaluationContext ConstantEvaluated(SemaRef,
   2178                                                        Sema::ConstantEvaluated);
   2179     ExprResult Value = SemaRef.SubstExpr(D->getDefaultArgument(), TemplateArgs);
   2180     if (!Value.isInvalid())
   2181       Param->setDefaultArgument(Value.get());
   2182   }
   2183 
   2184   // Introduce this template parameter's instantiation into the instantiation
   2185   // scope.
   2186   SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Param);
   2187   return Param;
   2188 }
   2189 
   2190 static void collectUnexpandedParameterPacks(
   2191     Sema &S,
   2192     TemplateParameterList *Params,
   2193     SmallVectorImpl<UnexpandedParameterPack> &Unexpanded) {
   2194   for (const auto &P : *Params) {
   2195     if (P->isTemplateParameterPack())
   2196       continue;
   2197     if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(P))
   2198       S.collectUnexpandedParameterPacks(NTTP->getTypeSourceInfo()->getTypeLoc(),
   2199                                         Unexpanded);
   2200     if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(P))
   2201       collectUnexpandedParameterPacks(S, TTP->getTemplateParameters(),
   2202                                       Unexpanded);
   2203   }
   2204 }
   2205 
   2206 Decl *
   2207 TemplateDeclInstantiator::VisitTemplateTemplateParmDecl(
   2208                                                   TemplateTemplateParmDecl *D) {
   2209   // Instantiate the template parameter list of the template template parameter.
   2210   TemplateParameterList *TempParams = D->getTemplateParameters();
   2211   TemplateParameterList *InstParams;
   2212   SmallVector<TemplateParameterList*, 8> ExpandedParams;
   2213 
   2214   bool IsExpandedParameterPack = false;
   2215 
   2216   if (D->isExpandedParameterPack()) {
   2217     // The template template parameter pack is an already-expanded pack
   2218     // expansion of template parameters. Substitute into each of the expanded
   2219     // parameters.
   2220     ExpandedParams.reserve(D->getNumExpansionTemplateParameters());
   2221     for (unsigned I = 0, N = D->getNumExpansionTemplateParameters();
   2222          I != N; ++I) {
   2223       LocalInstantiationScope Scope(SemaRef);
   2224       TemplateParameterList *Expansion =
   2225         SubstTemplateParams(D->getExpansionTemplateParameters(I));
   2226       if (!Expansion)
   2227         return nullptr;
   2228       ExpandedParams.push_back(Expansion);
   2229     }
   2230 
   2231     IsExpandedParameterPack = true;
   2232     InstParams = TempParams;
   2233   } else if (D->isPackExpansion()) {
   2234     // The template template parameter pack expands to a pack of template
   2235     // template parameters. Determine whether we need to expand this parameter
   2236     // pack into separate parameters.
   2237     SmallVector<UnexpandedParameterPack, 2> Unexpanded;
   2238     collectUnexpandedParameterPacks(SemaRef, D->getTemplateParameters(),
   2239                                     Unexpanded);
   2240 
   2241     // Determine whether the set of unexpanded parameter packs can and should
   2242     // be expanded.
   2243     bool Expand = true;
   2244     bool RetainExpansion = false;
   2245     Optional<unsigned> NumExpansions;
   2246     if (SemaRef.CheckParameterPacksForExpansion(D->getLocation(),
   2247                                                 TempParams->getSourceRange(),
   2248                                                 Unexpanded,
   2249                                                 TemplateArgs,
   2250                                                 Expand, RetainExpansion,
   2251                                                 NumExpansions))
   2252       return nullptr;
   2253 
   2254     if (Expand) {
   2255       for (unsigned I = 0; I != *NumExpansions; ++I) {
   2256         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, I);
   2257         LocalInstantiationScope Scope(SemaRef);
   2258         TemplateParameterList *Expansion = SubstTemplateParams(TempParams);
   2259         if (!Expansion)
   2260           return nullptr;
   2261         ExpandedParams.push_back(Expansion);
   2262       }
   2263 
   2264       // Note that we have an expanded parameter pack. The "type" of this
   2265       // expanded parameter pack is the original expansion type, but callers
   2266       // will end up using the expanded parameter pack types for type-checking.
   2267       IsExpandedParameterPack = true;
   2268       InstParams = TempParams;
   2269     } else {
   2270       // We cannot fully expand the pack expansion now, so just substitute
   2271       // into the pattern.
   2272       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
   2273 
   2274       LocalInstantiationScope Scope(SemaRef);
   2275       InstParams = SubstTemplateParams(TempParams);
   2276       if (!InstParams)
   2277         return nullptr;
   2278     }
   2279   } else {
   2280     // Perform the actual substitution of template parameters within a new,
   2281     // local instantiation scope.
   2282     LocalInstantiationScope Scope(SemaRef);
   2283     InstParams = SubstTemplateParams(TempParams);
   2284     if (!InstParams)
   2285       return nullptr;
   2286   }
   2287 
   2288   // Build the template template parameter.
   2289   TemplateTemplateParmDecl *Param;
   2290   if (IsExpandedParameterPack)
   2291     Param = TemplateTemplateParmDecl::Create(SemaRef.Context, Owner,
   2292                                              D->getLocation(),
   2293                                    D->getDepth() - TemplateArgs.getNumLevels(),
   2294                                              D->getPosition(),
   2295                                              D->getIdentifier(), InstParams,
   2296                                              ExpandedParams);
   2297   else
   2298     Param = TemplateTemplateParmDecl::Create(SemaRef.Context, Owner,
   2299                                              D->getLocation(),
   2300                                    D->getDepth() - TemplateArgs.getNumLevels(),
   2301                                              D->getPosition(),
   2302                                              D->isParameterPack(),
   2303                                              D->getIdentifier(), InstParams);
   2304   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) {
   2305     NestedNameSpecifierLoc QualifierLoc =
   2306         D->getDefaultArgument().getTemplateQualifierLoc();
   2307     QualifierLoc =
   2308         SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc, TemplateArgs);
   2309     TemplateName TName = SemaRef.SubstTemplateName(
   2310         QualifierLoc, D->getDefaultArgument().getArgument().getAsTemplate(),
   2311         D->getDefaultArgument().getTemplateNameLoc(), TemplateArgs);
   2312     if (!TName.isNull())
   2313       Param->setDefaultArgument(
   2314           SemaRef.Context,
   2315           TemplateArgumentLoc(TemplateArgument(TName),
   2316                               D->getDefaultArgument().getTemplateQualifierLoc(),
   2317                               D->getDefaultArgument().getTemplateNameLoc()));
   2318   }
   2319   Param->setAccess(AS_public);
   2320 
   2321   // Introduce this template parameter's instantiation into the instantiation
   2322   // scope.
   2323   SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Param);
   2324 
   2325   return Param;
   2326 }
   2327 
   2328 Decl *TemplateDeclInstantiator::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
   2329   // Using directives are never dependent (and never contain any types or
   2330   // expressions), so they require no explicit instantiation work.
   2331 
   2332   UsingDirectiveDecl *Inst
   2333     = UsingDirectiveDecl::Create(SemaRef.Context, Owner, D->getLocation(),
   2334                                  D->getNamespaceKeyLocation(),
   2335                                  D->getQualifierLoc(),
   2336                                  D->getIdentLocation(),
   2337                                  D->getNominatedNamespace(),
   2338                                  D->getCommonAncestor());
   2339 
   2340   // Add the using directive to its declaration context
   2341   // only if this is not a function or method.
   2342   if (!Owner->isFunctionOrMethod())
   2343     Owner->addDecl(Inst);
   2344 
   2345   return Inst;
   2346 }
   2347 
   2348 Decl *TemplateDeclInstantiator::VisitUsingDecl(UsingDecl *D) {
   2349 
   2350   // The nested name specifier may be dependent, for example
   2351   //     template <typename T> struct t {
   2352   //       struct s1 { T f1(); };
   2353   //       struct s2 : s1 { using s1::f1; };
   2354   //     };
   2355   //     template struct t<int>;
   2356   // Here, in using s1::f1, s1 refers to t<T>::s1;
   2357   // we need to substitute for t<int>::s1.
   2358   NestedNameSpecifierLoc QualifierLoc
   2359     = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(),
   2360                                           TemplateArgs);
   2361   if (!QualifierLoc)
   2362     return nullptr;
   2363 
   2364   // For an inheriting constructor declaration, the name of the using
   2365   // declaration is the name of a constructor in this class, not in the
   2366   // base class.
   2367   DeclarationNameInfo NameInfo = D->getNameInfo();
   2368   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName)
   2369     if (auto *RD = dyn_cast<CXXRecordDecl>(SemaRef.CurContext))
   2370       NameInfo.setName(SemaRef.Context.DeclarationNames.getCXXConstructorName(
   2371           SemaRef.Context.getCanonicalType(SemaRef.Context.getRecordType(RD))));
   2372 
   2373   // We only need to do redeclaration lookups if we're in a class
   2374   // scope (in fact, it's not really even possible in non-class
   2375   // scopes).
   2376   bool CheckRedeclaration = Owner->isRecord();
   2377 
   2378   LookupResult Prev(SemaRef, NameInfo, Sema::LookupUsingDeclName,
   2379                     Sema::ForRedeclaration);
   2380 
   2381   UsingDecl *NewUD = UsingDecl::Create(SemaRef.Context, Owner,
   2382                                        D->getUsingLoc(),
   2383                                        QualifierLoc,
   2384                                        NameInfo,
   2385                                        D->hasTypename());
   2386 
   2387   CXXScopeSpec SS;
   2388   SS.Adopt(QualifierLoc);
   2389   if (CheckRedeclaration) {
   2390     Prev.setHideTags(false);
   2391     SemaRef.LookupQualifiedName(Prev, Owner);
   2392 
   2393     // Check for invalid redeclarations.
   2394     if (SemaRef.CheckUsingDeclRedeclaration(D->getUsingLoc(),
   2395                                             D->hasTypename(), SS,
   2396                                             D->getLocation(), Prev))
   2397       NewUD->setInvalidDecl();
   2398 
   2399   }
   2400 
   2401   if (!NewUD->isInvalidDecl() &&
   2402       SemaRef.CheckUsingDeclQualifier(D->getUsingLoc(), SS, NameInfo,
   2403                                       D->getLocation()))
   2404     NewUD->setInvalidDecl();
   2405 
   2406   SemaRef.Context.setInstantiatedFromUsingDecl(NewUD, D);
   2407   NewUD->setAccess(D->getAccess());
   2408   Owner->addDecl(NewUD);
   2409 
   2410   // Don't process the shadow decls for an invalid decl.
   2411   if (NewUD->isInvalidDecl())
   2412     return NewUD;
   2413 
   2414   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName)
   2415     SemaRef.CheckInheritingConstructorUsingDecl(NewUD);
   2416 
   2417   bool isFunctionScope = Owner->isFunctionOrMethod();
   2418 
   2419   // Process the shadow decls.
   2420   for (auto *Shadow : D->shadows()) {
   2421     // FIXME: UsingShadowDecl doesn't preserve its immediate target, so
   2422     // reconstruct it in the case where it matters.
   2423     NamedDecl *OldTarget = Shadow->getTargetDecl();
   2424     if (auto *CUSD = dyn_cast<ConstructorUsingShadowDecl>(Shadow))
   2425       if (auto *BaseShadow = CUSD->getNominatedBaseClassShadowDecl())
   2426         OldTarget = BaseShadow;
   2427 
   2428     NamedDecl *InstTarget =
   2429         cast_or_null<NamedDecl>(SemaRef.FindInstantiatedDecl(
   2430             Shadow->getLocation(), OldTarget, TemplateArgs));
   2431     if (!InstTarget)
   2432       return nullptr;
   2433 
   2434     UsingShadowDecl *PrevDecl = nullptr;
   2435     if (CheckRedeclaration) {
   2436       if (SemaRef.CheckUsingShadowDecl(NewUD, InstTarget, Prev, PrevDecl))
   2437         continue;
   2438     } else if (UsingShadowDecl *OldPrev =
   2439                    getPreviousDeclForInstantiation(Shadow)) {
   2440       PrevDecl = cast_or_null<UsingShadowDecl>(SemaRef.FindInstantiatedDecl(
   2441           Shadow->getLocation(), OldPrev, TemplateArgs));
   2442     }
   2443 
   2444     UsingShadowDecl *InstShadow =
   2445         SemaRef.BuildUsingShadowDecl(/*Scope*/nullptr, NewUD, InstTarget,
   2446                                      PrevDecl);
   2447     SemaRef.Context.setInstantiatedFromUsingShadowDecl(InstShadow, Shadow);
   2448 
   2449     if (isFunctionScope)
   2450       SemaRef.CurrentInstantiationScope->InstantiatedLocal(Shadow, InstShadow);
   2451   }
   2452 
   2453   return NewUD;
   2454 }
   2455 
   2456 Decl *TemplateDeclInstantiator::VisitUsingShadowDecl(UsingShadowDecl *D) {
   2457   // Ignore these;  we handle them in bulk when processing the UsingDecl.
   2458   return nullptr;
   2459 }
   2460 
   2461 Decl *TemplateDeclInstantiator::VisitConstructorUsingShadowDecl(
   2462     ConstructorUsingShadowDecl *D) {
   2463   // Ignore these;  we handle them in bulk when processing the UsingDecl.
   2464   return nullptr;
   2465 }
   2466 
   2467 Decl * TemplateDeclInstantiator
   2468     ::VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D) {
   2469   NestedNameSpecifierLoc QualifierLoc
   2470     = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(),
   2471                                           TemplateArgs);
   2472   if (!QualifierLoc)
   2473     return nullptr;
   2474 
   2475   CXXScopeSpec SS;
   2476   SS.Adopt(QualifierLoc);
   2477 
   2478   // Since NameInfo refers to a typename, it cannot be a C++ special name.
   2479   // Hence, no transformation is required for it.
   2480   DeclarationNameInfo NameInfo(D->getDeclName(), D->getLocation());
   2481   NamedDecl *UD =
   2482     SemaRef.BuildUsingDeclaration(/*Scope*/ nullptr, D->getAccess(),
   2483                                   D->getUsingLoc(), SS, NameInfo, nullptr,
   2484                                   /*instantiation*/ true,
   2485                                   /*typename*/ true, D->getTypenameLoc());
   2486   if (UD)
   2487     SemaRef.Context.setInstantiatedFromUsingDecl(cast<UsingDecl>(UD), D);
   2488 
   2489   return UD;
   2490 }
   2491 
   2492 Decl * TemplateDeclInstantiator
   2493     ::VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D) {
   2494   NestedNameSpecifierLoc QualifierLoc
   2495       = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(), TemplateArgs);
   2496   if (!QualifierLoc)
   2497     return nullptr;
   2498 
   2499   CXXScopeSpec SS;
   2500   SS.Adopt(QualifierLoc);
   2501 
   2502   DeclarationNameInfo NameInfo
   2503     = SemaRef.SubstDeclarationNameInfo(D->getNameInfo(), TemplateArgs);
   2504 
   2505   NamedDecl *UD =
   2506     SemaRef.BuildUsingDeclaration(/*Scope*/ nullptr, D->getAccess(),
   2507                                   D->getUsingLoc(), SS, NameInfo, nullptr,
   2508                                   /*instantiation*/ true,
   2509                                   /*typename*/ false, SourceLocation());
   2510   if (UD)
   2511     SemaRef.Context.setInstantiatedFromUsingDecl(cast<UsingDecl>(UD), D);
   2512 
   2513   return UD;
   2514 }
   2515 
   2516 
   2517 Decl *TemplateDeclInstantiator::VisitClassScopeFunctionSpecializationDecl(
   2518                                      ClassScopeFunctionSpecializationDecl *Decl) {
   2519   CXXMethodDecl *OldFD = Decl->getSpecialization();
   2520   CXXMethodDecl *NewFD =
   2521     cast_or_null<CXXMethodDecl>(VisitCXXMethodDecl(OldFD, nullptr, true));
   2522   if (!NewFD)
   2523     return nullptr;
   2524 
   2525   LookupResult Previous(SemaRef, NewFD->getNameInfo(), Sema::LookupOrdinaryName,
   2526                         Sema::ForRedeclaration);
   2527 
   2528   TemplateArgumentListInfo TemplateArgs;
   2529   TemplateArgumentListInfo *TemplateArgsPtr = nullptr;
   2530   if (Decl->hasExplicitTemplateArgs()) {
   2531     TemplateArgs = Decl->templateArgs();
   2532     TemplateArgsPtr = &TemplateArgs;
   2533   }
   2534 
   2535   SemaRef.LookupQualifiedName(Previous, SemaRef.CurContext);
   2536   if (SemaRef.CheckFunctionTemplateSpecialization(NewFD, TemplateArgsPtr,
   2537                                                   Previous)) {
   2538     NewFD->setInvalidDecl();
   2539     return NewFD;
   2540   }
   2541 
   2542   // Associate the specialization with the pattern.
   2543   FunctionDecl *Specialization = cast<FunctionDecl>(Previous.getFoundDecl());
   2544   assert(Specialization && "Class scope Specialization is null");
   2545   SemaRef.Context.setClassScopeSpecializationPattern(Specialization, OldFD);
   2546 
   2547   return NewFD;
   2548 }
   2549 
   2550 Decl *TemplateDeclInstantiator::VisitOMPThreadPrivateDecl(
   2551                                      OMPThreadPrivateDecl *D) {
   2552   SmallVector<Expr *, 5> Vars;
   2553   for (auto *I : D->varlists()) {
   2554     Expr *Var = SemaRef.SubstExpr(I, TemplateArgs).get();
   2555     assert(isa<DeclRefExpr>(Var) && "threadprivate arg is not a DeclRefExpr");
   2556     Vars.push_back(Var);
   2557   }
   2558 
   2559   OMPThreadPrivateDecl *TD =
   2560     SemaRef.CheckOMPThreadPrivateDecl(D->getLocation(), Vars);
   2561 
   2562   TD->setAccess(AS_public);
   2563   Owner->addDecl(TD);
   2564 
   2565   return TD;
   2566 }
   2567 
   2568 Decl *TemplateDeclInstantiator::VisitOMPDeclareReductionDecl(
   2569     OMPDeclareReductionDecl *D) {
   2570   // Instantiate type and check if it is allowed.
   2571   QualType SubstReductionType = SemaRef.ActOnOpenMPDeclareReductionType(
   2572       D->getLocation(),
   2573       ParsedType::make(SemaRef.SubstType(D->getType(), TemplateArgs,
   2574                                          D->getLocation(), DeclarationName())));
   2575   if (SubstReductionType.isNull())
   2576     return nullptr;
   2577   bool IsCorrect = !SubstReductionType.isNull();
   2578   // Create instantiated copy.
   2579   std::pair<QualType, SourceLocation> ReductionTypes[] = {
   2580       std::make_pair(SubstReductionType, D->getLocation())};
   2581   auto *PrevDeclInScope = D->getPrevDeclInScope();
   2582   if (PrevDeclInScope && !PrevDeclInScope->isInvalidDecl()) {
   2583     PrevDeclInScope = cast<OMPDeclareReductionDecl>(
   2584         SemaRef.CurrentInstantiationScope->findInstantiationOf(PrevDeclInScope)
   2585             ->get<Decl *>());
   2586   }
   2587   auto DRD = SemaRef.ActOnOpenMPDeclareReductionDirectiveStart(
   2588       /*S=*/nullptr, Owner, D->getDeclName(), ReductionTypes, D->getAccess(),
   2589       PrevDeclInScope);
   2590   auto *NewDRD = cast<OMPDeclareReductionDecl>(DRD.get().getSingleDecl());
   2591   if (isDeclWithinFunction(NewDRD))
   2592     SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, NewDRD);
   2593   Expr *SubstCombiner = nullptr;
   2594   Expr *SubstInitializer = nullptr;
   2595   // Combiners instantiation sequence.
   2596   if (D->getCombiner()) {
   2597     SemaRef.ActOnOpenMPDeclareReductionCombinerStart(
   2598         /*S=*/nullptr, NewDRD);
   2599     const char *Names[] = {"omp_in", "omp_out"};
   2600     for (auto &Name : Names) {
   2601       DeclarationName DN(&SemaRef.Context.Idents.get(Name));
   2602       auto OldLookup = D->lookup(DN);
   2603       auto Lookup = NewDRD->lookup(DN);
   2604       if (!OldLookup.empty() && !Lookup.empty()) {
   2605         assert(Lookup.size() == 1 && OldLookup.size() == 1);
   2606         SemaRef.CurrentInstantiationScope->InstantiatedLocal(OldLookup.front(),
   2607                                                              Lookup.front());
   2608       }
   2609     }
   2610     SubstCombiner = SemaRef.SubstExpr(D->getCombiner(), TemplateArgs).get();
   2611     SemaRef.ActOnOpenMPDeclareReductionCombinerEnd(NewDRD, SubstCombiner);
   2612     // Initializers instantiation sequence.
   2613     if (D->getInitializer()) {
   2614       SemaRef.ActOnOpenMPDeclareReductionInitializerStart(
   2615           /*S=*/nullptr, NewDRD);
   2616       const char *Names[] = {"omp_orig", "omp_priv"};
   2617       for (auto &Name : Names) {
   2618         DeclarationName DN(&SemaRef.Context.Idents.get(Name));
   2619         auto OldLookup = D->lookup(DN);
   2620         auto Lookup = NewDRD->lookup(DN);
   2621         if (!OldLookup.empty() && !Lookup.empty()) {
   2622           assert(Lookup.size() == 1 && OldLookup.size() == 1);
   2623           SemaRef.CurrentInstantiationScope->InstantiatedLocal(
   2624               OldLookup.front(), Lookup.front());
   2625         }
   2626       }
   2627       SubstInitializer =
   2628           SemaRef.SubstExpr(D->getInitializer(), TemplateArgs).get();
   2629       SemaRef.ActOnOpenMPDeclareReductionInitializerEnd(NewDRD,
   2630                                                         SubstInitializer);
   2631     }
   2632     IsCorrect = IsCorrect && SubstCombiner &&
   2633                 (!D->getInitializer() || SubstInitializer);
   2634   } else
   2635     IsCorrect = false;
   2636 
   2637   (void)SemaRef.ActOnOpenMPDeclareReductionDirectiveEnd(/*S=*/nullptr, DRD,
   2638                                                         IsCorrect);
   2639 
   2640   return NewDRD;
   2641 }
   2642 
   2643 Decl *TemplateDeclInstantiator::VisitOMPCapturedExprDecl(
   2644     OMPCapturedExprDecl * /*D*/) {
   2645   llvm_unreachable("Should not be met in templates");
   2646 }
   2647 
   2648 Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D) {
   2649   return VisitFunctionDecl(D, nullptr);
   2650 }
   2651 
   2652 Decl *TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D) {
   2653   return VisitCXXMethodDecl(D, nullptr);
   2654 }
   2655 
   2656 Decl *TemplateDeclInstantiator::VisitRecordDecl(RecordDecl *D) {
   2657   llvm_unreachable("There are only CXXRecordDecls in C++");
   2658 }
   2659 
   2660 Decl *
   2661 TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(
   2662     ClassTemplateSpecializationDecl *D) {
   2663   // As a MS extension, we permit class-scope explicit specialization
   2664   // of member class templates.
   2665   ClassTemplateDecl *ClassTemplate = D->getSpecializedTemplate();
   2666   assert(ClassTemplate->getDeclContext()->isRecord() &&
   2667          D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&
   2668          "can only instantiate an explicit specialization "
   2669          "for a member class template");
   2670 
   2671   // Lookup the already-instantiated declaration in the instantiation
   2672   // of the class template. FIXME: Diagnose or assert if this fails?
   2673   DeclContext::lookup_result Found
   2674     = Owner->lookup(ClassTemplate->getDeclName());
   2675   if (Found.empty())
   2676     return nullptr;
   2677   ClassTemplateDecl *InstClassTemplate
   2678     = dyn_cast<ClassTemplateDecl>(Found.front());
   2679   if (!InstClassTemplate)
   2680     return nullptr;
   2681 
   2682   // Substitute into the template arguments of the class template explicit
   2683   // specialization.
   2684   TemplateSpecializationTypeLoc Loc = D->getTypeAsWritten()->getTypeLoc().
   2685                                         castAs<TemplateSpecializationTypeLoc>();
   2686   TemplateArgumentListInfo InstTemplateArgs(Loc.getLAngleLoc(),
   2687                                             Loc.getRAngleLoc());
   2688   SmallVector<TemplateArgumentLoc, 4> ArgLocs;
   2689   for (unsigned I = 0; I != Loc.getNumArgs(); ++I)
   2690     ArgLocs.push_back(Loc.getArgLoc(I));
   2691   if (SemaRef.Subst(ArgLocs.data(), ArgLocs.size(),
   2692                     InstTemplateArgs, TemplateArgs))
   2693     return nullptr;
   2694 
   2695   // Check that the template argument list is well-formed for this
   2696   // class template.
   2697   SmallVector<TemplateArgument, 4> Converted;
   2698   if (SemaRef.CheckTemplateArgumentList(InstClassTemplate,
   2699                                         D->getLocation(),
   2700                                         InstTemplateArgs,
   2701                                         false,
   2702                                         Converted))
   2703     return nullptr;
   2704 
   2705   // Figure out where to insert this class template explicit specialization
   2706   // in the member template's set of class template explicit specializations.
   2707   void *InsertPos = nullptr;
   2708   ClassTemplateSpecializationDecl *PrevDecl =
   2709       InstClassTemplate->findSpecialization(Converted, InsertPos);
   2710 
   2711   // Check whether we've already seen a conflicting instantiation of this
   2712   // declaration (for instance, if there was a prior implicit instantiation).
   2713   bool Ignored;
   2714   if (PrevDecl &&
   2715       SemaRef.CheckSpecializationInstantiationRedecl(D->getLocation(),
   2716                                                      D->getSpecializationKind(),
   2717                                                      PrevDecl,
   2718                                                      PrevDecl->getSpecializationKind(),
   2719                                                      PrevDecl->getPointOfInstantiation(),
   2720                                                      Ignored))
   2721     return nullptr;
   2722 
   2723   // If PrevDecl was a definition and D is also a definition, diagnose.
   2724   // This happens in cases like:
   2725   //
   2726   //   template<typename T, typename U>
   2727   //   struct Outer {
   2728   //     template<typename X> struct Inner;
   2729   //     template<> struct Inner<T> {};
   2730   //     template<> struct Inner<U> {};
   2731   //   };
   2732   //
   2733   //   Outer<int, int> outer; // error: the explicit specializations of Inner
   2734   //                          // have the same signature.
   2735   if (PrevDecl && PrevDecl->getDefinition() &&
   2736       D->isThisDeclarationADefinition()) {
   2737     SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;
   2738     SemaRef.Diag(PrevDecl->getDefinition()->getLocation(),
   2739                  diag::note_previous_definition);
   2740     return nullptr;
   2741   }
   2742 
   2743   // Create the class template partial specialization declaration.
   2744   ClassTemplateSpecializationDecl *InstD
   2745     = ClassTemplateSpecializationDecl::Create(SemaRef.Context,
   2746                                               D->getTagKind(),
   2747                                               Owner,
   2748                                               D->getLocStart(),
   2749                                               D->getLocation(),
   2750                                               InstClassTemplate,
   2751                                               Converted,
   2752                                               PrevDecl);
   2753 
   2754   // Add this partial specialization to the set of class template partial
   2755   // specializations.
   2756   if (!PrevDecl)
   2757     InstClassTemplate->AddSpecialization(InstD, InsertPos);
   2758 
   2759   // Substitute the nested name specifier, if any.
   2760   if (SubstQualifier(D, InstD))
   2761     return nullptr;
   2762 
   2763   // Build the canonical type that describes the converted template
   2764   // arguments of the class template explicit specialization.
   2765   QualType CanonType = SemaRef.Context.getTemplateSpecializationType(
   2766       TemplateName(InstClassTemplate), Converted,
   2767       SemaRef.Context.getRecordType(InstD));
   2768 
   2769   // Build the fully-sugared type for this class template
   2770   // specialization as the user wrote in the specialization
   2771   // itself. This means that we'll pretty-print the type retrieved
   2772   // from the specialization's declaration the way that the user
   2773   // actually wrote the specialization, rather than formatting the
   2774   // name based on the "canonical" representation used to store the
   2775   // template arguments in the specialization.
   2776   TypeSourceInfo *WrittenTy = SemaRef.Context.getTemplateSpecializationTypeInfo(
   2777       TemplateName(InstClassTemplate), D->getLocation(), InstTemplateArgs,
   2778       CanonType);
   2779 
   2780   InstD->setAccess(D->getAccess());
   2781   InstD->setInstantiationOfMemberClass(D, TSK_ImplicitInstantiation);
   2782   InstD->setSpecializationKind(D->getSpecializationKind());
   2783   InstD->setTypeAsWritten(WrittenTy);
   2784   InstD->setExternLoc(D->getExternLoc());
   2785   InstD->setTemplateKeywordLoc(D->getTemplateKeywordLoc());
   2786 
   2787   Owner->addDecl(InstD);
   2788 
   2789   // Instantiate the members of the class-scope explicit specialization eagerly.
   2790   // We don't have support for lazy instantiation of an explicit specialization
   2791   // yet, and MSVC eagerly instantiates in this case.
   2792   if (D->isThisDeclarationADefinition() &&
   2793       SemaRef.InstantiateClass(D->getLocation(), InstD, D, TemplateArgs,
   2794                                TSK_ImplicitInstantiation,
   2795                                /*Complain=*/true))
   2796     return nullptr;
   2797 
   2798   return InstD;
   2799 }
   2800 
   2801 Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
   2802     VarTemplateSpecializationDecl *D) {
   2803 
   2804   TemplateArgumentListInfo VarTemplateArgsInfo;
   2805   VarTemplateDecl *VarTemplate = D->getSpecializedTemplate();
   2806   assert(VarTemplate &&
   2807          "A template specialization without specialized template?");
   2808 
   2809   // Substitute the current template arguments.
   2810   const TemplateArgumentListInfo &TemplateArgsInfo = D->getTemplateArgsInfo();
   2811   VarTemplateArgsInfo.setLAngleLoc(TemplateArgsInfo.getLAngleLoc());
   2812   VarTemplateArgsInfo.setRAngleLoc(TemplateArgsInfo.getRAngleLoc());
   2813 
   2814   if (SemaRef.Subst(TemplateArgsInfo.getArgumentArray(),
   2815                     TemplateArgsInfo.size(), VarTemplateArgsInfo, TemplateArgs))
   2816     return nullptr;
   2817 
   2818   // Check that the template argument list is well-formed for this template.
   2819   SmallVector<TemplateArgument, 4> Converted;
   2820   if (SemaRef.CheckTemplateArgumentList(
   2821           VarTemplate, VarTemplate->getLocStart(),
   2822           const_cast<TemplateArgumentListInfo &>(VarTemplateArgsInfo), false,
   2823           Converted))
   2824     return nullptr;
   2825 
   2826   // Find the variable template specialization declaration that
   2827   // corresponds to these arguments.
   2828   void *InsertPos = nullptr;
   2829   if (VarTemplateSpecializationDecl *VarSpec = VarTemplate->findSpecialization(
   2830           Converted, InsertPos))
   2831     // If we already have a variable template specialization, return it.
   2832     return VarSpec;
   2833 
   2834   return VisitVarTemplateSpecializationDecl(VarTemplate, D, InsertPos,
   2835                                             VarTemplateArgsInfo, Converted);
   2836 }
   2837 
   2838 Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
   2839     VarTemplateDecl *VarTemplate, VarDecl *D, void *InsertPos,
   2840     const TemplateArgumentListInfo &TemplateArgsInfo,
   2841     ArrayRef<TemplateArgument> Converted) {
   2842 
   2843   // Do substitution on the type of the declaration
   2844   TypeSourceInfo *DI =
   2845       SemaRef.SubstType(D->getTypeSourceInfo(), TemplateArgs,
   2846                         D->getTypeSpecStartLoc(), D->getDeclName());
   2847   if (!DI)
   2848     return nullptr;
   2849 
   2850   if (DI->getType()->isFunctionType()) {
   2851     SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function)
   2852         << D->isStaticDataMember() << DI->getType();
   2853     return nullptr;
   2854   }
   2855 
   2856   // Build the instantiated declaration
   2857   VarTemplateSpecializationDecl *Var = VarTemplateSpecializationDecl::Create(
   2858       SemaRef.Context, Owner, D->getInnerLocStart(), D->getLocation(),
   2859       VarTemplate, DI->getType(), DI, D->getStorageClass(), Converted);
   2860   Var->setTemplateArgsInfo(TemplateArgsInfo);
   2861   if (InsertPos)
   2862     VarTemplate->AddSpecialization(Var, InsertPos);
   2863 
   2864   // Substitute the nested name specifier, if any.
   2865   if (SubstQualifier(D, Var))
   2866     return nullptr;
   2867 
   2868   SemaRef.BuildVariableInstantiation(Var, D, TemplateArgs, LateAttrs,
   2869                                      Owner, StartingScope);
   2870 
   2871   return Var;
   2872 }
   2873 
   2874 Decl *TemplateDeclInstantiator::VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D) {
   2875   llvm_unreachable("@defs is not supported in Objective-C++");
   2876 }
   2877 
   2878 Decl *TemplateDeclInstantiator::VisitFriendTemplateDecl(FriendTemplateDecl *D) {
   2879   // FIXME: We need to be able to instantiate FriendTemplateDecls.
   2880   unsigned DiagID = SemaRef.getDiagnostics().getCustomDiagID(
   2881                                                DiagnosticsEngine::Error,
   2882                                                "cannot instantiate %0 yet");
   2883   SemaRef.Diag(D->getLocation(), DiagID)
   2884     << D->getDeclKindName();
   2885 
   2886   return nullptr;
   2887 }
   2888 
   2889 Decl *TemplateDeclInstantiator::VisitDecl(Decl *D) {
   2890   llvm_unreachable("Unexpected decl");
   2891 }
   2892 
   2893 Decl *Sema::SubstDecl(Decl *D, DeclContext *Owner,
   2894                       const MultiLevelTemplateArgumentList &TemplateArgs) {
   2895   TemplateDeclInstantiator Instantiator(*this, Owner, TemplateArgs);
   2896   if (D->isInvalidDecl())
   2897     return nullptr;
   2898 
   2899   return Instantiator.Visit(D);
   2900 }
   2901 
   2902 /// \brief Instantiates a nested template parameter list in the current
   2903 /// instantiation context.
   2904 ///
   2905 /// \param L The parameter list to instantiate
   2906 ///
   2907 /// \returns NULL if there was an error
   2908 TemplateParameterList *
   2909 TemplateDeclInstantiator::SubstTemplateParams(TemplateParameterList *L) {
   2910   // Get errors for all the parameters before bailing out.
   2911   bool Invalid = false;
   2912 
   2913   unsigned N = L->size();
   2914   typedef SmallVector<NamedDecl *, 8> ParamVector;
   2915   ParamVector Params;
   2916   Params.reserve(N);
   2917   for (auto &P : *L) {
   2918     NamedDecl *D = cast_or_null<NamedDecl>(Visit(P));
   2919     Params.push_back(D);
   2920     Invalid = Invalid || !D || D->isInvalidDecl();
   2921   }
   2922 
   2923   // Clean up if we had an error.
   2924   if (Invalid)
   2925     return nullptr;
   2926 
   2927   TemplateParameterList *InstL
   2928     = TemplateParameterList::Create(SemaRef.Context, L->getTemplateLoc(),
   2929                                     L->getLAngleLoc(), Params,
   2930                                     L->getRAngleLoc());
   2931   return InstL;
   2932 }
   2933 
   2934 /// \brief Instantiate the declaration of a class template partial
   2935 /// specialization.
   2936 ///
   2937 /// \param ClassTemplate the (instantiated) class template that is partially
   2938 // specialized by the instantiation of \p PartialSpec.
   2939 ///
   2940 /// \param PartialSpec the (uninstantiated) class template partial
   2941 /// specialization that we are instantiating.
   2942 ///
   2943 /// \returns The instantiated partial specialization, if successful; otherwise,
   2944 /// NULL to indicate an error.
   2945 ClassTemplatePartialSpecializationDecl *
   2946 TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(
   2947                                             ClassTemplateDecl *ClassTemplate,
   2948                           ClassTemplatePartialSpecializationDecl *PartialSpec) {
   2949   // Create a local instantiation scope for this class template partial
   2950   // specialization, which will contain the instantiations of the template
   2951   // parameters.
   2952   LocalInstantiationScope Scope(SemaRef);
   2953 
   2954   // Substitute into the template parameters of the class template partial
   2955   // specialization.
   2956   TemplateParameterList *TempParams = PartialSpec->getTemplateParameters();
   2957   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
   2958   if (!InstParams)
   2959     return nullptr;
   2960 
   2961   // Substitute into the template arguments of the class template partial
   2962   // specialization.
   2963   const ASTTemplateArgumentListInfo *TemplArgInfo
   2964     = PartialSpec->getTemplateArgsAsWritten();
   2965   TemplateArgumentListInfo InstTemplateArgs(TemplArgInfo->LAngleLoc,
   2966                                             TemplArgInfo->RAngleLoc);
   2967   if (SemaRef.Subst(TemplArgInfo->getTemplateArgs(),
   2968                     TemplArgInfo->NumTemplateArgs,
   2969                     InstTemplateArgs, TemplateArgs))
   2970     return nullptr;
   2971 
   2972   // Check that the template argument list is well-formed for this
   2973   // class template.
   2974   SmallVector<TemplateArgument, 4> Converted;
   2975   if (SemaRef.CheckTemplateArgumentList(ClassTemplate,
   2976                                         PartialSpec->getLocation(),
   2977                                         InstTemplateArgs,
   2978                                         false,
   2979                                         Converted))
   2980     return nullptr;
   2981 
   2982   // Figure out where to insert this class template partial specialization
   2983   // in the member template's set of class template partial specializations.
   2984   void *InsertPos = nullptr;
   2985   ClassTemplateSpecializationDecl *PrevDecl
   2986     = ClassTemplate->findPartialSpecialization(Converted, InsertPos);
   2987 
   2988   // Build the canonical type that describes the converted template
   2989   // arguments of the class template partial specialization.
   2990   QualType CanonType
   2991     = SemaRef.Context.getTemplateSpecializationType(TemplateName(ClassTemplate),
   2992                                                     Converted);
   2993 
   2994   // Build the fully-sugared type for this class template
   2995   // specialization as the user wrote in the specialization
   2996   // itself. This means that we'll pretty-print the type retrieved
   2997   // from the specialization's declaration the way that the user
   2998   // actually wrote the specialization, rather than formatting the
   2999   // name based on the "canonical" representation used to store the
   3000   // template arguments in the specialization.
   3001   TypeSourceInfo *WrittenTy
   3002     = SemaRef.Context.getTemplateSpecializationTypeInfo(
   3003                                                     TemplateName(ClassTemplate),
   3004                                                     PartialSpec->getLocation(),
   3005                                                     InstTemplateArgs,
   3006                                                     CanonType);
   3007 
   3008   if (PrevDecl) {
   3009     // We've already seen a partial specialization with the same template
   3010     // parameters and template arguments. This can happen, for example, when
   3011     // substituting the outer template arguments ends up causing two
   3012     // class template partial specializations of a member class template
   3013     // to have identical forms, e.g.,
   3014     //
   3015     //   template<typename T, typename U>
   3016     //   struct Outer {
   3017     //     template<typename X, typename Y> struct Inner;
   3018     //     template<typename Y> struct Inner<T, Y>;
   3019     //     template<typename Y> struct Inner<U, Y>;
   3020     //   };
   3021     //
   3022     //   Outer<int, int> outer; // error: the partial specializations of Inner
   3023     //                          // have the same signature.
   3024     SemaRef.Diag(PartialSpec->getLocation(), diag::err_partial_spec_redeclared)
   3025       << WrittenTy->getType();
   3026     SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here)
   3027       << SemaRef.Context.getTypeDeclType(PrevDecl);
   3028     return nullptr;
   3029   }
   3030 
   3031 
   3032   // Create the class template partial specialization declaration.
   3033   ClassTemplatePartialSpecializationDecl *InstPartialSpec
   3034     = ClassTemplatePartialSpecializationDecl::Create(SemaRef.Context,
   3035                                                      PartialSpec->getTagKind(),
   3036                                                      Owner,
   3037                                                      PartialSpec->getLocStart(),
   3038                                                      PartialSpec->getLocation(),
   3039                                                      InstParams,
   3040                                                      ClassTemplate,
   3041                                                      Converted,
   3042                                                      InstTemplateArgs,
   3043                                                      CanonType,
   3044                                                      nullptr);
   3045   // Substitute the nested name specifier, if any.
   3046   if (SubstQualifier(PartialSpec, InstPartialSpec))
   3047     return nullptr;
   3048 
   3049   InstPartialSpec->setInstantiatedFromMember(PartialSpec);
   3050   InstPartialSpec->setTypeAsWritten(WrittenTy);
   3051 
   3052   // Add this partial specialization to the set of class template partial
   3053   // specializations.
   3054   ClassTemplate->AddPartialSpecialization(InstPartialSpec,
   3055                                           /*InsertPos=*/nullptr);
   3056   return InstPartialSpec;
   3057 }
   3058 
   3059 /// \brief Instantiate the declaration of a variable template partial
   3060 /// specialization.
   3061 ///
   3062 /// \param VarTemplate the (instantiated) variable template that is partially
   3063 /// specialized by the instantiation of \p PartialSpec.
   3064 ///
   3065 /// \param PartialSpec the (uninstantiated) variable template partial
   3066 /// specialization that we are instantiating.
   3067 ///
   3068 /// \returns The instantiated partial specialization, if successful; otherwise,
   3069 /// NULL to indicate an error.
   3070 VarTemplatePartialSpecializationDecl *
   3071 TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(
   3072     VarTemplateDecl *VarTemplate,
   3073     VarTemplatePartialSpecializationDecl *PartialSpec) {
   3074   // Create a local instantiation scope for this variable template partial
   3075   // specialization, which will contain the instantiations of the template
   3076   // parameters.
   3077   LocalInstantiationScope Scope(SemaRef);
   3078 
   3079   // Substitute into the template parameters of the variable template partial
   3080   // specialization.
   3081   TemplateParameterList *TempParams = PartialSpec->getTemplateParameters();
   3082   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
   3083   if (!InstParams)
   3084     return nullptr;
   3085 
   3086   // Substitute into the template arguments of the variable template partial
   3087   // specialization.
   3088   const ASTTemplateArgumentListInfo *TemplArgInfo
   3089     = PartialSpec->getTemplateArgsAsWritten();
   3090   TemplateArgumentListInfo InstTemplateArgs(TemplArgInfo->LAngleLoc,
   3091                                             TemplArgInfo->RAngleLoc);
   3092   if (SemaRef.Subst(TemplArgInfo->getTemplateArgs(),
   3093                     TemplArgInfo->NumTemplateArgs,
   3094                     InstTemplateArgs, TemplateArgs))
   3095     return nullptr;
   3096 
   3097   // Check that the template argument list is well-formed for this
   3098   // class template.
   3099   SmallVector<TemplateArgument, 4> Converted;
   3100   if (SemaRef.CheckTemplateArgumentList(VarTemplate, PartialSpec->getLocation(),
   3101                                         InstTemplateArgs, false, Converted))
   3102     return nullptr;
   3103 
   3104   // Figure out where to insert this variable template partial specialization
   3105   // in the member template's set of variable template partial specializations.
   3106   void *InsertPos = nullptr;
   3107   VarTemplateSpecializationDecl *PrevDecl =
   3108       VarTemplate->findPartialSpecialization(Converted, InsertPos);
   3109 
   3110   // Build the canonical type that describes the converted template
   3111   // arguments of the variable template partial specialization.
   3112   QualType CanonType = SemaRef.Context.getTemplateSpecializationType(
   3113       TemplateName(VarTemplate), Converted);
   3114 
   3115   // Build the fully-sugared type for this variable template
   3116   // specialization as the user wrote in the specialization
   3117   // itself. This means that we'll pretty-print the type retrieved
   3118   // from the specialization's declaration the way that the user
   3119   // actually wrote the specialization, rather than formatting the
   3120   // name based on the "canonical" representation used to store the
   3121   // template arguments in the specialization.
   3122   TypeSourceInfo *WrittenTy = SemaRef.Context.getTemplateSpecializationTypeInfo(
   3123       TemplateName(VarTemplate), PartialSpec->getLocation(), InstTemplateArgs,
   3124       CanonType);
   3125 
   3126   if (PrevDecl) {
   3127     // We've already seen a partial specialization with the same template
   3128     // parameters and template arguments. This can happen, for example, when
   3129     // substituting the outer template arguments ends up causing two
   3130     // variable template partial specializations of a member variable template
   3131     // to have identical forms, e.g.,
   3132     //
   3133     //   template<typename T, typename U>
   3134     //   struct Outer {
   3135     //     template<typename X, typename Y> pair<X,Y> p;
   3136     //     template<typename Y> pair<T, Y> p;
   3137     //     template<typename Y> pair<U, Y> p;
   3138     //   };
   3139     //
   3140     //   Outer<int, int> outer; // error: the partial specializations of Inner
   3141     //                          // have the same signature.
   3142     SemaRef.Diag(PartialSpec->getLocation(),
   3143                  diag::err_var_partial_spec_redeclared)
   3144         << WrittenTy->getType();
   3145     SemaRef.Diag(PrevDecl->getLocation(),
   3146                  diag::note_var_prev_partial_spec_here);
   3147     return nullptr;
   3148   }
   3149 
   3150   // Do substitution on the type of the declaration
   3151   TypeSourceInfo *DI = SemaRef.SubstType(
   3152       PartialSpec->getTypeSourceInfo(), TemplateArgs,
   3153       PartialSpec->getTypeSpecStartLoc(), PartialSpec->getDeclName());
   3154   if (!DI)
   3155     return nullptr;
   3156 
   3157   if (DI->getType()->isFunctionType()) {
   3158     SemaRef.Diag(PartialSpec->getLocation(),
   3159                  diag::err_variable_instantiates_to_function)
   3160         << PartialSpec->isStaticDataMember() << DI->getType();
   3161     return nullptr;
   3162   }
   3163 
   3164   // Create the variable template partial specialization declaration.
   3165   VarTemplatePartialSpecializationDecl *InstPartialSpec =
   3166       VarTemplatePartialSpecializationDecl::Create(
   3167           SemaRef.Context, Owner, PartialSpec->getInnerLocStart(),
   3168           PartialSpec->getLocation(), InstParams, VarTemplate, DI->getType(),
   3169           DI, PartialSpec->getStorageClass(), Converted, InstTemplateArgs);
   3170 
   3171   // Substitute the nested name specifier, if any.
   3172   if (SubstQualifier(PartialSpec, InstPartialSpec))
   3173     return nullptr;
   3174 
   3175   InstPartialSpec->setInstantiatedFromMember(PartialSpec);
   3176   InstPartialSpec->setTypeAsWritten(WrittenTy);
   3177 
   3178   // Add this partial specialization to the set of variable template partial
   3179   // specializations. The instantiation of the initializer is not necessary.
   3180   VarTemplate->AddPartialSpecialization(InstPartialSpec, /*InsertPos=*/nullptr);
   3181 
   3182   SemaRef.BuildVariableInstantiation(InstPartialSpec, PartialSpec, TemplateArgs,
   3183                                      LateAttrs, Owner, StartingScope);
   3184 
   3185   return InstPartialSpec;
   3186 }
   3187 
   3188 TypeSourceInfo*
   3189 TemplateDeclInstantiator::SubstFunctionType(FunctionDecl *D,
   3190                               SmallVectorImpl<ParmVarDecl *> &Params) {
   3191   TypeSourceInfo *OldTInfo = D->getTypeSourceInfo();
   3192   assert(OldTInfo && "substituting function without type source info");
   3193   assert(Params.empty() && "parameter vector is non-empty at start");
   3194 
   3195   CXXRecordDecl *ThisContext = nullptr;
   3196   unsigned ThisTypeQuals = 0;
   3197   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
   3198     ThisContext = cast<CXXRecordDecl>(Owner);
   3199     ThisTypeQuals = Method->getTypeQualifiers();
   3200   }
   3201 
   3202   TypeSourceInfo *NewTInfo
   3203     = SemaRef.SubstFunctionDeclType(OldTInfo, TemplateArgs,
   3204                                     D->getTypeSpecStartLoc(),
   3205                                     D->getDeclName(),
   3206                                     ThisContext, ThisTypeQuals);
   3207   if (!NewTInfo)
   3208     return nullptr;
   3209 
   3210   TypeLoc OldTL = OldTInfo->getTypeLoc().IgnoreParens();
   3211   if (FunctionProtoTypeLoc OldProtoLoc = OldTL.getAs<FunctionProtoTypeLoc>()) {
   3212     if (NewTInfo != OldTInfo) {
   3213       // Get parameters from the new type info.
   3214       TypeLoc NewTL = NewTInfo->getTypeLoc().IgnoreParens();
   3215       FunctionProtoTypeLoc NewProtoLoc = NewTL.castAs<FunctionProtoTypeLoc>();
   3216       unsigned NewIdx = 0;
   3217       for (unsigned OldIdx = 0, NumOldParams = OldProtoLoc.getNumParams();
   3218            OldIdx != NumOldParams; ++OldIdx) {
   3219         ParmVarDecl *OldParam = OldProtoLoc.getParam(OldIdx);
   3220         LocalInstantiationScope *Scope = SemaRef.CurrentInstantiationScope;
   3221 
   3222         Optional<unsigned> NumArgumentsInExpansion;
   3223         if (OldParam->isParameterPack())
   3224           NumArgumentsInExpansion =
   3225               SemaRef.getNumArgumentsInExpansion(OldParam->getType(),
   3226                                                  TemplateArgs);
   3227         if (!NumArgumentsInExpansion) {
   3228           // Simple case: normal parameter, or a parameter pack that's
   3229           // instantiated to a (still-dependent) parameter pack.
   3230           ParmVarDecl *NewParam = NewProtoLoc.getParam(NewIdx++);
   3231           Params.push_back(NewParam);
   3232           Scope->InstantiatedLocal(OldParam, NewParam);
   3233         } else {
   3234           // Parameter pack expansion: make the instantiation an argument pack.
   3235           Scope->MakeInstantiatedLocalArgPack(OldParam);
   3236           for (unsigned I = 0; I != *NumArgumentsInExpansion; ++I) {
   3237             ParmVarDecl *NewParam = NewProtoLoc.getParam(NewIdx++);
   3238             Params.push_back(NewParam);
   3239             Scope->InstantiatedLocalPackArg(OldParam, NewParam);
   3240           }
   3241         }
   3242       }
   3243     } else {
   3244       // The function type itself was not dependent and therefore no
   3245       // substitution occurred. However, we still need to instantiate
   3246       // the function parameters themselves.
   3247       const FunctionProtoType *OldProto =
   3248           cast<FunctionProtoType>(OldProtoLoc.getType());
   3249       for (unsigned i = 0, i_end = OldProtoLoc.getNumParams(); i != i_end;
   3250            ++i) {
   3251         ParmVarDecl *OldParam = OldProtoLoc.getParam(i);
   3252         if (!OldParam) {
   3253           Params.push_back(SemaRef.BuildParmVarDeclForTypedef(
   3254               D, D->getLocation(), OldProto->getParamType(i)));
   3255           continue;
   3256         }
   3257 
   3258         ParmVarDecl *Parm =
   3259             cast_or_null<ParmVarDecl>(VisitParmVarDecl(OldParam));
   3260         if (!Parm)
   3261           return nullptr;
   3262         Params.push_back(Parm);
   3263       }
   3264     }
   3265   } else {
   3266     // If the type of this function, after ignoring parentheses, is not
   3267     // *directly* a function type, then we're instantiating a function that
   3268     // was declared via a typedef or with attributes, e.g.,
   3269     //
   3270     //   typedef int functype(int, int);
   3271     //   functype func;
   3272     //   int __cdecl meth(int, int);
   3273     //
   3274     // In this case, we'll just go instantiate the ParmVarDecls that we
   3275     // synthesized in the method declaration.
   3276     SmallVector<QualType, 4> ParamTypes;
   3277     Sema::ExtParameterInfoBuilder ExtParamInfos;
   3278     if (SemaRef.SubstParmTypes(D->getLocation(), D->parameters(), nullptr,
   3279                                TemplateArgs, ParamTypes, &Params,
   3280                                ExtParamInfos))
   3281       return nullptr;
   3282   }
   3283 
   3284   return NewTInfo;
   3285 }
   3286 
   3287 /// Introduce the instantiated function parameters into the local
   3288 /// instantiation scope, and set the parameter names to those used
   3289 /// in the template.
   3290 static bool addInstantiatedParametersToScope(Sema &S, FunctionDecl *Function,
   3291                                              const FunctionDecl *PatternDecl,
   3292                                              LocalInstantiationScope &Scope,
   3293                            const MultiLevelTemplateArgumentList &TemplateArgs) {
   3294   unsigned FParamIdx = 0;
   3295   for (unsigned I = 0, N = PatternDecl->getNumParams(); I != N; ++I) {
   3296     const ParmVarDecl *PatternParam = PatternDecl->getParamDecl(I);
   3297     if (!PatternParam->isParameterPack()) {
   3298       // Simple case: not a parameter pack.
   3299       assert(FParamIdx < Function->getNumParams());
   3300       ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
   3301       FunctionParam->setDeclName(PatternParam->getDeclName());
   3302       // If the parameter's type is not dependent, update it to match the type
   3303       // in the pattern. They can differ in top-level cv-qualifiers, and we want
   3304       // the pattern's type here. If the type is dependent, they can't differ,
   3305       // per core issue 1668. Substitute into the type from the pattern, in case
   3306       // it's instantiation-dependent.
   3307       // FIXME: Updating the type to work around this is at best fragile.
   3308       if (!PatternDecl->getType()->isDependentType()) {
   3309         QualType T = S.SubstType(PatternParam->getType(), TemplateArgs,
   3310                                  FunctionParam->getLocation(),
   3311                                  FunctionParam->getDeclName());
   3312         if (T.isNull())
   3313           return true;
   3314         FunctionParam->setType(T);
   3315       }
   3316 
   3317       Scope.InstantiatedLocal(PatternParam, FunctionParam);
   3318       ++FParamIdx;
   3319       continue;
   3320     }
   3321 
   3322     // Expand the parameter pack.
   3323     Scope.MakeInstantiatedLocalArgPack(PatternParam);
   3324     Optional<unsigned> NumArgumentsInExpansion
   3325       = S.getNumArgumentsInExpansion(PatternParam->getType(), TemplateArgs);
   3326     assert(NumArgumentsInExpansion &&
   3327            "should only be called when all template arguments are known");
   3328     QualType PatternType =
   3329         PatternParam->getType()->castAs<PackExpansionType>()->getPattern();
   3330     for (unsigned Arg = 0; Arg < *NumArgumentsInExpansion; ++Arg) {
   3331       ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
   3332       FunctionParam->setDeclName(PatternParam->getDeclName());
   3333       if (!PatternDecl->getType()->isDependentType()) {
   3334         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, Arg);
   3335         QualType T = S.SubstType(PatternType, TemplateArgs,
   3336                                  FunctionParam->getLocation(),
   3337                                  FunctionParam->getDeclName());
   3338         if (T.isNull())
   3339           return true;
   3340         FunctionParam->setType(T);
   3341       }
   3342 
   3343       Scope.InstantiatedLocalPackArg(PatternParam, FunctionParam);
   3344       ++FParamIdx;
   3345     }
   3346   }
   3347 
   3348   return false;
   3349 }
   3350 
   3351 void Sema::InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
   3352                                     FunctionDecl *Decl) {
   3353   const FunctionProtoType *Proto = Decl->getType()->castAs<FunctionProtoType>();
   3354   if (Proto->getExceptionSpecType() != EST_Uninstantiated)
   3355     return;
   3356 
   3357   InstantiatingTemplate Inst(*this, PointOfInstantiation, Decl,
   3358                              InstantiatingTemplate::ExceptionSpecification());
   3359   if (Inst.isInvalid()) {
   3360     // We hit the instantiation depth limit. Clear the exception specification
   3361     // so that our callers don't have to cope with EST_Uninstantiated.
   3362     UpdateExceptionSpec(Decl, EST_None);
   3363     return;
   3364   }
   3365 
   3366   // Enter the scope of this instantiation. We don't use
   3367   // PushDeclContext because we don't have a scope.
   3368   Sema::ContextRAII savedContext(*this, Decl);
   3369   LocalInstantiationScope Scope(*this);
   3370 
   3371   MultiLevelTemplateArgumentList TemplateArgs =
   3372     getTemplateInstantiationArgs(Decl, nullptr, /*RelativeToPrimary*/true);
   3373 
   3374   FunctionDecl *Template = Proto->getExceptionSpecTemplate();
   3375   if (addInstantiatedParametersToScope(*this, Decl, Template, Scope,
   3376                                        TemplateArgs)) {
   3377     UpdateExceptionSpec(Decl, EST_None);
   3378     return;
   3379   }
   3380 
   3381   SubstExceptionSpec(Decl, Template->getType()->castAs<FunctionProtoType>(),
   3382                      TemplateArgs);
   3383 }
   3384 
   3385 /// \brief Initializes the common fields of an instantiation function
   3386 /// declaration (New) from the corresponding fields of its template (Tmpl).
   3387 ///
   3388 /// \returns true if there was an error
   3389 bool
   3390 TemplateDeclInstantiator::InitFunctionInstantiation(FunctionDecl *New,
   3391                                                     FunctionDecl *Tmpl) {
   3392   if (Tmpl->isDeleted())
   3393     New->setDeletedAsWritten();
   3394 
   3395   // Forward the mangling number from the template to the instantiated decl.
   3396   SemaRef.Context.setManglingNumber(New,
   3397                                     SemaRef.Context.getManglingNumber(Tmpl));
   3398 
   3399   // If we are performing substituting explicitly-specified template arguments
   3400   // or deduced template arguments into a function template and we reach this
   3401   // point, we are now past the point where SFINAE applies and have committed
   3402   // to keeping the new function template specialization. We therefore
   3403   // convert the active template instantiation for the function template
   3404   // into a template instantiation for this specific function template
   3405   // specialization, which is not a SFINAE context, so that we diagnose any
   3406   // further errors in the declaration itself.
   3407   typedef Sema::ActiveTemplateInstantiation ActiveInstType;
   3408   ActiveInstType &ActiveInst = SemaRef.ActiveTemplateInstantiations.back();
   3409   if (ActiveInst.Kind == ActiveInstType::ExplicitTemplateArgumentSubstitution ||
   3410       ActiveInst.Kind == ActiveInstType::DeducedTemplateArgumentSubstitution) {
   3411     if (FunctionTemplateDecl *FunTmpl
   3412           = dyn_cast<FunctionTemplateDecl>(ActiveInst.Entity)) {
   3413       assert(FunTmpl->getTemplatedDecl() == Tmpl &&
   3414              "Deduction from the wrong function template?");
   3415       (void) FunTmpl;
   3416       ActiveInst.Kind = ActiveInstType::TemplateInstantiation;
   3417       ActiveInst.Entity = New;
   3418     }
   3419   }
   3420 
   3421   const FunctionProtoType *Proto = Tmpl->getType()->getAs<FunctionProtoType>();
   3422   assert(Proto && "Function template without prototype?");
   3423 
   3424   if (Proto->hasExceptionSpec() || Proto->getNoReturnAttr()) {
   3425     FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
   3426 
   3427     // DR1330: In C++11, defer instantiation of a non-trivial
   3428     // exception specification.
   3429     // DR1484: Local classes and their members are instantiated along with the
   3430     // containing function.
   3431     if (SemaRef.getLangOpts().CPlusPlus11 &&
   3432         EPI.ExceptionSpec.Type != EST_None &&
   3433         EPI.ExceptionSpec.Type != EST_DynamicNone &&
   3434         EPI.ExceptionSpec.Type != EST_BasicNoexcept &&
   3435         !Tmpl->isLexicallyWithinFunctionOrMethod()) {
   3436       FunctionDecl *ExceptionSpecTemplate = Tmpl;
   3437       if (EPI.ExceptionSpec.Type == EST_Uninstantiated)
   3438         ExceptionSpecTemplate = EPI.ExceptionSpec.SourceTemplate;
   3439       ExceptionSpecificationType NewEST = EST_Uninstantiated;
   3440       if (EPI.ExceptionSpec.Type == EST_Unevaluated)
   3441         NewEST = EST_Unevaluated;
   3442 
   3443       // Mark the function has having an uninstantiated exception specification.
   3444       const FunctionProtoType *NewProto
   3445         = New->getType()->getAs<FunctionProtoType>();
   3446       assert(NewProto && "Template instantiation without function prototype?");
   3447       EPI = NewProto->getExtProtoInfo();
   3448       EPI.ExceptionSpec.Type = NewEST;
   3449       EPI.ExceptionSpec.SourceDecl = New;
   3450       EPI.ExceptionSpec.SourceTemplate = ExceptionSpecTemplate;
   3451       New->setType(SemaRef.Context.getFunctionType(
   3452           NewProto->getReturnType(), NewProto->getParamTypes(), EPI));
   3453     } else {
   3454       SemaRef.SubstExceptionSpec(New, Proto, TemplateArgs);
   3455     }
   3456   }
   3457 
   3458   // Get the definition. Leaves the variable unchanged if undefined.
   3459   const FunctionDecl *Definition = Tmpl;
   3460   Tmpl->isDefined(Definition);
   3461 
   3462   SemaRef.InstantiateAttrs(TemplateArgs, Definition, New,
   3463                            LateAttrs, StartingScope);
   3464 
   3465   return false;
   3466 }
   3467 
   3468 /// \brief Initializes common fields of an instantiated method
   3469 /// declaration (New) from the corresponding fields of its template
   3470 /// (Tmpl).
   3471 ///
   3472 /// \returns true if there was an error
   3473 bool
   3474 TemplateDeclInstantiator::InitMethodInstantiation(CXXMethodDecl *New,
   3475                                                   CXXMethodDecl *Tmpl) {
   3476   if (InitFunctionInstantiation(New, Tmpl))
   3477     return true;
   3478 
   3479   New->setAccess(Tmpl->getAccess());
   3480   if (Tmpl->isVirtualAsWritten())
   3481     New->setVirtualAsWritten(true);
   3482 
   3483   // FIXME: New needs a pointer to Tmpl
   3484   return false;
   3485 }
   3486 
   3487 /// \brief Instantiate the definition of the given function from its
   3488 /// template.
   3489 ///
   3490 /// \param PointOfInstantiation the point at which the instantiation was
   3491 /// required. Note that this is not precisely a "point of instantiation"
   3492 /// for the function, but it's close.
   3493 ///
   3494 /// \param Function the already-instantiated declaration of a
   3495 /// function template specialization or member function of a class template
   3496 /// specialization.
   3497 ///
   3498 /// \param Recursive if true, recursively instantiates any functions that
   3499 /// are required by this instantiation.
   3500 ///
   3501 /// \param DefinitionRequired if true, then we are performing an explicit
   3502 /// instantiation where the body of the function is required. Complain if
   3503 /// there is no such body.
   3504 void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
   3505                                          FunctionDecl *Function,
   3506                                          bool Recursive,
   3507                                          bool DefinitionRequired,
   3508                                          bool AtEndOfTU) {
   3509   if (Function->isInvalidDecl() || Function->isDefined())
   3510     return;
   3511 
   3512   // Never instantiate an explicit specialization except if it is a class scope
   3513   // explicit specialization.
   3514   if (Function->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&
   3515       !Function->getClassScopeSpecializationPattern())
   3516     return;
   3517 
   3518   // Find the function body that we'll be substituting.
   3519   const FunctionDecl *PatternDecl = Function->getTemplateInstantiationPattern();
   3520   assert(PatternDecl && "instantiating a non-template");
   3521 
   3522   Stmt *Pattern = PatternDecl->getBody(PatternDecl);
   3523   assert(PatternDecl && "template definition is not a template");
   3524   if (!Pattern) {
   3525     // Try to find a defaulted definition
   3526     PatternDecl->isDefined(PatternDecl);
   3527   }
   3528   assert(PatternDecl && "template definition is not a template");
   3529 
   3530   // Postpone late parsed template instantiations.
   3531   if (PatternDecl->isLateTemplateParsed() &&
   3532       !LateTemplateParser) {
   3533     PendingInstantiations.push_back(
   3534       std::make_pair(Function, PointOfInstantiation));
   3535     return;
   3536   }
   3537 
   3538   // If we're performing recursive template instantiation, create our own
   3539   // queue of pending implicit instantiations that we will instantiate later,
   3540   // while we're still within our own instantiation context.
   3541   // This has to happen before LateTemplateParser below is called, so that
   3542   // it marks vtables used in late parsed templates as used.
   3543   SavePendingLocalImplicitInstantiationsRAII
   3544       SavedPendingLocalImplicitInstantiations(*this);
   3545   SavePendingInstantiationsAndVTableUsesRAII
   3546       SavePendingInstantiationsAndVTableUses(*this, /*Enabled=*/Recursive);
   3547 
   3548   // Call the LateTemplateParser callback if there is a need to late parse
   3549   // a templated function definition.
   3550   if (!Pattern && PatternDecl->isLateTemplateParsed() &&
   3551       LateTemplateParser) {
   3552     // FIXME: Optimize to allow individual templates to be deserialized.
   3553     if (PatternDecl->isFromASTFile())
   3554       ExternalSource->ReadLateParsedTemplates(LateParsedTemplateMap);
   3555 
   3556     LateParsedTemplate *LPT = LateParsedTemplateMap.lookup(PatternDecl);
   3557     assert(LPT && "missing LateParsedTemplate");
   3558     LateTemplateParser(OpaqueParser, *LPT);
   3559     Pattern = PatternDecl->getBody(PatternDecl);
   3560   }
   3561 
   3562   // FIXME: Check that the definition is visible before trying to instantiate
   3563   // it. This requires us to track the instantiation stack in order to know
   3564   // which definitions should be visible.
   3565 
   3566   if (!Pattern && !PatternDecl->isDefaulted()) {
   3567     if (DefinitionRequired) {
   3568       if (Function->getPrimaryTemplate())
   3569         Diag(PointOfInstantiation,
   3570              diag::err_explicit_instantiation_undefined_func_template)
   3571           << Function->getPrimaryTemplate();
   3572       else
   3573         Diag(PointOfInstantiation,
   3574              diag::err_explicit_instantiation_undefined_member)
   3575           << 1 << Function->getDeclName() << Function->getDeclContext();
   3576 
   3577       if (PatternDecl)
   3578         Diag(PatternDecl->getLocation(),
   3579              diag::note_explicit_instantiation_here);
   3580       Function->setInvalidDecl();
   3581     } else if (Function->getTemplateSpecializationKind()
   3582                  == TSK_ExplicitInstantiationDefinition) {
   3583       assert(!Recursive);
   3584       PendingInstantiations.push_back(
   3585         std::make_pair(Function, PointOfInstantiation));
   3586     } else if (Function->getTemplateSpecializationKind()
   3587                  == TSK_ImplicitInstantiation) {
   3588       if (AtEndOfTU && !getDiagnostics().hasErrorOccurred()) {
   3589         Diag(PointOfInstantiation, diag::warn_func_template_missing)
   3590           << Function;
   3591         Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);
   3592         if (getLangOpts().CPlusPlus11)
   3593           Diag(PointOfInstantiation, diag::note_inst_declaration_hint)
   3594             << Function;
   3595       }
   3596     }
   3597 
   3598     return;
   3599   }
   3600 
   3601   // C++1y [temp.explicit]p10:
   3602   //   Except for inline functions, declarations with types deduced from their
   3603   //   initializer or return value, and class template specializations, other
   3604   //   explicit instantiation declarations have the effect of suppressing the
   3605   //   implicit instantiation of the entity to which they refer.
   3606   if (Function->getTemplateSpecializationKind() ==
   3607           TSK_ExplicitInstantiationDeclaration &&
   3608       !PatternDecl->isInlined() &&
   3609       !PatternDecl->getReturnType()->getContainedAutoType())
   3610     return;
   3611 
   3612   if (PatternDecl->isInlined()) {
   3613     // Function, and all later redeclarations of it (from imported modules,
   3614     // for instance), are now implicitly inline.
   3615     for (auto *D = Function->getMostRecentDecl(); /**/;
   3616          D = D->getPreviousDecl()) {
   3617       D->setImplicitlyInline();
   3618       if (D == Function)
   3619         break;
   3620     }
   3621   }
   3622 
   3623   InstantiatingTemplate Inst(*this, PointOfInstantiation, Function);
   3624   if (Inst.isInvalid())
   3625     return;
   3626   PrettyDeclStackTraceEntry CrashInfo(*this, Function, SourceLocation(),
   3627                                       "instantiating function definition");
   3628 
   3629   // Copy the inner loc start from the pattern.
   3630   Function->setInnerLocStart(PatternDecl->getInnerLocStart());
   3631 
   3632   EnterExpressionEvaluationContext EvalContext(*this,
   3633                                                Sema::PotentiallyEvaluated);
   3634 
   3635   // Introduce a new scope where local variable instantiations will be
   3636   // recorded, unless we're actually a member function within a local
   3637   // class, in which case we need to merge our results with the parent
   3638   // scope (of the enclosing function).
   3639   bool MergeWithParentScope = false;
   3640   if (CXXRecordDecl *Rec = dyn_cast<CXXRecordDecl>(Function->getDeclContext()))
   3641     MergeWithParentScope = Rec->isLocalClass();
   3642 
   3643   LocalInstantiationScope Scope(*this, MergeWithParentScope);
   3644 
   3645   if (PatternDecl->isDefaulted())
   3646     SetDeclDefaulted(Function, PatternDecl->getLocation());
   3647   else {
   3648     MultiLevelTemplateArgumentList TemplateArgs =
   3649       getTemplateInstantiationArgs(Function, nullptr, false, PatternDecl);
   3650 
   3651     // Substitute into the qualifier; we can get a substitution failure here
   3652     // through evil use of alias templates.
   3653     // FIXME: Is CurContext correct for this? Should we go to the (instantiation
   3654     // of the) lexical context of the pattern?
   3655     SubstQualifier(*this, PatternDecl, Function, TemplateArgs);
   3656 
   3657     ActOnStartOfFunctionDef(nullptr, Function);
   3658 
   3659     // Enter the scope of this instantiation. We don't use
   3660     // PushDeclContext because we don't have a scope.
   3661     Sema::ContextRAII savedContext(*this, Function);
   3662 
   3663     if (addInstantiatedParametersToScope(*this, Function, PatternDecl, Scope,
   3664                                          TemplateArgs))
   3665       return;
   3666 
   3667     // If this is a constructor, instantiate the member initializers.
   3668     if (const CXXConstructorDecl *Ctor =
   3669           dyn_cast<CXXConstructorDecl>(PatternDecl)) {
   3670       InstantiateMemInitializers(cast<CXXConstructorDecl>(Function), Ctor,
   3671                                  TemplateArgs);
   3672     }
   3673 
   3674     // Instantiate the function body.
   3675     StmtResult Body = SubstStmt(Pattern, TemplateArgs);
   3676 
   3677     if (Body.isInvalid())
   3678       Function->setInvalidDecl();
   3679 
   3680     ActOnFinishFunctionBody(Function, Body.get(),
   3681                             /*IsInstantiation=*/true);
   3682 
   3683     PerformDependentDiagnostics(PatternDecl, TemplateArgs);
   3684 
   3685     if (auto *Listener = getASTMutationListener())
   3686       Listener->FunctionDefinitionInstantiated(Function);
   3687 
   3688     savedContext.pop();
   3689   }
   3690 
   3691   DeclGroupRef DG(Function);
   3692   Consumer.HandleTopLevelDecl(DG);
   3693 
   3694   // This class may have local implicit instantiations that need to be
   3695   // instantiation within this scope.
   3696   PerformPendingInstantiations(/*LocalOnly=*/true);
   3697   Scope.Exit();
   3698 
   3699   if (Recursive) {
   3700     // Define any pending vtables.
   3701     DefineUsedVTables();
   3702 
   3703     // Instantiate any pending implicit instantiations found during the
   3704     // instantiation of this template.
   3705     PerformPendingInstantiations();
   3706 
   3707     // PendingInstantiations and VTableUses are restored through
   3708     // SavePendingInstantiationsAndVTableUses's destructor.
   3709   }
   3710 }
   3711 
   3712 VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
   3713     VarTemplateDecl *VarTemplate, VarDecl *FromVar,
   3714     const TemplateArgumentList &TemplateArgList,
   3715     const TemplateArgumentListInfo &TemplateArgsInfo,
   3716     SmallVectorImpl<TemplateArgument> &Converted,
   3717     SourceLocation PointOfInstantiation, void *InsertPos,
   3718     LateInstantiatedAttrVec *LateAttrs,
   3719     LocalInstantiationScope *StartingScope) {
   3720   if (FromVar->isInvalidDecl())
   3721     return nullptr;
   3722 
   3723   InstantiatingTemplate Inst(*this, PointOfInstantiation, FromVar);
   3724   if (Inst.isInvalid())
   3725     return nullptr;
   3726 
   3727   MultiLevelTemplateArgumentList TemplateArgLists;
   3728   TemplateArgLists.addOuterTemplateArguments(&TemplateArgList);
   3729 
   3730   // Instantiate the first declaration of the variable template: for a partial
   3731   // specialization of a static data member template, the first declaration may
   3732   // or may not be the declaration in the class; if it's in the class, we want
   3733   // to instantiate a member in the class (a declaration), and if it's outside,
   3734   // we want to instantiate a definition.
   3735   //
   3736   // If we're instantiating an explicitly-specialized member template or member
   3737   // partial specialization, don't do this. The member specialization completely
   3738   // replaces the original declaration in this case.
   3739   bool IsMemberSpec = false;
   3740   if (VarTemplatePartialSpecializationDecl *PartialSpec =
   3741           dyn_cast<VarTemplatePartialSpecializationDecl>(FromVar))
   3742     IsMemberSpec = PartialSpec->isMemberSpecialization();
   3743   else if (VarTemplateDecl *FromTemplate = FromVar->getDescribedVarTemplate())
   3744     IsMemberSpec = FromTemplate->isMemberSpecialization();
   3745   if (!IsMemberSpec)
   3746     FromVar = FromVar->getFirstDecl();
   3747 
   3748   MultiLevelTemplateArgumentList MultiLevelList(TemplateArgList);
   3749   TemplateDeclInstantiator Instantiator(*this, FromVar->getDeclContext(),
   3750                                         MultiLevelList);
   3751 
   3752   // TODO: Set LateAttrs and StartingScope ...
   3753 
   3754   return cast_or_null<VarTemplateSpecializationDecl>(
   3755       Instantiator.VisitVarTemplateSpecializationDecl(
   3756           VarTemplate, FromVar, InsertPos, TemplateArgsInfo, Converted));
   3757 }
   3758 
   3759 /// \brief Instantiates a variable template specialization by completing it
   3760 /// with appropriate type information and initializer.
   3761 VarTemplateSpecializationDecl *Sema::CompleteVarTemplateSpecializationDecl(
   3762     VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
   3763     const MultiLevelTemplateArgumentList &TemplateArgs) {
   3764 
   3765   // Do substitution on the type of the declaration
   3766   TypeSourceInfo *DI =
   3767       SubstType(PatternDecl->getTypeSourceInfo(), TemplateArgs,
   3768                 PatternDecl->getTypeSpecStartLoc(), PatternDecl->getDeclName());
   3769   if (!DI)
   3770     return nullptr;
   3771 
   3772   // Update the type of this variable template specialization.
   3773   VarSpec->setType(DI->getType());
   3774 
   3775   // Instantiate the initializer.
   3776   InstantiateVariableInitializer(VarSpec, PatternDecl, TemplateArgs);
   3777 
   3778   return VarSpec;
   3779 }
   3780 
   3781 /// BuildVariableInstantiation - Used after a new variable has been created.
   3782 /// Sets basic variable data and decides whether to postpone the
   3783 /// variable instantiation.
   3784 void Sema::BuildVariableInstantiation(
   3785     VarDecl *NewVar, VarDecl *OldVar,
   3786     const MultiLevelTemplateArgumentList &TemplateArgs,
   3787     LateInstantiatedAttrVec *LateAttrs, DeclContext *Owner,
   3788     LocalInstantiationScope *StartingScope,
   3789     bool InstantiatingVarTemplate) {
   3790 
   3791   // If we are instantiating a local extern declaration, the
   3792   // instantiation belongs lexically to the containing function.
   3793   // If we are instantiating a static data member defined
   3794   // out-of-line, the instantiation will have the same lexical
   3795   // context (which will be a namespace scope) as the template.
   3796   if (OldVar->isLocalExternDecl()) {
   3797     NewVar->setLocalExternDecl();
   3798     NewVar->setLexicalDeclContext(Owner);
   3799   } else if (OldVar->isOutOfLine())
   3800     NewVar->setLexicalDeclContext(OldVar->getLexicalDeclContext());
   3801   NewVar->setTSCSpec(OldVar->getTSCSpec());
   3802   NewVar->setInitStyle(OldVar->getInitStyle());
   3803   NewVar->setCXXForRangeDecl(OldVar->isCXXForRangeDecl());
   3804   NewVar->setConstexpr(OldVar->isConstexpr());
   3805   NewVar->setInitCapture(OldVar->isInitCapture());
   3806   NewVar->setPreviousDeclInSameBlockScope(
   3807       OldVar->isPreviousDeclInSameBlockScope());
   3808   NewVar->setAccess(OldVar->getAccess());
   3809 
   3810   if (!OldVar->isStaticDataMember()) {
   3811     if (OldVar->isUsed(false))
   3812       NewVar->setIsUsed();
   3813     NewVar->setReferenced(OldVar->isReferenced());
   3814   }
   3815 
   3816   InstantiateAttrs(TemplateArgs, OldVar, NewVar, LateAttrs, StartingScope);
   3817 
   3818   LookupResult Previous(
   3819       *this, NewVar->getDeclName(), NewVar->getLocation(),
   3820       NewVar->isLocalExternDecl() ? Sema::LookupRedeclarationWithLinkage
   3821                                   : Sema::LookupOrdinaryName,
   3822       Sema::ForRedeclaration);
   3823 
   3824   if (NewVar->isLocalExternDecl() && OldVar->getPreviousDecl() &&
   3825       (!OldVar->getPreviousDecl()->getDeclContext()->isDependentContext() ||
   3826        OldVar->getPreviousDecl()->getDeclContext()==OldVar->getDeclContext())) {
   3827     // We have a previous declaration. Use that one, so we merge with the
   3828     // right type.
   3829     if (NamedDecl *NewPrev = FindInstantiatedDecl(
   3830             NewVar->getLocation(), OldVar->getPreviousDecl(), TemplateArgs))
   3831       Previous.addDecl(NewPrev);
   3832   } else if (!isa<VarTemplateSpecializationDecl>(NewVar) &&
   3833              OldVar->hasLinkage())
   3834     LookupQualifiedName(Previous, NewVar->getDeclContext(), false);
   3835   CheckVariableDeclaration(NewVar, Previous);
   3836 
   3837   if (!InstantiatingVarTemplate) {
   3838     NewVar->getLexicalDeclContext()->addHiddenDecl(NewVar);
   3839     if (!NewVar->isLocalExternDecl() || !NewVar->getPreviousDecl())
   3840       NewVar->getDeclContext()->makeDeclVisibleInContext(NewVar);
   3841   }
   3842 
   3843   if (!OldVar->isOutOfLine()) {
   3844     if (NewVar->getDeclContext()->isFunctionOrMethod())
   3845       CurrentInstantiationScope->InstantiatedLocal(OldVar, NewVar);
   3846   }
   3847 
   3848   // Link instantiations of static data members back to the template from
   3849   // which they were instantiated.
   3850   if (NewVar->isStaticDataMember() && !InstantiatingVarTemplate)
   3851     NewVar->setInstantiationOfStaticDataMember(OldVar,
   3852                                                TSK_ImplicitInstantiation);
   3853 
   3854   // Forward the mangling number from the template to the instantiated decl.
   3855   Context.setManglingNumber(NewVar, Context.getManglingNumber(OldVar));
   3856   Context.setStaticLocalNumber(NewVar, Context.getStaticLocalNumber(OldVar));
   3857 
   3858   // Delay instantiation of the initializer for variable templates or inline
   3859   // static data members until a definition of the variable is needed. We need
   3860   // it right away if the type contains 'auto'.
   3861   if ((!isa<VarTemplateSpecializationDecl>(NewVar) &&
   3862        !InstantiatingVarTemplate &&
   3863        !(OldVar->isInline() && OldVar->isThisDeclarationADefinition())) ||
   3864       NewVar->getType()->isUndeducedType())
   3865     InstantiateVariableInitializer(NewVar, OldVar, TemplateArgs);
   3866 
   3867   // Diagnose unused local variables with dependent types, where the diagnostic
   3868   // will have been deferred.
   3869   if (!NewVar->isInvalidDecl() &&
   3870       NewVar->getDeclContext()->isFunctionOrMethod() &&
   3871       OldVar->getType()->isDependentType())
   3872     DiagnoseUnusedDecl(NewVar);
   3873 }
   3874 
   3875 /// \brief Instantiate the initializer of a variable.
   3876 void Sema::InstantiateVariableInitializer(
   3877     VarDecl *Var, VarDecl *OldVar,
   3878     const MultiLevelTemplateArgumentList &TemplateArgs) {
   3879   // We propagate the 'inline' flag with the initializer, because it
   3880   // would otherwise imply that the variable is a definition for a
   3881   // non-static data member.
   3882   if (OldVar->isInlineSpecified())
   3883     Var->setInlineSpecified();
   3884   else if (OldVar->isInline())
   3885     Var->setImplicitlyInline();
   3886 
   3887   if (Var->getAnyInitializer())
   3888     // We already have an initializer in the class.
   3889     return;
   3890 
   3891   if (OldVar->getInit()) {
   3892     if (Var->isStaticDataMember() && !OldVar->isOutOfLine())
   3893       PushExpressionEvaluationContext(Sema::ConstantEvaluated, OldVar);
   3894     else
   3895       PushExpressionEvaluationContext(Sema::PotentiallyEvaluated, OldVar);
   3896 
   3897     // Instantiate the initializer.
   3898     ExprResult Init;
   3899 
   3900     {
   3901       ContextRAII SwitchContext(*this, Var->getDeclContext());
   3902       Init = SubstInitializer(OldVar->getInit(), TemplateArgs,
   3903                               OldVar->getInitStyle() == VarDecl::CallInit);
   3904     }
   3905 
   3906     if (!Init.isInvalid()) {
   3907       bool TypeMayContainAuto = true;
   3908       Expr *InitExpr = Init.get();
   3909 
   3910       if (Var->hasAttr<DLLImportAttr>() &&
   3911           (!InitExpr ||
   3912            !InitExpr->isConstantInitializer(getASTContext(), false))) {
   3913         // Do not dynamically initialize dllimport variables.
   3914       } else if (InitExpr) {
   3915         bool DirectInit = OldVar->isDirectInit();
   3916         AddInitializerToDecl(Var, InitExpr, DirectInit, TypeMayContainAuto);
   3917       } else
   3918         ActOnUninitializedDecl(Var, TypeMayContainAuto);
   3919     } else {
   3920       // FIXME: Not too happy about invalidating the declaration
   3921       // because of a bogus initializer.
   3922       Var->setInvalidDecl();
   3923     }
   3924 
   3925     PopExpressionEvaluationContext();
   3926   } else if ((!Var->isStaticDataMember() || Var->isOutOfLine()) &&
   3927              !Var->isCXXForRangeDecl())
   3928     ActOnUninitializedDecl(Var, false);
   3929 }
   3930 
   3931 /// \brief Instantiate the definition of the given variable from its
   3932 /// template.
   3933 ///
   3934 /// \param PointOfInstantiation the point at which the instantiation was
   3935 /// required. Note that this is not precisely a "point of instantiation"
   3936 /// for the function, but it's close.
   3937 ///
   3938 /// \param Var the already-instantiated declaration of a static member
   3939 /// variable of a class template specialization.
   3940 ///
   3941 /// \param Recursive if true, recursively instantiates any functions that
   3942 /// are required by this instantiation.
   3943 ///
   3944 /// \param DefinitionRequired if true, then we are performing an explicit
   3945 /// instantiation where an out-of-line definition of the member variable
   3946 /// is required. Complain if there is no such definition.
   3947 void Sema::InstantiateStaticDataMemberDefinition(
   3948                                           SourceLocation PointOfInstantiation,
   3949                                                  VarDecl *Var,
   3950                                                  bool Recursive,
   3951                                                  bool DefinitionRequired) {
   3952   InstantiateVariableDefinition(PointOfInstantiation, Var, Recursive,
   3953                                 DefinitionRequired);
   3954 }
   3955 
   3956 void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
   3957                                          VarDecl *Var, bool Recursive,
   3958                                       bool DefinitionRequired, bool AtEndOfTU) {
   3959   if (Var->isInvalidDecl())
   3960     return;
   3961 
   3962   VarTemplateSpecializationDecl *VarSpec =
   3963       dyn_cast<VarTemplateSpecializationDecl>(Var);
   3964   VarDecl *PatternDecl = nullptr, *Def = nullptr;
   3965   MultiLevelTemplateArgumentList TemplateArgs =
   3966       getTemplateInstantiationArgs(Var);
   3967 
   3968   if (VarSpec) {
   3969     // If this is a variable template specialization, make sure that it is
   3970     // non-dependent, then find its instantiation pattern.
   3971     bool InstantiationDependent = false;
   3972     assert(!TemplateSpecializationType::anyDependentTemplateArguments(
   3973                VarSpec->getTemplateArgsInfo(), InstantiationDependent) &&
   3974            "Only instantiate variable template specializations that are "
   3975            "not type-dependent");
   3976     (void)InstantiationDependent;
   3977 
   3978     // Find the variable initialization that we'll be substituting. If the
   3979     // pattern was instantiated from a member template, look back further to
   3980     // find the real pattern.
   3981     assert(VarSpec->getSpecializedTemplate() &&
   3982            "Specialization without specialized template?");
   3983     llvm::PointerUnion<VarTemplateDecl *,
   3984                        VarTemplatePartialSpecializationDecl *> PatternPtr =
   3985         VarSpec->getSpecializedTemplateOrPartial();
   3986     if (PatternPtr.is<VarTemplatePartialSpecializationDecl *>()) {
   3987       VarTemplatePartialSpecializationDecl *Tmpl =
   3988           PatternPtr.get<VarTemplatePartialSpecializationDecl *>();
   3989       while (VarTemplatePartialSpecializationDecl *From =
   3990                  Tmpl->getInstantiatedFromMember()) {
   3991         if (Tmpl->isMemberSpecialization())
   3992           break;
   3993 
   3994         Tmpl = From;
   3995       }
   3996       PatternDecl = Tmpl;
   3997     } else {
   3998       VarTemplateDecl *Tmpl = PatternPtr.get<VarTemplateDecl *>();
   3999       while (VarTemplateDecl *From =
   4000                  Tmpl->getInstantiatedFromMemberTemplate()) {
   4001         if (Tmpl->isMemberSpecialization())
   4002           break;
   4003 
   4004         Tmpl = From;
   4005       }
   4006       PatternDecl = Tmpl->getTemplatedDecl();
   4007     }
   4008 
   4009     // If this is a static data member template, there might be an
   4010     // uninstantiated initializer on the declaration. If so, instantiate
   4011     // it now.
   4012     if (PatternDecl->isStaticDataMember() &&
   4013         (PatternDecl = PatternDecl->getFirstDecl())->hasInit() &&
   4014         !Var->hasInit()) {
   4015       // FIXME: Factor out the duplicated instantiation context setup/tear down
   4016       // code here.
   4017       InstantiatingTemplate Inst(*this, PointOfInstantiation, Var);
   4018       if (Inst.isInvalid())
   4019         return;
   4020       PrettyDeclStackTraceEntry CrashInfo(*this, Var, SourceLocation(),
   4021                                           "instantiating variable initializer");
   4022 
   4023       // If we're performing recursive template instantiation, create our own
   4024       // queue of pending implicit instantiations that we will instantiate
   4025       // later, while we're still within our own instantiation context.
   4026       SavePendingInstantiationsAndVTableUsesRAII
   4027           SavePendingInstantiationsAndVTableUses(*this, /*Enabled=*/Recursive);
   4028 
   4029       LocalInstantiationScope Local(*this);
   4030 
   4031       // Enter the scope of this instantiation. We don't use
   4032       // PushDeclContext because we don't have a scope.
   4033       ContextRAII PreviousContext(*this, Var->getDeclContext());
   4034       InstantiateVariableInitializer(Var, PatternDecl, TemplateArgs);
   4035       PreviousContext.pop();
   4036 
   4037       // FIXME: Need to inform the ASTConsumer that we instantiated the
   4038       // initializer?
   4039 
   4040       // This variable may have local implicit instantiations that need to be
   4041       // instantiated within this scope.
   4042       PerformPendingInstantiations(/*LocalOnly=*/true);
   4043 
   4044       Local.Exit();
   4045 
   4046       if (Recursive) {
   4047         // Define any newly required vtables.
   4048         DefineUsedVTables();
   4049 
   4050         // Instantiate any pending implicit instantiations found during the
   4051         // instantiation of this template.
   4052         PerformPendingInstantiations();
   4053 
   4054         // PendingInstantiations and VTableUses are restored through
   4055         // SavePendingInstantiationsAndVTableUses's destructor.
   4056       }
   4057     }
   4058 
   4059     // Find actual definition
   4060     Def = PatternDecl->getDefinition(getASTContext());
   4061   } else {
   4062     // If this is a static data member, find its out-of-line definition.
   4063     assert(Var->isStaticDataMember() && "not a static data member?");
   4064     PatternDecl = Var->getInstantiatedFromStaticDataMember();
   4065 
   4066     assert(PatternDecl && "data member was not instantiated from a template?");
   4067     assert(PatternDecl->isStaticDataMember() && "not a static data member?");
   4068     Def = PatternDecl->getDefinition();
   4069   }
   4070 
   4071   // FIXME: Check that the definition is visible before trying to instantiate
   4072   // it. This requires us to track the instantiation stack in order to know
   4073   // which definitions should be visible.
   4074 
   4075   // If we don't have a definition of the variable template, we won't perform
   4076   // any instantiation. Rather, we rely on the user to instantiate this
   4077   // definition (or provide a specialization for it) in another translation
   4078   // unit.
   4079   if (!Def) {
   4080     if (DefinitionRequired) {
   4081       if (VarSpec)
   4082         Diag(PointOfInstantiation,
   4083              diag::err_explicit_instantiation_undefined_var_template) << Var;
   4084       else
   4085         Diag(PointOfInstantiation,
   4086              diag::err_explicit_instantiation_undefined_member)
   4087             << 2 << Var->getDeclName() << Var->getDeclContext();
   4088       Diag(PatternDecl->getLocation(),
   4089            diag::note_explicit_instantiation_here);
   4090       if (VarSpec)
   4091         Var->setInvalidDecl();
   4092     } else if (Var->getTemplateSpecializationKind()
   4093                  == TSK_ExplicitInstantiationDefinition) {
   4094       PendingInstantiations.push_back(
   4095         std::make_pair(Var, PointOfInstantiation));
   4096     } else if (Var->getTemplateSpecializationKind()
   4097                  == TSK_ImplicitInstantiation) {
   4098       // Warn about missing definition at the end of translation unit.
   4099       if (AtEndOfTU && !getDiagnostics().hasErrorOccurred()) {
   4100         Diag(PointOfInstantiation, diag::warn_var_template_missing)
   4101           << Var;
   4102         Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);
   4103         if (getLangOpts().CPlusPlus11)
   4104           Diag(PointOfInstantiation, diag::note_inst_declaration_hint) << Var;
   4105       }
   4106     }
   4107 
   4108     return;
   4109   }
   4110 
   4111   TemplateSpecializationKind TSK = Var->getTemplateSpecializationKind();
   4112 
   4113   // Never instantiate an explicit specialization.
   4114   if (TSK == TSK_ExplicitSpecialization)
   4115     return;
   4116 
   4117   // C++11 [temp.explicit]p10:
   4118   //   Except for inline functions, [...] explicit instantiation declarations
   4119   //   have the effect of suppressing the implicit instantiation of the entity
   4120   //   to which they refer.
   4121   if (TSK == TSK_ExplicitInstantiationDeclaration)
   4122     return;
   4123 
   4124   // Make sure to pass the instantiated variable to the consumer at the end.
   4125   struct PassToConsumerRAII {
   4126     ASTConsumer &Consumer;
   4127     VarDecl *Var;
   4128 
   4129     PassToConsumerRAII(ASTConsumer &Consumer, VarDecl *Var)
   4130       : Consumer(Consumer), Var(Var) { }
   4131 
   4132     ~PassToConsumerRAII() {
   4133       Consumer.HandleCXXStaticMemberVarInstantiation(Var);
   4134     }
   4135   } PassToConsumerRAII(Consumer, Var);
   4136 
   4137   // If we already have a definition, we're done.
   4138   if (VarDecl *Def = Var->getDefinition()) {
   4139     // We may be explicitly instantiating something we've already implicitly
   4140     // instantiated.
   4141     Def->setTemplateSpecializationKind(Var->getTemplateSpecializationKind(),
   4142                                        PointOfInstantiation);
   4143     return;
   4144   }
   4145 
   4146   InstantiatingTemplate Inst(*this, PointOfInstantiation, Var);
   4147   if (Inst.isInvalid())
   4148     return;
   4149   PrettyDeclStackTraceEntry CrashInfo(*this, Var, SourceLocation(),
   4150                                       "instantiating variable definition");
   4151 
   4152   // If we're performing recursive template instantiation, create our own
   4153   // queue of pending implicit instantiations that we will instantiate later,
   4154   // while we're still within our own instantiation context.
   4155   SavePendingLocalImplicitInstantiationsRAII
   4156       SavedPendingLocalImplicitInstantiations(*this);
   4157   SavePendingInstantiationsAndVTableUsesRAII
   4158       SavePendingInstantiationsAndVTableUses(*this, /*Enabled=*/Recursive);
   4159 
   4160   // Enter the scope of this instantiation. We don't use
   4161   // PushDeclContext because we don't have a scope.
   4162   ContextRAII PreviousContext(*this, Var->getDeclContext());
   4163   LocalInstantiationScope Local(*this);
   4164 
   4165   VarDecl *OldVar = Var;
   4166   if (Def->isStaticDataMember() && !Def->isOutOfLine()) {
   4167     // We're instantiating an inline static data member whose definition was
   4168     // provided inside the class.
   4169     // FIXME: Update record?
   4170     InstantiateVariableInitializer(Var, Def, TemplateArgs);
   4171   } else if (!VarSpec) {
   4172     Var = cast_or_null<VarDecl>(SubstDecl(Def, Var->getDeclContext(),
   4173                                           TemplateArgs));
   4174   } else if (Var->isStaticDataMember() &&
   4175              Var->getLexicalDeclContext()->isRecord()) {
   4176     // We need to instantiate the definition of a static data member template,
   4177     // and all we have is the in-class declaration of it. Instantiate a separate
   4178     // declaration of the definition.
   4179     TemplateDeclInstantiator Instantiator(*this, Var->getDeclContext(),
   4180                                           TemplateArgs);
   4181     Var = cast_or_null<VarDecl>(Instantiator.VisitVarTemplateSpecializationDecl(
   4182         VarSpec->getSpecializedTemplate(), Def, nullptr,
   4183         VarSpec->getTemplateArgsInfo(), VarSpec->getTemplateArgs().asArray()));
   4184     if (Var) {
   4185       llvm::PointerUnion<VarTemplateDecl *,
   4186                          VarTemplatePartialSpecializationDecl *> PatternPtr =
   4187           VarSpec->getSpecializedTemplateOrPartial();
   4188       if (VarTemplatePartialSpecializationDecl *Partial =
   4189           PatternPtr.dyn_cast<VarTemplatePartialSpecializationDecl *>())
   4190         cast<VarTemplateSpecializationDecl>(Var)->setInstantiationOf(
   4191             Partial, &VarSpec->getTemplateInstantiationArgs());
   4192 
   4193       // Merge the definition with the declaration.
   4194       LookupResult R(*this, Var->getDeclName(), Var->getLocation(),
   4195                      LookupOrdinaryName, ForRedeclaration);
   4196       R.addDecl(OldVar);
   4197       MergeVarDecl(Var, R);
   4198 
   4199       // Attach the initializer.
   4200       InstantiateVariableInitializer(Var, Def, TemplateArgs);
   4201     }
   4202   } else
   4203     // Complete the existing variable's definition with an appropriately
   4204     // substituted type and initializer.
   4205     Var = CompleteVarTemplateSpecializationDecl(VarSpec, Def, TemplateArgs);
   4206 
   4207   PreviousContext.pop();
   4208 
   4209   if (Var) {
   4210     PassToConsumerRAII.Var = Var;
   4211     Var->setTemplateSpecializationKind(OldVar->getTemplateSpecializationKind(),
   4212                                        OldVar->getPointOfInstantiation());
   4213   }
   4214 
   4215   // This variable may have local implicit instantiations that need to be
   4216   // instantiated within this scope.
   4217   PerformPendingInstantiations(/*LocalOnly=*/true);
   4218 
   4219   Local.Exit();
   4220 
   4221   if (Recursive) {
   4222     // Define any newly required vtables.
   4223     DefineUsedVTables();
   4224 
   4225     // Instantiate any pending implicit instantiations found during the
   4226     // instantiation of this template.
   4227     PerformPendingInstantiations();
   4228 
   4229     // PendingInstantiations and VTableUses are restored through
   4230     // SavePendingInstantiationsAndVTableUses's destructor.
   4231   }
   4232 }
   4233 
   4234 void
   4235 Sema::InstantiateMemInitializers(CXXConstructorDecl *New,
   4236                                  const CXXConstructorDecl *Tmpl,
   4237                            const MultiLevelTemplateArgumentList &TemplateArgs) {
   4238 
   4239   SmallVector<CXXCtorInitializer*, 4> NewInits;
   4240   bool AnyErrors = Tmpl->isInvalidDecl();
   4241 
   4242   // Instantiate all the initializers.
   4243   for (const auto *Init : Tmpl->inits()) {
   4244     // Only instantiate written initializers, let Sema re-construct implicit
   4245     // ones.
   4246     if (!Init->isWritten())
   4247       continue;
   4248 
   4249     SourceLocation EllipsisLoc;
   4250 
   4251     if (Init->isPackExpansion()) {
   4252       // This is a pack expansion. We should expand it now.
   4253       TypeLoc BaseTL = Init->getTypeSourceInfo()->getTypeLoc();
   4254       SmallVector<UnexpandedParameterPack, 4> Unexpanded;
   4255       collectUnexpandedParameterPacks(BaseTL, Unexpanded);
   4256       collectUnexpandedParameterPacks(Init->getInit(), Unexpanded);
   4257       bool ShouldExpand = false;
   4258       bool RetainExpansion = false;
   4259       Optional<unsigned> NumExpansions;
   4260       if (CheckParameterPacksForExpansion(Init->getEllipsisLoc(),
   4261                                           BaseTL.getSourceRange(),
   4262                                           Unexpanded,
   4263                                           TemplateArgs, ShouldExpand,
   4264                                           RetainExpansion,
   4265                                           NumExpansions)) {
   4266         AnyErrors = true;
   4267         New->setInvalidDecl();
   4268         continue;
   4269       }
   4270       assert(ShouldExpand && "Partial instantiation of base initializer?");
   4271 
   4272       // Loop over all of the arguments in the argument pack(s),
   4273       for (unsigned I = 0; I != *NumExpansions; ++I) {
   4274         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(*this, I);
   4275 
   4276         // Instantiate the initializer.
   4277         ExprResult TempInit = SubstInitializer(Init->getInit(), TemplateArgs,
   4278                                                /*CXXDirectInit=*/true);
   4279         if (TempInit.isInvalid()) {
   4280           AnyErrors = true;
   4281           break;
   4282         }
   4283 
   4284         // Instantiate the base type.
   4285         TypeSourceInfo *BaseTInfo = SubstType(Init->getTypeSourceInfo(),
   4286                                               TemplateArgs,
   4287                                               Init->getSourceLocation(),
   4288                                               New->getDeclName());
   4289         if (!BaseTInfo) {
   4290           AnyErrors = true;
   4291           break;
   4292         }
   4293 
   4294         // Build the initializer.
   4295         MemInitResult NewInit = BuildBaseInitializer(BaseTInfo->getType(),
   4296                                                      BaseTInfo, TempInit.get(),
   4297                                                      New->getParent(),
   4298                                                      SourceLocation());
   4299         if (NewInit.isInvalid()) {
   4300           AnyErrors = true;
   4301           break;
   4302         }
   4303 
   4304         NewInits.push_back(NewInit.get());
   4305       }
   4306 
   4307       continue;
   4308     }
   4309 
   4310     // Instantiate the initializer.
   4311     ExprResult TempInit = SubstInitializer(Init->getInit(), TemplateArgs,
   4312                                            /*CXXDirectInit=*/true);
   4313     if (TempInit.isInvalid()) {
   4314       AnyErrors = true;
   4315       continue;
   4316     }
   4317 
   4318     MemInitResult NewInit;
   4319     if (Init->isDelegatingInitializer() || Init->isBaseInitializer()) {
   4320       TypeSourceInfo *TInfo = SubstType(Init->getTypeSourceInfo(),
   4321                                         TemplateArgs,
   4322                                         Init->getSourceLocation(),
   4323                                         New->getDeclName());
   4324       if (!TInfo) {
   4325         AnyErrors = true;
   4326         New->setInvalidDecl();
   4327         continue;
   4328       }
   4329 
   4330       if (Init->isBaseInitializer())
   4331         NewInit = BuildBaseInitializer(TInfo->getType(), TInfo, TempInit.get(),
   4332                                        New->getParent(), EllipsisLoc);
   4333       else
   4334         NewInit = BuildDelegatingInitializer(TInfo, TempInit.get(),
   4335                                   cast<CXXRecordDecl>(CurContext->getParent()));
   4336     } else if (Init->isMemberInitializer()) {
   4337       FieldDecl *Member = cast_or_null<FieldDecl>(FindInstantiatedDecl(
   4338                                                      Init->getMemberLocation(),
   4339                                                      Init->getMember(),
   4340                                                      TemplateArgs));
   4341       if (!Member) {
   4342         AnyErrors = true;
   4343         New->setInvalidDecl();
   4344         continue;
   4345       }
   4346 
   4347       NewInit = BuildMemberInitializer(Member, TempInit.get(),
   4348                                        Init->getSourceLocation());
   4349     } else if (Init->isIndirectMemberInitializer()) {
   4350       IndirectFieldDecl *IndirectMember =
   4351          cast_or_null<IndirectFieldDecl>(FindInstantiatedDecl(
   4352                                  Init->getMemberLocation(),
   4353                                  Init->getIndirectMember(), TemplateArgs));
   4354 
   4355       if (!IndirectMember) {
   4356         AnyErrors = true;
   4357         New->setInvalidDecl();
   4358         continue;
   4359       }
   4360 
   4361       NewInit = BuildMemberInitializer(IndirectMember, TempInit.get(),
   4362                                        Init->getSourceLocation());
   4363     }
   4364 
   4365     if (NewInit.isInvalid()) {
   4366       AnyErrors = true;
   4367       New->setInvalidDecl();
   4368     } else {
   4369       NewInits.push_back(NewInit.get());
   4370     }
   4371   }
   4372 
   4373   // Assign all the initializers to the new constructor.
   4374   ActOnMemInitializers(New,
   4375                        /*FIXME: ColonLoc */
   4376                        SourceLocation(),
   4377                        NewInits,
   4378                        AnyErrors);
   4379 }
   4380 
   4381 // TODO: this could be templated if the various decl types used the
   4382 // same method name.
   4383 static bool isInstantiationOf(ClassTemplateDecl *Pattern,
   4384                               ClassTemplateDecl *Instance) {
   4385   Pattern = Pattern->getCanonicalDecl();
   4386 
   4387   do {
   4388     Instance = Instance->getCanonicalDecl();
   4389     if (Pattern == Instance) return true;
   4390     Instance = Instance->getInstantiatedFromMemberTemplate();
   4391   } while (Instance);
   4392 
   4393   return false;
   4394 }
   4395 
   4396 static bool isInstantiationOf(FunctionTemplateDecl *Pattern,
   4397                               FunctionTemplateDecl *Instance) {
   4398   Pattern = Pattern->getCanonicalDecl();
   4399 
   4400   do {
   4401     Instance = Instance->getCanonicalDecl();
   4402     if (Pattern == Instance) return true;
   4403     Instance = Instance->getInstantiatedFromMemberTemplate();
   4404   } while (Instance);
   4405 
   4406   return false;
   4407 }
   4408 
   4409 static bool
   4410 isInstantiationOf(ClassTemplatePartialSpecializationDecl *Pattern,
   4411                   ClassTemplatePartialSpecializationDecl *Instance) {
   4412   Pattern
   4413     = cast<ClassTemplatePartialSpecializationDecl>(Pattern->getCanonicalDecl());
   4414   do {
   4415     Instance = cast<ClassTemplatePartialSpecializationDecl>(
   4416                                                 Instance->getCanonicalDecl());
   4417     if (Pattern == Instance)
   4418       return true;
   4419     Instance = Instance->getInstantiatedFromMember();
   4420   } while (Instance);
   4421 
   4422   return false;
   4423 }
   4424 
   4425 static bool isInstantiationOf(CXXRecordDecl *Pattern,
   4426                               CXXRecordDecl *Instance) {
   4427   Pattern = Pattern->getCanonicalDecl();
   4428 
   4429   do {
   4430     Instance = Instance->getCanonicalDecl();
   4431     if (Pattern == Instance) return true;
   4432     Instance = Instance->getInstantiatedFromMemberClass();
   4433   } while (Instance);
   4434 
   4435   return false;
   4436 }
   4437 
   4438 static bool isInstantiationOf(FunctionDecl *Pattern,
   4439                               FunctionDecl *Instance) {
   4440   Pattern = Pattern->getCanonicalDecl();
   4441 
   4442   do {
   4443     Instance = Instance->getCanonicalDecl();
   4444     if (Pattern == Instance) return true;
   4445     Instance = Instance->getInstantiatedFromMemberFunction();
   4446   } while (Instance);
   4447 
   4448   return false;
   4449 }
   4450 
   4451 static bool isInstantiationOf(EnumDecl *Pattern,
   4452                               EnumDecl *Instance) {
   4453   Pattern = Pattern->getCanonicalDecl();
   4454 
   4455   do {
   4456     Instance = Instance->getCanonicalDecl();
   4457     if (Pattern == Instance) return true;
   4458     Instance = Instance->getInstantiatedFromMemberEnum();
   4459   } while (Instance);
   4460 
   4461   return false;
   4462 }
   4463 
   4464 static bool isInstantiationOf(UsingShadowDecl *Pattern,
   4465                               UsingShadowDecl *Instance,
   4466                               ASTContext &C) {
   4467   return declaresSameEntity(C.getInstantiatedFromUsingShadowDecl(Instance),
   4468                             Pattern);
   4469 }
   4470 
   4471 static bool isInstantiationOf(UsingDecl *Pattern,
   4472                               UsingDecl *Instance,
   4473                               ASTContext &C) {
   4474   return declaresSameEntity(C.getInstantiatedFromUsingDecl(Instance), Pattern);
   4475 }
   4476 
   4477 static bool isInstantiationOf(UnresolvedUsingValueDecl *Pattern,
   4478                               UsingDecl *Instance,
   4479                               ASTContext &C) {
   4480   return declaresSameEntity(C.getInstantiatedFromUsingDecl(Instance), Pattern);
   4481 }
   4482 
   4483 static bool isInstantiationOf(UnresolvedUsingTypenameDecl *Pattern,
   4484                               UsingDecl *Instance,
   4485                               ASTContext &C) {
   4486   return declaresSameEntity(C.getInstantiatedFromUsingDecl(Instance), Pattern);
   4487 }
   4488 
   4489 static bool isInstantiationOfStaticDataMember(VarDecl *Pattern,
   4490                                               VarDecl *Instance) {
   4491   assert(Instance->isStaticDataMember());
   4492 
   4493   Pattern = Pattern->getCanonicalDecl();
   4494 
   4495   do {
   4496     Instance = Instance->getCanonicalDecl();
   4497     if (Pattern == Instance) return true;
   4498     Instance = Instance->getInstantiatedFromStaticDataMember();
   4499   } while (Instance);
   4500 
   4501   return false;
   4502 }
   4503 
   4504 // Other is the prospective instantiation
   4505 // D is the prospective pattern
   4506 static bool isInstantiationOf(ASTContext &Ctx, NamedDecl *D, Decl *Other) {
   4507   if (D->getKind() != Other->getKind()) {
   4508     if (UnresolvedUsingTypenameDecl *UUD
   4509           = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
   4510       if (UsingDecl *UD = dyn_cast<UsingDecl>(Other)) {
   4511         return isInstantiationOf(UUD, UD, Ctx);
   4512       }
   4513     }
   4514 
   4515     if (UnresolvedUsingValueDecl *UUD
   4516           = dyn_cast<UnresolvedUsingValueDecl>(D)) {
   4517       if (UsingDecl *UD = dyn_cast<UsingDecl>(Other)) {
   4518         return isInstantiationOf(UUD, UD, Ctx);
   4519       }
   4520     }
   4521 
   4522     return false;
   4523   }
   4524 
   4525   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Other))
   4526     return isInstantiationOf(cast<CXXRecordDecl>(D), Record);
   4527 
   4528   if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Other))
   4529     return isInstantiationOf(cast<FunctionDecl>(D), Function);
   4530 
   4531   if (EnumDecl *Enum = dyn_cast<EnumDecl>(Other))
   4532     return isInstantiationOf(cast<EnumDecl>(D), Enum);
   4533 
   4534   if (VarDecl *Var = dyn_cast<VarDecl>(Other))
   4535     if (Var->isStaticDataMember())
   4536       return isInstantiationOfStaticDataMember(cast<VarDecl>(D), Var);
   4537 
   4538   if (ClassTemplateDecl *Temp = dyn_cast<ClassTemplateDecl>(Other))
   4539     return isInstantiationOf(cast<ClassTemplateDecl>(D), Temp);
   4540 
   4541   if (FunctionTemplateDecl *Temp = dyn_cast<FunctionTemplateDecl>(Other))
   4542     return isInstantiationOf(cast<FunctionTemplateDecl>(D), Temp);
   4543 
   4544   if (ClassTemplatePartialSpecializationDecl *PartialSpec
   4545         = dyn_cast<ClassTemplatePartialSpecializationDecl>(Other))
   4546     return isInstantiationOf(cast<ClassTemplatePartialSpecializationDecl>(D),
   4547                              PartialSpec);
   4548 
   4549   if (FieldDecl *Field = dyn_cast<FieldDecl>(Other)) {
   4550     if (!Field->getDeclName()) {
   4551       // This is an unnamed field.
   4552       return declaresSameEntity(Ctx.getInstantiatedFromUnnamedFieldDecl(Field),
   4553                                 cast<FieldDecl>(D));
   4554     }
   4555   }
   4556 
   4557   if (UsingDecl *Using = dyn_cast<UsingDecl>(Other))
   4558     return isInstantiationOf(cast<UsingDecl>(D), Using, Ctx);
   4559 
   4560   if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(Other))
   4561     return isInstantiationOf(cast<UsingShadowDecl>(D), Shadow, Ctx);
   4562 
   4563   return D->getDeclName() && isa<NamedDecl>(Other) &&
   4564     D->getDeclName() == cast<NamedDecl>(Other)->getDeclName();
   4565 }
   4566 
   4567 template<typename ForwardIterator>
   4568 static NamedDecl *findInstantiationOf(ASTContext &Ctx,
   4569                                       NamedDecl *D,
   4570                                       ForwardIterator first,
   4571                                       ForwardIterator last) {
   4572   for (; first != last; ++first)
   4573     if (isInstantiationOf(Ctx, D, *first))
   4574       return cast<NamedDecl>(*first);
   4575 
   4576   return nullptr;
   4577 }
   4578 
   4579 /// \brief Finds the instantiation of the given declaration context
   4580 /// within the current instantiation.
   4581 ///
   4582 /// \returns NULL if there was an error
   4583 DeclContext *Sema::FindInstantiatedContext(SourceLocation Loc, DeclContext* DC,
   4584                           const MultiLevelTemplateArgumentList &TemplateArgs) {
   4585   if (NamedDecl *D = dyn_cast<NamedDecl>(DC)) {
   4586     Decl* ID = FindInstantiatedDecl(Loc, D, TemplateArgs);
   4587     return cast_or_null<DeclContext>(ID);
   4588   } else return DC;
   4589 }
   4590 
   4591 /// \brief Find the instantiation of the given declaration within the
   4592 /// current instantiation.
   4593 ///
   4594 /// This routine is intended to be used when \p D is a declaration
   4595 /// referenced from within a template, that needs to mapped into the
   4596 /// corresponding declaration within an instantiation. For example,
   4597 /// given:
   4598 ///
   4599 /// \code
   4600 /// template<typename T>
   4601 /// struct X {
   4602 ///   enum Kind {
   4603 ///     KnownValue = sizeof(T)
   4604 ///   };
   4605 ///
   4606 ///   bool getKind() const { return KnownValue; }
   4607 /// };
   4608 ///
   4609 /// template struct X<int>;
   4610 /// \endcode
   4611 ///
   4612 /// In the instantiation of <tt>X<int>::getKind()</tt>, we need to map the
   4613 /// \p EnumConstantDecl for \p KnownValue (which refers to
   4614 /// <tt>X<T>::<Kind>::KnownValue</tt>) to its instantiation
   4615 /// (<tt>X<int>::<Kind>::KnownValue</tt>). \p FindInstantiatedDecl performs
   4616 /// this mapping from within the instantiation of <tt>X<int></tt>.
   4617 NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
   4618                           const MultiLevelTemplateArgumentList &TemplateArgs) {
   4619   DeclContext *ParentDC = D->getDeclContext();
   4620   // FIXME: Parmeters of pointer to functions (y below) that are themselves
   4621   // parameters (p below) can have their ParentDC set to the translation-unit
   4622   // - thus we can not consistently check if the ParentDC of such a parameter
   4623   // is Dependent or/and a FunctionOrMethod.
   4624   // For e.g. this code, during Template argument deduction tries to
   4625   // find an instantiated decl for (T y) when the ParentDC for y is
   4626   // the translation unit.
   4627   //   e.g. template <class T> void Foo(auto (*p)(T y) -> decltype(y())) {}
   4628   //   float baz(float(*)()) { return 0.0; }
   4629   //   Foo(baz);
   4630   // The better fix here is perhaps to ensure that a ParmVarDecl, by the time
   4631   // it gets here, always has a FunctionOrMethod as its ParentDC??
   4632   // For now:
   4633   //  - as long as we have a ParmVarDecl whose parent is non-dependent and
   4634   //    whose type is not instantiation dependent, do nothing to the decl
   4635   //  - otherwise find its instantiated decl.
   4636   if (isa<ParmVarDecl>(D) && !ParentDC->isDependentContext() &&
   4637       !cast<ParmVarDecl>(D)->getType()->isInstantiationDependentType())
   4638     return D;
   4639   if (isa<ParmVarDecl>(D) || isa<NonTypeTemplateParmDecl>(D) ||
   4640       isa<TemplateTypeParmDecl>(D) || isa<TemplateTemplateParmDecl>(D) ||
   4641       (ParentDC->isFunctionOrMethod() && ParentDC->isDependentContext()) ||
   4642       (isa<CXXRecordDecl>(D) && cast<CXXRecordDecl>(D)->isLambda())) {
   4643     // D is a local of some kind. Look into the map of local
   4644     // declarations to their instantiations.
   4645     if (CurrentInstantiationScope) {
   4646       if (auto Found = CurrentInstantiationScope->findInstantiationOf(D)) {
   4647         if (Decl *FD = Found->dyn_cast<Decl *>())
   4648           return cast<NamedDecl>(FD);
   4649 
   4650         int PackIdx = ArgumentPackSubstitutionIndex;
   4651         assert(PackIdx != -1 &&
   4652                "found declaration pack but not pack expanding");
   4653         typedef LocalInstantiationScope::DeclArgumentPack DeclArgumentPack;
   4654         return cast<NamedDecl>((*Found->get<DeclArgumentPack *>())[PackIdx]);
   4655       }
   4656     }
   4657 
   4658     // If we're performing a partial substitution during template argument
   4659     // deduction, we may not have values for template parameters yet. They
   4660     // just map to themselves.
   4661     if (isa<NonTypeTemplateParmDecl>(D) || isa<TemplateTypeParmDecl>(D) ||
   4662         isa<TemplateTemplateParmDecl>(D))
   4663       return D;
   4664 
   4665     if (D->isInvalidDecl())
   4666       return nullptr;
   4667 
   4668     // Normally this function only searches for already instantiated declaration
   4669     // however we have to make an exclusion for local types used before
   4670     // definition as in the code:
   4671     //
   4672     //   template<typename T> void f1() {
   4673     //     void g1(struct x1);
   4674     //     struct x1 {};
   4675     //   }
   4676     //
   4677     // In this case instantiation of the type of 'g1' requires definition of
   4678     // 'x1', which is defined later. Error recovery may produce an enum used
   4679     // before definition. In these cases we need to instantiate relevant
   4680     // declarations here.
   4681     bool NeedInstantiate = false;
   4682     if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D))
   4683       NeedInstantiate = RD->isLocalClass();
   4684     else
   4685       NeedInstantiate = isa<EnumDecl>(D);
   4686     if (NeedInstantiate) {
   4687       Decl *Inst = SubstDecl(D, CurContext, TemplateArgs);
   4688       CurrentInstantiationScope->InstantiatedLocal(D, Inst);
   4689       return cast<TypeDecl>(Inst);
   4690     }
   4691 
   4692     // If we didn't find the decl, then we must have a label decl that hasn't
   4693     // been found yet.  Lazily instantiate it and return it now.
   4694     assert(isa<LabelDecl>(D));
   4695 
   4696     Decl *Inst = SubstDecl(D, CurContext, TemplateArgs);
   4697     assert(Inst && "Failed to instantiate label??");
   4698 
   4699     CurrentInstantiationScope->InstantiatedLocal(D, Inst);
   4700     return cast<LabelDecl>(Inst);
   4701   }
   4702 
   4703   // For variable template specializations, update those that are still
   4704   // type-dependent.
   4705   if (VarTemplateSpecializationDecl *VarSpec =
   4706           dyn_cast<VarTemplateSpecializationDecl>(D)) {
   4707     bool InstantiationDependent = false;
   4708     const TemplateArgumentListInfo &VarTemplateArgs =
   4709         VarSpec->getTemplateArgsInfo();
   4710     if (TemplateSpecializationType::anyDependentTemplateArguments(
   4711             VarTemplateArgs, InstantiationDependent))
   4712       D = cast<NamedDecl>(
   4713           SubstDecl(D, VarSpec->getDeclContext(), TemplateArgs));
   4714     return D;
   4715   }
   4716 
   4717   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
   4718     if (!Record->isDependentContext())
   4719       return D;
   4720 
   4721     // Determine whether this record is the "templated" declaration describing
   4722     // a class template or class template partial specialization.
   4723     ClassTemplateDecl *ClassTemplate = Record->getDescribedClassTemplate();
   4724     if (ClassTemplate)
   4725       ClassTemplate = ClassTemplate->getCanonicalDecl();
   4726     else if (ClassTemplatePartialSpecializationDecl *PartialSpec
   4727                = dyn_cast<ClassTemplatePartialSpecializationDecl>(Record))
   4728       ClassTemplate = PartialSpec->getSpecializedTemplate()->getCanonicalDecl();
   4729 
   4730     // Walk the current context to find either the record or an instantiation of
   4731     // it.
   4732     DeclContext *DC = CurContext;
   4733     while (!DC->isFileContext()) {
   4734       // If we're performing substitution while we're inside the template
   4735       // definition, we'll find our own context. We're done.
   4736       if (DC->Equals(Record))
   4737         return Record;
   4738 
   4739       if (CXXRecordDecl *InstRecord = dyn_cast<CXXRecordDecl>(DC)) {
   4740         // Check whether we're in the process of instantiating a class template
   4741         // specialization of the template we're mapping.
   4742         if (ClassTemplateSpecializationDecl *InstSpec
   4743                       = dyn_cast<ClassTemplateSpecializationDecl>(InstRecord)){
   4744           ClassTemplateDecl *SpecTemplate = InstSpec->getSpecializedTemplate();
   4745           if (ClassTemplate && isInstantiationOf(ClassTemplate, SpecTemplate))
   4746             return InstRecord;
   4747         }
   4748 
   4749         // Check whether we're in the process of instantiating a member class.
   4750         if (isInstantiationOf(Record, InstRecord))
   4751           return InstRecord;
   4752       }
   4753 
   4754       // Move to the outer template scope.
   4755       if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {
   4756         if (FD->getFriendObjectKind() && FD->getDeclContext()->isFileContext()){
   4757           DC = FD->getLexicalDeclContext();
   4758           continue;
   4759         }
   4760       }
   4761 
   4762       DC = DC->getParent();
   4763     }
   4764 
   4765     // Fall through to deal with other dependent record types (e.g.,
   4766     // anonymous unions in class templates).
   4767   }
   4768 
   4769   if (!ParentDC->isDependentContext())
   4770     return D;
   4771 
   4772   ParentDC = FindInstantiatedContext(Loc, ParentDC, TemplateArgs);
   4773   if (!ParentDC)
   4774     return nullptr;
   4775 
   4776   if (ParentDC != D->getDeclContext()) {
   4777     // We performed some kind of instantiation in the parent context,
   4778     // so now we need to look into the instantiated parent context to
   4779     // find the instantiation of the declaration D.
   4780 
   4781     // If our context used to be dependent, we may need to instantiate
   4782     // it before performing lookup into that context.
   4783     bool IsBeingInstantiated = false;
   4784     if (CXXRecordDecl *Spec = dyn_cast<CXXRecordDecl>(ParentDC)) {
   4785       if (!Spec->isDependentContext()) {
   4786         QualType T = Context.getTypeDeclType(Spec);
   4787         const RecordType *Tag = T->getAs<RecordType>();
   4788         assert(Tag && "type of non-dependent record is not a RecordType");
   4789         if (Tag->isBeingDefined())
   4790           IsBeingInstantiated = true;
   4791         if (!Tag->isBeingDefined() &&
   4792             RequireCompleteType(Loc, T, diag::err_incomplete_type))
   4793           return nullptr;
   4794 
   4795         ParentDC = Tag->getDecl();
   4796       }
   4797     }
   4798 
   4799     NamedDecl *Result = nullptr;
   4800     if (D->getDeclName()) {
   4801       DeclContext::lookup_result Found = ParentDC->lookup(D->getDeclName());
   4802       Result = findInstantiationOf(Context, D, Found.begin(), Found.end());
   4803     } else {
   4804       // Since we don't have a name for the entity we're looking for,
   4805       // our only option is to walk through all of the declarations to
   4806       // find that name. This will occur in a few cases:
   4807       //
   4808       //   - anonymous struct/union within a template
   4809       //   - unnamed class/struct/union/enum within a template
   4810       //
   4811       // FIXME: Find a better way to find these instantiations!
   4812       Result = findInstantiationOf(Context, D,
   4813                                    ParentDC->decls_begin(),
   4814                                    ParentDC->decls_end());
   4815     }
   4816 
   4817     if (!Result) {
   4818       if (isa<UsingShadowDecl>(D)) {
   4819         // UsingShadowDecls can instantiate to nothing because of using hiding.
   4820       } else if (Diags.hasErrorOccurred()) {
   4821         // We've already complained about something, so most likely this
   4822         // declaration failed to instantiate. There's no point in complaining
   4823         // further, since this is normal in invalid code.
   4824       } else if (IsBeingInstantiated) {
   4825         // The class in which this member exists is currently being
   4826         // instantiated, and we haven't gotten around to instantiating this
   4827         // member yet. This can happen when the code uses forward declarations
   4828         // of member classes, and introduces ordering dependencies via
   4829         // template instantiation.
   4830         Diag(Loc, diag::err_member_not_yet_instantiated)
   4831           << D->getDeclName()
   4832           << Context.getTypeDeclType(cast<CXXRecordDecl>(ParentDC));
   4833         Diag(D->getLocation(), diag::note_non_instantiated_member_here);
   4834       } else if (EnumConstantDecl *ED = dyn_cast<EnumConstantDecl>(D)) {
   4835         // This enumeration constant was found when the template was defined,
   4836         // but can't be found in the instantiation. This can happen if an
   4837         // unscoped enumeration member is explicitly specialized.
   4838         EnumDecl *Enum = cast<EnumDecl>(ED->getLexicalDeclContext());
   4839         EnumDecl *Spec = cast<EnumDecl>(FindInstantiatedDecl(Loc, Enum,
   4840                                                              TemplateArgs));
   4841         assert(Spec->getTemplateSpecializationKind() ==
   4842                  TSK_ExplicitSpecialization);
   4843         Diag(Loc, diag::err_enumerator_does_not_exist)
   4844           << D->getDeclName()
   4845           << Context.getTypeDeclType(cast<TypeDecl>(Spec->getDeclContext()));
   4846         Diag(Spec->getLocation(), diag::note_enum_specialized_here)
   4847           << Context.getTypeDeclType(Spec);
   4848       } else {
   4849         // We should have found something, but didn't.
   4850         llvm_unreachable("Unable to find instantiation of declaration!");
   4851       }
   4852     }
   4853 
   4854     D = Result;
   4855   }
   4856 
   4857   return D;
   4858 }
   4859 
   4860 /// \brief Performs template instantiation for all implicit template
   4861 /// instantiations we have seen until this point.
   4862 void Sema::PerformPendingInstantiations(bool LocalOnly) {
   4863   while (!PendingLocalImplicitInstantiations.empty() ||
   4864          (!LocalOnly && !PendingInstantiations.empty())) {
   4865     PendingImplicitInstantiation Inst;
   4866 
   4867     if (PendingLocalImplicitInstantiations.empty()) {
   4868       Inst = PendingInstantiations.front();
   4869       PendingInstantiations.pop_front();
   4870     } else {
   4871       Inst = PendingLocalImplicitInstantiations.front();
   4872       PendingLocalImplicitInstantiations.pop_front();
   4873     }
   4874 
   4875     // Instantiate function definitions
   4876     if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Inst.first)) {
   4877       bool DefinitionRequired = Function->getTemplateSpecializationKind() ==
   4878                                 TSK_ExplicitInstantiationDefinition;
   4879       InstantiateFunctionDefinition(/*FIXME:*/Inst.second, Function, true,
   4880                                     DefinitionRequired, true);
   4881       continue;
   4882     }
   4883 
   4884     // Instantiate variable definitions
   4885     VarDecl *Var = cast<VarDecl>(Inst.first);
   4886 
   4887     assert((Var->isStaticDataMember() ||
   4888             isa<VarTemplateSpecializationDecl>(Var)) &&
   4889            "Not a static data member, nor a variable template"
   4890            " specialization?");
   4891 
   4892     // Don't try to instantiate declarations if the most recent redeclaration
   4893     // is invalid.
   4894     if (Var->getMostRecentDecl()->isInvalidDecl())
   4895       continue;
   4896 
   4897     // Check if the most recent declaration has changed the specialization kind
   4898     // and removed the need for implicit instantiation.
   4899     switch (Var->getMostRecentDecl()->getTemplateSpecializationKind()) {
   4900     case TSK_Undeclared:
   4901       llvm_unreachable("Cannot instantitiate an undeclared specialization.");
   4902     case TSK_ExplicitInstantiationDeclaration:
   4903     case TSK_ExplicitSpecialization:
   4904       continue;  // No longer need to instantiate this type.
   4905     case TSK_ExplicitInstantiationDefinition:
   4906       // We only need an instantiation if the pending instantiation *is* the
   4907       // explicit instantiation.
   4908       if (Var != Var->getMostRecentDecl()) continue;
   4909     case TSK_ImplicitInstantiation:
   4910       break;
   4911     }
   4912 
   4913     PrettyDeclStackTraceEntry CrashInfo(*this, Var, SourceLocation(),
   4914                                         "instantiating variable definition");
   4915     bool DefinitionRequired = Var->getTemplateSpecializationKind() ==
   4916                               TSK_ExplicitInstantiationDefinition;
   4917 
   4918     // Instantiate static data member definitions or variable template
   4919     // specializations.
   4920     InstantiateVariableDefinition(/*FIXME:*/ Inst.second, Var, true,
   4921                                   DefinitionRequired, true);
   4922   }
   4923 }
   4924 
   4925 void Sema::PerformDependentDiagnostics(const DeclContext *Pattern,
   4926                        const MultiLevelTemplateArgumentList &TemplateArgs) {
   4927   for (auto DD : Pattern->ddiags()) {
   4928     switch (DD->getKind()) {
   4929     case DependentDiagnostic::Access:
   4930       HandleDependentAccessCheck(*DD, TemplateArgs);
   4931       break;
   4932     }
   4933   }
   4934 }
   4935