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