Home | History | Annotate | Download | only in Sema
      1 //===------- SemaTemplate.cpp - Semantic Analysis for C++ Templates -------===/
      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 semantic analysis for C++ templates.
     10 //===----------------------------------------------------------------------===/
     11 
     12 #include "TreeTransform.h"
     13 #include "clang/AST/ASTContext.h"
     14 #include "clang/AST/DeclFriend.h"
     15 #include "clang/AST/DeclTemplate.h"
     16 #include "clang/AST/Expr.h"
     17 #include "clang/AST/ExprCXX.h"
     18 #include "clang/AST/RecursiveASTVisitor.h"
     19 #include "clang/AST/TypeVisitor.h"
     20 #include "clang/Basic/LangOptions.h"
     21 #include "clang/Basic/PartialDiagnostic.h"
     22 #include "clang/Sema/DeclSpec.h"
     23 #include "clang/Sema/Lookup.h"
     24 #include "clang/Sema/ParsedTemplate.h"
     25 #include "clang/Sema/Scope.h"
     26 #include "clang/Sema/SemaInternal.h"
     27 #include "clang/Sema/Template.h"
     28 #include "clang/Sema/TemplateDeduction.h"
     29 #include "llvm/ADT/SmallBitVector.h"
     30 #include "llvm/ADT/SmallString.h"
     31 #include "llvm/ADT/StringExtras.h"
     32 using namespace clang;
     33 using namespace sema;
     34 
     35 // Exported for use by Parser.
     36 SourceRange
     37 clang::getTemplateParamsRange(TemplateParameterList const * const *Ps,
     38                               unsigned N) {
     39   if (!N) return SourceRange();
     40   return SourceRange(Ps[0]->getTemplateLoc(), Ps[N-1]->getRAngleLoc());
     41 }
     42 
     43 /// \brief Determine whether the declaration found is acceptable as the name
     44 /// of a template and, if so, return that template declaration. Otherwise,
     45 /// returns NULL.
     46 static NamedDecl *isAcceptableTemplateName(ASTContext &Context,
     47                                            NamedDecl *Orig,
     48                                            bool AllowFunctionTemplates) {
     49   NamedDecl *D = Orig->getUnderlyingDecl();
     50 
     51   if (isa<TemplateDecl>(D)) {
     52     if (!AllowFunctionTemplates && isa<FunctionTemplateDecl>(D))
     53       return 0;
     54 
     55     return Orig;
     56   }
     57 
     58   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
     59     // C++ [temp.local]p1:
     60     //   Like normal (non-template) classes, class templates have an
     61     //   injected-class-name (Clause 9). The injected-class-name
     62     //   can be used with or without a template-argument-list. When
     63     //   it is used without a template-argument-list, it is
     64     //   equivalent to the injected-class-name followed by the
     65     //   template-parameters of the class template enclosed in
     66     //   <>. When it is used with a template-argument-list, it
     67     //   refers to the specified class template specialization,
     68     //   which could be the current specialization or another
     69     //   specialization.
     70     if (Record->isInjectedClassName()) {
     71       Record = cast<CXXRecordDecl>(Record->getDeclContext());
     72       if (Record->getDescribedClassTemplate())
     73         return Record->getDescribedClassTemplate();
     74 
     75       if (ClassTemplateSpecializationDecl *Spec
     76             = dyn_cast<ClassTemplateSpecializationDecl>(Record))
     77         return Spec->getSpecializedTemplate();
     78     }
     79 
     80     return 0;
     81   }
     82 
     83   return 0;
     84 }
     85 
     86 void Sema::FilterAcceptableTemplateNames(LookupResult &R,
     87                                          bool AllowFunctionTemplates) {
     88   // The set of class templates we've already seen.
     89   llvm::SmallPtrSet<ClassTemplateDecl *, 8> ClassTemplates;
     90   LookupResult::Filter filter = R.makeFilter();
     91   while (filter.hasNext()) {
     92     NamedDecl *Orig = filter.next();
     93     NamedDecl *Repl = isAcceptableTemplateName(Context, Orig,
     94                                                AllowFunctionTemplates);
     95     if (!Repl)
     96       filter.erase();
     97     else if (Repl != Orig) {
     98 
     99       // C++ [temp.local]p3:
    100       //   A lookup that finds an injected-class-name (10.2) can result in an
    101       //   ambiguity in certain cases (for example, if it is found in more than
    102       //   one base class). If all of the injected-class-names that are found
    103       //   refer to specializations of the same class template, and if the name
    104       //   is used as a template-name, the reference refers to the class
    105       //   template itself and not a specialization thereof, and is not
    106       //   ambiguous.
    107       if (ClassTemplateDecl *ClassTmpl = dyn_cast<ClassTemplateDecl>(Repl))
    108         if (!ClassTemplates.insert(ClassTmpl)) {
    109           filter.erase();
    110           continue;
    111         }
    112 
    113       // FIXME: we promote access to public here as a workaround to
    114       // the fact that LookupResult doesn't let us remember that we
    115       // found this template through a particular injected class name,
    116       // which means we end up doing nasty things to the invariants.
    117       // Pretending that access is public is *much* safer.
    118       filter.replace(Repl, AS_public);
    119     }
    120   }
    121   filter.done();
    122 }
    123 
    124 bool Sema::hasAnyAcceptableTemplateNames(LookupResult &R,
    125                                          bool AllowFunctionTemplates) {
    126   for (LookupResult::iterator I = R.begin(), IEnd = R.end(); I != IEnd; ++I)
    127     if (isAcceptableTemplateName(Context, *I, AllowFunctionTemplates))
    128       return true;
    129 
    130   return false;
    131 }
    132 
    133 TemplateNameKind Sema::isTemplateName(Scope *S,
    134                                       CXXScopeSpec &SS,
    135                                       bool hasTemplateKeyword,
    136                                       UnqualifiedId &Name,
    137                                       ParsedType ObjectTypePtr,
    138                                       bool EnteringContext,
    139                                       TemplateTy &TemplateResult,
    140                                       bool &MemberOfUnknownSpecialization) {
    141   assert(getLangOpts().CPlusPlus && "No template names in C!");
    142 
    143   DeclarationName TName;
    144   MemberOfUnknownSpecialization = false;
    145 
    146   switch (Name.getKind()) {
    147   case UnqualifiedId::IK_Identifier:
    148     TName = DeclarationName(Name.Identifier);
    149     break;
    150 
    151   case UnqualifiedId::IK_OperatorFunctionId:
    152     TName = Context.DeclarationNames.getCXXOperatorName(
    153                                               Name.OperatorFunctionId.Operator);
    154     break;
    155 
    156   case UnqualifiedId::IK_LiteralOperatorId:
    157     TName = Context.DeclarationNames.getCXXLiteralOperatorName(Name.Identifier);
    158     break;
    159 
    160   default:
    161     return TNK_Non_template;
    162   }
    163 
    164   QualType ObjectType = ObjectTypePtr.get();
    165 
    166   LookupResult R(*this, TName, Name.getLocStart(), LookupOrdinaryName);
    167   LookupTemplateName(R, S, SS, ObjectType, EnteringContext,
    168                      MemberOfUnknownSpecialization);
    169   if (R.empty()) return TNK_Non_template;
    170   if (R.isAmbiguous()) {
    171     // Suppress diagnostics;  we'll redo this lookup later.
    172     R.suppressDiagnostics();
    173 
    174     // FIXME: we might have ambiguous templates, in which case we
    175     // should at least parse them properly!
    176     return TNK_Non_template;
    177   }
    178 
    179   TemplateName Template;
    180   TemplateNameKind TemplateKind;
    181 
    182   unsigned ResultCount = R.end() - R.begin();
    183   if (ResultCount > 1) {
    184     // We assume that we'll preserve the qualifier from a function
    185     // template name in other ways.
    186     Template = Context.getOverloadedTemplateName(R.begin(), R.end());
    187     TemplateKind = TNK_Function_template;
    188 
    189     // We'll do this lookup again later.
    190     R.suppressDiagnostics();
    191   } else {
    192     TemplateDecl *TD = cast<TemplateDecl>((*R.begin())->getUnderlyingDecl());
    193 
    194     if (SS.isSet() && !SS.isInvalid()) {
    195       NestedNameSpecifier *Qualifier
    196         = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
    197       Template = Context.getQualifiedTemplateName(Qualifier,
    198                                                   hasTemplateKeyword, TD);
    199     } else {
    200       Template = TemplateName(TD);
    201     }
    202 
    203     if (isa<FunctionTemplateDecl>(TD)) {
    204       TemplateKind = TNK_Function_template;
    205 
    206       // We'll do this lookup again later.
    207       R.suppressDiagnostics();
    208     } else {
    209       assert(isa<ClassTemplateDecl>(TD) || isa<TemplateTemplateParmDecl>(TD) ||
    210              isa<TypeAliasTemplateDecl>(TD));
    211       TemplateKind = TNK_Type_template;
    212     }
    213   }
    214 
    215   TemplateResult = TemplateTy::make(Template);
    216   return TemplateKind;
    217 }
    218 
    219 bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II,
    220                                        SourceLocation IILoc,
    221                                        Scope *S,
    222                                        const CXXScopeSpec *SS,
    223                                        TemplateTy &SuggestedTemplate,
    224                                        TemplateNameKind &SuggestedKind) {
    225   // We can't recover unless there's a dependent scope specifier preceding the
    226   // template name.
    227   // FIXME: Typo correction?
    228   if (!SS || !SS->isSet() || !isDependentScopeSpecifier(*SS) ||
    229       computeDeclContext(*SS))
    230     return false;
    231 
    232   // The code is missing a 'template' keyword prior to the dependent template
    233   // name.
    234   NestedNameSpecifier *Qualifier = (NestedNameSpecifier*)SS->getScopeRep();
    235   Diag(IILoc, diag::err_template_kw_missing)
    236     << Qualifier << II.getName()
    237     << FixItHint::CreateInsertion(IILoc, "template ");
    238   SuggestedTemplate
    239     = TemplateTy::make(Context.getDependentTemplateName(Qualifier, &II));
    240   SuggestedKind = TNK_Dependent_template_name;
    241   return true;
    242 }
    243 
    244 void Sema::LookupTemplateName(LookupResult &Found,
    245                               Scope *S, CXXScopeSpec &SS,
    246                               QualType ObjectType,
    247                               bool EnteringContext,
    248                               bool &MemberOfUnknownSpecialization) {
    249   // Determine where to perform name lookup
    250   MemberOfUnknownSpecialization = false;
    251   DeclContext *LookupCtx = 0;
    252   bool isDependent = false;
    253   if (!ObjectType.isNull()) {
    254     // This nested-name-specifier occurs in a member access expression, e.g.,
    255     // x->B::f, and we are looking into the type of the object.
    256     assert(!SS.isSet() && "ObjectType and scope specifier cannot coexist");
    257     LookupCtx = computeDeclContext(ObjectType);
    258     isDependent = ObjectType->isDependentType();
    259     assert((isDependent || !ObjectType->isIncompleteType()) &&
    260            "Caller should have completed object type");
    261 
    262     // Template names cannot appear inside an Objective-C class or object type.
    263     if (ObjectType->isObjCObjectOrInterfaceType()) {
    264       Found.clear();
    265       return;
    266     }
    267   } else if (SS.isSet()) {
    268     // This nested-name-specifier occurs after another nested-name-specifier,
    269     // so long into the context associated with the prior nested-name-specifier.
    270     LookupCtx = computeDeclContext(SS, EnteringContext);
    271     isDependent = isDependentScopeSpecifier(SS);
    272 
    273     // The declaration context must be complete.
    274     if (LookupCtx && RequireCompleteDeclContext(SS, LookupCtx))
    275       return;
    276   }
    277 
    278   bool ObjectTypeSearchedInScope = false;
    279   bool AllowFunctionTemplatesInLookup = true;
    280   if (LookupCtx) {
    281     // Perform "qualified" name lookup into the declaration context we
    282     // computed, which is either the type of the base of a member access
    283     // expression or the declaration context associated with a prior
    284     // nested-name-specifier.
    285     LookupQualifiedName(Found, LookupCtx);
    286     if (!ObjectType.isNull() && Found.empty()) {
    287       // C++ [basic.lookup.classref]p1:
    288       //   In a class member access expression (5.2.5), if the . or -> token is
    289       //   immediately followed by an identifier followed by a <, the
    290       //   identifier must be looked up to determine whether the < is the
    291       //   beginning of a template argument list (14.2) or a less-than operator.
    292       //   The identifier is first looked up in the class of the object
    293       //   expression. If the identifier is not found, it is then looked up in
    294       //   the context of the entire postfix-expression and shall name a class
    295       //   or function template.
    296       if (S) LookupName(Found, S);
    297       ObjectTypeSearchedInScope = true;
    298       AllowFunctionTemplatesInLookup = false;
    299     }
    300   } else if (isDependent && (!S || ObjectType.isNull())) {
    301     // We cannot look into a dependent object type or nested nme
    302     // specifier.
    303     MemberOfUnknownSpecialization = true;
    304     return;
    305   } else {
    306     // Perform unqualified name lookup in the current scope.
    307     LookupName(Found, S);
    308 
    309     if (!ObjectType.isNull())
    310       AllowFunctionTemplatesInLookup = false;
    311   }
    312 
    313   if (Found.empty() && !isDependent) {
    314     // If we did not find any names, attempt to correct any typos.
    315     DeclarationName Name = Found.getLookupName();
    316     Found.clear();
    317     // Simple filter callback that, for keywords, only accepts the C++ *_cast
    318     CorrectionCandidateCallback FilterCCC;
    319     FilterCCC.WantTypeSpecifiers = false;
    320     FilterCCC.WantExpressionKeywords = false;
    321     FilterCCC.WantRemainingKeywords = false;
    322     FilterCCC.WantCXXNamedCasts = true;
    323     if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(),
    324                                                Found.getLookupKind(), S, &SS,
    325                                                FilterCCC, LookupCtx)) {
    326       Found.setLookupName(Corrected.getCorrection());
    327       if (Corrected.getCorrectionDecl())
    328         Found.addDecl(Corrected.getCorrectionDecl());
    329       FilterAcceptableTemplateNames(Found);
    330       if (!Found.empty()) {
    331         std::string CorrectedStr(Corrected.getAsString(getLangOpts()));
    332         std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOpts()));
    333         if (LookupCtx)
    334           Diag(Found.getNameLoc(), diag::err_no_member_template_suggest)
    335             << Name << LookupCtx << CorrectedQuotedStr << SS.getRange()
    336             << FixItHint::CreateReplacement(Corrected.getCorrectionRange(),
    337                                             CorrectedStr);
    338         else
    339           Diag(Found.getNameLoc(), diag::err_no_template_suggest)
    340             << Name << CorrectedQuotedStr
    341             << FixItHint::CreateReplacement(Found.getNameLoc(), CorrectedStr);
    342         if (TemplateDecl *Template = Found.getAsSingle<TemplateDecl>())
    343           Diag(Template->getLocation(), diag::note_previous_decl)
    344             << CorrectedQuotedStr;
    345       }
    346     } else {
    347       Found.setLookupName(Name);
    348     }
    349   }
    350 
    351   FilterAcceptableTemplateNames(Found, AllowFunctionTemplatesInLookup);
    352   if (Found.empty()) {
    353     if (isDependent)
    354       MemberOfUnknownSpecialization = true;
    355     return;
    356   }
    357 
    358   if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope &&
    359       !(getLangOpts().CPlusPlus11 && !Found.empty())) {
    360     // C++03 [basic.lookup.classref]p1:
    361     //   [...] If the lookup in the class of the object expression finds a
    362     //   template, the name is also looked up in the context of the entire
    363     //   postfix-expression and [...]
    364     //
    365     // Note: C++11 does not perform this second lookup.
    366     LookupResult FoundOuter(*this, Found.getLookupName(), Found.getNameLoc(),
    367                             LookupOrdinaryName);
    368     LookupName(FoundOuter, S);
    369     FilterAcceptableTemplateNames(FoundOuter, /*AllowFunctionTemplates=*/false);
    370 
    371     if (FoundOuter.empty()) {
    372       //   - if the name is not found, the name found in the class of the
    373       //     object expression is used, otherwise
    374     } else if (!FoundOuter.getAsSingle<ClassTemplateDecl>() ||
    375                FoundOuter.isAmbiguous()) {
    376       //   - if the name is found in the context of the entire
    377       //     postfix-expression and does not name a class template, the name
    378       //     found in the class of the object expression is used, otherwise
    379       FoundOuter.clear();
    380     } else if (!Found.isSuppressingDiagnostics()) {
    381       //   - if the name found is a class template, it must refer to the same
    382       //     entity as the one found in the class of the object expression,
    383       //     otherwise the program is ill-formed.
    384       if (!Found.isSingleResult() ||
    385           Found.getFoundDecl()->getCanonicalDecl()
    386             != FoundOuter.getFoundDecl()->getCanonicalDecl()) {
    387         Diag(Found.getNameLoc(),
    388              diag::ext_nested_name_member_ref_lookup_ambiguous)
    389           << Found.getLookupName()
    390           << ObjectType;
    391         Diag(Found.getRepresentativeDecl()->getLocation(),
    392              diag::note_ambig_member_ref_object_type)
    393           << ObjectType;
    394         Diag(FoundOuter.getFoundDecl()->getLocation(),
    395              diag::note_ambig_member_ref_scope);
    396 
    397         // Recover by taking the template that we found in the object
    398         // expression's type.
    399       }
    400     }
    401   }
    402 }
    403 
    404 /// ActOnDependentIdExpression - Handle a dependent id-expression that
    405 /// was just parsed.  This is only possible with an explicit scope
    406 /// specifier naming a dependent type.
    407 ExprResult
    408 Sema::ActOnDependentIdExpression(const CXXScopeSpec &SS,
    409                                  SourceLocation TemplateKWLoc,
    410                                  const DeclarationNameInfo &NameInfo,
    411                                  bool isAddressOfOperand,
    412                            const TemplateArgumentListInfo *TemplateArgs) {
    413   DeclContext *DC = getFunctionLevelDeclContext();
    414 
    415   if (!isAddressOfOperand &&
    416       isa<CXXMethodDecl>(DC) &&
    417       cast<CXXMethodDecl>(DC)->isInstance()) {
    418     QualType ThisType = cast<CXXMethodDecl>(DC)->getThisType(Context);
    419 
    420     // Since the 'this' expression is synthesized, we don't need to
    421     // perform the double-lookup check.
    422     NamedDecl *FirstQualifierInScope = 0;
    423 
    424     return Owned(CXXDependentScopeMemberExpr::Create(Context,
    425                                                      /*This*/ 0, ThisType,
    426                                                      /*IsArrow*/ true,
    427                                                      /*Op*/ SourceLocation(),
    428                                                SS.getWithLocInContext(Context),
    429                                                      TemplateKWLoc,
    430                                                      FirstQualifierInScope,
    431                                                      NameInfo,
    432                                                      TemplateArgs));
    433   }
    434 
    435   return BuildDependentDeclRefExpr(SS, TemplateKWLoc, NameInfo, TemplateArgs);
    436 }
    437 
    438 ExprResult
    439 Sema::BuildDependentDeclRefExpr(const CXXScopeSpec &SS,
    440                                 SourceLocation TemplateKWLoc,
    441                                 const DeclarationNameInfo &NameInfo,
    442                                 const TemplateArgumentListInfo *TemplateArgs) {
    443   return Owned(DependentScopeDeclRefExpr::Create(Context,
    444                                                SS.getWithLocInContext(Context),
    445                                                  TemplateKWLoc,
    446                                                  NameInfo,
    447                                                  TemplateArgs));
    448 }
    449 
    450 /// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining
    451 /// that the template parameter 'PrevDecl' is being shadowed by a new
    452 /// declaration at location Loc. Returns true to indicate that this is
    453 /// an error, and false otherwise.
    454 void Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {
    455   assert(PrevDecl->isTemplateParameter() && "Not a template parameter");
    456 
    457   // Microsoft Visual C++ permits template parameters to be shadowed.
    458   if (getLangOpts().MicrosoftExt)
    459     return;
    460 
    461   // C++ [temp.local]p4:
    462   //   A template-parameter shall not be redeclared within its
    463   //   scope (including nested scopes).
    464   Diag(Loc, diag::err_template_param_shadow)
    465     << cast<NamedDecl>(PrevDecl)->getDeclName();
    466   Diag(PrevDecl->getLocation(), diag::note_template_param_here);
    467   return;
    468 }
    469 
    470 /// AdjustDeclIfTemplate - If the given decl happens to be a template, reset
    471 /// the parameter D to reference the templated declaration and return a pointer
    472 /// to the template declaration. Otherwise, do nothing to D and return null.
    473 TemplateDecl *Sema::AdjustDeclIfTemplate(Decl *&D) {
    474   if (TemplateDecl *Temp = dyn_cast_or_null<TemplateDecl>(D)) {
    475     D = Temp->getTemplatedDecl();
    476     return Temp;
    477   }
    478   return 0;
    479 }
    480 
    481 ParsedTemplateArgument ParsedTemplateArgument::getTemplatePackExpansion(
    482                                              SourceLocation EllipsisLoc) const {
    483   assert(Kind == Template &&
    484          "Only template template arguments can be pack expansions here");
    485   assert(getAsTemplate().get().containsUnexpandedParameterPack() &&
    486          "Template template argument pack expansion without packs");
    487   ParsedTemplateArgument Result(*this);
    488   Result.EllipsisLoc = EllipsisLoc;
    489   return Result;
    490 }
    491 
    492 static TemplateArgumentLoc translateTemplateArgument(Sema &SemaRef,
    493                                             const ParsedTemplateArgument &Arg) {
    494 
    495   switch (Arg.getKind()) {
    496   case ParsedTemplateArgument::Type: {
    497     TypeSourceInfo *DI;
    498     QualType T = SemaRef.GetTypeFromParser(Arg.getAsType(), &DI);
    499     if (!DI)
    500       DI = SemaRef.Context.getTrivialTypeSourceInfo(T, Arg.getLocation());
    501     return TemplateArgumentLoc(TemplateArgument(T), DI);
    502   }
    503 
    504   case ParsedTemplateArgument::NonType: {
    505     Expr *E = static_cast<Expr *>(Arg.getAsExpr());
    506     return TemplateArgumentLoc(TemplateArgument(E), E);
    507   }
    508 
    509   case ParsedTemplateArgument::Template: {
    510     TemplateName Template = Arg.getAsTemplate().get();
    511     TemplateArgument TArg;
    512     if (Arg.getEllipsisLoc().isValid())
    513       TArg = TemplateArgument(Template, Optional<unsigned int>());
    514     else
    515       TArg = Template;
    516     return TemplateArgumentLoc(TArg,
    517                                Arg.getScopeSpec().getWithLocInContext(
    518                                                               SemaRef.Context),
    519                                Arg.getLocation(),
    520                                Arg.getEllipsisLoc());
    521   }
    522   }
    523 
    524   llvm_unreachable("Unhandled parsed template argument");
    525 }
    526 
    527 /// \brief Translates template arguments as provided by the parser
    528 /// into template arguments used by semantic analysis.
    529 void Sema::translateTemplateArguments(const ASTTemplateArgsPtr &TemplateArgsIn,
    530                                       TemplateArgumentListInfo &TemplateArgs) {
    531  for (unsigned I = 0, Last = TemplateArgsIn.size(); I != Last; ++I)
    532    TemplateArgs.addArgument(translateTemplateArgument(*this,
    533                                                       TemplateArgsIn[I]));
    534 }
    535 
    536 /// ActOnTypeParameter - Called when a C++ template type parameter
    537 /// (e.g., "typename T") has been parsed. Typename specifies whether
    538 /// the keyword "typename" was used to declare the type parameter
    539 /// (otherwise, "class" was used), and KeyLoc is the location of the
    540 /// "class" or "typename" keyword. ParamName is the name of the
    541 /// parameter (NULL indicates an unnamed template parameter) and
    542 /// ParamNameLoc is the location of the parameter name (if any).
    543 /// If the type parameter has a default argument, it will be added
    544 /// later via ActOnTypeParameterDefault.
    545 Decl *Sema::ActOnTypeParameter(Scope *S, bool Typename, bool Ellipsis,
    546                                SourceLocation EllipsisLoc,
    547                                SourceLocation KeyLoc,
    548                                IdentifierInfo *ParamName,
    549                                SourceLocation ParamNameLoc,
    550                                unsigned Depth, unsigned Position,
    551                                SourceLocation EqualLoc,
    552                                ParsedType DefaultArg) {
    553   assert(S->isTemplateParamScope() &&
    554          "Template type parameter not in template parameter scope!");
    555   bool Invalid = false;
    556 
    557   if (ParamName) {
    558     NamedDecl *PrevDecl = LookupSingleName(S, ParamName, ParamNameLoc,
    559                                            LookupOrdinaryName,
    560                                            ForRedeclaration);
    561     if (PrevDecl && PrevDecl->isTemplateParameter()) {
    562       DiagnoseTemplateParameterShadow(ParamNameLoc, PrevDecl);
    563       PrevDecl = 0;
    564     }
    565   }
    566 
    567   SourceLocation Loc = ParamNameLoc;
    568   if (!ParamName)
    569     Loc = KeyLoc;
    570 
    571   TemplateTypeParmDecl *Param
    572     = TemplateTypeParmDecl::Create(Context, Context.getTranslationUnitDecl(),
    573                                    KeyLoc, Loc, Depth, Position, ParamName,
    574                                    Typename, Ellipsis);
    575   Param->setAccess(AS_public);
    576   if (Invalid)
    577     Param->setInvalidDecl();
    578 
    579   if (ParamName) {
    580     // Add the template parameter into the current scope.
    581     S->AddDecl(Param);
    582     IdResolver.AddDecl(Param);
    583   }
    584 
    585   // C++0x [temp.param]p9:
    586   //   A default template-argument may be specified for any kind of
    587   //   template-parameter that is not a template parameter pack.
    588   if (DefaultArg && Ellipsis) {
    589     Diag(EqualLoc, diag::err_template_param_pack_default_arg);
    590     DefaultArg = ParsedType();
    591   }
    592 
    593   // Handle the default argument, if provided.
    594   if (DefaultArg) {
    595     TypeSourceInfo *DefaultTInfo;
    596     GetTypeFromParser(DefaultArg, &DefaultTInfo);
    597 
    598     assert(DefaultTInfo && "expected source information for type");
    599 
    600     // Check for unexpanded parameter packs.
    601     if (DiagnoseUnexpandedParameterPack(Loc, DefaultTInfo,
    602                                         UPPC_DefaultArgument))
    603       return Param;
    604 
    605     // Check the template argument itself.
    606     if (CheckTemplateArgument(Param, DefaultTInfo)) {
    607       Param->setInvalidDecl();
    608       return Param;
    609     }
    610 
    611     Param->setDefaultArgument(DefaultTInfo, false);
    612   }
    613 
    614   return Param;
    615 }
    616 
    617 /// \brief Check that the type of a non-type template parameter is
    618 /// well-formed.
    619 ///
    620 /// \returns the (possibly-promoted) parameter type if valid;
    621 /// otherwise, produces a diagnostic and returns a NULL type.
    622 QualType
    623 Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {
    624   // We don't allow variably-modified types as the type of non-type template
    625   // parameters.
    626   if (T->isVariablyModifiedType()) {
    627     Diag(Loc, diag::err_variably_modified_nontype_template_param)
    628       << T;
    629     return QualType();
    630   }
    631 
    632   // C++ [temp.param]p4:
    633   //
    634   // A non-type template-parameter shall have one of the following
    635   // (optionally cv-qualified) types:
    636   //
    637   //       -- integral or enumeration type,
    638   if (T->isIntegralOrEnumerationType() ||
    639       //   -- pointer to object or pointer to function,
    640       T->isPointerType() ||
    641       //   -- reference to object or reference to function,
    642       T->isReferenceType() ||
    643       //   -- pointer to member,
    644       T->isMemberPointerType() ||
    645       //   -- std::nullptr_t.
    646       T->isNullPtrType() ||
    647       // If T is a dependent type, we can't do the check now, so we
    648       // assume that it is well-formed.
    649       T->isDependentType()) {
    650     // C++ [temp.param]p5: The top-level cv-qualifiers on the template-parameter
    651     // are ignored when determining its type.
    652     return T.getUnqualifiedType();
    653   }
    654 
    655   // C++ [temp.param]p8:
    656   //
    657   //   A non-type template-parameter of type "array of T" or
    658   //   "function returning T" is adjusted to be of type "pointer to
    659   //   T" or "pointer to function returning T", respectively.
    660   else if (T->isArrayType())
    661     // FIXME: Keep the type prior to promotion?
    662     return Context.getArrayDecayedType(T);
    663   else if (T->isFunctionType())
    664     // FIXME: Keep the type prior to promotion?
    665     return Context.getPointerType(T);
    666 
    667   Diag(Loc, diag::err_template_nontype_parm_bad_type)
    668     << T;
    669 
    670   return QualType();
    671 }
    672 
    673 Decl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
    674                                           unsigned Depth,
    675                                           unsigned Position,
    676                                           SourceLocation EqualLoc,
    677                                           Expr *Default) {
    678   TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S);
    679   QualType T = TInfo->getType();
    680 
    681   assert(S->isTemplateParamScope() &&
    682          "Non-type template parameter not in template parameter scope!");
    683   bool Invalid = false;
    684 
    685   IdentifierInfo *ParamName = D.getIdentifier();
    686   if (ParamName) {
    687     NamedDecl *PrevDecl = LookupSingleName(S, ParamName, D.getIdentifierLoc(),
    688                                            LookupOrdinaryName,
    689                                            ForRedeclaration);
    690     if (PrevDecl && PrevDecl->isTemplateParameter()) {
    691       DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
    692       PrevDecl = 0;
    693     }
    694   }
    695 
    696   T = CheckNonTypeTemplateParameterType(T, D.getIdentifierLoc());
    697   if (T.isNull()) {
    698     T = Context.IntTy; // Recover with an 'int' type.
    699     Invalid = true;
    700   }
    701 
    702   bool IsParameterPack = D.hasEllipsis();
    703   NonTypeTemplateParmDecl *Param
    704     = NonTypeTemplateParmDecl::Create(Context, Context.getTranslationUnitDecl(),
    705                                       D.getLocStart(),
    706                                       D.getIdentifierLoc(),
    707                                       Depth, Position, ParamName, T,
    708                                       IsParameterPack, TInfo);
    709   Param->setAccess(AS_public);
    710 
    711   if (Invalid)
    712     Param->setInvalidDecl();
    713 
    714   if (D.getIdentifier()) {
    715     // Add the template parameter into the current scope.
    716     S->AddDecl(Param);
    717     IdResolver.AddDecl(Param);
    718   }
    719 
    720   // C++0x [temp.param]p9:
    721   //   A default template-argument may be specified for any kind of
    722   //   template-parameter that is not a template parameter pack.
    723   if (Default && IsParameterPack) {
    724     Diag(EqualLoc, diag::err_template_param_pack_default_arg);
    725     Default = 0;
    726   }
    727 
    728   // Check the well-formedness of the default template argument, if provided.
    729   if (Default) {
    730     // Check for unexpanded parameter packs.
    731     if (DiagnoseUnexpandedParameterPack(Default, UPPC_DefaultArgument))
    732       return Param;
    733 
    734     TemplateArgument Converted;
    735     ExprResult DefaultRes = CheckTemplateArgument(Param, Param->getType(), Default, Converted);
    736     if (DefaultRes.isInvalid()) {
    737       Param->setInvalidDecl();
    738       return Param;
    739     }
    740     Default = DefaultRes.take();
    741 
    742     Param->setDefaultArgument(Default, false);
    743   }
    744 
    745   return Param;
    746 }
    747 
    748 /// ActOnTemplateTemplateParameter - Called when a C++ template template
    749 /// parameter (e.g. T in template <template \<typename> class T> class array)
    750 /// has been parsed. S is the current scope.
    751 Decl *Sema::ActOnTemplateTemplateParameter(Scope* S,
    752                                            SourceLocation TmpLoc,
    753                                            TemplateParameterList *Params,
    754                                            SourceLocation EllipsisLoc,
    755                                            IdentifierInfo *Name,
    756                                            SourceLocation NameLoc,
    757                                            unsigned Depth,
    758                                            unsigned Position,
    759                                            SourceLocation EqualLoc,
    760                                            ParsedTemplateArgument Default) {
    761   assert(S->isTemplateParamScope() &&
    762          "Template template parameter not in template parameter scope!");
    763 
    764   // Construct the parameter object.
    765   bool IsParameterPack = EllipsisLoc.isValid();
    766   TemplateTemplateParmDecl *Param =
    767     TemplateTemplateParmDecl::Create(Context, Context.getTranslationUnitDecl(),
    768                                      NameLoc.isInvalid()? TmpLoc : NameLoc,
    769                                      Depth, Position, IsParameterPack,
    770                                      Name, Params);
    771   Param->setAccess(AS_public);
    772 
    773   // If the template template parameter has a name, then link the identifier
    774   // into the scope and lookup mechanisms.
    775   if (Name) {
    776     S->AddDecl(Param);
    777     IdResolver.AddDecl(Param);
    778   }
    779 
    780   if (Params->size() == 0) {
    781     Diag(Param->getLocation(), diag::err_template_template_parm_no_parms)
    782     << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());
    783     Param->setInvalidDecl();
    784   }
    785 
    786   // C++0x [temp.param]p9:
    787   //   A default template-argument may be specified for any kind of
    788   //   template-parameter that is not a template parameter pack.
    789   if (IsParameterPack && !Default.isInvalid()) {
    790     Diag(EqualLoc, diag::err_template_param_pack_default_arg);
    791     Default = ParsedTemplateArgument();
    792   }
    793 
    794   if (!Default.isInvalid()) {
    795     // Check only that we have a template template argument. We don't want to
    796     // try to check well-formedness now, because our template template parameter
    797     // might have dependent types in its template parameters, which we wouldn't
    798     // be able to match now.
    799     //
    800     // If none of the template template parameter's template arguments mention
    801     // other template parameters, we could actually perform more checking here.
    802     // However, it isn't worth doing.
    803     TemplateArgumentLoc DefaultArg = translateTemplateArgument(*this, Default);
    804     if (DefaultArg.getArgument().getAsTemplate().isNull()) {
    805       Diag(DefaultArg.getLocation(), diag::err_template_arg_not_class_template)
    806         << DefaultArg.getSourceRange();
    807       return Param;
    808     }
    809 
    810     // Check for unexpanded parameter packs.
    811     if (DiagnoseUnexpandedParameterPack(DefaultArg.getLocation(),
    812                                         DefaultArg.getArgument().getAsTemplate(),
    813                                         UPPC_DefaultArgument))
    814       return Param;
    815 
    816     Param->setDefaultArgument(DefaultArg, false);
    817   }
    818 
    819   return Param;
    820 }
    821 
    822 /// ActOnTemplateParameterList - Builds a TemplateParameterList that
    823 /// contains the template parameters in Params/NumParams.
    824 TemplateParameterList *
    825 Sema::ActOnTemplateParameterList(unsigned Depth,
    826                                  SourceLocation ExportLoc,
    827                                  SourceLocation TemplateLoc,
    828                                  SourceLocation LAngleLoc,
    829                                  Decl **Params, unsigned NumParams,
    830                                  SourceLocation RAngleLoc) {
    831   if (ExportLoc.isValid())
    832     Diag(ExportLoc, diag::warn_template_export_unsupported);
    833 
    834   return TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
    835                                        (NamedDecl**)Params, NumParams,
    836                                        RAngleLoc);
    837 }
    838 
    839 static void SetNestedNameSpecifier(TagDecl *T, const CXXScopeSpec &SS) {
    840   if (SS.isSet())
    841     T->setQualifierInfo(SS.getWithLocInContext(T->getASTContext()));
    842 }
    843 
    844 DeclResult
    845 Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
    846                          SourceLocation KWLoc, CXXScopeSpec &SS,
    847                          IdentifierInfo *Name, SourceLocation NameLoc,
    848                          AttributeList *Attr,
    849                          TemplateParameterList *TemplateParams,
    850                          AccessSpecifier AS, SourceLocation ModulePrivateLoc,
    851                          unsigned NumOuterTemplateParamLists,
    852                          TemplateParameterList** OuterTemplateParamLists) {
    853   assert(TemplateParams && TemplateParams->size() > 0 &&
    854          "No template parameters");
    855   assert(TUK != TUK_Reference && "Can only declare or define class templates");
    856   bool Invalid = false;
    857 
    858   // Check that we can declare a template here.
    859   if (CheckTemplateDeclScope(S, TemplateParams))
    860     return true;
    861 
    862   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
    863   assert(Kind != TTK_Enum && "can't build template of enumerated type");
    864 
    865   // There is no such thing as an unnamed class template.
    866   if (!Name) {
    867     Diag(KWLoc, diag::err_template_unnamed_class);
    868     return true;
    869   }
    870 
    871   // Find any previous declaration with this name. For a friend with no
    872   // scope explicitly specified, we only look for tag declarations (per
    873   // C++11 [basic.lookup.elab]p2).
    874   DeclContext *SemanticContext;
    875   LookupResult Previous(*this, Name, NameLoc,
    876                         (SS.isEmpty() && TUK == TUK_Friend)
    877                           ? LookupTagName : LookupOrdinaryName,
    878                         ForRedeclaration);
    879   if (SS.isNotEmpty() && !SS.isInvalid()) {
    880     SemanticContext = computeDeclContext(SS, true);
    881     if (!SemanticContext) {
    882       // FIXME: Horrible, horrible hack! We can't currently represent this
    883       // in the AST, and historically we have just ignored such friend
    884       // class templates, so don't complain here.
    885       if (TUK != TUK_Friend)
    886         Diag(NameLoc, diag::err_template_qualified_declarator_no_match)
    887           << SS.getScopeRep() << SS.getRange();
    888       return true;
    889     }
    890 
    891     if (RequireCompleteDeclContext(SS, SemanticContext))
    892       return true;
    893 
    894     // If we're adding a template to a dependent context, we may need to
    895     // rebuilding some of the types used within the template parameter list,
    896     // now that we know what the current instantiation is.
    897     if (SemanticContext->isDependentContext()) {
    898       ContextRAII SavedContext(*this, SemanticContext);
    899       if (RebuildTemplateParamsInCurrentInstantiation(TemplateParams))
    900         Invalid = true;
    901     } else if (TUK != TUK_Friend && TUK != TUK_Reference)
    902       diagnoseQualifiedDeclaration(SS, SemanticContext, Name, NameLoc);
    903 
    904     LookupQualifiedName(Previous, SemanticContext);
    905   } else {
    906     SemanticContext = CurContext;
    907     LookupName(Previous, S);
    908   }
    909 
    910   if (Previous.isAmbiguous())
    911     return true;
    912 
    913   NamedDecl *PrevDecl = 0;
    914   if (Previous.begin() != Previous.end())
    915     PrevDecl = (*Previous.begin())->getUnderlyingDecl();
    916 
    917   // If there is a previous declaration with the same name, check
    918   // whether this is a valid redeclaration.
    919   ClassTemplateDecl *PrevClassTemplate
    920     = dyn_cast_or_null<ClassTemplateDecl>(PrevDecl);
    921 
    922   // We may have found the injected-class-name of a class template,
    923   // class template partial specialization, or class template specialization.
    924   // In these cases, grab the template that is being defined or specialized.
    925   if (!PrevClassTemplate && PrevDecl && isa<CXXRecordDecl>(PrevDecl) &&
    926       cast<CXXRecordDecl>(PrevDecl)->isInjectedClassName()) {
    927     PrevDecl = cast<CXXRecordDecl>(PrevDecl->getDeclContext());
    928     PrevClassTemplate
    929       = cast<CXXRecordDecl>(PrevDecl)->getDescribedClassTemplate();
    930     if (!PrevClassTemplate && isa<ClassTemplateSpecializationDecl>(PrevDecl)) {
    931       PrevClassTemplate
    932         = cast<ClassTemplateSpecializationDecl>(PrevDecl)
    933             ->getSpecializedTemplate();
    934     }
    935   }
    936 
    937   if (TUK == TUK_Friend) {
    938     // C++ [namespace.memdef]p3:
    939     //   [...] When looking for a prior declaration of a class or a function
    940     //   declared as a friend, and when the name of the friend class or
    941     //   function is neither a qualified name nor a template-id, scopes outside
    942     //   the innermost enclosing namespace scope are not considered.
    943     if (!SS.isSet()) {
    944       DeclContext *OutermostContext = CurContext;
    945       while (!OutermostContext->isFileContext())
    946         OutermostContext = OutermostContext->getLookupParent();
    947 
    948       if (PrevDecl &&
    949           (OutermostContext->Equals(PrevDecl->getDeclContext()) ||
    950            OutermostContext->Encloses(PrevDecl->getDeclContext()))) {
    951         SemanticContext = PrevDecl->getDeclContext();
    952       } else {
    953         // Declarations in outer scopes don't matter. However, the outermost
    954         // context we computed is the semantic context for our new
    955         // declaration.
    956         PrevDecl = PrevClassTemplate = 0;
    957         SemanticContext = OutermostContext;
    958 
    959         // Check that the chosen semantic context doesn't already contain a
    960         // declaration of this name as a non-tag type.
    961         LookupResult Previous(*this, Name, NameLoc, LookupOrdinaryName,
    962                               ForRedeclaration);
    963         DeclContext *LookupContext = SemanticContext;
    964         while (LookupContext->isTransparentContext())
    965           LookupContext = LookupContext->getLookupParent();
    966         LookupQualifiedName(Previous, LookupContext);
    967 
    968         if (Previous.isAmbiguous())
    969           return true;
    970 
    971         if (Previous.begin() != Previous.end())
    972           PrevDecl = (*Previous.begin())->getUnderlyingDecl();
    973       }
    974     }
    975   } else if (PrevDecl && !isDeclInScope(PrevDecl, SemanticContext, S))
    976     PrevDecl = PrevClassTemplate = 0;
    977 
    978   if (PrevClassTemplate) {
    979     // Ensure that the template parameter lists are compatible. Skip this check
    980     // for a friend in a dependent context: the template parameter list itself
    981     // could be dependent.
    982     if (!(TUK == TUK_Friend && CurContext->isDependentContext()) &&
    983         !TemplateParameterListsAreEqual(TemplateParams,
    984                                    PrevClassTemplate->getTemplateParameters(),
    985                                         /*Complain=*/true,
    986                                         TPL_TemplateMatch))
    987       return true;
    988 
    989     // C++ [temp.class]p4:
    990     //   In a redeclaration, partial specialization, explicit
    991     //   specialization or explicit instantiation of a class template,
    992     //   the class-key shall agree in kind with the original class
    993     //   template declaration (7.1.5.3).
    994     RecordDecl *PrevRecordDecl = PrevClassTemplate->getTemplatedDecl();
    995     if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind,
    996                                       TUK == TUK_Definition,  KWLoc, *Name)) {
    997       Diag(KWLoc, diag::err_use_with_wrong_tag)
    998         << Name
    999         << FixItHint::CreateReplacement(KWLoc, PrevRecordDecl->getKindName());
   1000       Diag(PrevRecordDecl->getLocation(), diag::note_previous_use);
   1001       Kind = PrevRecordDecl->getTagKind();
   1002     }
   1003 
   1004     // Check for redefinition of this class template.
   1005     if (TUK == TUK_Definition) {
   1006       if (TagDecl *Def = PrevRecordDecl->getDefinition()) {
   1007         Diag(NameLoc, diag::err_redefinition) << Name;
   1008         Diag(Def->getLocation(), diag::note_previous_definition);
   1009         // FIXME: Would it make sense to try to "forget" the previous
   1010         // definition, as part of error recovery?
   1011         return true;
   1012       }
   1013     }
   1014   } else if (PrevDecl && PrevDecl->isTemplateParameter()) {
   1015     // Maybe we will complain about the shadowed template parameter.
   1016     DiagnoseTemplateParameterShadow(NameLoc, PrevDecl);
   1017     // Just pretend that we didn't see the previous declaration.
   1018     PrevDecl = 0;
   1019   } else if (PrevDecl) {
   1020     // C++ [temp]p5:
   1021     //   A class template shall not have the same name as any other
   1022     //   template, class, function, object, enumeration, enumerator,
   1023     //   namespace, or type in the same scope (3.3), except as specified
   1024     //   in (14.5.4).
   1025     Diag(NameLoc, diag::err_redefinition_different_kind) << Name;
   1026     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
   1027     return true;
   1028   }
   1029 
   1030   // Check the template parameter list of this declaration, possibly
   1031   // merging in the template parameter list from the previous class
   1032   // template declaration. Skip this check for a friend in a dependent
   1033   // context, because the template parameter list might be dependent.
   1034   if (!(TUK == TUK_Friend && CurContext->isDependentContext()) &&
   1035       CheckTemplateParameterList(TemplateParams,
   1036             PrevClassTemplate? PrevClassTemplate->getTemplateParameters() : 0,
   1037                                  (SS.isSet() && SemanticContext &&
   1038                                   SemanticContext->isRecord() &&
   1039                                   SemanticContext->isDependentContext())
   1040                                    ? TPC_ClassTemplateMember
   1041                                    : TPC_ClassTemplate))
   1042     Invalid = true;
   1043 
   1044   if (SS.isSet()) {
   1045     // If the name of the template was qualified, we must be defining the
   1046     // template out-of-line.
   1047     if (!SS.isInvalid() && !Invalid && !PrevClassTemplate) {
   1048       Diag(NameLoc, TUK == TUK_Friend ? diag::err_friend_decl_does_not_match
   1049                                       : diag::err_member_def_does_not_match)
   1050         << Name << SemanticContext << SS.getRange();
   1051       Invalid = true;
   1052     }
   1053   }
   1054 
   1055   CXXRecordDecl *NewClass =
   1056     CXXRecordDecl::Create(Context, Kind, SemanticContext, KWLoc, NameLoc, Name,
   1057                           PrevClassTemplate?
   1058                             PrevClassTemplate->getTemplatedDecl() : 0,
   1059                           /*DelayTypeCreation=*/true);
   1060   SetNestedNameSpecifier(NewClass, SS);
   1061   if (NumOuterTemplateParamLists > 0)
   1062     NewClass->setTemplateParameterListsInfo(Context,
   1063                                             NumOuterTemplateParamLists,
   1064                                             OuterTemplateParamLists);
   1065 
   1066   // Add alignment attributes if necessary; these attributes are checked when
   1067   // the ASTContext lays out the structure.
   1068   if (TUK == TUK_Definition) {
   1069     AddAlignmentAttributesForRecord(NewClass);
   1070     AddMsStructLayoutForRecord(NewClass);
   1071   }
   1072 
   1073   ClassTemplateDecl *NewTemplate
   1074     = ClassTemplateDecl::Create(Context, SemanticContext, NameLoc,
   1075                                 DeclarationName(Name), TemplateParams,
   1076                                 NewClass, PrevClassTemplate);
   1077   NewClass->setDescribedClassTemplate(NewTemplate);
   1078 
   1079   if (ModulePrivateLoc.isValid())
   1080     NewTemplate->setModulePrivate();
   1081 
   1082   // Build the type for the class template declaration now.
   1083   QualType T = NewTemplate->getInjectedClassNameSpecialization();
   1084   T = Context.getInjectedClassNameType(NewClass, T);
   1085   assert(T->isDependentType() && "Class template type is not dependent?");
   1086   (void)T;
   1087 
   1088   // If we are providing an explicit specialization of a member that is a
   1089   // class template, make a note of that.
   1090   if (PrevClassTemplate &&
   1091       PrevClassTemplate->getInstantiatedFromMemberTemplate())
   1092     PrevClassTemplate->setMemberSpecialization();
   1093 
   1094   // Set the access specifier.
   1095   if (!Invalid && TUK != TUK_Friend && NewTemplate->getDeclContext()->isRecord())
   1096     SetMemberAccessSpecifier(NewTemplate, PrevClassTemplate, AS);
   1097 
   1098   // Set the lexical context of these templates
   1099   NewClass->setLexicalDeclContext(CurContext);
   1100   NewTemplate->setLexicalDeclContext(CurContext);
   1101 
   1102   if (TUK == TUK_Definition)
   1103     NewClass->startDefinition();
   1104 
   1105   if (Attr)
   1106     ProcessDeclAttributeList(S, NewClass, Attr);
   1107 
   1108   if (PrevClassTemplate)
   1109     mergeDeclAttributes(NewClass, PrevClassTemplate->getTemplatedDecl());
   1110 
   1111   AddPushedVisibilityAttribute(NewClass);
   1112 
   1113   if (TUK != TUK_Friend)
   1114     PushOnScopeChains(NewTemplate, S);
   1115   else {
   1116     if (PrevClassTemplate && PrevClassTemplate->getAccess() != AS_none) {
   1117       NewTemplate->setAccess(PrevClassTemplate->getAccess());
   1118       NewClass->setAccess(PrevClassTemplate->getAccess());
   1119     }
   1120 
   1121     NewTemplate->setObjectOfFriendDecl(/* PreviouslyDeclared = */
   1122                                        PrevClassTemplate != NULL);
   1123 
   1124     // Friend templates are visible in fairly strange ways.
   1125     if (!CurContext->isDependentContext()) {
   1126       DeclContext *DC = SemanticContext->getRedeclContext();
   1127       DC->makeDeclVisibleInContext(NewTemplate);
   1128       if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
   1129         PushOnScopeChains(NewTemplate, EnclosingScope,
   1130                           /* AddToContext = */ false);
   1131     }
   1132 
   1133     FriendDecl *Friend = FriendDecl::Create(Context, CurContext,
   1134                                             NewClass->getLocation(),
   1135                                             NewTemplate,
   1136                                     /*FIXME:*/NewClass->getLocation());
   1137     Friend->setAccess(AS_public);
   1138     CurContext->addDecl(Friend);
   1139   }
   1140 
   1141   if (Invalid) {
   1142     NewTemplate->setInvalidDecl();
   1143     NewClass->setInvalidDecl();
   1144   }
   1145 
   1146   ActOnDocumentableDecl(NewTemplate);
   1147 
   1148   return NewTemplate;
   1149 }
   1150 
   1151 /// \brief Diagnose the presence of a default template argument on a
   1152 /// template parameter, which is ill-formed in certain contexts.
   1153 ///
   1154 /// \returns true if the default template argument should be dropped.
   1155 static bool DiagnoseDefaultTemplateArgument(Sema &S,
   1156                                             Sema::TemplateParamListContext TPC,
   1157                                             SourceLocation ParamLoc,
   1158                                             SourceRange DefArgRange) {
   1159   switch (TPC) {
   1160   case Sema::TPC_ClassTemplate:
   1161   case Sema::TPC_TypeAliasTemplate:
   1162     return false;
   1163 
   1164   case Sema::TPC_FunctionTemplate:
   1165   case Sema::TPC_FriendFunctionTemplateDefinition:
   1166     // C++ [temp.param]p9:
   1167     //   A default template-argument shall not be specified in a
   1168     //   function template declaration or a function template
   1169     //   definition [...]
   1170     //   If a friend function template declaration specifies a default
   1171     //   template-argument, that declaration shall be a definition and shall be
   1172     //   the only declaration of the function template in the translation unit.
   1173     // (C++98/03 doesn't have this wording; see DR226).
   1174     S.Diag(ParamLoc, S.getLangOpts().CPlusPlus11 ?
   1175          diag::warn_cxx98_compat_template_parameter_default_in_function_template
   1176            : diag::ext_template_parameter_default_in_function_template)
   1177       << DefArgRange;
   1178     return false;
   1179 
   1180   case Sema::TPC_ClassTemplateMember:
   1181     // C++0x [temp.param]p9:
   1182     //   A default template-argument shall not be specified in the
   1183     //   template-parameter-lists of the definition of a member of a
   1184     //   class template that appears outside of the member's class.
   1185     S.Diag(ParamLoc, diag::err_template_parameter_default_template_member)
   1186       << DefArgRange;
   1187     return true;
   1188 
   1189   case Sema::TPC_FriendFunctionTemplate:
   1190     // C++ [temp.param]p9:
   1191     //   A default template-argument shall not be specified in a
   1192     //   friend template declaration.
   1193     S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template)
   1194       << DefArgRange;
   1195     return true;
   1196 
   1197     // FIXME: C++0x [temp.param]p9 allows default template-arguments
   1198     // for friend function templates if there is only a single
   1199     // declaration (and it is a definition). Strange!
   1200   }
   1201 
   1202   llvm_unreachable("Invalid TemplateParamListContext!");
   1203 }
   1204 
   1205 /// \brief Check for unexpanded parameter packs within the template parameters
   1206 /// of a template template parameter, recursively.
   1207 static bool DiagnoseUnexpandedParameterPacks(Sema &S,
   1208                                              TemplateTemplateParmDecl *TTP) {
   1209   // A template template parameter which is a parameter pack is also a pack
   1210   // expansion.
   1211   if (TTP->isParameterPack())
   1212     return false;
   1213 
   1214   TemplateParameterList *Params = TTP->getTemplateParameters();
   1215   for (unsigned I = 0, N = Params->size(); I != N; ++I) {
   1216     NamedDecl *P = Params->getParam(I);
   1217     if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(P)) {
   1218       if (!NTTP->isParameterPack() &&
   1219           S.DiagnoseUnexpandedParameterPack(NTTP->getLocation(),
   1220                                             NTTP->getTypeSourceInfo(),
   1221                                       Sema::UPPC_NonTypeTemplateParameterType))
   1222         return true;
   1223 
   1224       continue;
   1225     }
   1226 
   1227     if (TemplateTemplateParmDecl *InnerTTP
   1228                                         = dyn_cast<TemplateTemplateParmDecl>(P))
   1229       if (DiagnoseUnexpandedParameterPacks(S, InnerTTP))
   1230         return true;
   1231   }
   1232 
   1233   return false;
   1234 }
   1235 
   1236 /// \brief Checks the validity of a template parameter list, possibly
   1237 /// considering the template parameter list from a previous
   1238 /// declaration.
   1239 ///
   1240 /// If an "old" template parameter list is provided, it must be
   1241 /// equivalent (per TemplateParameterListsAreEqual) to the "new"
   1242 /// template parameter list.
   1243 ///
   1244 /// \param NewParams Template parameter list for a new template
   1245 /// declaration. This template parameter list will be updated with any
   1246 /// default arguments that are carried through from the previous
   1247 /// template parameter list.
   1248 ///
   1249 /// \param OldParams If provided, template parameter list from a
   1250 /// previous declaration of the same template. Default template
   1251 /// arguments will be merged from the old template parameter list to
   1252 /// the new template parameter list.
   1253 ///
   1254 /// \param TPC Describes the context in which we are checking the given
   1255 /// template parameter list.
   1256 ///
   1257 /// \returns true if an error occurred, false otherwise.
   1258 bool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams,
   1259                                       TemplateParameterList *OldParams,
   1260                                       TemplateParamListContext TPC) {
   1261   bool Invalid = false;
   1262 
   1263   // C++ [temp.param]p10:
   1264   //   The set of default template-arguments available for use with a
   1265   //   template declaration or definition is obtained by merging the
   1266   //   default arguments from the definition (if in scope) and all
   1267   //   declarations in scope in the same way default function
   1268   //   arguments are (8.3.6).
   1269   bool SawDefaultArgument = false;
   1270   SourceLocation PreviousDefaultArgLoc;
   1271 
   1272   // Dummy initialization to avoid warnings.
   1273   TemplateParameterList::iterator OldParam = NewParams->end();
   1274   if (OldParams)
   1275     OldParam = OldParams->begin();
   1276 
   1277   bool RemoveDefaultArguments = false;
   1278   for (TemplateParameterList::iterator NewParam = NewParams->begin(),
   1279                                     NewParamEnd = NewParams->end();
   1280        NewParam != NewParamEnd; ++NewParam) {
   1281     // Variables used to diagnose redundant default arguments
   1282     bool RedundantDefaultArg = false;
   1283     SourceLocation OldDefaultLoc;
   1284     SourceLocation NewDefaultLoc;
   1285 
   1286     // Variable used to diagnose missing default arguments
   1287     bool MissingDefaultArg = false;
   1288 
   1289     // Variable used to diagnose non-final parameter packs
   1290     bool SawParameterPack = false;
   1291 
   1292     if (TemplateTypeParmDecl *NewTypeParm
   1293           = dyn_cast<TemplateTypeParmDecl>(*NewParam)) {
   1294       // Check the presence of a default argument here.
   1295       if (NewTypeParm->hasDefaultArgument() &&
   1296           DiagnoseDefaultTemplateArgument(*this, TPC,
   1297                                           NewTypeParm->getLocation(),
   1298                NewTypeParm->getDefaultArgumentInfo()->getTypeLoc()
   1299                                                        .getSourceRange()))
   1300         NewTypeParm->removeDefaultArgument();
   1301 
   1302       // Merge default arguments for template type parameters.
   1303       TemplateTypeParmDecl *OldTypeParm
   1304           = OldParams? cast<TemplateTypeParmDecl>(*OldParam) : 0;
   1305 
   1306       if (NewTypeParm->isParameterPack()) {
   1307         assert(!NewTypeParm->hasDefaultArgument() &&
   1308                "Parameter packs can't have a default argument!");
   1309         SawParameterPack = true;
   1310       } else if (OldTypeParm && OldTypeParm->hasDefaultArgument() &&
   1311                  NewTypeParm->hasDefaultArgument()) {
   1312         OldDefaultLoc = OldTypeParm->getDefaultArgumentLoc();
   1313         NewDefaultLoc = NewTypeParm->getDefaultArgumentLoc();
   1314         SawDefaultArgument = true;
   1315         RedundantDefaultArg = true;
   1316         PreviousDefaultArgLoc = NewDefaultLoc;
   1317       } else if (OldTypeParm && OldTypeParm->hasDefaultArgument()) {
   1318         // Merge the default argument from the old declaration to the
   1319         // new declaration.
   1320         SawDefaultArgument = true;
   1321         NewTypeParm->setDefaultArgument(OldTypeParm->getDefaultArgumentInfo(),
   1322                                         true);
   1323         PreviousDefaultArgLoc = OldTypeParm->getDefaultArgumentLoc();
   1324       } else if (NewTypeParm->hasDefaultArgument()) {
   1325         SawDefaultArgument = true;
   1326         PreviousDefaultArgLoc = NewTypeParm->getDefaultArgumentLoc();
   1327       } else if (SawDefaultArgument)
   1328         MissingDefaultArg = true;
   1329     } else if (NonTypeTemplateParmDecl *NewNonTypeParm
   1330                = dyn_cast<NonTypeTemplateParmDecl>(*NewParam)) {
   1331       // Check for unexpanded parameter packs.
   1332       if (!NewNonTypeParm->isParameterPack() &&
   1333           DiagnoseUnexpandedParameterPack(NewNonTypeParm->getLocation(),
   1334                                           NewNonTypeParm->getTypeSourceInfo(),
   1335                                           UPPC_NonTypeTemplateParameterType)) {
   1336         Invalid = true;
   1337         continue;
   1338       }
   1339 
   1340       // Check the presence of a default argument here.
   1341       if (NewNonTypeParm->hasDefaultArgument() &&
   1342           DiagnoseDefaultTemplateArgument(*this, TPC,
   1343                                           NewNonTypeParm->getLocation(),
   1344                     NewNonTypeParm->getDefaultArgument()->getSourceRange())) {
   1345         NewNonTypeParm->removeDefaultArgument();
   1346       }
   1347 
   1348       // Merge default arguments for non-type template parameters
   1349       NonTypeTemplateParmDecl *OldNonTypeParm
   1350         = OldParams? cast<NonTypeTemplateParmDecl>(*OldParam) : 0;
   1351       if (NewNonTypeParm->isParameterPack()) {
   1352         assert(!NewNonTypeParm->hasDefaultArgument() &&
   1353                "Parameter packs can't have a default argument!");
   1354         if (!NewNonTypeParm->isPackExpansion())
   1355           SawParameterPack = true;
   1356       } else if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument() &&
   1357           NewNonTypeParm->hasDefaultArgument()) {
   1358         OldDefaultLoc = OldNonTypeParm->getDefaultArgumentLoc();
   1359         NewDefaultLoc = NewNonTypeParm->getDefaultArgumentLoc();
   1360         SawDefaultArgument = true;
   1361         RedundantDefaultArg = true;
   1362         PreviousDefaultArgLoc = NewDefaultLoc;
   1363       } else if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument()) {
   1364         // Merge the default argument from the old declaration to the
   1365         // new declaration.
   1366         SawDefaultArgument = true;
   1367         // FIXME: We need to create a new kind of "default argument"
   1368         // expression that points to a previous non-type template
   1369         // parameter.
   1370         NewNonTypeParm->setDefaultArgument(
   1371                                          OldNonTypeParm->getDefaultArgument(),
   1372                                          /*Inherited=*/ true);
   1373         PreviousDefaultArgLoc = OldNonTypeParm->getDefaultArgumentLoc();
   1374       } else if (NewNonTypeParm->hasDefaultArgument()) {
   1375         SawDefaultArgument = true;
   1376         PreviousDefaultArgLoc = NewNonTypeParm->getDefaultArgumentLoc();
   1377       } else if (SawDefaultArgument)
   1378         MissingDefaultArg = true;
   1379     } else {
   1380       TemplateTemplateParmDecl *NewTemplateParm
   1381         = cast<TemplateTemplateParmDecl>(*NewParam);
   1382 
   1383       // Check for unexpanded parameter packs, recursively.
   1384       if (::DiagnoseUnexpandedParameterPacks(*this, NewTemplateParm)) {
   1385         Invalid = true;
   1386         continue;
   1387       }
   1388 
   1389       // Check the presence of a default argument here.
   1390       if (NewTemplateParm->hasDefaultArgument() &&
   1391           DiagnoseDefaultTemplateArgument(*this, TPC,
   1392                                           NewTemplateParm->getLocation(),
   1393                      NewTemplateParm->getDefaultArgument().getSourceRange()))
   1394         NewTemplateParm->removeDefaultArgument();
   1395 
   1396       // Merge default arguments for template template parameters
   1397       TemplateTemplateParmDecl *OldTemplateParm
   1398         = OldParams? cast<TemplateTemplateParmDecl>(*OldParam) : 0;
   1399       if (NewTemplateParm->isParameterPack()) {
   1400         assert(!NewTemplateParm->hasDefaultArgument() &&
   1401                "Parameter packs can't have a default argument!");
   1402         if (!NewTemplateParm->isPackExpansion())
   1403           SawParameterPack = true;
   1404       } else if (OldTemplateParm && OldTemplateParm->hasDefaultArgument() &&
   1405           NewTemplateParm->hasDefaultArgument()) {
   1406         OldDefaultLoc = OldTemplateParm->getDefaultArgument().getLocation();
   1407         NewDefaultLoc = NewTemplateParm->getDefaultArgument().getLocation();
   1408         SawDefaultArgument = true;
   1409         RedundantDefaultArg = true;
   1410         PreviousDefaultArgLoc = NewDefaultLoc;
   1411       } else if (OldTemplateParm && OldTemplateParm->hasDefaultArgument()) {
   1412         // Merge the default argument from the old declaration to the
   1413         // new declaration.
   1414         SawDefaultArgument = true;
   1415         // FIXME: We need to create a new kind of "default argument" expression
   1416         // that points to a previous template template parameter.
   1417         NewTemplateParm->setDefaultArgument(
   1418                                           OldTemplateParm->getDefaultArgument(),
   1419                                           /*Inherited=*/ true);
   1420         PreviousDefaultArgLoc
   1421           = OldTemplateParm->getDefaultArgument().getLocation();
   1422       } else if (NewTemplateParm->hasDefaultArgument()) {
   1423         SawDefaultArgument = true;
   1424         PreviousDefaultArgLoc
   1425           = NewTemplateParm->getDefaultArgument().getLocation();
   1426       } else if (SawDefaultArgument)
   1427         MissingDefaultArg = true;
   1428     }
   1429 
   1430     // C++11 [temp.param]p11:
   1431     //   If a template parameter of a primary class template or alias template
   1432     //   is a template parameter pack, it shall be the last template parameter.
   1433     if (SawParameterPack && (NewParam + 1) != NewParamEnd &&
   1434         (TPC == TPC_ClassTemplate || TPC == TPC_TypeAliasTemplate)) {
   1435       Diag((*NewParam)->getLocation(),
   1436            diag::err_template_param_pack_must_be_last_template_parameter);
   1437       Invalid = true;
   1438     }
   1439 
   1440     if (RedundantDefaultArg) {
   1441       // C++ [temp.param]p12:
   1442       //   A template-parameter shall not be given default arguments
   1443       //   by two different declarations in the same scope.
   1444       Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);
   1445       Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg);
   1446       Invalid = true;
   1447     } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {
   1448       // C++ [temp.param]p11:
   1449       //   If a template-parameter of a class template has a default
   1450       //   template-argument, each subsequent template-parameter shall either
   1451       //   have a default template-argument supplied or be a template parameter
   1452       //   pack.
   1453       Diag((*NewParam)->getLocation(),
   1454            diag::err_template_param_default_arg_missing);
   1455       Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg);
   1456       Invalid = true;
   1457       RemoveDefaultArguments = true;
   1458     }
   1459 
   1460     // If we have an old template parameter list that we're merging
   1461     // in, move on to the next parameter.
   1462     if (OldParams)
   1463       ++OldParam;
   1464   }
   1465 
   1466   // We were missing some default arguments at the end of the list, so remove
   1467   // all of the default arguments.
   1468   if (RemoveDefaultArguments) {
   1469     for (TemplateParameterList::iterator NewParam = NewParams->begin(),
   1470                                       NewParamEnd = NewParams->end();
   1471          NewParam != NewParamEnd; ++NewParam) {
   1472       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*NewParam))
   1473         TTP->removeDefaultArgument();
   1474       else if (NonTypeTemplateParmDecl *NTTP
   1475                                 = dyn_cast<NonTypeTemplateParmDecl>(*NewParam))
   1476         NTTP->removeDefaultArgument();
   1477       else
   1478         cast<TemplateTemplateParmDecl>(*NewParam)->removeDefaultArgument();
   1479     }
   1480   }
   1481 
   1482   return Invalid;
   1483 }
   1484 
   1485 namespace {
   1486 
   1487 /// A class which looks for a use of a certain level of template
   1488 /// parameter.
   1489 struct DependencyChecker : RecursiveASTVisitor<DependencyChecker> {
   1490   typedef RecursiveASTVisitor<DependencyChecker> super;
   1491 
   1492   unsigned Depth;
   1493   bool Match;
   1494 
   1495   DependencyChecker(TemplateParameterList *Params) : Match(false) {
   1496     NamedDecl *ND = Params->getParam(0);
   1497     if (TemplateTypeParmDecl *PD = dyn_cast<TemplateTypeParmDecl>(ND)) {
   1498       Depth = PD->getDepth();
   1499     } else if (NonTypeTemplateParmDecl *PD =
   1500                  dyn_cast<NonTypeTemplateParmDecl>(ND)) {
   1501       Depth = PD->getDepth();
   1502     } else {
   1503       Depth = cast<TemplateTemplateParmDecl>(ND)->getDepth();
   1504     }
   1505   }
   1506 
   1507   bool Matches(unsigned ParmDepth) {
   1508     if (ParmDepth >= Depth) {
   1509       Match = true;
   1510       return true;
   1511     }
   1512     return false;
   1513   }
   1514 
   1515   bool VisitTemplateTypeParmType(const TemplateTypeParmType *T) {
   1516     return !Matches(T->getDepth());
   1517   }
   1518 
   1519   bool TraverseTemplateName(TemplateName N) {
   1520     if (TemplateTemplateParmDecl *PD =
   1521           dyn_cast_or_null<TemplateTemplateParmDecl>(N.getAsTemplateDecl()))
   1522       if (Matches(PD->getDepth())) return false;
   1523     return super::TraverseTemplateName(N);
   1524   }
   1525 
   1526   bool VisitDeclRefExpr(DeclRefExpr *E) {
   1527     if (NonTypeTemplateParmDecl *PD =
   1528           dyn_cast<NonTypeTemplateParmDecl>(E->getDecl())) {
   1529       if (PD->getDepth() == Depth) {
   1530         Match = true;
   1531         return false;
   1532       }
   1533     }
   1534     return super::VisitDeclRefExpr(E);
   1535   }
   1536 
   1537   bool TraverseInjectedClassNameType(const InjectedClassNameType *T) {
   1538     return TraverseType(T->getInjectedSpecializationType());
   1539   }
   1540 };
   1541 }
   1542 
   1543 /// Determines whether a given type depends on the given parameter
   1544 /// list.
   1545 static bool
   1546 DependsOnTemplateParameters(QualType T, TemplateParameterList *Params) {
   1547   DependencyChecker Checker(Params);
   1548   Checker.TraverseType(T);
   1549   return Checker.Match;
   1550 }
   1551 
   1552 // Find the source range corresponding to the named type in the given
   1553 // nested-name-specifier, if any.
   1554 static SourceRange getRangeOfTypeInNestedNameSpecifier(ASTContext &Context,
   1555                                                        QualType T,
   1556                                                        const CXXScopeSpec &SS) {
   1557   NestedNameSpecifierLoc NNSLoc(SS.getScopeRep(), SS.location_data());
   1558   while (NestedNameSpecifier *NNS = NNSLoc.getNestedNameSpecifier()) {
   1559     if (const Type *CurType = NNS->getAsType()) {
   1560       if (Context.hasSameUnqualifiedType(T, QualType(CurType, 0)))
   1561         return NNSLoc.getTypeLoc().getSourceRange();
   1562     } else
   1563       break;
   1564 
   1565     NNSLoc = NNSLoc.getPrefix();
   1566   }
   1567 
   1568   return SourceRange();
   1569 }
   1570 
   1571 /// \brief Match the given template parameter lists to the given scope
   1572 /// specifier, returning the template parameter list that applies to the
   1573 /// name.
   1574 ///
   1575 /// \param DeclStartLoc the start of the declaration that has a scope
   1576 /// specifier or a template parameter list.
   1577 ///
   1578 /// \param DeclLoc The location of the declaration itself.
   1579 ///
   1580 /// \param SS the scope specifier that will be matched to the given template
   1581 /// parameter lists. This scope specifier precedes a qualified name that is
   1582 /// being declared.
   1583 ///
   1584 /// \param ParamLists the template parameter lists, from the outermost to the
   1585 /// innermost template parameter lists.
   1586 ///
   1587 /// \param NumParamLists the number of template parameter lists in ParamLists.
   1588 ///
   1589 /// \param IsFriend Whether to apply the slightly different rules for
   1590 /// matching template parameters to scope specifiers in friend
   1591 /// declarations.
   1592 ///
   1593 /// \param IsExplicitSpecialization will be set true if the entity being
   1594 /// declared is an explicit specialization, false otherwise.
   1595 ///
   1596 /// \returns the template parameter list, if any, that corresponds to the
   1597 /// name that is preceded by the scope specifier @p SS. This template
   1598 /// parameter list may have template parameters (if we're declaring a
   1599 /// template) or may have no template parameters (if we're declaring a
   1600 /// template specialization), or may be NULL (if what we're declaring isn't
   1601 /// itself a template).
   1602 TemplateParameterList *
   1603 Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc,
   1604                                               SourceLocation DeclLoc,
   1605                                               const CXXScopeSpec &SS,
   1606                                           TemplateParameterList **ParamLists,
   1607                                               unsigned NumParamLists,
   1608                                               bool IsFriend,
   1609                                               bool &IsExplicitSpecialization,
   1610                                               bool &Invalid) {
   1611   IsExplicitSpecialization = false;
   1612   Invalid = false;
   1613 
   1614   // The sequence of nested types to which we will match up the template
   1615   // parameter lists. We first build this list by starting with the type named
   1616   // by the nested-name-specifier and walking out until we run out of types.
   1617   SmallVector<QualType, 4> NestedTypes;
   1618   QualType T;
   1619   if (SS.getScopeRep()) {
   1620     if (CXXRecordDecl *Record
   1621               = dyn_cast_or_null<CXXRecordDecl>(computeDeclContext(SS, true)))
   1622       T = Context.getTypeDeclType(Record);
   1623     else
   1624       T = QualType(SS.getScopeRep()->getAsType(), 0);
   1625   }
   1626 
   1627   // If we found an explicit specialization that prevents us from needing
   1628   // 'template<>' headers, this will be set to the location of that
   1629   // explicit specialization.
   1630   SourceLocation ExplicitSpecLoc;
   1631 
   1632   while (!T.isNull()) {
   1633     NestedTypes.push_back(T);
   1634 
   1635     // Retrieve the parent of a record type.
   1636     if (CXXRecordDecl *Record = T->getAsCXXRecordDecl()) {
   1637       // If this type is an explicit specialization, we're done.
   1638       if (ClassTemplateSpecializationDecl *Spec
   1639           = dyn_cast<ClassTemplateSpecializationDecl>(Record)) {
   1640         if (!isa<ClassTemplatePartialSpecializationDecl>(Spec) &&
   1641             Spec->getSpecializationKind() == TSK_ExplicitSpecialization) {
   1642           ExplicitSpecLoc = Spec->getLocation();
   1643           break;
   1644         }
   1645       } else if (Record->getTemplateSpecializationKind()
   1646                                                 == TSK_ExplicitSpecialization) {
   1647         ExplicitSpecLoc = Record->getLocation();
   1648         break;
   1649       }
   1650 
   1651       if (TypeDecl *Parent = dyn_cast<TypeDecl>(Record->getParent()))
   1652         T = Context.getTypeDeclType(Parent);
   1653       else
   1654         T = QualType();
   1655       continue;
   1656     }
   1657 
   1658     if (const TemplateSpecializationType *TST
   1659                                      = T->getAs<TemplateSpecializationType>()) {
   1660       if (TemplateDecl *Template = TST->getTemplateName().getAsTemplateDecl()) {
   1661         if (TypeDecl *Parent = dyn_cast<TypeDecl>(Template->getDeclContext()))
   1662           T = Context.getTypeDeclType(Parent);
   1663         else
   1664           T = QualType();
   1665         continue;
   1666       }
   1667     }
   1668 
   1669     // Look one step prior in a dependent template specialization type.
   1670     if (const DependentTemplateSpecializationType *DependentTST
   1671                           = T->getAs<DependentTemplateSpecializationType>()) {
   1672       if (NestedNameSpecifier *NNS = DependentTST->getQualifier())
   1673         T = QualType(NNS->getAsType(), 0);
   1674       else
   1675         T = QualType();
   1676       continue;
   1677     }
   1678 
   1679     // Look one step prior in a dependent name type.
   1680     if (const DependentNameType *DependentName = T->getAs<DependentNameType>()){
   1681       if (NestedNameSpecifier *NNS = DependentName->getQualifier())
   1682         T = QualType(NNS->getAsType(), 0);
   1683       else
   1684         T = QualType();
   1685       continue;
   1686     }
   1687 
   1688     // Retrieve the parent of an enumeration type.
   1689     if (const EnumType *EnumT = T->getAs<EnumType>()) {
   1690       // FIXME: Forward-declared enums require a TSK_ExplicitSpecialization
   1691       // check here.
   1692       EnumDecl *Enum = EnumT->getDecl();
   1693 
   1694       // Get to the parent type.
   1695       if (TypeDecl *Parent = dyn_cast<TypeDecl>(Enum->getParent()))
   1696         T = Context.getTypeDeclType(Parent);
   1697       else
   1698         T = QualType();
   1699       continue;
   1700     }
   1701 
   1702     T = QualType();
   1703   }
   1704   // Reverse the nested types list, since we want to traverse from the outermost
   1705   // to the innermost while checking template-parameter-lists.
   1706   std::reverse(NestedTypes.begin(), NestedTypes.end());
   1707 
   1708   // C++0x [temp.expl.spec]p17:
   1709   //   A member or a member template may be nested within many
   1710   //   enclosing class templates. In an explicit specialization for
   1711   //   such a member, the member declaration shall be preceded by a
   1712   //   template<> for each enclosing class template that is
   1713   //   explicitly specialized.
   1714   bool SawNonEmptyTemplateParameterList = false;
   1715   unsigned ParamIdx = 0;
   1716   for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes;
   1717        ++TypeIdx) {
   1718     T = NestedTypes[TypeIdx];
   1719 
   1720     // Whether we expect a 'template<>' header.
   1721     bool NeedEmptyTemplateHeader = false;
   1722 
   1723     // Whether we expect a template header with parameters.
   1724     bool NeedNonemptyTemplateHeader = false;
   1725 
   1726     // For a dependent type, the set of template parameters that we
   1727     // expect to see.
   1728     TemplateParameterList *ExpectedTemplateParams = 0;
   1729 
   1730     // C++0x [temp.expl.spec]p15:
   1731     //   A member or a member template may be nested within many enclosing
   1732     //   class templates. In an explicit specialization for such a member, the
   1733     //   member declaration shall be preceded by a template<> for each
   1734     //   enclosing class template that is explicitly specialized.
   1735     if (CXXRecordDecl *Record = T->getAsCXXRecordDecl()) {
   1736       if (ClassTemplatePartialSpecializationDecl *Partial
   1737             = dyn_cast<ClassTemplatePartialSpecializationDecl>(Record)) {
   1738         ExpectedTemplateParams = Partial->getTemplateParameters();
   1739         NeedNonemptyTemplateHeader = true;
   1740       } else if (Record->isDependentType()) {
   1741         if (Record->getDescribedClassTemplate()) {
   1742           ExpectedTemplateParams = Record->getDescribedClassTemplate()
   1743                                                       ->getTemplateParameters();
   1744           NeedNonemptyTemplateHeader = true;
   1745         }
   1746       } else if (ClassTemplateSpecializationDecl *Spec
   1747                      = dyn_cast<ClassTemplateSpecializationDecl>(Record)) {
   1748         // C++0x [temp.expl.spec]p4:
   1749         //   Members of an explicitly specialized class template are defined
   1750         //   in the same manner as members of normal classes, and not using
   1751         //   the template<> syntax.
   1752         if (Spec->getSpecializationKind() != TSK_ExplicitSpecialization)
   1753           NeedEmptyTemplateHeader = true;
   1754         else
   1755           continue;
   1756       } else if (Record->getTemplateSpecializationKind()) {
   1757         if (Record->getTemplateSpecializationKind()
   1758                                                 != TSK_ExplicitSpecialization &&
   1759             TypeIdx == NumTypes - 1)
   1760           IsExplicitSpecialization = true;
   1761 
   1762         continue;
   1763       }
   1764     } else if (const TemplateSpecializationType *TST
   1765                                      = T->getAs<TemplateSpecializationType>()) {
   1766       if (TemplateDecl *Template = TST->getTemplateName().getAsTemplateDecl()) {
   1767         ExpectedTemplateParams = Template->getTemplateParameters();
   1768         NeedNonemptyTemplateHeader = true;
   1769       }
   1770     } else if (T->getAs<DependentTemplateSpecializationType>()) {
   1771       // FIXME:  We actually could/should check the template arguments here
   1772       // against the corresponding template parameter list.
   1773       NeedNonemptyTemplateHeader = false;
   1774     }
   1775 
   1776     // C++ [temp.expl.spec]p16:
   1777     //   In an explicit specialization declaration for a member of a class
   1778     //   template or a member template that ap- pears in namespace scope, the
   1779     //   member template and some of its enclosing class templates may remain
   1780     //   unspecialized, except that the declaration shall not explicitly
   1781     //   specialize a class member template if its en- closing class templates
   1782     //   are not explicitly specialized as well.
   1783     if (ParamIdx < NumParamLists) {
   1784       if (ParamLists[ParamIdx]->size() == 0) {
   1785         if (SawNonEmptyTemplateParameterList) {
   1786           Diag(DeclLoc, diag::err_specialize_member_of_template)
   1787             << ParamLists[ParamIdx]->getSourceRange();
   1788           Invalid = true;
   1789           IsExplicitSpecialization = false;
   1790           return 0;
   1791         }
   1792       } else
   1793         SawNonEmptyTemplateParameterList = true;
   1794     }
   1795 
   1796     if (NeedEmptyTemplateHeader) {
   1797       // If we're on the last of the types, and we need a 'template<>' header
   1798       // here, then it's an explicit specialization.
   1799       if (TypeIdx == NumTypes - 1)
   1800         IsExplicitSpecialization = true;
   1801 
   1802       if (ParamIdx < NumParamLists) {
   1803         if (ParamLists[ParamIdx]->size() > 0) {
   1804           // The header has template parameters when it shouldn't. Complain.
   1805           Diag(ParamLists[ParamIdx]->getTemplateLoc(),
   1806                diag::err_template_param_list_matches_nontemplate)
   1807             << T
   1808             << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(),
   1809                            ParamLists[ParamIdx]->getRAngleLoc())
   1810             << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);
   1811           Invalid = true;
   1812           return 0;
   1813         }
   1814 
   1815         // Consume this template header.
   1816         ++ParamIdx;
   1817         continue;
   1818       }
   1819 
   1820       if (!IsFriend) {
   1821         // We don't have a template header, but we should.
   1822         SourceLocation ExpectedTemplateLoc;
   1823         if (NumParamLists > 0)
   1824           ExpectedTemplateLoc = ParamLists[0]->getTemplateLoc();
   1825         else
   1826           ExpectedTemplateLoc = DeclStartLoc;
   1827 
   1828         Diag(DeclLoc, diag::err_template_spec_needs_header)
   1829           << getRangeOfTypeInNestedNameSpecifier(Context, T, SS)
   1830           << FixItHint::CreateInsertion(ExpectedTemplateLoc, "template<> ");
   1831       }
   1832 
   1833       continue;
   1834     }
   1835 
   1836     if (NeedNonemptyTemplateHeader) {
   1837       // In friend declarations we can have template-ids which don't
   1838       // depend on the corresponding template parameter lists.  But
   1839       // assume that empty parameter lists are supposed to match this
   1840       // template-id.
   1841       if (IsFriend && T->isDependentType()) {
   1842         if (ParamIdx < NumParamLists &&
   1843             DependsOnTemplateParameters(T, ParamLists[ParamIdx]))
   1844           ExpectedTemplateParams = 0;
   1845         else
   1846           continue;
   1847       }
   1848 
   1849       if (ParamIdx < NumParamLists) {
   1850         // Check the template parameter list, if we can.
   1851         if (ExpectedTemplateParams &&
   1852             !TemplateParameterListsAreEqual(ParamLists[ParamIdx],
   1853                                             ExpectedTemplateParams,
   1854                                             true, TPL_TemplateMatch))
   1855           Invalid = true;
   1856 
   1857         if (!Invalid &&
   1858             CheckTemplateParameterList(ParamLists[ParamIdx], 0,
   1859                                        TPC_ClassTemplateMember))
   1860           Invalid = true;
   1861 
   1862         ++ParamIdx;
   1863         continue;
   1864       }
   1865 
   1866       Diag(DeclLoc, diag::err_template_spec_needs_template_parameters)
   1867         << T
   1868         << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);
   1869       Invalid = true;
   1870       continue;
   1871     }
   1872   }
   1873 
   1874   // If there were at least as many template-ids as there were template
   1875   // parameter lists, then there are no template parameter lists remaining for
   1876   // the declaration itself.
   1877   if (ParamIdx >= NumParamLists)
   1878     return 0;
   1879 
   1880   // If there were too many template parameter lists, complain about that now.
   1881   if (ParamIdx < NumParamLists - 1) {
   1882     bool HasAnyExplicitSpecHeader = false;
   1883     bool AllExplicitSpecHeaders = true;
   1884     for (unsigned I = ParamIdx; I != NumParamLists - 1; ++I) {
   1885       if (ParamLists[I]->size() == 0)
   1886         HasAnyExplicitSpecHeader = true;
   1887       else
   1888         AllExplicitSpecHeaders = false;
   1889     }
   1890 
   1891     Diag(ParamLists[ParamIdx]->getTemplateLoc(),
   1892          AllExplicitSpecHeaders? diag::warn_template_spec_extra_headers
   1893                                : diag::err_template_spec_extra_headers)
   1894       << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(),
   1895                      ParamLists[NumParamLists - 2]->getRAngleLoc());
   1896 
   1897     // If there was a specialization somewhere, such that 'template<>' is
   1898     // not required, and there were any 'template<>' headers, note where the
   1899     // specialization occurred.
   1900     if (ExplicitSpecLoc.isValid() && HasAnyExplicitSpecHeader)
   1901       Diag(ExplicitSpecLoc,
   1902            diag::note_explicit_template_spec_does_not_need_header)
   1903         << NestedTypes.back();
   1904 
   1905     // We have a template parameter list with no corresponding scope, which
   1906     // means that the resulting template declaration can't be instantiated
   1907     // properly (we'll end up with dependent nodes when we shouldn't).
   1908     if (!AllExplicitSpecHeaders)
   1909       Invalid = true;
   1910   }
   1911 
   1912   // C++ [temp.expl.spec]p16:
   1913   //   In an explicit specialization declaration for a member of a class
   1914   //   template or a member template that ap- pears in namespace scope, the
   1915   //   member template and some of its enclosing class templates may remain
   1916   //   unspecialized, except that the declaration shall not explicitly
   1917   //   specialize a class member template if its en- closing class templates
   1918   //   are not explicitly specialized as well.
   1919   if (ParamLists[NumParamLists - 1]->size() == 0 &&
   1920       SawNonEmptyTemplateParameterList) {
   1921     Diag(DeclLoc, diag::err_specialize_member_of_template)
   1922       << ParamLists[ParamIdx]->getSourceRange();
   1923     Invalid = true;
   1924     IsExplicitSpecialization = false;
   1925     return 0;
   1926   }
   1927 
   1928   // Return the last template parameter list, which corresponds to the
   1929   // entity being declared.
   1930   return ParamLists[NumParamLists - 1];
   1931 }
   1932 
   1933 void Sema::NoteAllFoundTemplates(TemplateName Name) {
   1934   if (TemplateDecl *Template = Name.getAsTemplateDecl()) {
   1935     Diag(Template->getLocation(), diag::note_template_declared_here)
   1936       << (isa<FunctionTemplateDecl>(Template)? 0
   1937           : isa<ClassTemplateDecl>(Template)? 1
   1938           : isa<TypeAliasTemplateDecl>(Template)? 2
   1939           : 3)
   1940       << Template->getDeclName();
   1941     return;
   1942   }
   1943 
   1944   if (OverloadedTemplateStorage *OST = Name.getAsOverloadedTemplate()) {
   1945     for (OverloadedTemplateStorage::iterator I = OST->begin(),
   1946                                           IEnd = OST->end();
   1947          I != IEnd; ++I)
   1948       Diag((*I)->getLocation(), diag::note_template_declared_here)
   1949         << 0 << (*I)->getDeclName();
   1950 
   1951     return;
   1952   }
   1953 }
   1954 
   1955 QualType Sema::CheckTemplateIdType(TemplateName Name,
   1956                                    SourceLocation TemplateLoc,
   1957                                    TemplateArgumentListInfo &TemplateArgs) {
   1958   DependentTemplateName *DTN
   1959     = Name.getUnderlying().getAsDependentTemplateName();
   1960   if (DTN && DTN->isIdentifier())
   1961     // When building a template-id where the template-name is dependent,
   1962     // assume the template is a type template. Either our assumption is
   1963     // correct, or the code is ill-formed and will be diagnosed when the
   1964     // dependent name is substituted.
   1965     return Context.getDependentTemplateSpecializationType(ETK_None,
   1966                                                           DTN->getQualifier(),
   1967                                                           DTN->getIdentifier(),
   1968                                                           TemplateArgs);
   1969 
   1970   TemplateDecl *Template = Name.getAsTemplateDecl();
   1971   if (!Template || isa<FunctionTemplateDecl>(Template)) {
   1972     // We might have a substituted template template parameter pack. If so,
   1973     // build a template specialization type for it.
   1974     if (Name.getAsSubstTemplateTemplateParmPack())
   1975       return Context.getTemplateSpecializationType(Name, TemplateArgs);
   1976 
   1977     Diag(TemplateLoc, diag::err_template_id_not_a_type)
   1978       << Name;
   1979     NoteAllFoundTemplates(Name);
   1980     return QualType();
   1981   }
   1982 
   1983   // Check that the template argument list is well-formed for this
   1984   // template.
   1985   SmallVector<TemplateArgument, 4> Converted;
   1986   bool ExpansionIntoFixedList = false;
   1987   if (CheckTemplateArgumentList(Template, TemplateLoc, TemplateArgs,
   1988                                 false, Converted, &ExpansionIntoFixedList))
   1989     return QualType();
   1990 
   1991   QualType CanonType;
   1992 
   1993   bool InstantiationDependent = false;
   1994   TypeAliasTemplateDecl *AliasTemplate = 0;
   1995   if (!ExpansionIntoFixedList &&
   1996       (AliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Template))) {
   1997     // Find the canonical type for this type alias template specialization.
   1998     TypeAliasDecl *Pattern = AliasTemplate->getTemplatedDecl();
   1999     if (Pattern->isInvalidDecl())
   2000       return QualType();
   2001 
   2002     TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
   2003                                       Converted.data(), Converted.size());
   2004 
   2005     // Only substitute for the innermost template argument list.
   2006     MultiLevelTemplateArgumentList TemplateArgLists;
   2007     TemplateArgLists.addOuterTemplateArguments(&TemplateArgs);
   2008     unsigned Depth = AliasTemplate->getTemplateParameters()->getDepth();
   2009     for (unsigned I = 0; I < Depth; ++I)
   2010       TemplateArgLists.addOuterTemplateArguments(0, 0);
   2011 
   2012     LocalInstantiationScope Scope(*this);
   2013     InstantiatingTemplate Inst(*this, TemplateLoc, Template);
   2014     if (Inst)
   2015       return QualType();
   2016 
   2017     CanonType = SubstType(Pattern->getUnderlyingType(),
   2018                           TemplateArgLists, AliasTemplate->getLocation(),
   2019                           AliasTemplate->getDeclName());
   2020     if (CanonType.isNull())
   2021       return QualType();
   2022   } else if (Name.isDependent() ||
   2023              TemplateSpecializationType::anyDependentTemplateArguments(
   2024                TemplateArgs, InstantiationDependent)) {
   2025     // This class template specialization is a dependent
   2026     // type. Therefore, its canonical type is another class template
   2027     // specialization type that contains all of the converted
   2028     // arguments in canonical form. This ensures that, e.g., A<T> and
   2029     // A<T, T> have identical types when A is declared as:
   2030     //
   2031     //   template<typename T, typename U = T> struct A;
   2032     TemplateName CanonName = Context.getCanonicalTemplateName(Name);
   2033     CanonType = Context.getTemplateSpecializationType(CanonName,
   2034                                                       Converted.data(),
   2035                                                       Converted.size());
   2036 
   2037     // FIXME: CanonType is not actually the canonical type, and unfortunately
   2038     // it is a TemplateSpecializationType that we will never use again.
   2039     // In the future, we need to teach getTemplateSpecializationType to only
   2040     // build the canonical type and return that to us.
   2041     CanonType = Context.getCanonicalType(CanonType);
   2042 
   2043     // This might work out to be a current instantiation, in which
   2044     // case the canonical type needs to be the InjectedClassNameType.
   2045     //
   2046     // TODO: in theory this could be a simple hashtable lookup; most
   2047     // changes to CurContext don't change the set of current
   2048     // instantiations.
   2049     if (isa<ClassTemplateDecl>(Template)) {
   2050       for (DeclContext *Ctx = CurContext; Ctx; Ctx = Ctx->getLookupParent()) {
   2051         // If we get out to a namespace, we're done.
   2052         if (Ctx->isFileContext()) break;
   2053 
   2054         // If this isn't a record, keep looking.
   2055         CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Ctx);
   2056         if (!Record) continue;
   2057 
   2058         // Look for one of the two cases with InjectedClassNameTypes
   2059         // and check whether it's the same template.
   2060         if (!isa<ClassTemplatePartialSpecializationDecl>(Record) &&
   2061             !Record->getDescribedClassTemplate())
   2062           continue;
   2063 
   2064         // Fetch the injected class name type and check whether its
   2065         // injected type is equal to the type we just built.
   2066         QualType ICNT = Context.getTypeDeclType(Record);
   2067         QualType Injected = cast<InjectedClassNameType>(ICNT)
   2068           ->getInjectedSpecializationType();
   2069 
   2070         if (CanonType != Injected->getCanonicalTypeInternal())
   2071           continue;
   2072 
   2073         // If so, the canonical type of this TST is the injected
   2074         // class name type of the record we just found.
   2075         assert(ICNT.isCanonical());
   2076         CanonType = ICNT;
   2077         break;
   2078       }
   2079     }
   2080   } else if (ClassTemplateDecl *ClassTemplate
   2081                = dyn_cast<ClassTemplateDecl>(Template)) {
   2082     // Find the class template specialization declaration that
   2083     // corresponds to these arguments.
   2084     void *InsertPos = 0;
   2085     ClassTemplateSpecializationDecl *Decl
   2086       = ClassTemplate->findSpecialization(Converted.data(), Converted.size(),
   2087                                           InsertPos);
   2088     if (!Decl) {
   2089       // This is the first time we have referenced this class template
   2090       // specialization. Create the canonical declaration and add it to
   2091       // the set of specializations.
   2092       Decl = ClassTemplateSpecializationDecl::Create(Context,
   2093                             ClassTemplate->getTemplatedDecl()->getTagKind(),
   2094                                                 ClassTemplate->getDeclContext(),
   2095                             ClassTemplate->getTemplatedDecl()->getLocStart(),
   2096                                                 ClassTemplate->getLocation(),
   2097                                                      ClassTemplate,
   2098                                                      Converted.data(),
   2099                                                      Converted.size(), 0);
   2100       ClassTemplate->AddSpecialization(Decl, InsertPos);
   2101       if (ClassTemplate->isOutOfLine())
   2102         Decl->setLexicalDeclContext(ClassTemplate->getLexicalDeclContext());
   2103     }
   2104 
   2105     CanonType = Context.getTypeDeclType(Decl);
   2106     assert(isa<RecordType>(CanonType) &&
   2107            "type of non-dependent specialization is not a RecordType");
   2108   }
   2109 
   2110   // Build the fully-sugared type for this class template
   2111   // specialization, which refers back to the class template
   2112   // specialization we created or found.
   2113   return Context.getTemplateSpecializationType(Name, TemplateArgs, CanonType);
   2114 }
   2115 
   2116 TypeResult
   2117 Sema::ActOnTemplateIdType(CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
   2118                           TemplateTy TemplateD, SourceLocation TemplateLoc,
   2119                           SourceLocation LAngleLoc,
   2120                           ASTTemplateArgsPtr TemplateArgsIn,
   2121                           SourceLocation RAngleLoc,
   2122                           bool IsCtorOrDtorName) {
   2123   if (SS.isInvalid())
   2124     return true;
   2125 
   2126   TemplateName Template = TemplateD.getAsVal<TemplateName>();
   2127 
   2128   // Translate the parser's template argument list in our AST format.
   2129   TemplateArgumentListInfo TemplateArgs(LAngleLoc, RAngleLoc);
   2130   translateTemplateArguments(TemplateArgsIn, TemplateArgs);
   2131 
   2132   if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) {
   2133     QualType T
   2134       = Context.getDependentTemplateSpecializationType(ETK_None,
   2135                                                        DTN->getQualifier(),
   2136                                                        DTN->getIdentifier(),
   2137                                                        TemplateArgs);
   2138     // Build type-source information.
   2139     TypeLocBuilder TLB;
   2140     DependentTemplateSpecializationTypeLoc SpecTL
   2141       = TLB.push<DependentTemplateSpecializationTypeLoc>(T);
   2142     SpecTL.setElaboratedKeywordLoc(SourceLocation());
   2143     SpecTL.setQualifierLoc(SS.getWithLocInContext(Context));
   2144     SpecTL.setTemplateKeywordLoc(TemplateKWLoc);
   2145     SpecTL.setTemplateNameLoc(TemplateLoc);
   2146     SpecTL.setLAngleLoc(LAngleLoc);
   2147     SpecTL.setRAngleLoc(RAngleLoc);
   2148     for (unsigned I = 0, N = SpecTL.getNumArgs(); I != N; ++I)
   2149       SpecTL.setArgLocInfo(I, TemplateArgs[I].getLocInfo());
   2150     return CreateParsedType(T, TLB.getTypeSourceInfo(Context, T));
   2151   }
   2152 
   2153   QualType Result = CheckTemplateIdType(Template, TemplateLoc, TemplateArgs);
   2154 
   2155   if (Result.isNull())
   2156     return true;
   2157 
   2158   // Build type-source information.
   2159   TypeLocBuilder TLB;
   2160   TemplateSpecializationTypeLoc SpecTL
   2161     = TLB.push<TemplateSpecializationTypeLoc>(Result);
   2162   SpecTL.setTemplateKeywordLoc(TemplateKWLoc);
   2163   SpecTL.setTemplateNameLoc(TemplateLoc);
   2164   SpecTL.setLAngleLoc(LAngleLoc);
   2165   SpecTL.setRAngleLoc(RAngleLoc);
   2166   for (unsigned i = 0, e = SpecTL.getNumArgs(); i != e; ++i)
   2167     SpecTL.setArgLocInfo(i, TemplateArgs[i].getLocInfo());
   2168 
   2169   // NOTE: avoid constructing an ElaboratedTypeLoc if this is a
   2170   // constructor or destructor name (in such a case, the scope specifier
   2171   // will be attached to the enclosing Decl or Expr node).
   2172   if (SS.isNotEmpty() && !IsCtorOrDtorName) {
   2173     // Create an elaborated-type-specifier containing the nested-name-specifier.
   2174     Result = Context.getElaboratedType(ETK_None, SS.getScopeRep(), Result);
   2175     ElaboratedTypeLoc ElabTL = TLB.push<ElaboratedTypeLoc>(Result);
   2176     ElabTL.setElaboratedKeywordLoc(SourceLocation());
   2177     ElabTL.setQualifierLoc(SS.getWithLocInContext(Context));
   2178   }
   2179 
   2180   return CreateParsedType(Result, TLB.getTypeSourceInfo(Context, Result));
   2181 }
   2182 
   2183 TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK,
   2184                                         TypeSpecifierType TagSpec,
   2185                                         SourceLocation TagLoc,
   2186                                         CXXScopeSpec &SS,
   2187                                         SourceLocation TemplateKWLoc,
   2188                                         TemplateTy TemplateD,
   2189                                         SourceLocation TemplateLoc,
   2190                                         SourceLocation LAngleLoc,
   2191                                         ASTTemplateArgsPtr TemplateArgsIn,
   2192                                         SourceLocation RAngleLoc) {
   2193   TemplateName Template = TemplateD.getAsVal<TemplateName>();
   2194 
   2195   // Translate the parser's template argument list in our AST format.
   2196   TemplateArgumentListInfo TemplateArgs(LAngleLoc, RAngleLoc);
   2197   translateTemplateArguments(TemplateArgsIn, TemplateArgs);
   2198 
   2199   // Determine the tag kind
   2200   TagTypeKind TagKind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
   2201   ElaboratedTypeKeyword Keyword
   2202     = TypeWithKeyword::getKeywordForTagTypeKind(TagKind);
   2203 
   2204   if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) {
   2205     QualType T = Context.getDependentTemplateSpecializationType(Keyword,
   2206                                                           DTN->getQualifier(),
   2207                                                           DTN->getIdentifier(),
   2208                                                                 TemplateArgs);
   2209 
   2210     // Build type-source information.
   2211     TypeLocBuilder TLB;
   2212     DependentTemplateSpecializationTypeLoc SpecTL
   2213       = TLB.push<DependentTemplateSpecializationTypeLoc>(T);
   2214     SpecTL.setElaboratedKeywordLoc(TagLoc);
   2215     SpecTL.setQualifierLoc(SS.getWithLocInContext(Context));
   2216     SpecTL.setTemplateKeywordLoc(TemplateKWLoc);
   2217     SpecTL.setTemplateNameLoc(TemplateLoc);
   2218     SpecTL.setLAngleLoc(LAngleLoc);
   2219     SpecTL.setRAngleLoc(RAngleLoc);
   2220     for (unsigned I = 0, N = SpecTL.getNumArgs(); I != N; ++I)
   2221       SpecTL.setArgLocInfo(I, TemplateArgs[I].getLocInfo());
   2222     return CreateParsedType(T, TLB.getTypeSourceInfo(Context, T));
   2223   }
   2224 
   2225   if (TypeAliasTemplateDecl *TAT =
   2226         dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {
   2227     // C++0x [dcl.type.elab]p2:
   2228     //   If the identifier resolves to a typedef-name or the simple-template-id
   2229     //   resolves to an alias template specialization, the
   2230     //   elaborated-type-specifier is ill-formed.
   2231     Diag(TemplateLoc, diag::err_tag_reference_non_tag) << 4;
   2232     Diag(TAT->getLocation(), diag::note_declared_at);
   2233   }
   2234 
   2235   QualType Result = CheckTemplateIdType(Template, TemplateLoc, TemplateArgs);
   2236   if (Result.isNull())
   2237     return TypeResult(true);
   2238 
   2239   // Check the tag kind
   2240   if (const RecordType *RT = Result->getAs<RecordType>()) {
   2241     RecordDecl *D = RT->getDecl();
   2242 
   2243     IdentifierInfo *Id = D->getIdentifier();
   2244     assert(Id && "templated class must have an identifier");
   2245 
   2246     if (!isAcceptableTagRedeclaration(D, TagKind, TUK == TUK_Definition,
   2247                                       TagLoc, *Id)) {
   2248       Diag(TagLoc, diag::err_use_with_wrong_tag)
   2249         << Result
   2250         << FixItHint::CreateReplacement(SourceRange(TagLoc), D->getKindName());
   2251       Diag(D->getLocation(), diag::note_previous_use);
   2252     }
   2253   }
   2254 
   2255   // Provide source-location information for the template specialization.
   2256   TypeLocBuilder TLB;
   2257   TemplateSpecializationTypeLoc SpecTL
   2258     = TLB.push<TemplateSpecializationTypeLoc>(Result);
   2259   SpecTL.setTemplateKeywordLoc(TemplateKWLoc);
   2260   SpecTL.setTemplateNameLoc(TemplateLoc);
   2261   SpecTL.setLAngleLoc(LAngleLoc);
   2262   SpecTL.setRAngleLoc(RAngleLoc);
   2263   for (unsigned i = 0, e = SpecTL.getNumArgs(); i != e; ++i)
   2264     SpecTL.setArgLocInfo(i, TemplateArgs[i].getLocInfo());
   2265 
   2266   // Construct an elaborated type containing the nested-name-specifier (if any)
   2267   // and tag keyword.
   2268   Result = Context.getElaboratedType(Keyword, SS.getScopeRep(), Result);
   2269   ElaboratedTypeLoc ElabTL = TLB.push<ElaboratedTypeLoc>(Result);
   2270   ElabTL.setElaboratedKeywordLoc(TagLoc);
   2271   ElabTL.setQualifierLoc(SS.getWithLocInContext(Context));
   2272   return CreateParsedType(Result, TLB.getTypeSourceInfo(Context, Result));
   2273 }
   2274 
   2275 ExprResult Sema::BuildTemplateIdExpr(const CXXScopeSpec &SS,
   2276                                      SourceLocation TemplateKWLoc,
   2277                                      LookupResult &R,
   2278                                      bool RequiresADL,
   2279                                  const TemplateArgumentListInfo *TemplateArgs) {
   2280   // FIXME: Can we do any checking at this point? I guess we could check the
   2281   // template arguments that we have against the template name, if the template
   2282   // name refers to a single template. That's not a terribly common case,
   2283   // though.
   2284   // foo<int> could identify a single function unambiguously
   2285   // This approach does NOT work, since f<int>(1);
   2286   // gets resolved prior to resorting to overload resolution
   2287   // i.e., template<class T> void f(double);
   2288   //       vs template<class T, class U> void f(U);
   2289 
   2290   // These should be filtered out by our callers.
   2291   assert(!R.empty() && "empty lookup results when building templateid");
   2292   assert(!R.isAmbiguous() && "ambiguous lookup when building templateid");
   2293 
   2294   // We don't want lookup warnings at this point.
   2295   R.suppressDiagnostics();
   2296 
   2297   UnresolvedLookupExpr *ULE
   2298     = UnresolvedLookupExpr::Create(Context, R.getNamingClass(),
   2299                                    SS.getWithLocInContext(Context),
   2300                                    TemplateKWLoc,
   2301                                    R.getLookupNameInfo(),
   2302                                    RequiresADL, TemplateArgs,
   2303                                    R.begin(), R.end());
   2304 
   2305   return Owned(ULE);
   2306 }
   2307 
   2308 // We actually only call this from template instantiation.
   2309 ExprResult
   2310 Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS,
   2311                                    SourceLocation TemplateKWLoc,
   2312                                    const DeclarationNameInfo &NameInfo,
   2313                              const TemplateArgumentListInfo *TemplateArgs) {
   2314   assert(TemplateArgs || TemplateKWLoc.isValid());
   2315   DeclContext *DC;
   2316   if (!(DC = computeDeclContext(SS, false)) ||
   2317       DC->isDependentContext() ||
   2318       RequireCompleteDeclContext(SS, DC))
   2319     return BuildDependentDeclRefExpr(SS, TemplateKWLoc, NameInfo, TemplateArgs);
   2320 
   2321   bool MemberOfUnknownSpecialization;
   2322   LookupResult R(*this, NameInfo, LookupOrdinaryName);
   2323   LookupTemplateName(R, (Scope*) 0, SS, QualType(), /*Entering*/ false,
   2324                      MemberOfUnknownSpecialization);
   2325 
   2326   if (R.isAmbiguous())
   2327     return ExprError();
   2328 
   2329   if (R.empty()) {
   2330     Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_non_template)
   2331       << NameInfo.getName() << SS.getRange();
   2332     return ExprError();
   2333   }
   2334 
   2335   if (ClassTemplateDecl *Temp = R.getAsSingle<ClassTemplateDecl>()) {
   2336     Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_class_template)
   2337       << (NestedNameSpecifier*) SS.getScopeRep()
   2338       << NameInfo.getName() << SS.getRange();
   2339     Diag(Temp->getLocation(), diag::note_referenced_class_template);
   2340     return ExprError();
   2341   }
   2342 
   2343   return BuildTemplateIdExpr(SS, TemplateKWLoc, R, /*ADL*/ false, TemplateArgs);
   2344 }
   2345 
   2346 /// \brief Form a dependent template name.
   2347 ///
   2348 /// This action forms a dependent template name given the template
   2349 /// name and its (presumably dependent) scope specifier. For
   2350 /// example, given "MetaFun::template apply", the scope specifier \p
   2351 /// SS will be "MetaFun::", \p TemplateKWLoc contains the location
   2352 /// of the "template" keyword, and "apply" is the \p Name.
   2353 TemplateNameKind Sema::ActOnDependentTemplateName(Scope *S,
   2354                                                   CXXScopeSpec &SS,
   2355                                                   SourceLocation TemplateKWLoc,
   2356                                                   UnqualifiedId &Name,
   2357                                                   ParsedType ObjectType,
   2358                                                   bool EnteringContext,
   2359                                                   TemplateTy &Result) {
   2360   if (TemplateKWLoc.isValid() && S && !S->getTemplateParamParent())
   2361     Diag(TemplateKWLoc,
   2362          getLangOpts().CPlusPlus11 ?
   2363            diag::warn_cxx98_compat_template_outside_of_template :
   2364            diag::ext_template_outside_of_template)
   2365       << FixItHint::CreateRemoval(TemplateKWLoc);
   2366 
   2367   DeclContext *LookupCtx = 0;
   2368   if (SS.isSet())
   2369     LookupCtx = computeDeclContext(SS, EnteringContext);
   2370   if (!LookupCtx && ObjectType)
   2371     LookupCtx = computeDeclContext(ObjectType.get());
   2372   if (LookupCtx) {
   2373     // C++0x [temp.names]p5:
   2374     //   If a name prefixed by the keyword template is not the name of
   2375     //   a template, the program is ill-formed. [Note: the keyword
   2376     //   template may not be applied to non-template members of class
   2377     //   templates. -end note ] [ Note: as is the case with the
   2378     //   typename prefix, the template prefix is allowed in cases
   2379     //   where it is not strictly necessary; i.e., when the
   2380     //   nested-name-specifier or the expression on the left of the ->
   2381     //   or . is not dependent on a template-parameter, or the use
   2382     //   does not appear in the scope of a template. -end note]
   2383     //
   2384     // Note: C++03 was more strict here, because it banned the use of
   2385     // the "template" keyword prior to a template-name that was not a
   2386     // dependent name. C++ DR468 relaxed this requirement (the
   2387     // "template" keyword is now permitted). We follow the C++0x
   2388     // rules, even in C++03 mode with a warning, retroactively applying the DR.
   2389     bool MemberOfUnknownSpecialization;
   2390     TemplateNameKind TNK = isTemplateName(S, SS, TemplateKWLoc.isValid(), Name,
   2391                                           ObjectType, EnteringContext, Result,
   2392                                           MemberOfUnknownSpecialization);
   2393     if (TNK == TNK_Non_template && LookupCtx->isDependentContext() &&
   2394         isa<CXXRecordDecl>(LookupCtx) &&
   2395         (!cast<CXXRecordDecl>(LookupCtx)->hasDefinition() ||
   2396          cast<CXXRecordDecl>(LookupCtx)->hasAnyDependentBases())) {
   2397       // This is a dependent template. Handle it below.
   2398     } else if (TNK == TNK_Non_template) {
   2399       Diag(Name.getLocStart(),
   2400            diag::err_template_kw_refers_to_non_template)
   2401         << GetNameFromUnqualifiedId(Name).getName()
   2402         << Name.getSourceRange()
   2403         << TemplateKWLoc;
   2404       return TNK_Non_template;
   2405     } else {
   2406       // We found something; return it.
   2407       return TNK;
   2408     }
   2409   }
   2410 
   2411   NestedNameSpecifier *Qualifier
   2412     = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
   2413 
   2414   switch (Name.getKind()) {
   2415   case UnqualifiedId::IK_Identifier:
   2416     Result = TemplateTy::make(Context.getDependentTemplateName(Qualifier,
   2417                                                               Name.Identifier));
   2418     return TNK_Dependent_template_name;
   2419 
   2420   case UnqualifiedId::IK_OperatorFunctionId:
   2421     Result = TemplateTy::make(Context.getDependentTemplateName(Qualifier,
   2422                                              Name.OperatorFunctionId.Operator));
   2423     return TNK_Dependent_template_name;
   2424 
   2425   case UnqualifiedId::IK_LiteralOperatorId:
   2426     llvm_unreachable(
   2427             "We don't support these; Parse shouldn't have allowed propagation");
   2428 
   2429   default:
   2430     break;
   2431   }
   2432 
   2433   Diag(Name.getLocStart(),
   2434        diag::err_template_kw_refers_to_non_template)
   2435     << GetNameFromUnqualifiedId(Name).getName()
   2436     << Name.getSourceRange()
   2437     << TemplateKWLoc;
   2438   return TNK_Non_template;
   2439 }
   2440 
   2441 bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param,
   2442                                      const TemplateArgumentLoc &AL,
   2443                           SmallVectorImpl<TemplateArgument> &Converted) {
   2444   const TemplateArgument &Arg = AL.getArgument();
   2445 
   2446   // Check template type parameter.
   2447   switch(Arg.getKind()) {
   2448   case TemplateArgument::Type:
   2449     // C++ [temp.arg.type]p1:
   2450     //   A template-argument for a template-parameter which is a
   2451     //   type shall be a type-id.
   2452     break;
   2453   case TemplateArgument::Template: {
   2454     // We have a template type parameter but the template argument
   2455     // is a template without any arguments.
   2456     SourceRange SR = AL.getSourceRange();
   2457     TemplateName Name = Arg.getAsTemplate();
   2458     Diag(SR.getBegin(), diag::err_template_missing_args)
   2459       << Name << SR;
   2460     if (TemplateDecl *Decl = Name.getAsTemplateDecl())
   2461       Diag(Decl->getLocation(), diag::note_template_decl_here);
   2462 
   2463     return true;
   2464   }
   2465   case TemplateArgument::Expression: {
   2466     // We have a template type parameter but the template argument is an
   2467     // expression; see if maybe it is missing the "typename" keyword.
   2468     CXXScopeSpec SS;
   2469     DeclarationNameInfo NameInfo;
   2470 
   2471     if (DeclRefExpr *ArgExpr = dyn_cast<DeclRefExpr>(Arg.getAsExpr())) {
   2472       SS.Adopt(ArgExpr->getQualifierLoc());
   2473       NameInfo = ArgExpr->getNameInfo();
   2474     } else if (DependentScopeDeclRefExpr *ArgExpr =
   2475                dyn_cast<DependentScopeDeclRefExpr>(Arg.getAsExpr())) {
   2476       SS.Adopt(ArgExpr->getQualifierLoc());
   2477       NameInfo = ArgExpr->getNameInfo();
   2478     } else if (CXXDependentScopeMemberExpr *ArgExpr =
   2479                dyn_cast<CXXDependentScopeMemberExpr>(Arg.getAsExpr())) {
   2480       if (ArgExpr->isImplicitAccess()) {
   2481         SS.Adopt(ArgExpr->getQualifierLoc());
   2482         NameInfo = ArgExpr->getMemberNameInfo();
   2483       }
   2484     }
   2485 
   2486     if (NameInfo.getName().isIdentifier()) {
   2487       LookupResult Result(*this, NameInfo, LookupOrdinaryName);
   2488       LookupParsedName(Result, CurScope, &SS);
   2489 
   2490       if (Result.getAsSingle<TypeDecl>() ||
   2491           Result.getResultKind() ==
   2492             LookupResult::NotFoundInCurrentInstantiation) {
   2493         // FIXME: Add a FixIt and fix up the template argument for recovery.
   2494         SourceLocation Loc = AL.getSourceRange().getBegin();
   2495         Diag(Loc, diag::err_template_arg_must_be_type_suggest);
   2496         Diag(Param->getLocation(), diag::note_template_param_here);
   2497         return true;
   2498       }
   2499     }
   2500     // fallthrough
   2501   }
   2502   default: {
   2503     // We have a template type parameter but the template argument
   2504     // is not a type.
   2505     SourceRange SR = AL.getSourceRange();
   2506     Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;
   2507     Diag(Param->getLocation(), diag::note_template_param_here);
   2508 
   2509     return true;
   2510   }
   2511   }
   2512 
   2513   if (CheckTemplateArgument(Param, AL.getTypeSourceInfo()))
   2514     return true;
   2515 
   2516   // Add the converted template type argument.
   2517   QualType ArgType = Context.getCanonicalType(Arg.getAsType());
   2518 
   2519   // Objective-C ARC:
   2520   //   If an explicitly-specified template argument type is a lifetime type
   2521   //   with no lifetime qualifier, the __strong lifetime qualifier is inferred.
   2522   if (getLangOpts().ObjCAutoRefCount &&
   2523       ArgType->isObjCLifetimeType() &&
   2524       !ArgType.getObjCLifetime()) {
   2525     Qualifiers Qs;
   2526     Qs.setObjCLifetime(Qualifiers::OCL_Strong);
   2527     ArgType = Context.getQualifiedType(ArgType, Qs);
   2528   }
   2529 
   2530   Converted.push_back(TemplateArgument(ArgType));
   2531   return false;
   2532 }
   2533 
   2534 /// \brief Substitute template arguments into the default template argument for
   2535 /// the given template type parameter.
   2536 ///
   2537 /// \param SemaRef the semantic analysis object for which we are performing
   2538 /// the substitution.
   2539 ///
   2540 /// \param Template the template that we are synthesizing template arguments
   2541 /// for.
   2542 ///
   2543 /// \param TemplateLoc the location of the template name that started the
   2544 /// template-id we are checking.
   2545 ///
   2546 /// \param RAngleLoc the location of the right angle bracket ('>') that
   2547 /// terminates the template-id.
   2548 ///
   2549 /// \param Param the template template parameter whose default we are
   2550 /// substituting into.
   2551 ///
   2552 /// \param Converted the list of template arguments provided for template
   2553 /// parameters that precede \p Param in the template parameter list.
   2554 /// \returns the substituted template argument, or NULL if an error occurred.
   2555 static TypeSourceInfo *
   2556 SubstDefaultTemplateArgument(Sema &SemaRef,
   2557                              TemplateDecl *Template,
   2558                              SourceLocation TemplateLoc,
   2559                              SourceLocation RAngleLoc,
   2560                              TemplateTypeParmDecl *Param,
   2561                          SmallVectorImpl<TemplateArgument> &Converted) {
   2562   TypeSourceInfo *ArgType = Param->getDefaultArgumentInfo();
   2563 
   2564   // If the argument type is dependent, instantiate it now based
   2565   // on the previously-computed template arguments.
   2566   if (ArgType->getType()->isDependentType()) {
   2567     TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
   2568                                       Converted.data(), Converted.size());
   2569 
   2570     MultiLevelTemplateArgumentList AllTemplateArgs
   2571       = SemaRef.getTemplateInstantiationArgs(Template, &TemplateArgs);
   2572 
   2573     Sema::InstantiatingTemplate Inst(SemaRef, TemplateLoc,
   2574                                      Template, Converted,
   2575                                      SourceRange(TemplateLoc, RAngleLoc));
   2576     if (Inst)
   2577       return 0;
   2578 
   2579     Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
   2580     ArgType = SemaRef.SubstType(ArgType, AllTemplateArgs,
   2581                                 Param->getDefaultArgumentLoc(),
   2582                                 Param->getDeclName());
   2583   }
   2584 
   2585   return ArgType;
   2586 }
   2587 
   2588 /// \brief Substitute template arguments into the default template argument for
   2589 /// the given non-type template parameter.
   2590 ///
   2591 /// \param SemaRef the semantic analysis object for which we are performing
   2592 /// the substitution.
   2593 ///
   2594 /// \param Template the template that we are synthesizing template arguments
   2595 /// for.
   2596 ///
   2597 /// \param TemplateLoc the location of the template name that started the
   2598 /// template-id we are checking.
   2599 ///
   2600 /// \param RAngleLoc the location of the right angle bracket ('>') that
   2601 /// terminates the template-id.
   2602 ///
   2603 /// \param Param the non-type template parameter whose default we are
   2604 /// substituting into.
   2605 ///
   2606 /// \param Converted the list of template arguments provided for template
   2607 /// parameters that precede \p Param in the template parameter list.
   2608 ///
   2609 /// \returns the substituted template argument, or NULL if an error occurred.
   2610 static ExprResult
   2611 SubstDefaultTemplateArgument(Sema &SemaRef,
   2612                              TemplateDecl *Template,
   2613                              SourceLocation TemplateLoc,
   2614                              SourceLocation RAngleLoc,
   2615                              NonTypeTemplateParmDecl *Param,
   2616                         SmallVectorImpl<TemplateArgument> &Converted) {
   2617   TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
   2618                                     Converted.data(), Converted.size());
   2619 
   2620   MultiLevelTemplateArgumentList AllTemplateArgs
   2621     = SemaRef.getTemplateInstantiationArgs(Template, &TemplateArgs);
   2622 
   2623   Sema::InstantiatingTemplate Inst(SemaRef, TemplateLoc,
   2624                                    Template, Converted,
   2625                                    SourceRange(TemplateLoc, RAngleLoc));
   2626   if (Inst)
   2627     return ExprError();
   2628 
   2629   Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
   2630   EnterExpressionEvaluationContext Unevaluated(SemaRef, Sema::Unevaluated);
   2631   return SemaRef.SubstExpr(Param->getDefaultArgument(), AllTemplateArgs);
   2632 }
   2633 
   2634 /// \brief Substitute template arguments into the default template argument for
   2635 /// the given template template parameter.
   2636 ///
   2637 /// \param SemaRef the semantic analysis object for which we are performing
   2638 /// the substitution.
   2639 ///
   2640 /// \param Template the template that we are synthesizing template arguments
   2641 /// for.
   2642 ///
   2643 /// \param TemplateLoc the location of the template name that started the
   2644 /// template-id we are checking.
   2645 ///
   2646 /// \param RAngleLoc the location of the right angle bracket ('>') that
   2647 /// terminates the template-id.
   2648 ///
   2649 /// \param Param the template template parameter whose default we are
   2650 /// substituting into.
   2651 ///
   2652 /// \param Converted the list of template arguments provided for template
   2653 /// parameters that precede \p Param in the template parameter list.
   2654 ///
   2655 /// \param QualifierLoc Will be set to the nested-name-specifier (with
   2656 /// source-location information) that precedes the template name.
   2657 ///
   2658 /// \returns the substituted template argument, or NULL if an error occurred.
   2659 static TemplateName
   2660 SubstDefaultTemplateArgument(Sema &SemaRef,
   2661                              TemplateDecl *Template,
   2662                              SourceLocation TemplateLoc,
   2663                              SourceLocation RAngleLoc,
   2664                              TemplateTemplateParmDecl *Param,
   2665                        SmallVectorImpl<TemplateArgument> &Converted,
   2666                              NestedNameSpecifierLoc &QualifierLoc) {
   2667   TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
   2668                                     Converted.data(), Converted.size());
   2669 
   2670   MultiLevelTemplateArgumentList AllTemplateArgs
   2671     = SemaRef.getTemplateInstantiationArgs(Template, &TemplateArgs);
   2672 
   2673   Sema::InstantiatingTemplate Inst(SemaRef, TemplateLoc,
   2674                                    Template, Converted,
   2675                                    SourceRange(TemplateLoc, RAngleLoc));
   2676   if (Inst)
   2677     return TemplateName();
   2678 
   2679   Sema::ContextRAII SavedContext(SemaRef, Template->getDeclContext());
   2680   // Substitute into the nested-name-specifier first,
   2681   QualifierLoc = Param->getDefaultArgument().getTemplateQualifierLoc();
   2682   if (QualifierLoc) {
   2683     QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
   2684                                                        AllTemplateArgs);
   2685     if (!QualifierLoc)
   2686       return TemplateName();
   2687   }
   2688 
   2689   return SemaRef.SubstTemplateName(QualifierLoc,
   2690                       Param->getDefaultArgument().getArgument().getAsTemplate(),
   2691                               Param->getDefaultArgument().getTemplateNameLoc(),
   2692                                    AllTemplateArgs);
   2693 }
   2694 
   2695 /// \brief If the given template parameter has a default template
   2696 /// argument, substitute into that default template argument and
   2697 /// return the corresponding template argument.
   2698 TemplateArgumentLoc
   2699 Sema::SubstDefaultTemplateArgumentIfAvailable(TemplateDecl *Template,
   2700                                               SourceLocation TemplateLoc,
   2701                                               SourceLocation RAngleLoc,
   2702                                               Decl *Param,
   2703                       SmallVectorImpl<TemplateArgument> &Converted) {
   2704    if (TemplateTypeParmDecl *TypeParm = dyn_cast<TemplateTypeParmDecl>(Param)) {
   2705     if (!TypeParm->hasDefaultArgument())
   2706       return TemplateArgumentLoc();
   2707 
   2708     TypeSourceInfo *DI = SubstDefaultTemplateArgument(*this, Template,
   2709                                                       TemplateLoc,
   2710                                                       RAngleLoc,
   2711                                                       TypeParm,
   2712                                                       Converted);
   2713     if (DI)
   2714       return TemplateArgumentLoc(TemplateArgument(DI->getType()), DI);
   2715 
   2716     return TemplateArgumentLoc();
   2717   }
   2718 
   2719   if (NonTypeTemplateParmDecl *NonTypeParm
   2720         = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
   2721     if (!NonTypeParm->hasDefaultArgument())
   2722       return TemplateArgumentLoc();
   2723 
   2724     ExprResult Arg = SubstDefaultTemplateArgument(*this, Template,
   2725                                                   TemplateLoc,
   2726                                                   RAngleLoc,
   2727                                                   NonTypeParm,
   2728                                                   Converted);
   2729     if (Arg.isInvalid())
   2730       return TemplateArgumentLoc();
   2731 
   2732     Expr *ArgE = Arg.takeAs<Expr>();
   2733     return TemplateArgumentLoc(TemplateArgument(ArgE), ArgE);
   2734   }
   2735 
   2736   TemplateTemplateParmDecl *TempTempParm
   2737     = cast<TemplateTemplateParmDecl>(Param);
   2738   if (!TempTempParm->hasDefaultArgument())
   2739     return TemplateArgumentLoc();
   2740 
   2741 
   2742   NestedNameSpecifierLoc QualifierLoc;
   2743   TemplateName TName = SubstDefaultTemplateArgument(*this, Template,
   2744                                                     TemplateLoc,
   2745                                                     RAngleLoc,
   2746                                                     TempTempParm,
   2747                                                     Converted,
   2748                                                     QualifierLoc);
   2749   if (TName.isNull())
   2750     return TemplateArgumentLoc();
   2751 
   2752   return TemplateArgumentLoc(TemplateArgument(TName),
   2753                 TempTempParm->getDefaultArgument().getTemplateQualifierLoc(),
   2754                 TempTempParm->getDefaultArgument().getTemplateNameLoc());
   2755 }
   2756 
   2757 /// \brief Check that the given template argument corresponds to the given
   2758 /// template parameter.
   2759 ///
   2760 /// \param Param The template parameter against which the argument will be
   2761 /// checked.
   2762 ///
   2763 /// \param Arg The template argument.
   2764 ///
   2765 /// \param Template The template in which the template argument resides.
   2766 ///
   2767 /// \param TemplateLoc The location of the template name for the template
   2768 /// whose argument list we're matching.
   2769 ///
   2770 /// \param RAngleLoc The location of the right angle bracket ('>') that closes
   2771 /// the template argument list.
   2772 ///
   2773 /// \param ArgumentPackIndex The index into the argument pack where this
   2774 /// argument will be placed. Only valid if the parameter is a parameter pack.
   2775 ///
   2776 /// \param Converted The checked, converted argument will be added to the
   2777 /// end of this small vector.
   2778 ///
   2779 /// \param CTAK Describes how we arrived at this particular template argument:
   2780 /// explicitly written, deduced, etc.
   2781 ///
   2782 /// \returns true on error, false otherwise.
   2783 bool Sema::CheckTemplateArgument(NamedDecl *Param,
   2784                                  const TemplateArgumentLoc &Arg,
   2785                                  NamedDecl *Template,
   2786                                  SourceLocation TemplateLoc,
   2787                                  SourceLocation RAngleLoc,
   2788                                  unsigned ArgumentPackIndex,
   2789                             SmallVectorImpl<TemplateArgument> &Converted,
   2790                                  CheckTemplateArgumentKind CTAK) {
   2791   // Check template type parameters.
   2792   if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
   2793     return CheckTemplateTypeArgument(TTP, Arg, Converted);
   2794 
   2795   // Check non-type template parameters.
   2796   if (NonTypeTemplateParmDecl *NTTP =dyn_cast<NonTypeTemplateParmDecl>(Param)) {
   2797     // Do substitution on the type of the non-type template parameter
   2798     // with the template arguments we've seen thus far.  But if the
   2799     // template has a dependent context then we cannot substitute yet.
   2800     QualType NTTPType = NTTP->getType();
   2801     if (NTTP->isParameterPack() && NTTP->isExpandedParameterPack())
   2802       NTTPType = NTTP->getExpansionType(ArgumentPackIndex);
   2803 
   2804     if (NTTPType->isDependentType() &&
   2805         !isa<TemplateTemplateParmDecl>(Template) &&
   2806         !Template->getDeclContext()->isDependentContext()) {
   2807       // Do substitution on the type of the non-type template parameter.
   2808       InstantiatingTemplate Inst(*this, TemplateLoc, Template,
   2809                                  NTTP, Converted,
   2810                                  SourceRange(TemplateLoc, RAngleLoc));
   2811       if (Inst)
   2812         return true;
   2813 
   2814       TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
   2815                                         Converted.data(), Converted.size());
   2816       NTTPType = SubstType(NTTPType,
   2817                            MultiLevelTemplateArgumentList(TemplateArgs),
   2818                            NTTP->getLocation(),
   2819                            NTTP->getDeclName());
   2820       // If that worked, check the non-type template parameter type
   2821       // for validity.
   2822       if (!NTTPType.isNull())
   2823         NTTPType = CheckNonTypeTemplateParameterType(NTTPType,
   2824                                                      NTTP->getLocation());
   2825       if (NTTPType.isNull())
   2826         return true;
   2827     }
   2828 
   2829     switch (Arg.getArgument().getKind()) {
   2830     case TemplateArgument::Null:
   2831       llvm_unreachable("Should never see a NULL template argument here");
   2832 
   2833     case TemplateArgument::Expression: {
   2834       TemplateArgument Result;
   2835       ExprResult Res =
   2836         CheckTemplateArgument(NTTP, NTTPType, Arg.getArgument().getAsExpr(),
   2837                               Result, CTAK);
   2838       if (Res.isInvalid())
   2839         return true;
   2840 
   2841       Converted.push_back(Result);
   2842       break;
   2843     }
   2844 
   2845     case TemplateArgument::Declaration:
   2846     case TemplateArgument::Integral:
   2847     case TemplateArgument::NullPtr:
   2848       // We've already checked this template argument, so just copy
   2849       // it to the list of converted arguments.
   2850       Converted.push_back(Arg.getArgument());
   2851       break;
   2852 
   2853     case TemplateArgument::Template:
   2854     case TemplateArgument::TemplateExpansion:
   2855       // We were given a template template argument. It may not be ill-formed;
   2856       // see below.
   2857       if (DependentTemplateName *DTN
   2858             = Arg.getArgument().getAsTemplateOrTemplatePattern()
   2859                                               .getAsDependentTemplateName()) {
   2860         // We have a template argument such as \c T::template X, which we
   2861         // parsed as a template template argument. However, since we now
   2862         // know that we need a non-type template argument, convert this
   2863         // template name into an expression.
   2864 
   2865         DeclarationNameInfo NameInfo(DTN->getIdentifier(),
   2866                                      Arg.getTemplateNameLoc());
   2867 
   2868         CXXScopeSpec SS;
   2869         SS.Adopt(Arg.getTemplateQualifierLoc());
   2870         // FIXME: the template-template arg was a DependentTemplateName,
   2871         // so it was provided with a template keyword. However, its source
   2872         // location is not stored in the template argument structure.
   2873         SourceLocation TemplateKWLoc;
   2874         ExprResult E = Owned(DependentScopeDeclRefExpr::Create(Context,
   2875                                                 SS.getWithLocInContext(Context),
   2876                                                                TemplateKWLoc,
   2877                                                                NameInfo, 0));
   2878 
   2879         // If we parsed the template argument as a pack expansion, create a
   2880         // pack expansion expression.
   2881         if (Arg.getArgument().getKind() == TemplateArgument::TemplateExpansion){
   2882           E = ActOnPackExpansion(E.take(), Arg.getTemplateEllipsisLoc());
   2883           if (E.isInvalid())
   2884             return true;
   2885         }
   2886 
   2887         TemplateArgument Result;
   2888         E = CheckTemplateArgument(NTTP, NTTPType, E.take(), Result);
   2889         if (E.isInvalid())
   2890           return true;
   2891 
   2892         Converted.push_back(Result);
   2893         break;
   2894       }
   2895 
   2896       // We have a template argument that actually does refer to a class
   2897       // template, alias template, or template template parameter, and
   2898       // therefore cannot be a non-type template argument.
   2899       Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr)
   2900         << Arg.getSourceRange();
   2901 
   2902       Diag(Param->getLocation(), diag::note_template_param_here);
   2903       return true;
   2904 
   2905     case TemplateArgument::Type: {
   2906       // We have a non-type template parameter but the template
   2907       // argument is a type.
   2908 
   2909       // C++ [temp.arg]p2:
   2910       //   In a template-argument, an ambiguity between a type-id and
   2911       //   an expression is resolved to a type-id, regardless of the
   2912       //   form of the corresponding template-parameter.
   2913       //
   2914       // We warn specifically about this case, since it can be rather
   2915       // confusing for users.
   2916       QualType T = Arg.getArgument().getAsType();
   2917       SourceRange SR = Arg.getSourceRange();
   2918       if (T->isFunctionType())
   2919         Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;
   2920       else
   2921         Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;
   2922       Diag(Param->getLocation(), diag::note_template_param_here);
   2923       return true;
   2924     }
   2925 
   2926     case TemplateArgument::Pack:
   2927       llvm_unreachable("Caller must expand template argument packs");
   2928     }
   2929 
   2930     return false;
   2931   }
   2932 
   2933 
   2934   // Check template template parameters.
   2935   TemplateTemplateParmDecl *TempParm = cast<TemplateTemplateParmDecl>(Param);
   2936 
   2937   // Substitute into the template parameter list of the template
   2938   // template parameter, since previously-supplied template arguments
   2939   // may appear within the template template parameter.
   2940   {
   2941     // Set up a template instantiation context.
   2942     LocalInstantiationScope Scope(*this);
   2943     InstantiatingTemplate Inst(*this, TemplateLoc, Template,
   2944                                TempParm, Converted,
   2945                                SourceRange(TemplateLoc, RAngleLoc));
   2946     if (Inst)
   2947       return true;
   2948 
   2949     TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
   2950                                       Converted.data(), Converted.size());
   2951     TempParm = cast_or_null<TemplateTemplateParmDecl>(
   2952                       SubstDecl(TempParm, CurContext,
   2953                                 MultiLevelTemplateArgumentList(TemplateArgs)));
   2954     if (!TempParm)
   2955       return true;
   2956   }
   2957 
   2958   switch (Arg.getArgument().getKind()) {
   2959   case TemplateArgument::Null:
   2960     llvm_unreachable("Should never see a NULL template argument here");
   2961 
   2962   case TemplateArgument::Template:
   2963   case TemplateArgument::TemplateExpansion:
   2964     if (CheckTemplateArgument(TempParm, Arg, ArgumentPackIndex))
   2965       return true;
   2966 
   2967     Converted.push_back(Arg.getArgument());
   2968     break;
   2969 
   2970   case TemplateArgument::Expression:
   2971   case TemplateArgument::Type:
   2972     // We have a template template parameter but the template
   2973     // argument does not refer to a template.
   2974     Diag(Arg.getLocation(), diag::err_template_arg_must_be_template)
   2975       << getLangOpts().CPlusPlus11;
   2976     return true;
   2977 
   2978   case TemplateArgument::Declaration:
   2979     llvm_unreachable("Declaration argument with template template parameter");
   2980   case TemplateArgument::Integral:
   2981     llvm_unreachable("Integral argument with template template parameter");
   2982   case TemplateArgument::NullPtr:
   2983     llvm_unreachable("Null pointer argument with template template parameter");
   2984 
   2985   case TemplateArgument::Pack:
   2986     llvm_unreachable("Caller must expand template argument packs");
   2987   }
   2988 
   2989   return false;
   2990 }
   2991 
   2992 /// \brief Diagnose an arity mismatch in the
   2993 static bool diagnoseArityMismatch(Sema &S, TemplateDecl *Template,
   2994                                   SourceLocation TemplateLoc,
   2995                                   TemplateArgumentListInfo &TemplateArgs) {
   2996   TemplateParameterList *Params = Template->getTemplateParameters();
   2997   unsigned NumParams = Params->size();
   2998   unsigned NumArgs = TemplateArgs.size();
   2999 
   3000   SourceRange Range;
   3001   if (NumArgs > NumParams)
   3002     Range = SourceRange(TemplateArgs[NumParams].getLocation(),
   3003                         TemplateArgs.getRAngleLoc());
   3004   S.Diag(TemplateLoc, diag::err_template_arg_list_different_arity)
   3005     << (NumArgs > NumParams)
   3006     << (isa<ClassTemplateDecl>(Template)? 0 :
   3007         isa<FunctionTemplateDecl>(Template)? 1 :
   3008         isa<TemplateTemplateParmDecl>(Template)? 2 : 3)
   3009     << Template << Range;
   3010   S.Diag(Template->getLocation(), diag::note_template_decl_here)
   3011     << Params->getSourceRange();
   3012   return true;
   3013 }
   3014 
   3015 /// \brief Check whether the template parameter is a pack expansion, and if so,
   3016 /// determine the number of parameters produced by that expansion. For instance:
   3017 ///
   3018 /// \code
   3019 /// template<typename ...Ts> struct A {
   3020 ///   template<Ts ...NTs, template<Ts> class ...TTs, typename ...Us> struct B;
   3021 /// };
   3022 /// \endcode
   3023 ///
   3024 /// In \c A<int,int>::B, \c NTs and \c TTs have expanded pack size 2, and \c Us
   3025 /// is not a pack expansion, so returns an empty Optional.
   3026 static Optional<unsigned> getExpandedPackSize(NamedDecl *Param) {
   3027   if (NonTypeTemplateParmDecl *NTTP
   3028         = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
   3029     if (NTTP->isExpandedParameterPack())
   3030       return NTTP->getNumExpansionTypes();
   3031   }
   3032 
   3033   if (TemplateTemplateParmDecl *TTP
   3034         = dyn_cast<TemplateTemplateParmDecl>(Param)) {
   3035     if (TTP->isExpandedParameterPack())
   3036       return TTP->getNumExpansionTemplateParameters();
   3037   }
   3038 
   3039   return None;
   3040 }
   3041 
   3042 /// \brief Check that the given template argument list is well-formed
   3043 /// for specializing the given template.
   3044 bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
   3045                                      SourceLocation TemplateLoc,
   3046                                      TemplateArgumentListInfo &TemplateArgs,
   3047                                      bool PartialTemplateArgs,
   3048                           SmallVectorImpl<TemplateArgument> &Converted,
   3049                                      bool *ExpansionIntoFixedList) {
   3050   if (ExpansionIntoFixedList)
   3051     *ExpansionIntoFixedList = false;
   3052 
   3053   TemplateParameterList *Params = Template->getTemplateParameters();
   3054 
   3055   SourceLocation RAngleLoc = TemplateArgs.getRAngleLoc();
   3056 
   3057   // C++ [temp.arg]p1:
   3058   //   [...] The type and form of each template-argument specified in
   3059   //   a template-id shall match the type and form specified for the
   3060   //   corresponding parameter declared by the template in its
   3061   //   template-parameter-list.
   3062   bool isTemplateTemplateParameter = isa<TemplateTemplateParmDecl>(Template);
   3063   SmallVector<TemplateArgument, 2> ArgumentPack;
   3064   unsigned ArgIdx = 0, NumArgs = TemplateArgs.size();
   3065   LocalInstantiationScope InstScope(*this, true);
   3066   for (TemplateParameterList::iterator Param = Params->begin(),
   3067                                        ParamEnd = Params->end();
   3068        Param != ParamEnd; /* increment in loop */) {
   3069     // If we have an expanded parameter pack, make sure we don't have too
   3070     // many arguments.
   3071     if (Optional<unsigned> Expansions = getExpandedPackSize(*Param)) {
   3072       if (*Expansions == ArgumentPack.size()) {
   3073         // We're done with this parameter pack. Pack up its arguments and add
   3074         // them to the list.
   3075         Converted.push_back(
   3076           TemplateArgument::CreatePackCopy(Context,
   3077                                            ArgumentPack.data(),
   3078                                            ArgumentPack.size()));
   3079         ArgumentPack.clear();
   3080 
   3081         // This argument is assigned to the next parameter.
   3082         ++Param;
   3083         continue;
   3084       } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {
   3085         // Not enough arguments for this parameter pack.
   3086         Diag(TemplateLoc, diag::err_template_arg_list_different_arity)
   3087           << false
   3088           << (isa<ClassTemplateDecl>(Template)? 0 :
   3089               isa<FunctionTemplateDecl>(Template)? 1 :
   3090               isa<TemplateTemplateParmDecl>(Template)? 2 : 3)
   3091           << Template;
   3092         Diag(Template->getLocation(), diag::note_template_decl_here)
   3093           << Params->getSourceRange();
   3094         return true;
   3095       }
   3096     }
   3097 
   3098     if (ArgIdx < NumArgs) {
   3099       // Check the template argument we were given.
   3100       if (CheckTemplateArgument(*Param, TemplateArgs[ArgIdx], Template,
   3101                                 TemplateLoc, RAngleLoc,
   3102                                 ArgumentPack.size(), Converted))
   3103         return true;
   3104 
   3105       // We're now done with this argument.
   3106       ++ArgIdx;
   3107 
   3108       if ((*Param)->isTemplateParameterPack()) {
   3109         // The template parameter was a template parameter pack, so take the
   3110         // deduced argument and place it on the argument pack. Note that we
   3111         // stay on the same template parameter so that we can deduce more
   3112         // arguments.
   3113         ArgumentPack.push_back(Converted.back());
   3114         Converted.pop_back();
   3115       } else {
   3116         // Move to the next template parameter.
   3117         ++Param;
   3118       }
   3119 
   3120       // If we just saw a pack expansion, then directly convert the remaining
   3121       // arguments, because we don't know what parameters they'll match up
   3122       // with.
   3123       if (TemplateArgs[ArgIdx-1].getArgument().isPackExpansion()) {
   3124         bool InFinalParameterPack = Param != ParamEnd &&
   3125                                     Param + 1 == ParamEnd &&
   3126                                     (*Param)->isTemplateParameterPack() &&
   3127                                     !getExpandedPackSize(*Param);
   3128 
   3129         if (!InFinalParameterPack && !ArgumentPack.empty()) {
   3130           // If we were part way through filling in an expanded parameter pack,
   3131           // fall back to just producing individual arguments.
   3132           Converted.insert(Converted.end(),
   3133                            ArgumentPack.begin(), ArgumentPack.end());
   3134           ArgumentPack.clear();
   3135         }
   3136 
   3137         while (ArgIdx < NumArgs) {
   3138           if (InFinalParameterPack)
   3139             ArgumentPack.push_back(TemplateArgs[ArgIdx].getArgument());
   3140           else
   3141             Converted.push_back(TemplateArgs[ArgIdx].getArgument());
   3142           ++ArgIdx;
   3143         }
   3144 
   3145         // Push the argument pack onto the list of converted arguments.
   3146         if (InFinalParameterPack) {
   3147           Converted.push_back(
   3148             TemplateArgument::CreatePackCopy(Context,
   3149                                              ArgumentPack.data(),
   3150                                              ArgumentPack.size()));
   3151           ArgumentPack.clear();
   3152         } else if (ExpansionIntoFixedList) {
   3153           // We have expanded a pack into a fixed list.
   3154           *ExpansionIntoFixedList = true;
   3155         }
   3156 
   3157         return false;
   3158       }
   3159 
   3160       continue;
   3161     }
   3162 
   3163     // If we're checking a partial template argument list, we're done.
   3164     if (PartialTemplateArgs) {
   3165       if ((*Param)->isTemplateParameterPack() && !ArgumentPack.empty())
   3166         Converted.push_back(TemplateArgument::CreatePackCopy(Context,
   3167                                                          ArgumentPack.data(),
   3168                                                          ArgumentPack.size()));
   3169 
   3170       return false;
   3171     }
   3172 
   3173     // If we have a template parameter pack with no more corresponding
   3174     // arguments, just break out now and we'll fill in the argument pack below.
   3175     if ((*Param)->isTemplateParameterPack()) {
   3176       assert(!getExpandedPackSize(*Param) &&
   3177              "Should have dealt with this already");
   3178 
   3179       // A non-expanded parameter pack before the end of the parameter list
   3180       // only occurs for an ill-formed template parameter list, unless we've
   3181       // got a partial argument list for a function template, so just bail out.
   3182       if (Param + 1 != ParamEnd)
   3183         return true;
   3184 
   3185       Converted.push_back(TemplateArgument::CreatePackCopy(Context,
   3186                                                        ArgumentPack.data(),
   3187                                                        ArgumentPack.size()));
   3188       ArgumentPack.clear();
   3189 
   3190       ++Param;
   3191       continue;
   3192     }
   3193 
   3194     // Check whether we have a default argument.
   3195     TemplateArgumentLoc Arg;
   3196 
   3197     // Retrieve the default template argument from the template
   3198     // parameter. For each kind of template parameter, we substitute the
   3199     // template arguments provided thus far and any "outer" template arguments
   3200     // (when the template parameter was part of a nested template) into
   3201     // the default argument.
   3202     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) {
   3203       if (!TTP->hasDefaultArgument())
   3204         return diagnoseArityMismatch(*this, Template, TemplateLoc,
   3205                                      TemplateArgs);
   3206 
   3207       TypeSourceInfo *ArgType = SubstDefaultTemplateArgument(*this,
   3208                                                              Template,
   3209                                                              TemplateLoc,
   3210                                                              RAngleLoc,
   3211                                                              TTP,
   3212                                                              Converted);
   3213       if (!ArgType)
   3214         return true;
   3215 
   3216       Arg = TemplateArgumentLoc(TemplateArgument(ArgType->getType()),
   3217                                 ArgType);
   3218     } else if (NonTypeTemplateParmDecl *NTTP
   3219                  = dyn_cast<NonTypeTemplateParmDecl>(*Param)) {
   3220       if (!NTTP->hasDefaultArgument())
   3221         return diagnoseArityMismatch(*this, Template, TemplateLoc,
   3222                                      TemplateArgs);
   3223 
   3224       ExprResult E = SubstDefaultTemplateArgument(*this, Template,
   3225                                                               TemplateLoc,
   3226                                                               RAngleLoc,
   3227                                                               NTTP,
   3228                                                               Converted);
   3229       if (E.isInvalid())
   3230         return true;
   3231 
   3232       Expr *Ex = E.takeAs<Expr>();
   3233       Arg = TemplateArgumentLoc(TemplateArgument(Ex), Ex);
   3234     } else {
   3235       TemplateTemplateParmDecl *TempParm
   3236         = cast<TemplateTemplateParmDecl>(*Param);
   3237 
   3238       if (!TempParm->hasDefaultArgument())
   3239         return diagnoseArityMismatch(*this, Template, TemplateLoc,
   3240                                      TemplateArgs);
   3241 
   3242       NestedNameSpecifierLoc QualifierLoc;
   3243       TemplateName Name = SubstDefaultTemplateArgument(*this, Template,
   3244                                                        TemplateLoc,
   3245                                                        RAngleLoc,
   3246                                                        TempParm,
   3247                                                        Converted,
   3248                                                        QualifierLoc);
   3249       if (Name.isNull())
   3250         return true;
   3251 
   3252       Arg = TemplateArgumentLoc(TemplateArgument(Name), QualifierLoc,
   3253                            TempParm->getDefaultArgument().getTemplateNameLoc());
   3254     }
   3255 
   3256     // Introduce an instantiation record that describes where we are using
   3257     // the default template argument.
   3258     InstantiatingTemplate Instantiating(*this, RAngleLoc, Template,
   3259                                         *Param, Converted,
   3260                                         SourceRange(TemplateLoc, RAngleLoc));
   3261     if (Instantiating)
   3262       return true;
   3263 
   3264     // Check the default template argument.
   3265     if (CheckTemplateArgument(*Param, Arg, Template, TemplateLoc,
   3266                               RAngleLoc, 0, Converted))
   3267       return true;
   3268 
   3269     // Core issue 150 (assumed resolution): if this is a template template
   3270     // parameter, keep track of the default template arguments from the
   3271     // template definition.
   3272     if (isTemplateTemplateParameter)
   3273       TemplateArgs.addArgument(Arg);
   3274 
   3275     // Move to the next template parameter and argument.
   3276     ++Param;
   3277     ++ArgIdx;
   3278   }
   3279 
   3280   // If we have any leftover arguments, then there were too many arguments.
   3281   // Complain and fail.
   3282   if (ArgIdx < NumArgs)
   3283     return diagnoseArityMismatch(*this, Template, TemplateLoc, TemplateArgs);
   3284 
   3285   return false;
   3286 }
   3287 
   3288 namespace {
   3289   class UnnamedLocalNoLinkageFinder
   3290     : public TypeVisitor<UnnamedLocalNoLinkageFinder, bool>
   3291   {
   3292     Sema &S;
   3293     SourceRange SR;
   3294 
   3295     typedef TypeVisitor<UnnamedLocalNoLinkageFinder, bool> inherited;
   3296 
   3297   public:
   3298     UnnamedLocalNoLinkageFinder(Sema &S, SourceRange SR) : S(S), SR(SR) { }
   3299 
   3300     bool Visit(QualType T) {
   3301       return inherited::Visit(T.getTypePtr());
   3302     }
   3303 
   3304 #define TYPE(Class, Parent) \
   3305     bool Visit##Class##Type(const Class##Type *);
   3306 #define ABSTRACT_TYPE(Class, Parent) \
   3307     bool Visit##Class##Type(const Class##Type *) { return false; }
   3308 #define NON_CANONICAL_TYPE(Class, Parent) \
   3309     bool Visit##Class##Type(const Class##Type *) { return false; }
   3310 #include "clang/AST/TypeNodes.def"
   3311 
   3312     bool VisitTagDecl(const TagDecl *Tag);
   3313     bool VisitNestedNameSpecifier(NestedNameSpecifier *NNS);
   3314   };
   3315 }
   3316 
   3317 bool UnnamedLocalNoLinkageFinder::VisitBuiltinType(const BuiltinType*) {
   3318   return false;
   3319 }
   3320 
   3321 bool UnnamedLocalNoLinkageFinder::VisitComplexType(const ComplexType* T) {
   3322   return Visit(T->getElementType());
   3323 }
   3324 
   3325 bool UnnamedLocalNoLinkageFinder::VisitPointerType(const PointerType* T) {
   3326   return Visit(T->getPointeeType());
   3327 }
   3328 
   3329 bool UnnamedLocalNoLinkageFinder::VisitBlockPointerType(
   3330                                                     const BlockPointerType* T) {
   3331   return Visit(T->getPointeeType());
   3332 }
   3333 
   3334 bool UnnamedLocalNoLinkageFinder::VisitLValueReferenceType(
   3335                                                 const LValueReferenceType* T) {
   3336   return Visit(T->getPointeeType());
   3337 }
   3338 
   3339 bool UnnamedLocalNoLinkageFinder::VisitRValueReferenceType(
   3340                                                 const RValueReferenceType* T) {
   3341   return Visit(T->getPointeeType());
   3342 }
   3343 
   3344 bool UnnamedLocalNoLinkageFinder::VisitMemberPointerType(
   3345                                                   const MemberPointerType* T) {
   3346   return Visit(T->getPointeeType()) || Visit(QualType(T->getClass(), 0));
   3347 }
   3348 
   3349 bool UnnamedLocalNoLinkageFinder::VisitConstantArrayType(
   3350                                                   const ConstantArrayType* T) {
   3351   return Visit(T->getElementType());
   3352 }
   3353 
   3354 bool UnnamedLocalNoLinkageFinder::VisitIncompleteArrayType(
   3355                                                  const IncompleteArrayType* T) {
   3356   return Visit(T->getElementType());
   3357 }
   3358 
   3359 bool UnnamedLocalNoLinkageFinder::VisitVariableArrayType(
   3360                                                    const VariableArrayType* T) {
   3361   return Visit(T->getElementType());
   3362 }
   3363 
   3364 bool UnnamedLocalNoLinkageFinder::VisitDependentSizedArrayType(
   3365                                             const DependentSizedArrayType* T) {
   3366   return Visit(T->getElementType());
   3367 }
   3368 
   3369 bool UnnamedLocalNoLinkageFinder::VisitDependentSizedExtVectorType(
   3370                                          const DependentSizedExtVectorType* T) {
   3371   return Visit(T->getElementType());
   3372 }
   3373 
   3374 bool UnnamedLocalNoLinkageFinder::VisitVectorType(const VectorType* T) {
   3375   return Visit(T->getElementType());
   3376 }
   3377 
   3378 bool UnnamedLocalNoLinkageFinder::VisitExtVectorType(const ExtVectorType* T) {
   3379   return Visit(T->getElementType());
   3380 }
   3381 
   3382 bool UnnamedLocalNoLinkageFinder::VisitFunctionProtoType(
   3383                                                   const FunctionProtoType* T) {
   3384   for (FunctionProtoType::arg_type_iterator A = T->arg_type_begin(),
   3385                                          AEnd = T->arg_type_end();
   3386        A != AEnd; ++A) {
   3387     if (Visit(*A))
   3388       return true;
   3389   }
   3390 
   3391   return Visit(T->getResultType());
   3392 }
   3393 
   3394 bool UnnamedLocalNoLinkageFinder::VisitFunctionNoProtoType(
   3395                                                const FunctionNoProtoType* T) {
   3396   return Visit(T->getResultType());
   3397 }
   3398 
   3399 bool UnnamedLocalNoLinkageFinder::VisitUnresolvedUsingType(
   3400                                                   const UnresolvedUsingType*) {
   3401   return false;
   3402 }
   3403 
   3404 bool UnnamedLocalNoLinkageFinder::VisitTypeOfExprType(const TypeOfExprType*) {
   3405   return false;
   3406 }
   3407 
   3408 bool UnnamedLocalNoLinkageFinder::VisitTypeOfType(const TypeOfType* T) {
   3409   return Visit(T->getUnderlyingType());
   3410 }
   3411 
   3412 bool UnnamedLocalNoLinkageFinder::VisitDecltypeType(const DecltypeType*) {
   3413   return false;
   3414 }
   3415 
   3416 bool UnnamedLocalNoLinkageFinder::VisitUnaryTransformType(
   3417                                                     const UnaryTransformType*) {
   3418   return false;
   3419 }
   3420 
   3421 bool UnnamedLocalNoLinkageFinder::VisitAutoType(const AutoType *T) {
   3422   return Visit(T->getDeducedType());
   3423 }
   3424 
   3425 bool UnnamedLocalNoLinkageFinder::VisitRecordType(const RecordType* T) {
   3426   return VisitTagDecl(T->getDecl());
   3427 }
   3428 
   3429 bool UnnamedLocalNoLinkageFinder::VisitEnumType(const EnumType* T) {
   3430   return VisitTagDecl(T->getDecl());
   3431 }
   3432 
   3433 bool UnnamedLocalNoLinkageFinder::VisitTemplateTypeParmType(
   3434                                                  const TemplateTypeParmType*) {
   3435   return false;
   3436 }
   3437 
   3438 bool UnnamedLocalNoLinkageFinder::VisitSubstTemplateTypeParmPackType(
   3439                                         const SubstTemplateTypeParmPackType *) {
   3440   return false;
   3441 }
   3442 
   3443 bool UnnamedLocalNoLinkageFinder::VisitTemplateSpecializationType(
   3444                                             const TemplateSpecializationType*) {
   3445   return false;
   3446 }
   3447 
   3448 bool UnnamedLocalNoLinkageFinder::VisitInjectedClassNameType(
   3449                                               const InjectedClassNameType* T) {
   3450   return VisitTagDecl(T->getDecl());
   3451 }
   3452 
   3453 bool UnnamedLocalNoLinkageFinder::VisitDependentNameType(
   3454                                                    const DependentNameType* T) {
   3455   return VisitNestedNameSpecifier(T->getQualifier());
   3456 }
   3457 
   3458 bool UnnamedLocalNoLinkageFinder::VisitDependentTemplateSpecializationType(
   3459                                  const DependentTemplateSpecializationType* T) {
   3460   return VisitNestedNameSpecifier(T->getQualifier());
   3461 }
   3462 
   3463 bool UnnamedLocalNoLinkageFinder::VisitPackExpansionType(
   3464                                                    const PackExpansionType* T) {
   3465   return Visit(T->getPattern());
   3466 }
   3467 
   3468 bool UnnamedLocalNoLinkageFinder::VisitObjCObjectType(const ObjCObjectType *) {
   3469   return false;
   3470 }
   3471 
   3472 bool UnnamedLocalNoLinkageFinder::VisitObjCInterfaceType(
   3473                                                    const ObjCInterfaceType *) {
   3474   return false;
   3475 }
   3476 
   3477 bool UnnamedLocalNoLinkageFinder::VisitObjCObjectPointerType(
   3478                                                 const ObjCObjectPointerType *) {
   3479   return false;
   3480 }
   3481 
   3482 bool UnnamedLocalNoLinkageFinder::VisitAtomicType(const AtomicType* T) {
   3483   return Visit(T->getValueType());
   3484 }
   3485 
   3486 bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {
   3487   if (Tag->getDeclContext()->isFunctionOrMethod()) {
   3488     S.Diag(SR.getBegin(),
   3489            S.getLangOpts().CPlusPlus11 ?
   3490              diag::warn_cxx98_compat_template_arg_local_type :
   3491              diag::ext_template_arg_local_type)
   3492       << S.Context.getTypeDeclType(Tag) << SR;
   3493     return true;
   3494   }
   3495 
   3496   if (!Tag->hasNameForLinkage()) {
   3497     S.Diag(SR.getBegin(),
   3498            S.getLangOpts().CPlusPlus11 ?
   3499              diag::warn_cxx98_compat_template_arg_unnamed_type :
   3500              diag::ext_template_arg_unnamed_type) << SR;
   3501     S.Diag(Tag->getLocation(), diag::note_template_unnamed_type_here);
   3502     return true;
   3503   }
   3504 
   3505   return false;
   3506 }
   3507 
   3508 bool UnnamedLocalNoLinkageFinder::VisitNestedNameSpecifier(
   3509                                                     NestedNameSpecifier *NNS) {
   3510   if (NNS->getPrefix() && VisitNestedNameSpecifier(NNS->getPrefix()))
   3511     return true;
   3512 
   3513   switch (NNS->getKind()) {
   3514   case NestedNameSpecifier::Identifier:
   3515   case NestedNameSpecifier::Namespace:
   3516   case NestedNameSpecifier::NamespaceAlias:
   3517   case NestedNameSpecifier::Global:
   3518     return false;
   3519 
   3520   case NestedNameSpecifier::TypeSpec:
   3521   case NestedNameSpecifier::TypeSpecWithTemplate:
   3522     return Visit(QualType(NNS->getAsType(), 0));
   3523   }
   3524   llvm_unreachable("Invalid NestedNameSpecifier::Kind!");
   3525 }
   3526 
   3527 
   3528 /// \brief Check a template argument against its corresponding
   3529 /// template type parameter.
   3530 ///
   3531 /// This routine implements the semantics of C++ [temp.arg.type]. It
   3532 /// returns true if an error occurred, and false otherwise.
   3533 bool Sema::CheckTemplateArgument(TemplateTypeParmDecl *Param,
   3534                                  TypeSourceInfo *ArgInfo) {
   3535   assert(ArgInfo && "invalid TypeSourceInfo");
   3536   QualType Arg = ArgInfo->getType();
   3537   SourceRange SR = ArgInfo->getTypeLoc().getSourceRange();
   3538 
   3539   if (Arg->isVariablyModifiedType()) {
   3540     return Diag(SR.getBegin(), diag::err_variably_modified_template_arg) << Arg;
   3541   } else if (Context.hasSameUnqualifiedType(Arg, Context.OverloadTy)) {
   3542     return Diag(SR.getBegin(), diag::err_template_arg_overload_type) << SR;
   3543   }
   3544 
   3545   // C++03 [temp.arg.type]p2:
   3546   //   A local type, a type with no linkage, an unnamed type or a type
   3547   //   compounded from any of these types shall not be used as a
   3548   //   template-argument for a template type-parameter.
   3549   //
   3550   // C++11 allows these, and even in C++03 we allow them as an extension with
   3551   // a warning.
   3552   if (LangOpts.CPlusPlus11 ?
   3553      Diags.getDiagnosticLevel(diag::warn_cxx98_compat_template_arg_unnamed_type,
   3554                               SR.getBegin()) != DiagnosticsEngine::Ignored ||
   3555       Diags.getDiagnosticLevel(diag::warn_cxx98_compat_template_arg_local_type,
   3556                                SR.getBegin()) != DiagnosticsEngine::Ignored :
   3557       Arg->hasUnnamedOrLocalType()) {
   3558     UnnamedLocalNoLinkageFinder Finder(*this, SR);
   3559     (void)Finder.Visit(Context.getCanonicalType(Arg));
   3560   }
   3561 
   3562   return false;
   3563 }
   3564 
   3565 enum NullPointerValueKind {
   3566   NPV_NotNullPointer,
   3567   NPV_NullPointer,
   3568   NPV_Error
   3569 };
   3570 
   3571 /// \brief Determine whether the given template argument is a null pointer
   3572 /// value of the appropriate type.
   3573 static NullPointerValueKind
   3574 isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param,
   3575                                    QualType ParamType, Expr *Arg) {
   3576   if (Arg->isValueDependent() || Arg->isTypeDependent())
   3577     return NPV_NotNullPointer;
   3578 
   3579   if (!S.getLangOpts().CPlusPlus11)
   3580     return NPV_NotNullPointer;
   3581 
   3582   // Determine whether we have a constant expression.
   3583   ExprResult ArgRV = S.DefaultFunctionArrayConversion(Arg);
   3584   if (ArgRV.isInvalid())
   3585     return NPV_Error;
   3586   Arg = ArgRV.take();
   3587 
   3588   Expr::EvalResult EvalResult;
   3589   SmallVector<PartialDiagnosticAt, 8> Notes;
   3590   EvalResult.Diag = &Notes;
   3591   if (!Arg->EvaluateAsRValue(EvalResult, S.Context) ||
   3592       EvalResult.HasSideEffects) {
   3593     SourceLocation DiagLoc = Arg->getExprLoc();
   3594 
   3595     // If our only note is the usual "invalid subexpression" note, just point
   3596     // the caret at its location rather than producing an essentially
   3597     // redundant note.
   3598     if (Notes.size() == 1 && Notes[0].second.getDiagID() ==
   3599         diag::note_invalid_subexpr_in_const_expr) {
   3600       DiagLoc = Notes[0].first;
   3601       Notes.clear();
   3602     }
   3603 
   3604     S.Diag(DiagLoc, diag::err_template_arg_not_address_constant)
   3605       << Arg->getType() << Arg->getSourceRange();
   3606     for (unsigned I = 0, N = Notes.size(); I != N; ++I)
   3607       S.Diag(Notes[I].first, Notes[I].second);
   3608 
   3609     S.Diag(Param->getLocation(), diag::note_template_param_here);
   3610     return NPV_Error;
   3611   }
   3612 
   3613   // C++11 [temp.arg.nontype]p1:
   3614   //   - an address constant expression of type std::nullptr_t
   3615   if (Arg->getType()->isNullPtrType())
   3616     return NPV_NullPointer;
   3617 
   3618   //   - a constant expression that evaluates to a null pointer value (4.10); or
   3619   //   - a constant expression that evaluates to a null member pointer value
   3620   //     (4.11); or
   3621   if ((EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) ||
   3622       (EvalResult.Val.isMemberPointer() &&
   3623        !EvalResult.Val.getMemberPointerDecl())) {
   3624     // If our expression has an appropriate type, we've succeeded.
   3625     bool ObjCLifetimeConversion;
   3626     if (S.Context.hasSameUnqualifiedType(Arg->getType(), ParamType) ||
   3627         S.IsQualificationConversion(Arg->getType(), ParamType, false,
   3628                                      ObjCLifetimeConversion))
   3629       return NPV_NullPointer;
   3630 
   3631     // The types didn't match, but we know we got a null pointer; complain,
   3632     // then recover as if the types were correct.
   3633     S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant)
   3634       << Arg->getType() << ParamType << Arg->getSourceRange();
   3635     S.Diag(Param->getLocation(), diag::note_template_param_here);
   3636     return NPV_NullPointer;
   3637   }
   3638 
   3639   // If we don't have a null pointer value, but we do have a NULL pointer
   3640   // constant, suggest a cast to the appropriate type.
   3641   if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {
   3642     std::string Code = "static_cast<" + ParamType.getAsString() + ">(";
   3643     S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant)
   3644       << ParamType
   3645       << FixItHint::CreateInsertion(Arg->getLocStart(), Code)
   3646       << FixItHint::CreateInsertion(S.PP.getLocForEndOfToken(Arg->getLocEnd()),
   3647                                     ")");
   3648     S.Diag(Param->getLocation(), diag::note_template_param_here);
   3649     return NPV_NullPointer;
   3650   }
   3651 
   3652   // FIXME: If we ever want to support general, address-constant expressions
   3653   // as non-type template arguments, we should return the ExprResult here to
   3654   // be interpreted by the caller.
   3655   return NPV_NotNullPointer;
   3656 }
   3657 
   3658 /// \brief Checks whether the given template argument is the address
   3659 /// of an object or function according to C++ [temp.arg.nontype]p1.
   3660 static bool
   3661 CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S,
   3662                                                NonTypeTemplateParmDecl *Param,
   3663                                                QualType ParamType,
   3664                                                Expr *ArgIn,
   3665                                                TemplateArgument &Converted) {
   3666   bool Invalid = false;
   3667   Expr *Arg = ArgIn;
   3668   QualType ArgType = Arg->getType();
   3669 
   3670   // If our parameter has pointer type, check for a null template value.
   3671   if (ParamType->isPointerType() || ParamType->isNullPtrType()) {
   3672     switch (isNullPointerValueTemplateArgument(S, Param, ParamType, Arg)) {
   3673     case NPV_NullPointer:
   3674       S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);
   3675       Converted = TemplateArgument(ParamType, /*isNullPtr*/true);
   3676       return false;
   3677 
   3678     case NPV_Error:
   3679       return true;
   3680 
   3681     case NPV_NotNullPointer:
   3682       break;
   3683     }
   3684   }
   3685 
   3686   // See through any implicit casts we added to fix the type.
   3687   Arg = Arg->IgnoreImpCasts();
   3688 
   3689   // C++ [temp.arg.nontype]p1:
   3690   //
   3691   //   A template-argument for a non-type, non-template
   3692   //   template-parameter shall be one of: [...]
   3693   //
   3694   //     -- the address of an object or function with external
   3695   //        linkage, including function templates and function
   3696   //        template-ids but excluding non-static class members,
   3697   //        expressed as & id-expression where the & is optional if
   3698   //        the name refers to a function or array, or if the
   3699   //        corresponding template-parameter is a reference; or
   3700 
   3701   // In C++98/03 mode, give an extension warning on any extra parentheses.
   3702   // See http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#773
   3703   bool ExtraParens = false;
   3704   while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
   3705     if (!Invalid && !ExtraParens) {
   3706       S.Diag(Arg->getLocStart(),
   3707              S.getLangOpts().CPlusPlus11 ?
   3708                diag::warn_cxx98_compat_template_arg_extra_parens :
   3709                diag::ext_template_arg_extra_parens)
   3710         << Arg->getSourceRange();
   3711       ExtraParens = true;
   3712     }
   3713 
   3714     Arg = Parens->getSubExpr();
   3715   }
   3716 
   3717   while (SubstNonTypeTemplateParmExpr *subst =
   3718            dyn_cast<SubstNonTypeTemplateParmExpr>(Arg))
   3719     Arg = subst->getReplacement()->IgnoreImpCasts();
   3720 
   3721   bool AddressTaken = false;
   3722   SourceLocation AddrOpLoc;
   3723   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) {
   3724     if (UnOp->getOpcode() == UO_AddrOf) {
   3725       Arg = UnOp->getSubExpr();
   3726       AddressTaken = true;
   3727       AddrOpLoc = UnOp->getOperatorLoc();
   3728     }
   3729   }
   3730 
   3731   if (S.getLangOpts().MicrosoftExt && isa<CXXUuidofExpr>(Arg)) {
   3732     Converted = TemplateArgument(ArgIn);
   3733     return false;
   3734   }
   3735 
   3736   while (SubstNonTypeTemplateParmExpr *subst =
   3737            dyn_cast<SubstNonTypeTemplateParmExpr>(Arg))
   3738     Arg = subst->getReplacement()->IgnoreImpCasts();
   3739 
   3740   // Stop checking the precise nature of the argument if it is value dependent,
   3741   // it should be checked when instantiated.
   3742   if (Arg->isValueDependent()) {
   3743     Converted = TemplateArgument(ArgIn);
   3744     return false;
   3745   }
   3746 
   3747   DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Arg);
   3748   if (!DRE) {
   3749     S.Diag(Arg->getLocStart(), diag::err_template_arg_not_decl_ref)
   3750     << Arg->getSourceRange();
   3751     S.Diag(Param->getLocation(), diag::note_template_param_here);
   3752     return true;
   3753   }
   3754 
   3755   if (!isa<ValueDecl>(DRE->getDecl())) {
   3756     S.Diag(Arg->getLocStart(),
   3757            diag::err_template_arg_not_object_or_func_form)
   3758       << Arg->getSourceRange();
   3759     S.Diag(Param->getLocation(), diag::note_template_param_here);
   3760     return true;
   3761   }
   3762 
   3763   ValueDecl *Entity = DRE->getDecl();
   3764 
   3765   // Cannot refer to non-static data members
   3766   if (FieldDecl *Field = dyn_cast<FieldDecl>(Entity)) {
   3767     S.Diag(Arg->getLocStart(), diag::err_template_arg_field)
   3768       << Field << Arg->getSourceRange();
   3769     S.Diag(Param->getLocation(), diag::note_template_param_here);
   3770     return true;
   3771   }
   3772 
   3773   // Cannot refer to non-static member functions
   3774   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {
   3775     if (!Method->isStatic()) {
   3776       S.Diag(Arg->getLocStart(), diag::err_template_arg_method)
   3777         << Method << Arg->getSourceRange();
   3778       S.Diag(Param->getLocation(), diag::note_template_param_here);
   3779       return true;
   3780     }
   3781   }
   3782 
   3783   FunctionDecl *Func = dyn_cast<FunctionDecl>(Entity);
   3784   VarDecl *Var = dyn_cast<VarDecl>(Entity);
   3785 
   3786   // A non-type template argument must refer to an object or function.
   3787   if (!Func && !Var) {
   3788     // We found something, but we don't know specifically what it is.
   3789     S.Diag(Arg->getLocStart(), diag::err_template_arg_not_object_or_func)
   3790       << Arg->getSourceRange();
   3791     S.Diag(DRE->getDecl()->getLocation(), diag::note_template_arg_refers_here);
   3792     return true;
   3793   }
   3794 
   3795   // Address / reference template args must have external linkage in C++98.
   3796   if (Entity->getLinkage() == InternalLinkage) {
   3797     S.Diag(Arg->getLocStart(), S.getLangOpts().CPlusPlus11 ?
   3798              diag::warn_cxx98_compat_template_arg_object_internal :
   3799              diag::ext_template_arg_object_internal)
   3800       << !Func << Entity << Arg->getSourceRange();
   3801     S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object)
   3802       << !Func;
   3803   } else if (Entity->getLinkage() == NoLinkage) {
   3804     S.Diag(Arg->getLocStart(), diag::err_template_arg_object_no_linkage)
   3805       << !Func << Entity << Arg->getSourceRange();
   3806     S.Diag(Entity->getLocation(), diag::note_template_arg_internal_object)
   3807       << !Func;
   3808     return true;
   3809   }
   3810 
   3811   if (Func) {
   3812     // If the template parameter has pointer type, the function decays.
   3813     if (ParamType->isPointerType() && !AddressTaken)
   3814       ArgType = S.Context.getPointerType(Func->getType());
   3815     else if (AddressTaken && ParamType->isReferenceType()) {
   3816       // If we originally had an address-of operator, but the
   3817       // parameter has reference type, complain and (if things look
   3818       // like they will work) drop the address-of operator.
   3819       if (!S.Context.hasSameUnqualifiedType(Func->getType(),
   3820                                             ParamType.getNonReferenceType())) {
   3821         S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer)
   3822           << ParamType;
   3823         S.Diag(Param->getLocation(), diag::note_template_param_here);
   3824         return true;
   3825       }
   3826 
   3827       S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer)
   3828         << ParamType
   3829         << FixItHint::CreateRemoval(AddrOpLoc);
   3830       S.Diag(Param->getLocation(), diag::note_template_param_here);
   3831 
   3832       ArgType = Func->getType();
   3833     }
   3834   } else {
   3835     // A value of reference type is not an object.
   3836     if (Var->getType()->isReferenceType()) {
   3837       S.Diag(Arg->getLocStart(),
   3838              diag::err_template_arg_reference_var)
   3839         << Var->getType() << Arg->getSourceRange();
   3840       S.Diag(Param->getLocation(), diag::note_template_param_here);
   3841       return true;
   3842     }
   3843 
   3844     // A template argument must have static storage duration.
   3845     // FIXME: Ensure this works for thread_local as well as __thread.
   3846     if (Var->isThreadSpecified()) {
   3847       S.Diag(Arg->getLocStart(), diag::err_template_arg_thread_local)
   3848         << Arg->getSourceRange();
   3849       S.Diag(Var->getLocation(), diag::note_template_arg_refers_here);
   3850       return true;
   3851     }
   3852 
   3853     // If the template parameter has pointer type, we must have taken
   3854     // the address of this object.
   3855     if (ParamType->isReferenceType()) {
   3856       if (AddressTaken) {
   3857         // If we originally had an address-of operator, but the
   3858         // parameter has reference type, complain and (if things look
   3859         // like they will work) drop the address-of operator.
   3860         if (!S.Context.hasSameUnqualifiedType(Var->getType(),
   3861                                             ParamType.getNonReferenceType())) {
   3862           S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer)
   3863             << ParamType;
   3864           S.Diag(Param->getLocation(), diag::note_template_param_here);
   3865           return true;
   3866         }
   3867 
   3868         S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer)
   3869           << ParamType
   3870           << FixItHint::CreateRemoval(AddrOpLoc);
   3871         S.Diag(Param->getLocation(), diag::note_template_param_here);
   3872 
   3873         ArgType = Var->getType();
   3874       }
   3875     } else if (!AddressTaken && ParamType->isPointerType()) {
   3876       if (Var->getType()->isArrayType()) {
   3877         // Array-to-pointer decay.
   3878         ArgType = S.Context.getArrayDecayedType(Var->getType());
   3879       } else {
   3880         // If the template parameter has pointer type but the address of
   3881         // this object was not taken, complain and (possibly) recover by
   3882         // taking the address of the entity.
   3883         ArgType = S.Context.getPointerType(Var->getType());
   3884         if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {
   3885           S.Diag(Arg->getLocStart(), diag::err_template_arg_not_address_of)
   3886             << ParamType;
   3887           S.Diag(Param->getLocation(), diag::note_template_param_here);
   3888           return true;
   3889         }
   3890 
   3891         S.Diag(Arg->getLocStart(), diag::err_template_arg_not_address_of)
   3892           << ParamType
   3893           << FixItHint::CreateInsertion(Arg->getLocStart(), "&");
   3894 
   3895         S.Diag(Param->getLocation(), diag::note_template_param_here);
   3896       }
   3897     }
   3898   }
   3899 
   3900   bool ObjCLifetimeConversion;
   3901   if (ParamType->isPointerType() &&
   3902       !ParamType->getAs<PointerType>()->getPointeeType()->isFunctionType() &&
   3903       S.IsQualificationConversion(ArgType, ParamType, false,
   3904                                   ObjCLifetimeConversion)) {
   3905     // For pointer-to-object types, qualification conversions are
   3906     // permitted.
   3907   } else {
   3908     if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {
   3909       if (!ParamRef->getPointeeType()->isFunctionType()) {
   3910         // C++ [temp.arg.nontype]p5b3:
   3911         //   For a non-type template-parameter of type reference to
   3912         //   object, no conversions apply. The type referred to by the
   3913         //   reference may be more cv-qualified than the (otherwise
   3914         //   identical) type of the template- argument. The
   3915         //   template-parameter is bound directly to the
   3916         //   template-argument, which shall be an lvalue.
   3917 
   3918         // FIXME: Other qualifiers?
   3919         unsigned ParamQuals = ParamRef->getPointeeType().getCVRQualifiers();
   3920         unsigned ArgQuals = ArgType.getCVRQualifiers();
   3921 
   3922         if ((ParamQuals | ArgQuals) != ParamQuals) {
   3923           S.Diag(Arg->getLocStart(),
   3924                  diag::err_template_arg_ref_bind_ignores_quals)
   3925             << ParamType << Arg->getType()
   3926             << Arg->getSourceRange();
   3927           S.Diag(Param->getLocation(), diag::note_template_param_here);
   3928           return true;
   3929         }
   3930       }
   3931     }
   3932 
   3933     // At this point, the template argument refers to an object or
   3934     // function with external linkage. We now need to check whether the
   3935     // argument and parameter types are compatible.
   3936     if (!S.Context.hasSameUnqualifiedType(ArgType,
   3937                                           ParamType.getNonReferenceType())) {
   3938       // We can't perform this conversion or binding.
   3939       if (ParamType->isReferenceType())
   3940         S.Diag(Arg->getLocStart(), diag::err_template_arg_no_ref_bind)
   3941           << ParamType << ArgIn->getType() << Arg->getSourceRange();
   3942       else
   3943         S.Diag(Arg->getLocStart(),  diag::err_template_arg_not_convertible)
   3944           << ArgIn->getType() << ParamType << Arg->getSourceRange();
   3945       S.Diag(Param->getLocation(), diag::note_template_param_here);
   3946       return true;
   3947     }
   3948   }
   3949 
   3950   // Create the template argument.
   3951   Converted = TemplateArgument(cast<ValueDecl>(Entity->getCanonicalDecl()),
   3952                                ParamType->isReferenceType());
   3953   S.MarkAnyDeclReferenced(Arg->getLocStart(), Entity, false);
   3954   return false;
   3955 }
   3956 
   3957 /// \brief Checks whether the given template argument is a pointer to
   3958 /// member constant according to C++ [temp.arg.nontype]p1.
   3959 static bool CheckTemplateArgumentPointerToMember(Sema &S,
   3960                                                  NonTypeTemplateParmDecl *Param,
   3961                                                  QualType ParamType,
   3962                                                  Expr *&ResultArg,
   3963                                                  TemplateArgument &Converted) {
   3964   bool Invalid = false;
   3965 
   3966   // Check for a null pointer value.
   3967   Expr *Arg = ResultArg;
   3968   switch (isNullPointerValueTemplateArgument(S, Param, ParamType, Arg)) {
   3969   case NPV_Error:
   3970     return true;
   3971   case NPV_NullPointer:
   3972     S.Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);
   3973     Converted = TemplateArgument(ParamType, /*isNullPtr*/true);
   3974     return false;
   3975   case NPV_NotNullPointer:
   3976     break;
   3977   }
   3978 
   3979   bool ObjCLifetimeConversion;
   3980   if (S.IsQualificationConversion(Arg->getType(),
   3981                                   ParamType.getNonReferenceType(),
   3982                                   false, ObjCLifetimeConversion)) {
   3983     Arg = S.ImpCastExprToType(Arg, ParamType, CK_NoOp,
   3984                               Arg->getValueKind()).take();
   3985     ResultArg = Arg;
   3986   } else if (!S.Context.hasSameUnqualifiedType(Arg->getType(),
   3987                 ParamType.getNonReferenceType())) {
   3988     // We can't perform this conversion.
   3989     S.Diag(Arg->getLocStart(), diag::err_template_arg_not_convertible)
   3990       << Arg->getType() << ParamType << Arg->getSourceRange();
   3991     S.Diag(Param->getLocation(), diag::note_template_param_here);
   3992     return true;
   3993   }
   3994 
   3995   // See through any implicit casts we added to fix the type.
   3996   while (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg))
   3997     Arg = Cast->getSubExpr();
   3998 
   3999   // C++ [temp.arg.nontype]p1:
   4000   //
   4001   //   A template-argument for a non-type, non-template
   4002   //   template-parameter shall be one of: [...]
   4003   //
   4004   //     -- a pointer to member expressed as described in 5.3.1.
   4005   DeclRefExpr *DRE = 0;
   4006 
   4007   // In C++98/03 mode, give an extension warning on any extra parentheses.
   4008   // See http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#773
   4009   bool ExtraParens = false;
   4010   while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
   4011     if (!Invalid && !ExtraParens) {
   4012       S.Diag(Arg->getLocStart(),
   4013              S.getLangOpts().CPlusPlus11 ?
   4014                diag::warn_cxx98_compat_template_arg_extra_parens :
   4015                diag::ext_template_arg_extra_parens)
   4016         << Arg->getSourceRange();
   4017       ExtraParens = true;
   4018     }
   4019 
   4020     Arg = Parens->getSubExpr();
   4021   }
   4022 
   4023   while (SubstNonTypeTemplateParmExpr *subst =
   4024            dyn_cast<SubstNonTypeTemplateParmExpr>(Arg))
   4025     Arg = subst->getReplacement()->IgnoreImpCasts();
   4026 
   4027   // A pointer-to-member constant written &Class::member.
   4028   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) {
   4029     if (UnOp->getOpcode() == UO_AddrOf) {
   4030       DRE = dyn_cast<DeclRefExpr>(UnOp->getSubExpr());
   4031       if (DRE && !DRE->getQualifier())
   4032         DRE = 0;
   4033     }
   4034   }
   4035   // A constant of pointer-to-member type.
   4036   else if ((DRE = dyn_cast<DeclRefExpr>(Arg))) {
   4037     if (ValueDecl *VD = dyn_cast<ValueDecl>(DRE->getDecl())) {
   4038       if (VD->getType()->isMemberPointerType()) {
   4039         if (isa<NonTypeTemplateParmDecl>(VD) ||
   4040             (isa<VarDecl>(VD) &&
   4041              S.Context.getCanonicalType(VD->getType()).isConstQualified())) {
   4042           if (Arg->isTypeDependent() || Arg->isValueDependent()) {
   4043             Converted = TemplateArgument(Arg);
   4044           } else {
   4045             VD = cast<ValueDecl>(VD->getCanonicalDecl());
   4046             Converted = TemplateArgument(VD, /*isReferenceParam*/false);
   4047           }
   4048           return Invalid;
   4049         }
   4050       }
   4051     }
   4052 
   4053     DRE = 0;
   4054   }
   4055 
   4056   if (!DRE)
   4057     return S.Diag(Arg->getLocStart(),
   4058                   diag::err_template_arg_not_pointer_to_member_form)
   4059       << Arg->getSourceRange();
   4060 
   4061   if (isa<FieldDecl>(DRE->getDecl()) || isa<CXXMethodDecl>(DRE->getDecl())) {
   4062     assert((isa<FieldDecl>(DRE->getDecl()) ||
   4063             !cast<CXXMethodDecl>(DRE->getDecl())->isStatic()) &&
   4064            "Only non-static member pointers can make it here");
   4065 
   4066     // Okay: this is the address of a non-static member, and therefore
   4067     // a member pointer constant.
   4068     if (Arg->isTypeDependent() || Arg->isValueDependent()) {
   4069       Converted = TemplateArgument(Arg);
   4070     } else {
   4071       ValueDecl *D = cast<ValueDecl>(DRE->getDecl()->getCanonicalDecl());
   4072       Converted = TemplateArgument(D, /*isReferenceParam*/false);
   4073     }
   4074     return Invalid;
   4075   }
   4076 
   4077   // We found something else, but we don't know specifically what it is.
   4078   S.Diag(Arg->getLocStart(),
   4079          diag::err_template_arg_not_pointer_to_member_form)
   4080     << Arg->getSourceRange();
   4081   S.Diag(DRE->getDecl()->getLocation(), diag::note_template_arg_refers_here);
   4082   return true;
   4083 }
   4084 
   4085 /// \brief Check a template argument against its corresponding
   4086 /// non-type template parameter.
   4087 ///
   4088 /// This routine implements the semantics of C++ [temp.arg.nontype].
   4089 /// If an error occurred, it returns ExprError(); otherwise, it
   4090 /// returns the converted template argument. \p
   4091 /// InstantiatedParamType is the type of the non-type template
   4092 /// parameter after it has been instantiated.
   4093 ExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
   4094                                        QualType InstantiatedParamType, Expr *Arg,
   4095                                        TemplateArgument &Converted,
   4096                                        CheckTemplateArgumentKind CTAK) {
   4097   SourceLocation StartLoc = Arg->getLocStart();
   4098 
   4099   // If either the parameter has a dependent type or the argument is
   4100   // type-dependent, there's nothing we can check now.
   4101   if (InstantiatedParamType->isDependentType() || Arg->isTypeDependent()) {
   4102     // FIXME: Produce a cloned, canonical expression?
   4103     Converted = TemplateArgument(Arg);
   4104     return Owned(Arg);
   4105   }
   4106 
   4107   // C++ [temp.arg.nontype]p5:
   4108   //   The following conversions are performed on each expression used
   4109   //   as a non-type template-argument. If a non-type
   4110   //   template-argument cannot be converted to the type of the
   4111   //   corresponding template-parameter then the program is
   4112   //   ill-formed.
   4113   QualType ParamType = InstantiatedParamType;
   4114   if (ParamType->isIntegralOrEnumerationType()) {
   4115     // C++11:
   4116     //   -- for a non-type template-parameter of integral or
   4117     //      enumeration type, conversions permitted in a converted
   4118     //      constant expression are applied.
   4119     //
   4120     // C++98:
   4121     //   -- for a non-type template-parameter of integral or
   4122     //      enumeration type, integral promotions (4.5) and integral
   4123     //      conversions (4.7) are applied.
   4124 
   4125     if (CTAK == CTAK_Deduced &&
   4126         !Context.hasSameUnqualifiedType(ParamType, Arg->getType())) {
   4127       // C++ [temp.deduct.type]p17:
   4128       //   If, in the declaration of a function template with a non-type
   4129       //   template-parameter, the non-type template-parameter is used
   4130       //   in an expression in the function parameter-list and, if the
   4131       //   corresponding template-argument is deduced, the
   4132       //   template-argument type shall match the type of the
   4133       //   template-parameter exactly, except that a template-argument
   4134       //   deduced from an array bound may be of any integral type.
   4135       Diag(StartLoc, diag::err_deduced_non_type_template_arg_type_mismatch)
   4136         << Arg->getType().getUnqualifiedType()
   4137         << ParamType.getUnqualifiedType();
   4138       Diag(Param->getLocation(), diag::note_template_param_here);
   4139       return ExprError();
   4140     }
   4141 
   4142     if (getLangOpts().CPlusPlus11) {
   4143       // We can't check arbitrary value-dependent arguments.
   4144       // FIXME: If there's no viable conversion to the template parameter type,
   4145       // we should be able to diagnose that prior to instantiation.
   4146       if (Arg->isValueDependent()) {
   4147         Converted = TemplateArgument(Arg);
   4148         return Owned(Arg);
   4149       }
   4150 
   4151       // C++ [temp.arg.nontype]p1:
   4152       //   A template-argument for a non-type, non-template template-parameter
   4153       //   shall be one of:
   4154       //
   4155       //     -- for a non-type template-parameter of integral or enumeration
   4156       //        type, a converted constant expression of the type of the
   4157       //        template-parameter; or
   4158       llvm::APSInt Value;
   4159       ExprResult ArgResult =
   4160         CheckConvertedConstantExpression(Arg, ParamType, Value,
   4161                                          CCEK_TemplateArg);
   4162       if (ArgResult.isInvalid())
   4163         return ExprError();
   4164 
   4165       // Widen the argument value to sizeof(parameter type). This is almost
   4166       // always a no-op, except when the parameter type is bool. In
   4167       // that case, this may extend the argument from 1 bit to 8 bits.
   4168       QualType IntegerType = ParamType;
   4169       if (const EnumType *Enum = IntegerType->getAs<EnumType>())
   4170         IntegerType = Enum->getDecl()->getIntegerType();
   4171       Value = Value.extOrTrunc(Context.getTypeSize(IntegerType));
   4172 
   4173       Converted = TemplateArgument(Context, Value,
   4174                                    Context.getCanonicalType(ParamType));
   4175       return ArgResult;
   4176     }
   4177 
   4178     ExprResult ArgResult = DefaultLvalueConversion(Arg);
   4179     if (ArgResult.isInvalid())
   4180       return ExprError();
   4181     Arg = ArgResult.take();
   4182 
   4183     QualType ArgType = Arg->getType();
   4184 
   4185     // C++ [temp.arg.nontype]p1:
   4186     //   A template-argument for a non-type, non-template
   4187     //   template-parameter shall be one of:
   4188     //
   4189     //     -- an integral constant-expression of integral or enumeration
   4190     //        type; or
   4191     //     -- the name of a non-type template-parameter; or
   4192     SourceLocation NonConstantLoc;
   4193     llvm::APSInt Value;
   4194     if (!ArgType->isIntegralOrEnumerationType()) {
   4195       Diag(Arg->getLocStart(),
   4196            diag::err_template_arg_not_integral_or_enumeral)
   4197         << ArgType << Arg->getSourceRange();
   4198       Diag(Param->getLocation(), diag::note_template_param_here);
   4199       return ExprError();
   4200     } else if (!Arg->isValueDependent()) {
   4201       class TmplArgICEDiagnoser : public VerifyICEDiagnoser {
   4202         QualType T;
   4203 
   4204       public:
   4205         TmplArgICEDiagnoser(QualType T) : T(T) { }
   4206 
   4207         virtual void diagnoseNotICE(Sema &S, SourceLocation Loc,
   4208                                     SourceRange SR) {
   4209           S.Diag(Loc, diag::err_template_arg_not_ice) << T << SR;
   4210         }
   4211       } Diagnoser(ArgType);
   4212 
   4213       Arg = VerifyIntegerConstantExpression(Arg, &Value, Diagnoser,
   4214                                             false).take();
   4215       if (!Arg)
   4216         return ExprError();
   4217     }
   4218 
   4219     // From here on out, all we care about are the unqualified forms
   4220     // of the parameter and argument types.
   4221     ParamType = ParamType.getUnqualifiedType();
   4222     ArgType = ArgType.getUnqualifiedType();
   4223 
   4224     // Try to convert the argument to the parameter's type.
   4225     if (Context.hasSameType(ParamType, ArgType)) {
   4226       // Okay: no conversion necessary
   4227     } else if (ParamType->isBooleanType()) {
   4228       // This is an integral-to-boolean conversion.
   4229       Arg = ImpCastExprToType(Arg, ParamType, CK_IntegralToBoolean).take();
   4230     } else if (IsIntegralPromotion(Arg, ArgType, ParamType) ||
   4231                !ParamType->isEnumeralType()) {
   4232       // This is an integral promotion or conversion.
   4233       Arg = ImpCastExprToType(Arg, ParamType, CK_IntegralCast).take();
   4234     } else {
   4235       // We can't perform this conversion.
   4236       Diag(Arg->getLocStart(),
   4237            diag::err_template_arg_not_convertible)
   4238         << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
   4239       Diag(Param->getLocation(), diag::note_template_param_here);
   4240       return ExprError();
   4241     }
   4242 
   4243     // Add the value of this argument to the list of converted
   4244     // arguments. We use the bitwidth and signedness of the template
   4245     // parameter.
   4246     if (Arg->isValueDependent()) {
   4247       // The argument is value-dependent. Create a new
   4248       // TemplateArgument with the converted expression.
   4249       Converted = TemplateArgument(Arg);
   4250       return Owned(Arg);
   4251     }
   4252 
   4253     QualType IntegerType = Context.getCanonicalType(ParamType);
   4254     if (const EnumType *Enum = IntegerType->getAs<EnumType>())
   4255       IntegerType = Context.getCanonicalType(Enum->getDecl()->getIntegerType());
   4256 
   4257     if (ParamType->isBooleanType()) {
   4258       // Value must be zero or one.
   4259       Value = Value != 0;
   4260       unsigned AllowedBits = Context.getTypeSize(IntegerType);
   4261       if (Value.getBitWidth() != AllowedBits)
   4262         Value = Value.extOrTrunc(AllowedBits);
   4263       Value.setIsSigned(IntegerType->isSignedIntegerOrEnumerationType());
   4264     } else {
   4265       llvm::APSInt OldValue = Value;
   4266 
   4267       // Coerce the template argument's value to the value it will have
   4268       // based on the template parameter's type.
   4269       unsigned AllowedBits = Context.getTypeSize(IntegerType);
   4270       if (Value.getBitWidth() != AllowedBits)
   4271         Value = Value.extOrTrunc(AllowedBits);
   4272       Value.setIsSigned(IntegerType->isSignedIntegerOrEnumerationType());
   4273 
   4274       // Complain if an unsigned parameter received a negative value.
   4275       if (IntegerType->isUnsignedIntegerOrEnumerationType()
   4276                && (OldValue.isSigned() && OldValue.isNegative())) {
   4277         Diag(Arg->getLocStart(), diag::warn_template_arg_negative)
   4278           << OldValue.toString(10) << Value.toString(10) << Param->getType()
   4279           << Arg->getSourceRange();
   4280         Diag(Param->getLocation(), diag::note_template_param_here);
   4281       }
   4282 
   4283       // Complain if we overflowed the template parameter's type.
   4284       unsigned RequiredBits;
   4285       if (IntegerType->isUnsignedIntegerOrEnumerationType())
   4286         RequiredBits = OldValue.getActiveBits();
   4287       else if (OldValue.isUnsigned())
   4288         RequiredBits = OldValue.getActiveBits() + 1;
   4289       else
   4290         RequiredBits = OldValue.getMinSignedBits();
   4291       if (RequiredBits > AllowedBits) {
   4292         Diag(Arg->getLocStart(),
   4293              diag::warn_template_arg_too_large)
   4294           << OldValue.toString(10) << Value.toString(10) << Param->getType()
   4295           << Arg->getSourceRange();
   4296         Diag(Param->getLocation(), diag::note_template_param_here);
   4297       }
   4298     }
   4299 
   4300     Converted = TemplateArgument(Context, Value,
   4301                                  ParamType->isEnumeralType()
   4302                                    ? Context.getCanonicalType(ParamType)
   4303                                    : IntegerType);
   4304     return Owned(Arg);
   4305   }
   4306 
   4307   QualType ArgType = Arg->getType();
   4308   DeclAccessPair FoundResult; // temporary for ResolveOverloadedFunction
   4309 
   4310   // Handle pointer-to-function, reference-to-function, and
   4311   // pointer-to-member-function all in (roughly) the same way.
   4312   if (// -- For a non-type template-parameter of type pointer to
   4313       //    function, only the function-to-pointer conversion (4.3) is
   4314       //    applied. If the template-argument represents a set of
   4315       //    overloaded functions (or a pointer to such), the matching
   4316       //    function is selected from the set (13.4).
   4317       (ParamType->isPointerType() &&
   4318        ParamType->getAs<PointerType>()->getPointeeType()->isFunctionType()) ||
   4319       // -- For a non-type template-parameter of type reference to
   4320       //    function, no conversions apply. If the template-argument
   4321       //    represents a set of overloaded functions, the matching
   4322       //    function is selected from the set (13.4).
   4323       (ParamType->isReferenceType() &&
   4324        ParamType->getAs<ReferenceType>()->getPointeeType()->isFunctionType()) ||
   4325       // -- For a non-type template-parameter of type pointer to
   4326       //    member function, no conversions apply. If the
   4327       //    template-argument represents a set of overloaded member
   4328       //    functions, the matching member function is selected from
   4329       //    the set (13.4).
   4330       (ParamType->isMemberPointerType() &&
   4331        ParamType->getAs<MemberPointerType>()->getPointeeType()
   4332          ->isFunctionType())) {
   4333 
   4334     if (Arg->getType() == Context.OverloadTy) {
   4335       if (FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(Arg, ParamType,
   4336                                                                 true,
   4337                                                                 FoundResult)) {
   4338         if (DiagnoseUseOfDecl(Fn, Arg->getLocStart()))
   4339           return ExprError();
   4340 
   4341         Arg = FixOverloadedFunctionReference(Arg, FoundResult, Fn);
   4342         ArgType = Arg->getType();
   4343       } else
   4344         return ExprError();
   4345     }
   4346 
   4347     if (!ParamType->isMemberPointerType()) {
   4348       if (CheckTemplateArgumentAddressOfObjectOrFunction(*this, Param,
   4349                                                          ParamType,
   4350                                                          Arg, Converted))
   4351         return ExprError();
   4352       return Owned(Arg);
   4353     }
   4354 
   4355     if (CheckTemplateArgumentPointerToMember(*this, Param, ParamType, Arg,
   4356                                              Converted))
   4357       return ExprError();
   4358     return Owned(Arg);
   4359   }
   4360 
   4361   if (ParamType->isPointerType()) {
   4362     //   -- for a non-type template-parameter of type pointer to
   4363     //      object, qualification conversions (4.4) and the
   4364     //      array-to-pointer conversion (4.2) are applied.
   4365     // C++0x also allows a value of std::nullptr_t.
   4366     assert(ParamType->getPointeeType()->isIncompleteOrObjectType() &&
   4367            "Only object pointers allowed here");
   4368 
   4369     if (CheckTemplateArgumentAddressOfObjectOrFunction(*this, Param,
   4370                                                        ParamType,
   4371                                                        Arg, Converted))
   4372       return ExprError();
   4373     return Owned(Arg);
   4374   }
   4375 
   4376   if (const ReferenceType *ParamRefType = ParamType->getAs<ReferenceType>()) {
   4377     //   -- For a non-type template-parameter of type reference to
   4378     //      object, no conversions apply. The type referred to by the
   4379     //      reference may be more cv-qualified than the (otherwise
   4380     //      identical) type of the template-argument. The
   4381     //      template-parameter is bound directly to the
   4382     //      template-argument, which must be an lvalue.
   4383     assert(ParamRefType->getPointeeType()->isIncompleteOrObjectType() &&
   4384            "Only object references allowed here");
   4385 
   4386     if (Arg->getType() == Context.OverloadTy) {
   4387       if (FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(Arg,
   4388                                                  ParamRefType->getPointeeType(),
   4389                                                                 true,
   4390                                                                 FoundResult)) {
   4391         if (DiagnoseUseOfDecl(Fn, Arg->getLocStart()))
   4392           return ExprError();
   4393 
   4394         Arg = FixOverloadedFunctionReference(Arg, FoundResult, Fn);
   4395         ArgType = Arg->getType();
   4396       } else
   4397         return ExprError();
   4398     }
   4399 
   4400     if (CheckTemplateArgumentAddressOfObjectOrFunction(*this, Param,
   4401                                                        ParamType,
   4402                                                        Arg, Converted))
   4403       return ExprError();
   4404     return Owned(Arg);
   4405   }
   4406 
   4407   // Deal with parameters of type std::nullptr_t.
   4408   if (ParamType->isNullPtrType()) {
   4409     if (Arg->isTypeDependent() || Arg->isValueDependent()) {
   4410       Converted = TemplateArgument(Arg);
   4411       return Owned(Arg);
   4412     }
   4413 
   4414     switch (isNullPointerValueTemplateArgument(*this, Param, ParamType, Arg)) {
   4415     case NPV_NotNullPointer:
   4416       Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible)
   4417         << Arg->getType() << ParamType;
   4418       Diag(Param->getLocation(), diag::note_template_param_here);
   4419       return ExprError();
   4420 
   4421     case NPV_Error:
   4422       return ExprError();
   4423 
   4424     case NPV_NullPointer:
   4425       Diag(Arg->getExprLoc(), diag::warn_cxx98_compat_template_arg_null);
   4426       Converted = TemplateArgument(ParamType, /*isNullPtr*/true);
   4427       return Owned(Arg);
   4428     }
   4429   }
   4430 
   4431   //     -- For a non-type template-parameter of type pointer to data
   4432   //        member, qualification conversions (4.4) are applied.
   4433   assert(ParamType->isMemberPointerType() && "Only pointers to members remain");
   4434 
   4435   if (CheckTemplateArgumentPointerToMember(*this, Param, ParamType, Arg,
   4436                                            Converted))
   4437     return ExprError();
   4438   return Owned(Arg);
   4439 }
   4440 
   4441 /// \brief Check a template argument against its corresponding
   4442 /// template template parameter.
   4443 ///
   4444 /// This routine implements the semantics of C++ [temp.arg.template].
   4445 /// It returns true if an error occurred, and false otherwise.
   4446 bool Sema::CheckTemplateArgument(TemplateTemplateParmDecl *Param,
   4447                                  const TemplateArgumentLoc &Arg,
   4448                                  unsigned ArgumentPackIndex) {
   4449   TemplateName Name = Arg.getArgument().getAsTemplateOrTemplatePattern();
   4450   TemplateDecl *Template = Name.getAsTemplateDecl();
   4451   if (!Template) {
   4452     // Any dependent template name is fine.
   4453     assert(Name.isDependent() && "Non-dependent template isn't a declaration?");
   4454     return false;
   4455   }
   4456 
   4457   // C++0x [temp.arg.template]p1:
   4458   //   A template-argument for a template template-parameter shall be
   4459   //   the name of a class template or an alias template, expressed as an
   4460   //   id-expression. When the template-argument names a class template, only
   4461   //   primary class templates are considered when matching the
   4462   //   template template argument with the corresponding parameter;
   4463   //   partial specializations are not considered even if their
   4464   //   parameter lists match that of the template template parameter.
   4465   //
   4466   // Note that we also allow template template parameters here, which
   4467   // will happen when we are dealing with, e.g., class template
   4468   // partial specializations.
   4469   if (!isa<ClassTemplateDecl>(Template) &&
   4470       !isa<TemplateTemplateParmDecl>(Template) &&
   4471       !isa<TypeAliasTemplateDecl>(Template)) {
   4472     assert(isa<FunctionTemplateDecl>(Template) &&
   4473            "Only function templates are possible here");
   4474     Diag(Arg.getLocation(), diag::err_template_arg_not_class_template);
   4475     Diag(Template->getLocation(), diag::note_template_arg_refers_here_func)
   4476       << Template;
   4477   }
   4478 
   4479   TemplateParameterList *Params = Param->getTemplateParameters();
   4480   if (Param->isExpandedParameterPack())
   4481     Params = Param->getExpansionTemplateParameters(ArgumentPackIndex);
   4482 
   4483   return !TemplateParameterListsAreEqual(Template->getTemplateParameters(),
   4484                                          Params,
   4485                                          true,
   4486                                          TPL_TemplateTemplateArgumentMatch,
   4487                                          Arg.getLocation());
   4488 }
   4489 
   4490 /// \brief Given a non-type template argument that refers to a
   4491 /// declaration and the type of its corresponding non-type template
   4492 /// parameter, produce an expression that properly refers to that
   4493 /// declaration.
   4494 ExprResult
   4495 Sema::BuildExpressionFromDeclTemplateArgument(const TemplateArgument &Arg,
   4496                                               QualType ParamType,
   4497                                               SourceLocation Loc) {
   4498   // C++ [temp.param]p8:
   4499   //
   4500   //   A non-type template-parameter of type "array of T" or
   4501   //   "function returning T" is adjusted to be of type "pointer to
   4502   //   T" or "pointer to function returning T", respectively.
   4503   if (ParamType->isArrayType())
   4504     ParamType = Context.getArrayDecayedType(ParamType);
   4505   else if (ParamType->isFunctionType())
   4506     ParamType = Context.getPointerType(ParamType);
   4507 
   4508   // For a NULL non-type template argument, return nullptr casted to the
   4509   // parameter's type.
   4510   if (Arg.getKind() == TemplateArgument::NullPtr) {
   4511     return ImpCastExprToType(
   4512              new (Context) CXXNullPtrLiteralExpr(Context.NullPtrTy, Loc),
   4513                              ParamType,
   4514                              ParamType->getAs<MemberPointerType>()
   4515                                ? CK_NullToMemberPointer
   4516                                : CK_NullToPointer);
   4517   }
   4518   assert(Arg.getKind() == TemplateArgument::Declaration &&
   4519          "Only declaration template arguments permitted here");
   4520 
   4521   ValueDecl *VD = cast<ValueDecl>(Arg.getAsDecl());
   4522 
   4523   if (VD->getDeclContext()->isRecord() &&
   4524       (isa<CXXMethodDecl>(VD) || isa<FieldDecl>(VD))) {
   4525     // If the value is a class member, we might have a pointer-to-member.
   4526     // Determine whether the non-type template template parameter is of
   4527     // pointer-to-member type. If so, we need to build an appropriate
   4528     // expression for a pointer-to-member, since a "normal" DeclRefExpr
   4529     // would refer to the member itself.
   4530     if (ParamType->isMemberPointerType()) {
   4531       QualType ClassType
   4532         = Context.getTypeDeclType(cast<RecordDecl>(VD->getDeclContext()));
   4533       NestedNameSpecifier *Qualifier
   4534         = NestedNameSpecifier::Create(Context, 0, false,
   4535                                       ClassType.getTypePtr());
   4536       CXXScopeSpec SS;
   4537       SS.MakeTrivial(Context, Qualifier, Loc);
   4538 
   4539       // The actual value-ness of this is unimportant, but for
   4540       // internal consistency's sake, references to instance methods
   4541       // are r-values.
   4542       ExprValueKind VK = VK_LValue;
   4543       if (isa<CXXMethodDecl>(VD) && cast<CXXMethodDecl>(VD)->isInstance())
   4544         VK = VK_RValue;
   4545 
   4546       ExprResult RefExpr = BuildDeclRefExpr(VD,
   4547                                             VD->getType().getNonReferenceType(),
   4548                                             VK,
   4549                                             Loc,
   4550                                             &SS);
   4551       if (RefExpr.isInvalid())
   4552         return ExprError();
   4553 
   4554       RefExpr = CreateBuiltinUnaryOp(Loc, UO_AddrOf, RefExpr.get());
   4555 
   4556       // We might need to perform a trailing qualification conversion, since
   4557       // the element type on the parameter could be more qualified than the
   4558       // element type in the expression we constructed.
   4559       bool ObjCLifetimeConversion;
   4560       if (IsQualificationConversion(((Expr*) RefExpr.get())->getType(),
   4561                                     ParamType.getUnqualifiedType(), false,
   4562                                     ObjCLifetimeConversion))
   4563         RefExpr = ImpCastExprToType(RefExpr.take(), ParamType.getUnqualifiedType(), CK_NoOp);
   4564 
   4565       assert(!RefExpr.isInvalid() &&
   4566              Context.hasSameType(((Expr*) RefExpr.get())->getType(),
   4567                                  ParamType.getUnqualifiedType()));
   4568       return RefExpr;
   4569     }
   4570   }
   4571 
   4572   QualType T = VD->getType().getNonReferenceType();
   4573 
   4574   if (ParamType->isPointerType()) {
   4575     // When the non-type template parameter is a pointer, take the
   4576     // address of the declaration.
   4577     ExprResult RefExpr = BuildDeclRefExpr(VD, T, VK_LValue, Loc);
   4578     if (RefExpr.isInvalid())
   4579       return ExprError();
   4580 
   4581     if (T->isFunctionType() || T->isArrayType()) {
   4582       // Decay functions and arrays.
   4583       RefExpr = DefaultFunctionArrayConversion(RefExpr.take());
   4584       if (RefExpr.isInvalid())
   4585         return ExprError();
   4586 
   4587       return RefExpr;
   4588     }
   4589 
   4590     // Take the address of everything else
   4591     return CreateBuiltinUnaryOp(Loc, UO_AddrOf, RefExpr.get());
   4592   }
   4593 
   4594   ExprValueKind VK = VK_RValue;
   4595 
   4596   // If the non-type template parameter has reference type, qualify the
   4597   // resulting declaration reference with the extra qualifiers on the
   4598   // type that the reference refers to.
   4599   if (const ReferenceType *TargetRef = ParamType->getAs<ReferenceType>()) {
   4600     VK = VK_LValue;
   4601     T = Context.getQualifiedType(T,
   4602                               TargetRef->getPointeeType().getQualifiers());
   4603   } else if (isa<FunctionDecl>(VD)) {
   4604     // References to functions are always lvalues.
   4605     VK = VK_LValue;
   4606   }
   4607 
   4608   return BuildDeclRefExpr(VD, T, VK, Loc);
   4609 }
   4610 
   4611 /// \brief Construct a new expression that refers to the given
   4612 /// integral template argument with the given source-location
   4613 /// information.
   4614 ///
   4615 /// This routine takes care of the mapping from an integral template
   4616 /// argument (which may have any integral type) to the appropriate
   4617 /// literal value.
   4618 ExprResult
   4619 Sema::BuildExpressionFromIntegralTemplateArgument(const TemplateArgument &Arg,
   4620                                                   SourceLocation Loc) {
   4621   assert(Arg.getKind() == TemplateArgument::Integral &&
   4622          "Operation is only valid for integral template arguments");
   4623   QualType OrigT = Arg.getIntegralType();
   4624 
   4625   // If this is an enum type that we're instantiating, we need to use an integer
   4626   // type the same size as the enumerator.  We don't want to build an
   4627   // IntegerLiteral with enum type.  The integer type of an enum type can be of
   4628   // any integral type with C++11 enum classes, make sure we create the right
   4629   // type of literal for it.
   4630   QualType T = OrigT;
   4631   if (const EnumType *ET = OrigT->getAs<EnumType>())
   4632     T = ET->getDecl()->getIntegerType();
   4633 
   4634   Expr *E;
   4635   if (T->isAnyCharacterType()) {
   4636     CharacterLiteral::CharacterKind Kind;
   4637     if (T->isWideCharType())
   4638       Kind = CharacterLiteral::Wide;
   4639     else if (T->isChar16Type())
   4640       Kind = CharacterLiteral::UTF16;
   4641     else if (T->isChar32Type())
   4642       Kind = CharacterLiteral::UTF32;
   4643     else
   4644       Kind = CharacterLiteral::Ascii;
   4645 
   4646     E = new (Context) CharacterLiteral(Arg.getAsIntegral().getZExtValue(),
   4647                                        Kind, T, Loc);
   4648   } else if (T->isBooleanType()) {
   4649     E = new (Context) CXXBoolLiteralExpr(Arg.getAsIntegral().getBoolValue(),
   4650                                          T, Loc);
   4651   } else if (T->isNullPtrType()) {
   4652     E = new (Context) CXXNullPtrLiteralExpr(Context.NullPtrTy, Loc);
   4653   } else {
   4654     E = IntegerLiteral::Create(Context, Arg.getAsIntegral(), T, Loc);
   4655   }
   4656 
   4657   if (OrigT->isEnumeralType()) {
   4658     // FIXME: This is a hack. We need a better way to handle substituted
   4659     // non-type template parameters.
   4660     E = CStyleCastExpr::Create(Context, OrigT, VK_RValue, CK_IntegralCast, E, 0,
   4661                                Context.getTrivialTypeSourceInfo(OrigT, Loc),
   4662                                Loc, Loc);
   4663   }
   4664 
   4665   return Owned(E);
   4666 }
   4667 
   4668 /// \brief Match two template parameters within template parameter lists.
   4669 static bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, NamedDecl *Old,
   4670                                        bool Complain,
   4671                                      Sema::TemplateParameterListEqualKind Kind,
   4672                                        SourceLocation TemplateArgLoc) {
   4673   // Check the actual kind (type, non-type, template).
   4674   if (Old->getKind() != New->getKind()) {
   4675     if (Complain) {
   4676       unsigned NextDiag = diag::err_template_param_different_kind;
   4677       if (TemplateArgLoc.isValid()) {
   4678         S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);
   4679         NextDiag = diag::note_template_param_different_kind;
   4680       }
   4681       S.Diag(New->getLocation(), NextDiag)
   4682         << (Kind != Sema::TPL_TemplateMatch);
   4683       S.Diag(Old->getLocation(), diag::note_template_prev_declaration)
   4684         << (Kind != Sema::TPL_TemplateMatch);
   4685     }
   4686 
   4687     return false;
   4688   }
   4689 
   4690   // Check that both are parameter packs are neither are parameter packs.
   4691   // However, if we are matching a template template argument to a
   4692   // template template parameter, the template template parameter can have
   4693   // a parameter pack where the template template argument does not.
   4694   if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() &&
   4695       !(Kind == Sema::TPL_TemplateTemplateArgumentMatch &&
   4696         Old->isTemplateParameterPack())) {
   4697     if (Complain) {
   4698       unsigned NextDiag = diag::err_template_parameter_pack_non_pack;
   4699       if (TemplateArgLoc.isValid()) {
   4700         S.Diag(TemplateArgLoc,
   4701              diag::err_template_arg_template_params_mismatch);
   4702         NextDiag = diag::note_template_parameter_pack_non_pack;
   4703       }
   4704 
   4705       unsigned ParamKind = isa<TemplateTypeParmDecl>(New)? 0
   4706                       : isa<NonTypeTemplateParmDecl>(New)? 1
   4707                       : 2;
   4708       S.Diag(New->getLocation(), NextDiag)
   4709         << ParamKind << New->isParameterPack();
   4710       S.Diag(Old->getLocation(), diag::note_template_parameter_pack_here)
   4711         << ParamKind << Old->isParameterPack();
   4712     }
   4713 
   4714     return false;
   4715   }
   4716 
   4717   // For non-type template parameters, check the type of the parameter.
   4718   if (NonTypeTemplateParmDecl *OldNTTP
   4719                                     = dyn_cast<NonTypeTemplateParmDecl>(Old)) {
   4720     NonTypeTemplateParmDecl *NewNTTP = cast<NonTypeTemplateParmDecl>(New);
   4721 
   4722     // If we are matching a template template argument to a template
   4723     // template parameter and one of the non-type template parameter types
   4724     // is dependent, then we must wait until template instantiation time
   4725     // to actually compare the arguments.
   4726     if (Kind == Sema::TPL_TemplateTemplateArgumentMatch &&
   4727         (OldNTTP->getType()->isDependentType() ||
   4728          NewNTTP->getType()->isDependentType()))
   4729       return true;
   4730 
   4731     if (!S.Context.hasSameType(OldNTTP->getType(), NewNTTP->getType())) {
   4732       if (Complain) {
   4733         unsigned NextDiag = diag::err_template_nontype_parm_different_type;
   4734         if (TemplateArgLoc.isValid()) {
   4735           S.Diag(TemplateArgLoc,
   4736                  diag::err_template_arg_template_params_mismatch);
   4737           NextDiag = diag::note_template_nontype_parm_different_type;
   4738         }
   4739         S.Diag(NewNTTP->getLocation(), NextDiag)
   4740           << NewNTTP->getType()
   4741           << (Kind != Sema::TPL_TemplateMatch);
   4742         S.Diag(OldNTTP->getLocation(),
   4743                diag::note_template_nontype_parm_prev_declaration)
   4744           << OldNTTP->getType();
   4745       }
   4746 
   4747       return false;
   4748     }
   4749 
   4750     return true;
   4751   }
   4752 
   4753   // For template template parameters, check the template parameter types.
   4754   // The template parameter lists of template template
   4755   // parameters must agree.
   4756   if (TemplateTemplateParmDecl *OldTTP
   4757                                     = dyn_cast<TemplateTemplateParmDecl>(Old)) {
   4758     TemplateTemplateParmDecl *NewTTP = cast<TemplateTemplateParmDecl>(New);
   4759     return S.TemplateParameterListsAreEqual(NewTTP->getTemplateParameters(),
   4760                                             OldTTP->getTemplateParameters(),
   4761                                             Complain,
   4762                                         (Kind == Sema::TPL_TemplateMatch
   4763                                            ? Sema::TPL_TemplateTemplateParmMatch
   4764                                            : Kind),
   4765                                             TemplateArgLoc);
   4766   }
   4767 
   4768   return true;
   4769 }
   4770 
   4771 /// \brief Diagnose a known arity mismatch when comparing template argument
   4772 /// lists.
   4773 static
   4774 void DiagnoseTemplateParameterListArityMismatch(Sema &S,
   4775                                                 TemplateParameterList *New,
   4776                                                 TemplateParameterList *Old,
   4777                                       Sema::TemplateParameterListEqualKind Kind,
   4778                                                 SourceLocation TemplateArgLoc) {
   4779   unsigned NextDiag = diag::err_template_param_list_different_arity;
   4780   if (TemplateArgLoc.isValid()) {
   4781     S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);
   4782     NextDiag = diag::note_template_param_list_different_arity;
   4783   }
   4784   S.Diag(New->getTemplateLoc(), NextDiag)
   4785     << (New->size() > Old->size())
   4786     << (Kind != Sema::TPL_TemplateMatch)
   4787     << SourceRange(New->getTemplateLoc(), New->getRAngleLoc());
   4788   S.Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration)
   4789     << (Kind != Sema::TPL_TemplateMatch)
   4790     << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc());
   4791 }
   4792 
   4793 /// \brief Determine whether the given template parameter lists are
   4794 /// equivalent.
   4795 ///
   4796 /// \param New  The new template parameter list, typically written in the
   4797 /// source code as part of a new template declaration.
   4798 ///
   4799 /// \param Old  The old template parameter list, typically found via
   4800 /// name lookup of the template declared with this template parameter
   4801 /// list.
   4802 ///
   4803 /// \param Complain  If true, this routine will produce a diagnostic if
   4804 /// the template parameter lists are not equivalent.
   4805 ///
   4806 /// \param Kind describes how we are to match the template parameter lists.
   4807 ///
   4808 /// \param TemplateArgLoc If this source location is valid, then we
   4809 /// are actually checking the template parameter list of a template
   4810 /// argument (New) against the template parameter list of its
   4811 /// corresponding template template parameter (Old). We produce
   4812 /// slightly different diagnostics in this scenario.
   4813 ///
   4814 /// \returns True if the template parameter lists are equal, false
   4815 /// otherwise.
   4816 bool
   4817 Sema::TemplateParameterListsAreEqual(TemplateParameterList *New,
   4818                                      TemplateParameterList *Old,
   4819                                      bool Complain,
   4820                                      TemplateParameterListEqualKind Kind,
   4821                                      SourceLocation TemplateArgLoc) {
   4822   if (Old->size() != New->size() && Kind != TPL_TemplateTemplateArgumentMatch) {
   4823     if (Complain)
   4824       DiagnoseTemplateParameterListArityMismatch(*this, New, Old, Kind,
   4825                                                  TemplateArgLoc);
   4826 
   4827     return false;
   4828   }
   4829 
   4830   // C++0x [temp.arg.template]p3:
   4831   //   A template-argument matches a template template-parameter (call it P)
   4832   //   when each of the template parameters in the template-parameter-list of
   4833   //   the template-argument's corresponding class template or alias template
   4834   //   (call it A) matches the corresponding template parameter in the
   4835   //   template-parameter-list of P. [...]
   4836   TemplateParameterList::iterator NewParm = New->begin();
   4837   TemplateParameterList::iterator NewParmEnd = New->end();
   4838   for (TemplateParameterList::iterator OldParm = Old->begin(),
   4839                                     OldParmEnd = Old->end();
   4840        OldParm != OldParmEnd; ++OldParm) {
   4841     if (Kind != TPL_TemplateTemplateArgumentMatch ||
   4842         !(*OldParm)->isTemplateParameterPack()) {
   4843       if (NewParm == NewParmEnd) {
   4844         if (Complain)
   4845           DiagnoseTemplateParameterListArityMismatch(*this, New, Old, Kind,
   4846                                                      TemplateArgLoc);
   4847 
   4848         return false;
   4849       }
   4850 
   4851       if (!MatchTemplateParameterKind(*this, *NewParm, *OldParm, Complain,
   4852                                       Kind, TemplateArgLoc))
   4853         return false;
   4854 
   4855       ++NewParm;
   4856       continue;
   4857     }
   4858 
   4859     // C++0x [temp.arg.template]p3:
   4860     //   [...] When P's template- parameter-list contains a template parameter
   4861     //   pack (14.5.3), the template parameter pack will match zero or more
   4862     //   template parameters or template parameter packs in the
   4863     //   template-parameter-list of A with the same type and form as the
   4864     //   template parameter pack in P (ignoring whether those template
   4865     //   parameters are template parameter packs).
   4866     for (; NewParm != NewParmEnd; ++NewParm) {
   4867       if (!MatchTemplateParameterKind(*this, *NewParm, *OldParm, Complain,
   4868                                       Kind, TemplateArgLoc))
   4869         return false;
   4870     }
   4871   }
   4872 
   4873   // Make sure we exhausted all of the arguments.
   4874   if (NewParm != NewParmEnd) {
   4875     if (Complain)
   4876       DiagnoseTemplateParameterListArityMismatch(*this, New, Old, Kind,
   4877                                                  TemplateArgLoc);
   4878 
   4879     return false;
   4880   }
   4881 
   4882   return true;
   4883 }
   4884 
   4885 /// \brief Check whether a template can be declared within this scope.
   4886 ///
   4887 /// If the template declaration is valid in this scope, returns
   4888 /// false. Otherwise, issues a diagnostic and returns true.
   4889 bool
   4890 Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {
   4891   if (!S)
   4892     return false;
   4893 
   4894   // Find the nearest enclosing declaration scope.
   4895   while ((S->getFlags() & Scope::DeclScope) == 0 ||
   4896          (S->getFlags() & Scope::TemplateParamScope) != 0)
   4897     S = S->getParent();
   4898 
   4899   // C++ [temp]p2:
   4900   //   A template-declaration can appear only as a namespace scope or
   4901   //   class scope declaration.
   4902   DeclContext *Ctx = static_cast<DeclContext *>(S->getEntity());
   4903   if (Ctx && isa<LinkageSpecDecl>(Ctx) &&
   4904       cast<LinkageSpecDecl>(Ctx)->getLanguage() != LinkageSpecDecl::lang_cxx)
   4905     return Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage)
   4906              << TemplateParams->getSourceRange();
   4907 
   4908   while (Ctx && isa<LinkageSpecDecl>(Ctx))
   4909     Ctx = Ctx->getParent();
   4910 
   4911   if (Ctx && (Ctx->isFileContext() || Ctx->isRecord()))
   4912     return false;
   4913 
   4914   return Diag(TemplateParams->getTemplateLoc(),
   4915               diag::err_template_outside_namespace_or_class_scope)
   4916     << TemplateParams->getSourceRange();
   4917 }
   4918 
   4919 /// \brief Determine what kind of template specialization the given declaration
   4920 /// is.
   4921 static TemplateSpecializationKind getTemplateSpecializationKind(Decl *D) {
   4922   if (!D)
   4923     return TSK_Undeclared;
   4924 
   4925   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D))
   4926     return Record->getTemplateSpecializationKind();
   4927   if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D))
   4928     return Function->getTemplateSpecializationKind();
   4929   if (VarDecl *Var = dyn_cast<VarDecl>(D))
   4930     return Var->getTemplateSpecializationKind();
   4931 
   4932   return TSK_Undeclared;
   4933 }
   4934 
   4935 /// \brief Check whether a specialization is well-formed in the current
   4936 /// context.
   4937 ///
   4938 /// This routine determines whether a template specialization can be declared
   4939 /// in the current context (C++ [temp.expl.spec]p2).
   4940 ///
   4941 /// \param S the semantic analysis object for which this check is being
   4942 /// performed.
   4943 ///
   4944 /// \param Specialized the entity being specialized or instantiated, which
   4945 /// may be a kind of template (class template, function template, etc.) or
   4946 /// a member of a class template (member function, static data member,
   4947 /// member class).
   4948 ///
   4949 /// \param PrevDecl the previous declaration of this entity, if any.
   4950 ///
   4951 /// \param Loc the location of the explicit specialization or instantiation of
   4952 /// this entity.
   4953 ///
   4954 /// \param IsPartialSpecialization whether this is a partial specialization of
   4955 /// a class template.
   4956 ///
   4957 /// \returns true if there was an error that we cannot recover from, false
   4958 /// otherwise.
   4959 static bool CheckTemplateSpecializationScope(Sema &S,
   4960                                              NamedDecl *Specialized,
   4961                                              NamedDecl *PrevDecl,
   4962                                              SourceLocation Loc,
   4963                                              bool IsPartialSpecialization) {
   4964   // Keep these "kind" numbers in sync with the %select statements in the
   4965   // various diagnostics emitted by this routine.
   4966   int EntityKind = 0;
   4967   if (isa<ClassTemplateDecl>(Specialized))
   4968     EntityKind = IsPartialSpecialization? 1 : 0;
   4969   else if (isa<FunctionTemplateDecl>(Specialized))
   4970     EntityKind = 2;
   4971   else if (isa<CXXMethodDecl>(Specialized))
   4972     EntityKind = 3;
   4973   else if (isa<VarDecl>(Specialized))
   4974     EntityKind = 4;
   4975   else if (isa<RecordDecl>(Specialized))
   4976     EntityKind = 5;
   4977   else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)
   4978     EntityKind = 6;
   4979   else {
   4980     S.Diag(Loc, diag::err_template_spec_unknown_kind)
   4981       << S.getLangOpts().CPlusPlus11;
   4982     S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
   4983     return true;
   4984   }
   4985 
   4986   // C++ [temp.expl.spec]p2:
   4987   //   An explicit specialization shall be declared in the namespace
   4988   //   of which the template is a member, or, for member templates, in
   4989   //   the namespace of which the enclosing class or enclosing class
   4990   //   template is a member. An explicit specialization of a member
   4991   //   function, member class or static data member of a class
   4992   //   template shall be declared in the namespace of which the class
   4993   //   template is a member. Such a declaration may also be a
   4994   //   definition. If the declaration is not a definition, the
   4995   //   specialization may be defined later in the name- space in which
   4996   //   the explicit specialization was declared, or in a namespace
   4997   //   that encloses the one in which the explicit specialization was
   4998   //   declared.
   4999   if (S.CurContext->getRedeclContext()->isFunctionOrMethod()) {
   5000     S.Diag(Loc, diag::err_template_spec_decl_function_scope)
   5001       << Specialized;
   5002     return true;
   5003   }
   5004 
   5005   if (S.CurContext->isRecord() && !IsPartialSpecialization) {
   5006     if (S.getLangOpts().MicrosoftExt) {
   5007       // Do not warn for class scope explicit specialization during
   5008       // instantiation, warning was already emitted during pattern
   5009       // semantic analysis.
   5010       if (!S.ActiveTemplateInstantiations.size())
   5011         S.Diag(Loc, diag::ext_function_specialization_in_class)
   5012           << Specialized;
   5013     } else {
   5014       S.Diag(Loc, diag::err_template_spec_decl_class_scope)
   5015         << Specialized;
   5016       return true;
   5017     }
   5018   }
   5019 
   5020   if (S.CurContext->isRecord() &&
   5021       !S.CurContext->Equals(Specialized->getDeclContext())) {
   5022     // Make sure that we're specializing in the right record context.
   5023     // Otherwise, things can go horribly wrong.
   5024     S.Diag(Loc, diag::err_template_spec_decl_class_scope)
   5025       << Specialized;
   5026     return true;
   5027   }
   5028 
   5029   // C++ [temp.class.spec]p6:
   5030   //   A class template partial specialization may be declared or redeclared
   5031   //   in any namespace scope in which its definition may be defined (14.5.1
   5032   //   and 14.5.2).
   5033   bool ComplainedAboutScope = false;
   5034   DeclContext *SpecializedContext
   5035     = Specialized->getDeclContext()->getEnclosingNamespaceContext();
   5036   DeclContext *DC = S.CurContext->getEnclosingNamespaceContext();
   5037   if ((!PrevDecl ||
   5038        getTemplateSpecializationKind(PrevDecl) == TSK_Undeclared ||
   5039        getTemplateSpecializationKind(PrevDecl) == TSK_ImplicitInstantiation)){
   5040     // C++ [temp.exp.spec]p2:
   5041     //   An explicit specialization shall be declared in the namespace of which
   5042     //   the template is a member, or, for member templates, in the namespace
   5043     //   of which the enclosing class or enclosing class template is a member.
   5044     //   An explicit specialization of a member function, member class or
   5045     //   static data member of a class template shall be declared in the
   5046     //   namespace of which the class template is a member.
   5047     //
   5048     // C++0x [temp.expl.spec]p2:
   5049     //   An explicit specialization shall be declared in a namespace enclosing
   5050     //   the specialized template.
   5051     if (!DC->InEnclosingNamespaceSetOf(SpecializedContext)) {
   5052       bool IsCPlusPlus11Extension = DC->Encloses(SpecializedContext);
   5053       if (isa<TranslationUnitDecl>(SpecializedContext)) {
   5054         assert(!IsCPlusPlus11Extension &&
   5055                "DC encloses TU but isn't in enclosing namespace set");
   5056         S.Diag(Loc, diag::err_template_spec_decl_out_of_scope_global)
   5057           << EntityKind << Specialized;
   5058       } else if (isa<NamespaceDecl>(SpecializedContext)) {
   5059         int Diag;
   5060         if (!IsCPlusPlus11Extension)
   5061           Diag = diag::err_template_spec_decl_out_of_scope;
   5062         else if (!S.getLangOpts().CPlusPlus11)
   5063           Diag = diag::ext_template_spec_decl_out_of_scope;
   5064         else
   5065           Diag = diag::warn_cxx98_compat_template_spec_decl_out_of_scope;
   5066         S.Diag(Loc, Diag)
   5067           << EntityKind << Specialized << cast<NamedDecl>(SpecializedContext);
   5068       }
   5069 
   5070       S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
   5071       ComplainedAboutScope =
   5072         !(IsCPlusPlus11Extension && S.getLangOpts().CPlusPlus11);
   5073     }
   5074   }
   5075 
   5076   // Make sure that this redeclaration (or definition) occurs in an enclosing
   5077   // namespace.
   5078   // Note that HandleDeclarator() performs this check for explicit
   5079   // specializations of function templates, static data members, and member
   5080   // functions, so we skip the check here for those kinds of entities.
   5081   // FIXME: HandleDeclarator's diagnostics aren't quite as good, though.
   5082   // Should we refactor that check, so that it occurs later?
   5083   if (!ComplainedAboutScope && !DC->Encloses(SpecializedContext) &&
   5084       !(isa<FunctionTemplateDecl>(Specialized) || isa<VarDecl>(Specialized) ||
   5085         isa<FunctionDecl>(Specialized))) {
   5086     if (isa<TranslationUnitDecl>(SpecializedContext))
   5087       S.Diag(Loc, diag::err_template_spec_redecl_global_scope)
   5088         << EntityKind << Specialized;
   5089     else if (isa<NamespaceDecl>(SpecializedContext))
   5090       S.Diag(Loc, diag::err_template_spec_redecl_out_of_scope)
   5091         << EntityKind << Specialized
   5092         << cast<NamedDecl>(SpecializedContext);
   5093 
   5094     S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
   5095   }
   5096 
   5097   // FIXME: check for specialization-after-instantiation errors and such.
   5098 
   5099   return false;
   5100 }
   5101 
   5102 /// \brief Subroutine of Sema::CheckClassTemplatePartialSpecializationArgs
   5103 /// that checks non-type template partial specialization arguments.
   5104 static bool CheckNonTypeClassTemplatePartialSpecializationArgs(Sema &S,
   5105                                                 NonTypeTemplateParmDecl *Param,
   5106                                                   const TemplateArgument *Args,
   5107                                                         unsigned NumArgs) {
   5108   for (unsigned I = 0; I != NumArgs; ++I) {
   5109     if (Args[I].getKind() == TemplateArgument::Pack) {
   5110       if (CheckNonTypeClassTemplatePartialSpecializationArgs(S, Param,
   5111                                                            Args[I].pack_begin(),
   5112                                                            Args[I].pack_size()))
   5113         return true;
   5114 
   5115       continue;
   5116     }
   5117 
   5118     if (Args[I].getKind() != TemplateArgument::Expression)
   5119       continue;
   5120 
   5121     Expr *ArgExpr = Args[I].getAsExpr();
   5122 
   5123     // We can have a pack expansion of any of the bullets below.
   5124     if (PackExpansionExpr *Expansion = dyn_cast<PackExpansionExpr>(ArgExpr))
   5125       ArgExpr = Expansion->getPattern();
   5126 
   5127     // Strip off any implicit casts we added as part of type checking.
   5128     while (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(ArgExpr))
   5129       ArgExpr = ICE->getSubExpr();
   5130 
   5131     // C++ [temp.class.spec]p8:
   5132     //   A non-type argument is non-specialized if it is the name of a
   5133     //   non-type parameter. All other non-type arguments are
   5134     //   specialized.
   5135     //
   5136     // Below, we check the two conditions that only apply to
   5137     // specialized non-type arguments, so skip any non-specialized
   5138     // arguments.
   5139     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ArgExpr))
   5140       if (isa<NonTypeTemplateParmDecl>(DRE->getDecl()))
   5141         continue;
   5142 
   5143     // C++ [temp.class.spec]p9:
   5144     //   Within the argument list of a class template partial
   5145     //   specialization, the following restrictions apply:
   5146     //     -- A partially specialized non-type argument expression
   5147     //        shall not involve a template parameter of the partial
   5148     //        specialization except when the argument expression is a
   5149     //        simple identifier.
   5150     if (ArgExpr->isTypeDependent() || ArgExpr->isValueDependent()) {
   5151       S.Diag(ArgExpr->getLocStart(),
   5152            diag::err_dependent_non_type_arg_in_partial_spec)
   5153         << ArgExpr->getSourceRange();
   5154       return true;
   5155     }
   5156 
   5157     //     -- The type of a template parameter corresponding to a
   5158     //        specialized non-type argument shall not be dependent on a
   5159     //        parameter of the specialization.
   5160     if (Param->getType()->isDependentType()) {
   5161       S.Diag(ArgExpr->getLocStart(),
   5162            diag::err_dependent_typed_non_type_arg_in_partial_spec)
   5163         << Param->getType()
   5164         << ArgExpr->getSourceRange();
   5165       S.Diag(Param->getLocation(), diag::note_template_param_here);
   5166       return true;
   5167     }
   5168   }
   5169 
   5170   return false;
   5171 }
   5172 
   5173 /// \brief Check the non-type template arguments of a class template
   5174 /// partial specialization according to C++ [temp.class.spec]p9.
   5175 ///
   5176 /// \param TemplateParams the template parameters of the primary class
   5177 /// template.
   5178 ///
   5179 /// \param TemplateArgs the template arguments of the class template
   5180 /// partial specialization.
   5181 ///
   5182 /// \returns true if there was an error, false otherwise.
   5183 static bool CheckClassTemplatePartialSpecializationArgs(Sema &S,
   5184                                         TemplateParameterList *TemplateParams,
   5185                        SmallVectorImpl<TemplateArgument> &TemplateArgs) {
   5186   const TemplateArgument *ArgList = TemplateArgs.data();
   5187 
   5188   for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {
   5189     NonTypeTemplateParmDecl *Param
   5190       = dyn_cast<NonTypeTemplateParmDecl>(TemplateParams->getParam(I));
   5191     if (!Param)
   5192       continue;
   5193 
   5194     if (CheckNonTypeClassTemplatePartialSpecializationArgs(S, Param,
   5195                                                            &ArgList[I], 1))
   5196       return true;
   5197   }
   5198 
   5199   return false;
   5200 }
   5201 
   5202 DeclResult
   5203 Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec,
   5204                                        TagUseKind TUK,
   5205                                        SourceLocation KWLoc,
   5206                                        SourceLocation ModulePrivateLoc,
   5207                                        CXXScopeSpec &SS,
   5208                                        TemplateTy TemplateD,
   5209                                        SourceLocation TemplateNameLoc,
   5210                                        SourceLocation LAngleLoc,
   5211                                        ASTTemplateArgsPtr TemplateArgsIn,
   5212                                        SourceLocation RAngleLoc,
   5213                                        AttributeList *Attr,
   5214                                MultiTemplateParamsArg TemplateParameterLists) {
   5215   assert(TUK != TUK_Reference && "References are not specializations");
   5216 
   5217   // NOTE: KWLoc is the location of the tag keyword. This will instead
   5218   // store the location of the outermost template keyword in the declaration.
   5219   SourceLocation TemplateKWLoc = TemplateParameterLists.size() > 0
   5220     ? TemplateParameterLists[0]->getTemplateLoc() : SourceLocation();
   5221 
   5222   // Find the class template we're specializing
   5223   TemplateName Name = TemplateD.getAsVal<TemplateName>();
   5224   ClassTemplateDecl *ClassTemplate
   5225     = dyn_cast_or_null<ClassTemplateDecl>(Name.getAsTemplateDecl());
   5226 
   5227   if (!ClassTemplate) {
   5228     Diag(TemplateNameLoc, diag::err_not_class_template_specialization)
   5229       << (Name.getAsTemplateDecl() &&
   5230           isa<TemplateTemplateParmDecl>(Name.getAsTemplateDecl()));
   5231     return true;
   5232   }
   5233 
   5234   bool isExplicitSpecialization = false;
   5235   bool isPartialSpecialization = false;
   5236 
   5237   // Check the validity of the template headers that introduce this
   5238   // template.
   5239   // FIXME: We probably shouldn't complain about these headers for
   5240   // friend declarations.
   5241   bool Invalid = false;
   5242   TemplateParameterList *TemplateParams
   5243     = MatchTemplateParametersToScopeSpecifier(TemplateNameLoc,
   5244                                               TemplateNameLoc,
   5245                                               SS,
   5246                                               TemplateParameterLists.data(),
   5247                                               TemplateParameterLists.size(),
   5248                                               TUK == TUK_Friend,
   5249                                               isExplicitSpecialization,
   5250                                               Invalid);
   5251   if (Invalid)
   5252     return true;
   5253 
   5254   if (TemplateParams && TemplateParams->size() > 0) {
   5255     isPartialSpecialization = true;
   5256 
   5257     if (TUK == TUK_Friend) {
   5258       Diag(KWLoc, diag::err_partial_specialization_friend)
   5259         << SourceRange(LAngleLoc, RAngleLoc);
   5260       return true;
   5261     }
   5262 
   5263     // C++ [temp.class.spec]p10:
   5264     //   The template parameter list of a specialization shall not
   5265     //   contain default template argument values.
   5266     for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {
   5267       Decl *Param = TemplateParams->getParam(I);
   5268       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param)) {
   5269         if (TTP->hasDefaultArgument()) {
   5270           Diag(TTP->getDefaultArgumentLoc(),
   5271                diag::err_default_arg_in_partial_spec);
   5272           TTP->removeDefaultArgument();
   5273         }
   5274       } else if (NonTypeTemplateParmDecl *NTTP
   5275                    = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
   5276         if (Expr *DefArg = NTTP->getDefaultArgument()) {
   5277           Diag(NTTP->getDefaultArgumentLoc(),
   5278                diag::err_default_arg_in_partial_spec)
   5279             << DefArg->getSourceRange();
   5280           NTTP->removeDefaultArgument();
   5281         }
   5282       } else {
   5283         TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(Param);
   5284         if (TTP->hasDefaultArgument()) {
   5285           Diag(TTP->getDefaultArgument().getLocation(),
   5286                diag::err_default_arg_in_partial_spec)
   5287             << TTP->getDefaultArgument().getSourceRange();
   5288           TTP->removeDefaultArgument();
   5289         }
   5290       }
   5291     }
   5292   } else if (TemplateParams) {
   5293     if (TUK == TUK_Friend)
   5294       Diag(KWLoc, diag::err_template_spec_friend)
   5295         << FixItHint::CreateRemoval(
   5296                                 SourceRange(TemplateParams->getTemplateLoc(),
   5297                                             TemplateParams->getRAngleLoc()))
   5298         << SourceRange(LAngleLoc, RAngleLoc);
   5299     else
   5300       isExplicitSpecialization = true;
   5301   } else if (TUK != TUK_Friend) {
   5302     Diag(KWLoc, diag::err_template_spec_needs_header)
   5303       << FixItHint::CreateInsertion(KWLoc, "template<> ");
   5304     isExplicitSpecialization = true;
   5305   }
   5306 
   5307   // Check that the specialization uses the same tag kind as the
   5308   // original template.
   5309   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
   5310   assert(Kind != TTK_Enum && "Invalid enum tag in class template spec!");
   5311   if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(),
   5312                                     Kind, TUK == TUK_Definition, KWLoc,
   5313                                     *ClassTemplate->getIdentifier())) {
   5314     Diag(KWLoc, diag::err_use_with_wrong_tag)
   5315       << ClassTemplate
   5316       << FixItHint::CreateReplacement(KWLoc,
   5317                             ClassTemplate->getTemplatedDecl()->getKindName());
   5318     Diag(ClassTemplate->getTemplatedDecl()->getLocation(),
   5319          diag::note_previous_use);
   5320     Kind = ClassTemplate->getTemplatedDecl()->getTagKind();
   5321   }
   5322 
   5323   // Translate the parser's template argument list in our AST format.
   5324   TemplateArgumentListInfo TemplateArgs;
   5325   TemplateArgs.setLAngleLoc(LAngleLoc);
   5326   TemplateArgs.setRAngleLoc(RAngleLoc);
   5327   translateTemplateArguments(TemplateArgsIn, TemplateArgs);
   5328 
   5329   // Check for unexpanded parameter packs in any of the template arguments.
   5330   for (unsigned I = 0, N = TemplateArgs.size(); I != N; ++I)
   5331     if (DiagnoseUnexpandedParameterPack(TemplateArgs[I],
   5332                                         UPPC_PartialSpecialization))
   5333       return true;
   5334 
   5335   // Check that the template argument list is well-formed for this
   5336   // template.
   5337   SmallVector<TemplateArgument, 4> Converted;
   5338   if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc,
   5339                                 TemplateArgs, false, Converted))
   5340     return true;
   5341 
   5342   // Find the class template (partial) specialization declaration that
   5343   // corresponds to these arguments.
   5344   if (isPartialSpecialization) {
   5345     if (CheckClassTemplatePartialSpecializationArgs(*this,
   5346                                          ClassTemplate->getTemplateParameters(),
   5347                                          Converted))
   5348       return true;
   5349 
   5350     bool InstantiationDependent;
   5351     if (!Name.isDependent() &&
   5352         !TemplateSpecializationType::anyDependentTemplateArguments(
   5353                                              TemplateArgs.getArgumentArray(),
   5354                                                          TemplateArgs.size(),
   5355                                                      InstantiationDependent)) {
   5356       Diag(TemplateNameLoc, diag::err_partial_spec_fully_specialized)
   5357         << ClassTemplate->getDeclName();
   5358       isPartialSpecialization = false;
   5359     }
   5360   }
   5361 
   5362   void *InsertPos = 0;
   5363   ClassTemplateSpecializationDecl *PrevDecl = 0;
   5364 
   5365   if (isPartialSpecialization)
   5366     // FIXME: Template parameter list matters, too
   5367     PrevDecl
   5368       = ClassTemplate->findPartialSpecialization(Converted.data(),
   5369                                                  Converted.size(),
   5370                                                  InsertPos);
   5371   else
   5372     PrevDecl
   5373       = ClassTemplate->findSpecialization(Converted.data(),
   5374                                           Converted.size(), InsertPos);
   5375 
   5376   ClassTemplateSpecializationDecl *Specialization = 0;
   5377 
   5378   // Check whether we can declare a class template specialization in
   5379   // the current scope.
   5380   if (TUK != TUK_Friend &&
   5381       CheckTemplateSpecializationScope(*this, ClassTemplate, PrevDecl,
   5382                                        TemplateNameLoc,
   5383                                        isPartialSpecialization))
   5384     return true;
   5385 
   5386   // The canonical type
   5387   QualType CanonType;
   5388   if (PrevDecl &&
   5389       (PrevDecl->getSpecializationKind() == TSK_Undeclared ||
   5390                TUK == TUK_Friend)) {
   5391     // Since the only prior class template specialization with these
   5392     // arguments was referenced but not declared, or we're only
   5393     // referencing this specialization as a friend, reuse that
   5394     // declaration node as our own, updating its source location and
   5395     // the list of outer template parameters to reflect our new declaration.
   5396     Specialization = PrevDecl;
   5397     Specialization->setLocation(TemplateNameLoc);
   5398     if (TemplateParameterLists.size() > 0) {
   5399       Specialization->setTemplateParameterListsInfo(Context,
   5400                                               TemplateParameterLists.size(),
   5401                                               TemplateParameterLists.data());
   5402     }
   5403     PrevDecl = 0;
   5404     CanonType = Context.getTypeDeclType(Specialization);
   5405   } else if (isPartialSpecialization) {
   5406     // Build the canonical type that describes the converted template
   5407     // arguments of the class template partial specialization.
   5408     TemplateName CanonTemplate = Context.getCanonicalTemplateName(Name);
   5409     CanonType = Context.getTemplateSpecializationType(CanonTemplate,
   5410                                                       Converted.data(),
   5411                                                       Converted.size());
   5412 
   5413     if (Context.hasSameType(CanonType,
   5414                         ClassTemplate->getInjectedClassNameSpecialization())) {
   5415       // C++ [temp.class.spec]p9b3:
   5416       //
   5417       //   -- The argument list of the specialization shall not be identical
   5418       //      to the implicit argument list of the primary template.
   5419       Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template)
   5420         << (TUK == TUK_Definition)
   5421         << FixItHint::CreateRemoval(SourceRange(LAngleLoc, RAngleLoc));
   5422       return CheckClassTemplate(S, TagSpec, TUK, KWLoc, SS,
   5423                                 ClassTemplate->getIdentifier(),
   5424                                 TemplateNameLoc,
   5425                                 Attr,
   5426                                 TemplateParams,
   5427                                 AS_none, /*ModulePrivateLoc=*/SourceLocation(),
   5428                                 TemplateParameterLists.size() - 1,
   5429                                 TemplateParameterLists.data());
   5430     }
   5431 
   5432     // Create a new class template partial specialization declaration node.
   5433     ClassTemplatePartialSpecializationDecl *PrevPartial
   5434       = cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl);
   5435     unsigned SequenceNumber = PrevPartial? PrevPartial->getSequenceNumber()
   5436                             : ClassTemplate->getNextPartialSpecSequenceNumber();
   5437     ClassTemplatePartialSpecializationDecl *Partial
   5438       = ClassTemplatePartialSpecializationDecl::Create(Context, Kind,
   5439                                              ClassTemplate->getDeclContext(),
   5440                                                        KWLoc, TemplateNameLoc,
   5441                                                        TemplateParams,
   5442                                                        ClassTemplate,
   5443                                                        Converted.data(),
   5444                                                        Converted.size(),
   5445                                                        TemplateArgs,
   5446                                                        CanonType,
   5447                                                        PrevPartial,
   5448                                                        SequenceNumber);
   5449     SetNestedNameSpecifier(Partial, SS);
   5450     if (TemplateParameterLists.size() > 1 && SS.isSet()) {
   5451       Partial->setTemplateParameterListsInfo(Context,
   5452                                              TemplateParameterLists.size() - 1,
   5453                                              TemplateParameterLists.data());
   5454     }
   5455 
   5456     if (!PrevPartial)
   5457       ClassTemplate->AddPartialSpecialization(Partial, InsertPos);
   5458     Specialization = Partial;
   5459 
   5460     // If we are providing an explicit specialization of a member class
   5461     // template specialization, make a note of that.
   5462     if (PrevPartial && PrevPartial->getInstantiatedFromMember())
   5463       PrevPartial->setMemberSpecialization();
   5464 
   5465     // Check that all of the template parameters of the class template
   5466     // partial specialization are deducible from the template
   5467     // arguments. If not, this class template partial specialization
   5468     // will never be used.
   5469     llvm::SmallBitVector DeducibleParams(TemplateParams->size());
   5470     MarkUsedTemplateParameters(Partial->getTemplateArgs(), true,
   5471                                TemplateParams->getDepth(),
   5472                                DeducibleParams);
   5473 
   5474     if (!DeducibleParams.all()) {
   5475       unsigned NumNonDeducible = DeducibleParams.size()-DeducibleParams.count();
   5476       Diag(TemplateNameLoc, diag::warn_partial_specs_not_deducible)
   5477         << (NumNonDeducible > 1)
   5478         << SourceRange(TemplateNameLoc, RAngleLoc);
   5479       for (unsigned I = 0, N = DeducibleParams.size(); I != N; ++I) {
   5480         if (!DeducibleParams[I]) {
   5481           NamedDecl *Param = cast<NamedDecl>(TemplateParams->getParam(I));
   5482           if (Param->getDeclName())
   5483             Diag(Param->getLocation(),
   5484                  diag::note_partial_spec_unused_parameter)
   5485               << Param->getDeclName();
   5486           else
   5487             Diag(Param->getLocation(),
   5488                  diag::note_partial_spec_unused_parameter)
   5489               << "<anonymous>";
   5490         }
   5491       }
   5492     }
   5493   } else {
   5494     // Create a new class template specialization declaration node for
   5495     // this explicit specialization or friend declaration.
   5496     Specialization
   5497       = ClassTemplateSpecializationDecl::Create(Context, Kind,
   5498                                              ClassTemplate->getDeclContext(),
   5499                                                 KWLoc, TemplateNameLoc,
   5500                                                 ClassTemplate,
   5501                                                 Converted.data(),
   5502                                                 Converted.size(),
   5503                                                 PrevDecl);
   5504     SetNestedNameSpecifier(Specialization, SS);
   5505     if (TemplateParameterLists.size() > 0) {
   5506       Specialization->setTemplateParameterListsInfo(Context,
   5507                                               TemplateParameterLists.size(),
   5508                                               TemplateParameterLists.data());
   5509     }
   5510 
   5511     if (!PrevDecl)
   5512       ClassTemplate->AddSpecialization(Specialization, InsertPos);
   5513 
   5514     CanonType = Context.getTypeDeclType(Specialization);
   5515   }
   5516 
   5517   // C++ [temp.expl.spec]p6:
   5518   //   If a template, a member template or the member of a class template is
   5519   //   explicitly specialized then that specialization shall be declared
   5520   //   before the first use of that specialization that would cause an implicit
   5521   //   instantiation to take place, in every translation unit in which such a
   5522   //   use occurs; no diagnostic is required.
   5523   if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {
   5524     bool Okay = false;
   5525     for (Decl *Prev = PrevDecl; Prev; Prev = Prev->getPreviousDecl()) {
   5526       // Is there any previous explicit specialization declaration?
   5527       if (getTemplateSpecializationKind(Prev) == TSK_ExplicitSpecialization) {
   5528         Okay = true;
   5529         break;
   5530       }
   5531     }
   5532 
   5533     if (!Okay) {
   5534       SourceRange Range(TemplateNameLoc, RAngleLoc);
   5535       Diag(TemplateNameLoc, diag::err_specialization_after_instantiation)
   5536         << Context.getTypeDeclType(Specialization) << Range;
   5537 
   5538       Diag(PrevDecl->getPointOfInstantiation(),
   5539            diag::note_instantiation_required_here)
   5540         << (PrevDecl->getTemplateSpecializationKind()
   5541                                                 != TSK_ImplicitInstantiation);
   5542       return true;
   5543     }
   5544   }
   5545 
   5546   // If this is not a friend, note that this is an explicit specialization.
   5547   if (TUK != TUK_Friend)
   5548     Specialization->setSpecializationKind(TSK_ExplicitSpecialization);
   5549 
   5550   // Check that this isn't a redefinition of this specialization.
   5551   if (TUK == TUK_Definition) {
   5552     if (RecordDecl *Def = Specialization->getDefinition()) {
   5553       SourceRange Range(TemplateNameLoc, RAngleLoc);
   5554       Diag(TemplateNameLoc, diag::err_redefinition)
   5555         << Context.getTypeDeclType(Specialization) << Range;
   5556       Diag(Def->getLocation(), diag::note_previous_definition);
   5557       Specialization->setInvalidDecl();
   5558       return true;
   5559     }
   5560   }
   5561 
   5562   if (Attr)
   5563     ProcessDeclAttributeList(S, Specialization, Attr);
   5564 
   5565   // Add alignment attributes if necessary; these attributes are checked when
   5566   // the ASTContext lays out the structure.
   5567   if (TUK == TUK_Definition) {
   5568     AddAlignmentAttributesForRecord(Specialization);
   5569     AddMsStructLayoutForRecord(Specialization);
   5570   }
   5571 
   5572   if (ModulePrivateLoc.isValid())
   5573     Diag(Specialization->getLocation(), diag::err_module_private_specialization)
   5574       << (isPartialSpecialization? 1 : 0)
   5575       << FixItHint::CreateRemoval(ModulePrivateLoc);
   5576 
   5577   // Build the fully-sugared type for this class template
   5578   // specialization as the user wrote in the specialization
   5579   // itself. This means that we'll pretty-print the type retrieved
   5580   // from the specialization's declaration the way that the user
   5581   // actually wrote the specialization, rather than formatting the
   5582   // name based on the "canonical" representation used to store the
   5583   // template arguments in the specialization.
   5584   TypeSourceInfo *WrittenTy
   5585     = Context.getTemplateSpecializationTypeInfo(Name, TemplateNameLoc,
   5586                                                 TemplateArgs, CanonType);
   5587   if (TUK != TUK_Friend) {
   5588     Specialization->setTypeAsWritten(WrittenTy);
   5589     Specialization->setTemplateKeywordLoc(TemplateKWLoc);
   5590   }
   5591 
   5592   // C++ [temp.expl.spec]p9:
   5593   //   A template explicit specialization is in the scope of the
   5594   //   namespace in which the template was defined.
   5595   //
   5596   // We actually implement this paragraph where we set the semantic
   5597   // context (in the creation of the ClassTemplateSpecializationDecl),
   5598   // but we also maintain the lexical context where the actual
   5599   // definition occurs.
   5600   Specialization->setLexicalDeclContext(CurContext);
   5601 
   5602   // We may be starting the definition of this specialization.
   5603   if (TUK == TUK_Definition)
   5604     Specialization->startDefinition();
   5605 
   5606   if (TUK == TUK_Friend) {
   5607     FriendDecl *Friend = FriendDecl::Create(Context, CurContext,
   5608                                             TemplateNameLoc,
   5609                                             WrittenTy,
   5610                                             /*FIXME:*/KWLoc);
   5611     Friend->setAccess(AS_public);
   5612     CurContext->addDecl(Friend);
   5613   } else {
   5614     // Add the specialization into its lexical context, so that it can
   5615     // be seen when iterating through the list of declarations in that
   5616     // context. However, specializations are not found by name lookup.
   5617     CurContext->addDecl(Specialization);
   5618   }
   5619   return Specialization;
   5620 }
   5621 
   5622 Decl *Sema::ActOnTemplateDeclarator(Scope *S,
   5623                               MultiTemplateParamsArg TemplateParameterLists,
   5624                                     Declarator &D) {
   5625   Decl *NewDecl = HandleDeclarator(S, D, TemplateParameterLists);
   5626   ActOnDocumentableDecl(NewDecl);
   5627   return NewDecl;
   5628 }
   5629 
   5630 Decl *Sema::ActOnStartOfFunctionTemplateDef(Scope *FnBodyScope,
   5631                                MultiTemplateParamsArg TemplateParameterLists,
   5632                                             Declarator &D) {
   5633   assert(getCurFunctionDecl() == 0 && "Function parsing confused");
   5634   DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
   5635 
   5636   if (FTI.hasPrototype) {
   5637     // FIXME: Diagnose arguments without names in C.
   5638   }
   5639 
   5640   Scope *ParentScope = FnBodyScope->getParent();
   5641 
   5642   D.setFunctionDefinitionKind(FDK_Definition);
   5643   Decl *DP = HandleDeclarator(ParentScope, D,
   5644                               TemplateParameterLists);
   5645   return ActOnStartOfFunctionDef(FnBodyScope, DP);
   5646 }
   5647 
   5648 /// \brief Strips various properties off an implicit instantiation
   5649 /// that has just been explicitly specialized.
   5650 static void StripImplicitInstantiation(NamedDecl *D) {
   5651   D->dropAttrs();
   5652 
   5653   if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
   5654     FD->setInlineSpecified(false);
   5655 
   5656     for (FunctionDecl::param_iterator I = FD->param_begin(),
   5657                                       E = FD->param_end();
   5658          I != E; ++I)
   5659       (*I)->dropAttrs();
   5660   }
   5661 }
   5662 
   5663 /// \brief Compute the diagnostic location for an explicit instantiation
   5664 //  declaration or definition.
   5665 static SourceLocation DiagLocForExplicitInstantiation(
   5666     NamedDecl* D, SourceLocation PointOfInstantiation) {
   5667   // Explicit instantiations following a specialization have no effect and
   5668   // hence no PointOfInstantiation. In that case, walk decl backwards
   5669   // until a valid name loc is found.
   5670   SourceLocation PrevDiagLoc = PointOfInstantiation;
   5671   for (Decl *Prev = D; Prev && !PrevDiagLoc.isValid();
   5672        Prev = Prev->getPreviousDecl()) {
   5673     PrevDiagLoc = Prev->getLocation();
   5674   }
   5675   assert(PrevDiagLoc.isValid() &&
   5676          "Explicit instantiation without point of instantiation?");
   5677   return PrevDiagLoc;
   5678 }
   5679 
   5680 /// \brief Diagnose cases where we have an explicit template specialization
   5681 /// before/after an explicit template instantiation, producing diagnostics
   5682 /// for those cases where they are required and determining whether the
   5683 /// new specialization/instantiation will have any effect.
   5684 ///
   5685 /// \param NewLoc the location of the new explicit specialization or
   5686 /// instantiation.
   5687 ///
   5688 /// \param NewTSK the kind of the new explicit specialization or instantiation.
   5689 ///
   5690 /// \param PrevDecl the previous declaration of the entity.
   5691 ///
   5692 /// \param PrevTSK the kind of the old explicit specialization or instantiatin.
   5693 ///
   5694 /// \param PrevPointOfInstantiation if valid, indicates where the previus
   5695 /// declaration was instantiated (either implicitly or explicitly).
   5696 ///
   5697 /// \param HasNoEffect will be set to true to indicate that the new
   5698 /// specialization or instantiation has no effect and should be ignored.
   5699 ///
   5700 /// \returns true if there was an error that should prevent the introduction of
   5701 /// the new declaration into the AST, false otherwise.
   5702 bool
   5703 Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc,
   5704                                              TemplateSpecializationKind NewTSK,
   5705                                              NamedDecl *PrevDecl,
   5706                                              TemplateSpecializationKind PrevTSK,
   5707                                         SourceLocation PrevPointOfInstantiation,
   5708                                              bool &HasNoEffect) {
   5709   HasNoEffect = false;
   5710 
   5711   switch (NewTSK) {
   5712   case TSK_Undeclared:
   5713   case TSK_ImplicitInstantiation:
   5714     llvm_unreachable("Don't check implicit instantiations here");
   5715 
   5716   case TSK_ExplicitSpecialization:
   5717     switch (PrevTSK) {
   5718     case TSK_Undeclared:
   5719     case TSK_ExplicitSpecialization:
   5720       // Okay, we're just specializing something that is either already
   5721       // explicitly specialized or has merely been mentioned without any
   5722       // instantiation.
   5723       return false;
   5724 
   5725     case TSK_ImplicitInstantiation:
   5726       if (PrevPointOfInstantiation.isInvalid()) {
   5727         // The declaration itself has not actually been instantiated, so it is
   5728         // still okay to specialize it.
   5729         StripImplicitInstantiation(PrevDecl);
   5730         return false;
   5731       }
   5732       // Fall through
   5733 
   5734     case TSK_ExplicitInstantiationDeclaration:
   5735     case TSK_ExplicitInstantiationDefinition:
   5736       assert((PrevTSK == TSK_ImplicitInstantiation ||
   5737               PrevPointOfInstantiation.isValid()) &&
   5738              "Explicit instantiation without point of instantiation?");
   5739 
   5740       // C++ [temp.expl.spec]p6:
   5741       //   If a template, a member template or the member of a class template
   5742       //   is explicitly specialized then that specialization shall be declared
   5743       //   before the first use of that specialization that would cause an
   5744       //   implicit instantiation to take place, in every translation unit in
   5745       //   which such a use occurs; no diagnostic is required.
   5746       for (Decl *Prev = PrevDecl; Prev; Prev = Prev->getPreviousDecl()) {
   5747         // Is there any previous explicit specialization declaration?
   5748         if (getTemplateSpecializationKind(Prev) == TSK_ExplicitSpecialization)
   5749           return false;
   5750       }
   5751 
   5752       Diag(NewLoc, diag::err_specialization_after_instantiation)
   5753         << PrevDecl;
   5754       Diag(PrevPointOfInstantiation, diag::note_instantiation_required_here)
   5755         << (PrevTSK != TSK_ImplicitInstantiation);
   5756 
   5757       return true;
   5758     }
   5759 
   5760   case TSK_ExplicitInstantiationDeclaration:
   5761     switch (PrevTSK) {
   5762     case TSK_ExplicitInstantiationDeclaration:
   5763       // This explicit instantiation declaration is redundant (that's okay).
   5764       HasNoEffect = true;
   5765       return false;
   5766 
   5767     case TSK_Undeclared:
   5768     case TSK_ImplicitInstantiation:
   5769       // We're explicitly instantiating something that may have already been
   5770       // implicitly instantiated; that's fine.
   5771       return false;
   5772 
   5773     case TSK_ExplicitSpecialization:
   5774       // C++0x [temp.explicit]p4:
   5775       //   For a given set of template parameters, if an explicit instantiation
   5776       //   of a template appears after a declaration of an explicit
   5777       //   specialization for that template, the explicit instantiation has no
   5778       //   effect.
   5779       HasNoEffect = true;
   5780       return false;
   5781 
   5782     case TSK_ExplicitInstantiationDefinition:
   5783       // C++0x [temp.explicit]p10:
   5784       //   If an entity is the subject of both an explicit instantiation
   5785       //   declaration and an explicit instantiation definition in the same
   5786       //   translation unit, the definition shall follow the declaration.
   5787       Diag(NewLoc,
   5788            diag::err_explicit_instantiation_declaration_after_definition);
   5789 
   5790       // Explicit instantiations following a specialization have no effect and
   5791       // hence no PrevPointOfInstantiation. In that case, walk decl backwards
   5792       // until a valid name loc is found.
   5793       Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation),
   5794            diag::note_explicit_instantiation_definition_here);
   5795       HasNoEffect = true;
   5796       return false;
   5797     }
   5798 
   5799   case TSK_ExplicitInstantiationDefinition:
   5800     switch (PrevTSK) {
   5801     case TSK_Undeclared:
   5802     case TSK_ImplicitInstantiation:
   5803       // We're explicitly instantiating something that may have already been
   5804       // implicitly instantiated; that's fine.
   5805       return false;
   5806 
   5807     case TSK_ExplicitSpecialization:
   5808       // C++ DR 259, C++0x [temp.explicit]p4:
   5809       //   For a given set of template parameters, if an explicit
   5810       //   instantiation of a template appears after a declaration of
   5811       //   an explicit specialization for that template, the explicit
   5812       //   instantiation has no effect.
   5813       //
   5814       // In C++98/03 mode, we only give an extension warning here, because it
   5815       // is not harmful to try to explicitly instantiate something that
   5816       // has been explicitly specialized.
   5817       Diag(NewLoc, getLangOpts().CPlusPlus11 ?
   5818            diag::warn_cxx98_compat_explicit_instantiation_after_specialization :
   5819            diag::ext_explicit_instantiation_after_specialization)
   5820         << PrevDecl;
   5821       Diag(PrevDecl->getLocation(),
   5822            diag::note_previous_template_specialization);
   5823       HasNoEffect = true;
   5824       return false;
   5825 
   5826     case TSK_ExplicitInstantiationDeclaration:
   5827       // We're explicity instantiating a definition for something for which we
   5828       // were previously asked to suppress instantiations. That's fine.
   5829 
   5830       // C++0x [temp.explicit]p4:
   5831       //   For a given set of template parameters, if an explicit instantiation
   5832       //   of a template appears after a declaration of an explicit
   5833       //   specialization for that template, the explicit instantiation has no
   5834       //   effect.
   5835       for (Decl *Prev = PrevDecl; Prev; Prev = Prev->getPreviousDecl()) {
   5836         // Is there any previous explicit specialization declaration?
   5837         if (getTemplateSpecializationKind(Prev) == TSK_ExplicitSpecialization) {
   5838           HasNoEffect = true;
   5839           break;
   5840         }
   5841       }
   5842 
   5843       return false;
   5844 
   5845     case TSK_ExplicitInstantiationDefinition:
   5846       // C++0x [temp.spec]p5:
   5847       //   For a given template and a given set of template-arguments,
   5848       //     - an explicit instantiation definition shall appear at most once
   5849       //       in a program,
   5850       Diag(NewLoc, diag::err_explicit_instantiation_duplicate)
   5851         << PrevDecl;
   5852       Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation),
   5853            diag::note_previous_explicit_instantiation);
   5854       HasNoEffect = true;
   5855       return false;
   5856     }
   5857   }
   5858 
   5859   llvm_unreachable("Missing specialization/instantiation case?");
   5860 }
   5861 
   5862 /// \brief Perform semantic analysis for the given dependent function
   5863 /// template specialization.
   5864 ///
   5865 /// The only possible way to get a dependent function template specialization
   5866 /// is with a friend declaration, like so:
   5867 ///
   5868 /// \code
   5869 ///   template \<class T> void foo(T);
   5870 ///   template \<class T> class A {
   5871 ///     friend void foo<>(T);
   5872 ///   };
   5873 /// \endcode
   5874 ///
   5875 /// There really isn't any useful analysis we can do here, so we
   5876 /// just store the information.
   5877 bool
   5878 Sema::CheckDependentFunctionTemplateSpecialization(FunctionDecl *FD,
   5879                    const TemplateArgumentListInfo &ExplicitTemplateArgs,
   5880                                                    LookupResult &Previous) {
   5881   // Remove anything from Previous that isn't a function template in
   5882   // the correct context.
   5883   DeclContext *FDLookupContext = FD->getDeclContext()->getRedeclContext();
   5884   LookupResult::Filter F = Previous.makeFilter();
   5885   while (F.hasNext()) {
   5886     NamedDecl *D = F.next()->getUnderlyingDecl();
   5887     if (!isa<FunctionTemplateDecl>(D) ||
   5888         !FDLookupContext->InEnclosingNamespaceSetOf(
   5889                               D->getDeclContext()->getRedeclContext()))
   5890       F.erase();
   5891   }
   5892   F.done();
   5893 
   5894   // Should this be diagnosed here?
   5895   if (Previous.empty()) return true;
   5896 
   5897   FD->setDependentTemplateSpecialization(Context, Previous.asUnresolvedSet(),
   5898                                          ExplicitTemplateArgs);
   5899   return false;
   5900 }
   5901 
   5902 /// \brief Perform semantic analysis for the given function template
   5903 /// specialization.
   5904 ///
   5905 /// This routine performs all of the semantic analysis required for an
   5906 /// explicit function template specialization. On successful completion,
   5907 /// the function declaration \p FD will become a function template
   5908 /// specialization.
   5909 ///
   5910 /// \param FD the function declaration, which will be updated to become a
   5911 /// function template specialization.
   5912 ///
   5913 /// \param ExplicitTemplateArgs the explicitly-provided template arguments,
   5914 /// if any. Note that this may be valid info even when 0 arguments are
   5915 /// explicitly provided as in, e.g., \c void sort<>(char*, char*);
   5916 /// as it anyway contains info on the angle brackets locations.
   5917 ///
   5918 /// \param Previous the set of declarations that may be specialized by
   5919 /// this function specialization.
   5920 bool
   5921 Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD,
   5922                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
   5923                                           LookupResult &Previous) {
   5924   // The set of function template specializations that could match this
   5925   // explicit function template specialization.
   5926   UnresolvedSet<8> Candidates;
   5927 
   5928   DeclContext *FDLookupContext = FD->getDeclContext()->getRedeclContext();
   5929   for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
   5930          I != E; ++I) {
   5931     NamedDecl *Ovl = (*I)->getUnderlyingDecl();
   5932     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Ovl)) {
   5933       // Only consider templates found within the same semantic lookup scope as
   5934       // FD.
   5935       if (!FDLookupContext->InEnclosingNamespaceSetOf(
   5936                                 Ovl->getDeclContext()->getRedeclContext()))
   5937         continue;
   5938 
   5939       // When matching a constexpr member function template specialization
   5940       // against the primary template, we don't yet know whether the
   5941       // specialization has an implicit 'const' (because we don't know whether
   5942       // it will be a static member function until we know which template it
   5943       // specializes), so adjust it now assuming it specializes this template.
   5944       QualType FT = FD->getType();
   5945       if (FD->isConstexpr()) {
   5946         CXXMethodDecl *OldMD =
   5947           dyn_cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl());
   5948         if (OldMD && OldMD->isConst()) {
   5949           const FunctionProtoType *FPT = FT->castAs<FunctionProtoType>();
   5950           FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
   5951           EPI.TypeQuals |= Qualifiers::Const;
   5952           FT = Context.getFunctionType(FPT->getResultType(),
   5953                                        ArrayRef<QualType>(FPT->arg_type_begin(),
   5954                                                           FPT->getNumArgs()),
   5955                                        EPI);
   5956         }
   5957       }
   5958 
   5959       // C++ [temp.expl.spec]p11:
   5960       //   A trailing template-argument can be left unspecified in the
   5961       //   template-id naming an explicit function template specialization
   5962       //   provided it can be deduced from the function argument type.
   5963       // Perform template argument deduction to determine whether we may be
   5964       // specializing this template.
   5965       // FIXME: It is somewhat wasteful to build
   5966       TemplateDeductionInfo Info(FD->getLocation());
   5967       FunctionDecl *Specialization = 0;
   5968       if (TemplateDeductionResult TDK
   5969             = DeduceTemplateArguments(FunTmpl, ExplicitTemplateArgs, FT,
   5970                                       Specialization, Info)) {
   5971         // FIXME: Template argument deduction failed; record why it failed, so
   5972         // that we can provide nifty diagnostics.
   5973         (void)TDK;
   5974         continue;
   5975       }
   5976 
   5977       // Record this candidate.
   5978       Candidates.addDecl(Specialization, I.getAccess());
   5979     }
   5980   }
   5981 
   5982   // Find the most specialized function template.
   5983   UnresolvedSetIterator Result
   5984     = getMostSpecialized(Candidates.begin(), Candidates.end(),
   5985                          TPOC_Other, 0, FD->getLocation(),
   5986                   PDiag(diag::err_function_template_spec_no_match)
   5987                     << FD->getDeclName(),
   5988                   PDiag(diag::err_function_template_spec_ambiguous)
   5989                     << FD->getDeclName() << (ExplicitTemplateArgs != 0),
   5990                   PDiag(diag::note_function_template_spec_matched));
   5991   if (Result == Candidates.end())
   5992     return true;
   5993 
   5994   // Ignore access information;  it doesn't figure into redeclaration checking.
   5995   FunctionDecl *Specialization = cast<FunctionDecl>(*Result);
   5996 
   5997   FunctionTemplateSpecializationInfo *SpecInfo
   5998     = Specialization->getTemplateSpecializationInfo();
   5999   assert(SpecInfo && "Function template specialization info missing?");
   6000 
   6001   // Note: do not overwrite location info if previous template
   6002   // specialization kind was explicit.
   6003   TemplateSpecializationKind TSK = SpecInfo->getTemplateSpecializationKind();
   6004   if (TSK == TSK_Undeclared || TSK == TSK_ImplicitInstantiation) {
   6005     Specialization->setLocation(FD->getLocation());
   6006     // C++11 [dcl.constexpr]p1: An explicit specialization of a constexpr
   6007     // function can differ from the template declaration with respect to
   6008     // the constexpr specifier.
   6009     Specialization->setConstexpr(FD->isConstexpr());
   6010   }
   6011 
   6012   // FIXME: Check if the prior specialization has a point of instantiation.
   6013   // If so, we have run afoul of .
   6014 
   6015   // If this is a friend declaration, then we're not really declaring
   6016   // an explicit specialization.
   6017   bool isFriend = (FD->getFriendObjectKind() != Decl::FOK_None);
   6018 
   6019   // Check the scope of this explicit specialization.
   6020   if (!isFriend &&
   6021       CheckTemplateSpecializationScope(*this,
   6022                                        Specialization->getPrimaryTemplate(),
   6023                                        Specialization, FD->getLocation(),
   6024                                        false))
   6025     return true;
   6026 
   6027   // C++ [temp.expl.spec]p6:
   6028   //   If a template, a member template or the member of a class template is
   6029   //   explicitly specialized then that specialization shall be declared
   6030   //   before the first use of that specialization that would cause an implicit
   6031   //   instantiation to take place, in every translation unit in which such a
   6032   //   use occurs; no diagnostic is required.
   6033   bool HasNoEffect = false;
   6034   if (!isFriend &&
   6035       CheckSpecializationInstantiationRedecl(FD->getLocation(),
   6036                                              TSK_ExplicitSpecialization,
   6037                                              Specialization,
   6038                                    SpecInfo->getTemplateSpecializationKind(),
   6039                                          SpecInfo->getPointOfInstantiation(),
   6040                                              HasNoEffect))
   6041     return true;
   6042 
   6043   // Mark the prior declaration as an explicit specialization, so that later
   6044   // clients know that this is an explicit specialization.
   6045   if (!isFriend) {
   6046     SpecInfo->setTemplateSpecializationKind(TSK_ExplicitSpecialization);
   6047     MarkUnusedFileScopedDecl(Specialization);
   6048   }
   6049 
   6050   // Turn the given function declaration into a function template
   6051   // specialization, with the template arguments from the previous
   6052   // specialization.
   6053   // Take copies of (semantic and syntactic) template argument lists.
   6054   const TemplateArgumentList* TemplArgs = new (Context)
   6055     TemplateArgumentList(Specialization->getTemplateSpecializationArgs());
   6056   FD->setFunctionTemplateSpecialization(Specialization->getPrimaryTemplate(),
   6057                                         TemplArgs, /*InsertPos=*/0,
   6058                                     SpecInfo->getTemplateSpecializationKind(),
   6059                                         ExplicitTemplateArgs);
   6060   FD->setStorageClass(Specialization->getStorageClass());
   6061 
   6062   // The "previous declaration" for this function template specialization is
   6063   // the prior function template specialization.
   6064   Previous.clear();
   6065   Previous.addDecl(Specialization);
   6066   return false;
   6067 }
   6068 
   6069 /// \brief Perform semantic analysis for the given non-template member
   6070 /// specialization.
   6071 ///
   6072 /// This routine performs all of the semantic analysis required for an
   6073 /// explicit member function specialization. On successful completion,
   6074 /// the function declaration \p FD will become a member function
   6075 /// specialization.
   6076 ///
   6077 /// \param Member the member declaration, which will be updated to become a
   6078 /// specialization.
   6079 ///
   6080 /// \param Previous the set of declarations, one of which may be specialized
   6081 /// by this function specialization;  the set will be modified to contain the
   6082 /// redeclared member.
   6083 bool
   6084 Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {
   6085   assert(!isa<TemplateDecl>(Member) && "Only for non-template members");
   6086 
   6087   // Try to find the member we are instantiating.
   6088   NamedDecl *Instantiation = 0;
   6089   NamedDecl *InstantiatedFrom = 0;
   6090   MemberSpecializationInfo *MSInfo = 0;
   6091 
   6092   if (Previous.empty()) {
   6093     // Nowhere to look anyway.
   6094   } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Member)) {
   6095     for (LookupResult::iterator I = Previous.begin(), E = Previous.end();
   6096            I != E; ++I) {
   6097       NamedDecl *D = (*I)->getUnderlyingDecl();
   6098       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
   6099         if (Context.hasSameType(Function->getType(), Method->getType())) {
   6100           Instantiation = Method;
   6101           InstantiatedFrom = Method->getInstantiatedFromMemberFunction();
   6102           MSInfo = Method->getMemberSpecializationInfo();
   6103           break;
   6104         }
   6105       }
   6106     }
   6107   } else if (isa<VarDecl>(Member)) {
   6108     VarDecl *PrevVar;
   6109     if (Previous.isSingleResult() &&
   6110         (PrevVar = dyn_cast<VarDecl>(Previous.getFoundDecl())))
   6111       if (PrevVar->isStaticDataMember()) {
   6112         Instantiation = PrevVar;
   6113         InstantiatedFrom = PrevVar->getInstantiatedFromStaticDataMember();
   6114         MSInfo = PrevVar->getMemberSpecializationInfo();
   6115       }
   6116   } else if (isa<RecordDecl>(Member)) {
   6117     CXXRecordDecl *PrevRecord;
   6118     if (Previous.isSingleResult() &&
   6119         (PrevRecord = dyn_cast<CXXRecordDecl>(Previous.getFoundDecl()))) {
   6120       Instantiation = PrevRecord;
   6121       InstantiatedFrom = PrevRecord->getInstantiatedFromMemberClass();
   6122       MSInfo = PrevRecord->getMemberSpecializationInfo();
   6123     }
   6124   } else if (isa<EnumDecl>(Member)) {
   6125     EnumDecl *PrevEnum;
   6126     if (Previous.isSingleResult() &&
   6127         (PrevEnum = dyn_cast<EnumDecl>(Previous.getFoundDecl()))) {
   6128       Instantiation = PrevEnum;
   6129       InstantiatedFrom = PrevEnum->getInstantiatedFromMemberEnum();
   6130       MSInfo = PrevEnum->getMemberSpecializationInfo();
   6131     }
   6132   }
   6133 
   6134   if (!Instantiation) {
   6135     // There is no previous declaration that matches. Since member
   6136     // specializations are always out-of-line, the caller will complain about
   6137     // this mismatch later.
   6138     return false;
   6139   }
   6140 
   6141   // If this is a friend, just bail out here before we start turning
   6142   // things into explicit specializations.
   6143   if (Member->getFriendObjectKind() != Decl::FOK_None) {
   6144     // Preserve instantiation information.
   6145     if (InstantiatedFrom && isa<CXXMethodDecl>(Member)) {
   6146       cast<CXXMethodDecl>(Member)->setInstantiationOfMemberFunction(
   6147                                       cast<CXXMethodDecl>(InstantiatedFrom),
   6148         cast<CXXMethodDecl>(Instantiation)->getTemplateSpecializationKind());
   6149     } else if (InstantiatedFrom && isa<CXXRecordDecl>(Member)) {
   6150       cast<CXXRecordDecl>(Member)->setInstantiationOfMemberClass(
   6151                                       cast<CXXRecordDecl>(InstantiatedFrom),
   6152         cast<CXXRecordDecl>(Instantiation)->getTemplateSpecializationKind());
   6153     }
   6154 
   6155     Previous.clear();
   6156     Previous.addDecl(Instantiation);
   6157     return false;
   6158   }
   6159 
   6160   // Make sure that this is a specialization of a member.
   6161   if (!InstantiatedFrom) {
   6162     Diag(Member->getLocation(), diag::err_spec_member_not_instantiated)
   6163       << Member;
   6164     Diag(Instantiation->getLocation(), diag::note_specialized_decl);
   6165     return true;
   6166   }
   6167 
   6168   // C++ [temp.expl.spec]p6:
   6169   //   If a template, a member template or the member of a class template is
   6170   //   explicitly specialized then that specialization shall be declared
   6171   //   before the first use of that specialization that would cause an implicit
   6172   //   instantiation to take place, in every translation unit in which such a
   6173   //   use occurs; no diagnostic is required.
   6174   assert(MSInfo && "Member specialization info missing?");
   6175 
   6176   bool HasNoEffect = false;
   6177   if (CheckSpecializationInstantiationRedecl(Member->getLocation(),
   6178                                              TSK_ExplicitSpecialization,
   6179                                              Instantiation,
   6180                                      MSInfo->getTemplateSpecializationKind(),
   6181                                            MSInfo->getPointOfInstantiation(),
   6182                                              HasNoEffect))
   6183     return true;
   6184 
   6185   // Check the scope of this explicit specialization.
   6186   if (CheckTemplateSpecializationScope(*this,
   6187                                        InstantiatedFrom,
   6188                                        Instantiation, Member->getLocation(),
   6189                                        false))
   6190     return true;
   6191 
   6192   // Note that this is an explicit instantiation of a member.
   6193   // the original declaration to note that it is an explicit specialization
   6194   // (if it was previously an implicit instantiation). This latter step
   6195   // makes bookkeeping easier.
   6196   if (isa<FunctionDecl>(Member)) {
   6197     FunctionDecl *InstantiationFunction = cast<FunctionDecl>(Instantiation);
   6198     if (InstantiationFunction->getTemplateSpecializationKind() ==
   6199           TSK_ImplicitInstantiation) {
   6200       InstantiationFunction->setTemplateSpecializationKind(
   6201                                                   TSK_ExplicitSpecialization);
   6202       InstantiationFunction->setLocation(Member->getLocation());
   6203     }
   6204 
   6205     cast<FunctionDecl>(Member)->setInstantiationOfMemberFunction(
   6206                                         cast<CXXMethodDecl>(InstantiatedFrom),
   6207                                                   TSK_ExplicitSpecialization);
   6208     MarkUnusedFileScopedDecl(InstantiationFunction);
   6209   } else if (isa<VarDecl>(Member)) {
   6210     VarDecl *InstantiationVar = cast<VarDecl>(Instantiation);
   6211     if (InstantiationVar->getTemplateSpecializationKind() ==
   6212           TSK_ImplicitInstantiation) {
   6213       InstantiationVar->setTemplateSpecializationKind(
   6214                                                   TSK_ExplicitSpecialization);
   6215       InstantiationVar->setLocation(Member->getLocation());
   6216     }
   6217 
   6218     Context.setInstantiatedFromStaticDataMember(cast<VarDecl>(Member),
   6219                                                 cast<VarDecl>(InstantiatedFrom),
   6220                                                 TSK_ExplicitSpecialization);
   6221     MarkUnusedFileScopedDecl(InstantiationVar);
   6222   } else if (isa<CXXRecordDecl>(Member)) {
   6223     CXXRecordDecl *InstantiationClass = cast<CXXRecordDecl>(Instantiation);
   6224     if (InstantiationClass->getTemplateSpecializationKind() ==
   6225           TSK_ImplicitInstantiation) {
   6226       InstantiationClass->setTemplateSpecializationKind(
   6227                                                    TSK_ExplicitSpecialization);
   6228       InstantiationClass->setLocation(Member->getLocation());
   6229     }
   6230 
   6231     cast<CXXRecordDecl>(Member)->setInstantiationOfMemberClass(
   6232                                         cast<CXXRecordDecl>(InstantiatedFrom),
   6233                                                    TSK_ExplicitSpecialization);
   6234   } else {
   6235     assert(isa<EnumDecl>(Member) && "Only member enums remain");
   6236     EnumDecl *InstantiationEnum = cast<EnumDecl>(Instantiation);
   6237     if (InstantiationEnum->getTemplateSpecializationKind() ==
   6238           TSK_ImplicitInstantiation) {
   6239       InstantiationEnum->setTemplateSpecializationKind(
   6240                                                    TSK_ExplicitSpecialization);
   6241       InstantiationEnum->setLocation(Member->getLocation());
   6242     }
   6243 
   6244     cast<EnumDecl>(Member)->setInstantiationOfMemberEnum(
   6245         cast<EnumDecl>(InstantiatedFrom), TSK_ExplicitSpecialization);
   6246   }
   6247 
   6248   // Save the caller the trouble of having to figure out which declaration
   6249   // this specialization matches.
   6250   Previous.clear();
   6251   Previous.addDecl(Instantiation);
   6252   return false;
   6253 }
   6254 
   6255 /// \brief Check the scope of an explicit instantiation.
   6256 ///
   6257 /// \returns true if a serious error occurs, false otherwise.
   6258 static bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D,
   6259                                             SourceLocation InstLoc,
   6260                                             bool WasQualifiedName) {
   6261   DeclContext *OrigContext= D->getDeclContext()->getEnclosingNamespaceContext();
   6262   DeclContext *CurContext = S.CurContext->getRedeclContext();
   6263 
   6264   if (CurContext->isRecord()) {
   6265     S.Diag(InstLoc, diag::err_explicit_instantiation_in_class)
   6266       << D;
   6267     return true;
   6268   }
   6269 
   6270   // C++11 [temp.explicit]p3:
   6271   //   An explicit instantiation shall appear in an enclosing namespace of its
   6272   //   template. If the name declared in the explicit instantiation is an
   6273   //   unqualified name, the explicit instantiation shall appear in the
   6274   //   namespace where its template is declared or, if that namespace is inline
   6275   //   (7.3.1), any namespace from its enclosing namespace set.
   6276   //
   6277   // This is DR275, which we do not retroactively apply to C++98/03.
   6278   if (WasQualifiedName) {
   6279     if (CurContext->Encloses(OrigContext))
   6280       return false;
   6281   } else {
   6282     if (CurContext->InEnclosingNamespaceSetOf(OrigContext))
   6283       return false;
   6284   }
   6285 
   6286   if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(OrigContext)) {
   6287     if (WasQualifiedName)
   6288       S.Diag(InstLoc,
   6289              S.getLangOpts().CPlusPlus11?
   6290                diag::err_explicit_instantiation_out_of_scope :
   6291                diag::warn_explicit_instantiation_out_of_scope_0x)
   6292         << D << NS;
   6293     else
   6294       S.Diag(InstLoc,
   6295              S.getLangOpts().CPlusPlus11?
   6296                diag::err_explicit_instantiation_unqualified_wrong_namespace :
   6297                diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x)
   6298         << D << NS;
   6299   } else
   6300     S.Diag(InstLoc,
   6301            S.getLangOpts().CPlusPlus11?
   6302              diag::err_explicit_instantiation_must_be_global :
   6303              diag::warn_explicit_instantiation_must_be_global_0x)
   6304       << D;
   6305   S.Diag(D->getLocation(), diag::note_explicit_instantiation_here);
   6306   return false;
   6307 }
   6308 
   6309 /// \brief Determine whether the given scope specifier has a template-id in it.
   6310 static bool ScopeSpecifierHasTemplateId(const CXXScopeSpec &SS) {
   6311   if (!SS.isSet())
   6312     return false;
   6313 
   6314   // C++11 [temp.explicit]p3:
   6315   //   If the explicit instantiation is for a member function, a member class
   6316   //   or a static data member of a class template specialization, the name of
   6317   //   the class template specialization in the qualified-id for the member
   6318   //   name shall be a simple-template-id.
   6319   //
   6320   // C++98 has the same restriction, just worded differently.
   6321   for (NestedNameSpecifier *NNS = (NestedNameSpecifier *)SS.getScopeRep();
   6322        NNS; NNS = NNS->getPrefix())
   6323     if (const Type *T = NNS->getAsType())
   6324       if (isa<TemplateSpecializationType>(T))
   6325         return true;
   6326 
   6327   return false;
   6328 }
   6329 
   6330 // Explicit instantiation of a class template specialization
   6331 DeclResult
   6332 Sema::ActOnExplicitInstantiation(Scope *S,
   6333                                  SourceLocation ExternLoc,
   6334                                  SourceLocation TemplateLoc,
   6335                                  unsigned TagSpec,
   6336                                  SourceLocation KWLoc,
   6337                                  const CXXScopeSpec &SS,
   6338                                  TemplateTy TemplateD,
   6339                                  SourceLocation TemplateNameLoc,
   6340                                  SourceLocation LAngleLoc,
   6341                                  ASTTemplateArgsPtr TemplateArgsIn,
   6342                                  SourceLocation RAngleLoc,
   6343                                  AttributeList *Attr) {
   6344   // Find the class template we're specializing
   6345   TemplateName Name = TemplateD.getAsVal<TemplateName>();
   6346   ClassTemplateDecl *ClassTemplate
   6347     = cast<ClassTemplateDecl>(Name.getAsTemplateDecl());
   6348 
   6349   // Check that the specialization uses the same tag kind as the
   6350   // original template.
   6351   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
   6352   assert(Kind != TTK_Enum &&
   6353          "Invalid enum tag in class template explicit instantiation!");
   6354   if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(),
   6355                                     Kind, /*isDefinition*/false, KWLoc,
   6356                                     *ClassTemplate->getIdentifier())) {
   6357     Diag(KWLoc, diag::err_use_with_wrong_tag)
   6358       << ClassTemplate
   6359       << FixItHint::CreateReplacement(KWLoc,
   6360                             ClassTemplate->getTemplatedDecl()->getKindName());
   6361     Diag(ClassTemplate->getTemplatedDecl()->getLocation(),
   6362          diag::note_previous_use);
   6363     Kind = ClassTemplate->getTemplatedDecl()->getTagKind();
   6364   }
   6365 
   6366   // C++0x [temp.explicit]p2:
   6367   //   There are two forms of explicit instantiation: an explicit instantiation
   6368   //   definition and an explicit instantiation declaration. An explicit
   6369   //   instantiation declaration begins with the extern keyword. [...]
   6370   TemplateSpecializationKind TSK
   6371     = ExternLoc.isInvalid()? TSK_ExplicitInstantiationDefinition
   6372                            : TSK_ExplicitInstantiationDeclaration;
   6373 
   6374   // Translate the parser's template argument list in our AST format.
   6375   TemplateArgumentListInfo TemplateArgs(LAngleLoc, RAngleLoc);
   6376   translateTemplateArguments(TemplateArgsIn, TemplateArgs);
   6377 
   6378   // Check that the template argument list is well-formed for this
   6379   // template.
   6380   SmallVector<TemplateArgument, 4> Converted;
   6381   if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc,
   6382                                 TemplateArgs, false, Converted))
   6383     return true;
   6384 
   6385   // Find the class template specialization declaration that
   6386   // corresponds to these arguments.
   6387   void *InsertPos = 0;
   6388   ClassTemplateSpecializationDecl *PrevDecl
   6389     = ClassTemplate->findSpecialization(Converted.data(),
   6390                                         Converted.size(), InsertPos);
   6391 
   6392   TemplateSpecializationKind PrevDecl_TSK
   6393     = PrevDecl ? PrevDecl->getTemplateSpecializationKind() : TSK_Undeclared;
   6394 
   6395   // C++0x [temp.explicit]p2:
   6396   //   [...] An explicit instantiation shall appear in an enclosing
   6397   //   namespace of its template. [...]
   6398   //
   6399   // This is C++ DR 275.
   6400   if (CheckExplicitInstantiationScope(*this, ClassTemplate, TemplateNameLoc,
   6401                                       SS.isSet()))
   6402     return true;
   6403 
   6404   ClassTemplateSpecializationDecl *Specialization = 0;
   6405 
   6406   bool HasNoEffect = false;
   6407   if (PrevDecl) {
   6408     if (CheckSpecializationInstantiationRedecl(TemplateNameLoc, TSK,
   6409                                                PrevDecl, PrevDecl_TSK,
   6410                                             PrevDecl->getPointOfInstantiation(),
   6411                                                HasNoEffect))
   6412       return PrevDecl;
   6413 
   6414     // Even though HasNoEffect == true means that this explicit instantiation
   6415     // has no effect on semantics, we go on to put its syntax in the AST.
   6416 
   6417     if (PrevDecl_TSK == TSK_ImplicitInstantiation ||
   6418         PrevDecl_TSK == TSK_Undeclared) {
   6419       // Since the only prior class template specialization with these
   6420       // arguments was referenced but not declared, reuse that
   6421       // declaration node as our own, updating the source location
   6422       // for the template name to reflect our new declaration.
   6423       // (Other source locations will be updated later.)
   6424       Specialization = PrevDecl;
   6425       Specialization->setLocation(TemplateNameLoc);
   6426       PrevDecl = 0;
   6427     }
   6428   }
   6429 
   6430   if (!Specialization) {
   6431     // Create a new class template specialization declaration node for
   6432     // this explicit specialization.
   6433     Specialization
   6434       = ClassTemplateSpecializationDecl::Create(Context, Kind,
   6435                                              ClassTemplate->getDeclContext(),
   6436                                                 KWLoc, TemplateNameLoc,
   6437                                                 ClassTemplate,
   6438                                                 Converted.data(),
   6439                                                 Converted.size(),
   6440                                                 PrevDecl);
   6441     SetNestedNameSpecifier(Specialization, SS);
   6442 
   6443     if (!HasNoEffect && !PrevDecl) {
   6444       // Insert the new specialization.
   6445       ClassTemplate->AddSpecialization(Specialization, InsertPos);
   6446     }
   6447   }
   6448 
   6449   // Build the fully-sugared type for this explicit instantiation as
   6450   // the user wrote in the explicit instantiation itself. This means
   6451   // that we'll pretty-print the type retrieved from the
   6452   // specialization's declaration the way that the user actually wrote
   6453   // the explicit instantiation, rather than formatting the name based
   6454   // on the "canonical" representation used to store the template
   6455   // arguments in the specialization.
   6456   TypeSourceInfo *WrittenTy
   6457     = Context.getTemplateSpecializationTypeInfo(Name, TemplateNameLoc,
   6458                                                 TemplateArgs,
   6459                                   Context.getTypeDeclType(Specialization));
   6460   Specialization->setTypeAsWritten(WrittenTy);
   6461 
   6462   // Set source locations for keywords.
   6463   Specialization->setExternLoc(ExternLoc);
   6464   Specialization->setTemplateKeywordLoc(TemplateLoc);
   6465 
   6466   if (Attr)
   6467     ProcessDeclAttributeList(S, Specialization, Attr);
   6468 
   6469   // Add the explicit instantiation into its lexical context. However,
   6470   // since explicit instantiations are never found by name lookup, we
   6471   // just put it into the declaration context directly.
   6472   Specialization->setLexicalDeclContext(CurContext);
   6473   CurContext->addDecl(Specialization);
   6474 
   6475   // Syntax is now OK, so return if it has no other effect on semantics.
   6476   if (HasNoEffect) {
   6477     // Set the template specialization kind.
   6478     Specialization->setTemplateSpecializationKind(TSK);
   6479     return Specialization;
   6480   }
   6481 
   6482   // C++ [temp.explicit]p3:
   6483   //   A definition of a class template or class member template
   6484   //   shall be in scope at the point of the explicit instantiation of
   6485   //   the class template or class member template.
   6486   //
   6487   // This check comes when we actually try to perform the
   6488   // instantiation.
   6489   ClassTemplateSpecializationDecl *Def
   6490     = cast_or_null<ClassTemplateSpecializationDecl>(
   6491                                               Specialization->getDefinition());
   6492   if (!Def)
   6493     InstantiateClassTemplateSpecialization(TemplateNameLoc, Specialization, TSK);
   6494   else if (TSK == TSK_ExplicitInstantiationDefinition) {
   6495     MarkVTableUsed(TemplateNameLoc, Specialization, true);
   6496     Specialization->setPointOfInstantiation(Def->getPointOfInstantiation());
   6497   }
   6498 
   6499   // Instantiate the members of this class template specialization.
   6500   Def = cast_or_null<ClassTemplateSpecializationDecl>(
   6501                                        Specialization->getDefinition());
   6502   if (Def) {
   6503     TemplateSpecializationKind Old_TSK = Def->getTemplateSpecializationKind();
   6504 
   6505     // Fix a TSK_ExplicitInstantiationDeclaration followed by a
   6506     // TSK_ExplicitInstantiationDefinition
   6507     if (Old_TSK == TSK_ExplicitInstantiationDeclaration &&
   6508         TSK == TSK_ExplicitInstantiationDefinition)
   6509       Def->setTemplateSpecializationKind(TSK);
   6510 
   6511     InstantiateClassTemplateSpecializationMembers(TemplateNameLoc, Def, TSK);
   6512   }
   6513 
   6514   // Set the template specialization kind.
   6515   Specialization->setTemplateSpecializationKind(TSK);
   6516   return Specialization;
   6517 }
   6518 
   6519 // Explicit instantiation of a member class of a class template.
   6520 DeclResult
   6521 Sema::ActOnExplicitInstantiation(Scope *S,
   6522                                  SourceLocation ExternLoc,
   6523                                  SourceLocation TemplateLoc,
   6524                                  unsigned TagSpec,
   6525                                  SourceLocation KWLoc,
   6526                                  CXXScopeSpec &SS,
   6527                                  IdentifierInfo *Name,
   6528                                  SourceLocation NameLoc,
   6529                                  AttributeList *Attr) {
   6530 
   6531   bool Owned = false;
   6532   bool IsDependent = false;
   6533   Decl *TagD = ActOnTag(S, TagSpec, Sema::TUK_Reference,
   6534                         KWLoc, SS, Name, NameLoc, Attr, AS_none,
   6535                         /*ModulePrivateLoc=*/SourceLocation(),
   6536                         MultiTemplateParamsArg(), Owned, IsDependent,
   6537                         SourceLocation(), false, TypeResult());
   6538   assert(!IsDependent && "explicit instantiation of dependent name not yet handled");
   6539 
   6540   if (!TagD)
   6541     return true;
   6542 
   6543   TagDecl *Tag = cast<TagDecl>(TagD);
   6544   assert(!Tag->isEnum() && "shouldn't see enumerations here");
   6545 
   6546   if (Tag->isInvalidDecl())
   6547     return true;
   6548 
   6549   CXXRecordDecl *Record = cast<CXXRecordDecl>(Tag);
   6550   CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass();
   6551   if (!Pattern) {
   6552     Diag(TemplateLoc, diag::err_explicit_instantiation_nontemplate_type)
   6553       << Context.getTypeDeclType(Record);
   6554     Diag(Record->getLocation(), diag::note_nontemplate_decl_here);
   6555     return true;
   6556   }
   6557 
   6558   // C++0x [temp.explicit]p2:
   6559   //   If the explicit instantiation is for a class or member class, the
   6560   //   elaborated-type-specifier in the declaration shall include a
   6561   //   simple-template-id.
   6562   //
   6563   // C++98 has the same restriction, just worded differently.
   6564   if (!ScopeSpecifierHasTemplateId(SS))
   6565     Diag(TemplateLoc, diag::ext_explicit_instantiation_without_qualified_id)
   6566       << Record << SS.getRange();
   6567 
   6568   // C++0x [temp.explicit]p2:
   6569   //   There are two forms of explicit instantiation: an explicit instantiation
   6570   //   definition and an explicit instantiation declaration. An explicit
   6571   //   instantiation declaration begins with the extern keyword. [...]
   6572   TemplateSpecializationKind TSK
   6573     = ExternLoc.isInvalid()? TSK_ExplicitInstantiationDefinition
   6574                            : TSK_ExplicitInstantiationDeclaration;
   6575 
   6576   // C++0x [temp.explicit]p2:
   6577   //   [...] An explicit instantiation shall appear in an enclosing
   6578   //   namespace of its template. [...]
   6579   //
   6580   // This is C++ DR 275.
   6581   CheckExplicitInstantiationScope(*this, Record, NameLoc, true);
   6582 
   6583   // Verify that it is okay to explicitly instantiate here.
   6584   CXXRecordDecl *PrevDecl
   6585     = cast_or_null<CXXRecordDecl>(Record->getPreviousDecl());
   6586   if (!PrevDecl && Record->getDefinition())
   6587     PrevDecl = Record;
   6588   if (PrevDecl) {
   6589     MemberSpecializationInfo *MSInfo = PrevDecl->getMemberSpecializationInfo();
   6590     bool HasNoEffect = false;
   6591     assert(MSInfo && "No member specialization information?");
   6592     if (CheckSpecializationInstantiationRedecl(TemplateLoc, TSK,
   6593                                                PrevDecl,
   6594                                         MSInfo->getTemplateSpecializationKind(),
   6595                                              MSInfo->getPointOfInstantiation(),
   6596                                                HasNoEffect))
   6597       return true;
   6598     if (HasNoEffect)
   6599       return TagD;
   6600   }
   6601 
   6602   CXXRecordDecl *RecordDef
   6603     = cast_or_null<CXXRecordDecl>(Record->getDefinition());
   6604   if (!RecordDef) {
   6605     // C++ [temp.explicit]p3:
   6606     //   A definition of a member class of a class template shall be in scope
   6607     //   at the point of an explicit instantiation of the member class.
   6608     CXXRecordDecl *Def
   6609       = cast_or_null<CXXRecordDecl>(Pattern->getDefinition());
   6610     if (!Def) {
   6611       Diag(TemplateLoc, diag::err_explicit_instantiation_undefined_member)
   6612         << 0 << Record->getDeclName() << Record->getDeclContext();
   6613       Diag(Pattern->getLocation(), diag::note_forward_declaration)
   6614         << Pattern;
   6615       return true;
   6616     } else {
   6617       if (InstantiateClass(NameLoc, Record, Def,
   6618                            getTemplateInstantiationArgs(Record),
   6619                            TSK))
   6620         return true;
   6621 
   6622       RecordDef = cast_or_null<CXXRecordDecl>(Record->getDefinition());
   6623       if (!RecordDef)
   6624         return true;
   6625     }
   6626   }
   6627 
   6628   // Instantiate all of the members of the class.
   6629   InstantiateClassMembers(NameLoc, RecordDef,
   6630                           getTemplateInstantiationArgs(Record), TSK);
   6631 
   6632   if (TSK == TSK_ExplicitInstantiationDefinition)
   6633     MarkVTableUsed(NameLoc, RecordDef, true);
   6634 
   6635   // FIXME: We don't have any representation for explicit instantiations of
   6636   // member classes. Such a representation is not needed for compilation, but it
   6637   // should be available for clients that want to see all of the declarations in
   6638   // the source code.
   6639   return TagD;
   6640 }
   6641 
   6642 DeclResult Sema::ActOnExplicitInstantiation(Scope *S,
   6643                                             SourceLocation ExternLoc,
   6644                                             SourceLocation TemplateLoc,
   6645                                             Declarator &D) {
   6646   // Explicit instantiations always require a name.
   6647   // TODO: check if/when DNInfo should replace Name.
   6648   DeclarationNameInfo NameInfo = GetNameForDeclarator(D);
   6649   DeclarationName Name = NameInfo.getName();
   6650   if (!Name) {
   6651     if (!D.isInvalidType())
   6652       Diag(D.getDeclSpec().getLocStart(),
   6653            diag::err_explicit_instantiation_requires_name)
   6654         << D.getDeclSpec().getSourceRange()
   6655         << D.getSourceRange();
   6656 
   6657     return true;
   6658   }
   6659 
   6660   // The scope passed in may not be a decl scope.  Zip up the scope tree until
   6661   // we find one that is.
   6662   while ((S->getFlags() & Scope::DeclScope) == 0 ||
   6663          (S->getFlags() & Scope::TemplateParamScope) != 0)
   6664     S = S->getParent();
   6665 
   6666   // Determine the type of the declaration.
   6667   TypeSourceInfo *T = GetTypeForDeclarator(D, S);
   6668   QualType R = T->getType();
   6669   if (R.isNull())
   6670     return true;
   6671 
   6672   // C++ [dcl.stc]p1:
   6673   //   A storage-class-specifier shall not be specified in [...] an explicit
   6674   //   instantiation (14.7.2) directive.
   6675   if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {
   6676     Diag(D.getIdentifierLoc(), diag::err_explicit_instantiation_of_typedef)
   6677       << Name;
   6678     return true;
   6679   } else if (D.getDeclSpec().getStorageClassSpec()
   6680                                                 != DeclSpec::SCS_unspecified) {
   6681     // Complain about then remove the storage class specifier.
   6682     Diag(D.getIdentifierLoc(), diag::err_explicit_instantiation_storage_class)
   6683       << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());
   6684 
   6685     D.getMutableDeclSpec().ClearStorageClassSpecs();
   6686   }
   6687 
   6688   // C++0x [temp.explicit]p1:
   6689   //   [...] An explicit instantiation of a function template shall not use the
   6690   //   inline or constexpr specifiers.
   6691   // Presumably, this also applies to member functions of class templates as
   6692   // well.
   6693   if (D.getDeclSpec().isInlineSpecified())
   6694     Diag(D.getDeclSpec().getInlineSpecLoc(),
   6695          getLangOpts().CPlusPlus11 ?
   6696            diag::err_explicit_instantiation_inline :
   6697            diag::warn_explicit_instantiation_inline_0x)
   6698       << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
   6699   if (D.getDeclSpec().isConstexprSpecified())
   6700     // FIXME: Add a fix-it to remove the 'constexpr' and add a 'const' if one is
   6701     // not already specified.
   6702     Diag(D.getDeclSpec().getConstexprSpecLoc(),
   6703          diag::err_explicit_instantiation_constexpr);
   6704 
   6705   // C++0x [temp.explicit]p2:
   6706   //   There are two forms of explicit instantiation: an explicit instantiation
   6707   //   definition and an explicit instantiation declaration. An explicit
   6708   //   instantiation declaration begins with the extern keyword. [...]
   6709   TemplateSpecializationKind TSK
   6710     = ExternLoc.isInvalid()? TSK_ExplicitInstantiationDefinition
   6711                            : TSK_ExplicitInstantiationDeclaration;
   6712 
   6713   LookupResult Previous(*this, NameInfo, LookupOrdinaryName);
   6714   LookupParsedName(Previous, S, &D.getCXXScopeSpec());
   6715 
   6716   if (!R->isFunctionType()) {
   6717     // C++ [temp.explicit]p1:
   6718     //   A [...] static data member of a class template can be explicitly
   6719     //   instantiated from the member definition associated with its class
   6720     //   template.
   6721     if (Previous.isAmbiguous())
   6722       return true;
   6723 
   6724     VarDecl *Prev = Previous.getAsSingle<VarDecl>();
   6725     if (!Prev || !Prev->isStaticDataMember()) {
   6726       // We expect to see a data data member here.
   6727       Diag(D.getIdentifierLoc(), diag::err_explicit_instantiation_not_known)
   6728         << Name;
   6729       for (LookupResult::iterator P = Previous.begin(), PEnd = Previous.end();
   6730            P != PEnd; ++P)
   6731         Diag((*P)->getLocation(), diag::note_explicit_instantiation_here);
   6732       return true;
   6733     }
   6734 
   6735     if (!Prev->getInstantiatedFromStaticDataMember()) {
   6736       // FIXME: Check for explicit specialization?
   6737       Diag(D.getIdentifierLoc(),
   6738            diag::err_explicit_instantiation_data_member_not_instantiated)
   6739         << Prev;
   6740       Diag(Prev->getLocation(), diag::note_explicit_instantiation_here);
   6741       // FIXME: Can we provide a note showing where this was declared?
   6742       return true;
   6743     }
   6744 
   6745     // C++0x [temp.explicit]p2:
   6746     //   If the explicit instantiation is for a member function, a member class
   6747     //   or a static data member of a class template specialization, the name of
   6748     //   the class template specialization in the qualified-id for the member
   6749     //   name shall be a simple-template-id.
   6750     //
   6751     // C++98 has the same restriction, just worded differently.
   6752     if (!ScopeSpecifierHasTemplateId(D.getCXXScopeSpec()))
   6753       Diag(D.getIdentifierLoc(),
   6754            diag::ext_explicit_instantiation_without_qualified_id)
   6755         << Prev << D.getCXXScopeSpec().getRange();
   6756 
   6757     // Check the scope of this explicit instantiation.
   6758     CheckExplicitInstantiationScope(*this, Prev, D.getIdentifierLoc(), true);
   6759 
   6760     // Verify that it is okay to explicitly instantiate here.
   6761     MemberSpecializationInfo *MSInfo = Prev->getMemberSpecializationInfo();
   6762     assert(MSInfo && "Missing static data member specialization info?");
   6763     bool HasNoEffect = false;
   6764     if (CheckSpecializationInstantiationRedecl(D.getIdentifierLoc(), TSK, Prev,
   6765                                         MSInfo->getTemplateSpecializationKind(),
   6766                                               MSInfo->getPointOfInstantiation(),
   6767                                                HasNoEffect))
   6768       return true;
   6769     if (HasNoEffect)
   6770       return (Decl*) 0;
   6771 
   6772     // Instantiate static data member.
   6773     Prev->setTemplateSpecializationKind(TSK, D.getIdentifierLoc());
   6774     if (TSK == TSK_ExplicitInstantiationDefinition)
   6775       InstantiateStaticDataMemberDefinition(D.getIdentifierLoc(), Prev);
   6776 
   6777     // FIXME: Create an ExplicitInstantiation node?
   6778     return (Decl*) 0;
   6779   }
   6780 
   6781   // If the declarator is a template-id, translate the parser's template
   6782   // argument list into our AST format.
   6783   bool HasExplicitTemplateArgs = false;
   6784   TemplateArgumentListInfo TemplateArgs;
   6785   if (D.getName().getKind() == UnqualifiedId::IK_TemplateId) {
   6786     TemplateIdAnnotation *TemplateId = D.getName().TemplateId;
   6787     TemplateArgs.setLAngleLoc(TemplateId->LAngleLoc);
   6788     TemplateArgs.setRAngleLoc(TemplateId->RAngleLoc);
   6789     ASTTemplateArgsPtr TemplateArgsPtr(TemplateId->getTemplateArgs(),
   6790                                        TemplateId->NumArgs);
   6791     translateTemplateArguments(TemplateArgsPtr, TemplateArgs);
   6792     HasExplicitTemplateArgs = true;
   6793   }
   6794 
   6795   // C++ [temp.explicit]p1:
   6796   //   A [...] function [...] can be explicitly instantiated from its template.
   6797   //   A member function [...] of a class template can be explicitly
   6798   //  instantiated from the member definition associated with its class
   6799   //  template.
   6800   UnresolvedSet<8> Matches;
   6801   for (LookupResult::iterator P = Previous.begin(), PEnd = Previous.end();
   6802        P != PEnd; ++P) {
   6803     NamedDecl *Prev = *P;
   6804     if (!HasExplicitTemplateArgs) {
   6805       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Prev)) {
   6806         if (Context.hasSameUnqualifiedType(Method->getType(), R)) {
   6807           Matches.clear();
   6808 
   6809           Matches.addDecl(Method, P.getAccess());
   6810           if (Method->getTemplateSpecializationKind() == TSK_Undeclared)
   6811             break;
   6812         }
   6813       }
   6814     }
   6815 
   6816     FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Prev);
   6817     if (!FunTmpl)
   6818       continue;
   6819 
   6820     TemplateDeductionInfo Info(D.getIdentifierLoc());
   6821     FunctionDecl *Specialization = 0;
   6822     if (TemplateDeductionResult TDK
   6823           = DeduceTemplateArguments(FunTmpl,
   6824                                (HasExplicitTemplateArgs ? &TemplateArgs : 0),
   6825                                     R, Specialization, Info)) {
   6826       // FIXME: Keep track of almost-matches?
   6827       (void)TDK;
   6828       continue;
   6829     }
   6830 
   6831     Matches.addDecl(Specialization, P.getAccess());
   6832   }
   6833 
   6834   // Find the most specialized function template specialization.
   6835   UnresolvedSetIterator Result
   6836     = getMostSpecialized(Matches.begin(), Matches.end(), TPOC_Other, 0,
   6837                          D.getIdentifierLoc(),
   6838                      PDiag(diag::err_explicit_instantiation_not_known) << Name,
   6839                      PDiag(diag::err_explicit_instantiation_ambiguous) << Name,
   6840                          PDiag(diag::note_explicit_instantiation_candidate));
   6841 
   6842   if (Result == Matches.end())
   6843     return true;
   6844 
   6845   // Ignore access control bits, we don't need them for redeclaration checking.
   6846   FunctionDecl *Specialization = cast<FunctionDecl>(*Result);
   6847 
   6848   if (Specialization->getTemplateSpecializationKind() == TSK_Undeclared) {
   6849     Diag(D.getIdentifierLoc(),
   6850          diag::err_explicit_instantiation_member_function_not_instantiated)
   6851       << Specialization
   6852       << (Specialization->getTemplateSpecializationKind() ==
   6853           TSK_ExplicitSpecialization);
   6854     Diag(Specialization->getLocation(), diag::note_explicit_instantiation_here);
   6855     return true;
   6856   }
   6857 
   6858   FunctionDecl *PrevDecl = Specialization->getPreviousDecl();
   6859   if (!PrevDecl && Specialization->isThisDeclarationADefinition())
   6860     PrevDecl = Specialization;
   6861 
   6862   if (PrevDecl) {
   6863     bool HasNoEffect = false;
   6864     if (CheckSpecializationInstantiationRedecl(D.getIdentifierLoc(), TSK,
   6865                                                PrevDecl,
   6866                                      PrevDecl->getTemplateSpecializationKind(),
   6867                                           PrevDecl->getPointOfInstantiation(),
   6868                                                HasNoEffect))
   6869       return true;
   6870 
   6871     // FIXME: We may still want to build some representation of this
   6872     // explicit specialization.
   6873     if (HasNoEffect)
   6874       return (Decl*) 0;
   6875   }
   6876 
   6877   Specialization->setTemplateSpecializationKind(TSK, D.getIdentifierLoc());
   6878   AttributeList *Attr = D.getDeclSpec().getAttributes().getList();
   6879   if (Attr)
   6880     ProcessDeclAttributeList(S, Specialization, Attr);
   6881 
   6882   if (TSK == TSK_ExplicitInstantiationDefinition)
   6883     InstantiateFunctionDefinition(D.getIdentifierLoc(), Specialization);
   6884 
   6885   // C++0x [temp.explicit]p2:
   6886   //   If the explicit instantiation is for a member function, a member class
   6887   //   or a static data member of a class template specialization, the name of
   6888   //   the class template specialization in the qualified-id for the member
   6889   //   name shall be a simple-template-id.
   6890   //
   6891   // C++98 has the same restriction, just worded differently.
   6892   FunctionTemplateDecl *FunTmpl = Specialization->getPrimaryTemplate();
   6893   if (D.getName().getKind() != UnqualifiedId::IK_TemplateId && !FunTmpl &&
   6894       D.getCXXScopeSpec().isSet() &&
   6895       !ScopeSpecifierHasTemplateId(D.getCXXScopeSpec()))
   6896     Diag(D.getIdentifierLoc(),
   6897          diag::ext_explicit_instantiation_without_qualified_id)
   6898     << Specialization << D.getCXXScopeSpec().getRange();
   6899 
   6900   CheckExplicitInstantiationScope(*this,
   6901                    FunTmpl? (NamedDecl *)FunTmpl
   6902                           : Specialization->getInstantiatedFromMemberFunction(),
   6903                                   D.getIdentifierLoc(),
   6904                                   D.getCXXScopeSpec().isSet());
   6905 
   6906   // FIXME: Create some kind of ExplicitInstantiationDecl here.
   6907   return (Decl*) 0;
   6908 }
   6909 
   6910 TypeResult
   6911 Sema::ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
   6912                         const CXXScopeSpec &SS, IdentifierInfo *Name,
   6913                         SourceLocation TagLoc, SourceLocation NameLoc) {
   6914   // This has to hold, because SS is expected to be defined.
   6915   assert(Name && "Expected a name in a dependent tag");
   6916 
   6917   NestedNameSpecifier *NNS
   6918     = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
   6919   if (!NNS)
   6920     return true;
   6921 
   6922   TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec);
   6923 
   6924   if (TUK == TUK_Declaration || TUK == TUK_Definition) {
   6925     Diag(NameLoc, diag::err_dependent_tag_decl)
   6926       << (TUK == TUK_Definition) << Kind << SS.getRange();
   6927     return true;
   6928   }
   6929 
   6930   // Create the resulting type.
   6931   ElaboratedTypeKeyword Kwd = TypeWithKeyword::getKeywordForTagTypeKind(Kind);
   6932   QualType Result = Context.getDependentNameType(Kwd, NNS, Name);
   6933 
   6934   // Create type-source location information for this type.
   6935   TypeLocBuilder TLB;
   6936   DependentNameTypeLoc TL = TLB.push<DependentNameTypeLoc>(Result);
   6937   TL.setElaboratedKeywordLoc(TagLoc);
   6938   TL.setQualifierLoc(SS.getWithLocInContext(Context));
   6939   TL.setNameLoc(NameLoc);
   6940   return CreateParsedType(Result, TLB.getTypeSourceInfo(Context, Result));
   6941 }
   6942 
   6943 TypeResult
   6944 Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc,
   6945                         const CXXScopeSpec &SS, const IdentifierInfo &II,
   6946                         SourceLocation IdLoc) {
   6947   if (SS.isInvalid())
   6948     return true;
   6949 
   6950   if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())
   6951     Diag(TypenameLoc,
   6952          getLangOpts().CPlusPlus11 ?
   6953            diag::warn_cxx98_compat_typename_outside_of_template :
   6954            diag::ext_typename_outside_of_template)
   6955       << FixItHint::CreateRemoval(TypenameLoc);
   6956 
   6957   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   6958   QualType T = CheckTypenameType(TypenameLoc.isValid()? ETK_Typename : ETK_None,
   6959                                  TypenameLoc, QualifierLoc, II, IdLoc);
   6960   if (T.isNull())
   6961     return true;
   6962 
   6963   TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T);
   6964   if (isa<DependentNameType>(T)) {
   6965     DependentNameTypeLoc TL = TSI->getTypeLoc().castAs<DependentNameTypeLoc>();
   6966     TL.setElaboratedKeywordLoc(TypenameLoc);
   6967     TL.setQualifierLoc(QualifierLoc);
   6968     TL.setNameLoc(IdLoc);
   6969   } else {
   6970     ElaboratedTypeLoc TL = TSI->getTypeLoc().castAs<ElaboratedTypeLoc>();
   6971     TL.setElaboratedKeywordLoc(TypenameLoc);
   6972     TL.setQualifierLoc(QualifierLoc);
   6973     TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(IdLoc);
   6974   }
   6975 
   6976   return CreateParsedType(T, TSI);
   6977 }
   6978 
   6979 TypeResult
   6980 Sema::ActOnTypenameType(Scope *S,
   6981                         SourceLocation TypenameLoc,
   6982                         const CXXScopeSpec &SS,
   6983                         SourceLocation TemplateKWLoc,
   6984                         TemplateTy TemplateIn,
   6985                         SourceLocation TemplateNameLoc,
   6986                         SourceLocation LAngleLoc,
   6987                         ASTTemplateArgsPtr TemplateArgsIn,
   6988                         SourceLocation RAngleLoc) {
   6989   if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())
   6990     Diag(TypenameLoc,
   6991          getLangOpts().CPlusPlus11 ?
   6992            diag::warn_cxx98_compat_typename_outside_of_template :
   6993            diag::ext_typename_outside_of_template)
   6994       << FixItHint::CreateRemoval(TypenameLoc);
   6995 
   6996   // Translate the parser's template argument list in our AST format.
   6997   TemplateArgumentListInfo TemplateArgs(LAngleLoc, RAngleLoc);
   6998   translateTemplateArguments(TemplateArgsIn, TemplateArgs);
   6999 
   7000   TemplateName Template = TemplateIn.get();
   7001   if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) {
   7002     // Construct a dependent template specialization type.
   7003     assert(DTN && "dependent template has non-dependent name?");
   7004     assert(DTN->getQualifier()
   7005            == static_cast<NestedNameSpecifier*>(SS.getScopeRep()));
   7006     QualType T = Context.getDependentTemplateSpecializationType(ETK_Typename,
   7007                                                           DTN->getQualifier(),
   7008                                                           DTN->getIdentifier(),
   7009                                                                 TemplateArgs);
   7010 
   7011     // Create source-location information for this type.
   7012     TypeLocBuilder Builder;
   7013     DependentTemplateSpecializationTypeLoc SpecTL
   7014     = Builder.push<DependentTemplateSpecializationTypeLoc>(T);
   7015     SpecTL.setElaboratedKeywordLoc(TypenameLoc);
   7016     SpecTL.setQualifierLoc(SS.getWithLocInContext(Context));
   7017     SpecTL.setTemplateKeywordLoc(TemplateKWLoc);
   7018     SpecTL.setTemplateNameLoc(TemplateNameLoc);
   7019     SpecTL.setLAngleLoc(LAngleLoc);
   7020     SpecTL.setRAngleLoc(RAngleLoc);
   7021     for (unsigned I = 0, N = TemplateArgs.size(); I != N; ++I)
   7022       SpecTL.setArgLocInfo(I, TemplateArgs[I].getLocInfo());
   7023     return CreateParsedType(T, Builder.getTypeSourceInfo(Context, T));
   7024   }
   7025 
   7026   QualType T = CheckTemplateIdType(Template, TemplateNameLoc, TemplateArgs);
   7027   if (T.isNull())
   7028     return true;
   7029 
   7030   // Provide source-location information for the template specialization type.
   7031   TypeLocBuilder Builder;
   7032   TemplateSpecializationTypeLoc SpecTL
   7033     = Builder.push<TemplateSpecializationTypeLoc>(T);
   7034   SpecTL.setTemplateKeywordLoc(TemplateKWLoc);
   7035   SpecTL.setTemplateNameLoc(TemplateNameLoc);
   7036   SpecTL.setLAngleLoc(LAngleLoc);
   7037   SpecTL.setRAngleLoc(RAngleLoc);
   7038   for (unsigned I = 0, N = TemplateArgs.size(); I != N; ++I)
   7039     SpecTL.setArgLocInfo(I, TemplateArgs[I].getLocInfo());
   7040 
   7041   T = Context.getElaboratedType(ETK_Typename, SS.getScopeRep(), T);
   7042   ElaboratedTypeLoc TL = Builder.push<ElaboratedTypeLoc>(T);
   7043   TL.setElaboratedKeywordLoc(TypenameLoc);
   7044   TL.setQualifierLoc(SS.getWithLocInContext(Context));
   7045 
   7046   TypeSourceInfo *TSI = Builder.getTypeSourceInfo(Context, T);
   7047   return CreateParsedType(T, TSI);
   7048 }
   7049 
   7050 
   7051 /// Determine whether this failed name lookup should be treated as being
   7052 /// disabled by a usage of std::enable_if.
   7053 static bool isEnableIf(NestedNameSpecifierLoc NNS, const IdentifierInfo &II,
   7054                        SourceRange &CondRange) {
   7055   // We must be looking for a ::type...
   7056   if (!II.isStr("type"))
   7057     return false;
   7058 
   7059   // ... within an explicitly-written template specialization...
   7060   if (!NNS || !NNS.getNestedNameSpecifier()->getAsType())
   7061     return false;
   7062   TypeLoc EnableIfTy = NNS.getTypeLoc();
   7063   TemplateSpecializationTypeLoc EnableIfTSTLoc =
   7064       EnableIfTy.getAs<TemplateSpecializationTypeLoc>();
   7065   if (!EnableIfTSTLoc || EnableIfTSTLoc.getNumArgs() == 0)
   7066     return false;
   7067   const TemplateSpecializationType *EnableIfTST =
   7068     cast<TemplateSpecializationType>(EnableIfTSTLoc.getTypePtr());
   7069 
   7070   // ... which names a complete class template declaration...
   7071   const TemplateDecl *EnableIfDecl =
   7072     EnableIfTST->getTemplateName().getAsTemplateDecl();
   7073   if (!EnableIfDecl || EnableIfTST->isIncompleteType())
   7074     return false;
   7075 
   7076   // ... called "enable_if".
   7077   const IdentifierInfo *EnableIfII =
   7078     EnableIfDecl->getDeclName().getAsIdentifierInfo();
   7079   if (!EnableIfII || !EnableIfII->isStr("enable_if"))
   7080     return false;
   7081 
   7082   // Assume the first template argument is the condition.
   7083   CondRange = EnableIfTSTLoc.getArgLoc(0).getSourceRange();
   7084   return true;
   7085 }
   7086 
   7087 /// \brief Build the type that describes a C++ typename specifier,
   7088 /// e.g., "typename T::type".
   7089 QualType
   7090 Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword,
   7091                         SourceLocation KeywordLoc,
   7092                         NestedNameSpecifierLoc QualifierLoc,
   7093                         const IdentifierInfo &II,
   7094                         SourceLocation IILoc) {
   7095   CXXScopeSpec SS;
   7096   SS.Adopt(QualifierLoc);
   7097 
   7098   DeclContext *Ctx = computeDeclContext(SS);
   7099   if (!Ctx) {
   7100     // If the nested-name-specifier is dependent and couldn't be
   7101     // resolved to a type, build a typename type.
   7102     assert(QualifierLoc.getNestedNameSpecifier()->isDependent());
   7103     return Context.getDependentNameType(Keyword,
   7104                                         QualifierLoc.getNestedNameSpecifier(),
   7105                                         &II);
   7106   }
   7107 
   7108   // If the nested-name-specifier refers to the current instantiation,
   7109   // the "typename" keyword itself is superfluous. In C++03, the
   7110   // program is actually ill-formed. However, DR 382 (in C++0x CD1)
   7111   // allows such extraneous "typename" keywords, and we retroactively
   7112   // apply this DR to C++03 code with only a warning. In any case we continue.
   7113 
   7114   if (RequireCompleteDeclContext(SS, Ctx))
   7115     return QualType();
   7116 
   7117   DeclarationName Name(&II);
   7118   LookupResult Result(*this, Name, IILoc, LookupOrdinaryName);
   7119   LookupQualifiedName(Result, Ctx);
   7120   unsigned DiagID = 0;
   7121   Decl *Referenced = 0;
   7122   switch (Result.getResultKind()) {
   7123   case LookupResult::NotFound: {
   7124     // If we're looking up 'type' within a template named 'enable_if', produce
   7125     // a more specific diagnostic.
   7126     SourceRange CondRange;
   7127     if (isEnableIf(QualifierLoc, II, CondRange)) {
   7128       Diag(CondRange.getBegin(), diag::err_typename_nested_not_found_enable_if)
   7129         << Ctx << CondRange;
   7130       return QualType();
   7131     }
   7132 
   7133     DiagID = diag::err_typename_nested_not_found;
   7134     break;
   7135   }
   7136 
   7137   case LookupResult::FoundUnresolvedValue: {
   7138     // We found a using declaration that is a value. Most likely, the using
   7139     // declaration itself is meant to have the 'typename' keyword.
   7140     SourceRange FullRange(KeywordLoc.isValid() ? KeywordLoc : SS.getBeginLoc(),
   7141                           IILoc);
   7142     Diag(IILoc, diag::err_typename_refers_to_using_value_decl)
   7143       << Name << Ctx << FullRange;
   7144     if (UnresolvedUsingValueDecl *Using
   7145           = dyn_cast<UnresolvedUsingValueDecl>(Result.getRepresentativeDecl())){
   7146       SourceLocation Loc = Using->getQualifierLoc().getBeginLoc();
   7147       Diag(Loc, diag::note_using_value_decl_missing_typename)
   7148         << FixItHint::CreateInsertion(Loc, "typename ");
   7149     }
   7150   }
   7151   // Fall through to create a dependent typename type, from which we can recover
   7152   // better.
   7153 
   7154   case LookupResult::NotFoundInCurrentInstantiation:
   7155     // Okay, it's a member of an unknown instantiation.
   7156     return Context.getDependentNameType(Keyword,
   7157                                         QualifierLoc.getNestedNameSpecifier(),
   7158                                         &II);
   7159 
   7160   case LookupResult::Found:
   7161     if (TypeDecl *Type = dyn_cast<TypeDecl>(Result.getFoundDecl())) {
   7162       // We found a type. Build an ElaboratedType, since the
   7163       // typename-specifier was just sugar.
   7164       return Context.getElaboratedType(ETK_Typename,
   7165                                        QualifierLoc.getNestedNameSpecifier(),
   7166                                        Context.getTypeDeclType(Type));
   7167     }
   7168 
   7169     DiagID = diag::err_typename_nested_not_type;
   7170     Referenced = Result.getFoundDecl();
   7171     break;
   7172 
   7173   case LookupResult::FoundOverloaded:
   7174     DiagID = diag::err_typename_nested_not_type;
   7175     Referenced = *Result.begin();
   7176     break;
   7177 
   7178   case LookupResult::Ambiguous:
   7179     return QualType();
   7180   }
   7181 
   7182   // If we get here, it's because name lookup did not find a
   7183   // type. Emit an appropriate diagnostic and return an error.
   7184   SourceRange FullRange(KeywordLoc.isValid() ? KeywordLoc : SS.getBeginLoc(),
   7185                         IILoc);
   7186   Diag(IILoc, DiagID) << FullRange << Name << Ctx;
   7187   if (Referenced)
   7188     Diag(Referenced->getLocation(), diag::note_typename_refers_here)
   7189       << Name;
   7190   return QualType();
   7191 }
   7192 
   7193 namespace {
   7194   // See Sema::RebuildTypeInCurrentInstantiation
   7195   class CurrentInstantiationRebuilder
   7196     : public TreeTransform<CurrentInstantiationRebuilder> {
   7197     SourceLocation Loc;
   7198     DeclarationName Entity;
   7199 
   7200   public:
   7201     typedef TreeTransform<CurrentInstantiationRebuilder> inherited;
   7202 
   7203     CurrentInstantiationRebuilder(Sema &SemaRef,
   7204                                   SourceLocation Loc,
   7205                                   DeclarationName Entity)
   7206     : TreeTransform<CurrentInstantiationRebuilder>(SemaRef),
   7207       Loc(Loc), Entity(Entity) { }
   7208 
   7209     /// \brief Determine whether the given type \p T has already been
   7210     /// transformed.
   7211     ///
   7212     /// For the purposes of type reconstruction, a type has already been
   7213     /// transformed if it is NULL or if it is not dependent.
   7214     bool AlreadyTransformed(QualType T) {
   7215       return T.isNull() || !T->isDependentType();
   7216     }
   7217 
   7218     /// \brief Returns the location of the entity whose type is being
   7219     /// rebuilt.
   7220     SourceLocation getBaseLocation() { return Loc; }
   7221 
   7222     /// \brief Returns the name of the entity whose type is being rebuilt.
   7223     DeclarationName getBaseEntity() { return Entity; }
   7224 
   7225     /// \brief Sets the "base" location and entity when that
   7226     /// information is known based on another transformation.
   7227     void setBase(SourceLocation Loc, DeclarationName Entity) {
   7228       this->Loc = Loc;
   7229       this->Entity = Entity;
   7230     }
   7231 
   7232     ExprResult TransformLambdaExpr(LambdaExpr *E) {
   7233       // Lambdas never need to be transformed.
   7234       return E;
   7235     }
   7236   };
   7237 }
   7238 
   7239 /// \brief Rebuilds a type within the context of the current instantiation.
   7240 ///
   7241 /// The type \p T is part of the type of an out-of-line member definition of
   7242 /// a class template (or class template partial specialization) that was parsed
   7243 /// and constructed before we entered the scope of the class template (or
   7244 /// partial specialization thereof). This routine will rebuild that type now
   7245 /// that we have entered the declarator's scope, which may produce different
   7246 /// canonical types, e.g.,
   7247 ///
   7248 /// \code
   7249 /// template<typename T>
   7250 /// struct X {
   7251 ///   typedef T* pointer;
   7252 ///   pointer data();
   7253 /// };
   7254 ///
   7255 /// template<typename T>
   7256 /// typename X<T>::pointer X<T>::data() { ... }
   7257 /// \endcode
   7258 ///
   7259 /// Here, the type "typename X<T>::pointer" will be created as a DependentNameType,
   7260 /// since we do not know that we can look into X<T> when we parsed the type.
   7261 /// This function will rebuild the type, performing the lookup of "pointer"
   7262 /// in X<T> and returning an ElaboratedType whose canonical type is the same
   7263 /// as the canonical type of T*, allowing the return types of the out-of-line
   7264 /// definition and the declaration to match.
   7265 TypeSourceInfo *Sema::RebuildTypeInCurrentInstantiation(TypeSourceInfo *T,
   7266                                                         SourceLocation Loc,
   7267                                                         DeclarationName Name) {
   7268   if (!T || !T->getType()->isDependentType())
   7269     return T;
   7270 
   7271   CurrentInstantiationRebuilder Rebuilder(*this, Loc, Name);
   7272   return Rebuilder.TransformType(T);
   7273 }
   7274 
   7275 ExprResult Sema::RebuildExprInCurrentInstantiation(Expr *E) {
   7276   CurrentInstantiationRebuilder Rebuilder(*this, E->getExprLoc(),
   7277                                           DeclarationName());
   7278   return Rebuilder.TransformExpr(E);
   7279 }
   7280 
   7281 bool Sema::RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec &SS) {
   7282   if (SS.isInvalid())
   7283     return true;
   7284 
   7285   NestedNameSpecifierLoc QualifierLoc = SS.getWithLocInContext(Context);
   7286   CurrentInstantiationRebuilder Rebuilder(*this, SS.getRange().getBegin(),
   7287                                           DeclarationName());
   7288   NestedNameSpecifierLoc Rebuilt
   7289     = Rebuilder.TransformNestedNameSpecifierLoc(QualifierLoc);
   7290   if (!Rebuilt)
   7291     return true;
   7292 
   7293   SS.Adopt(Rebuilt);
   7294   return false;
   7295 }
   7296 
   7297 /// \brief Rebuild the template parameters now that we know we're in a current
   7298 /// instantiation.
   7299 bool Sema::RebuildTemplateParamsInCurrentInstantiation(
   7300                                                TemplateParameterList *Params) {
   7301   for (unsigned I = 0, N = Params->size(); I != N; ++I) {
   7302     Decl *Param = Params->getParam(I);
   7303 
   7304     // There is nothing to rebuild in a type parameter.
   7305     if (isa<TemplateTypeParmDecl>(Param))
   7306       continue;
   7307 
   7308     // Rebuild the template parameter list of a template template parameter.
   7309     if (TemplateTemplateParmDecl *TTP
   7310         = dyn_cast<TemplateTemplateParmDecl>(Param)) {
   7311       if (RebuildTemplateParamsInCurrentInstantiation(
   7312             TTP->getTemplateParameters()))
   7313         return true;
   7314 
   7315       continue;
   7316     }
   7317 
   7318     // Rebuild the type of a non-type template parameter.
   7319     NonTypeTemplateParmDecl *NTTP = cast<NonTypeTemplateParmDecl>(Param);
   7320     TypeSourceInfo *NewTSI
   7321       = RebuildTypeInCurrentInstantiation(NTTP->getTypeSourceInfo(),
   7322                                           NTTP->getLocation(),
   7323                                           NTTP->getDeclName());
   7324     if (!NewTSI)
   7325       return true;
   7326 
   7327     if (NewTSI != NTTP->getTypeSourceInfo()) {
   7328       NTTP->setTypeSourceInfo(NewTSI);
   7329       NTTP->setType(NewTSI->getType());
   7330     }
   7331   }
   7332 
   7333   return false;
   7334 }
   7335 
   7336 /// \brief Produces a formatted string that describes the binding of
   7337 /// template parameters to template arguments.
   7338 std::string
   7339 Sema::getTemplateArgumentBindingsText(const TemplateParameterList *Params,
   7340                                       const TemplateArgumentList &Args) {
   7341   return getTemplateArgumentBindingsText(Params, Args.data(), Args.size());
   7342 }
   7343 
   7344 std::string
   7345 Sema::getTemplateArgumentBindingsText(const TemplateParameterList *Params,
   7346                                       const TemplateArgument *Args,
   7347                                       unsigned NumArgs) {
   7348   SmallString<128> Str;
   7349   llvm::raw_svector_ostream Out(Str);
   7350 
   7351   if (!Params || Params->size() == 0 || NumArgs == 0)
   7352     return std::string();
   7353 
   7354   for (unsigned I = 0, N = Params->size(); I != N; ++I) {
   7355     if (I >= NumArgs)
   7356       break;
   7357 
   7358     if (I == 0)
   7359       Out << "[with ";
   7360     else
   7361       Out << ", ";
   7362 
   7363     if (const IdentifierInfo *Id = Params->getParam(I)->getIdentifier()) {
   7364       Out << Id->getName();
   7365     } else {
   7366       Out << '$' << I;
   7367     }
   7368 
   7369     Out << " = ";
   7370     Args[I].print(getPrintingPolicy(), Out);
   7371   }
   7372 
   7373   Out << ']';
   7374   return Out.str();
   7375 }
   7376 
   7377 void Sema::MarkAsLateParsedTemplate(FunctionDecl *FD, bool Flag) {
   7378   if (!FD)
   7379     return;
   7380   FD->setLateTemplateParsed(Flag);
   7381 }
   7382 
   7383 bool Sema::IsInsideALocalClassWithinATemplateFunction() {
   7384   DeclContext *DC = CurContext;
   7385 
   7386   while (DC) {
   7387     if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(CurContext)) {
   7388       const FunctionDecl *FD = RD->isLocalClass();
   7389       return (FD && FD->getTemplatedKind() != FunctionDecl::TK_NonTemplate);
   7390     } else if (DC->isTranslationUnit() || DC->isNamespace())
   7391       return false;
   7392 
   7393     DC = DC->getParent();
   7394   }
   7395   return false;
   7396 }
   7397