1 //===------- SemaTemplate.cpp - Semantic Analysis for C++ Templates -------===/
2 
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===/
9 
10 //
11 //  This file implements semantic analysis for C++ templates.
12 //===----------------------------------------------------------------------===/
13 
14 #include "Sema.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/Expr.h"
17 #include "clang/AST/ExprCXX.h"
18 #include "clang/AST/DeclTemplate.h"
19 #include "clang/Parse/DeclSpec.h"
20 #include "clang/Basic/LangOptions.h"
21 
22 using namespace clang;
23 
24 /// isTemplateName - Determines whether the identifier II is a
25 /// template name in the current scope, and returns the template
26 /// declaration if II names a template. An optional CXXScope can be
27 /// passed to indicate the C++ scope in which the identifier will be
28 /// found.
29 TemplateNameKind Sema::isTemplateName(const IdentifierInfo &II, Scope *S,
30                                       TemplateTy &TemplateResult,
31                                       const CXXScopeSpec *SS) {
32   NamedDecl *IIDecl = LookupParsedName(S, SS, &II, LookupOrdinaryName);
33 
34   TemplateNameKind TNK = TNK_Non_template;
35   TemplateDecl *Template = 0;
36 
37   if (IIDecl) {
38     if ((Template = dyn_cast<TemplateDecl>(IIDecl))) {
39       if (isa<FunctionTemplateDecl>(IIDecl))
40         TNK = TNK_Function_template;
41       else if (isa<ClassTemplateDecl>(IIDecl) ||
42                isa<TemplateTemplateParmDecl>(IIDecl))
43         TNK = TNK_Type_template;
44       else
45         assert(false && "Unknown template declaration kind");
46     } else if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(IIDecl)) {
47       // C++ [temp.local]p1:
48       //   Like normal (non-template) classes, class templates have an
49       //   injected-class-name (Clause 9). The injected-class-name
50       //   can be used with or without a template-argument-list. When
51       //   it is used without a template-argument-list, it is
52       //   equivalent to the injected-class-name followed by the
53       //   template-parameters of the class template enclosed in
54       //   <>. When it is used with a template-argument-list, it
55       //   refers to the specified class template specialization,
56       //   which could be the current specialization or another
57       //   specialization.
58       if (Record->isInjectedClassName()) {
59         Record = cast<CXXRecordDecl>(Context.getCanonicalDecl(Record));
60         if ((Template = Record->getDescribedClassTemplate()))
61           TNK = TNK_Type_template;
62         else if (ClassTemplateSpecializationDecl *Spec
63                    = dyn_cast<ClassTemplateSpecializationDecl>(Record)) {
64           Template = Spec->getSpecializedTemplate();
65           TNK = TNK_Type_template;
66         }
67       }
68     }
69 
70     // FIXME: What follows is a gross hack.
71     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(IIDecl)) {
72       if (FD->getType()->isDependentType()) {
73         TemplateResult = TemplateTy::make(FD);
74         return TNK_Function_template;
75       }
76     } else if (OverloadedFunctionDecl *Ovl
77                  = dyn_cast<OverloadedFunctionDecl>(IIDecl)) {
78       for (OverloadedFunctionDecl::function_iterator F = Ovl->function_begin(),
79                                                   FEnd = Ovl->function_end();
80            F != FEnd; ++F) {
81         if ((*F)->getType()->isDependentType()) {
82           TemplateResult = TemplateTy::make(Ovl);
83           return TNK_Function_template;
84         }
85       }
86     }
87 
88     if (TNK != TNK_Non_template) {
89       if (SS && SS->isSet() && !SS->isInvalid()) {
90         NestedNameSpecifier *Qualifier
91           = static_cast<NestedNameSpecifier *>(SS->getScopeRep());
92         TemplateResult
93           = TemplateTy::make(Context.getQualifiedTemplateName(Qualifier,
94                                                               false,
95                                                               Template));
96       } else
97         TemplateResult = TemplateTy::make(TemplateName(Template));
98     }
99   }
100   return TNK;
101 }
102 
103 /// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining
104 /// that the template parameter 'PrevDecl' is being shadowed by a new
105 /// declaration at location Loc. Returns true to indicate that this is
106 /// an error, and false otherwise.
107 bool Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {
108   assert(PrevDecl->isTemplateParameter() && "Not a template parameter");
109 
110   // Microsoft Visual C++ permits template parameters to be shadowed.
111   if (getLangOptions().Microsoft)
112     return false;
113 
114   // C++ [temp.local]p4:
115   //   A template-parameter shall not be redeclared within its
116   //   scope (including nested scopes).
117   Diag(Loc, diag::err_template_param_shadow)
118     << cast<NamedDecl>(PrevDecl)->getDeclName();
119   Diag(PrevDecl->getLocation(), diag::note_template_param_here);
120   return true;
121 }
122 
123 /// AdjustDeclIfTemplate - If the given decl happens to be a template, reset
124 /// the parameter D to reference the templated declaration and return a pointer
125 /// to the template declaration. Otherwise, do nothing to D and return null.
126 TemplateDecl *Sema::AdjustDeclIfTemplate(DeclPtrTy &D) {
127   if (TemplateDecl *Temp = dyn_cast<TemplateDecl>(D.getAs<Decl>())) {
128     D = DeclPtrTy::make(Temp->getTemplatedDecl());
129     return Temp;
130   }
131   return 0;
132 }
133 
134 /// ActOnTypeParameter - Called when a C++ template type parameter
135 /// (e.g., "typename T") has been parsed. Typename specifies whether
136 /// the keyword "typename" was used to declare the type parameter
137 /// (otherwise, "class" was used), and KeyLoc is the location of the
138 /// "class" or "typename" keyword. ParamName is the name of the
139 /// parameter (NULL indicates an unnamed template parameter) and
140 /// ParamName is the location of the parameter name (if any).
141 /// If the type parameter has a default argument, it will be added
142 /// later via ActOnTypeParameterDefault.
143 Sema::DeclPtrTy Sema::ActOnTypeParameter(Scope *S, bool Typename,
144                                          SourceLocation KeyLoc,
145                                          IdentifierInfo *ParamName,
146                                          SourceLocation ParamNameLoc,
147                                          unsigned Depth, unsigned Position) {
148   assert(S->isTemplateParamScope() &&
149 	 "Template type parameter not in template parameter scope!");
150   bool Invalid = false;
151 
152   if (ParamName) {
153     NamedDecl *PrevDecl = LookupName(S, ParamName, LookupTagName);
154     if (PrevDecl && PrevDecl->isTemplateParameter())
155       Invalid = Invalid || DiagnoseTemplateParameterShadow(ParamNameLoc,
156 							   PrevDecl);
157   }
158 
159   SourceLocation Loc = ParamNameLoc;
160   if (!ParamName)
161     Loc = KeyLoc;
162 
163   TemplateTypeParmDecl *Param
164     = TemplateTypeParmDecl::Create(Context, CurContext, Loc,
165                                    Depth, Position, ParamName, Typename);
166   if (Invalid)
167     Param->setInvalidDecl();
168 
169   if (ParamName) {
170     // Add the template parameter into the current scope.
171     S->AddDecl(DeclPtrTy::make(Param));
172     IdResolver.AddDecl(Param);
173   }
174 
175   return DeclPtrTy::make(Param);
176 }
177 
178 /// ActOnTypeParameterDefault - Adds a default argument (the type
179 /// Default) to the given template type parameter (TypeParam).
180 void Sema::ActOnTypeParameterDefault(DeclPtrTy TypeParam,
181                                      SourceLocation EqualLoc,
182                                      SourceLocation DefaultLoc,
183                                      TypeTy *DefaultT) {
184   TemplateTypeParmDecl *Parm
185     = cast<TemplateTypeParmDecl>(TypeParam.getAs<Decl>());
186   QualType Default = QualType::getFromOpaquePtr(DefaultT);
187 
188   // C++ [temp.param]p14:
189   //   A template-parameter shall not be used in its own default argument.
190   // FIXME: Implement this check! Needs a recursive walk over the types.
191 
192   // Check the template argument itself.
193   if (CheckTemplateArgument(Parm, Default, DefaultLoc)) {
194     Parm->setInvalidDecl();
195     return;
196   }
197 
198   Parm->setDefaultArgument(Default, DefaultLoc, false);
199 }
200 
201 /// \brief Check that the type of a non-type template parameter is
202 /// well-formed.
203 ///
204 /// \returns the (possibly-promoted) parameter type if valid;
205 /// otherwise, produces a diagnostic and returns a NULL type.
206 QualType
207 Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {
208   // C++ [temp.param]p4:
209   //
210   // A non-type template-parameter shall have one of the following
211   // (optionally cv-qualified) types:
212   //
213   //       -- integral or enumeration type,
214   if (T->isIntegralType() || T->isEnumeralType() ||
215       //   -- pointer to object or pointer to function,
216       (T->isPointerType() &&
217        (T->getAsPointerType()->getPointeeType()->isObjectType() ||
218         T->getAsPointerType()->getPointeeType()->isFunctionType())) ||
219       //   -- reference to object or reference to function,
220       T->isReferenceType() ||
221       //   -- pointer to member.
222       T->isMemberPointerType() ||
223       // If T is a dependent type, we can't do the check now, so we
224       // assume that it is well-formed.
225       T->isDependentType())
226     return T;
227   // C++ [temp.param]p8:
228   //
229   //   A non-type template-parameter of type "array of T" or
230   //   "function returning T" is adjusted to be of type "pointer to
231   //   T" or "pointer to function returning T", respectively.
232   else if (T->isArrayType())
233     // FIXME: Keep the type prior to promotion?
234     return Context.getArrayDecayedType(T);
235   else if (T->isFunctionType())
236     // FIXME: Keep the type prior to promotion?
237     return Context.getPointerType(T);
238 
239   Diag(Loc, diag::err_template_nontype_parm_bad_type)
240     << T;
241 
242   return QualType();
243 }
244 
245 /// ActOnNonTypeTemplateParameter - Called when a C++ non-type
246 /// template parameter (e.g., "int Size" in "template<int Size>
247 /// class Array") has been parsed. S is the current scope and D is
248 /// the parsed declarator.
249 Sema::DeclPtrTy Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
250                                                     unsigned Depth,
251                                                     unsigned Position) {
252   QualType T = GetTypeForDeclarator(D, S);
253 
254   assert(S->isTemplateParamScope() &&
255          "Non-type template parameter not in template parameter scope!");
256   bool Invalid = false;
257 
258   IdentifierInfo *ParamName = D.getIdentifier();
259   if (ParamName) {
260     NamedDecl *PrevDecl = LookupName(S, ParamName, LookupTagName);
261     if (PrevDecl && PrevDecl->isTemplateParameter())
262       Invalid = Invalid || DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
263                                                            PrevDecl);
264   }
265 
266   T = CheckNonTypeTemplateParameterType(T, D.getIdentifierLoc());
267   if (T.isNull()) {
268     T = Context.IntTy; // Recover with an 'int' type.
269     Invalid = true;
270   }
271 
272   NonTypeTemplateParmDecl *Param
273     = NonTypeTemplateParmDecl::Create(Context, CurContext, D.getIdentifierLoc(),
274                                       Depth, Position, ParamName, T);
275   if (Invalid)
276     Param->setInvalidDecl();
277 
278   if (D.getIdentifier()) {
279     // Add the template parameter into the current scope.
280     S->AddDecl(DeclPtrTy::make(Param));
281     IdResolver.AddDecl(Param);
282   }
283   return DeclPtrTy::make(Param);
284 }
285 
286 /// \brief Adds a default argument to the given non-type template
287 /// parameter.
288 void Sema::ActOnNonTypeTemplateParameterDefault(DeclPtrTy TemplateParamD,
289                                                 SourceLocation EqualLoc,
290                                                 ExprArg DefaultE) {
291   NonTypeTemplateParmDecl *TemplateParm
292     = cast<NonTypeTemplateParmDecl>(TemplateParamD.getAs<Decl>());
293   Expr *Default = static_cast<Expr *>(DefaultE.get());
294 
295   // C++ [temp.param]p14:
296   //   A template-parameter shall not be used in its own default argument.
297   // FIXME: Implement this check! Needs a recursive walk over the types.
298 
299   // Check the well-formedness of the default template argument.
300   TemplateArgument Converted;
301   if (CheckTemplateArgument(TemplateParm, TemplateParm->getType(), Default,
302                             Converted)) {
303     TemplateParm->setInvalidDecl();
304     return;
305   }
306 
307   TemplateParm->setDefaultArgument(DefaultE.takeAs<Expr>());
308 }
309 
310 
311 /// ActOnTemplateTemplateParameter - Called when a C++ template template
312 /// parameter (e.g. T in template <template <typename> class T> class array)
313 /// has been parsed. S is the current scope.
314 Sema::DeclPtrTy Sema::ActOnTemplateTemplateParameter(Scope* S,
315                                                      SourceLocation TmpLoc,
316                                                      TemplateParamsTy *Params,
317                                                      IdentifierInfo *Name,
318                                                      SourceLocation NameLoc,
319                                                      unsigned Depth,
320                                                      unsigned Position)
321 {
322   assert(S->isTemplateParamScope() &&
323          "Template template parameter not in template parameter scope!");
324 
325   // Construct the parameter object.
326   TemplateTemplateParmDecl *Param =
327     TemplateTemplateParmDecl::Create(Context, CurContext, TmpLoc, Depth,
328                                      Position, Name,
329                                      (TemplateParameterList*)Params);
330 
331   // Make sure the parameter is valid.
332   // FIXME: Decl object is not currently invalidated anywhere so this doesn't
333   // do anything yet. However, if the template parameter list or (eventual)
334   // default value is ever invalidated, that will propagate here.
335   bool Invalid = false;
336   if (Invalid) {
337     Param->setInvalidDecl();
338   }
339 
340   // If the tt-param has a name, then link the identifier into the scope
341   // and lookup mechanisms.
342   if (Name) {
343     S->AddDecl(DeclPtrTy::make(Param));
344     IdResolver.AddDecl(Param);
345   }
346 
347   return DeclPtrTy::make(Param);
348 }
349 
350 /// \brief Adds a default argument to the given template template
351 /// parameter.
352 void Sema::ActOnTemplateTemplateParameterDefault(DeclPtrTy TemplateParamD,
353                                                  SourceLocation EqualLoc,
354                                                  ExprArg DefaultE) {
355   TemplateTemplateParmDecl *TemplateParm
356     = cast<TemplateTemplateParmDecl>(TemplateParamD.getAs<Decl>());
357 
358   // Since a template-template parameter's default argument is an
359   // id-expression, it must be a DeclRefExpr.
360   DeclRefExpr *Default
361     = cast<DeclRefExpr>(static_cast<Expr *>(DefaultE.get()));
362 
363   // C++ [temp.param]p14:
364   //   A template-parameter shall not be used in its own default argument.
365   // FIXME: Implement this check! Needs a recursive walk over the types.
366 
367   // Check the well-formedness of the template argument.
368   if (!isa<TemplateDecl>(Default->getDecl())) {
369     Diag(Default->getSourceRange().getBegin(),
370          diag::err_template_arg_must_be_template)
371       << Default->getSourceRange();
372     TemplateParm->setInvalidDecl();
373     return;
374   }
375   if (CheckTemplateArgument(TemplateParm, Default)) {
376     TemplateParm->setInvalidDecl();
377     return;
378   }
379 
380   DefaultE.release();
381   TemplateParm->setDefaultArgument(Default);
382 }
383 
384 /// ActOnTemplateParameterList - Builds a TemplateParameterList that
385 /// contains the template parameters in Params/NumParams.
386 Sema::TemplateParamsTy *
387 Sema::ActOnTemplateParameterList(unsigned Depth,
388                                  SourceLocation ExportLoc,
389                                  SourceLocation TemplateLoc,
390                                  SourceLocation LAngleLoc,
391                                  DeclPtrTy *Params, unsigned NumParams,
392                                  SourceLocation RAngleLoc) {
393   if (ExportLoc.isValid())
394     Diag(ExportLoc, diag::note_template_export_unsupported);
395 
396   return TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
397                                        (Decl**)Params, NumParams, RAngleLoc);
398 }
399 
400 Sema::DeclResult
401 Sema::ActOnClassTemplate(Scope *S, unsigned TagSpec, TagKind TK,
402                          SourceLocation KWLoc, const CXXScopeSpec &SS,
403                          IdentifierInfo *Name, SourceLocation NameLoc,
404                          AttributeList *Attr,
405                          MultiTemplateParamsArg TemplateParameterLists,
406                          AccessSpecifier AS) {
407   assert(TemplateParameterLists.size() > 0 && "No template parameter lists?");
408   assert(TK != TK_Reference && "Can only declare or define class templates");
409   bool Invalid = false;
410 
411   // Check that we can declare a template here.
412   if (CheckTemplateDeclScope(S, TemplateParameterLists))
413     return true;
414 
415   TagDecl::TagKind Kind;
416   switch (TagSpec) {
417   default: assert(0 && "Unknown tag type!");
418   case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break;
419   case DeclSpec::TST_union:  Kind = TagDecl::TK_union; break;
420   case DeclSpec::TST_class:  Kind = TagDecl::TK_class; break;
421   }
422 
423   // There is no such thing as an unnamed class template.
424   if (!Name) {
425     Diag(KWLoc, diag::err_template_unnamed_class);
426     return true;
427   }
428 
429   // Find any previous declaration with this name.
430   LookupResult Previous = LookupParsedName(S, &SS, Name, LookupOrdinaryName,
431                                            true);
432   assert(!Previous.isAmbiguous() && "Ambiguity in class template redecl?");
433   NamedDecl *PrevDecl = 0;
434   if (Previous.begin() != Previous.end())
435     PrevDecl = *Previous.begin();
436 
437   DeclContext *SemanticContext = CurContext;
438   if (SS.isNotEmpty() && !SS.isInvalid()) {
439     SemanticContext = computeDeclContext(SS);
440 
441     // FIXME: need to match up several levels of template parameter lists here.
442   }
443 
444   // FIXME: member templates!
445   TemplateParameterList *TemplateParams
446     = static_cast<TemplateParameterList *>(*TemplateParameterLists.release());
447 
448   // If there is a previous declaration with the same name, check
449   // whether this is a valid redeclaration.
450   ClassTemplateDecl *PrevClassTemplate
451     = dyn_cast_or_null<ClassTemplateDecl>(PrevDecl);
452   if (PrevClassTemplate) {
453     // Ensure that the template parameter lists are compatible.
454     if (!TemplateParameterListsAreEqual(TemplateParams,
455                                    PrevClassTemplate->getTemplateParameters(),
456                                         /*Complain=*/true))
457       return true;
458 
459     // C++ [temp.class]p4:
460     //   In a redeclaration, partial specialization, explicit
461     //   specialization or explicit instantiation of a class template,
462     //   the class-key shall agree in kind with the original class
463     //   template declaration (7.1.5.3).
464     RecordDecl *PrevRecordDecl = PrevClassTemplate->getTemplatedDecl();
465     if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, KWLoc, *Name)) {
466       Diag(KWLoc, diag::err_use_with_wrong_tag)
467         << Name
468         << CodeModificationHint::CreateReplacement(KWLoc,
469                             PrevRecordDecl->getKindName());
470       Diag(PrevRecordDecl->getLocation(), diag::note_previous_use);
471       Kind = PrevRecordDecl->getTagKind();
472     }
473 
474     // Check for redefinition of this class template.
475     if (TK == TK_Definition) {
476       if (TagDecl *Def = PrevRecordDecl->getDefinition(Context)) {
477         Diag(NameLoc, diag::err_redefinition) << Name;
478         Diag(Def->getLocation(), diag::note_previous_definition);
479         // FIXME: Would it make sense to try to "forget" the previous
480         // definition, as part of error recovery?
481         return true;
482       }
483     }
484   } else if (PrevDecl && PrevDecl->isTemplateParameter()) {
485     // Maybe we will complain about the shadowed template parameter.
486     DiagnoseTemplateParameterShadow(NameLoc, PrevDecl);
487     // Just pretend that we didn't see the previous declaration.
488     PrevDecl = 0;
489   } else if (PrevDecl) {
490     // C++ [temp]p5:
491     //   A class template shall not have the same name as any other
492     //   template, class, function, object, enumeration, enumerator,
493     //   namespace, or type in the same scope (3.3), except as specified
494     //   in (14.5.4).
495     Diag(NameLoc, diag::err_redefinition_different_kind) << Name;
496     Diag(PrevDecl->getLocation(), diag::note_previous_definition);
497     return true;
498   }
499 
500   // Check the template parameter list of this declaration, possibly
501   // merging in the template parameter list from the previous class
502   // template declaration.
503   if (CheckTemplateParameterList(TemplateParams,
504             PrevClassTemplate? PrevClassTemplate->getTemplateParameters() : 0))
505     Invalid = true;
506 
507   // FIXME: If we had a scope specifier, we better have a previous template
508   // declaration!
509 
510   CXXRecordDecl *NewClass =
511     CXXRecordDecl::Create(Context, Kind, SemanticContext, NameLoc, Name,
512                           PrevClassTemplate?
513                             PrevClassTemplate->getTemplatedDecl() : 0,
514                           /*DelayTypeCreation=*/true);
515 
516   ClassTemplateDecl *NewTemplate
517     = ClassTemplateDecl::Create(Context, SemanticContext, NameLoc,
518                                 DeclarationName(Name), TemplateParams,
519                                 NewClass, PrevClassTemplate);
520   NewClass->setDescribedClassTemplate(NewTemplate);
521 
522   // Build the type for the class template declaration now.
523   QualType T =
524     Context.getTypeDeclType(NewClass,
525                             PrevClassTemplate?
526                               PrevClassTemplate->getTemplatedDecl() : 0);
527   assert(T->isDependentType() && "Class template type is not dependent?");
528   (void)T;
529 
530   // Set the access specifier.
531   SetMemberAccessSpecifier(NewTemplate, PrevClassTemplate, AS);
532 
533   // Set the lexical context of these templates
534   NewClass->setLexicalDeclContext(CurContext);
535   NewTemplate->setLexicalDeclContext(CurContext);
536 
537   if (TK == TK_Definition)
538     NewClass->startDefinition();
539 
540   if (Attr)
541     ProcessDeclAttributeList(NewClass, Attr);
542 
543   PushOnScopeChains(NewTemplate, S);
544 
545   if (Invalid) {
546     NewTemplate->setInvalidDecl();
547     NewClass->setInvalidDecl();
548   }
549   return DeclPtrTy::make(NewTemplate);
550 }
551 
552 /// \brief Checks the validity of a template parameter list, possibly
553 /// considering the template parameter list from a previous
554 /// declaration.
555 ///
556 /// If an "old" template parameter list is provided, it must be
557 /// equivalent (per TemplateParameterListsAreEqual) to the "new"
558 /// template parameter list.
559 ///
560 /// \param NewParams Template parameter list for a new template
561 /// declaration. This template parameter list will be updated with any
562 /// default arguments that are carried through from the previous
563 /// template parameter list.
564 ///
565 /// \param OldParams If provided, template parameter list from a
566 /// previous declaration of the same template. Default template
567 /// arguments will be merged from the old template parameter list to
568 /// the new template parameter list.
569 ///
570 /// \returns true if an error occurred, false otherwise.
571 bool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams,
572                                       TemplateParameterList *OldParams) {
573   bool Invalid = false;
574 
575   // C++ [temp.param]p10:
576   //   The set of default template-arguments available for use with a
577   //   template declaration or definition is obtained by merging the
578   //   default arguments from the definition (if in scope) and all
579   //   declarations in scope in the same way default function
580   //   arguments are (8.3.6).
581   bool SawDefaultArgument = false;
582   SourceLocation PreviousDefaultArgLoc;
583 
584   // Dummy initialization to avoid warnings.
585   TemplateParameterList::iterator OldParam = NewParams->end();
586   if (OldParams)
587     OldParam = OldParams->begin();
588 
589   for (TemplateParameterList::iterator NewParam = NewParams->begin(),
590                                     NewParamEnd = NewParams->end();
591        NewParam != NewParamEnd; ++NewParam) {
592     // Variables used to diagnose redundant default arguments
593     bool RedundantDefaultArg = false;
594     SourceLocation OldDefaultLoc;
595     SourceLocation NewDefaultLoc;
596 
597     // Variables used to diagnose missing default arguments
598     bool MissingDefaultArg = false;
599 
600     // Merge default arguments for template type parameters.
601     if (TemplateTypeParmDecl *NewTypeParm
602           = dyn_cast<TemplateTypeParmDecl>(*NewParam)) {
603       TemplateTypeParmDecl *OldTypeParm
604           = OldParams? cast<TemplateTypeParmDecl>(*OldParam) : 0;
605 
606       if (OldTypeParm && OldTypeParm->hasDefaultArgument() &&
607           NewTypeParm->hasDefaultArgument()) {
608         OldDefaultLoc = OldTypeParm->getDefaultArgumentLoc();
609         NewDefaultLoc = NewTypeParm->getDefaultArgumentLoc();
610         SawDefaultArgument = true;
611         RedundantDefaultArg = true;
612         PreviousDefaultArgLoc = NewDefaultLoc;
613       } else if (OldTypeParm && OldTypeParm->hasDefaultArgument()) {
614         // Merge the default argument from the old declaration to the
615         // new declaration.
616         SawDefaultArgument = true;
617         NewTypeParm->setDefaultArgument(OldTypeParm->getDefaultArgument(),
618                                         OldTypeParm->getDefaultArgumentLoc(),
619                                         true);
620         PreviousDefaultArgLoc = OldTypeParm->getDefaultArgumentLoc();
621       } else if (NewTypeParm->hasDefaultArgument()) {
622         SawDefaultArgument = true;
623         PreviousDefaultArgLoc = NewTypeParm->getDefaultArgumentLoc();
624       } else if (SawDefaultArgument)
625         MissingDefaultArg = true;
626     }
627     // Merge default arguments for non-type template parameters
628     else if (NonTypeTemplateParmDecl *NewNonTypeParm
629                = dyn_cast<NonTypeTemplateParmDecl>(*NewParam)) {
630       NonTypeTemplateParmDecl *OldNonTypeParm
631         = OldParams? cast<NonTypeTemplateParmDecl>(*OldParam) : 0;
632       if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument() &&
633           NewNonTypeParm->hasDefaultArgument()) {
634         OldDefaultLoc = OldNonTypeParm->getDefaultArgumentLoc();
635         NewDefaultLoc = NewNonTypeParm->getDefaultArgumentLoc();
636         SawDefaultArgument = true;
637         RedundantDefaultArg = true;
638         PreviousDefaultArgLoc = NewDefaultLoc;
639       } else if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument()) {
640         // Merge the default argument from the old declaration to the
641         // new declaration.
642         SawDefaultArgument = true;
643         // FIXME: We need to create a new kind of "default argument"
644         // expression that points to a previous template template
645         // parameter.
646         NewNonTypeParm->setDefaultArgument(
647                                         OldNonTypeParm->getDefaultArgument());
648         PreviousDefaultArgLoc = OldNonTypeParm->getDefaultArgumentLoc();
649       } else if (NewNonTypeParm->hasDefaultArgument()) {
650         SawDefaultArgument = true;
651         PreviousDefaultArgLoc = NewNonTypeParm->getDefaultArgumentLoc();
652       } else if (SawDefaultArgument)
653         MissingDefaultArg = true;
654     }
655     // Merge default arguments for template template parameters
656     else {
657       TemplateTemplateParmDecl *NewTemplateParm
658         = cast<TemplateTemplateParmDecl>(*NewParam);
659       TemplateTemplateParmDecl *OldTemplateParm
660         = OldParams? cast<TemplateTemplateParmDecl>(*OldParam) : 0;
661       if (OldTemplateParm && OldTemplateParm->hasDefaultArgument() &&
662           NewTemplateParm->hasDefaultArgument()) {
663         OldDefaultLoc = OldTemplateParm->getDefaultArgumentLoc();
664         NewDefaultLoc = NewTemplateParm->getDefaultArgumentLoc();
665         SawDefaultArgument = true;
666         RedundantDefaultArg = true;
667         PreviousDefaultArgLoc = NewDefaultLoc;
668       } else if (OldTemplateParm && OldTemplateParm->hasDefaultArgument()) {
669         // Merge the default argument from the old declaration to the
670         // new declaration.
671         SawDefaultArgument = true;
672         // FIXME: We need to create a new kind of "default argument" expression
673         // that points to a previous template template parameter.
674         NewTemplateParm->setDefaultArgument(
675                                         OldTemplateParm->getDefaultArgument());
676         PreviousDefaultArgLoc = OldTemplateParm->getDefaultArgumentLoc();
677       } else if (NewTemplateParm->hasDefaultArgument()) {
678         SawDefaultArgument = true;
679         PreviousDefaultArgLoc = NewTemplateParm->getDefaultArgumentLoc();
680       } else if (SawDefaultArgument)
681         MissingDefaultArg = true;
682     }
683 
684     if (RedundantDefaultArg) {
685       // C++ [temp.param]p12:
686       //   A template-parameter shall not be given default arguments
687       //   by two different declarations in the same scope.
688       Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);
689       Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg);
690       Invalid = true;
691     } else if (MissingDefaultArg) {
692       // C++ [temp.param]p11:
693       //   If a template-parameter has a default template-argument,
694       //   all subsequent template-parameters shall have a default
695       //   template-argument supplied.
696       Diag((*NewParam)->getLocation(),
697            diag::err_template_param_default_arg_missing);
698       Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg);
699       Invalid = true;
700     }
701 
702     // If we have an old template parameter list that we're merging
703     // in, move on to the next parameter.
704     if (OldParams)
705       ++OldParam;
706   }
707 
708   return Invalid;
709 }
710 
711 /// \brief Translates template arguments as provided by the parser
712 /// into template arguments used by semantic analysis.
713 static void
714 translateTemplateArguments(ASTTemplateArgsPtr &TemplateArgsIn,
715                            SourceLocation *TemplateArgLocs,
716                      llvm::SmallVector<TemplateArgument, 16> &TemplateArgs) {
717   TemplateArgs.reserve(TemplateArgsIn.size());
718 
719   void **Args = TemplateArgsIn.getArgs();
720   bool *ArgIsType = TemplateArgsIn.getArgIsType();
721   for (unsigned Arg = 0, Last = TemplateArgsIn.size(); Arg != Last; ++Arg) {
722     TemplateArgs.push_back(
723       ArgIsType[Arg]? TemplateArgument(TemplateArgLocs[Arg],
724                                        QualType::getFromOpaquePtr(Args[Arg]))
725                     : TemplateArgument(reinterpret_cast<Expr *>(Args[Arg])));
726   }
727 }
728 
729 /// \brief Build a canonical version of a template argument list.
730 ///
731 /// This function builds a canonical version of the given template
732 /// argument list, where each of the template arguments has been
733 /// converted into its canonical form. This routine is typically used
734 /// to canonicalize a template argument list when the template name
735 /// itself is dependent. When the template name refers to an actual
736 /// template declaration, Sema::CheckTemplateArgumentList should be
737 /// used to check and canonicalize the template arguments.
738 ///
739 /// \param TemplateArgs The incoming template arguments.
740 ///
741 /// \param NumTemplateArgs The number of template arguments in \p
742 /// TemplateArgs.
743 ///
744 /// \param Canonical A vector to be filled with the canonical versions
745 /// of the template arguments.
746 ///
747 /// \param Context The ASTContext in which the template arguments live.
748 static void CanonicalizeTemplateArguments(const TemplateArgument *TemplateArgs,
749                                           unsigned NumTemplateArgs,
750                             llvm::SmallVectorImpl<TemplateArgument> &Canonical,
751                                           ASTContext &Context) {
752   Canonical.reserve(NumTemplateArgs);
753   for (unsigned Idx = 0; Idx < NumTemplateArgs; ++Idx) {
754     switch (TemplateArgs[Idx].getKind()) {
755     case TemplateArgument::Null:
756       assert(false && "Should never see a NULL template argument here");
757       break;
758 
759     case TemplateArgument::Expression:
760       // FIXME: Build canonical expression (!)
761       Canonical.push_back(TemplateArgs[Idx]);
762       break;
763 
764     case TemplateArgument::Declaration:
765       Canonical.push_back(
766                  TemplateArgument(SourceLocation(),
767                     Context.getCanonicalDecl(TemplateArgs[Idx].getAsDecl())));
768       break;
769 
770     case TemplateArgument::Integral:
771       Canonical.push_back(TemplateArgument(SourceLocation(),
772                                            *TemplateArgs[Idx].getAsIntegral(),
773                                         TemplateArgs[Idx].getIntegralType()));
774       break;
775 
776     case TemplateArgument::Type: {
777       QualType CanonType
778         = Context.getCanonicalType(TemplateArgs[Idx].getAsType());
779       Canonical.push_back(TemplateArgument(SourceLocation(), CanonType));
780       break;
781     }
782     }
783   }
784 }
785 
786 QualType Sema::CheckTemplateIdType(TemplateName Name,
787                                    SourceLocation TemplateLoc,
788                                    SourceLocation LAngleLoc,
789                                    const TemplateArgument *TemplateArgs,
790                                    unsigned NumTemplateArgs,
791                                    SourceLocation RAngleLoc) {
792   TemplateDecl *Template = Name.getAsTemplateDecl();
793   if (!Template) {
794     // The template name does not resolve to a template, so we just
795     // build a dependent template-id type.
796 
797     // Canonicalize the template arguments to build the canonical
798     // template-id type.
799     llvm::SmallVector<TemplateArgument, 16> CanonicalTemplateArgs;
800     CanonicalizeTemplateArguments(TemplateArgs, NumTemplateArgs,
801                                   CanonicalTemplateArgs, Context);
802 
803     TemplateName CanonName = Context.getCanonicalTemplateName(Name);
804     QualType CanonType
805       = Context.getTemplateSpecializationType(CanonName,
806                                               &CanonicalTemplateArgs[0],
807                                               CanonicalTemplateArgs.size());
808 
809     // Build the dependent template-id type.
810     return Context.getTemplateSpecializationType(Name, TemplateArgs,
811                                                  NumTemplateArgs, CanonType);
812   }
813 
814   // Check that the template argument list is well-formed for this
815   // template.
816   TemplateArgumentListBuilder ConvertedTemplateArgs(Context);
817   if (CheckTemplateArgumentList(Template, TemplateLoc, LAngleLoc,
818                                 TemplateArgs, NumTemplateArgs, RAngleLoc,
819                                 ConvertedTemplateArgs))
820     return QualType();
821 
822   assert((ConvertedTemplateArgs.size() ==
823             Template->getTemplateParameters()->size()) &&
824          "Converted template argument list is too short!");
825 
826   QualType CanonType;
827 
828   if (TemplateSpecializationType::anyDependentTemplateArguments(
829                                                       TemplateArgs,
830                                                       NumTemplateArgs)) {
831     // This class template specialization is a dependent
832     // type. Therefore, its canonical type is another class template
833     // specialization type that contains all of the converted
834     // arguments in canonical form. This ensures that, e.g., A<T> and
835     // A<T, T> have identical types when A is declared as:
836     //
837     //   template<typename T, typename U = T> struct A;
838     TemplateName CanonName = Context.getCanonicalTemplateName(Name);
839     CanonType = Context.getTemplateSpecializationType(CanonName,
840                                     ConvertedTemplateArgs.getFlatArgumentList(),
841                                     ConvertedTemplateArgs.flatSize());
842   } else if (ClassTemplateDecl *ClassTemplate
843                = dyn_cast<ClassTemplateDecl>(Template)) {
844     // Find the class template specialization declaration that
845     // corresponds to these arguments.
846     llvm::FoldingSetNodeID ID;
847     ClassTemplateSpecializationDecl::Profile(ID,
848                                     ConvertedTemplateArgs.getFlatArgumentList(),
849                                     ConvertedTemplateArgs.flatSize());
850     void *InsertPos = 0;
851     ClassTemplateSpecializationDecl *Decl
852       = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
853     if (!Decl) {
854       // This is the first time we have referenced this class template
855       // specialization. Create the canonical declaration and add it to
856       // the set of specializations.
857       Decl = ClassTemplateSpecializationDecl::Create(Context,
858                                     ClassTemplate->getDeclContext(),
859                                     TemplateLoc,
860                                     ClassTemplate,
861                                     ConvertedTemplateArgs, 0);
862       ClassTemplate->getSpecializations().InsertNode(Decl, InsertPos);
863       Decl->setLexicalDeclContext(CurContext);
864     }
865 
866     CanonType = Context.getTypeDeclType(Decl);
867   }
868 
869   // Build the fully-sugared type for this class template
870   // specialization, which refers back to the class template
871   // specialization we created or found.
872   return Context.getTemplateSpecializationType(Name, TemplateArgs,
873                                                NumTemplateArgs, CanonType);
874 }
875 
876 Action::TypeResult
877 Sema::ActOnTemplateIdType(TemplateTy TemplateD, SourceLocation TemplateLoc,
878                           SourceLocation LAngleLoc,
879                           ASTTemplateArgsPtr TemplateArgsIn,
880                           SourceLocation *TemplateArgLocs,
881                           SourceLocation RAngleLoc) {
882   TemplateName Template = TemplateD.getAsVal<TemplateName>();
883 
884   // Translate the parser's template argument list in our AST format.
885   llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
886   translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
887 
888   QualType Result = CheckTemplateIdType(Template, TemplateLoc, LAngleLoc,
889                                         TemplateArgs.data(),
890                                         TemplateArgs.size(),
891                                         RAngleLoc);
892   TemplateArgsIn.release();
893 
894   if (Result.isNull())
895     return true;
896 
897   return Result.getAsOpaquePtr();
898 }
899 
900 /// \brief Form a dependent template name.
901 ///
902 /// This action forms a dependent template name given the template
903 /// name and its (presumably dependent) scope specifier. For
904 /// example, given "MetaFun::template apply", the scope specifier \p
905 /// SS will be "MetaFun::", \p TemplateKWLoc contains the location
906 /// of the "template" keyword, and "apply" is the \p Name.
907 Sema::TemplateTy
908 Sema::ActOnDependentTemplateName(SourceLocation TemplateKWLoc,
909                                  const IdentifierInfo &Name,
910                                  SourceLocation NameLoc,
911                                  const CXXScopeSpec &SS) {
912   if (!SS.isSet() || SS.isInvalid())
913     return TemplateTy();
914 
915   NestedNameSpecifier *Qualifier
916     = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
917 
918   // FIXME: member of the current instantiation
919 
920   if (!Qualifier->isDependent()) {
921     // C++0x [temp.names]p5:
922     //   If a name prefixed by the keyword template is not the name of
923     //   a template, the program is ill-formed. [Note: the keyword
924     //   template may not be applied to non-template members of class
925     //   templates. -end note ] [ Note: as is the case with the
926     //   typename prefix, the template prefix is allowed in cases
927     //   where it is not strictly necessary; i.e., when the
928     //   nested-name-specifier or the expression on the left of the ->
929     //   or . is not dependent on a template-parameter, or the use
930     //   does not appear in the scope of a template. -end note]
931     //
932     // Note: C++03 was more strict here, because it banned the use of
933     // the "template" keyword prior to a template-name that was not a
934     // dependent name. C++ DR468 relaxed this requirement (the
935     // "template" keyword is now permitted). We follow the C++0x
936     // rules, even in C++03 mode, retroactively applying the DR.
937     TemplateTy Template;
938     TemplateNameKind TNK = isTemplateName(Name, 0, Template, &SS);
939     if (TNK == TNK_Non_template) {
940       Diag(NameLoc, diag::err_template_kw_refers_to_non_template)
941         << &Name;
942       return TemplateTy();
943     }
944 
945     return Template;
946   }
947 
948   return TemplateTy::make(Context.getDependentTemplateName(Qualifier, &Name));
949 }
950 
951 /// \brief Check that the given template argument list is well-formed
952 /// for specializing the given template.
953 bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
954                                      SourceLocation TemplateLoc,
955                                      SourceLocation LAngleLoc,
956                                      const TemplateArgument *TemplateArgs,
957                                      unsigned NumTemplateArgs,
958                                      SourceLocation RAngleLoc,
959                                      TemplateArgumentListBuilder &Converted) {
960   TemplateParameterList *Params = Template->getTemplateParameters();
961   unsigned NumParams = Params->size();
962   unsigned NumArgs = NumTemplateArgs;
963   bool Invalid = false;
964 
965   if (NumArgs > NumParams ||
966       NumArgs < Params->getMinRequiredArguments()) {
967     // FIXME: point at either the first arg beyond what we can handle,
968     // or the '>', depending on whether we have too many or too few
969     // arguments.
970     SourceRange Range;
971     if (NumArgs > NumParams)
972       Range = SourceRange(TemplateArgs[NumParams].getLocation(), RAngleLoc);
973     Diag(TemplateLoc, diag::err_template_arg_list_different_arity)
974       << (NumArgs > NumParams)
975       << (isa<ClassTemplateDecl>(Template)? 0 :
976           isa<FunctionTemplateDecl>(Template)? 1 :
977           isa<TemplateTemplateParmDecl>(Template)? 2 : 3)
978       << Template << Range;
979     Diag(Template->getLocation(), diag::note_template_decl_here)
980       << Params->getSourceRange();
981     Invalid = true;
982   }
983 
984   // C++ [temp.arg]p1:
985   //   [...] The type and form of each template-argument specified in
986   //   a template-id shall match the type and form specified for the
987   //   corresponding parameter declared by the template in its
988   //   template-parameter-list.
989   unsigned ArgIdx = 0;
990   for (TemplateParameterList::iterator Param = Params->begin(),
991                                        ParamEnd = Params->end();
992        Param != ParamEnd; ++Param, ++ArgIdx) {
993     // Decode the template argument
994     TemplateArgument Arg;
995     if (ArgIdx >= NumArgs) {
996       // Retrieve the default template argument from the template
997       // parameter.
998       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) {
999         if (!TTP->hasDefaultArgument())
1000           break;
1001 
1002         QualType ArgType = TTP->getDefaultArgument();
1003 
1004         // If the argument type is dependent, instantiate it now based
1005         // on the previously-computed template arguments.
1006         if (ArgType->isDependentType()) {
1007           InstantiatingTemplate Inst(*this, TemplateLoc,
1008                                      Template, Converted.getFlatArgumentList(),
1009                                      Converted.flatSize(),
1010                                      SourceRange(TemplateLoc, RAngleLoc));
1011 
1012           TemplateArgumentList TemplateArgs(Context, Converted,
1013                                             /*CopyArgs=*/false,
1014                                             /*FlattenArgs=*/false);
1015           ArgType = InstantiateType(ArgType, TemplateArgs,
1016                                     TTP->getDefaultArgumentLoc(),
1017                                     TTP->getDeclName());
1018         }
1019 
1020         if (ArgType.isNull())
1021           return true;
1022 
1023         Arg = TemplateArgument(TTP->getLocation(), ArgType);
1024       } else if (NonTypeTemplateParmDecl *NTTP
1025                    = dyn_cast<NonTypeTemplateParmDecl>(*Param)) {
1026         if (!NTTP->hasDefaultArgument())
1027           break;
1028 
1029         InstantiatingTemplate Inst(*this, TemplateLoc,
1030                                    Template, Converted.getFlatArgumentList(),
1031                                    Converted.flatSize(),
1032                                    SourceRange(TemplateLoc, RAngleLoc));
1033 
1034         TemplateArgumentList TemplateArgs(Context, Converted,
1035                                           /*CopyArgs=*/false,
1036                                           /*FlattenArgs=*/false);
1037 
1038         Sema::OwningExprResult E = InstantiateExpr(NTTP->getDefaultArgument(),
1039                                                    TemplateArgs);
1040         if (E.isInvalid())
1041           return true;
1042 
1043         Arg = TemplateArgument(E.takeAs<Expr>());
1044       } else {
1045         TemplateTemplateParmDecl *TempParm
1046           = cast<TemplateTemplateParmDecl>(*Param);
1047 
1048         if (!TempParm->hasDefaultArgument())
1049           break;
1050 
1051         // FIXME: Instantiate default argument
1052         Arg = TemplateArgument(TempParm->getDefaultArgument());
1053       }
1054     } else {
1055       // Retrieve the template argument produced by the user.
1056       Arg = TemplateArgs[ArgIdx];
1057     }
1058 
1059 
1060     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) {
1061       // Check template type parameters.
1062       if (Arg.getKind() == TemplateArgument::Type) {
1063         if (CheckTemplateArgument(TTP, Arg.getAsType(), Arg.getLocation()))
1064           Invalid = true;
1065 
1066         // Add the converted template type argument.
1067         Converted.push_back(
1068                  TemplateArgument(Arg.getLocation(),
1069                                   Context.getCanonicalType(Arg.getAsType())));
1070         continue;
1071       }
1072 
1073       // C++ [temp.arg.type]p1:
1074       //   A template-argument for a template-parameter which is a
1075       //   type shall be a type-id.
1076 
1077       // We have a template type parameter but the template argument
1078       // is not a type.
1079       Diag(Arg.getLocation(), diag::err_template_arg_must_be_type);
1080       Diag((*Param)->getLocation(), diag::note_template_param_here);
1081       Invalid = true;
1082     } else if (NonTypeTemplateParmDecl *NTTP
1083                  = dyn_cast<NonTypeTemplateParmDecl>(*Param)) {
1084       // Check non-type template parameters.
1085 
1086       // Instantiate the type of the non-type template parameter with
1087       // the template arguments we've seen thus far.
1088       QualType NTTPType = NTTP->getType();
1089       if (NTTPType->isDependentType()) {
1090         // Instantiate the type of the non-type template parameter.
1091         InstantiatingTemplate Inst(*this, TemplateLoc,
1092                                    Template, Converted.getFlatArgumentList(),
1093                                    Converted.flatSize(),
1094                                    SourceRange(TemplateLoc, RAngleLoc));
1095 
1096         TemplateArgumentList TemplateArgs(Context, Converted,
1097                                           /*CopyArgs=*/false,
1098                                           /*FlattenArgs=*/false);
1099         NTTPType = InstantiateType(NTTPType, TemplateArgs,
1100                                    NTTP->getLocation(),
1101                                    NTTP->getDeclName());
1102         // If that worked, check the non-type template parameter type
1103         // for validity.
1104         if (!NTTPType.isNull())
1105           NTTPType = CheckNonTypeTemplateParameterType(NTTPType,
1106                                                        NTTP->getLocation());
1107 
1108         if (NTTPType.isNull()) {
1109           Invalid = true;
1110           break;
1111         }
1112       }
1113 
1114       switch (Arg.getKind()) {
1115       case TemplateArgument::Null:
1116         assert(false && "Should never see a NULL template argument here");
1117         break;
1118 
1119       case TemplateArgument::Expression: {
1120         Expr *E = Arg.getAsExpr();
1121         TemplateArgument Result;
1122         if (CheckTemplateArgument(NTTP, NTTPType, E, Result))
1123           Invalid = true;
1124         else
1125           Converted.push_back(Result);
1126         break;
1127       }
1128 
1129       case TemplateArgument::Declaration:
1130       case TemplateArgument::Integral:
1131         // We've already checked this template argument, so just copy
1132         // it to the list of converted arguments.
1133         Converted.push_back(Arg);
1134         break;
1135 
1136       case TemplateArgument::Type:
1137         // We have a non-type template parameter but the template
1138         // argument is a type.
1139 
1140         // C++ [temp.arg]p2:
1141         //   In a template-argument, an ambiguity between a type-id and
1142         //   an expression is resolved to a type-id, regardless of the
1143         //   form of the corresponding template-parameter.
1144         //
1145         // We warn specifically about this case, since it can be rather
1146         // confusing for users.
1147         if (Arg.getAsType()->isFunctionType())
1148           Diag(Arg.getLocation(), diag::err_template_arg_nontype_ambig)
1149             << Arg.getAsType();
1150         else
1151           Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr);
1152         Diag((*Param)->getLocation(), diag::note_template_param_here);
1153         Invalid = true;
1154       }
1155     } else {
1156       // Check template template parameters.
1157       TemplateTemplateParmDecl *TempParm
1158         = cast<TemplateTemplateParmDecl>(*Param);
1159 
1160       switch (Arg.getKind()) {
1161       case TemplateArgument::Null:
1162         assert(false && "Should never see a NULL template argument here");
1163         break;
1164 
1165       case TemplateArgument::Expression: {
1166         Expr *ArgExpr = Arg.getAsExpr();
1167         if (ArgExpr && isa<DeclRefExpr>(ArgExpr) &&
1168             isa<TemplateDecl>(cast<DeclRefExpr>(ArgExpr)->getDecl())) {
1169           if (CheckTemplateArgument(TempParm, cast<DeclRefExpr>(ArgExpr)))
1170             Invalid = true;
1171 
1172           // Add the converted template argument.
1173           Decl *D
1174             = Context.getCanonicalDecl(cast<DeclRefExpr>(ArgExpr)->getDecl());
1175           Converted.push_back(TemplateArgument(Arg.getLocation(), D));
1176           continue;
1177         }
1178       }
1179         // fall through
1180 
1181       case TemplateArgument::Type: {
1182         // We have a template template parameter but the template
1183         // argument does not refer to a template.
1184         Diag(Arg.getLocation(), diag::err_template_arg_must_be_template);
1185         Invalid = true;
1186         break;
1187       }
1188 
1189       case TemplateArgument::Declaration:
1190         // We've already checked this template argument, so just copy
1191         // it to the list of converted arguments.
1192         Converted.push_back(Arg);
1193         break;
1194 
1195       case TemplateArgument::Integral:
1196         assert(false && "Integral argument with template template parameter");
1197         break;
1198       }
1199     }
1200   }
1201 
1202   return Invalid;
1203 }
1204 
1205 /// \brief Check a template argument against its corresponding
1206 /// template type parameter.
1207 ///
1208 /// This routine implements the semantics of C++ [temp.arg.type]. It
1209 /// returns true if an error occurred, and false otherwise.
1210 bool Sema::CheckTemplateArgument(TemplateTypeParmDecl *Param,
1211                                  QualType Arg, SourceLocation ArgLoc) {
1212   // C++ [temp.arg.type]p2:
1213   //   A local type, a type with no linkage, an unnamed type or a type
1214   //   compounded from any of these types shall not be used as a
1215   //   template-argument for a template type-parameter.
1216   //
1217   // FIXME: Perform the recursive and no-linkage type checks.
1218   const TagType *Tag = 0;
1219   if (const EnumType *EnumT = Arg->getAsEnumType())
1220     Tag = EnumT;
1221   else if (const RecordType *RecordT = Arg->getAsRecordType())
1222     Tag = RecordT;
1223   if (Tag && Tag->getDecl()->getDeclContext()->isFunctionOrMethod())
1224     return Diag(ArgLoc, diag::err_template_arg_local_type)
1225       << QualType(Tag, 0);
1226   else if (Tag && !Tag->getDecl()->getDeclName() &&
1227            !Tag->getDecl()->getTypedefForAnonDecl()) {
1228     Diag(ArgLoc, diag::err_template_arg_unnamed_type);
1229     Diag(Tag->getDecl()->getLocation(), diag::note_template_unnamed_type_here);
1230     return true;
1231   }
1232 
1233   return false;
1234 }
1235 
1236 /// \brief Checks whether the given template argument is the address
1237 /// of an object or function according to C++ [temp.arg.nontype]p1.
1238 bool Sema::CheckTemplateArgumentAddressOfObjectOrFunction(Expr *Arg,
1239                                                           NamedDecl *&Entity) {
1240   bool Invalid = false;
1241 
1242   // See through any implicit casts we added to fix the type.
1243   if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg))
1244     Arg = Cast->getSubExpr();
1245 
1246   // C++0x allows nullptr, and there's no further checking to be done for that.
1247   if (Arg->getType()->isNullPtrType())
1248     return false;
1249 
1250   // C++ [temp.arg.nontype]p1:
1251   //
1252   //   A template-argument for a non-type, non-template
1253   //   template-parameter shall be one of: [...]
1254   //
1255   //     -- the address of an object or function with external
1256   //        linkage, including function templates and function
1257   //        template-ids but excluding non-static class members,
1258   //        expressed as & id-expression where the & is optional if
1259   //        the name refers to a function or array, or if the
1260   //        corresponding template-parameter is a reference; or
1261   DeclRefExpr *DRE = 0;
1262 
1263   // Ignore (and complain about) any excess parentheses.
1264   while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
1265     if (!Invalid) {
1266       Diag(Arg->getSourceRange().getBegin(),
1267            diag::err_template_arg_extra_parens)
1268         << Arg->getSourceRange();
1269       Invalid = true;
1270     }
1271 
1272     Arg = Parens->getSubExpr();
1273   }
1274 
1275   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) {
1276     if (UnOp->getOpcode() == UnaryOperator::AddrOf)
1277       DRE = dyn_cast<DeclRefExpr>(UnOp->getSubExpr());
1278   } else
1279     DRE = dyn_cast<DeclRefExpr>(Arg);
1280 
1281   if (!DRE || !isa<ValueDecl>(DRE->getDecl()))
1282     return Diag(Arg->getSourceRange().getBegin(),
1283                 diag::err_template_arg_not_object_or_func_form)
1284       << Arg->getSourceRange();
1285 
1286   // Cannot refer to non-static data members
1287   if (FieldDecl *Field = dyn_cast<FieldDecl>(DRE->getDecl()))
1288     return Diag(Arg->getSourceRange().getBegin(), diag::err_template_arg_field)
1289       << Field << Arg->getSourceRange();
1290 
1291   // Cannot refer to non-static member functions
1292   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(DRE->getDecl()))
1293     if (!Method->isStatic())
1294       return Diag(Arg->getSourceRange().getBegin(),
1295                   diag::err_template_arg_method)
1296         << Method << Arg->getSourceRange();
1297 
1298   // Functions must have external linkage.
1299   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(DRE->getDecl())) {
1300     if (Func->getStorageClass() == FunctionDecl::Static) {
1301       Diag(Arg->getSourceRange().getBegin(),
1302            diag::err_template_arg_function_not_extern)
1303         << Func << Arg->getSourceRange();
1304       Diag(Func->getLocation(), diag::note_template_arg_internal_object)
1305         << true;
1306       return true;
1307     }
1308 
1309     // Okay: we've named a function with external linkage.
1310     Entity = Func;
1311     return Invalid;
1312   }
1313 
1314   if (VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl())) {
1315     if (!Var->hasGlobalStorage()) {
1316       Diag(Arg->getSourceRange().getBegin(),
1317            diag::err_template_arg_object_not_extern)
1318         << Var << Arg->getSourceRange();
1319       Diag(Var->getLocation(), diag::note_template_arg_internal_object)
1320         << true;
1321       return true;
1322     }
1323 
1324     // Okay: we've named an object with external linkage
1325     Entity = Var;
1326     return Invalid;
1327   }
1328 
1329   // We found something else, but we don't know specifically what it is.
1330   Diag(Arg->getSourceRange().getBegin(),
1331        diag::err_template_arg_not_object_or_func)
1332       << Arg->getSourceRange();
1333   Diag(DRE->getDecl()->getLocation(),
1334        diag::note_template_arg_refers_here);
1335   return true;
1336 }
1337 
1338 /// \brief Checks whether the given template argument is a pointer to
1339 /// member constant according to C++ [temp.arg.nontype]p1.
1340 bool
1341 Sema::CheckTemplateArgumentPointerToMember(Expr *Arg, NamedDecl *&Member) {
1342   bool Invalid = false;
1343 
1344   // See through any implicit casts we added to fix the type.
1345   if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg))
1346     Arg = Cast->getSubExpr();
1347 
1348   // C++0x allows nullptr, and there's no further checking to be done for that.
1349   if (Arg->getType()->isNullPtrType())
1350     return false;
1351 
1352   // C++ [temp.arg.nontype]p1:
1353   //
1354   //   A template-argument for a non-type, non-template
1355   //   template-parameter shall be one of: [...]
1356   //
1357   //     -- a pointer to member expressed as described in 5.3.1.
1358   QualifiedDeclRefExpr *DRE = 0;
1359 
1360   // Ignore (and complain about) any excess parentheses.
1361   while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
1362     if (!Invalid) {
1363       Diag(Arg->getSourceRange().getBegin(),
1364            diag::err_template_arg_extra_parens)
1365         << Arg->getSourceRange();
1366       Invalid = true;
1367     }
1368 
1369     Arg = Parens->getSubExpr();
1370   }
1371 
1372   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg))
1373     if (UnOp->getOpcode() == UnaryOperator::AddrOf)
1374       DRE = dyn_cast<QualifiedDeclRefExpr>(UnOp->getSubExpr());
1375 
1376   if (!DRE)
1377     return Diag(Arg->getSourceRange().getBegin(),
1378                 diag::err_template_arg_not_pointer_to_member_form)
1379       << Arg->getSourceRange();
1380 
1381   if (isa<FieldDecl>(DRE->getDecl()) || isa<CXXMethodDecl>(DRE->getDecl())) {
1382     assert((isa<FieldDecl>(DRE->getDecl()) ||
1383             !cast<CXXMethodDecl>(DRE->getDecl())->isStatic()) &&
1384            "Only non-static member pointers can make it here");
1385 
1386     // Okay: this is the address of a non-static member, and therefore
1387     // a member pointer constant.
1388     Member = DRE->getDecl();
1389     return Invalid;
1390   }
1391 
1392   // We found something else, but we don't know specifically what it is.
1393   Diag(Arg->getSourceRange().getBegin(),
1394        diag::err_template_arg_not_pointer_to_member_form)
1395       << Arg->getSourceRange();
1396   Diag(DRE->getDecl()->getLocation(),
1397        diag::note_template_arg_refers_here);
1398   return true;
1399 }
1400 
1401 /// \brief Check a template argument against its corresponding
1402 /// non-type template parameter.
1403 ///
1404 /// This routine implements the semantics of C++ [temp.arg.nontype].
1405 /// It returns true if an error occurred, and false otherwise. \p
1406 /// InstantiatedParamType is the type of the non-type template
1407 /// parameter after it has been instantiated.
1408 ///
1409 /// If no error was detected, Converted receives the converted template argument.
1410 bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
1411                                  QualType InstantiatedParamType, Expr *&Arg,
1412                                  TemplateArgument &Converted) {
1413   SourceLocation StartLoc = Arg->getSourceRange().getBegin();
1414 
1415   // If either the parameter has a dependent type or the argument is
1416   // type-dependent, there's nothing we can check now.
1417   // FIXME: Add template argument to Converted!
1418   if (InstantiatedParamType->isDependentType() || Arg->isTypeDependent()) {
1419     // FIXME: Produce a cloned, canonical expression?
1420     Converted = TemplateArgument(Arg);
1421     return false;
1422   }
1423 
1424   // C++ [temp.arg.nontype]p5:
1425   //   The following conversions are performed on each expression used
1426   //   as a non-type template-argument. If a non-type
1427   //   template-argument cannot be converted to the type of the
1428   //   corresponding template-parameter then the program is
1429   //   ill-formed.
1430   //
1431   //     -- for a non-type template-parameter of integral or
1432   //        enumeration type, integral promotions (4.5) and integral
1433   //        conversions (4.7) are applied.
1434   QualType ParamType = InstantiatedParamType;
1435   QualType ArgType = Arg->getType();
1436   if (ParamType->isIntegralType() || ParamType->isEnumeralType()) {
1437     // C++ [temp.arg.nontype]p1:
1438     //   A template-argument for a non-type, non-template
1439     //   template-parameter shall be one of:
1440     //
1441     //     -- an integral constant-expression of integral or enumeration
1442     //        type; or
1443     //     -- the name of a non-type template-parameter; or
1444     SourceLocation NonConstantLoc;
1445     llvm::APSInt Value;
1446     if (!ArgType->isIntegralType() && !ArgType->isEnumeralType()) {
1447       Diag(Arg->getSourceRange().getBegin(),
1448            diag::err_template_arg_not_integral_or_enumeral)
1449         << ArgType << Arg->getSourceRange();
1450       Diag(Param->getLocation(), diag::note_template_param_here);
1451       return true;
1452     } else if (!Arg->isValueDependent() &&
1453                !Arg->isIntegerConstantExpr(Value, Context, &NonConstantLoc)) {
1454       Diag(NonConstantLoc, diag::err_template_arg_not_ice)
1455         << ArgType << Arg->getSourceRange();
1456       return true;
1457     }
1458 
1459     // FIXME: We need some way to more easily get the unqualified form
1460     // of the types without going all the way to the
1461     // canonical type.
1462     if (Context.getCanonicalType(ParamType).getCVRQualifiers())
1463       ParamType = Context.getCanonicalType(ParamType).getUnqualifiedType();
1464     if (Context.getCanonicalType(ArgType).getCVRQualifiers())
1465       ArgType = Context.getCanonicalType(ArgType).getUnqualifiedType();
1466 
1467     // Try to convert the argument to the parameter's type.
1468     if (ParamType == ArgType) {
1469       // Okay: no conversion necessary
1470     } else if (IsIntegralPromotion(Arg, ArgType, ParamType) ||
1471                !ParamType->isEnumeralType()) {
1472       // This is an integral promotion or conversion.
1473       ImpCastExprToType(Arg, ParamType);
1474     } else {
1475       // We can't perform this conversion.
1476       Diag(Arg->getSourceRange().getBegin(),
1477            diag::err_template_arg_not_convertible)
1478         << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
1479       Diag(Param->getLocation(), diag::note_template_param_here);
1480       return true;
1481     }
1482 
1483     QualType IntegerType = Context.getCanonicalType(ParamType);
1484     if (const EnumType *Enum = IntegerType->getAsEnumType())
1485       IntegerType = Context.getCanonicalType(Enum->getDecl()->getIntegerType());
1486 
1487     if (!Arg->isValueDependent()) {
1488       // Check that an unsigned parameter does not receive a negative
1489       // value.
1490       if (IntegerType->isUnsignedIntegerType()
1491           && (Value.isSigned() && Value.isNegative())) {
1492         Diag(Arg->getSourceRange().getBegin(), diag::err_template_arg_negative)
1493           << Value.toString(10) << Param->getType()
1494           << Arg->getSourceRange();
1495         Diag(Param->getLocation(), diag::note_template_param_here);
1496         return true;
1497       }
1498 
1499       // Check that we don't overflow the template parameter type.
1500       unsigned AllowedBits = Context.getTypeSize(IntegerType);
1501       if (Value.getActiveBits() > AllowedBits) {
1502         Diag(Arg->getSourceRange().getBegin(),
1503              diag::err_template_arg_too_large)
1504           << Value.toString(10) << Param->getType()
1505           << Arg->getSourceRange();
1506         Diag(Param->getLocation(), diag::note_template_param_here);
1507         return true;
1508       }
1509 
1510       if (Value.getBitWidth() != AllowedBits)
1511         Value.extOrTrunc(AllowedBits);
1512       Value.setIsSigned(IntegerType->isSignedIntegerType());
1513     }
1514 
1515     // Add the value of this argument to the list of converted
1516     // arguments. We use the bitwidth and signedness of the template
1517     // parameter.
1518     if (Arg->isValueDependent()) {
1519       // The argument is value-dependent. Create a new
1520       // TemplateArgument with the converted expression.
1521       Converted = TemplateArgument(Arg);
1522       return false;
1523     }
1524 
1525     Converted = TemplateArgument(StartLoc, Value,
1526                                  ParamType->isEnumeralType() ? ParamType
1527                                                              : IntegerType);
1528     return false;
1529   }
1530 
1531   // Handle pointer-to-function, reference-to-function, and
1532   // pointer-to-member-function all in (roughly) the same way.
1533   if (// -- For a non-type template-parameter of type pointer to
1534       //    function, only the function-to-pointer conversion (4.3) is
1535       //    applied. If the template-argument represents a set of
1536       //    overloaded functions (or a pointer to such), the matching
1537       //    function is selected from the set (13.4).
1538       // In C++0x, any std::nullptr_t value can be converted.
1539       (ParamType->isPointerType() &&
1540        ParamType->getAsPointerType()->getPointeeType()->isFunctionType()) ||
1541       // -- For a non-type template-parameter of type reference to
1542       //    function, no conversions apply. If the template-argument
1543       //    represents a set of overloaded functions, the matching
1544       //    function is selected from the set (13.4).
1545       (ParamType->isReferenceType() &&
1546        ParamType->getAsReferenceType()->getPointeeType()->isFunctionType()) ||
1547       // -- For a non-type template-parameter of type pointer to
1548       //    member function, no conversions apply. If the
1549       //    template-argument represents a set of overloaded member
1550       //    functions, the matching member function is selected from
1551       //    the set (13.4).
1552       // Again, C++0x allows a std::nullptr_t value.
1553       (ParamType->isMemberPointerType() &&
1554        ParamType->getAsMemberPointerType()->getPointeeType()
1555          ->isFunctionType())) {
1556     if (Context.hasSameUnqualifiedType(ArgType,
1557                                        ParamType.getNonReferenceType())) {
1558       // We don't have to do anything: the types already match.
1559     } else if (ArgType->isNullPtrType() && (ParamType->isPointerType() ||
1560                  ParamType->isMemberPointerType())) {
1561       ArgType = ParamType;
1562       ImpCastExprToType(Arg, ParamType);
1563     } else if (ArgType->isFunctionType() && ParamType->isPointerType()) {
1564       ArgType = Context.getPointerType(ArgType);
1565       ImpCastExprToType(Arg, ArgType);
1566     } else if (FunctionDecl *Fn
1567                  = ResolveAddressOfOverloadedFunction(Arg, ParamType, true)) {
1568       if (DiagnoseUseOfDecl(Fn, Arg->getSourceRange().getBegin()))
1569         return true;
1570 
1571       FixOverloadedFunctionReference(Arg, Fn);
1572       ArgType = Arg->getType();
1573       if (ArgType->isFunctionType() && ParamType->isPointerType()) {
1574         ArgType = Context.getPointerType(Arg->getType());
1575         ImpCastExprToType(Arg, ArgType);
1576       }
1577     }
1578 
1579     if (!Context.hasSameUnqualifiedType(ArgType,
1580                                         ParamType.getNonReferenceType())) {
1581       // We can't perform this conversion.
1582       Diag(Arg->getSourceRange().getBegin(),
1583            diag::err_template_arg_not_convertible)
1584         << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
1585       Diag(Param->getLocation(), diag::note_template_param_here);
1586       return true;
1587     }
1588 
1589     if (ParamType->isMemberPointerType()) {
1590       NamedDecl *Member = 0;
1591       if (CheckTemplateArgumentPointerToMember(Arg, Member))
1592         return true;
1593 
1594       Member = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Member));
1595       Converted = TemplateArgument(StartLoc, Member);
1596       return false;
1597     }
1598 
1599     NamedDecl *Entity = 0;
1600     if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
1601       return true;
1602 
1603     Entity = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Entity));
1604     Converted = TemplateArgument(StartLoc, Entity);
1605     return false;
1606   }
1607 
1608   if (ParamType->isPointerType()) {
1609     //   -- for a non-type template-parameter of type pointer to
1610     //      object, qualification conversions (4.4) and the
1611     //      array-to-pointer conversion (4.2) are applied.
1612     // C++0x also allows a value of std::nullptr_t.
1613     assert(ParamType->getAsPointerType()->getPointeeType()->isObjectType() &&
1614            "Only object pointers allowed here");
1615 
1616     if (ArgType->isNullPtrType()) {
1617       ArgType = ParamType;
1618       ImpCastExprToType(Arg, ParamType);
1619     } else if (ArgType->isArrayType()) {
1620       ArgType = Context.getArrayDecayedType(ArgType);
1621       ImpCastExprToType(Arg, ArgType);
1622     }
1623 
1624     if (IsQualificationConversion(ArgType, ParamType)) {
1625       ArgType = ParamType;
1626       ImpCastExprToType(Arg, ParamType);
1627     }
1628 
1629     if (!Context.hasSameUnqualifiedType(ArgType, ParamType)) {
1630       // We can't perform this conversion.
1631       Diag(Arg->getSourceRange().getBegin(),
1632            diag::err_template_arg_not_convertible)
1633         << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
1634       Diag(Param->getLocation(), diag::note_template_param_here);
1635       return true;
1636     }
1637 
1638     NamedDecl *Entity = 0;
1639     if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
1640       return true;
1641 
1642     Entity = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Entity));
1643     Converted = TemplateArgument(StartLoc, Entity);
1644     return false;
1645   }
1646 
1647   if (const ReferenceType *ParamRefType = ParamType->getAsReferenceType()) {
1648     //   -- For a non-type template-parameter of type reference to
1649     //      object, no conversions apply. The type referred to by the
1650     //      reference may be more cv-qualified than the (otherwise
1651     //      identical) type of the template-argument. The
1652     //      template-parameter is bound directly to the
1653     //      template-argument, which must be an lvalue.
1654     assert(ParamRefType->getPointeeType()->isObjectType() &&
1655            "Only object references allowed here");
1656 
1657     if (!Context.hasSameUnqualifiedType(ParamRefType->getPointeeType(), ArgType)) {
1658       Diag(Arg->getSourceRange().getBegin(),
1659            diag::err_template_arg_no_ref_bind)
1660         << InstantiatedParamType << Arg->getType()
1661         << Arg->getSourceRange();
1662       Diag(Param->getLocation(), diag::note_template_param_here);
1663       return true;
1664     }
1665 
1666     unsigned ParamQuals
1667       = Context.getCanonicalType(ParamType).getCVRQualifiers();
1668     unsigned ArgQuals = Context.getCanonicalType(ArgType).getCVRQualifiers();
1669 
1670     if ((ParamQuals | ArgQuals) != ParamQuals) {
1671       Diag(Arg->getSourceRange().getBegin(),
1672            diag::err_template_arg_ref_bind_ignores_quals)
1673         << InstantiatedParamType << Arg->getType()
1674         << Arg->getSourceRange();
1675       Diag(Param->getLocation(), diag::note_template_param_here);
1676       return true;
1677     }
1678 
1679     NamedDecl *Entity = 0;
1680     if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
1681       return true;
1682 
1683     Entity = cast<NamedDecl>(Context.getCanonicalDecl(Entity));
1684     Converted = TemplateArgument(StartLoc, Entity);
1685     return false;
1686   }
1687 
1688   //     -- For a non-type template-parameter of type pointer to data
1689   //        member, qualification conversions (4.4) are applied.
1690   // C++0x allows std::nullptr_t values.
1691   assert(ParamType->isMemberPointerType() && "Only pointers to members remain");
1692 
1693   if (Context.hasSameUnqualifiedType(ParamType, ArgType)) {
1694     // Types match exactly: nothing more to do here.
1695   } else if (ArgType->isNullPtrType()) {
1696     ImpCastExprToType(Arg, ParamType);
1697   } else if (IsQualificationConversion(ArgType, ParamType)) {
1698     ImpCastExprToType(Arg, ParamType);
1699   } else {
1700     // We can't perform this conversion.
1701     Diag(Arg->getSourceRange().getBegin(),
1702          diag::err_template_arg_not_convertible)
1703       << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
1704     Diag(Param->getLocation(), diag::note_template_param_here);
1705     return true;
1706   }
1707 
1708   NamedDecl *Member = 0;
1709   if (CheckTemplateArgumentPointerToMember(Arg, Member))
1710     return true;
1711 
1712   Member = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Member));
1713   Converted = TemplateArgument(StartLoc, Member);
1714   return false;
1715 }
1716 
1717 /// \brief Check a template argument against its corresponding
1718 /// template template parameter.
1719 ///
1720 /// This routine implements the semantics of C++ [temp.arg.template].
1721 /// It returns true if an error occurred, and false otherwise.
1722 bool Sema::CheckTemplateArgument(TemplateTemplateParmDecl *Param,
1723                                  DeclRefExpr *Arg) {
1724   assert(isa<TemplateDecl>(Arg->getDecl()) && "Only template decls allowed");
1725   TemplateDecl *Template = cast<TemplateDecl>(Arg->getDecl());
1726 
1727   // C++ [temp.arg.template]p1:
1728   //   A template-argument for a template template-parameter shall be
1729   //   the name of a class template, expressed as id-expression. Only
1730   //   primary class templates are considered when matching the
1731   //   template template argument with the corresponding parameter;
1732   //   partial specializations are not considered even if their
1733   //   parameter lists match that of the template template parameter.
1734   if (!isa<ClassTemplateDecl>(Template)) {
1735     assert(isa<FunctionTemplateDecl>(Template) &&
1736            "Only function templates are possible here");
1737     Diag(Arg->getSourceRange().getBegin(),
1738          diag::note_template_arg_refers_here_func)
1739       << Template;
1740   }
1741 
1742   return !TemplateParameterListsAreEqual(Template->getTemplateParameters(),
1743                                          Param->getTemplateParameters(),
1744                                          true, true,
1745                                          Arg->getSourceRange().getBegin());
1746 }
1747 
1748 /// \brief Determine whether the given template parameter lists are
1749 /// equivalent.
1750 ///
1751 /// \param New  The new template parameter list, typically written in the
1752 /// source code as part of a new template declaration.
1753 ///
1754 /// \param Old  The old template parameter list, typically found via
1755 /// name lookup of the template declared with this template parameter
1756 /// list.
1757 ///
1758 /// \param Complain  If true, this routine will produce a diagnostic if
1759 /// the template parameter lists are not equivalent.
1760 ///
1761 /// \param IsTemplateTemplateParm  If true, this routine is being
1762 /// called to compare the template parameter lists of a template
1763 /// template parameter.
1764 ///
1765 /// \param TemplateArgLoc If this source location is valid, then we
1766 /// are actually checking the template parameter list of a template
1767 /// argument (New) against the template parameter list of its
1768 /// corresponding template template parameter (Old). We produce
1769 /// slightly different diagnostics in this scenario.
1770 ///
1771 /// \returns True if the template parameter lists are equal, false
1772 /// otherwise.
1773 bool
1774 Sema::TemplateParameterListsAreEqual(TemplateParameterList *New,
1775                                      TemplateParameterList *Old,
1776                                      bool Complain,
1777                                      bool IsTemplateTemplateParm,
1778                                      SourceLocation TemplateArgLoc) {
1779   if (Old->size() != New->size()) {
1780     if (Complain) {
1781       unsigned NextDiag = diag::err_template_param_list_different_arity;
1782       if (TemplateArgLoc.isValid()) {
1783         Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);
1784         NextDiag = diag::note_template_param_list_different_arity;
1785       }
1786       Diag(New->getTemplateLoc(), NextDiag)
1787           << (New->size() > Old->size())
1788           << IsTemplateTemplateParm
1789           << SourceRange(New->getTemplateLoc(), New->getRAngleLoc());
1790       Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration)
1791         << IsTemplateTemplateParm
1792         << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc());
1793     }
1794 
1795     return false;
1796   }
1797 
1798   for (TemplateParameterList::iterator OldParm = Old->begin(),
1799          OldParmEnd = Old->end(), NewParm = New->begin();
1800        OldParm != OldParmEnd; ++OldParm, ++NewParm) {
1801     if ((*OldParm)->getKind() != (*NewParm)->getKind()) {
1802       unsigned NextDiag = diag::err_template_param_different_kind;
1803       if (TemplateArgLoc.isValid()) {
1804         Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);
1805         NextDiag = diag::note_template_param_different_kind;
1806       }
1807       Diag((*NewParm)->getLocation(), NextDiag)
1808         << IsTemplateTemplateParm;
1809       Diag((*OldParm)->getLocation(), diag::note_template_prev_declaration)
1810         << IsTemplateTemplateParm;
1811       return false;
1812     }
1813 
1814     if (isa<TemplateTypeParmDecl>(*OldParm)) {
1815       // Okay; all template type parameters are equivalent (since we
1816       // know we're at the same index).
1817 #if 0
1818       // FIXME: Enable this code in debug mode *after* we properly go through
1819       // and "instantiate" the template parameter lists of template template
1820       // parameters. It's only after this instantiation that (1) any dependent
1821       // types within the template parameter list of the template template
1822       // parameter can be checked, and (2) the template type parameter depths
1823       // will match up.
1824       QualType OldParmType
1825         = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*OldParm));
1826       QualType NewParmType
1827         = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*NewParm));
1828       assert(Context.getCanonicalType(OldParmType) ==
1829              Context.getCanonicalType(NewParmType) &&
1830              "type parameter mismatch?");
1831 #endif
1832     } else if (NonTypeTemplateParmDecl *OldNTTP
1833                  = dyn_cast<NonTypeTemplateParmDecl>(*OldParm)) {
1834       // The types of non-type template parameters must agree.
1835       NonTypeTemplateParmDecl *NewNTTP
1836         = cast<NonTypeTemplateParmDecl>(*NewParm);
1837       if (Context.getCanonicalType(OldNTTP->getType()) !=
1838             Context.getCanonicalType(NewNTTP->getType())) {
1839         if (Complain) {
1840           unsigned NextDiag = diag::err_template_nontype_parm_different_type;
1841           if (TemplateArgLoc.isValid()) {
1842             Diag(TemplateArgLoc,
1843                  diag::err_template_arg_template_params_mismatch);
1844             NextDiag = diag::note_template_nontype_parm_different_type;
1845           }
1846           Diag(NewNTTP->getLocation(), NextDiag)
1847             << NewNTTP->getType()
1848             << IsTemplateTemplateParm;
1849           Diag(OldNTTP->getLocation(),
1850                diag::note_template_nontype_parm_prev_declaration)
1851             << OldNTTP->getType();
1852         }
1853         return false;
1854       }
1855     } else {
1856       // The template parameter lists of template template
1857       // parameters must agree.
1858       // FIXME: Could we perform a faster "type" comparison here?
1859       assert(isa<TemplateTemplateParmDecl>(*OldParm) &&
1860              "Only template template parameters handled here");
1861       TemplateTemplateParmDecl *OldTTP
1862         = cast<TemplateTemplateParmDecl>(*OldParm);
1863       TemplateTemplateParmDecl *NewTTP
1864         = cast<TemplateTemplateParmDecl>(*NewParm);
1865       if (!TemplateParameterListsAreEqual(NewTTP->getTemplateParameters(),
1866                                           OldTTP->getTemplateParameters(),
1867                                           Complain,
1868                                           /*IsTemplateTemplateParm=*/true,
1869                                           TemplateArgLoc))
1870         return false;
1871     }
1872   }
1873 
1874   return true;
1875 }
1876 
1877 /// \brief Check whether a template can be declared within this scope.
1878 ///
1879 /// If the template declaration is valid in this scope, returns
1880 /// false. Otherwise, issues a diagnostic and returns true.
1881 bool
1882 Sema::CheckTemplateDeclScope(Scope *S,
1883                              MultiTemplateParamsArg &TemplateParameterLists) {
1884   assert(TemplateParameterLists.size() > 0 && "Not a template");
1885 
1886   // Find the nearest enclosing declaration scope.
1887   while ((S->getFlags() & Scope::DeclScope) == 0 ||
1888          (S->getFlags() & Scope::TemplateParamScope) != 0)
1889     S = S->getParent();
1890 
1891   TemplateParameterList *TemplateParams =
1892     static_cast<TemplateParameterList*>(*TemplateParameterLists.get());
1893   SourceLocation TemplateLoc = TemplateParams->getTemplateLoc();
1894   SourceRange TemplateRange
1895     = SourceRange(TemplateLoc, TemplateParams->getRAngleLoc());
1896 
1897   // C++ [temp]p2:
1898   //   A template-declaration can appear only as a namespace scope or
1899   //   class scope declaration.
1900   DeclContext *Ctx = static_cast<DeclContext *>(S->getEntity());
1901   while (Ctx && isa<LinkageSpecDecl>(Ctx)) {
1902     if (cast<LinkageSpecDecl>(Ctx)->getLanguage() != LinkageSpecDecl::lang_cxx)
1903       return Diag(TemplateLoc, diag::err_template_linkage)
1904         << TemplateRange;
1905 
1906     Ctx = Ctx->getParent();
1907   }
1908 
1909   if (Ctx && (Ctx->isFileContext() || Ctx->isRecord()))
1910     return false;
1911 
1912   return Diag(TemplateLoc, diag::err_template_outside_namespace_or_class_scope)
1913     << TemplateRange;
1914 }
1915 
1916 /// \brief Check whether a class template specialization or explicit
1917 /// instantiation in the current context is well-formed.
1918 ///
1919 /// This routine determines whether a class template specialization or
1920 /// explicit instantiation can be declared in the current context
1921 /// (C++ [temp.expl.spec]p2, C++0x [temp.explicit]p2) and emits
1922 /// appropriate diagnostics if there was an error. It returns true if
1923 // there was an error that we cannot recover from, and false otherwise.
1924 bool
1925 Sema::CheckClassTemplateSpecializationScope(ClassTemplateDecl *ClassTemplate,
1926                                    ClassTemplateSpecializationDecl *PrevDecl,
1927                                             SourceLocation TemplateNameLoc,
1928                                             SourceRange ScopeSpecifierRange,
1929                                             bool ExplicitInstantiation) {
1930   // C++ [temp.expl.spec]p2:
1931   //   An explicit specialization shall be declared in the namespace
1932   //   of which the template is a member, or, for member templates, in
1933   //   the namespace of which the enclosing class or enclosing class
1934   //   template is a member. An explicit specialization of a member
1935   //   function, member class or static data member of a class
1936   //   template shall be declared in the namespace of which the class
1937   //   template is a member. Such a declaration may also be a
1938   //   definition. If the declaration is not a definition, the
1939   //   specialization may be defined later in the name- space in which
1940   //   the explicit specialization was declared, or in a namespace
1941   //   that encloses the one in which the explicit specialization was
1942   //   declared.
1943   if (CurContext->getLookupContext()->isFunctionOrMethod()) {
1944     Diag(TemplateNameLoc, diag::err_template_spec_decl_function_scope)
1945       << ExplicitInstantiation << ClassTemplate;
1946     return true;
1947   }
1948 
1949   DeclContext *DC = CurContext->getEnclosingNamespaceContext();
1950   DeclContext *TemplateContext
1951     = ClassTemplate->getDeclContext()->getEnclosingNamespaceContext();
1952   if ((!PrevDecl || PrevDecl->getSpecializationKind() == TSK_Undeclared) &&
1953       !ExplicitInstantiation) {
1954     // There is no prior declaration of this entity, so this
1955     // specialization must be in the same context as the template
1956     // itself.
1957     if (DC != TemplateContext) {
1958       if (isa<TranslationUnitDecl>(TemplateContext))
1959         Diag(TemplateNameLoc, diag::err_template_spec_decl_out_of_scope_global)
1960           << ClassTemplate << ScopeSpecifierRange;
1961       else if (isa<NamespaceDecl>(TemplateContext))
1962         Diag(TemplateNameLoc, diag::err_template_spec_decl_out_of_scope)
1963           << ClassTemplate << cast<NamedDecl>(TemplateContext)
1964           << ScopeSpecifierRange;
1965 
1966       Diag(ClassTemplate->getLocation(), diag::note_template_decl_here);
1967     }
1968 
1969     return false;
1970   }
1971 
1972   // We have a previous declaration of this entity. Make sure that
1973   // this redeclaration (or definition) occurs in an enclosing namespace.
1974   if (!CurContext->Encloses(TemplateContext)) {
1975     // FIXME:  In C++98,  we  would like  to  turn these  errors into  warnings,
1976     // dependent on a -Wc++0x flag.
1977     bool SuppressedDiag = false;
1978     if (isa<TranslationUnitDecl>(TemplateContext)) {
1979       if (!ExplicitInstantiation || getLangOptions().CPlusPlus0x)
1980         Diag(TemplateNameLoc, diag::err_template_spec_redecl_global_scope)
1981           << ExplicitInstantiation << ClassTemplate << ScopeSpecifierRange;
1982       else
1983         SuppressedDiag = true;
1984     } else if (isa<NamespaceDecl>(TemplateContext)) {
1985       if (!ExplicitInstantiation || getLangOptions().CPlusPlus0x)
1986         Diag(TemplateNameLoc, diag::err_template_spec_redecl_out_of_scope)
1987           << ExplicitInstantiation << ClassTemplate
1988           << cast<NamedDecl>(TemplateContext) << ScopeSpecifierRange;
1989       else
1990         SuppressedDiag = true;
1991     }
1992 
1993     if (!SuppressedDiag)
1994       Diag(ClassTemplate->getLocation(), diag::note_template_decl_here);
1995   }
1996 
1997   return false;
1998 }
1999 
2000 Sema::DeclResult
2001 Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagKind TK,
2002                                        SourceLocation KWLoc,
2003                                        const CXXScopeSpec &SS,
2004                                        TemplateTy TemplateD,
2005                                        SourceLocation TemplateNameLoc,
2006                                        SourceLocation LAngleLoc,
2007                                        ASTTemplateArgsPtr TemplateArgsIn,
2008                                        SourceLocation *TemplateArgLocs,
2009                                        SourceLocation RAngleLoc,
2010                                        AttributeList *Attr,
2011                                MultiTemplateParamsArg TemplateParameterLists) {
2012   // Find the class template we're specializing
2013   TemplateName Name = TemplateD.getAsVal<TemplateName>();
2014   ClassTemplateDecl *ClassTemplate
2015     = cast<ClassTemplateDecl>(Name.getAsTemplateDecl());
2016 
2017   bool isPartialSpecialization = false;
2018 
2019   // Check the validity of the template headers that introduce this
2020   // template.
2021   // FIXME: Once we have member templates, we'll need to check
2022   // C++ [temp.expl.spec]p17-18, where we could have multiple levels of
2023   // template<> headers.
2024   if (TemplateParameterLists.size() == 0)
2025     Diag(KWLoc, diag::err_template_spec_needs_header)
2026       << CodeModificationHint::CreateInsertion(KWLoc, "template<> ");
2027   else {
2028     TemplateParameterList *TemplateParams
2029       = static_cast<TemplateParameterList*>(*TemplateParameterLists.get());
2030     if (TemplateParameterLists.size() > 1) {
2031       Diag(TemplateParams->getTemplateLoc(),
2032            diag::err_template_spec_extra_headers);
2033       return true;
2034     }
2035 
2036     // FIXME: We'll need more checks, here!
2037     if (TemplateParams->size() > 0)
2038       isPartialSpecialization = true;
2039   }
2040 
2041   // Check that the specialization uses the same tag kind as the
2042   // original template.
2043   TagDecl::TagKind Kind;
2044   switch (TagSpec) {
2045   default: assert(0 && "Unknown tag type!");
2046   case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break;
2047   case DeclSpec::TST_union:  Kind = TagDecl::TK_union; break;
2048   case DeclSpec::TST_class:  Kind = TagDecl::TK_class; break;
2049   }
2050   if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(),
2051                                     Kind, KWLoc,
2052                                     *ClassTemplate->getIdentifier())) {
2053     Diag(KWLoc, diag::err_use_with_wrong_tag)
2054       << ClassTemplate
2055       << CodeModificationHint::CreateReplacement(KWLoc,
2056                             ClassTemplate->getTemplatedDecl()->getKindName());
2057     Diag(ClassTemplate->getTemplatedDecl()->getLocation(),
2058          diag::note_previous_use);
2059     Kind = ClassTemplate->getTemplatedDecl()->getTagKind();
2060   }
2061 
2062   // Translate the parser's template argument list in our AST format.
2063   llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
2064   translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
2065 
2066   // Check that the template argument list is well-formed for this
2067   // template.
2068   TemplateArgumentListBuilder ConvertedTemplateArgs(Context);
2069   if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc,
2070                                 &TemplateArgs[0], TemplateArgs.size(),
2071                                 RAngleLoc, ConvertedTemplateArgs))
2072     return true;
2073 
2074   assert((ConvertedTemplateArgs.size() ==
2075             ClassTemplate->getTemplateParameters()->size()) &&
2076          "Converted template argument list is too short!");
2077 
2078   // Find the class template (partial) specialization declaration that
2079   // corresponds to these arguments.
2080   llvm::FoldingSetNodeID ID;
2081   if (isPartialSpecialization)
2082     // FIXME: Template parameter list matters, too
2083     ClassTemplatePartialSpecializationDecl::Profile(ID,
2084                                     ConvertedTemplateArgs.getFlatArgumentList(),
2085                                               ConvertedTemplateArgs.flatSize());
2086   else
2087     ClassTemplateSpecializationDecl::Profile(ID,
2088                                     ConvertedTemplateArgs.getFlatArgumentList(),
2089                                              ConvertedTemplateArgs.flatSize());
2090   void *InsertPos = 0;
2091   ClassTemplateSpecializationDecl *PrevDecl = 0;
2092 
2093   if (isPartialSpecialization)
2094     PrevDecl
2095       = ClassTemplate->getPartialSpecializations().FindNodeOrInsertPos(ID,
2096                                                                     InsertPos);
2097   else
2098     PrevDecl
2099       = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
2100 
2101   ClassTemplateSpecializationDecl *Specialization = 0;
2102 
2103   // Check whether we can declare a class template specialization in
2104   // the current scope.
2105   if (CheckClassTemplateSpecializationScope(ClassTemplate, PrevDecl,
2106                                             TemplateNameLoc,
2107                                             SS.getRange(),
2108                                             /*ExplicitInstantiation=*/false))
2109     return true;
2110 
2111   if (PrevDecl && PrevDecl->getSpecializationKind() == TSK_Undeclared) {
2112     // Since the only prior class template specialization with these
2113     // arguments was referenced but not declared, reuse that
2114     // declaration node as our own, updating its source location to
2115     // reflect our new declaration.
2116     Specialization = PrevDecl;
2117     Specialization->setLocation(TemplateNameLoc);
2118     PrevDecl = 0;
2119   } else if (isPartialSpecialization) {
2120     // FIXME: extra checking for partial specializations
2121 
2122     // Create a new class template partial specialization declaration node.
2123     TemplateParameterList *TemplateParams
2124       = static_cast<TemplateParameterList*>(*TemplateParameterLists.get());
2125     ClassTemplatePartialSpecializationDecl *PrevPartial
2126       = cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl);
2127     ClassTemplatePartialSpecializationDecl *Partial
2128       = ClassTemplatePartialSpecializationDecl::Create(Context,
2129                                              ClassTemplate->getDeclContext(),
2130                                                        TemplateNameLoc,
2131                                                        TemplateParams,
2132                                                        ClassTemplate,
2133                                                        ConvertedTemplateArgs,
2134                                                        PrevPartial);
2135 
2136     if (PrevPartial) {
2137       ClassTemplate->getPartialSpecializations().RemoveNode(PrevPartial);
2138       ClassTemplate->getPartialSpecializations().GetOrInsertNode(Partial);
2139     } else {
2140       ClassTemplate->getPartialSpecializations().InsertNode(Partial, InsertPos);
2141     }
2142     Specialization = Partial;
2143   } else {
2144     // Create a new class template specialization declaration node for
2145     // this explicit specialization.
2146     Specialization
2147       = ClassTemplateSpecializationDecl::Create(Context,
2148                                              ClassTemplate->getDeclContext(),
2149                                                 TemplateNameLoc,
2150                                                 ClassTemplate,
2151                                                 ConvertedTemplateArgs,
2152                                                 PrevDecl);
2153 
2154     if (PrevDecl) {
2155       ClassTemplate->getSpecializations().RemoveNode(PrevDecl);
2156       ClassTemplate->getSpecializations().GetOrInsertNode(Specialization);
2157     } else {
2158       ClassTemplate->getSpecializations().InsertNode(Specialization,
2159                                                      InsertPos);
2160     }
2161   }
2162 
2163   // Note that this is an explicit specialization.
2164   Specialization->setSpecializationKind(TSK_ExplicitSpecialization);
2165 
2166   // Check that this isn't a redefinition of this specialization.
2167   if (TK == TK_Definition) {
2168     if (RecordDecl *Def = Specialization->getDefinition(Context)) {
2169       // FIXME: Should also handle explicit specialization after implicit
2170       // instantiation with a special diagnostic.
2171       SourceRange Range(TemplateNameLoc, RAngleLoc);
2172       Diag(TemplateNameLoc, diag::err_redefinition)
2173         << Context.getTypeDeclType(Specialization) << Range;
2174       Diag(Def->getLocation(), diag::note_previous_definition);
2175       Specialization->setInvalidDecl();
2176       return true;
2177     }
2178   }
2179 
2180   // Build the fully-sugared type for this class template
2181   // specialization as the user wrote in the specialization
2182   // itself. This means that we'll pretty-print the type retrieved
2183   // from the specialization's declaration the way that the user
2184   // actually wrote the specialization, rather than formatting the
2185   // name based on the "canonical" representation used to store the
2186   // template arguments in the specialization.
2187   QualType WrittenTy
2188     = Context.getTemplateSpecializationType(Name,
2189                                             &TemplateArgs[0],
2190                                             TemplateArgs.size(),
2191                                   Context.getTypeDeclType(Specialization));
2192   Specialization->setTypeAsWritten(WrittenTy);
2193   TemplateArgsIn.release();
2194 
2195   // C++ [temp.expl.spec]p9:
2196   //   A template explicit specialization is in the scope of the
2197   //   namespace in which the template was defined.
2198   //
2199   // We actually implement this paragraph where we set the semantic
2200   // context (in the creation of the ClassTemplateSpecializationDecl),
2201   // but we also maintain the lexical context where the actual
2202   // definition occurs.
2203   Specialization->setLexicalDeclContext(CurContext);
2204 
2205   // We may be starting the definition of this specialization.
2206   if (TK == TK_Definition)
2207     Specialization->startDefinition();
2208 
2209   // Add the specialization into its lexical context, so that it can
2210   // be seen when iterating through the list of declarations in that
2211   // context. However, specializations are not found by name lookup.
2212   CurContext->addDecl(Context, Specialization);
2213   return DeclPtrTy::make(Specialization);
2214 }
2215 
2216 // Explicit instantiation of a class template specialization
2217 Sema::DeclResult
2218 Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc,
2219                                  unsigned TagSpec,
2220                                  SourceLocation KWLoc,
2221                                  const CXXScopeSpec &SS,
2222                                  TemplateTy TemplateD,
2223                                  SourceLocation TemplateNameLoc,
2224                                  SourceLocation LAngleLoc,
2225                                  ASTTemplateArgsPtr TemplateArgsIn,
2226                                  SourceLocation *TemplateArgLocs,
2227                                  SourceLocation RAngleLoc,
2228                                  AttributeList *Attr) {
2229   // Find the class template we're specializing
2230   TemplateName Name = TemplateD.getAsVal<TemplateName>();
2231   ClassTemplateDecl *ClassTemplate
2232     = cast<ClassTemplateDecl>(Name.getAsTemplateDecl());
2233 
2234   // Check that the specialization uses the same tag kind as the
2235   // original template.
2236   TagDecl::TagKind Kind;
2237   switch (TagSpec) {
2238   default: assert(0 && "Unknown tag type!");
2239   case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break;
2240   case DeclSpec::TST_union:  Kind = TagDecl::TK_union; break;
2241   case DeclSpec::TST_class:  Kind = TagDecl::TK_class; break;
2242   }
2243   if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(),
2244                                     Kind, KWLoc,
2245                                     *ClassTemplate->getIdentifier())) {
2246     Diag(KWLoc, diag::err_use_with_wrong_tag)
2247       << ClassTemplate
2248       << CodeModificationHint::CreateReplacement(KWLoc,
2249                             ClassTemplate->getTemplatedDecl()->getKindName());
2250     Diag(ClassTemplate->getTemplatedDecl()->getLocation(),
2251          diag::note_previous_use);
2252     Kind = ClassTemplate->getTemplatedDecl()->getTagKind();
2253   }
2254 
2255   // C++0x [temp.explicit]p2:
2256   //   [...] An explicit instantiation shall appear in an enclosing
2257   //   namespace of its template. [...]
2258   //
2259   // This is C++ DR 275.
2260   if (CheckClassTemplateSpecializationScope(ClassTemplate, 0,
2261                                             TemplateNameLoc,
2262                                             SS.getRange(),
2263                                             /*ExplicitInstantiation=*/true))
2264     return true;
2265 
2266   // Translate the parser's template argument list in our AST format.
2267   llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
2268   translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
2269 
2270   // Check that the template argument list is well-formed for this
2271   // template.
2272   TemplateArgumentListBuilder ConvertedTemplateArgs(Context);
2273   if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc,
2274                                 TemplateArgs.data(), TemplateArgs.size(),
2275                                 RAngleLoc, ConvertedTemplateArgs))
2276     return true;
2277 
2278   assert((ConvertedTemplateArgs.size() ==
2279             ClassTemplate->getTemplateParameters()->size()) &&
2280          "Converted template argument list is too short!");
2281 
2282   // Find the class template specialization declaration that
2283   // corresponds to these arguments.
2284   llvm::FoldingSetNodeID ID;
2285   ClassTemplateSpecializationDecl::Profile(ID,
2286                                     ConvertedTemplateArgs.getFlatArgumentList(),
2287                                            ConvertedTemplateArgs.flatSize());
2288   void *InsertPos = 0;
2289   ClassTemplateSpecializationDecl *PrevDecl
2290     = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
2291 
2292   ClassTemplateSpecializationDecl *Specialization = 0;
2293 
2294   bool SpecializationRequiresInstantiation = true;
2295   if (PrevDecl) {
2296     if (PrevDecl->getSpecializationKind() == TSK_ExplicitInstantiation) {
2297       // This particular specialization has already been declared or
2298       // instantiated. We cannot explicitly instantiate it.
2299       Diag(TemplateNameLoc, diag::err_explicit_instantiation_duplicate)
2300         << Context.getTypeDeclType(PrevDecl);
2301       Diag(PrevDecl->getLocation(),
2302            diag::note_previous_explicit_instantiation);
2303       return DeclPtrTy::make(PrevDecl);
2304     }
2305 
2306     if (PrevDecl->getSpecializationKind() == TSK_ExplicitSpecialization) {
2307       // C++ DR 259, C++0x [temp.explicit]p4:
2308       //   For a given set of template parameters, if an explicit
2309       //   instantiation of a template appears after a declaration of
2310       //   an explicit specialization for that template, the explicit
2311       //   instantiation has no effect.
2312       if (!getLangOptions().CPlusPlus0x) {
2313         Diag(TemplateNameLoc,
2314              diag::ext_explicit_instantiation_after_specialization)
2315           << Context.getTypeDeclType(PrevDecl);
2316         Diag(PrevDecl->getLocation(),
2317              diag::note_previous_template_specialization);
2318       }
2319 
2320       // Create a new class template specialization declaration node
2321       // for this explicit specialization. This node is only used to
2322       // record the existence of this explicit instantiation for
2323       // accurate reproduction of the source code; we don't actually
2324       // use it for anything, since it is semantically irrelevant.
2325       Specialization
2326         = ClassTemplateSpecializationDecl::Create(Context,
2327                                              ClassTemplate->getDeclContext(),
2328                                                   TemplateNameLoc,
2329                                                   ClassTemplate,
2330                                                   ConvertedTemplateArgs, 0);
2331       Specialization->setLexicalDeclContext(CurContext);
2332       CurContext->addDecl(Context, Specialization);
2333       return DeclPtrTy::make(Specialization);
2334     }
2335 
2336     // If we have already (implicitly) instantiated this
2337     // specialization, there is less work to do.
2338     if (PrevDecl->getSpecializationKind() == TSK_ImplicitInstantiation)
2339       SpecializationRequiresInstantiation = false;
2340 
2341     // Since the only prior class template specialization with these
2342     // arguments was referenced but not declared, reuse that
2343     // declaration node as our own, updating its source location to
2344     // reflect our new declaration.
2345     Specialization = PrevDecl;
2346     Specialization->setLocation(TemplateNameLoc);
2347     PrevDecl = 0;
2348   } else {
2349     // Create a new class template specialization declaration node for
2350     // this explicit specialization.
2351     Specialization
2352       = ClassTemplateSpecializationDecl::Create(Context,
2353                                              ClassTemplate->getDeclContext(),
2354                                                 TemplateNameLoc,
2355                                                 ClassTemplate,
2356                                                 ConvertedTemplateArgs, 0);
2357 
2358     ClassTemplate->getSpecializations().InsertNode(Specialization,
2359                                                    InsertPos);
2360   }
2361 
2362   // Build the fully-sugared type for this explicit instantiation as
2363   // the user wrote in the explicit instantiation itself. This means
2364   // that we'll pretty-print the type retrieved from the
2365   // specialization's declaration the way that the user actually wrote
2366   // the explicit instantiation, rather than formatting the name based
2367   // on the "canonical" representation used to store the template
2368   // arguments in the specialization.
2369   QualType WrittenTy
2370     = Context.getTemplateSpecializationType(Name,
2371                                             TemplateArgs.data(),
2372                                             TemplateArgs.size(),
2373                                   Context.getTypeDeclType(Specialization));
2374   Specialization->setTypeAsWritten(WrittenTy);
2375   TemplateArgsIn.release();
2376 
2377   // Add the explicit instantiation into its lexical context. However,
2378   // since explicit instantiations are never found by name lookup, we
2379   // just put it into the declaration context directly.
2380   Specialization->setLexicalDeclContext(CurContext);
2381   CurContext->addDecl(Context, Specialization);
2382 
2383   // C++ [temp.explicit]p3:
2384   //   A definition of a class template or class member template
2385   //   shall be in scope at the point of the explicit instantiation of
2386   //   the class template or class member template.
2387   //
2388   // This check comes when we actually try to perform the
2389   // instantiation.
2390   if (SpecializationRequiresInstantiation)
2391     InstantiateClassTemplateSpecialization(Specialization, true);
2392   else // Instantiate the members of this class template specialization.
2393     InstantiateClassTemplateSpecializationMembers(TemplateLoc, Specialization);
2394 
2395   return DeclPtrTy::make(Specialization);
2396 }
2397 
2398 // Explicit instantiation of a member class of a class template.
2399 Sema::DeclResult
2400 Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc,
2401                                  unsigned TagSpec,
2402                                  SourceLocation KWLoc,
2403                                  const CXXScopeSpec &SS,
2404                                  IdentifierInfo *Name,
2405                                  SourceLocation NameLoc,
2406                                  AttributeList *Attr) {
2407 
2408   bool Owned = false;
2409   DeclPtrTy TagD = ActOnTag(S, TagSpec, Action::TK_Reference,
2410                             KWLoc, SS, Name, NameLoc, Attr, AS_none, Owned);
2411   if (!TagD)
2412     return true;
2413 
2414   TagDecl *Tag = cast<TagDecl>(TagD.getAs<Decl>());
2415   if (Tag->isEnum()) {
2416     Diag(TemplateLoc, diag::err_explicit_instantiation_enum)
2417       << Context.getTypeDeclType(Tag);
2418     return true;
2419   }
2420 
2421   if (Tag->isInvalidDecl())
2422     return true;
2423 
2424   CXXRecordDecl *Record = cast<CXXRecordDecl>(Tag);
2425   CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass();
2426   if (!Pattern) {
2427     Diag(TemplateLoc, diag::err_explicit_instantiation_nontemplate_type)
2428       << Context.getTypeDeclType(Record);
2429     Diag(Record->getLocation(), diag::note_nontemplate_decl_here);
2430     return true;
2431   }
2432 
2433   // C++0x [temp.explicit]p2:
2434   //   [...] An explicit instantiation shall appear in an enclosing
2435   //   namespace of its template. [...]
2436   //
2437   // This is C++ DR 275.
2438   if (getLangOptions().CPlusPlus0x) {
2439     // FIXME: In C++98, we would like to turn these errors into warnings,
2440     // dependent on a -Wc++0x flag.
2441     DeclContext *PatternContext
2442       = Pattern->getDeclContext()->getEnclosingNamespaceContext();
2443     if (!CurContext->Encloses(PatternContext)) {
2444       Diag(TemplateLoc, diag::err_explicit_instantiation_out_of_scope)
2445         << Record << cast<NamedDecl>(PatternContext) << SS.getRange();
2446       Diag(Pattern->getLocation(), diag::note_previous_declaration);
2447     }
2448   }
2449 
2450   if (!Record->getDefinition(Context)) {
2451     // If the class has a definition, instantiate it (and all of its
2452     // members, recursively).
2453     Pattern = cast_or_null<CXXRecordDecl>(Pattern->getDefinition(Context));
2454     if (Pattern && InstantiateClass(TemplateLoc, Record, Pattern,
2455                                     getTemplateInstantiationArgs(Record),
2456                                     /*ExplicitInstantiation=*/true))
2457       return true;
2458   } else // Instantiate all of the members of class.
2459     InstantiateClassMembers(TemplateLoc, Record,
2460                             getTemplateInstantiationArgs(Record));
2461 
2462   // FIXME: We don't have any representation for explicit instantiations of
2463   // member classes. Such a representation is not needed for compilation, but it
2464   // should be available for clients that want to see all of the declarations in
2465   // the source code.
2466   return TagD;
2467 }
2468 
2469 Sema::TypeResult
2470 Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS,
2471                         const IdentifierInfo &II, SourceLocation IdLoc) {
2472   NestedNameSpecifier *NNS
2473     = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
2474   if (!NNS)
2475     return true;
2476 
2477   QualType T = CheckTypenameType(NNS, II, SourceRange(TypenameLoc, IdLoc));
2478   if (T.isNull())
2479     return true;
2480   return T.getAsOpaquePtr();
2481 }
2482 
2483 Sema::TypeResult
2484 Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS,
2485                         SourceLocation TemplateLoc, TypeTy *Ty) {
2486   QualType T = QualType::getFromOpaquePtr(Ty);
2487   NestedNameSpecifier *NNS
2488     = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
2489   const TemplateSpecializationType *TemplateId
2490     = T->getAsTemplateSpecializationType();
2491   assert(TemplateId && "Expected a template specialization type");
2492 
2493   if (NNS->isDependent())
2494     return Context.getTypenameType(NNS, TemplateId).getAsOpaquePtr();
2495 
2496   return Context.getQualifiedNameType(NNS, T).getAsOpaquePtr();
2497 }
2498 
2499 /// \brief Build the type that describes a C++ typename specifier,
2500 /// e.g., "typename T::type".
2501 QualType
2502 Sema::CheckTypenameType(NestedNameSpecifier *NNS, const IdentifierInfo &II,
2503                         SourceRange Range) {
2504   CXXRecordDecl *CurrentInstantiation = 0;
2505   if (NNS->isDependent()) {
2506     CurrentInstantiation = getCurrentInstantiationOf(NNS);
2507 
2508     // If the nested-name-specifier does not refer to the current
2509     // instantiation, then build a typename type.
2510     if (!CurrentInstantiation)
2511       return Context.getTypenameType(NNS, &II);
2512   }
2513 
2514   DeclContext *Ctx = 0;
2515 
2516   if (CurrentInstantiation)
2517     Ctx = CurrentInstantiation;
2518   else {
2519     CXXScopeSpec SS;
2520     SS.setScopeRep(NNS);
2521     SS.setRange(Range);
2522     if (RequireCompleteDeclContext(SS))
2523       return QualType();
2524 
2525     Ctx = computeDeclContext(SS);
2526   }
2527   assert(Ctx && "No declaration context?");
2528 
2529   DeclarationName Name(&II);
2530   LookupResult Result = LookupQualifiedName(Ctx, Name, LookupOrdinaryName,
2531                                             false);
2532   unsigned DiagID = 0;
2533   Decl *Referenced = 0;
2534   switch (Result.getKind()) {
2535   case LookupResult::NotFound:
2536     if (Ctx->isTranslationUnit())
2537       DiagID = diag::err_typename_nested_not_found_global;
2538     else
2539       DiagID = diag::err_typename_nested_not_found;
2540     break;
2541 
2542   case LookupResult::Found:
2543     if (TypeDecl *Type = dyn_cast<TypeDecl>(Result.getAsDecl())) {
2544       // We found a type. Build a QualifiedNameType, since the
2545       // typename-specifier was just sugar. FIXME: Tell
2546       // QualifiedNameType that it has a "typename" prefix.
2547       return Context.getQualifiedNameType(NNS, Context.getTypeDeclType(Type));
2548     }
2549 
2550     DiagID = diag::err_typename_nested_not_type;
2551     Referenced = Result.getAsDecl();
2552     break;
2553 
2554   case LookupResult::FoundOverloaded:
2555     DiagID = diag::err_typename_nested_not_type;
2556     Referenced = *Result.begin();
2557     break;
2558 
2559   case LookupResult::AmbiguousBaseSubobjectTypes:
2560   case LookupResult::AmbiguousBaseSubobjects:
2561   case LookupResult::AmbiguousReference:
2562     DiagnoseAmbiguousLookup(Result, Name, Range.getEnd(), Range);
2563     return QualType();
2564   }
2565 
2566   // If we get here, it's because name lookup did not find a
2567   // type. Emit an appropriate diagnostic and return an error.
2568   if (NamedDecl *NamedCtx = dyn_cast<NamedDecl>(Ctx))
2569     Diag(Range.getEnd(), DiagID) << Range << Name << NamedCtx;
2570   else
2571     Diag(Range.getEnd(), DiagID) << Range << Name;
2572   if (Referenced)
2573     Diag(Referenced->getLocation(), diag::note_typename_refers_here)
2574       << Name;
2575   return QualType();
2576 }
2577