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