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 spe