Home | History | Annotate | Download | only in Sema
      1 //===------- SemaTemplateInstantiate.cpp - C++ Template 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.
     10 //
     11 //===----------------------------------------------------------------------===/
     12 
     13 #include "clang/Sema/SemaInternal.h"
     14 #include "TreeTransform.h"
     15 #include "clang/Sema/DeclSpec.h"
     16 #include "clang/Sema/Initialization.h"
     17 #include "clang/Sema/Lookup.h"
     18 #include "clang/Sema/Template.h"
     19 #include "clang/Sema/TemplateDeduction.h"
     20 #include "clang/AST/ASTConsumer.h"
     21 #include "clang/AST/ASTContext.h"
     22 #include "clang/AST/Expr.h"
     23 #include "clang/AST/DeclTemplate.h"
     24 #include "clang/Basic/LangOptions.h"
     25 
     26 using namespace clang;
     27 using namespace sema;
     28 
     29 //===----------------------------------------------------------------------===/
     30 // Template Instantiation Support
     31 //===----------------------------------------------------------------------===/
     32 
     33 /// \brief Retrieve the template argument list(s) that should be used to
     34 /// instantiate the definition of the given declaration.
     35 ///
     36 /// \param D the declaration for which we are computing template instantiation
     37 /// arguments.
     38 ///
     39 /// \param Innermost if non-NULL, the innermost template argument list.
     40 ///
     41 /// \param RelativeToPrimary true if we should get the template
     42 /// arguments relative to the primary template, even when we're
     43 /// dealing with a specialization. This is only relevant for function
     44 /// template specializations.
     45 ///
     46 /// \param Pattern If non-NULL, indicates the pattern from which we will be
     47 /// instantiating the definition of the given declaration, \p D. This is
     48 /// used to determine the proper set of template instantiation arguments for
     49 /// friend function template specializations.
     50 MultiLevelTemplateArgumentList
     51 Sema::getTemplateInstantiationArgs(NamedDecl *D,
     52                                    const TemplateArgumentList *Innermost,
     53                                    bool RelativeToPrimary,
     54                                    const FunctionDecl *Pattern) {
     55   // Accumulate the set of template argument lists in this structure.
     56   MultiLevelTemplateArgumentList Result;
     57 
     58   if (Innermost)
     59     Result.addOuterTemplateArguments(Innermost);
     60 
     61   DeclContext *Ctx = dyn_cast<DeclContext>(D);
     62   if (!Ctx) {
     63     Ctx = D->getDeclContext();
     64 
     65     // If we have a template template parameter with translation unit context,
     66     // then we're performing substitution into a default template argument of
     67     // this template template parameter before we've constructed the template
     68     // that will own this template template parameter. In this case, we
     69     // use empty template parameter lists for all of the outer templates
     70     // to avoid performing any substitutions.
     71     if (Ctx->isTranslationUnit()) {
     72       if (TemplateTemplateParmDecl *TTP
     73                                       = dyn_cast<TemplateTemplateParmDecl>(D)) {
     74         for (unsigned I = 0, N = TTP->getDepth() + 1; I != N; ++I)
     75           Result.addOuterTemplateArguments(0, 0);
     76         return Result;
     77       }
     78     }
     79   }
     80 
     81   while (!Ctx->isFileContext()) {
     82     // Add template arguments from a class template instantiation.
     83     if (ClassTemplateSpecializationDecl *Spec
     84           = dyn_cast<ClassTemplateSpecializationDecl>(Ctx)) {
     85       // We're done when we hit an explicit specialization.
     86       if (Spec->getSpecializationKind() == TSK_ExplicitSpecialization &&
     87           !isa<ClassTemplatePartialSpecializationDecl>(Spec))
     88         break;
     89 
     90       Result.addOuterTemplateArguments(&Spec->getTemplateInstantiationArgs());
     91 
     92       // If this class template specialization was instantiated from a
     93       // specialized member that is a class template, we're done.
     94       assert(Spec->getSpecializedTemplate() && "No class template?");
     95       if (Spec->getSpecializedTemplate()->isMemberSpecialization())
     96         break;
     97     }
     98     // Add template arguments from a function template specialization.
     99     else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Ctx)) {
    100       if (!RelativeToPrimary &&
    101           Function->getTemplateSpecializationKind()
    102                                                   == TSK_ExplicitSpecialization)
    103         break;
    104 
    105       if (const TemplateArgumentList *TemplateArgs
    106             = Function->getTemplateSpecializationArgs()) {
    107         // Add the template arguments for this specialization.
    108         Result.addOuterTemplateArguments(TemplateArgs);
    109 
    110         // If this function was instantiated from a specialized member that is
    111         // a function template, we're done.
    112         assert(Function->getPrimaryTemplate() && "No function template?");
    113         if (Function->getPrimaryTemplate()->isMemberSpecialization())
    114           break;
    115       } else if (FunctionTemplateDecl *FunTmpl
    116                                    = Function->getDescribedFunctionTemplate()) {
    117         // Add the "injected" template arguments.
    118         std::pair<const TemplateArgument *, unsigned>
    119           Injected = FunTmpl->getInjectedTemplateArgs();
    120         Result.addOuterTemplateArguments(Injected.first, Injected.second);
    121       }
    122 
    123       // If this is a friend declaration and it declares an entity at
    124       // namespace scope, take arguments from its lexical parent
    125       // instead of its semantic parent, unless of course the pattern we're
    126       // instantiating actually comes from the file's context!
    127       if (Function->getFriendObjectKind() &&
    128           Function->getDeclContext()->isFileContext() &&
    129           (!Pattern || !Pattern->getLexicalDeclContext()->isFileContext())) {
    130         Ctx = Function->getLexicalDeclContext();
    131         RelativeToPrimary = false;
    132         continue;
    133       }
    134     } else if (CXXRecordDecl *Rec = dyn_cast<CXXRecordDecl>(Ctx)) {
    135       if (ClassTemplateDecl *ClassTemplate = Rec->getDescribedClassTemplate()) {
    136         QualType T = ClassTemplate->getInjectedClassNameSpecialization();
    137         const TemplateSpecializationType *TST
    138           = cast<TemplateSpecializationType>(Context.getCanonicalType(T));
    139         Result.addOuterTemplateArguments(TST->getArgs(), TST->getNumArgs());
    140         if (ClassTemplate->isMemberSpecialization())
    141           break;
    142       }
    143     }
    144 
    145     Ctx = Ctx->getParent();
    146     RelativeToPrimary = false;
    147   }
    148 
    149   return Result;
    150 }
    151 
    152 bool Sema::ActiveTemplateInstantiation::isInstantiationRecord() const {
    153   switch (Kind) {
    154   case TemplateInstantiation:
    155   case DefaultTemplateArgumentInstantiation:
    156   case DefaultFunctionArgumentInstantiation:
    157     return true;
    158 
    159   case ExplicitTemplateArgumentSubstitution:
    160   case DeducedTemplateArgumentSubstitution:
    161   case PriorTemplateArgumentSubstitution:
    162   case DefaultTemplateArgumentChecking:
    163     return false;
    164   }
    165 
    166   return true;
    167 }
    168 
    169 Sema::InstantiatingTemplate::
    170 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
    171                       Decl *Entity,
    172                       SourceRange InstantiationRange)
    173   : SemaRef(SemaRef),
    174     SavedInNonInstantiationSFINAEContext(
    175                                         SemaRef.InNonInstantiationSFINAEContext)
    176 {
    177   Invalid = CheckInstantiationDepth(PointOfInstantiation,
    178                                     InstantiationRange);
    179   if (!Invalid) {
    180     ActiveTemplateInstantiation Inst;
    181     Inst.Kind = ActiveTemplateInstantiation::TemplateInstantiation;
    182     Inst.PointOfInstantiation = PointOfInstantiation;
    183     Inst.Entity = reinterpret_cast<uintptr_t>(Entity);
    184     Inst.TemplateArgs = 0;
    185     Inst.NumTemplateArgs = 0;
    186     Inst.InstantiationRange = InstantiationRange;
    187     SemaRef.InNonInstantiationSFINAEContext = false;
    188     SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    189   }
    190 }
    191 
    192 Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
    193                                          SourceLocation PointOfInstantiation,
    194                                          TemplateDecl *Template,
    195                                          const TemplateArgument *TemplateArgs,
    196                                          unsigned NumTemplateArgs,
    197                                          SourceRange InstantiationRange)
    198   : SemaRef(SemaRef),
    199     SavedInNonInstantiationSFINAEContext(
    200                                      SemaRef.InNonInstantiationSFINAEContext)
    201 {
    202   Invalid = CheckInstantiationDepth(PointOfInstantiation,
    203                                     InstantiationRange);
    204   if (!Invalid) {
    205     ActiveTemplateInstantiation Inst;
    206     Inst.Kind
    207       = ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation;
    208     Inst.PointOfInstantiation = PointOfInstantiation;
    209     Inst.Entity = reinterpret_cast<uintptr_t>(Template);
    210     Inst.TemplateArgs = TemplateArgs;
    211     Inst.NumTemplateArgs = NumTemplateArgs;
    212     Inst.InstantiationRange = InstantiationRange;
    213     SemaRef.InNonInstantiationSFINAEContext = false;
    214     SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    215   }
    216 }
    217 
    218 Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
    219                                          SourceLocation PointOfInstantiation,
    220                                       FunctionTemplateDecl *FunctionTemplate,
    221                                         const TemplateArgument *TemplateArgs,
    222                                                    unsigned NumTemplateArgs,
    223                          ActiveTemplateInstantiation::InstantiationKind Kind,
    224                                    sema::TemplateDeductionInfo &DeductionInfo,
    225                                               SourceRange InstantiationRange)
    226   : SemaRef(SemaRef),
    227     SavedInNonInstantiationSFINAEContext(
    228                                      SemaRef.InNonInstantiationSFINAEContext)
    229 {
    230   Invalid = CheckInstantiationDepth(PointOfInstantiation,
    231                                     InstantiationRange);
    232   if (!Invalid) {
    233     ActiveTemplateInstantiation Inst;
    234     Inst.Kind = Kind;
    235     Inst.PointOfInstantiation = PointOfInstantiation;
    236     Inst.Entity = reinterpret_cast<uintptr_t>(FunctionTemplate);
    237     Inst.TemplateArgs = TemplateArgs;
    238     Inst.NumTemplateArgs = NumTemplateArgs;
    239     Inst.DeductionInfo = &DeductionInfo;
    240     Inst.InstantiationRange = InstantiationRange;
    241     SemaRef.InNonInstantiationSFINAEContext = false;
    242     SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    243 
    244     if (!Inst.isInstantiationRecord())
    245       ++SemaRef.NonInstantiationEntries;
    246   }
    247 }
    248 
    249 Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
    250                                          SourceLocation PointOfInstantiation,
    251                           ClassTemplatePartialSpecializationDecl *PartialSpec,
    252                                          const TemplateArgument *TemplateArgs,
    253                                          unsigned NumTemplateArgs,
    254                                     sema::TemplateDeductionInfo &DeductionInfo,
    255                                          SourceRange InstantiationRange)
    256   : SemaRef(SemaRef),
    257     SavedInNonInstantiationSFINAEContext(
    258                                      SemaRef.InNonInstantiationSFINAEContext)
    259 {
    260   Invalid = false;
    261 
    262   ActiveTemplateInstantiation Inst;
    263   Inst.Kind = ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution;
    264   Inst.PointOfInstantiation = PointOfInstantiation;
    265   Inst.Entity = reinterpret_cast<uintptr_t>(PartialSpec);
    266   Inst.TemplateArgs = TemplateArgs;
    267   Inst.NumTemplateArgs = NumTemplateArgs;
    268   Inst.DeductionInfo = &DeductionInfo;
    269   Inst.InstantiationRange = InstantiationRange;
    270   SemaRef.InNonInstantiationSFINAEContext = false;
    271   SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    272 
    273   assert(!Inst.isInstantiationRecord());
    274   ++SemaRef.NonInstantiationEntries;
    275 }
    276 
    277 Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
    278                                           SourceLocation PointOfInstantiation,
    279                                           ParmVarDecl *Param,
    280                                           const TemplateArgument *TemplateArgs,
    281                                           unsigned NumTemplateArgs,
    282                                           SourceRange InstantiationRange)
    283   : SemaRef(SemaRef),
    284     SavedInNonInstantiationSFINAEContext(
    285                                      SemaRef.InNonInstantiationSFINAEContext)
    286 {
    287   Invalid = CheckInstantiationDepth(PointOfInstantiation, InstantiationRange);
    288 
    289   if (!Invalid) {
    290     ActiveTemplateInstantiation Inst;
    291     Inst.Kind
    292       = ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation;
    293     Inst.PointOfInstantiation = PointOfInstantiation;
    294     Inst.Entity = reinterpret_cast<uintptr_t>(Param);
    295     Inst.TemplateArgs = TemplateArgs;
    296     Inst.NumTemplateArgs = NumTemplateArgs;
    297     Inst.InstantiationRange = InstantiationRange;
    298     SemaRef.InNonInstantiationSFINAEContext = false;
    299     SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    300   }
    301 }
    302 
    303 Sema::InstantiatingTemplate::
    304 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
    305                       NamedDecl *Template,
    306                       NonTypeTemplateParmDecl *Param,
    307                       const TemplateArgument *TemplateArgs,
    308                       unsigned NumTemplateArgs,
    309                       SourceRange InstantiationRange)
    310   : SemaRef(SemaRef),
    311     SavedInNonInstantiationSFINAEContext(
    312                                      SemaRef.InNonInstantiationSFINAEContext)
    313 {
    314   Invalid = false;
    315 
    316   ActiveTemplateInstantiation Inst;
    317   Inst.Kind = ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution;
    318   Inst.PointOfInstantiation = PointOfInstantiation;
    319   Inst.Template = Template;
    320   Inst.Entity = reinterpret_cast<uintptr_t>(Param);
    321   Inst.TemplateArgs = TemplateArgs;
    322   Inst.NumTemplateArgs = NumTemplateArgs;
    323   Inst.InstantiationRange = InstantiationRange;
    324   SemaRef.InNonInstantiationSFINAEContext = false;
    325   SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    326 
    327   assert(!Inst.isInstantiationRecord());
    328   ++SemaRef.NonInstantiationEntries;
    329 }
    330 
    331 Sema::InstantiatingTemplate::
    332 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
    333                       NamedDecl *Template,
    334                       TemplateTemplateParmDecl *Param,
    335                       const TemplateArgument *TemplateArgs,
    336                       unsigned NumTemplateArgs,
    337                       SourceRange InstantiationRange)
    338   : SemaRef(SemaRef),
    339     SavedInNonInstantiationSFINAEContext(
    340                                      SemaRef.InNonInstantiationSFINAEContext)
    341 {
    342   Invalid = false;
    343   ActiveTemplateInstantiation Inst;
    344   Inst.Kind = ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution;
    345   Inst.PointOfInstantiation = PointOfInstantiation;
    346   Inst.Template = Template;
    347   Inst.Entity = reinterpret_cast<uintptr_t>(Param);
    348   Inst.TemplateArgs = TemplateArgs;
    349   Inst.NumTemplateArgs = NumTemplateArgs;
    350   Inst.InstantiationRange = InstantiationRange;
    351   SemaRef.InNonInstantiationSFINAEContext = false;
    352   SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    353 
    354   assert(!Inst.isInstantiationRecord());
    355   ++SemaRef.NonInstantiationEntries;
    356 }
    357 
    358 Sema::InstantiatingTemplate::
    359 InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
    360                       TemplateDecl *Template,
    361                       NamedDecl *Param,
    362                       const TemplateArgument *TemplateArgs,
    363                       unsigned NumTemplateArgs,
    364                       SourceRange InstantiationRange)
    365   : SemaRef(SemaRef),
    366     SavedInNonInstantiationSFINAEContext(
    367                                      SemaRef.InNonInstantiationSFINAEContext)
    368 {
    369   Invalid = false;
    370 
    371   ActiveTemplateInstantiation Inst;
    372   Inst.Kind = ActiveTemplateInstantiation::DefaultTemplateArgumentChecking;
    373   Inst.PointOfInstantiation = PointOfInstantiation;
    374   Inst.Template = Template;
    375   Inst.Entity = reinterpret_cast<uintptr_t>(Param);
    376   Inst.TemplateArgs = TemplateArgs;
    377   Inst.NumTemplateArgs = NumTemplateArgs;
    378   Inst.InstantiationRange = InstantiationRange;
    379   SemaRef.InNonInstantiationSFINAEContext = false;
    380   SemaRef.ActiveTemplateInstantiations.push_back(Inst);
    381 
    382   assert(!Inst.isInstantiationRecord());
    383   ++SemaRef.NonInstantiationEntries;
    384 }
    385 
    386 void Sema::InstantiatingTemplate::Clear() {
    387   if (!Invalid) {
    388     if (!SemaRef.ActiveTemplateInstantiations.back().isInstantiationRecord()) {
    389       assert(SemaRef.NonInstantiationEntries > 0);
    390       --SemaRef.NonInstantiationEntries;
    391     }
    392     SemaRef.InNonInstantiationSFINAEContext
    393       = SavedInNonInstantiationSFINAEContext;
    394     SemaRef.ActiveTemplateInstantiations.pop_back();
    395     Invalid = true;
    396   }
    397 }
    398 
    399 bool Sema::InstantiatingTemplate::CheckInstantiationDepth(
    400                                         SourceLocation PointOfInstantiation,
    401                                            SourceRange InstantiationRange) {
    402   assert(SemaRef.NonInstantiationEntries <=
    403                                    SemaRef.ActiveTemplateInstantiations.size());
    404   if ((SemaRef.ActiveTemplateInstantiations.size() -
    405           SemaRef.NonInstantiationEntries)
    406         <= SemaRef.getLangOptions().InstantiationDepth)
    407     return false;
    408 
    409   SemaRef.Diag(PointOfInstantiation,
    410                diag::err_template_recursion_depth_exceeded)
    411     << SemaRef.getLangOptions().InstantiationDepth
    412     << InstantiationRange;
    413   SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth)
    414     << SemaRef.getLangOptions().InstantiationDepth;
    415   return true;
    416 }
    417 
    418 /// \brief Prints the current instantiation stack through a series of
    419 /// notes.
    420 void Sema::PrintInstantiationStack() {
    421   // Determine which template instantiations to skip, if any.
    422   unsigned SkipStart = ActiveTemplateInstantiations.size(), SkipEnd = SkipStart;
    423   unsigned Limit = Diags.getTemplateBacktraceLimit();
    424   if (Limit && Limit < ActiveTemplateInstantiations.size()) {
    425     SkipStart = Limit / 2 + Limit % 2;
    426     SkipEnd = ActiveTemplateInstantiations.size() - Limit / 2;
    427   }
    428 
    429   // FIXME: In all of these cases, we need to show the template arguments
    430   unsigned InstantiationIdx = 0;
    431   for (llvm::SmallVector<ActiveTemplateInstantiation, 16>::reverse_iterator
    432          Active = ActiveTemplateInstantiations.rbegin(),
    433          ActiveEnd = ActiveTemplateInstantiations.rend();
    434        Active != ActiveEnd;
    435        ++Active, ++InstantiationIdx) {
    436     // Skip this instantiation?
    437     if (InstantiationIdx >= SkipStart && InstantiationIdx < SkipEnd) {
    438       if (InstantiationIdx == SkipStart) {
    439         // Note that we're skipping instantiations.
    440         Diags.Report(Active->PointOfInstantiation,
    441                      diag::note_instantiation_contexts_suppressed)
    442           << unsigned(ActiveTemplateInstantiations.size() - Limit);
    443       }
    444       continue;
    445     }
    446 
    447     switch (Active->Kind) {
    448     case ActiveTemplateInstantiation::TemplateInstantiation: {
    449       Decl *D = reinterpret_cast<Decl *>(Active->Entity);
    450       if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
    451         unsigned DiagID = diag::note_template_member_class_here;
    452         if (isa<ClassTemplateSpecializationDecl>(Record))
    453           DiagID = diag::note_template_class_instantiation_here;
    454         Diags.Report(Active->PointOfInstantiation, DiagID)
    455           << Context.getTypeDeclType(Record)
    456           << Active->InstantiationRange;
    457       } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
    458         unsigned DiagID;
    459         if (Function->getPrimaryTemplate())
    460           DiagID = diag::note_function_template_spec_here;
    461         else
    462           DiagID = diag::note_template_member_function_here;
    463         Diags.Report(Active->PointOfInstantiation, DiagID)
    464           << Function
    465           << Active->InstantiationRange;
    466       } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
    467         Diags.Report(Active->PointOfInstantiation,
    468                      diag::note_template_static_data_member_def_here)
    469           << VD
    470           << Active->InstantiationRange;
    471       } else {
    472         Diags.Report(Active->PointOfInstantiation,
    473                      diag::note_template_type_alias_instantiation_here)
    474           << cast<TypeAliasTemplateDecl>(D)
    475           << Active->InstantiationRange;
    476       }
    477       break;
    478     }
    479 
    480     case ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation: {
    481       TemplateDecl *Template = cast<TemplateDecl>((Decl *)Active->Entity);
    482       std::string TemplateArgsStr
    483         = TemplateSpecializationType::PrintTemplateArgumentList(
    484                                                          Active->TemplateArgs,
    485                                                       Active->NumTemplateArgs,
    486                                                       Context.PrintingPolicy);
    487       Diags.Report(Active->PointOfInstantiation,
    488                    diag::note_default_arg_instantiation_here)
    489         << (Template->getNameAsString() + TemplateArgsStr)
    490         << Active->InstantiationRange;
    491       break;
    492     }
    493 
    494     case ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution: {
    495       FunctionTemplateDecl *FnTmpl
    496         = cast<FunctionTemplateDecl>((Decl *)Active->Entity);
    497       Diags.Report(Active->PointOfInstantiation,
    498                    diag::note_explicit_template_arg_substitution_here)
    499         << FnTmpl
    500         << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(),
    501                                            Active->TemplateArgs,
    502                                            Active->NumTemplateArgs)
    503         << Active->InstantiationRange;
    504       break;
    505     }
    506 
    507     case ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution:
    508       if (ClassTemplatePartialSpecializationDecl *PartialSpec
    509             = dyn_cast<ClassTemplatePartialSpecializationDecl>(
    510                                                     (Decl *)Active->Entity)) {
    511         Diags.Report(Active->PointOfInstantiation,
    512                      diag::note_partial_spec_deduct_instantiation_here)
    513           << Context.getTypeDeclType(PartialSpec)
    514           << getTemplateArgumentBindingsText(
    515                                          PartialSpec->getTemplateParameters(),
    516                                              Active->TemplateArgs,
    517                                              Active->NumTemplateArgs)
    518           << Active->InstantiationRange;
    519       } else {
    520         FunctionTemplateDecl *FnTmpl
    521           = cast<FunctionTemplateDecl>((Decl *)Active->Entity);
    522         Diags.Report(Active->PointOfInstantiation,
    523                      diag::note_function_template_deduction_instantiation_here)
    524           << FnTmpl
    525           << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(),
    526                                              Active->TemplateArgs,
    527                                              Active->NumTemplateArgs)
    528           << Active->InstantiationRange;
    529       }
    530       break;
    531 
    532     case ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation: {
    533       ParmVarDecl *Param = cast<ParmVarDecl>((Decl *)Active->Entity);
    534       FunctionDecl *FD = cast<FunctionDecl>(Param->getDeclContext());
    535 
    536       std::string TemplateArgsStr
    537         = TemplateSpecializationType::PrintTemplateArgumentList(
    538                                                          Active->TemplateArgs,
    539                                                       Active->NumTemplateArgs,
    540                                                       Context.PrintingPolicy);
    541       Diags.Report(Active->PointOfInstantiation,
    542                    diag::note_default_function_arg_instantiation_here)
    543         << (FD->getNameAsString() + TemplateArgsStr)
    544         << Active->InstantiationRange;
    545       break;
    546     }
    547 
    548     case ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution: {
    549       NamedDecl *Parm = cast<NamedDecl>((Decl *)Active->Entity);
    550       std::string Name;
    551       if (!Parm->getName().empty())
    552         Name = std::string(" '") + Parm->getName().str() + "'";
    553 
    554       TemplateParameterList *TemplateParams = 0;
    555       if (TemplateDecl *Template = dyn_cast<TemplateDecl>(Active->Template))
    556         TemplateParams = Template->getTemplateParameters();
    557       else
    558         TemplateParams =
    559           cast<ClassTemplatePartialSpecializationDecl>(Active->Template)
    560                                                       ->getTemplateParameters();
    561       Diags.Report(Active->PointOfInstantiation,
    562                    diag::note_prior_template_arg_substitution)
    563         << isa<TemplateTemplateParmDecl>(Parm)
    564         << Name
    565         << getTemplateArgumentBindingsText(TemplateParams,
    566                                            Active->TemplateArgs,
    567                                            Active->NumTemplateArgs)
    568         << Active->InstantiationRange;
    569       break;
    570     }
    571 
    572     case ActiveTemplateInstantiation::DefaultTemplateArgumentChecking: {
    573       TemplateParameterList *TemplateParams = 0;
    574       if (TemplateDecl *Template = dyn_cast<TemplateDecl>(Active->Template))
    575         TemplateParams = Template->getTemplateParameters();
    576       else
    577         TemplateParams =
    578           cast<ClassTemplatePartialSpecializationDecl>(Active->Template)
    579                                                       ->getTemplateParameters();
    580 
    581       Diags.Report(Active->PointOfInstantiation,
    582                    diag::note_template_default_arg_checking)
    583         << getTemplateArgumentBindingsText(TemplateParams,
    584                                            Active->TemplateArgs,
    585                                            Active->NumTemplateArgs)
    586         << Active->InstantiationRange;
    587       break;
    588     }
    589     }
    590   }
    591 }
    592 
    593 llvm::Optional<TemplateDeductionInfo *> Sema::isSFINAEContext() const {
    594   using llvm::SmallVector;
    595   if (InNonInstantiationSFINAEContext)
    596     return llvm::Optional<TemplateDeductionInfo *>(0);
    597 
    598   for (SmallVector<ActiveTemplateInstantiation, 16>::const_reverse_iterator
    599          Active = ActiveTemplateInstantiations.rbegin(),
    600          ActiveEnd = ActiveTemplateInstantiations.rend();
    601        Active != ActiveEnd;
    602        ++Active)
    603   {
    604     switch(Active->Kind) {
    605     case ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation:
    606     case ActiveTemplateInstantiation::TemplateInstantiation:
    607       // This is a template instantiation, so there is no SFINAE.
    608       return llvm::Optional<TemplateDeductionInfo *>();
    609 
    610     case ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation:
    611     case ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution:
    612     case ActiveTemplateInstantiation::DefaultTemplateArgumentChecking:
    613       // A default template argument instantiation and substitution into
    614       // template parameters with arguments for prior parameters may or may
    615       // not be a SFINAE context; look further up the stack.
    616       break;
    617 
    618     case ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution:
    619     case ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution:
    620       // We're either substitution explicitly-specified template arguments
    621       // or deduced template arguments, so SFINAE applies.
    622       assert(Active->DeductionInfo && "Missing deduction info pointer");
    623       return Active->DeductionInfo;
    624     }
    625   }
    626 
    627   return llvm::Optional<TemplateDeductionInfo *>();
    628 }
    629 
    630 /// \brief Retrieve the depth and index of a parameter pack.
    631 static std::pair<unsigned, unsigned>
    632 getDepthAndIndex(NamedDecl *ND) {
    633   if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ND))
    634     return std::make_pair(TTP->getDepth(), TTP->getIndex());
    635 
    636   if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(ND))
    637     return std::make_pair(NTTP->getDepth(), NTTP->getIndex());
    638 
    639   TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(ND);
    640   return std::make_pair(TTP->getDepth(), TTP->getIndex());
    641 }
    642 
    643 //===----------------------------------------------------------------------===/
    644 // Template Instantiation for Types
    645 //===----------------------------------------------------------------------===/
    646 namespace {
    647   class TemplateInstantiator : public TreeTransform<TemplateInstantiator> {
    648     const MultiLevelTemplateArgumentList &TemplateArgs;
    649     SourceLocation Loc;
    650     DeclarationName Entity;
    651 
    652   public:
    653     typedef TreeTransform<TemplateInstantiator> inherited;
    654 
    655     TemplateInstantiator(Sema &SemaRef,
    656                          const MultiLevelTemplateArgumentList &TemplateArgs,
    657                          SourceLocation Loc,
    658                          DeclarationName Entity)
    659       : inherited(SemaRef), TemplateArgs(TemplateArgs), Loc(Loc),
    660         Entity(Entity) { }
    661 
    662     /// \brief Determine whether the given type \p T has already been
    663     /// transformed.
    664     ///
    665     /// For the purposes of template instantiation, a type has already been
    666     /// transformed if it is NULL or if it is not dependent.
    667     bool AlreadyTransformed(QualType T);
    668 
    669     /// \brief Returns the location of the entity being instantiated, if known.
    670     SourceLocation getBaseLocation() { return Loc; }
    671 
    672     /// \brief Returns the name of the entity being instantiated, if any.
    673     DeclarationName getBaseEntity() { return Entity; }
    674 
    675     /// \brief Sets the "base" location and entity when that
    676     /// information is known based on another transformation.
    677     void setBase(SourceLocation Loc, DeclarationName Entity) {
    678       this->Loc = Loc;
    679       this->Entity = Entity;
    680     }
    681 
    682     bool TryExpandParameterPacks(SourceLocation EllipsisLoc,
    683                                  SourceRange PatternRange,
    684                                  const UnexpandedParameterPack *Unexpanded,
    685                                  unsigned NumUnexpanded,
    686                                  bool &ShouldExpand,
    687                                  bool &RetainExpansion,
    688                                  llvm::Optional<unsigned> &NumExpansions) {
    689       return getSema().CheckParameterPacksForExpansion(EllipsisLoc,
    690                                                        PatternRange, Unexpanded,
    691                                                        NumUnexpanded,
    692                                                        TemplateArgs,
    693                                                        ShouldExpand,
    694                                                        RetainExpansion,
    695                                                        NumExpansions);
    696     }
    697 
    698     void ExpandingFunctionParameterPack(ParmVarDecl *Pack) {
    699       SemaRef.CurrentInstantiationScope->MakeInstantiatedLocalArgPack(Pack);
    700     }
    701 
    702     TemplateArgument ForgetPartiallySubstitutedPack() {
    703       TemplateArgument Result;
    704       if (NamedDecl *PartialPack
    705             = SemaRef.CurrentInstantiationScope->getPartiallySubstitutedPack()){
    706         MultiLevelTemplateArgumentList &TemplateArgs
    707           = const_cast<MultiLevelTemplateArgumentList &>(this->TemplateArgs);
    708         unsigned Depth, Index;
    709         llvm::tie(Depth, Index) = getDepthAndIndex(PartialPack);
    710         if (TemplateArgs.hasTemplateArgument(Depth, Index)) {
    711           Result = TemplateArgs(Depth, Index);
    712           TemplateArgs.setArgument(Depth, Index, TemplateArgument());
    713         }
    714       }
    715 
    716       return Result;
    717     }
    718 
    719     void RememberPartiallySubstitutedPack(TemplateArgument Arg) {
    720       if (Arg.isNull())
    721         return;
    722 
    723       if (NamedDecl *PartialPack
    724             = SemaRef.CurrentInstantiationScope->getPartiallySubstitutedPack()){
    725         MultiLevelTemplateArgumentList &TemplateArgs
    726         = const_cast<MultiLevelTemplateArgumentList &>(this->TemplateArgs);
    727         unsigned Depth, Index;
    728         llvm::tie(Depth, Index) = getDepthAndIndex(PartialPack);
    729         TemplateArgs.setArgument(Depth, Index, Arg);
    730       }
    731     }
    732 
    733     /// \brief Transform the given declaration by instantiating a reference to
    734     /// this declaration.
    735     Decl *TransformDecl(SourceLocation Loc, Decl *D);
    736 
    737     /// \brief Transform the definition of the given declaration by
    738     /// instantiating it.
    739     Decl *TransformDefinition(SourceLocation Loc, Decl *D);
    740 
    741     /// \bried Transform the first qualifier within a scope by instantiating the
    742     /// declaration.
    743     NamedDecl *TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc);
    744 
    745     /// \brief Rebuild the exception declaration and register the declaration
    746     /// as an instantiated local.
    747     VarDecl *RebuildExceptionDecl(VarDecl *ExceptionDecl,
    748                                   TypeSourceInfo *Declarator,
    749                                   SourceLocation StartLoc,
    750                                   SourceLocation NameLoc,
    751                                   IdentifierInfo *Name);
    752 
    753     /// \brief Rebuild the Objective-C exception declaration and register the
    754     /// declaration as an instantiated local.
    755     VarDecl *RebuildObjCExceptionDecl(VarDecl *ExceptionDecl,
    756                                       TypeSourceInfo *TSInfo, QualType T);
    757 
    758     /// \brief Check for tag mismatches when instantiating an
    759     /// elaborated type.
    760     QualType RebuildElaboratedType(SourceLocation KeywordLoc,
    761                                    ElaboratedTypeKeyword Keyword,
    762                                    NestedNameSpecifierLoc QualifierLoc,
    763                                    QualType T);
    764 
    765     TemplateName TransformTemplateName(CXXScopeSpec &SS,
    766                                        TemplateName Name,
    767                                        SourceLocation NameLoc,
    768                                        QualType ObjectType = QualType(),
    769                                        NamedDecl *FirstQualifierInScope = 0);
    770 
    771     ExprResult TransformPredefinedExpr(PredefinedExpr *E);
    772     ExprResult TransformDeclRefExpr(DeclRefExpr *E);
    773     ExprResult TransformCXXDefaultArgExpr(CXXDefaultArgExpr *E);
    774     ExprResult TransformTemplateParmRefExpr(DeclRefExpr *E,
    775                                             NonTypeTemplateParmDecl *D);
    776     ExprResult TransformSubstNonTypeTemplateParmPackExpr(
    777                                            SubstNonTypeTemplateParmPackExpr *E);
    778 
    779     QualType TransformFunctionProtoType(TypeLocBuilder &TLB,
    780                                         FunctionProtoTypeLoc TL);
    781     ParmVarDecl *TransformFunctionTypeParam(ParmVarDecl *OldParm,
    782                                             int indexAdjustment,
    783                                       llvm::Optional<unsigned> NumExpansions);
    784 
    785     /// \brief Transforms a template type parameter type by performing
    786     /// substitution of the corresponding template type argument.
    787     QualType TransformTemplateTypeParmType(TypeLocBuilder &TLB,
    788                                            TemplateTypeParmTypeLoc TL);
    789 
    790     /// \brief Transforms an already-substituted template type parameter pack
    791     /// into either itself (if we aren't substituting into its pack expansion)
    792     /// or the appropriate substituted argument.
    793     QualType TransformSubstTemplateTypeParmPackType(TypeLocBuilder &TLB,
    794                                            SubstTemplateTypeParmPackTypeLoc TL);
    795 
    796     ExprResult TransformCallExpr(CallExpr *CE) {
    797       getSema().CallsUndergoingInstantiation.push_back(CE);
    798       ExprResult Result =
    799           TreeTransform<TemplateInstantiator>::TransformCallExpr(CE);
    800       getSema().CallsUndergoingInstantiation.pop_back();
    801       return move(Result);
    802     }
    803 
    804   private:
    805     ExprResult transformNonTypeTemplateParmRef(NonTypeTemplateParmDecl *parm,
    806                                                SourceLocation loc,
    807                                                const TemplateArgument &arg);
    808   };
    809 }
    810 
    811 bool TemplateInstantiator::AlreadyTransformed(QualType T) {
    812   if (T.isNull())
    813     return true;
    814 
    815   if (T->isInstantiationDependentType() || T->isVariablyModifiedType())
    816     return false;
    817 
    818   getSema().MarkDeclarationsReferencedInType(Loc, T);
    819   return true;
    820 }
    821 
    822 Decl *TemplateInstantiator::TransformDecl(SourceLocation Loc, Decl *D) {
    823   if (!D)
    824     return 0;
    825 
    826   if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(D)) {
    827     if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
    828       // If the corresponding template argument is NULL or non-existent, it's
    829       // because we are performing instantiation from explicitly-specified
    830       // template arguments in a function template, but there were some
    831       // arguments left unspecified.
    832       if (!TemplateArgs.hasTemplateArgument(TTP->getDepth(),
    833                                             TTP->getPosition()))
    834         return D;
    835 
    836       TemplateArgument Arg = TemplateArgs(TTP->getDepth(), TTP->getPosition());
    837 
    838       if (TTP->isParameterPack()) {
    839         assert(Arg.getKind() == TemplateArgument::Pack &&
    840                "Missing argument pack");
    841 
    842         assert(getSema().ArgumentPackSubstitutionIndex >= 0);
    843         assert(getSema().ArgumentPackSubstitutionIndex < (int)Arg.pack_size());
    844         Arg = Arg.pack_begin()[getSema().ArgumentPackSubstitutionIndex];
    845       }
    846 
    847       TemplateName Template = Arg.getAsTemplate();
    848       assert(!Template.isNull() && Template.getAsTemplateDecl() &&
    849              "Wrong kind of template template argument");
    850       return Template.getAsTemplateDecl();
    851     }
    852 
    853     // Fall through to find the instantiated declaration for this template
    854     // template parameter.
    855   }
    856 
    857   return SemaRef.FindInstantiatedDecl(Loc, cast<NamedDecl>(D), TemplateArgs);
    858 }
    859 
    860 Decl *TemplateInstantiator::TransformDefinition(SourceLocation Loc, Decl *D) {
    861   Decl *Inst = getSema().SubstDecl(D, getSema().CurContext, TemplateArgs);
    862   if (!Inst)
    863     return 0;
    864 
    865   getSema().CurrentInstantiationScope->InstantiatedLocal(D, Inst);
    866   return Inst;
    867 }
    868 
    869 NamedDecl *
    870 TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D,
    871                                                      SourceLocation Loc) {
    872   // If the first part of the nested-name-specifier was a template type
    873   // parameter, instantiate that type parameter down to a tag type.
    874   if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) {
    875     const TemplateTypeParmType *TTP
    876       = cast<TemplateTypeParmType>(getSema().Context.getTypeDeclType(TTPD));
    877 
    878     if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
    879       // FIXME: This needs testing w/ member access expressions.
    880       TemplateArgument Arg = TemplateArgs(TTP->getDepth(), TTP->getIndex());
    881 
    882       if (TTP->isParameterPack()) {
    883         assert(Arg.getKind() == TemplateArgument::Pack &&
    884                "Missing argument pack");
    885 
    886         if (getSema().ArgumentPackSubstitutionIndex == -1)
    887           return 0;
    888 
    889         assert(getSema().ArgumentPackSubstitutionIndex < (int)Arg.pack_size());
    890         Arg = Arg.pack_begin()[getSema().ArgumentPackSubstitutionIndex];
    891       }
    892 
    893       QualType T = Arg.getAsType();
    894       if (T.isNull())
    895         return cast_or_null<NamedDecl>(TransformDecl(Loc, D));
    896 
    897       if (const TagType *Tag = T->getAs<TagType>())
    898         return Tag->getDecl();
    899 
    900       // The resulting type is not a tag; complain.
    901       getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T;
    902       return 0;
    903     }
    904   }
    905 
    906   return cast_or_null<NamedDecl>(TransformDecl(Loc, D));
    907 }
    908 
    909 VarDecl *
    910 TemplateInstantiator::RebuildExceptionDecl(VarDecl *ExceptionDecl,
    911                                            TypeSourceInfo *Declarator,
    912                                            SourceLocation StartLoc,
    913                                            SourceLocation NameLoc,
    914                                            IdentifierInfo *Name) {
    915   VarDecl *Var = inherited::RebuildExceptionDecl(ExceptionDecl, Declarator,
    916                                                  StartLoc, NameLoc, Name);
    917   if (Var)
    918     getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var);
    919   return Var;
    920 }
    921 
    922 VarDecl *TemplateInstantiator::RebuildObjCExceptionDecl(VarDecl *ExceptionDecl,
    923                                                         TypeSourceInfo *TSInfo,
    924                                                         QualType T) {
    925   VarDecl *Var = inherited::RebuildObjCExceptionDecl(ExceptionDecl, TSInfo, T);
    926   if (Var)
    927     getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var);
    928   return Var;
    929 }
    930 
    931 QualType
    932 TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc,
    933                                             ElaboratedTypeKeyword Keyword,
    934                                             NestedNameSpecifierLoc QualifierLoc,
    935                                             QualType T) {
    936   if (const TagType *TT = T->getAs<TagType>()) {
    937     TagDecl* TD = TT->getDecl();
    938 
    939     SourceLocation TagLocation = KeywordLoc;
    940 
    941     // FIXME: type might be anonymous.
    942     IdentifierInfo *Id = TD->getIdentifier();
    943 
    944     // TODO: should we even warn on struct/class mismatches for this?  Seems
    945     // like it's likely to produce a lot of spurious errors.
    946     if (Keyword != ETK_None && Keyword != ETK_Typename) {
    947       TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForKeyword(Keyword);
    948       if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/false,
    949                                                 TagLocation, *Id)) {
    950         SemaRef.Diag(TagLocation, diag::err_use_with_wrong_tag)
    951           << Id
    952           << FixItHint::CreateReplacement(SourceRange(TagLocation),
    953                                           TD->getKindName());
    954         SemaRef.Diag(TD->getLocation(), diag::note_previous_use);
    955       }
    956     }
    957   }
    958 
    959   return TreeTransform<TemplateInstantiator>::RebuildElaboratedType(KeywordLoc,
    960                                                                     Keyword,
    961                                                                   QualifierLoc,
    962                                                                     T);
    963 }
    964 
    965 TemplateName TemplateInstantiator::TransformTemplateName(CXXScopeSpec &SS,
    966                                                          TemplateName Name,
    967                                                          SourceLocation NameLoc,
    968                                                          QualType ObjectType,
    969                                              NamedDecl *FirstQualifierInScope) {
    970   if (TemplateTemplateParmDecl *TTP
    971        = dyn_cast_or_null<TemplateTemplateParmDecl>(Name.getAsTemplateDecl())) {
    972     if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
    973       // If the corresponding template argument is NULL or non-existent, it's
    974       // because we are performing instantiation from explicitly-specified
    975       // template arguments in a function template, but there were some
    976       // arguments left unspecified.
    977       if (!TemplateArgs.hasTemplateArgument(TTP->getDepth(),
    978                                             TTP->getPosition()))
    979         return Name;
    980 
    981       TemplateArgument Arg = TemplateArgs(TTP->getDepth(), TTP->getPosition());
    982 
    983       if (TTP->isParameterPack()) {
    984         assert(Arg.getKind() == TemplateArgument::Pack &&
    985                "Missing argument pack");
    986 
    987         if (getSema().ArgumentPackSubstitutionIndex == -1) {
    988           // We have the template argument pack to substitute, but we're not
    989           // actually expanding the enclosing pack expansion yet. So, just
    990           // keep the entire argument pack.
    991           return getSema().Context.getSubstTemplateTemplateParmPack(TTP, Arg);
    992         }
    993 
    994         assert(getSema().ArgumentPackSubstitutionIndex < (int)Arg.pack_size());
    995         Arg = Arg.pack_begin()[getSema().ArgumentPackSubstitutionIndex];
    996       }
    997 
    998       TemplateName Template = Arg.getAsTemplate();
    999       assert(!Template.isNull() && "Null template template argument");
   1000 
   1001       // We don't ever want to substitute for a qualified template name, since
   1002       // the qualifier is handled separately. So, look through the qualified
   1003       // template name to its underlying declaration.
   1004       if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
   1005         Template = TemplateName(QTN->getTemplateDecl());
   1006 
   1007       Template = getSema().Context.getSubstTemplateTemplateParm(TTP, Template);
   1008       return Template;
   1009     }
   1010   }
   1011 
   1012   if (SubstTemplateTemplateParmPackStorage *SubstPack
   1013       = Name.getAsSubstTemplateTemplateParmPack()) {
   1014     if (getSema().ArgumentPackSubstitutionIndex == -1)
   1015       return Name;
   1016 
   1017     const TemplateArgument &ArgPack = SubstPack->getArgumentPack();
   1018     assert(getSema().ArgumentPackSubstitutionIndex < (int)ArgPack.pack_size() &&
   1019            "Pack substitution index out-of-range");
   1020     return ArgPack.pack_begin()[getSema().ArgumentPackSubstitutionIndex]
   1021     .getAsTemplate();
   1022   }
   1023 
   1024   return inherited::TransformTemplateName(SS, Name, NameLoc, ObjectType,
   1025                                           FirstQualifierInScope);
   1026 }
   1027 
   1028 ExprResult
   1029 TemplateInstantiator::TransformPredefinedExpr(PredefinedExpr *E) {
   1030   if (!E->isTypeDependent())
   1031     return SemaRef.Owned(E);
   1032 
   1033   FunctionDecl *currentDecl = getSema().getCurFunctionDecl();
   1034   assert(currentDecl && "Must have current function declaration when "
   1035                         "instantiating.");
   1036 
   1037   PredefinedExpr::IdentType IT = E->getIdentType();
   1038 
   1039   unsigned Length = PredefinedExpr::ComputeName(IT, currentDecl).length();
   1040 
   1041   llvm::APInt LengthI(32, Length + 1);
   1042   QualType ResTy = getSema().Context.CharTy.withConst();
   1043   ResTy = getSema().Context.getConstantArrayType(ResTy, LengthI,
   1044                                                  ArrayType::Normal, 0);
   1045   PredefinedExpr *PE =
   1046     new (getSema().Context) PredefinedExpr(E->getLocation(), ResTy, IT);
   1047   return getSema().Owned(PE);
   1048 }
   1049 
   1050 ExprResult
   1051 TemplateInstantiator::TransformTemplateParmRefExpr(DeclRefExpr *E,
   1052                                                NonTypeTemplateParmDecl *NTTP) {
   1053   // If the corresponding template argument is NULL or non-existent, it's
   1054   // because we are performing instantiation from explicitly-specified
   1055   // template arguments in a function template, but there were some
   1056   // arguments left unspecified.
   1057   if (!TemplateArgs.hasTemplateArgument(NTTP->getDepth(),
   1058                                         NTTP->getPosition()))
   1059     return SemaRef.Owned(E);
   1060 
   1061   TemplateArgument Arg = TemplateArgs(NTTP->getDepth(), NTTP->getPosition());
   1062   if (NTTP->isParameterPack()) {
   1063     assert(Arg.getKind() == TemplateArgument::Pack &&
   1064            "Missing argument pack");
   1065 
   1066     if (getSema().ArgumentPackSubstitutionIndex == -1) {
   1067       // We have an argument pack, but we can't select a particular argument
   1068       // out of it yet. Therefore, we'll build an expression to hold on to that
   1069       // argument pack.
   1070       QualType TargetType = SemaRef.SubstType(NTTP->getType(), TemplateArgs,
   1071                                               E->getLocation(),
   1072                                               NTTP->getDeclName());
   1073       if (TargetType.isNull())
   1074         return ExprError();
   1075 
   1076       return new (SemaRef.Context) SubstNonTypeTemplateParmPackExpr(TargetType,
   1077                                                                     NTTP,
   1078                                                               E->getLocation(),
   1079                                                                     Arg);
   1080     }
   1081 
   1082     assert(getSema().ArgumentPackSubstitutionIndex < (int)Arg.pack_size());
   1083     Arg = Arg.pack_begin()[getSema().ArgumentPackSubstitutionIndex];
   1084   }
   1085 
   1086   return transformNonTypeTemplateParmRef(NTTP, E->getLocation(), Arg);
   1087 }
   1088 
   1089 ExprResult TemplateInstantiator::transformNonTypeTemplateParmRef(
   1090                                                  NonTypeTemplateParmDecl *parm,
   1091                                                  SourceLocation loc,
   1092                                                  const TemplateArgument &arg) {
   1093   ExprResult result;
   1094   QualType type;
   1095 
   1096   // The template argument itself might be an expression, in which
   1097   // case we just return that expression.
   1098   if (arg.getKind() == TemplateArgument::Expression) {
   1099     Expr *argExpr = arg.getAsExpr();
   1100     result = SemaRef.Owned(argExpr);
   1101     type = argExpr->getType();
   1102 
   1103   } else if (arg.getKind() == TemplateArgument::Declaration) {
   1104     ValueDecl *VD = cast<ValueDecl>(arg.getAsDecl());
   1105 
   1106     // Find the instantiation of the template argument.  This is
   1107     // required for nested templates.
   1108     VD = cast_or_null<ValueDecl>(
   1109                        getSema().FindInstantiatedDecl(loc, VD, TemplateArgs));
   1110     if (!VD)
   1111       return ExprError();
   1112 
   1113     // Derive the type we want the substituted decl to have.  This had
   1114     // better be non-dependent, or these checks will have serious problems.
   1115     if (parm->isExpandedParameterPack()) {
   1116       type = parm->getExpansionType(SemaRef.ArgumentPackSubstitutionIndex);
   1117     } else if (parm->isParameterPack() &&
   1118                isa<PackExpansionType>(parm->getType())) {
   1119       type = SemaRef.SubstType(
   1120                         cast<PackExpansionType>(parm->getType())->getPattern(),
   1121                                      TemplateArgs, loc, parm->getDeclName());
   1122     } else {
   1123       type = SemaRef.SubstType(parm->getType(), TemplateArgs,
   1124                                loc, parm->getDeclName());
   1125     }
   1126     assert(!type.isNull() && "type substitution failed for param type");
   1127     assert(!type->isDependentType() && "param type still dependent");
   1128     result = SemaRef.BuildExpressionFromDeclTemplateArgument(arg, type, loc);
   1129 
   1130     if (!result.isInvalid()) type = result.get()->getType();
   1131   } else {
   1132     result = SemaRef.BuildExpressionFromIntegralTemplateArgument(arg, loc);
   1133 
   1134     // Note that this type can be different from the type of 'result',
   1135     // e.g. if it's an enum type.
   1136     type = arg.getIntegralType();
   1137   }
   1138   if (result.isInvalid()) return ExprError();
   1139 
   1140   Expr *resultExpr = result.take();
   1141   return SemaRef.Owned(new (SemaRef.Context)
   1142                 SubstNonTypeTemplateParmExpr(type,
   1143                                              resultExpr->getValueKind(),
   1144                                              loc, parm, resultExpr));
   1145 }
   1146 
   1147 ExprResult
   1148 TemplateInstantiator::TransformSubstNonTypeTemplateParmPackExpr(
   1149                                           SubstNonTypeTemplateParmPackExpr *E) {
   1150   if (getSema().ArgumentPackSubstitutionIndex == -1) {
   1151     // We aren't expanding the parameter pack, so just return ourselves.
   1152     return getSema().Owned(E);
   1153   }
   1154 
   1155   const TemplateArgument &ArgPack = E->getArgumentPack();
   1156   unsigned Index = (unsigned)getSema().ArgumentPackSubstitutionIndex;
   1157   assert(Index < ArgPack.pack_size() && "Substitution index out-of-range");
   1158 
   1159   const TemplateArgument &Arg = ArgPack.pack_begin()[Index];
   1160   return transformNonTypeTemplateParmRef(E->getParameterPack(),
   1161                                          E->getParameterPackLocation(),
   1162                                          Arg);
   1163 }
   1164 
   1165 ExprResult
   1166 TemplateInstantiator::TransformDeclRefExpr(DeclRefExpr *E) {
   1167   NamedDecl *D = E->getDecl();
   1168   if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(D)) {
   1169     if (NTTP->getDepth() < TemplateArgs.getNumLevels())
   1170       return TransformTemplateParmRefExpr(E, NTTP);
   1171 
   1172     // We have a non-type template parameter that isn't fully substituted;
   1173     // FindInstantiatedDecl will find it in the local instantiation scope.
   1174   }
   1175 
   1176   return TreeTransform<TemplateInstantiator>::TransformDeclRefExpr(E);
   1177 }
   1178 
   1179 ExprResult TemplateInstantiator::TransformCXXDefaultArgExpr(
   1180     CXXDefaultArgExpr *E) {
   1181   assert(!cast<FunctionDecl>(E->getParam()->getDeclContext())->
   1182              getDescribedFunctionTemplate() &&
   1183          "Default arg expressions are never formed in dependent cases.");
   1184   return SemaRef.BuildCXXDefaultArgExpr(E->getUsedLocation(),
   1185                            cast<FunctionDecl>(E->getParam()->getDeclContext()),
   1186                                         E->getParam());
   1187 }
   1188 
   1189 QualType TemplateInstantiator::TransformFunctionProtoType(TypeLocBuilder &TLB,
   1190                                                       FunctionProtoTypeLoc TL) {
   1191   // We need a local instantiation scope for this function prototype.
   1192   LocalInstantiationScope Scope(SemaRef, /*CombineWithOuterScope=*/true);
   1193   return inherited::TransformFunctionProtoType(TLB, TL);
   1194 }
   1195 
   1196 ParmVarDecl *
   1197 TemplateInstantiator::TransformFunctionTypeParam(ParmVarDecl *OldParm,
   1198                                                  int indexAdjustment,
   1199                                        llvm::Optional<unsigned> NumExpansions) {
   1200   return SemaRef.SubstParmVarDecl(OldParm, TemplateArgs, indexAdjustment,
   1201                                   NumExpansions);
   1202 }
   1203 
   1204 QualType
   1205 TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB,
   1206                                                 TemplateTypeParmTypeLoc TL) {
   1207   const TemplateTypeParmType *T = TL.getTypePtr();
   1208   if (T->getDepth() < TemplateArgs.getNumLevels()) {
   1209     // Replace the template type parameter with its corresponding
   1210     // template argument.
   1211 
   1212     // If the corresponding template argument is NULL or doesn't exist, it's
   1213     // because we are performing instantiation from explicitly-specified
   1214     // template arguments in a function template class, but there were some
   1215     // arguments left unspecified.
   1216     if (!TemplateArgs.hasTemplateArgument(T->getDepth(), T->getIndex())) {
   1217       TemplateTypeParmTypeLoc NewTL
   1218         = TLB.push<TemplateTypeParmTypeLoc>(TL.getType());
   1219       NewTL.setNameLoc(TL.getNameLoc());
   1220       return TL.getType();
   1221     }
   1222 
   1223     TemplateArgument Arg = TemplateArgs(T->getDepth(), T->getIndex());
   1224 
   1225     if (T->isParameterPack()) {
   1226       assert(Arg.getKind() == TemplateArgument::Pack &&
   1227              "Missing argument pack");
   1228 
   1229       if (getSema().ArgumentPackSubstitutionIndex == -1) {
   1230         // We have the template argument pack, but we're not expanding the
   1231         // enclosing pack expansion yet. Just save the template argument
   1232         // pack for later substitution.
   1233         QualType Result
   1234           = getSema().Context.getSubstTemplateTypeParmPackType(T, Arg);
   1235         SubstTemplateTypeParmPackTypeLoc NewTL
   1236           = TLB.push<SubstTemplateTypeParmPackTypeLoc>(Result);
   1237         NewTL.setNameLoc(TL.getNameLoc());
   1238         return Result;
   1239       }
   1240 
   1241       assert(getSema().ArgumentPackSubstitutionIndex < (int)Arg.pack_size());
   1242       Arg = Arg.pack_begin()[getSema().ArgumentPackSubstitutionIndex];
   1243     }
   1244 
   1245     assert(Arg.getKind() == TemplateArgument::Type &&
   1246            "Template argument kind mismatch");
   1247 
   1248     QualType Replacement = Arg.getAsType();
   1249 
   1250     // TODO: only do this uniquing once, at the start of instantiation.
   1251     QualType Result
   1252       = getSema().Context.getSubstTemplateTypeParmType(T, Replacement);
   1253     SubstTemplateTypeParmTypeLoc NewTL
   1254       = TLB.push<SubstTemplateTypeParmTypeLoc>(Result);
   1255     NewTL.setNameLoc(TL.getNameLoc());
   1256     return Result;
   1257   }
   1258 
   1259   // The template type parameter comes from an inner template (e.g.,
   1260   // the template parameter list of a member template inside the
   1261   // template we are instantiating). Create a new template type
   1262   // parameter with the template "level" reduced by one.
   1263   TemplateTypeParmDecl *NewTTPDecl = 0;
   1264   if (TemplateTypeParmDecl *OldTTPDecl = T->getDecl())
   1265     NewTTPDecl = cast_or_null<TemplateTypeParmDecl>(
   1266                                   TransformDecl(TL.getNameLoc(), OldTTPDecl));
   1267 
   1268   QualType Result
   1269     = getSema().Context.getTemplateTypeParmType(T->getDepth()
   1270                                                  - TemplateArgs.getNumLevels(),
   1271                                                 T->getIndex(),
   1272                                                 T->isParameterPack(),
   1273                                                 NewTTPDecl);
   1274   TemplateTypeParmTypeLoc NewTL = TLB.push<TemplateTypeParmTypeLoc>(Result);
   1275   NewTL.setNameLoc(TL.getNameLoc());
   1276   return Result;
   1277 }
   1278 
   1279 QualType
   1280 TemplateInstantiator::TransformSubstTemplateTypeParmPackType(
   1281                                                             TypeLocBuilder &TLB,
   1282                                          SubstTemplateTypeParmPackTypeLoc TL) {
   1283   if (getSema().ArgumentPackSubstitutionIndex == -1) {
   1284     // We aren't expanding the parameter pack, so just return ourselves.
   1285     SubstTemplateTypeParmPackTypeLoc NewTL
   1286       = TLB.push<SubstTemplateTypeParmPackTypeLoc>(TL.getType());
   1287     NewTL.setNameLoc(TL.getNameLoc());
   1288     return TL.getType();
   1289   }
   1290 
   1291   const TemplateArgument &ArgPack = TL.getTypePtr()->getArgumentPack();
   1292   unsigned Index = (unsigned)getSema().ArgumentPackSubstitutionIndex;
   1293   assert(Index < ArgPack.pack_size() && "Substitution index out-of-range");
   1294 
   1295   QualType Result = ArgPack.pack_begin()[Index].getAsType();
   1296   Result = getSema().Context.getSubstTemplateTypeParmType(
   1297                                       TL.getTypePtr()->getReplacedParameter(),
   1298                                                           Result);
   1299   SubstTemplateTypeParmTypeLoc NewTL
   1300     = TLB.push<SubstTemplateTypeParmTypeLoc>(Result);
   1301   NewTL.setNameLoc(TL.getNameLoc());
   1302   return Result;
   1303 }
   1304 
   1305 /// \brief Perform substitution on the type T with a given set of template
   1306 /// arguments.
   1307 ///
   1308 /// This routine substitutes the given template arguments into the
   1309 /// type T and produces the instantiated type.
   1310 ///
   1311 /// \param T the type into which the template arguments will be
   1312 /// substituted. If this type is not dependent, it will be returned
   1313 /// immediately.
   1314 ///
   1315 /// \param TemplateArgs the template arguments that will be
   1316 /// substituted for the top-level template parameters within T.
   1317 ///
   1318 /// \param Loc the location in the source code where this substitution
   1319 /// is being performed. It will typically be the location of the
   1320 /// declarator (if we're instantiating the type of some declaration)
   1321 /// or the location of the type in the source code (if, e.g., we're
   1322 /// instantiating the type of a cast expression).
   1323 ///
   1324 /// \param Entity the name of the entity associated with a declaration
   1325 /// being instantiated (if any). May be empty to indicate that there
   1326 /// is no such entity (if, e.g., this is a type that occurs as part of
   1327 /// a cast expression) or that the entity has no name (e.g., an
   1328 /// unnamed function parameter).
   1329 ///
   1330 /// \returns If the instantiation succeeds, the instantiated
   1331 /// type. Otherwise, produces diagnostics and returns a NULL type.
   1332 TypeSourceInfo *Sema::SubstType(TypeSourceInfo *T,
   1333                                 const MultiLevelTemplateArgumentList &Args,
   1334                                 SourceLocation Loc,
   1335                                 DeclarationName Entity) {
   1336   assert(!ActiveTemplateInstantiations.empty() &&
   1337          "Cannot perform an instantiation without some context on the "
   1338          "instantiation stack");
   1339 
   1340   if (!T->getType()->isInstantiationDependentType() &&
   1341       !T->getType()->isVariablyModifiedType())
   1342     return T;
   1343 
   1344   TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
   1345   return Instantiator.TransformType(T);
   1346 }
   1347 
   1348 TypeSourceInfo *Sema::SubstType(TypeLoc TL,
   1349                                 const MultiLevelTemplateArgumentList &Args,
   1350                                 SourceLocation Loc,
   1351                                 DeclarationName Entity) {
   1352   assert(!ActiveTemplateInstantiations.empty() &&
   1353          "Cannot perform an instantiation without some context on the "
   1354          "instantiation stack");
   1355 
   1356   if (TL.getType().isNull())
   1357     return 0;
   1358 
   1359   if (!TL.getType()->isInstantiationDependentType() &&
   1360       !TL.getType()->isVariablyModifiedType()) {
   1361     // FIXME: Make a copy of the TypeLoc data here, so that we can
   1362     // return a new TypeSourceInfo. Inefficient!
   1363     TypeLocBuilder TLB;
   1364     TLB.pushFullCopy(TL);
   1365     return TLB.getTypeSourceInfo(Context, TL.getType());
   1366   }
   1367 
   1368   TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
   1369   TypeLocBuilder TLB;
   1370   TLB.reserve(TL.getFullDataSize());
   1371   QualType Result = Instantiator.TransformType(TLB, TL);
   1372   if (Result.isNull())
   1373     return 0;
   1374 
   1375   return TLB.getTypeSourceInfo(Context, Result);
   1376 }
   1377 
   1378 /// Deprecated form of the above.
   1379 QualType Sema::SubstType(QualType T,
   1380                          const MultiLevelTemplateArgumentList &TemplateArgs,
   1381                          SourceLocation Loc, DeclarationName Entity) {
   1382   assert(!ActiveTemplateInstantiations.empty() &&
   1383          "Cannot perform an instantiation without some context on the "
   1384          "instantiation stack");
   1385 
   1386   // If T is not a dependent type or a variably-modified type, there
   1387   // is nothing to do.
   1388   if (!T->isInstantiationDependentType() && !T->isVariablyModifiedType())
   1389     return T;
   1390 
   1391   TemplateInstantiator Instantiator(*this, TemplateArgs, Loc, Entity);
   1392   return Instantiator.TransformType(T);
   1393 }
   1394 
   1395 static bool NeedsInstantiationAsFunctionType(TypeSourceInfo *T) {
   1396   if (T->getType()->isInstantiationDependentType() ||
   1397       T->getType()->isVariablyModifiedType())
   1398     return true;
   1399 
   1400   TypeLoc TL = T->getTypeLoc().IgnoreParens();
   1401   if (!isa<FunctionProtoTypeLoc>(TL))
   1402     return false;
   1403 
   1404   FunctionProtoTypeLoc FP = cast<FunctionProtoTypeLoc>(TL);
   1405   for (unsigned I = 0, E = FP.getNumArgs(); I != E; ++I) {
   1406     ParmVarDecl *P = FP.getArg(I);
   1407 
   1408     // The parameter's type as written might be dependent even if the
   1409     // decayed type was not dependent.
   1410     if (TypeSourceInfo *TSInfo = P->getTypeSourceInfo())
   1411       if (TSInfo->getType()->isInstantiationDependentType())
   1412         return true;
   1413 
   1414     // TODO: currently we always rebuild expressions.  When we
   1415     // properly get lazier about this, we should use the same
   1416     // logic to avoid rebuilding prototypes here.
   1417     if (P->hasDefaultArg())
   1418       return true;
   1419   }
   1420 
   1421   return false;
   1422 }
   1423 
   1424 /// A form of SubstType intended specifically for instantiating the
   1425 /// type of a FunctionDecl.  Its purpose is solely to force the
   1426 /// instantiation of default-argument expressions.
   1427 TypeSourceInfo *Sema::SubstFunctionDeclType(TypeSourceInfo *T,
   1428                                 const MultiLevelTemplateArgumentList &Args,
   1429                                 SourceLocation Loc,
   1430                                 DeclarationName Entity) {
   1431   assert(!ActiveTemplateInstantiations.empty() &&
   1432          "Cannot perform an instantiation without some context on the "
   1433          "instantiation stack");
   1434 
   1435   if (!NeedsInstantiationAsFunctionType(T))
   1436     return T;
   1437 
   1438   TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
   1439 
   1440   TypeLocBuilder TLB;
   1441 
   1442   TypeLoc TL = T->getTypeLoc();
   1443   TLB.reserve(TL.getFullDataSize());
   1444 
   1445   QualType Result = Instantiator.TransformType(TLB, TL);
   1446   if (Result.isNull())
   1447     return 0;
   1448 
   1449   return TLB.getTypeSourceInfo(Context, Result);
   1450 }
   1451 
   1452 ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm,
   1453                             const MultiLevelTemplateArgumentList &TemplateArgs,
   1454                                     int indexAdjustment,
   1455                                     llvm::Optional<unsigned> NumExpansions) {
   1456   TypeSourceInfo *OldDI = OldParm->getTypeSourceInfo();
   1457   TypeSourceInfo *NewDI = 0;
   1458 
   1459   TypeLoc OldTL = OldDI->getTypeLoc();
   1460   if (isa<PackExpansionTypeLoc>(OldTL)) {
   1461     PackExpansionTypeLoc ExpansionTL = cast<PackExpansionTypeLoc>(OldTL);
   1462 
   1463     // We have a function parameter pack. Substitute into the pattern of the
   1464     // expansion.
   1465     NewDI = SubstType(ExpansionTL.getPatternLoc(), TemplateArgs,
   1466                       OldParm->getLocation(), OldParm->getDeclName());
   1467     if (!NewDI)
   1468       return 0;
   1469 
   1470     if (NewDI->getType()->containsUnexpandedParameterPack()) {
   1471       // We still have unexpanded parameter packs, which means that
   1472       // our function parameter is still a function parameter pack.
   1473       // Therefore, make its type a pack expansion type.
   1474       NewDI = CheckPackExpansion(NewDI, ExpansionTL.getEllipsisLoc(),
   1475                                  NumExpansions);
   1476     }
   1477   } else {
   1478     NewDI = SubstType(OldDI, TemplateArgs, OldParm->getLocation(),
   1479                       OldParm->getDeclName());
   1480   }
   1481 
   1482   if (!NewDI)
   1483     return 0;
   1484 
   1485   if (NewDI->getType()->isVoidType()) {
   1486     Diag(OldParm->getLocation(), diag::err_param_with_void_type);
   1487     return 0;
   1488   }
   1489 
   1490   ParmVarDecl *NewParm = CheckParameter(Context.getTranslationUnitDecl(),
   1491                                         OldParm->getInnerLocStart(),
   1492                                         OldParm->getLocation(),
   1493                                         OldParm->getIdentifier(),
   1494                                         NewDI->getType(), NewDI,
   1495                                         OldParm->getStorageClass(),
   1496                                         OldParm->getStorageClassAsWritten());
   1497   if (!NewParm)
   1498     return 0;
   1499 
   1500   // Mark the (new) default argument as uninstantiated (if any).
   1501   if (OldParm->hasUninstantiatedDefaultArg()) {
   1502     Expr *Arg = OldParm->getUninstantiatedDefaultArg();
   1503     NewParm->setUninstantiatedDefaultArg(Arg);
   1504   } else if (OldParm->hasUnparsedDefaultArg()) {
   1505     NewParm->setUnparsedDefaultArg();
   1506     UnparsedDefaultArgInstantiations[OldParm].push_back(NewParm);
   1507   } else if (Expr *Arg = OldParm->getDefaultArg())
   1508     NewParm->setUninstantiatedDefaultArg(Arg);
   1509 
   1510   NewParm->setHasInheritedDefaultArg(OldParm->hasInheritedDefaultArg());
   1511 
   1512   // FIXME: When OldParm is a parameter pack and NewParm is not a parameter
   1513   // pack, we actually have a set of instantiated locations. Maintain this set!
   1514   if (OldParm->isParameterPack() && !NewParm->isParameterPack()) {
   1515     // Add the new parameter to
   1516     CurrentInstantiationScope->InstantiatedLocalPackArg(OldParm, NewParm);
   1517   } else {
   1518     // Introduce an Old -> New mapping
   1519     CurrentInstantiationScope->InstantiatedLocal(OldParm, NewParm);
   1520   }
   1521 
   1522   // FIXME: OldParm may come from a FunctionProtoType, in which case CurContext
   1523   // can be anything, is this right ?
   1524   NewParm->setDeclContext(CurContext);
   1525 
   1526   NewParm->setScopeInfo(OldParm->getFunctionScopeDepth(),
   1527                         OldParm->getFunctionScopeIndex() + indexAdjustment);
   1528 
   1529   return NewParm;
   1530 }
   1531 
   1532 /// \brief Substitute the given template arguments into the given set of
   1533 /// parameters, producing the set of parameter types that would be generated
   1534 /// from such a substitution.
   1535 bool Sema::SubstParmTypes(SourceLocation Loc,
   1536                           ParmVarDecl **Params, unsigned NumParams,
   1537                           const MultiLevelTemplateArgumentList &TemplateArgs,
   1538                           llvm::SmallVectorImpl<QualType> &ParamTypes,
   1539                           llvm::SmallVectorImpl<ParmVarDecl *> *OutParams) {
   1540   assert(!ActiveTemplateInstantiations.empty() &&
   1541          "Cannot perform an instantiation without some context on the "
   1542          "instantiation stack");
   1543 
   1544   TemplateInstantiator Instantiator(*this, TemplateArgs, Loc,
   1545                                     DeclarationName());
   1546   return Instantiator.TransformFunctionTypeParams(Loc, Params, NumParams, 0,
   1547                                                   ParamTypes, OutParams);
   1548 }
   1549 
   1550 /// \brief Perform substitution on the base class specifiers of the
   1551 /// given class template specialization.
   1552 ///
   1553 /// Produces a diagnostic and returns true on error, returns false and
   1554 /// attaches the instantiated base classes to the class template
   1555 /// specialization if successful.
   1556 bool
   1557 Sema::SubstBaseSpecifiers(CXXRecordDecl *Instantiation,
   1558                           CXXRecordDecl *Pattern,
   1559                           const MultiLevelTemplateArgumentList &TemplateArgs) {
   1560   bool Invalid = false;
   1561   llvm::SmallVector<CXXBaseSpecifier*, 4> InstantiatedBases;
   1562   for (ClassTemplateSpecializationDecl::base_class_iterator
   1563          Base = Pattern->bases_begin(), BaseEnd = Pattern->bases_end();
   1564        Base != BaseEnd; ++Base) {
   1565     if (!Base->getType()->isDependentType()) {
   1566       InstantiatedBases.push_back(new (Context) CXXBaseSpecifier(*Base));
   1567       continue;
   1568     }
   1569 
   1570     SourceLocation EllipsisLoc;
   1571     TypeSourceInfo *BaseTypeLoc;
   1572     if (Base->isPackExpansion()) {
   1573       // This is a pack expansion. See whether we should expand it now, or
   1574       // wait until later.
   1575       llvm::SmallVector<UnexpandedParameterPack, 2> Unexpanded;
   1576       collectUnexpandedParameterPacks(Base->getTypeSourceInfo()->getTypeLoc(),
   1577                                       Unexpanded);
   1578       bool ShouldExpand = false;
   1579       bool RetainExpansion = false;
   1580       llvm::Optional<unsigned> NumExpansions;
   1581       if (CheckParameterPacksForExpansion(Base->getEllipsisLoc(),
   1582                                           Base->getSourceRange(),
   1583                                           Unexpanded.data(), Unexpanded.size(),
   1584                                           TemplateArgs, ShouldExpand,
   1585                                           RetainExpansion,
   1586                                           NumExpansions)) {
   1587         Invalid = true;
   1588         continue;
   1589       }
   1590 
   1591       // If we should expand this pack expansion now, do so.
   1592       if (ShouldExpand) {
   1593         for (unsigned I = 0; I != *NumExpansions; ++I) {
   1594             Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(*this, I);
   1595 
   1596           TypeSourceInfo *BaseTypeLoc = SubstType(Base->getTypeSourceInfo(),
   1597                                                   TemplateArgs,
   1598                                               Base->getSourceRange().getBegin(),
   1599                                                   DeclarationName());
   1600           if (!BaseTypeLoc) {
   1601             Invalid = true;
   1602             continue;
   1603           }
   1604 
   1605           if (CXXBaseSpecifier *InstantiatedBase
   1606                 = CheckBaseSpecifier(Instantiation,
   1607                                      Base->getSourceRange(),
   1608                                      Base->isVirtual(),
   1609                                      Base->getAccessSpecifierAsWritten(),
   1610                                      BaseTypeLoc,
   1611                                      SourceLocation()))
   1612             InstantiatedBases.push_back(InstantiatedBase);
   1613           else
   1614             Invalid = true;
   1615         }
   1616 
   1617         continue;
   1618       }
   1619 
   1620       // The resulting base specifier will (still) be a pack expansion.
   1621       EllipsisLoc = Base->getEllipsisLoc();
   1622       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(*this, -1);
   1623       BaseTypeLoc = SubstType(Base->getTypeSourceInfo(),
   1624                               TemplateArgs,
   1625                               Base->getSourceRange().getBegin(),
   1626                               DeclarationName());
   1627     } else {
   1628       BaseTypeLoc = SubstType(Base->getTypeSourceInfo(),
   1629                               TemplateArgs,
   1630                               Base->getSourceRange().getBegin(),
   1631                               DeclarationName());
   1632     }
   1633 
   1634     if (!BaseTypeLoc) {
   1635       Invalid = true;
   1636       continue;
   1637     }
   1638 
   1639     if (CXXBaseSpecifier *InstantiatedBase
   1640           = CheckBaseSpecifier(Instantiation,
   1641                                Base->getSourceRange(),
   1642                                Base->isVirtual(),
   1643                                Base->getAccessSpecifierAsWritten(),
   1644                                BaseTypeLoc,
   1645                                EllipsisLoc))
   1646       InstantiatedBases.push_back(InstantiatedBase);
   1647     else
   1648       Invalid = true;
   1649   }
   1650 
   1651   if (!Invalid &&
   1652       AttachBaseSpecifiers(Instantiation, InstantiatedBases.data(),
   1653                            InstantiatedBases.size()))
   1654     Invalid = true;
   1655 
   1656   return Invalid;
   1657 }
   1658 
   1659 /// \brief Instantiate the definition of a class from a given pattern.
   1660 ///
   1661 /// \param PointOfInstantiation The point of instantiation within the
   1662 /// source code.
   1663 ///
   1664 /// \param Instantiation is the declaration whose definition is being
   1665 /// instantiated. This will be either a class template specialization
   1666 /// or a member class of a class template specialization.
   1667 ///
   1668 /// \param Pattern is the pattern from which the instantiation
   1669 /// occurs. This will be either the declaration of a class template or
   1670 /// the declaration of a member class of a class template.
   1671 ///
   1672 /// \param TemplateArgs The template arguments to be substituted into
   1673 /// the pattern.
   1674 ///
   1675 /// \param TSK the kind of implicit or explicit instantiation to perform.
   1676 ///
   1677 /// \param Complain whether to complain if the class cannot be instantiated due
   1678 /// to the lack of a definition.
   1679 ///
   1680 /// \returns true if an error occurred, false otherwise.
   1681 bool
   1682 Sema::InstantiateClass(SourceLocation PointOfInstantiation,
   1683                        CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
   1684                        const MultiLevelTemplateArgumentList &TemplateArgs,
   1685                        TemplateSpecializationKind TSK,
   1686                        bool Complain) {
   1687   bool Invalid = false;
   1688 
   1689   CXXRecordDecl *PatternDef
   1690     = cast_or_null<CXXRecordDecl>(Pattern->getDefinition());
   1691   if (!PatternDef || PatternDef->isBeingDefined()) {
   1692     if (!Complain || (PatternDef && PatternDef->isInvalidDecl())) {
   1693       // Say nothing
   1694     } else if (PatternDef) {
   1695       assert(PatternDef->isBeingDefined());
   1696       Diag(PointOfInstantiation,
   1697            diag::err_template_instantiate_within_definition)
   1698         << (TSK != TSK_ImplicitInstantiation)
   1699         << Context.getTypeDeclType(Instantiation);
   1700       // Not much point in noting the template declaration here, since
   1701       // we're lexically inside it.
   1702       Instantiation->setInvalidDecl();
   1703     } else if (Pattern == Instantiation->getInstantiatedFromMemberClass()) {
   1704       Diag(PointOfInstantiation,
   1705            diag::err_implicit_instantiate_member_undefined)
   1706         << Context.getTypeDeclType(Instantiation);
   1707       Diag(Pattern->getLocation(), diag::note_member_of_template_here);
   1708     } else {
   1709       Diag(PointOfInstantiation, diag::err_template_instantiate_undefined)
   1710         << (TSK != TSK_ImplicitInstantiation)
   1711         << Context.getTypeDeclType(Instantiation);
   1712       Diag(Pattern->getLocation(), diag::note_template_decl_here);
   1713     }
   1714     return true;
   1715   }
   1716   Pattern = PatternDef;
   1717 
   1718   // \brief Record the point of instantiation.
   1719   if (MemberSpecializationInfo *MSInfo
   1720         = Instantiation->getMemberSpecializationInfo()) {
   1721     MSInfo->setTemplateSpecializationKind(TSK);
   1722     MSInfo->setPointOfInstantiation(PointOfInstantiation);
   1723   } else if (ClassTemplateSpecializationDecl *Spec
   1724                = dyn_cast<ClassTemplateSpecializationDecl>(Instantiation)) {
   1725     Spec->setTemplateSpecializationKind(TSK);
   1726     Spec->setPointOfInstantiation(PointOfInstantiation);
   1727   }
   1728 
   1729   InstantiatingTemplate Inst(*this, PointOfInstantiation, Instantiation);
   1730   if (Inst)
   1731     return true;
   1732 
   1733   // Enter the scope of this instantiation. We don't use
   1734   // PushDeclContext because we don't have a scope.
   1735   ContextRAII SavedContext(*this, Instantiation);
   1736   EnterExpressionEvaluationContext EvalContext(*this,
   1737                                                Sema::PotentiallyEvaluated);
   1738 
   1739   // If this is an instantiation of a local class, merge this local
   1740   // instantiation scope with the enclosing scope. Otherwise, every
   1741   // instantiation of a class has its own local instantiation scope.
   1742   bool MergeWithParentScope = !Instantiation->isDefinedOutsideFunctionOrMethod();
   1743   LocalInstantiationScope Scope(*this, MergeWithParentScope);
   1744 
   1745   // Pull attributes from the pattern onto the instantiation.
   1746   InstantiateAttrs(TemplateArgs, Pattern, Instantiation);
   1747 
   1748   // Start the definition of this instantiation.
   1749   Instantiation->startDefinition();
   1750 
   1751   Instantiation->setTagKind(Pattern->getTagKind());
   1752 
   1753   // Do substitution on the base class specifiers.
   1754   if (SubstBaseSpecifiers(Instantiation, Pattern, TemplateArgs))
   1755     Invalid = true;
   1756 
   1757   TemplateDeclInstantiator Instantiator(*this, Instantiation, TemplateArgs);
   1758   llvm::SmallVector<Decl*, 4> Fields;
   1759   llvm::SmallVector<std::pair<FieldDecl*, FieldDecl*>, 4>
   1760     FieldsWithMemberInitializers;
   1761   for (RecordDecl::decl_iterator Member = Pattern->decls_begin(),
   1762          MemberEnd = Pattern->decls_end();
   1763        Member != MemberEnd; ++Member) {
   1764     // Don't instantiate members not belonging in this semantic context.
   1765     // e.g. for:
   1766     // @code
   1767     //    template <int i> class A {
   1768     //      class B *g;
   1769     //    };
   1770     // @endcode
   1771     // 'class B' has the template as lexical context but semantically it is
   1772     // introduced in namespace scope.
   1773     if ((*Member)->getDeclContext() != Pattern)
   1774       continue;
   1775 
   1776     if ((*Member)->isInvalidDecl()) {
   1777       Invalid = true;
   1778       continue;
   1779     }
   1780 
   1781     Decl *NewMember = Instantiator.Visit(*Member);
   1782     if (NewMember) {
   1783       if (FieldDecl *Field = dyn_cast<FieldDecl>(NewMember)) {
   1784         Fields.push_back(Field);
   1785         FieldDecl *OldField = cast<FieldDecl>(*Member);
   1786         if (OldField->getInClassInitializer())
   1787           FieldsWithMemberInitializers.push_back(std::make_pair(OldField,
   1788                                                                 Field));
   1789       } else if (NewMember->isInvalidDecl())
   1790         Invalid = true;
   1791     } else {
   1792       // FIXME: Eventually, a NULL return will mean that one of the
   1793       // instantiations was a semantic disaster, and we'll want to set Invalid =
   1794       // true. For now, we expect to skip some members that we can't yet handle.
   1795     }
   1796   }
   1797 
   1798   // Finish checking fields.
   1799   ActOnFields(0, Instantiation->getLocation(), Instantiation,
   1800               Fields.data(), Fields.size(), SourceLocation(), SourceLocation(),
   1801               0);
   1802   CheckCompletedCXXClass(Instantiation);
   1803 
   1804   // Attach any in-class member initializers now the class is complete.
   1805   for (unsigned I = 0, N = FieldsWithMemberInitializers.size(); I != N; ++I) {
   1806     FieldDecl *OldField = FieldsWithMemberInitializers[I].first;
   1807     FieldDecl *NewField = FieldsWithMemberInitializers[I].second;
   1808     Expr *OldInit = OldField->getInClassInitializer();
   1809 
   1810     SourceLocation LParenLoc, RParenLoc;
   1811     ASTOwningVector<Expr*> NewArgs(*this);
   1812     if (InstantiateInitializer(OldInit, TemplateArgs, LParenLoc, NewArgs,
   1813                                RParenLoc))
   1814       NewField->setInvalidDecl();
   1815     else {
   1816       assert(NewArgs.size() == 1 && "wrong number of in-class initializers");
   1817       ActOnCXXInClassMemberInitializer(NewField, LParenLoc, NewArgs[0]);
   1818     }
   1819   }
   1820 
   1821   if (!FieldsWithMemberInitializers.empty())
   1822     ActOnFinishDelayedMemberInitializers(Instantiation);
   1823 
   1824   if (Instantiation->isInvalidDecl())
   1825     Invalid = true;
   1826   else {
   1827     // Instantiate any out-of-line class template partial
   1828     // specializations now.
   1829     for (TemplateDeclInstantiator::delayed_partial_spec_iterator
   1830               P = Instantiator.delayed_partial_spec_begin(),
   1831            PEnd = Instantiator.delayed_partial_spec_end();
   1832          P != PEnd; ++P) {
   1833       if (!Instantiator.InstantiateClassTemplatePartialSpecialization(
   1834                                                                 P->first,
   1835                                                                 P->second)) {
   1836         Invalid = true;
   1837         break;
   1838       }
   1839     }
   1840   }
   1841 
   1842   // Exit the scope of this instantiation.
   1843   SavedContext.pop();
   1844 
   1845   if (!Invalid) {
   1846     Consumer.HandleTagDeclDefinition(Instantiation);
   1847 
   1848     // Always emit the vtable for an explicit instantiation definition
   1849     // of a polymorphic class template specialization.
   1850     if (TSK == TSK_ExplicitInstantiationDefinition)
   1851       MarkVTableUsed(PointOfInstantiation, Instantiation, true);
   1852   }
   1853 
   1854   return Invalid;
   1855 }
   1856 
   1857 namespace {
   1858   /// \brief A partial specialization whose template arguments have matched
   1859   /// a given template-id.
   1860   struct PartialSpecMatchResult {
   1861     ClassTemplatePartialSpecializationDecl *Partial;
   1862     TemplateArgumentList *Args;
   1863   };
   1864 }
   1865 
   1866 bool
   1867 Sema::InstantiateClassTemplateSpecialization(
   1868                            SourceLocation PointOfInstantiation,
   1869                            ClassTemplateSpecializationDecl *ClassTemplateSpec,
   1870                            TemplateSpecializationKind TSK,
   1871                            bool Complain) {
   1872   // Perform the actual instantiation on the canonical declaration.
   1873   ClassTemplateSpec = cast<ClassTemplateSpecializationDecl>(
   1874                                          ClassTemplateSpec->getCanonicalDecl());
   1875 
   1876   // Check whether we have already instantiated or specialized this class
   1877   // template specialization.
   1878   if (ClassTemplateSpec->getSpecializationKind() != TSK_Undeclared) {
   1879     if (ClassTemplateSpec->getSpecializationKind() ==
   1880           TSK_ExplicitInstantiationDeclaration &&
   1881         TSK == TSK_ExplicitInstantiationDefinition) {
   1882       // An explicit instantiation definition follows an explicit instantiation
   1883       // declaration (C++0x [temp.explicit]p10); go ahead and perform the
   1884       // explicit instantiation.
   1885       ClassTemplateSpec->setSpecializationKind(TSK);
   1886 
   1887       // If this is an explicit instantiation definition, mark the
   1888       // vtable as used.
   1889       if (TSK == TSK_ExplicitInstantiationDefinition)
   1890         MarkVTableUsed(PointOfInstantiation, ClassTemplateSpec, true);
   1891 
   1892       return false;
   1893     }
   1894 
   1895     // We can only instantiate something that hasn't already been
   1896     // instantiated or specialized. Fail without any diagnostics: our
   1897     // caller will provide an error message.
   1898     return true;
   1899   }
   1900 
   1901   if (ClassTemplateSpec->isInvalidDecl())
   1902     return true;
   1903 
   1904   ClassTemplateDecl *Template = ClassTemplateSpec->getSpecializedTemplate();
   1905   CXXRecordDecl *Pattern = 0;
   1906 
   1907   // C++ [temp.class.spec.match]p1:
   1908   //   When a class template is used in a context that requires an
   1909   //   instantiation of the class, it is necessary to determine
   1910   //   whether the instantiation is to be generated using the primary
   1911   //   template or one of the partial specializations. This is done by
   1912   //   matching the template arguments of the class template
   1913   //   specialization with the template argument lists of the partial
   1914   //   specializations.
   1915   typedef PartialSpecMatchResult MatchResult;
   1916   llvm::SmallVector<MatchResult, 4> Matched;
   1917   llvm::SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs;
   1918   Template->getPartialSpecializations(PartialSpecs);
   1919   for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I) {
   1920     ClassTemplatePartialSpecializationDecl *Partial = PartialSpecs[I];
   1921     TemplateDeductionInfo Info(Context, PointOfInstantiation);
   1922     if (TemplateDeductionResult Result
   1923           = DeduceTemplateArguments(Partial,
   1924                                     ClassTemplateSpec->getTemplateArgs(),
   1925                                     Info)) {
   1926       // FIXME: Store the failed-deduction information for use in
   1927       // diagnostics, later.
   1928       (void)Result;
   1929     } else {
   1930       Matched.push_back(PartialSpecMatchResult());
   1931       Matched.back().Partial = Partial;
   1932       Matched.back().Args = Info.take();
   1933     }
   1934   }
   1935 
   1936   // If we're dealing with a member template where the template parameters
   1937   // have been instantiated, this provides the original template parameters
   1938   // from which the member template's parameters were instantiated.
   1939   llvm::SmallVector<const NamedDecl *, 4> InstantiatedTemplateParameters;
   1940 
   1941   if (Matched.size() >= 1) {
   1942     llvm::SmallVector<MatchResult, 4>::iterator Best = Matched.begin();
   1943     if (Matched.size() == 1) {
   1944       //   -- If exactly one matching specialization is found, the
   1945       //      instantiation is generated from that specialization.
   1946       // We don't need to do anything for this.
   1947     } else {
   1948       //   -- If more than one matching specialization is found, the
   1949       //      partial order rules (14.5.4.2) are used to determine
   1950       //      whether one of the specializations is more specialized
   1951       //      than the others. If none of the specializations is more
   1952       //      specialized than all of the other matching
   1953       //      specializations, then the use of the class template is
   1954       //      ambiguous and the program is ill-formed.
   1955       for (llvm::SmallVector<MatchResult, 4>::iterator P = Best + 1,
   1956                                                     PEnd = Matched.end();
   1957            P != PEnd; ++P) {
   1958         if (getMoreSpecializedPartialSpecialization(P->Partial, Best->Partial,
   1959                                                     PointOfInstantiation)
   1960               == P->Partial)
   1961           Best = P;
   1962       }
   1963 
   1964       // Determine if the best partial specialization is more specialized than
   1965       // the others.
   1966       bool Ambiguous = false;
   1967       for (llvm::SmallVector<MatchResult, 4>::iterator P = Matched.begin(),
   1968                                                     PEnd = Matched.end();
   1969            P != PEnd; ++P) {
   1970         if (P != Best &&
   1971             getMoreSpecializedPartialSpecialization(P->Partial, Best->Partial,
   1972                                                     PointOfInstantiation)
   1973               != Best->Partial) {
   1974           Ambiguous = true;
   1975           break;
   1976         }
   1977       }
   1978 
   1979       if (Ambiguous) {
   1980         // Partial ordering did not produce a clear winner. Complain.
   1981         ClassTemplateSpec->setInvalidDecl();
   1982         Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous)
   1983           << ClassTemplateSpec;
   1984 
   1985         // Print the matching partial specializations.
   1986         for (llvm::SmallVector<MatchResult, 4>::iterator P = Matched.begin(),
   1987                                                       PEnd = Matched.end();
   1988              P != PEnd; ++P)
   1989           Diag(P->Partial->getLocation(), diag::note_partial_spec_match)
   1990             << getTemplateArgumentBindingsText(
   1991                                             P->Partial->getTemplateParameters(),
   1992                                                *P->Args);
   1993 
   1994         return true;
   1995       }
   1996     }
   1997 
   1998     // Instantiate using the best class template partial specialization.
   1999     ClassTemplatePartialSpecializationDecl *OrigPartialSpec = Best->Partial;
   2000     while (OrigPartialSpec->getInstantiatedFromMember()) {
   2001       // If we've found an explicit specialization of this class template,
   2002       // stop here and use that as the pattern.
   2003       if (OrigPartialSpec->isMemberSpecialization())
   2004         break;
   2005 
   2006       OrigPartialSpec = OrigPartialSpec->getInstantiatedFromMember();
   2007     }
   2008 
   2009     Pattern = OrigPartialSpec;
   2010     ClassTemplateSpec->setInstantiationOf(Best->Partial, Best->Args);
   2011   } else {
   2012     //   -- If no matches are found, the instantiation is generated
   2013     //      from the primary template.
   2014     ClassTemplateDecl *OrigTemplate = Template;
   2015     while (OrigTemplate->getInstantiatedFromMemberTemplate()) {
   2016       // If we've found an explicit specialization of this class template,
   2017       // stop here and use that as the pattern.
   2018       if (OrigTemplate->isMemberSpecialization())
   2019         break;
   2020 
   2021       OrigTemplate = OrigTemplate->getInstantiatedFromMemberTemplate();
   2022     }
   2023 
   2024     Pattern = OrigTemplate->getTemplatedDecl();
   2025   }
   2026 
   2027   bool Result = InstantiateClass(PointOfInstantiation, ClassTemplateSpec,
   2028                                  Pattern,
   2029                                 getTemplateInstantiationArgs(ClassTemplateSpec),
   2030                                  TSK,
   2031                                  Complain);
   2032 
   2033   return Result;
   2034 }
   2035 
   2036 /// \brief Instantiates the definitions of all of the member
   2037 /// of the given class, which is an instantiation of a class template
   2038 /// or a member class of a template.
   2039 void
   2040 Sema::InstantiateClassMembers(SourceLocation PointOfInstantiation,
   2041                               CXXRecordDecl *Instantiation,
   2042                         const MultiLevelTemplateArgumentList &TemplateArgs,
   2043                               TemplateSpecializationKind TSK) {
   2044   for (DeclContext::decl_iterator D = Instantiation->decls_begin(),
   2045                                DEnd = Instantiation->decls_end();
   2046        D != DEnd; ++D) {
   2047     bool SuppressNew = false;
   2048     if (FunctionDecl *Function = dyn_cast<FunctionDecl>(*D)) {
   2049       if (FunctionDecl *Pattern
   2050             = Function->getInstantiatedFromMemberFunction()) {
   2051         MemberSpecializationInfo *MSInfo
   2052           = Function->getMemberSpecializationInfo();
   2053         assert(MSInfo && "No member specialization information?");
   2054         if (MSInfo->getTemplateSpecializationKind()
   2055                                                  == TSK_ExplicitSpecialization)
   2056           continue;
   2057 
   2058         if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
   2059                                                    Function,
   2060                                         MSInfo->getTemplateSpecializationKind(),
   2061                                               MSInfo->getPointOfInstantiation(),
   2062                                                    SuppressNew) ||
   2063             SuppressNew)
   2064           continue;
   2065 
   2066         if (Function->isDefined())
   2067           continue;
   2068 
   2069         if (TSK == TSK_ExplicitInstantiationDefinition) {
   2070           // C++0x [temp.explicit]p8:
   2071           //   An explicit instantiation definition that names a class template
   2072           //   specialization explicitly instantiates the class template
   2073           //   specialization and is only an explicit instantiation definition
   2074           //   of members whose definition is visible at the point of
   2075           //   instantiation.
   2076           if (!Pattern->isDefined())
   2077             continue;
   2078 
   2079           Function->setTemplateSpecializationKind(TSK, PointOfInstantiation);
   2080 
   2081           InstantiateFunctionDefinition(PointOfInstantiation, Function);
   2082         } else {
   2083           Function->setTemplateSpecializationKind(TSK, PointOfInstantiation);
   2084         }
   2085       }
   2086     } else if (VarDecl *Var = dyn_cast<VarDecl>(*D)) {
   2087       if (Var->isStaticDataMember()) {
   2088         MemberSpecializationInfo *MSInfo = Var->getMemberSpecializationInfo();
   2089         assert(MSInfo && "No member specialization information?");
   2090         if (MSInfo->getTemplateSpecializationKind()
   2091                                                  == TSK_ExplicitSpecialization)
   2092           continue;
   2093 
   2094         if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
   2095                                                    Var,
   2096                                         MSInfo->getTemplateSpecializationKind(),
   2097                                               MSInfo->getPointOfInstantiation(),
   2098                                                    SuppressNew) ||
   2099             SuppressNew)
   2100           continue;
   2101 
   2102         if (TSK == TSK_ExplicitInstantiationDefinition) {
   2103           // C++0x [temp.explicit]p8:
   2104           //   An explicit instantiation definition that names a class template
   2105           //   specialization explicitly instantiates the class template
   2106           //   specialization and is only an explicit instantiation definition
   2107           //   of members whose definition is visible at the point of
   2108           //   instantiation.
   2109           if (!Var->getInstantiatedFromStaticDataMember()
   2110                                                      ->getOutOfLineDefinition())
   2111             continue;
   2112 
   2113           Var->setTemplateSpecializationKind(TSK, PointOfInstantiation);
   2114           InstantiateStaticDataMemberDefinition(PointOfInstantiation, Var);
   2115         } else {
   2116           Var->setTemplateSpecializationKind(TSK, PointOfInstantiation);
   2117         }
   2118       }
   2119     } else if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(*D)) {
   2120       // Always skip the injected-class-name, along with any
   2121       // redeclarations of nested classes, since both would cause us
   2122       // to try to instantiate the members of a class twice.
   2123       if (Record->isInjectedClassName() || Record->getPreviousDeclaration())
   2124         continue;
   2125 
   2126       MemberSpecializationInfo *MSInfo = Record->getMemberSpecializationInfo();
   2127       assert(MSInfo && "No member specialization information?");
   2128 
   2129       if (MSInfo->getTemplateSpecializationKind()
   2130                                                 == TSK_ExplicitSpecialization)
   2131         continue;
   2132 
   2133       if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
   2134                                                  Record,
   2135                                         MSInfo->getTemplateSpecializationKind(),
   2136                                               MSInfo->getPointOfInstantiation(),
   2137                                                  SuppressNew) ||
   2138           SuppressNew)
   2139         continue;
   2140 
   2141       CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass();
   2142       assert(Pattern && "Missing instantiated-from-template information");
   2143 
   2144       if (!Record->getDefinition()) {
   2145         if (!Pattern->getDefinition()) {
   2146           // C++0x [temp.explicit]p8:
   2147           //   An explicit instantiation definition that names a class template
   2148           //   specialization explicitly instantiates the class template
   2149           //   specialization and is only an explicit instantiation definition
   2150           //   of members whose definition is visible at the point of
   2151           //   instantiation.
   2152           if (TSK == TSK_ExplicitInstantiationDeclaration) {
   2153             MSInfo->setTemplateSpecializationKind(TSK);
   2154             MSInfo->setPointOfInstantiation(PointOfInstantiation);
   2155           }
   2156 
   2157           continue;
   2158         }
   2159 
   2160         InstantiateClass(PointOfInstantiation, Record, Pattern,
   2161                          TemplateArgs,
   2162                          TSK);
   2163       } else {
   2164         if (TSK == TSK_ExplicitInstantiationDefinition &&
   2165             Record->getTemplateSpecializationKind() ==
   2166                 TSK_ExplicitInstantiationDeclaration) {
   2167           Record->setTemplateSpecializationKind(TSK);
   2168           MarkVTableUsed(PointOfInstantiation, Record, true);
   2169         }
   2170       }
   2171 
   2172       Pattern = cast_or_null<CXXRecordDecl>(Record->getDefinition());
   2173       if (Pattern)
   2174         InstantiateClassMembers(PointOfInstantiation, Pattern, TemplateArgs,
   2175                                 TSK);
   2176     }
   2177   }
   2178 }
   2179 
   2180 /// \brief Instantiate the definitions of all of the members of the
   2181 /// given class template specialization, which was named as part of an
   2182 /// explicit instantiation.
   2183 void
   2184 Sema::InstantiateClassTemplateSpecializationMembers(
   2185                                            SourceLocation PointOfInstantiation,
   2186                             ClassTemplateSpecializationDecl *ClassTemplateSpec,
   2187                                                TemplateSpecializationKind TSK) {
   2188   // C++0x [temp.explicit]p7:
   2189   //   An explicit instantiation that names a class template
   2190   //   specialization is an explicit instantion of the same kind
   2191   //   (declaration or definition) of each of its members (not
   2192   //   including members inherited from base classes) that has not
   2193   //   been previously explicitly specialized in the translation unit
   2194   //   containing the explicit instantiation, except as described
   2195   //   below.
   2196   InstantiateClassMembers(PointOfInstantiation, ClassTemplateSpec,
   2197                           getTemplateInstantiationArgs(ClassTemplateSpec),
   2198                           TSK);
   2199 }
   2200 
   2201 StmtResult
   2202 Sema::SubstStmt(Stmt *S, const MultiLevelTemplateArgumentList &TemplateArgs) {
   2203   if (!S)
   2204     return Owned(S);
   2205 
   2206   TemplateInstantiator Instantiator(*this, TemplateArgs,
   2207                                     SourceLocation(),
   2208                                     DeclarationName());
   2209   return Instantiator.TransformStmt(S);
   2210 }
   2211 
   2212 ExprResult
   2213 Sema::SubstExpr(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs) {
   2214   if (!E)
   2215     return Owned(E);
   2216 
   2217   TemplateInstantiator Instantiator(*this, TemplateArgs,
   2218                                     SourceLocation(),
   2219                                     DeclarationName());
   2220   return Instantiator.TransformExpr(E);
   2221 }
   2222 
   2223 bool Sema::SubstExprs(Expr **Exprs, unsigned NumExprs, bool IsCall,
   2224                       const MultiLevelTemplateArgumentList &TemplateArgs,
   2225                       llvm::SmallVectorImpl<Expr *> &Outputs) {
   2226   if (NumExprs == 0)
   2227     return false;
   2228 
   2229   TemplateInstantiator Instantiator(*this, TemplateArgs,
   2230                                     SourceLocation(),
   2231                                     DeclarationName());
   2232   return Instantiator.TransformExprs(Exprs, NumExprs, IsCall, Outputs);
   2233 }
   2234 
   2235 NestedNameSpecifierLoc
   2236 Sema::SubstNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
   2237                         const MultiLevelTemplateArgumentList &TemplateArgs) {
   2238   if (!NNS)
   2239     return NestedNameSpecifierLoc();
   2240 
   2241   TemplateInstantiator Instantiator(*this, TemplateArgs, NNS.getBeginLoc(),
   2242                                     DeclarationName());
   2243   return Instantiator.TransformNestedNameSpecifierLoc(NNS);
   2244 }
   2245 
   2246 /// \brief Do template substitution on declaration name info.
   2247 DeclarationNameInfo
   2248 Sema::SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
   2249                          const MultiLevelTemplateArgumentList &TemplateArgs) {
   2250   TemplateInstantiator Instantiator(*this, TemplateArgs, NameInfo.getLoc(),
   2251                                     NameInfo.getName());
   2252   return Instantiator.TransformDeclarationNameInfo(NameInfo);
   2253 }
   2254 
   2255 TemplateName
   2256 Sema::SubstTemplateName(NestedNameSpecifierLoc QualifierLoc,
   2257                         TemplateName Name, SourceLocation Loc,
   2258                         const MultiLevelTemplateArgumentList &TemplateArgs) {
   2259   TemplateInstantiator Instantiator(*this, TemplateArgs, Loc,
   2260                                     DeclarationName());
   2261   CXXScopeSpec SS;
   2262   SS.Adopt(QualifierLoc);
   2263   return Instantiator.TransformTemplateName(SS, Name, Loc);
   2264 }
   2265 
   2266 bool Sema::Subst(const TemplateArgumentLoc *Args, unsigned NumArgs,
   2267                  TemplateArgumentListInfo &Result,
   2268                  const MultiLevelTemplateArgumentList &TemplateArgs) {
   2269   TemplateInstantiator Instantiator(*this, TemplateArgs, SourceLocation(),
   2270                                     DeclarationName());
   2271 
   2272   return Instantiator.TransformTemplateArguments(Args, NumArgs, Result);
   2273 }
   2274 
   2275 llvm::PointerUnion<Decl *, LocalInstantiationScope::DeclArgumentPack *> *
   2276 LocalInstantiationScope::findInstantiationOf(const Decl *D) {
   2277   for (LocalInstantiationScope *Current = this; Current;
   2278        Current = Current->Outer) {
   2279 
   2280     // Check if we found something within this scope.
   2281     const Decl *CheckD = D;
   2282     do {
   2283       LocalDeclsMap::iterator Found = Current->LocalDecls.find(CheckD);
   2284       if (Found != Current->LocalDecls.end())
   2285         return &Found->second;
   2286 
   2287       // If this is a tag declaration, it's possible that we need to look for
   2288       // a previous declaration.
   2289       if (const TagDecl *Tag = dyn_cast<TagDecl>(CheckD))
   2290         CheckD = Tag->getPreviousDeclaration();
   2291       else
   2292         CheckD = 0;
   2293     } while (CheckD);
   2294 
   2295     // If we aren't combined with our outer scope, we're done.
   2296     if (!Current->CombineWithOuterScope)
   2297       break;
   2298   }
   2299 
   2300   // If we didn't find the decl, then we either have a sema bug, or we have a
   2301   // forward reference to a label declaration.  Return null to indicate that
   2302   // we have an uninstantiated label.
   2303   assert(isa<LabelDecl>(D) && "declaration not instantiated in this scope");
   2304   return 0;
   2305 }
   2306 
   2307 void LocalInstantiationScope::InstantiatedLocal(const Decl *D, Decl *Inst) {
   2308   llvm::PointerUnion<Decl *, DeclArgumentPack *> &Stored = LocalDecls[D];
   2309   if (Stored.isNull())
   2310     Stored = Inst;
   2311   else if (Stored.is<Decl *>()) {
   2312     assert(Stored.get<Decl *>() == Inst && "Already instantiated this local");
   2313     Stored = Inst;
   2314   } else
   2315     LocalDecls[D].get<DeclArgumentPack *>()->push_back(Inst);
   2316 }
   2317 
   2318 void LocalInstantiationScope::InstantiatedLocalPackArg(const Decl *D,
   2319                                                        Decl *Inst) {
   2320   DeclArgumentPack *Pack = LocalDecls[D].get<DeclArgumentPack *>();
   2321   Pack->push_back(Inst);
   2322 }
   2323 
   2324 void LocalInstantiationScope::MakeInstantiatedLocalArgPack(const Decl *D) {
   2325   llvm::PointerUnion<Decl *, DeclArgumentPack *> &Stored = LocalDecls[D];
   2326   assert(Stored.isNull() && "Already instantiated this local");
   2327   DeclArgumentPack *Pack = new DeclArgumentPack;
   2328   Stored = Pack;
   2329   ArgumentPacks.push_back(Pack);
   2330 }
   2331 
   2332 void LocalInstantiationScope::SetPartiallySubstitutedPack(NamedDecl *Pack,
   2333                                           const TemplateArgument *ExplicitArgs,
   2334                                                     unsigned NumExplicitArgs) {
   2335   assert((!PartiallySubstitutedPack || PartiallySubstitutedPack == Pack) &&
   2336          "Already have a partially-substituted pack");
   2337   assert((!PartiallySubstitutedPack
   2338           || NumArgsInPartiallySubstitutedPack == NumExplicitArgs) &&
   2339          "Wrong number of arguments in partially-substituted pack");
   2340   PartiallySubstitutedPack = Pack;
   2341   ArgsInPartiallySubstitutedPack = ExplicitArgs;
   2342   NumArgsInPartiallySubstitutedPack = NumExplicitArgs;
   2343 }
   2344 
   2345 NamedDecl *LocalInstantiationScope::getPartiallySubstitutedPack(
   2346                                          const TemplateArgument **ExplicitArgs,
   2347                                               unsigned *NumExplicitArgs) const {
   2348   if (ExplicitArgs)
   2349     *ExplicitArgs = 0;
   2350   if (NumExplicitArgs)
   2351     *NumExplicitArgs = 0;
   2352 
   2353   for (const LocalInstantiationScope *Current = this; Current;
   2354        Current = Current->Outer) {
   2355     if (Current->PartiallySubstitutedPack) {
   2356       if (ExplicitArgs)
   2357         *ExplicitArgs = Current->ArgsInPartiallySubstitutedPack;
   2358       if (NumExplicitArgs)
   2359         *NumExplicitArgs = Current->NumArgsInPartiallySubstitutedPack;
   2360 
   2361       return Current->PartiallySubstitutedPack;
   2362     }
   2363 
   2364     if (!Current->CombineWithOuterScope)
   2365       break;
   2366   }
   2367 
   2368   return 0;
   2369 }
   2370