• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
getTemplateParamsRange(TemplateParameterList const * const * Ps,unsigned N)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.
isAcceptableTemplateName(ASTContext & Context,NamedDecl * Orig,bool AllowFunctionTemplates)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 
FilterAcceptableTemplateNames(LookupResult & R,bool AllowFunctionTemplates)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 
hasAnyAcceptableTemplateNames(LookupResult & R,bool AllowFunctionTemplates)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 
isTemplateName(Scope * S,CXXScopeSpec & SS,bool hasTemplateKeyword,UnqualifiedId & Name,ParsedType ObjectTypePtr,bool EnteringContext,TemplateTy & TemplateResult,bool & MemberOfUnknownSpecialization)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 
DiagnoseUnknownTemplateName(const IdentifierInfo & II,SourceLocation IILoc,Scope * S,const CXXScopeSpec * SS,TemplateTy & SuggestedTemplate,TemplateNameKind & SuggestedKind)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 
LookupTemplateName(LookupResult & Found,Scope * S,CXXScopeSpec & SS,QualType ObjectType,bool EnteringContext,bool & MemberOfUnknownSpecialization)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
ActOnDependentIdExpression(const CXXScopeSpec & SS,SourceLocation TemplateKWLoc,const DeclarationNameInfo & NameInfo,bool isAddressOfOperand,const TemplateArgumentListInfo * TemplateArgs)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
BuildDependentDeclRefExpr(const CXXScopeSpec & SS,SourceLocation TemplateKWLoc,const DeclarationNameInfo & NameInfo,const TemplateArgumentListInfo * TemplateArgs)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.
DiagnoseTemplateParameterShadow(SourceLocation Loc,Decl * PrevDecl)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.
AdjustDeclIfTemplate(Decl * & D)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 
getTemplatePackExpansion(SourceLocation EllipsisLoc) const480 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 
translateTemplateArgument(Sema & SemaRef,const ParsedTemplateArgument & Arg)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.
translateTemplateArguments(const ASTTemplateArgsPtr & TemplateArgsIn,TemplateArgumentListInfo & TemplateArgs)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.
ActOnTypeParameter(Scope * S,bool Typename,bool Ellipsis,SourceLocation EllipsisLoc,SourceLocation KeyLoc,IdentifierInfo * ParamName,SourceLocation ParamNameLoc,unsigned Depth,unsigned Position,SourceLocation EqualLoc,ParsedType DefaultArg)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
CheckNonTypeTemplateParameterType(QualType T,SourceLocation Loc)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 
ActOnNonTypeTemplateParameter(Scope * S,Declarator & D,unsigned Depth,unsigned Position,SourceLocation EqualLoc,Expr * Default)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.
ActOnTemplateTemplateParameter(Scope * S,SourceLocation TmpLoc,TemplateParameterList * Params,SourceLocation EllipsisLoc,IdentifierInfo * Name,SourceLocation NameLoc,unsigned Depth,unsigned Position,SourceLocation EqualLoc,ParsedTemplateArgument Default)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 *
ActOnTemplateParameterList(unsigned Depth,SourceLocation ExportLoc,SourceLocation TemplateLoc,SourceLocation LAngleLoc,Decl ** Params,unsigned NumParams,SourceLocation RAngleLoc)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 
SetNestedNameSpecifier(TagDecl * T,const CXXScopeSpec & SS)838 static void SetNestedNameSpecifier(TagDecl *T, const CXXScopeSpec &SS) {
839   if (SS.isSet())
840     T->setQualifierInfo(SS.getWithLocInContext(T->getASTContext()));
841 }
842 
843 DeclResult
CheckClassTemplate(Scope * S,unsigned TagSpec,TagUseKind TUK,SourceLocation KWLoc,CXXScopeSpec & SS,IdentifierInfo * Name,SourceLocation NameLoc,AttributeList * Attr,TemplateParameterList * TemplateParams,AccessSpecifier AS,SourceLocation ModulePrivateLoc,unsigned NumOuterTemplateParamLists,TemplateParameterList ** OuterTemplateParamLists)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.
DiagnoseDefaultTemplateArgument(Sema & S,Sema::TemplateParamListContext TPC,SourceLocation ParamLoc,SourceRange DefArgRange)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.
DiagnoseUnexpandedParameterPacks(Sema & S,TemplateTemplateParmDecl * TTP)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.
CheckTemplateParameterList(TemplateParameterList * NewParams,TemplateParameterList * OldParams,TemplateParamListContext TPC)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 
DependencyChecker__anon7f9b27390111::DependencyChecker1494   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 
Matches__anon7f9b27390111::DependencyChecker1506   bool Matches(unsigned ParmDepth) {
1507     if (ParmDepth >= Depth) {
1508       Match = true;
1509       return true;
1510     }
1511     return false;
1512   }
1513 
VisitTemplateTypeParmType__anon7f9b27390111::DependencyChecker1514   bool VisitTemplateTypeParmType(const TemplateTypeParmType *T) {
1515     return !Matches(T->getDepth());
1516   }
1517 
TraverseTemplateName__anon7f9b27390111::DependencyChecker1518   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 
VisitDeclRefExpr__anon7f9b27390111::DependencyChecker1525   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 
TraverseInjectedClassNameType__anon7f9b27390111::DependencyChecker1536   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
DependsOnTemplateParameters(QualType T,TemplateParameterList * Params)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.
getRangeOfTypeInNestedNameSpecifier(ASTContext & Context,QualType T,const CXXScopeSpec & SS)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 *
MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc,SourceLocation DeclLoc,const CXXScopeSpec & SS,TemplateParameterList ** ParamLists,unsigned NumParamLists,bool IsFriend,bool & IsExplicitSpecialization,bool & Invalid)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 
NoteAllFoundTemplates(TemplateName Name)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 
CheckTemplateIdType(TemplateName Name,SourceLocation TemplateLoc,TemplateArgumentListInfo & TemplateArgs)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
ActOnTemplateIdType(CXXScopeSpec & SS,SourceLocation TemplateKWLoc,TemplateTy TemplateD,SourceLocation TemplateLoc,SourceLocation LAngleLoc,ASTTemplateArgsPtr TemplateArgsIn,SourceLocation RAngleLoc,bool IsCtorOrDtorName)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 
ActOnTagTemplateIdType(TagUseKind TUK,TypeSpecifierType TagSpec,SourceLocation TagLoc,CXXScopeSpec & SS,SourceLocation TemplateKWLoc,TemplateTy TemplateD,SourceLocation TemplateLoc,SourceLocation LAngleLoc,ASTTemplateArgsPtr TemplateArgsIn,SourceLocation RAngleLoc)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 
BuildTemplateIdExpr(const CXXScopeSpec & SS,SourceLocation TemplateKWLoc,LookupResult & R,bool RequiresADL,const TemplateArgumentListInfo * TemplateArgs)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
BuildQualifiedTemplateIdExpr(CXXScopeSpec & SS,SourceLocation TemplateKWLoc,const DeclarationNameInfo & NameInfo,const TemplateArgumentListInfo * TemplateArgs)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.
ActOnDependentTemplateName(Scope * S,CXXScopeSpec & SS,SourceLocation TemplateKWLoc,UnqualifiedId & Name,ParsedType ObjectType,bool EnteringContext,TemplateTy & Result)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 
CheckTemplateTypeArgument(TemplateTypeParmDecl * Param,const TemplateArgumentLoc & AL,SmallVectorImpl<TemplateArgument> & Converted)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 *
SubstDefaultTemplateArgument(Sema & SemaRef,TemplateDecl * Template,SourceLocation TemplateLoc,SourceLocation RAngleLoc,TemplateTypeParmDecl * Param,SmallVectorImpl<TemplateArgument> & Converted)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
SubstDefaultTemplateArgument(Sema & SemaRef,TemplateDecl * Template,SourceLocation TemplateLoc,SourceLocation RAngleLoc,NonTypeTemplateParmDecl * Param,SmallVectorImpl<TemplateArgument> & Converted)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
SubstDefaultTemplateArgument(Sema & SemaRef,TemplateDecl * Template,SourceLocation TemplateLoc,SourceLocation RAngleLoc,TemplateTemplateParmDecl * Param,SmallVectorImpl<TemplateArgument> & Converted,NestedNameSpecifierLoc & QualifierLoc)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
SubstDefaultTemplateArgumentIfAvailable(TemplateDecl * Template,SourceLocation TemplateLoc,SourceLocation RAngleLoc,Decl * Param,SmallVectorImpl<TemplateArgument> & Converted)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.
CheckTemplateArgument(NamedDecl * Param,const TemplateArgumentLoc & Arg,NamedDecl * Template,SourceLocation TemplateLoc,SourceLocation RAngleLoc,unsigned ArgumentPackIndex,SmallVectorImpl<TemplateArgument> & Converted,CheckTemplateArgumentKind CTAK)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
diagnoseArityMismatch(Sema & S,TemplateDecl * Template,SourceLocation TemplateLoc,TemplateArgumentListInfo & TemplateArgs)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.
getExpandedPackSize(NamedDecl * Param)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.
CheckTemplateArgumentList(TemplateDecl * Template,SourceLocation TemplateLoc,TemplateArgumentListInfo & TemplateArgs,bool PartialTemplateArgs,SmallVectorImpl<TemplateArgument> & Converted,bool * ExpansionIntoFixedList)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:
UnnamedLocalNoLinkageFinder(Sema & S,SourceRange SR)3305     UnnamedLocalNoLinkageFinder(Sema &S, SourceRange SR) : S(S), SR(SR) { }
3306 
Visit(QualType T)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 
VisitBuiltinType(const BuiltinType *)3324 bool UnnamedLocalNoLinkageFinder::VisitBuiltinType(const BuiltinType*) {
3325   return false;
3326 }
3327 
VisitComplexType(const ComplexType * T)3328 bool UnnamedLocalNoLinkageFinder::VisitComplexType(const ComplexType* T) {
3329   return Visit(T->getElementType());
3330 }
3331 
VisitPointerType(const PointerType * T)3332 bool UnnamedLocalNoLinkageFinder::VisitPointerType(const PointerType* T) {
3333   return Visit(T->getPointeeType());
3334 }
3335 
VisitBlockPointerType(const BlockPointerType * T)3336 bool UnnamedLocalNoLinkageFinder::VisitBlockPointerType(
3337                                                     const BlockPointerType* T) {
3338   return Visit(T->getPointeeType());
3339 }
3340 
VisitLValueReferenceType(const LValueReferenceType * T)3341 bool UnnamedLocalNoLinkageFinder::VisitLValueReferenceType(
3342                                                 const LValueReferenceType* T) {
3343   return Visit(T->getPointeeType());
3344 }
3345 
VisitRValueReferenceType(const RValueReferenceType * T)3346 bool UnnamedLocalNoLinkageFinder::VisitRValueReferenceType(
3347                                                 const RValueReferenceType* T) {
3348   return Visit(T->getPointeeType());
3349 }
3350 
VisitMemberPointerType(const MemberPointerType * T)3351 bool UnnamedLocalNoLinkageFinder::VisitMemberPointerType(
3352                                                   const MemberPointerType* T) {
3353   return Visit(T->getPointeeType()) || Visit(QualType(T->getClass(), 0));
3354 }
3355 
VisitConstantArrayType(const ConstantArrayType * T)3356 bool UnnamedLocalNoLinkageFinder::VisitConstantArrayType(
3357                                                   const ConstantArrayType* T) {
3358   return Visit(T->getElementType());
3359 }
3360 
VisitIncompleteArrayType(const IncompleteArrayType * T)3361 bool UnnamedLocalNoLinkageFinder::VisitIncompleteArrayType(
3362                                                  const IncompleteArrayType* T) {
3363   return Visit(T->getElementType());
3364 }
3365 
VisitVariableArrayType(const VariableArrayType * T)3366 bool UnnamedLocalNoLinkageFinder::VisitVariableArrayType(
3367                                                    const VariableArrayType* T) {
3368   return Visit(T->getElementType());
3369 }
3370 
VisitDependentSizedArrayType(const DependentSizedArrayType * T)3371 bool UnnamedLocalNoLinkageFinder::VisitDependentSizedArrayType(
3372                                             const DependentSizedArrayType* T) {
3373   return Visit(T->getElementType());
3374 }
3375 
VisitDependentSizedExtVectorType(const DependentSizedExtVectorType * T)3376 bool UnnamedLocalNoLinkageFinder::VisitDependentSizedExtVectorType(
3377                                          const DependentSizedExtVectorType* T) {
3378   return Visit(T->getElementType());
3379 }
3380 
VisitVectorType(const VectorType * T)3381 bool UnnamedLocalNoLinkageFinder::VisitVectorType(const VectorType* T) {
3382   return Visit(T->getElementType());
3383 }
3384 
VisitExtVectorType(const ExtVectorType * T)3385 bool UnnamedLocalNoLinkageFinder::VisitExtVectorType(const ExtVectorType* T) {
3386   return Visit(T->getElementType());
3387 }
3388 
VisitFunctionProtoType(const FunctionProtoType * T)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 
VisitFunctionNoProtoType(const FunctionNoProtoType * T)3401 bool UnnamedLocalNoLinkageFinder::VisitFunctionNoProtoType(
3402                                                const FunctionNoProtoType* T) {
3403   return Visit(T->getResultType());
3404 }
3405 
VisitUnresolvedUsingType(const UnresolvedUsingType *)3406 bool UnnamedLocalNoLinkageFinder::VisitUnresolvedUsingType(
3407                                                   const UnresolvedUsingType*) {
3408   return false;
3409 }
3410 
VisitTypeOfExprType(const TypeOfExprType *)3411 bool UnnamedLocalNoLinkageFinder::VisitTypeOfExprType(const TypeOfExprType*) {
3412   return false;
3413 }
3414 
VisitTypeOfType(const TypeOfType * T)3415 bool UnnamedLocalNoLinkageFinder::VisitTypeOfType(const TypeOfType* T) {
3416   return Visit(T->getUnderlyingType());
3417 }
3418 
VisitDecltypeType(const DecltypeType *)3419 bool UnnamedLocalNoLinkageFinder::VisitDecltypeType(const DecltypeType*) {
3420   return false;
3421 }
3422 
VisitUnaryTransformType(const UnaryTransformType *)3423 bool UnnamedLocalNoLinkageFinder::VisitUnaryTransformType(
3424                                                     const UnaryTransformType*) {
3425   return false;
3426 }
3427 
VisitAutoType(const AutoType * T)3428 bool UnnamedLocalNoLinkageFinder::VisitAutoType(const AutoType *T) {
3429   return Visit(T->getDeducedType());
3430 }
3431 
VisitRecordType(const RecordType * T)3432 bool UnnamedLocalNoLinkageFinder::VisitRecordType(const RecordType* T) {
3433   return VisitTagDecl(T->getDecl());
3434 }
3435 
VisitEnumType(const EnumType * T)3436 bool UnnamedLocalNoLinkageFinder::VisitEnumType(const EnumType* T) {
3437   return VisitTagDecl(T->getDecl());
3438 }
3439 
VisitTemplateTypeParmType(const TemplateTypeParmType *)3440 bool UnnamedLocalNoLinkageFinder::VisitTemplateTypeParmType(
3441                                                  const TemplateTypeParmType*) {
3442   return false;
3443 }
3444 
VisitSubstTemplateTypeParmPackType(const SubstTemplateTypeParmPackType *)3445 bool UnnamedLocalNoLinkageFinder::VisitSubstTemplateTypeParmPackType(
3446                                         const SubstTemplateTypeParmPackType *) {
3447   return false;
3448 }
3449 
VisitTemplateSpecializationType(const TemplateSpecializationType *)3450 bool UnnamedLocalNoLinkageFinder::VisitTemplateSpecializationType(
3451                                             const TemplateSpecializationType*) {
3452   return false;
3453 }
3454 
VisitInjectedClassNameType(const InjectedClassNameType * T)3455 bool UnnamedLocalNoLinkageFinder::VisitInjectedClassNameType(
3456                                               const InjectedClassNameType* T) {
3457   return VisitTagDecl(T->getDecl());
3458 }
3459 
VisitDependentNameType(const DependentNameType * T)3460 bool UnnamedLocalNoLinkageFinder::VisitDependentNameType(
3461                                                    const DependentNameType* T) {
3462   return VisitNestedNameSpecifier(T->getQualifier());
3463 }
3464 
VisitDependentTemplateSpecializationType(const DependentTemplateSpecializationType * T)3465 bool UnnamedLocalNoLinkageFinder::VisitDependentTemplateSpecializationType(
3466                                  const DependentTemplateSpecializationType* T) {
3467   return VisitNestedNameSpecifier(T->getQualifier());
3468 }
3469 
VisitPackExpansionType(const PackExpansionType * T)3470 bool UnnamedLocalNoLinkageFinder::VisitPackExpansionType(
3471                                                    const PackExpansionType* T) {
3472   return Visit(T->getPattern());
3473 }
3474 
VisitObjCObjectType(const ObjCObjectType *)3475 bool UnnamedLocalNoLinkageFinder::VisitObjCObjectType(const ObjCObjectType *) {
3476   return false;
3477 }
3478 
VisitObjCInterfaceType(const ObjCInterfaceType *)3479 bool UnnamedLocalNoLinkageFinder::VisitObjCInterfaceType(
3480                                                    const ObjCInterfaceType *) {
3481   return false;
3482 }
3483 
VisitObjCObjectPointerType(const ObjCObjectPointerType *)3484 bool UnnamedLocalNoLinkageFinder::VisitObjCObjectPointerType(
3485                                                 const ObjCObjectPointerType *) {
3486   return false;
3487 }
3488 
VisitAtomicType(const AtomicType * T)3489 bool UnnamedLocalNoLinkageFinder::VisitAtomicType(const AtomicType* T) {
3490   return Visit(T->getValueType());
3491 }
3492 
VisitTagDecl(const TagDecl * Tag)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 
VisitNestedNameSpecifier(NestedNameSpecifier * NNS)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.
CheckTemplateArgument(TemplateTypeParmDecl * Param,TypeSourceInfo * ArgInfo)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
isNullPointerValueTemplateArgument(Sema & S,NonTypeTemplateParmDecl * Param,QualType ParamType,Expr * Arg)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
CheckTemplateArgumentAddressOfObjectOrFunction(Sema & S,NonTypeTemplateParmDecl * Param,QualType ParamType,Expr * ArgIn,TemplateArgument & Converted)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.
CheckTemplateArgumentPointerToMember(Sema & S,NonTypeTemplateParmDecl * Param,QualType ParamType,Expr * & ResultArg,TemplateArgument & Converted)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.
CheckTemplateArgument(NonTypeTemplateParmDecl * Param,QualType InstantiatedParamType,Expr * Arg,TemplateArgument & Converted,CheckTemplateArgumentKind CTAK)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.
CheckTemplateArgument(TemplateTemplateParmDecl * Param,const TemplateArgumentLoc & Arg,unsigned ArgumentPackIndex)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
BuildExpressionFromDeclTemplateArgument(const TemplateArgument & Arg,QualType ParamType,SourceLocation Loc)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
BuildExpressionFromIntegralTemplateArgument(const TemplateArgument & Arg,SourceLocation Loc)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.
MatchTemplateParameterKind(Sema & S,NamedDecl * New,NamedDecl * Old,bool Complain,Sema::TemplateParameterListEqualKind Kind,SourceLocation TemplateArgLoc)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
DiagnoseTemplateParameterListArityMismatch(Sema & S,TemplateParameterList * New,TemplateParameterList * Old,Sema::TemplateParameterListEqualKind Kind,SourceLocation TemplateArgLoc)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
TemplateParameterListsAreEqual(TemplateParameterList * New,TemplateParameterList * Old,bool Complain,TemplateParameterListEqualKind Kind,SourceLocation TemplateArgLoc)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
CheckTemplateDeclScope(Scope * S,TemplateParameterList * TemplateParams)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.
getTemplateSpecializationKind(Decl * D)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.
CheckTemplateSpecializationScope(Sema & S,NamedDecl * Specialized,NamedDecl * PrevDecl,SourceLocation Loc,bool IsPartialSpecialization)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.
CheckNonTypeClassTemplatePartialSpecializationArgs(Sema & S,NonTypeTemplateParmDecl * Param,const TemplateArgument * Args,unsigned NumArgs)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.
CheckClassTemplatePartialSpecializationArgs(Sema & S,TemplateParameterList * TemplateParams,SmallVectorImpl<TemplateArgument> & TemplateArgs)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
ActOnClassTemplateSpecialization(Scope * S,unsigned TagSpec,TagUseKind TUK,SourceLocation KWLoc,SourceLocation ModulePrivateLoc,CXXScopeSpec & SS,TemplateTy TemplateD,SourceLocation TemplateNameLoc,SourceLocation LAngleLoc,ASTTemplateArgsPtr TemplateArgsIn,SourceLocation RAngleLoc,AttributeList * Attr,MultiTemplateParamsArg TemplateParameterLists)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 
ActOnTemplateDeclarator(Scope * S,MultiTemplateParamsArg TemplateParameterLists,Declarator & D)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 
ActOnStartOfFunctionTemplateDef(Scope * FnBodyScope,MultiTemplateParamsArg TemplateParameterLists,Declarator & D)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.
StripImplicitInstantiation(NamedDecl * D)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.
DiagLocForExplicitInstantiation(NamedDecl * D,SourceLocation PointOfInstantiation)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
CheckSpecializationInstantiationRedecl(SourceLocation NewLoc,TemplateSpecializationKind NewTSK,NamedDecl * PrevDecl,TemplateSpecializationKind PrevTSK,SourceLocation PrevPointOfInstantiation,bool & HasNoEffect)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
CheckDependentFunctionTemplateSpecialization(FunctionDecl * FD,const TemplateArgumentListInfo & ExplicitTemplateArgs,LookupResult & Previous)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
CheckFunctionTemplateSpecialization(FunctionDecl * FD,TemplateArgumentListInfo * ExplicitTemplateArgs,LookupResult & Previous)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
CheckMemberSpecialization(NamedDecl * Member,LookupResult & Previous)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.
CheckExplicitInstantiationScope(Sema & S,NamedDecl * D,SourceLocation InstLoc,bool WasQualifiedName)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.
ScopeSpecifierHasTemplateId(const CXXScopeSpec & SS)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
ActOnExplicitInstantiation(Scope * S,SourceLocation ExternLoc,SourceLocation TemplateLoc,unsigned TagSpec,SourceLocation KWLoc,const CXXScopeSpec & SS,TemplateTy TemplateD,SourceLocation TemplateNameLoc,SourceLocation LAngleLoc,ASTTemplateArgsPtr TemplateArgsIn,SourceLocation RAngleLoc,AttributeList * Attr)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
ActOnExplicitInstantiation(Scope * S,SourceLocation ExternLoc,SourceLocation TemplateLoc,unsigned TagSpec,SourceLocation KWLoc,CXXScopeSpec & SS,IdentifierInfo * Name,SourceLocation NameLoc,AttributeList * Attr)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 
ActOnExplicitInstantiation(Scope * S,SourceLocation ExternLoc,SourceLocation TemplateLoc,Declarator & D)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
ActOnDependentTag(Scope * S,unsigned TagSpec,TagUseKind TUK,const CXXScopeSpec & SS,IdentifierInfo * Name,SourceLocation TagLoc,SourceLocation NameLoc)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
ActOnTypenameType(Scope * S,SourceLocation TypenameLoc,const CXXScopeSpec & SS,const IdentifierInfo & II,SourceLocation IdLoc)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
ActOnTypenameType(Scope * S,SourceLocation TypenameLoc,const CXXScopeSpec & SS,SourceLocation TemplateKWLoc,TemplateTy TemplateIn,SourceLocation TemplateNameLoc,SourceLocation LAngleLoc,ASTTemplateArgsPtr TemplateArgsIn,SourceLocation RAngleLoc)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.
isEnableIf(NestedNameSpecifierLoc NNS,const IdentifierInfo & II,SourceRange & CondRange)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
CheckTypenameType(ElaboratedTypeKeyword Keyword,SourceLocation KeywordLoc,NestedNameSpecifierLoc QualifierLoc,const IdentifierInfo & II,SourceLocation IILoc)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 
CurrentInstantiationRebuilder(Sema & SemaRef,SourceLocation Loc,DeclarationName Entity)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.
AlreadyTransformed(QualType T)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.
getBaseLocation()7194     SourceLocation getBaseLocation() { return Loc; }
7195 
7196     /// \brief Returns the name of the entity whose type is being rebuilt.
getBaseEntity()7197     DeclarationName getBaseEntity() { return Entity; }
7198 
7199     /// \brief Sets the "base" location and entity when that
7200     /// information is known based on another transformation.
setBase(SourceLocation Loc,DeclarationName Entity)7201     void setBase(SourceLocation Loc, DeclarationName Entity) {
7202       this->Loc = Loc;
7203       this->Entity = Entity;
7204     }
7205 
TransformLambdaExpr(LambdaExpr * E)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.
RebuildTypeInCurrentInstantiation(TypeSourceInfo * T,SourceLocation Loc,DeclarationName Name)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 
RebuildExprInCurrentInstantiation(Expr * E)7249 ExprResult Sema::RebuildExprInCurrentInstantiation(Expr *E) {
7250   CurrentInstantiationRebuilder Rebuilder(*this, E->getExprLoc(),
7251                                           DeclarationName());
7252   return Rebuilder.TransformExpr(E);
7253 }
7254 
RebuildNestedNameSpecifierInCurrentInstantiation(CXXScopeSpec & SS)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.
RebuildTemplateParamsInCurrentInstantiation(TemplateParameterList * Params)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
getTemplateArgumentBindingsText(const TemplateParameterList * Params,const TemplateArgumentList & Args)7313 Sema::getTemplateArgumentBindingsText(const TemplateParameterList *Params,
7314                                       const TemplateArgumentList &Args) {
7315   return getTemplateArgumentBindingsText(Params, Args.data(), Args.size());
7316 }
7317 
7318 std::string
getTemplateArgumentBindingsText(const TemplateParameterList * Params,const TemplateArgument * Args,unsigned NumArgs)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 
MarkAsLateParsedTemplate(FunctionDecl * FD,bool Flag)7351 void Sema::MarkAsLateParsedTemplate(FunctionDecl *FD, bool Flag) {
7352   if (!FD)
7353     return;
7354   FD->setLateTemplateParsed(Flag);
7355 }
7356 
IsInsideALocalClassWithinATemplateFunction()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