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