SemaTemplate.cpp revision 73c39abdbb79927605d740c93dd9629e3e4f9bfe
18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//===------- SemaTemplate.cpp - Semantic Analysis for C++ Templates -------===/
28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//
38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//                     The LLVM Compiler Infrastructure
48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//
58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// This file is distributed under the University of Illinois Open Source
68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels// License. See LICENSE.TXT for details.
78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//===----------------------------------------------------------------------===/
88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//
98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//  This file implements semantic analysis for C++ templates.
108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels//===----------------------------------------------------------------------===/
118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "Sema.h"
138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "TreeTransform.h"
148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "clang/AST/ASTContext.h"
158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "clang/AST/Expr.h"
168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "clang/AST/ExprCXX.h"
178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "clang/AST/DeclTemplate.h"
188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "clang/Parse/DeclSpec.h"
198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "clang/Basic/LangOptions.h"
208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "clang/Basic/PartialDiagnostic.h"
218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "llvm/Support/Compiler.h"
228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include "llvm/ADT/StringExtras.h"
238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsusing namespace clang;
248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/// \brief Determine whether the declaration found is acceptable as the name
268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/// of a template and, if so, return that template declaration. Otherwise,
278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/// returns NULL.
288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsstatic NamedDecl *isAcceptableTemplateName(ASTContext &Context, NamedDecl *D) {
298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if (!D)
308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    return 0;
318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if (isa<TemplateDecl>(D))
338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    return D;
348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    // C++ [temp.local]p1:
378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   Like normal (non-template) classes, class templates have an
388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   injected-class-name (Clause 9). The injected-class-name
398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   can be used with or without a template-argument-list. When
408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   it is used without a template-argument-list, it is
418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   equivalent to the injected-class-name followed by the
428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   template-parameters of the class template enclosed in
438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   <>. When it is used with a template-argument-list, it
448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   refers to the specified class template specialization,
458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   which could be the current specialization or another
468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    //   specialization.
478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if (Record->isInjectedClassName()) {
488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      Record = cast<CXXRecordDecl>(Record->getDeclContext());
498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      if (Record->getDescribedClassTemplate())
508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        return Record->getDescribedClassTemplate();
518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      if (ClassTemplateSpecializationDecl *Spec
538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels            = dyn_cast<ClassTemplateSpecializationDecl>(Record))
548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels        return Spec->getSpecializedTemplate();
558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    }
568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    return 0;
588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  }
598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  OverloadedFunctionDecl *Ovl = dyn_cast<OverloadedFunctionDecl>(D);
618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if (!Ovl)
628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    return 0;
638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  for (OverloadedFunctionDecl::function_iterator F = Ovl->function_begin(),
658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                              FEnd = Ovl->function_end();
668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       F != FEnd; ++F) {
678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    if (FunctionTemplateDecl *FuncTmpl = dyn_cast<FunctionTemplateDecl>(*F)) {
688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      // We've found a function template. Determine whether there are
698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      // any other function templates we need to bundle together in an
708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      // OverloadedFunctionDecl
718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      for (++F; F != FEnd; ++F) {
72        if (isa<FunctionTemplateDecl>(*F))
73          break;
74      }
75
76      if (F != FEnd) {
77        // Build an overloaded function decl containing only the
78        // function templates in Ovl.
79        OverloadedFunctionDecl *OvlTemplate
80          = OverloadedFunctionDecl::Create(Context,
81                                           Ovl->getDeclContext(),
82                                           Ovl->getDeclName());
83        OvlTemplate->addOverload(FuncTmpl);
84        OvlTemplate->addOverload(*F);
85        for (++F; F != FEnd; ++F) {
86          if (isa<FunctionTemplateDecl>(*F))
87            OvlTemplate->addOverload(*F);
88        }
89
90        return OvlTemplate;
91      }
92
93      return FuncTmpl;
94    }
95  }
96
97  return 0;
98}
99
100TemplateNameKind Sema::isTemplateName(Scope *S,
101                                      const IdentifierInfo &II,
102                                      SourceLocation IdLoc,
103                                      const CXXScopeSpec *SS,
104                                      TypeTy *ObjectTypePtr,
105                                      bool EnteringContext,
106                                      TemplateTy &TemplateResult) {
107  // Determine where to perform name lookup
108  DeclContext *LookupCtx = 0;
109  bool isDependent = false;
110  if (ObjectTypePtr) {
111    // This nested-name-specifier occurs in a member access expression, e.g.,
112    // x->B::f, and we are looking into the type of the object.
113    assert((!SS || !SS->isSet()) &&
114           "ObjectType and scope specifier cannot coexist");
115    QualType ObjectType = QualType::getFromOpaquePtr(ObjectTypePtr);
116    LookupCtx = computeDeclContext(ObjectType);
117    isDependent = ObjectType->isDependentType();
118  } else if (SS && SS->isSet()) {
119    // This nested-name-specifier occurs after another nested-name-specifier,
120    // so long into the context associated with the prior nested-name-specifier.
121
122    LookupCtx = computeDeclContext(*SS, EnteringContext);
123    isDependent = isDependentScopeSpecifier(*SS);
124  }
125
126  LookupResult Found;
127  bool ObjectTypeSearchedInScope = false;
128  if (LookupCtx) {
129    // Perform "qualified" name lookup into the declaration context we
130    // computed, which is either the type of the base of a member access
131    // expression or the declaration context associated with a prior
132    // nested-name-specifier.
133
134    // The declaration context must be complete.
135    if (!LookupCtx->isDependentContext() && RequireCompleteDeclContext(*SS))
136      return TNK_Non_template;
137
138    LookupQualifiedName(Found, LookupCtx, &II, LookupOrdinaryName);
139
140    if (ObjectTypePtr && Found.getKind() == LookupResult::NotFound) {
141      // C++ [basic.lookup.classref]p1:
142      //   In a class member access expression (5.2.5), if the . or -> token is
143      //   immediately followed by an identifier followed by a <, the
144      //   identifier must be looked up to determine whether the < is the
145      //   beginning of a template argument list (14.2) or a less-than operator.
146      //   The identifier is first looked up in the class of the object
147      //   expression. If the identifier is not found, it is then looked up in
148      //   the context of the entire postfix-expression and shall name a class
149      //   or function template.
150      //
151      // FIXME: When we're instantiating a template, do we actually have to
152      // look in the scope of the template? Seems fishy...
153      LookupName(Found, S, &II, LookupOrdinaryName);
154      ObjectTypeSearchedInScope = true;
155    }
156  } else if (isDependent) {
157    // We cannot look into a dependent object type or
158    return TNK_Non_template;
159  } else {
160    // Perform unqualified name lookup in the current scope.
161    LookupName(Found, S, &II, LookupOrdinaryName);
162  }
163
164  // FIXME: Cope with ambiguous name-lookup results.
165  assert(!Found.isAmbiguous() &&
166         "Cannot handle template name-lookup ambiguities");
167
168  NamedDecl *Template
169    = isAcceptableTemplateName(Context, Found.getAsSingleDecl(Context));
170  if (!Template)
171    return TNK_Non_template;
172
173  if (ObjectTypePtr && !ObjectTypeSearchedInScope) {
174    // C++ [basic.lookup.classref]p1:
175    //   [...] If the lookup in the class of the object expression finds a
176    //   template, the name is also looked up in the context of the entire
177    //   postfix-expression and [...]
178    //
179    LookupResult FoundOuter;
180    LookupName(FoundOuter, S, &II, LookupOrdinaryName);
181    // FIXME: Handle ambiguities in this lookup better
182    NamedDecl *OuterTemplate
183      = isAcceptableTemplateName(Context, FoundOuter.getAsSingleDecl(Context));
184
185    if (!OuterTemplate) {
186      //   - if the name is not found, the name found in the class of the
187      //     object expression is used, otherwise
188    } else if (!isa<ClassTemplateDecl>(OuterTemplate)) {
189      //   - if the name is found in the context of the entire
190      //     postfix-expression and does not name a class template, the name
191      //     found in the class of the object expression is used, otherwise
192    } else {
193      //   - if the name found is a class template, it must refer to the same
194      //     entity as the one found in the class of the object expression,
195      //     otherwise the program is ill-formed.
196      if (OuterTemplate->getCanonicalDecl() != Template->getCanonicalDecl()) {
197        Diag(IdLoc, diag::err_nested_name_member_ref_lookup_ambiguous)
198          << &II;
199        Diag(Template->getLocation(), diag::note_ambig_member_ref_object_type)
200          << QualType::getFromOpaquePtr(ObjectTypePtr);
201        Diag(OuterTemplate->getLocation(), diag::note_ambig_member_ref_scope);
202
203        // Recover by taking the template that we found in the object
204        // expression's type.
205      }
206    }
207  }
208
209  if (SS && SS->isSet() && !SS->isInvalid()) {
210    NestedNameSpecifier *Qualifier
211      = static_cast<NestedNameSpecifier *>(SS->getScopeRep());
212    if (OverloadedFunctionDecl *Ovl
213          = dyn_cast<OverloadedFunctionDecl>(Template))
214      TemplateResult
215        = TemplateTy::make(Context.getQualifiedTemplateName(Qualifier, false,
216                                                            Ovl));
217    else
218      TemplateResult
219        = TemplateTy::make(Context.getQualifiedTemplateName(Qualifier, false,
220                                                 cast<TemplateDecl>(Template)));
221  } else if (OverloadedFunctionDecl *Ovl
222               = dyn_cast<OverloadedFunctionDecl>(Template)) {
223    TemplateResult = TemplateTy::make(TemplateName(Ovl));
224  } else {
225    TemplateResult = TemplateTy::make(
226                                  TemplateName(cast<TemplateDecl>(Template)));
227  }
228
229  if (isa<ClassTemplateDecl>(Template) ||
230      isa<TemplateTemplateParmDecl>(Template))
231    return TNK_Type_template;
232
233  assert((isa<FunctionTemplateDecl>(Template) ||
234          isa<OverloadedFunctionDecl>(Template)) &&
235         "Unhandled template kind in Sema::isTemplateName");
236  return TNK_Function_template;
237}
238
239/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining
240/// that the template parameter 'PrevDecl' is being shadowed by a new
241/// declaration at location Loc. Returns true to indicate that this is
242/// an error, and false otherwise.
243bool Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {
244  assert(PrevDecl->isTemplateParameter() && "Not a template parameter");
245
246  // Microsoft Visual C++ permits template parameters to be shadowed.
247  if (getLangOptions().Microsoft)
248    return false;
249
250  // C++ [temp.local]p4:
251  //   A template-parameter shall not be redeclared within its
252  //   scope (including nested scopes).
253  Diag(Loc, diag::err_template_param_shadow)
254    << cast<NamedDecl>(PrevDecl)->getDeclName();
255  Diag(PrevDecl->getLocation(), diag::note_template_param_here);
256  return true;
257}
258
259/// AdjustDeclIfTemplate - If the given decl happens to be a template, reset
260/// the parameter D to reference the templated declaration and return a pointer
261/// to the template declaration. Otherwise, do nothing to D and return null.
262TemplateDecl *Sema::AdjustDeclIfTemplate(DeclPtrTy &D) {
263  if (TemplateDecl *Temp = dyn_cast_or_null<TemplateDecl>(D.getAs<Decl>())) {
264    D = DeclPtrTy::make(Temp->getTemplatedDecl());
265    return Temp;
266  }
267  return 0;
268}
269
270/// ActOnTypeParameter - Called when a C++ template type parameter
271/// (e.g., "typename T") has been parsed. Typename specifies whether
272/// the keyword "typename" was used to declare the type parameter
273/// (otherwise, "class" was used), and KeyLoc is the location of the
274/// "class" or "typename" keyword. ParamName is the name of the
275/// parameter (NULL indicates an unnamed template parameter) and
276/// ParamName is the location of the parameter name (if any).
277/// If the type parameter has a default argument, it will be added
278/// later via ActOnTypeParameterDefault.
279Sema::DeclPtrTy Sema::ActOnTypeParameter(Scope *S, bool Typename, bool Ellipsis,
280                                         SourceLocation EllipsisLoc,
281                                         SourceLocation KeyLoc,
282                                         IdentifierInfo *ParamName,
283                                         SourceLocation ParamNameLoc,
284                                         unsigned Depth, unsigned Position) {
285  assert(S->isTemplateParamScope() &&
286         "Template type parameter not in template parameter scope!");
287  bool Invalid = false;
288
289  if (ParamName) {
290    NamedDecl *PrevDecl = LookupSingleName(S, ParamName, LookupTagName);
291    if (PrevDecl && PrevDecl->isTemplateParameter())
292      Invalid = Invalid || DiagnoseTemplateParameterShadow(ParamNameLoc,
293                                                           PrevDecl);
294  }
295
296  SourceLocation Loc = ParamNameLoc;
297  if (!ParamName)
298    Loc = KeyLoc;
299
300  TemplateTypeParmDecl *Param
301    = TemplateTypeParmDecl::Create(Context, CurContext, Loc,
302                                   Depth, Position, ParamName, Typename,
303                                   Ellipsis);
304  if (Invalid)
305    Param->setInvalidDecl();
306
307  if (ParamName) {
308    // Add the template parameter into the current scope.
309    S->AddDecl(DeclPtrTy::make(Param));
310    IdResolver.AddDecl(Param);
311  }
312
313  return DeclPtrTy::make(Param);
314}
315
316/// ActOnTypeParameterDefault - Adds a default argument (the type
317/// Default) to the given template type parameter (TypeParam).
318void Sema::ActOnTypeParameterDefault(DeclPtrTy TypeParam,
319                                     SourceLocation EqualLoc,
320                                     SourceLocation DefaultLoc,
321                                     TypeTy *DefaultT) {
322  TemplateTypeParmDecl *Parm
323    = cast<TemplateTypeParmDecl>(TypeParam.getAs<Decl>());
324  // FIXME: Preserve type source info.
325  QualType Default = GetTypeFromParser(DefaultT);
326
327  // C++0x [temp.param]p9:
328  // A default template-argument may be specified for any kind of
329  // template-parameter that is not a template parameter pack.
330  if (Parm->isParameterPack()) {
331    Diag(DefaultLoc, diag::err_template_param_pack_default_arg);
332    return;
333  }
334
335  // C++ [temp.param]p14:
336  //   A template-parameter shall not be used in its own default argument.
337  // FIXME: Implement this check! Needs a recursive walk over the types.
338
339  // Check the template argument itself.
340  if (CheckTemplateArgument(Parm, Default, DefaultLoc)) {
341    Parm->setInvalidDecl();
342    return;
343  }
344
345  Parm->setDefaultArgument(Default, DefaultLoc, false);
346}
347
348/// \brief Check that the type of a non-type template parameter is
349/// well-formed.
350///
351/// \returns the (possibly-promoted) parameter type if valid;
352/// otherwise, produces a diagnostic and returns a NULL type.
353QualType
354Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {
355  // C++ [temp.param]p4:
356  //
357  // A non-type template-parameter shall have one of the following
358  // (optionally cv-qualified) types:
359  //
360  //       -- integral or enumeration type,
361  if (T->isIntegralType() || T->isEnumeralType() ||
362      //   -- pointer to object or pointer to function,
363      (T->isPointerType() &&
364       (T->getAs<PointerType>()->getPointeeType()->isObjectType() ||
365        T->getAs<PointerType>()->getPointeeType()->isFunctionType())) ||
366      //   -- reference to object or reference to function,
367      T->isReferenceType() ||
368      //   -- pointer to member.
369      T->isMemberPointerType() ||
370      // If T is a dependent type, we can't do the check now, so we
371      // assume that it is well-formed.
372      T->isDependentType())
373    return T;
374  // C++ [temp.param]p8:
375  //
376  //   A non-type template-parameter of type "array of T" or
377  //   "function returning T" is adjusted to be of type "pointer to
378  //   T" or "pointer to function returning T", respectively.
379  else if (T->isArrayType())
380    // FIXME: Keep the type prior to promotion?
381    return Context.getArrayDecayedType(T);
382  else if (T->isFunctionType())
383    // FIXME: Keep the type prior to promotion?
384    return Context.getPointerType(T);
385
386  Diag(Loc, diag::err_template_nontype_parm_bad_type)
387    << T;
388
389  return QualType();
390}
391
392/// ActOnNonTypeTemplateParameter - Called when a C++ non-type
393/// template parameter (e.g., "int Size" in "template<int Size>
394/// class Array") has been parsed. S is the current scope and D is
395/// the parsed declarator.
396Sema::DeclPtrTy Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
397                                                    unsigned Depth,
398                                                    unsigned Position) {
399  DeclaratorInfo *DInfo = 0;
400  QualType T = GetTypeForDeclarator(D, S, &DInfo);
401
402  assert(S->isTemplateParamScope() &&
403         "Non-type template parameter not in template parameter scope!");
404  bool Invalid = false;
405
406  IdentifierInfo *ParamName = D.getIdentifier();
407  if (ParamName) {
408    NamedDecl *PrevDecl = LookupSingleName(S, ParamName, LookupTagName);
409    if (PrevDecl && PrevDecl->isTemplateParameter())
410      Invalid = Invalid || DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
411                                                           PrevDecl);
412  }
413
414  T = CheckNonTypeTemplateParameterType(T, D.getIdentifierLoc());
415  if (T.isNull()) {
416    T = Context.IntTy; // Recover with an 'int' type.
417    Invalid = true;
418  }
419
420  NonTypeTemplateParmDecl *Param
421    = NonTypeTemplateParmDecl::Create(Context, CurContext, D.getIdentifierLoc(),
422                                      Depth, Position, ParamName, T, DInfo);
423  if (Invalid)
424    Param->setInvalidDecl();
425
426  if (D.getIdentifier()) {
427    // Add the template parameter into the current scope.
428    S->AddDecl(DeclPtrTy::make(Param));
429    IdResolver.AddDecl(Param);
430  }
431  return DeclPtrTy::make(Param);
432}
433
434/// \brief Adds a default argument to the given non-type template
435/// parameter.
436void Sema::ActOnNonTypeTemplateParameterDefault(DeclPtrTy TemplateParamD,
437                                                SourceLocation EqualLoc,
438                                                ExprArg DefaultE) {
439  NonTypeTemplateParmDecl *TemplateParm
440    = cast<NonTypeTemplateParmDecl>(TemplateParamD.getAs<Decl>());
441  Expr *Default = static_cast<Expr *>(DefaultE.get());
442
443  // C++ [temp.param]p14:
444  //   A template-parameter shall not be used in its own default argument.
445  // FIXME: Implement this check! Needs a recursive walk over the types.
446
447  // Check the well-formedness of the default template argument.
448  TemplateArgument Converted;
449  if (CheckTemplateArgument(TemplateParm, TemplateParm->getType(), Default,
450                            Converted)) {
451    TemplateParm->setInvalidDecl();
452    return;
453  }
454
455  TemplateParm->setDefaultArgument(DefaultE.takeAs<Expr>());
456}
457
458
459/// ActOnTemplateTemplateParameter - Called when a C++ template template
460/// parameter (e.g. T in template <template <typename> class T> class array)
461/// has been parsed. S is the current scope.
462Sema::DeclPtrTy Sema::ActOnTemplateTemplateParameter(Scope* S,
463                                                     SourceLocation TmpLoc,
464                                                     TemplateParamsTy *Params,
465                                                     IdentifierInfo *Name,
466                                                     SourceLocation NameLoc,
467                                                     unsigned Depth,
468                                                     unsigned Position) {
469  assert(S->isTemplateParamScope() &&
470         "Template template parameter not in template parameter scope!");
471
472  // Construct the parameter object.
473  TemplateTemplateParmDecl *Param =
474    TemplateTemplateParmDecl::Create(Context, CurContext, TmpLoc, Depth,
475                                     Position, Name,
476                                     (TemplateParameterList*)Params);
477
478  // Make sure the parameter is valid.
479  // FIXME: Decl object is not currently invalidated anywhere so this doesn't
480  // do anything yet. However, if the template parameter list or (eventual)
481  // default value is ever invalidated, that will propagate here.
482  bool Invalid = false;
483  if (Invalid) {
484    Param->setInvalidDecl();
485  }
486
487  // If the tt-param has a name, then link the identifier into the scope
488  // and lookup mechanisms.
489  if (Name) {
490    S->AddDecl(DeclPtrTy::make(Param));
491    IdResolver.AddDecl(Param);
492  }
493
494  return DeclPtrTy::make(Param);
495}
496
497/// \brief Adds a default argument to the given template template
498/// parameter.
499void Sema::ActOnTemplateTemplateParameterDefault(DeclPtrTy TemplateParamD,
500                                                 SourceLocation EqualLoc,
501                                                 ExprArg DefaultE) {
502  TemplateTemplateParmDecl *TemplateParm
503    = cast<TemplateTemplateParmDecl>(TemplateParamD.getAs<Decl>());
504
505  // Since a template-template parameter's default argument is an
506  // id-expression, it must be a DeclRefExpr.
507  DeclRefExpr *Default
508    = cast<DeclRefExpr>(static_cast<Expr *>(DefaultE.get()));
509
510  // C++ [temp.param]p14:
511  //   A template-parameter shall not be used in its own default argument.
512  // FIXME: Implement this check! Needs a recursive walk over the types.
513
514  // Check the well-formedness of the template argument.
515  if (!isa<TemplateDecl>(Default->getDecl())) {
516    Diag(Default->getSourceRange().getBegin(),
517         diag::err_template_arg_must_be_template)
518      << Default->getSourceRange();
519    TemplateParm->setInvalidDecl();
520    return;
521  }
522  if (CheckTemplateArgument(TemplateParm, Default)) {
523    TemplateParm->setInvalidDecl();
524    return;
525  }
526
527  DefaultE.release();
528  TemplateParm->setDefaultArgument(Default);
529}
530
531/// ActOnTemplateParameterList - Builds a TemplateParameterList that
532/// contains the template parameters in Params/NumParams.
533Sema::TemplateParamsTy *
534Sema::ActOnTemplateParameterList(unsigned Depth,
535                                 SourceLocation ExportLoc,
536                                 SourceLocation TemplateLoc,
537                                 SourceLocation LAngleLoc,
538                                 DeclPtrTy *Params, unsigned NumParams,
539                                 SourceLocation RAngleLoc) {
540  if (ExportLoc.isValid())
541    Diag(ExportLoc, diag::note_template_export_unsupported);
542
543  return TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc,
544                                       (NamedDecl**)Params, NumParams,
545                                       RAngleLoc);
546}
547
548Sema::DeclResult
549Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
550                         SourceLocation KWLoc, const CXXScopeSpec &SS,
551                         IdentifierInfo *Name, SourceLocation NameLoc,
552                         AttributeList *Attr,
553                         TemplateParameterList *TemplateParams,
554                         AccessSpecifier AS) {
555  assert(TemplateParams && TemplateParams->size() > 0 &&
556         "No template parameters");
557  assert(TUK != TUK_Reference && "Can only declare or define class templates");
558  bool Invalid = false;
559
560  // Check that we can declare a template here.
561  if (CheckTemplateDeclScope(S, TemplateParams))
562    return true;
563
564  TagDecl::TagKind Kind = TagDecl::getTagKindForTypeSpec(TagSpec);
565  assert(Kind != TagDecl::TK_enum && "can't build template of enumerated type");
566
567  // There is no such thing as an unnamed class template.
568  if (!Name) {
569    Diag(KWLoc, diag::err_template_unnamed_class);
570    return true;
571  }
572
573  // Find any previous declaration with this name.
574  DeclContext *SemanticContext;
575  LookupResult Previous;
576  if (SS.isNotEmpty() && !SS.isInvalid()) {
577    if (RequireCompleteDeclContext(SS))
578      return true;
579
580    SemanticContext = computeDeclContext(SS, true);
581    if (!SemanticContext) {
582      // FIXME: Produce a reasonable diagnostic here
583      return true;
584    }
585
586    LookupQualifiedName(Previous, SemanticContext, Name, LookupOrdinaryName,
587                                   true);
588  } else {
589    SemanticContext = CurContext;
590    LookupName(Previous, S, Name, LookupOrdinaryName, true);
591  }
592
593  assert(!Previous.isAmbiguous() && "Ambiguity in class template redecl?");
594  NamedDecl *PrevDecl = 0;
595  if (Previous.begin() != Previous.end())
596    PrevDecl = *Previous.begin();
597
598  if (PrevDecl && TUK == TUK_Friend) {
599    // C++ [namespace.memdef]p3:
600    //   [...] When looking for a prior declaration of a class or a function
601    //   declared as a friend, and when the name of the friend class or
602    //   function is neither a qualified name nor a template-id, scopes outside
603    //   the innermost enclosing namespace scope are not considered.
604    DeclContext *OutermostContext = CurContext;
605    while (!OutermostContext->isFileContext())
606      OutermostContext = OutermostContext->getLookupParent();
607
608    if (OutermostContext->Equals(PrevDecl->getDeclContext()) ||
609        OutermostContext->Encloses(PrevDecl->getDeclContext())) {
610      SemanticContext = PrevDecl->getDeclContext();
611    } else {
612      // Declarations in outer scopes don't matter. However, the outermost
613      // context we computed is the semntic context for our new
614      // declaration.
615      PrevDecl = 0;
616      SemanticContext = OutermostContext;
617    }
618  } else if (PrevDecl && !isDeclInScope(PrevDecl, SemanticContext, S))
619    PrevDecl = 0;
620
621  // If there is a previous declaration with the same name, check
622  // whether this is a valid redeclaration.
623  ClassTemplateDecl *PrevClassTemplate
624    = dyn_cast_or_null<ClassTemplateDecl>(PrevDecl);
625
626  // We may have found the injected-class-name of a class template,
627  // class template partial specialization, or class template specialization.
628  // In these cases, grab the template that is being defined or specialized.
629  if (!PrevClassTemplate && PrevDecl && isa<CXXRecordDecl>(PrevDecl) &&
630      cast<CXXRecordDecl>(PrevDecl)->isInjectedClassName()) {
631    PrevDecl = cast<CXXRecordDecl>(PrevDecl->getDeclContext());
632    PrevClassTemplate
633      = cast<CXXRecordDecl>(PrevDecl)->getDescribedClassTemplate();
634    if (!PrevClassTemplate && isa<ClassTemplateSpecializationDecl>(PrevDecl)) {
635      PrevClassTemplate
636        = cast<ClassTemplateSpecializationDecl>(PrevDecl)
637            ->getSpecializedTemplate();
638    }
639  }
640
641  if (PrevClassTemplate) {
642    // Ensure that the template parameter lists are compatible.
643    if (!TemplateParameterListsAreEqual(TemplateParams,
644                                   PrevClassTemplate->getTemplateParameters(),
645                                        /*Complain=*/true))
646      return true;
647
648    // C++ [temp.class]p4:
649    //   In a redeclaration, partial specialization, explicit
650    //   specialization or explicit instantiation of a class template,
651    //   the class-key shall agree in kind with the original class
652    //   template declaration (7.1.5.3).
653    RecordDecl *PrevRecordDecl = PrevClassTemplate->getTemplatedDecl();
654    if (!isAcceptableTagRedeclaration(PrevRecordDecl, Kind, KWLoc, *Name)) {
655      Diag(KWLoc, diag::err_use_with_wrong_tag)
656        << Name
657        << CodeModificationHint::CreateReplacement(KWLoc,
658                            PrevRecordDecl->getKindName());
659      Diag(PrevRecordDecl->getLocation(), diag::note_previous_use);
660      Kind = PrevRecordDecl->getTagKind();
661    }
662
663    // Check for redefinition of this class template.
664    if (TUK == TUK_Definition) {
665      if (TagDecl *Def = PrevRecordDecl->getDefinition(Context)) {
666        Diag(NameLoc, diag::err_redefinition) << Name;
667        Diag(Def->getLocation(), diag::note_previous_definition);
668        // FIXME: Would it make sense to try to "forget" the previous
669        // definition, as part of error recovery?
670        return true;
671      }
672    }
673  } else if (PrevDecl && PrevDecl->isTemplateParameter()) {
674    // Maybe we will complain about the shadowed template parameter.
675    DiagnoseTemplateParameterShadow(NameLoc, PrevDecl);
676    // Just pretend that we didn't see the previous declaration.
677    PrevDecl = 0;
678  } else if (PrevDecl) {
679    // C++ [temp]p5:
680    //   A class template shall not have the same name as any other
681    //   template, class, function, object, enumeration, enumerator,
682    //   namespace, or type in the same scope (3.3), except as specified
683    //   in (14.5.4).
684    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;
685    Diag(PrevDecl->getLocation(), diag::note_previous_definition);
686    return true;
687  }
688
689  // Check the template parameter list of this declaration, possibly
690  // merging in the template parameter list from the previous class
691  // template declaration.
692  if (CheckTemplateParameterList(TemplateParams,
693            PrevClassTemplate? PrevClassTemplate->getTemplateParameters() : 0))
694    Invalid = true;
695
696  // FIXME: If we had a scope specifier, we better have a previous template
697  // declaration!
698
699  CXXRecordDecl *NewClass =
700    CXXRecordDecl::Create(Context, Kind, SemanticContext, NameLoc, Name, KWLoc,
701                          PrevClassTemplate?
702                            PrevClassTemplate->getTemplatedDecl() : 0,
703                          /*DelayTypeCreation=*/true);
704
705  ClassTemplateDecl *NewTemplate
706    = ClassTemplateDecl::Create(Context, SemanticContext, NameLoc,
707                                DeclarationName(Name), TemplateParams,
708                                NewClass, PrevClassTemplate);
709  NewClass->setDescribedClassTemplate(NewTemplate);
710
711  // Build the type for the class template declaration now.
712  QualType T =
713    Context.getTypeDeclType(NewClass,
714                            PrevClassTemplate?
715                              PrevClassTemplate->getTemplatedDecl() : 0);
716  assert(T->isDependentType() && "Class template type is not dependent?");
717  (void)T;
718
719  // If we are providing an explicit specialization of a member that is a
720  // class template, make a note of that.
721  if (PrevClassTemplate &&
722      PrevClassTemplate->getInstantiatedFromMemberTemplate())
723    PrevClassTemplate->setMemberSpecialization();
724
725  // Set the access specifier.
726  if (!Invalid && TUK != TUK_Friend)
727    SetMemberAccessSpecifier(NewTemplate, PrevClassTemplate, AS);
728
729  // Set the lexical context of these templates
730  NewClass->setLexicalDeclContext(CurContext);
731  NewTemplate->setLexicalDeclContext(CurContext);
732
733  if (TUK == TUK_Definition)
734    NewClass->startDefinition();
735
736  if (Attr)
737    ProcessDeclAttributeList(S, NewClass, Attr);
738
739  if (TUK != TUK_Friend)
740    PushOnScopeChains(NewTemplate, S);
741  else {
742    if (PrevClassTemplate && PrevClassTemplate->getAccess() != AS_none) {
743      NewTemplate->setAccess(PrevClassTemplate->getAccess());
744      NewClass->setAccess(PrevClassTemplate->getAccess());
745    }
746
747    NewTemplate->setObjectOfFriendDecl(/* PreviouslyDeclared = */
748                                       PrevClassTemplate != NULL);
749
750    // Friend templates are visible in fairly strange ways.
751    if (!CurContext->isDependentContext()) {
752      DeclContext *DC = SemanticContext->getLookupContext();
753      DC->makeDeclVisibleInContext(NewTemplate, /* Recoverable = */ false);
754      if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
755        PushOnScopeChains(NewTemplate, EnclosingScope,
756                          /* AddToContext = */ false);
757    }
758
759    FriendDecl *Friend = FriendDecl::Create(Context, CurContext,
760                                            NewClass->getLocation(),
761                                            NewTemplate,
762                                    /*FIXME:*/NewClass->getLocation());
763    Friend->setAccess(AS_public);
764    CurContext->addDecl(Friend);
765  }
766
767  if (Invalid) {
768    NewTemplate->setInvalidDecl();
769    NewClass->setInvalidDecl();
770  }
771  return DeclPtrTy::make(NewTemplate);
772}
773
774/// \brief Checks the validity of a template parameter list, possibly
775/// considering the template parameter list from a previous
776/// declaration.
777///
778/// If an "old" template parameter list is provided, it must be
779/// equivalent (per TemplateParameterListsAreEqual) to the "new"
780/// template parameter list.
781///
782/// \param NewParams Template parameter list for a new template
783/// declaration. This template parameter list will be updated with any
784/// default arguments that are carried through from the previous
785/// template parameter list.
786///
787/// \param OldParams If provided, template parameter list from a
788/// previous declaration of the same template. Default template
789/// arguments will be merged from the old template parameter list to
790/// the new template parameter list.
791///
792/// \returns true if an error occurred, false otherwise.
793bool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams,
794                                      TemplateParameterList *OldParams) {
795  bool Invalid = false;
796
797  // C++ [temp.param]p10:
798  //   The set of default template-arguments available for use with a
799  //   template declaration or definition is obtained by merging the
800  //   default arguments from the definition (if in scope) and all
801  //   declarations in scope in the same way default function
802  //   arguments are (8.3.6).
803  bool SawDefaultArgument = false;
804  SourceLocation PreviousDefaultArgLoc;
805
806  bool SawParameterPack = false;
807  SourceLocation ParameterPackLoc;
808
809  // Dummy initialization to avoid warnings.
810  TemplateParameterList::iterator OldParam = NewParams->end();
811  if (OldParams)
812    OldParam = OldParams->begin();
813
814  for (TemplateParameterList::iterator NewParam = NewParams->begin(),
815                                    NewParamEnd = NewParams->end();
816       NewParam != NewParamEnd; ++NewParam) {
817    // Variables used to diagnose redundant default arguments
818    bool RedundantDefaultArg = false;
819    SourceLocation OldDefaultLoc;
820    SourceLocation NewDefaultLoc;
821
822    // Variables used to diagnose missing default arguments
823    bool MissingDefaultArg = false;
824
825    // C++0x [temp.param]p11:
826    // If a template parameter of a class template is a template parameter pack,
827    // it must be the last template parameter.
828    if (SawParameterPack) {
829      Diag(ParameterPackLoc,
830           diag::err_template_param_pack_must_be_last_template_parameter);
831      Invalid = true;
832    }
833
834    // Merge default arguments for template type parameters.
835    if (TemplateTypeParmDecl *NewTypeParm
836          = dyn_cast<TemplateTypeParmDecl>(*NewParam)) {
837      TemplateTypeParmDecl *OldTypeParm
838          = OldParams? cast<TemplateTypeParmDecl>(*OldParam) : 0;
839
840      if (NewTypeParm->isParameterPack()) {
841        assert(!NewTypeParm->hasDefaultArgument() &&
842               "Parameter packs can't have a default argument!");
843        SawParameterPack = true;
844        ParameterPackLoc = NewTypeParm->getLocation();
845      } else if (OldTypeParm && OldTypeParm->hasDefaultArgument() &&
846          NewTypeParm->hasDefaultArgument()) {
847        OldDefaultLoc = OldTypeParm->getDefaultArgumentLoc();
848        NewDefaultLoc = NewTypeParm->getDefaultArgumentLoc();
849        SawDefaultArgument = true;
850        RedundantDefaultArg = true;
851        PreviousDefaultArgLoc = NewDefaultLoc;
852      } else if (OldTypeParm && OldTypeParm->hasDefaultArgument()) {
853        // Merge the default argument from the old declaration to the
854        // new declaration.
855        SawDefaultArgument = true;
856        NewTypeParm->setDefaultArgument(OldTypeParm->getDefaultArgument(),
857                                        OldTypeParm->getDefaultArgumentLoc(),
858                                        true);
859        PreviousDefaultArgLoc = OldTypeParm->getDefaultArgumentLoc();
860      } else if (NewTypeParm->hasDefaultArgument()) {
861        SawDefaultArgument = true;
862        PreviousDefaultArgLoc = NewTypeParm->getDefaultArgumentLoc();
863      } else if (SawDefaultArgument)
864        MissingDefaultArg = true;
865    } else if (NonTypeTemplateParmDecl *NewNonTypeParm
866               = dyn_cast<NonTypeTemplateParmDecl>(*NewParam)) {
867      // Merge default arguments for non-type template parameters
868      NonTypeTemplateParmDecl *OldNonTypeParm
869        = OldParams? cast<NonTypeTemplateParmDecl>(*OldParam) : 0;
870      if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument() &&
871          NewNonTypeParm->hasDefaultArgument()) {
872        OldDefaultLoc = OldNonTypeParm->getDefaultArgumentLoc();
873        NewDefaultLoc = NewNonTypeParm->getDefaultArgumentLoc();
874        SawDefaultArgument = true;
875        RedundantDefaultArg = true;
876        PreviousDefaultArgLoc = NewDefaultLoc;
877      } else if (OldNonTypeParm && OldNonTypeParm->hasDefaultArgument()) {
878        // Merge the default argument from the old declaration to the
879        // new declaration.
880        SawDefaultArgument = true;
881        // FIXME: We need to create a new kind of "default argument"
882        // expression that points to a previous template template
883        // parameter.
884        NewNonTypeParm->setDefaultArgument(
885                                        OldNonTypeParm->getDefaultArgument());
886        PreviousDefaultArgLoc = OldNonTypeParm->getDefaultArgumentLoc();
887      } else if (NewNonTypeParm->hasDefaultArgument()) {
888        SawDefaultArgument = true;
889        PreviousDefaultArgLoc = NewNonTypeParm->getDefaultArgumentLoc();
890      } else if (SawDefaultArgument)
891        MissingDefaultArg = true;
892    } else {
893    // Merge default arguments for template template parameters
894      TemplateTemplateParmDecl *NewTemplateParm
895        = cast<TemplateTemplateParmDecl>(*NewParam);
896      TemplateTemplateParmDecl *OldTemplateParm
897        = OldParams? cast<TemplateTemplateParmDecl>(*OldParam) : 0;
898      if (OldTemplateParm && OldTemplateParm->hasDefaultArgument() &&
899          NewTemplateParm->hasDefaultArgument()) {
900        OldDefaultLoc = OldTemplateParm->getDefaultArgumentLoc();
901        NewDefaultLoc = NewTemplateParm->getDefaultArgumentLoc();
902        SawDefaultArgument = true;
903        RedundantDefaultArg = true;
904        PreviousDefaultArgLoc = NewDefaultLoc;
905      } else if (OldTemplateParm && OldTemplateParm->hasDefaultArgument()) {
906        // Merge the default argument from the old declaration to the
907        // new declaration.
908        SawDefaultArgument = true;
909        // FIXME: We need to create a new kind of "default argument" expression
910        // that points to a previous template template parameter.
911        NewTemplateParm->setDefaultArgument(
912                                        OldTemplateParm->getDefaultArgument());
913        PreviousDefaultArgLoc = OldTemplateParm->getDefaultArgumentLoc();
914      } else if (NewTemplateParm->hasDefaultArgument()) {
915        SawDefaultArgument = true;
916        PreviousDefaultArgLoc = NewTemplateParm->getDefaultArgumentLoc();
917      } else if (SawDefaultArgument)
918        MissingDefaultArg = true;
919    }
920
921    if (RedundantDefaultArg) {
922      // C++ [temp.param]p12:
923      //   A template-parameter shall not be given default arguments
924      //   by two different declarations in the same scope.
925      Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);
926      Diag(OldDefaultLoc, diag::note_template_param_prev_default_arg);
927      Invalid = true;
928    } else if (MissingDefaultArg) {
929      // C++ [temp.param]p11:
930      //   If a template-parameter has a default template-argument,
931      //   all subsequent template-parameters shall have a default
932      //   template-argument supplied.
933      Diag((*NewParam)->getLocation(),
934           diag::err_template_param_default_arg_missing);
935      Diag(PreviousDefaultArgLoc, diag::note_template_param_prev_default_arg);
936      Invalid = true;
937    }
938
939    // If we have an old template parameter list that we're merging
940    // in, move on to the next parameter.
941    if (OldParams)
942      ++OldParam;
943  }
944
945  return Invalid;
946}
947
948/// \brief Match the given template parameter lists to the given scope
949/// specifier, returning the template parameter list that applies to the
950/// name.
951///
952/// \param DeclStartLoc the start of the declaration that has a scope
953/// specifier or a template parameter list.
954///
955/// \param SS the scope specifier that will be matched to the given template
956/// parameter lists. This scope specifier precedes a qualified name that is
957/// being declared.
958///
959/// \param ParamLists the template parameter lists, from the outermost to the
960/// innermost template parameter lists.
961///
962/// \param NumParamLists the number of template parameter lists in ParamLists.
963///
964/// \param IsExplicitSpecialization will be set true if the entity being
965/// declared is an explicit specialization, false otherwise.
966///
967/// \returns the template parameter list, if any, that corresponds to the
968/// name that is preceded by the scope specifier @p SS. This template
969/// parameter list may be have template parameters (if we're declaring a
970/// template) or may have no template parameters (if we're declaring a
971/// template specialization), or may be NULL (if we were's declaring isn't
972/// itself a template).
973TemplateParameterList *
974Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc,
975                                              const CXXScopeSpec &SS,
976                                          TemplateParameterList **ParamLists,
977                                              unsigned NumParamLists,
978                                              bool &IsExplicitSpecialization) {
979  IsExplicitSpecialization = false;
980
981  // Find the template-ids that occur within the nested-name-specifier. These
982  // template-ids will match up with the template parameter lists.
983  llvm::SmallVector<const TemplateSpecializationType *, 4>
984    TemplateIdsInSpecifier;
985  for (NestedNameSpecifier *NNS = (NestedNameSpecifier *)SS.getScopeRep();
986       NNS; NNS = NNS->getPrefix()) {
987    if (const TemplateSpecializationType *SpecType
988          = dyn_cast_or_null<TemplateSpecializationType>(NNS->getAsType())) {
989      TemplateDecl *Template = SpecType->getTemplateName().getAsTemplateDecl();
990      if (!Template)
991        continue; // FIXME: should this be an error? probably...
992
993      if (const RecordType *Record = SpecType->getAs<RecordType>()) {
994        ClassTemplateSpecializationDecl *SpecDecl
995          = cast<ClassTemplateSpecializationDecl>(Record->getDecl());
996        // If the nested name specifier refers to an explicit specialization,
997        // we don't need a template<> header.
998        // FIXME: revisit this approach once we cope with specializations
999        // properly.
1000        if (SpecDecl->getSpecializationKind() == TSK_ExplicitSpecialization)
1001          continue;
1002      }
1003
1004      TemplateIdsInSpecifier.push_back(SpecType);
1005    }
1006  }
1007
1008  // Reverse the list of template-ids in the scope specifier, so that we can
1009  // more easily match up the template-ids and the template parameter lists.
1010  std::reverse(TemplateIdsInSpecifier.begin(), TemplateIdsInSpecifier.end());
1011
1012  SourceLocation FirstTemplateLoc = DeclStartLoc;
1013  if (NumParamLists)
1014    FirstTemplateLoc = ParamLists[0]->getTemplateLoc();
1015
1016  // Match the template-ids found in the specifier to the template parameter
1017  // lists.
1018  unsigned Idx = 0;
1019  for (unsigned NumTemplateIds = TemplateIdsInSpecifier.size();
1020       Idx != NumTemplateIds; ++Idx) {
1021    QualType TemplateId = QualType(TemplateIdsInSpecifier[Idx], 0);
1022    bool DependentTemplateId = TemplateId->isDependentType();
1023    if (Idx >= NumParamLists) {
1024      // We have a template-id without a corresponding template parameter
1025      // list.
1026      if (DependentTemplateId) {
1027        // FIXME: the location information here isn't great.
1028        Diag(SS.getRange().getBegin(),
1029             diag::err_template_spec_needs_template_parameters)
1030          << TemplateId
1031          << SS.getRange();
1032      } else {
1033        Diag(SS.getRange().getBegin(), diag::err_template_spec_needs_header)
1034          << SS.getRange()
1035          << CodeModificationHint::CreateInsertion(FirstTemplateLoc,
1036                                                   "template<> ");
1037        IsExplicitSpecialization = true;
1038      }
1039      return 0;
1040    }
1041
1042    // Check the template parameter list against its corresponding template-id.
1043    if (DependentTemplateId) {
1044      TemplateDecl *Template
1045        = TemplateIdsInSpecifier[Idx]->getTemplateName().getAsTemplateDecl();
1046
1047      if (ClassTemplateDecl *ClassTemplate
1048            = dyn_cast<ClassTemplateDecl>(Template)) {
1049        TemplateParameterList *ExpectedTemplateParams = 0;
1050        // Is this template-id naming the primary template?
1051        if (Context.hasSameType(TemplateId,
1052                             ClassTemplate->getInjectedClassNameType(Context)))
1053          ExpectedTemplateParams = ClassTemplate->getTemplateParameters();
1054        // ... or a partial specialization?
1055        else if (ClassTemplatePartialSpecializationDecl *PartialSpec
1056                   = ClassTemplate->findPartialSpecialization(TemplateId))
1057          ExpectedTemplateParams = PartialSpec->getTemplateParameters();
1058
1059        if (ExpectedTemplateParams)
1060          TemplateParameterListsAreEqual(ParamLists[Idx],
1061                                         ExpectedTemplateParams,
1062                                         true);
1063      }
1064    } else if (ParamLists[Idx]->size() > 0)
1065      Diag(ParamLists[Idx]->getTemplateLoc(),
1066           diag::err_template_param_list_matches_nontemplate)
1067        << TemplateId
1068        << ParamLists[Idx]->getSourceRange();
1069    else
1070      IsExplicitSpecialization = true;
1071  }
1072
1073  // If there were at least as many template-ids as there were template
1074  // parameter lists, then there are no template parameter lists remaining for
1075  // the declaration itself.
1076  if (Idx >= NumParamLists)
1077    return 0;
1078
1079  // If there were too many template parameter lists, complain about that now.
1080  if (Idx != NumParamLists - 1) {
1081    while (Idx < NumParamLists - 1) {
1082      Diag(ParamLists[Idx]->getTemplateLoc(),
1083           diag::err_template_spec_extra_headers)
1084        << SourceRange(ParamLists[Idx]->getTemplateLoc(),
1085                       ParamLists[Idx]->getRAngleLoc());
1086      ++Idx;
1087    }
1088  }
1089
1090  // Return the last template parameter list, which corresponds to the
1091  // entity being declared.
1092  return ParamLists[NumParamLists - 1];
1093}
1094
1095/// \brief Translates template arguments as provided by the parser
1096/// into template arguments used by semantic analysis.
1097void Sema::translateTemplateArguments(ASTTemplateArgsPtr &TemplateArgsIn,
1098                                      SourceLocation *TemplateArgLocs,
1099                     llvm::SmallVector<TemplateArgument, 16> &TemplateArgs) {
1100  TemplateArgs.reserve(TemplateArgsIn.size());
1101
1102  void **Args = TemplateArgsIn.getArgs();
1103  bool *ArgIsType = TemplateArgsIn.getArgIsType();
1104  for (unsigned Arg = 0, Last = TemplateArgsIn.size(); Arg != Last; ++Arg) {
1105    TemplateArgs.push_back(
1106      ArgIsType[Arg]? TemplateArgument(TemplateArgLocs[Arg],
1107                                       //FIXME: Preserve type source info.
1108                                       Sema::GetTypeFromParser(Args[Arg]))
1109                    : TemplateArgument(reinterpret_cast<Expr *>(Args[Arg])));
1110  }
1111}
1112
1113QualType Sema::CheckTemplateIdType(TemplateName Name,
1114                                   SourceLocation TemplateLoc,
1115                                   SourceLocation LAngleLoc,
1116                                   const TemplateArgument *TemplateArgs,
1117                                   unsigned NumTemplateArgs,
1118                                   SourceLocation RAngleLoc) {
1119  TemplateDecl *Template = Name.getAsTemplateDecl();
1120  if (!Template) {
1121    // The template name does not resolve to a template, so we just
1122    // build a dependent template-id type.
1123    return Context.getTemplateSpecializationType(Name, TemplateArgs,
1124                                                 NumTemplateArgs);
1125  }
1126
1127  // Check that the template argument list is well-formed for this
1128  // template.
1129  TemplateArgumentListBuilder Converted(Template->getTemplateParameters(),
1130                                        NumTemplateArgs);
1131  if (CheckTemplateArgumentList(Template, TemplateLoc, LAngleLoc,
1132                                TemplateArgs, NumTemplateArgs, RAngleLoc,
1133                                false, Converted))
1134    return QualType();
1135
1136  assert((Converted.structuredSize() ==
1137            Template->getTemplateParameters()->size()) &&
1138         "Converted template argument list is too short!");
1139
1140  QualType CanonType;
1141
1142  if (TemplateSpecializationType::anyDependentTemplateArguments(
1143                                                      TemplateArgs,
1144                                                      NumTemplateArgs)) {
1145    // This class template specialization is a dependent
1146    // type. Therefore, its canonical type is another class template
1147    // specialization type that contains all of the converted
1148    // arguments in canonical form. This ensures that, e.g., A<T> and
1149    // A<T, T> have identical types when A is declared as:
1150    //
1151    //   template<typename T, typename U = T> struct A;
1152    TemplateName CanonName = Context.getCanonicalTemplateName(Name);
1153    CanonType = Context.getTemplateSpecializationType(CanonName,
1154                                                   Converted.getFlatArguments(),
1155                                                   Converted.flatSize());
1156
1157    // FIXME: CanonType is not actually the canonical type, and unfortunately
1158    // it is a TemplateTypeSpecializationType that we will never use again.
1159    // In the future, we need to teach getTemplateSpecializationType to only
1160    // build the canonical type and return that to us.
1161    CanonType = Context.getCanonicalType(CanonType);
1162  } else if (ClassTemplateDecl *ClassTemplate
1163               = dyn_cast<ClassTemplateDecl>(Template)) {
1164    // Find the class template specialization declaration that
1165    // corresponds to these arguments.
1166    llvm::FoldingSetNodeID ID;
1167    ClassTemplateSpecializationDecl::Profile(ID,
1168                                             Converted.getFlatArguments(),
1169                                             Converted.flatSize(),
1170                                             Context);
1171    void *InsertPos = 0;
1172    ClassTemplateSpecializationDecl *Decl
1173      = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
1174    if (!Decl) {
1175      // This is the first time we have referenced this class template
1176      // specialization. Create the canonical declaration and add it to
1177      // the set of specializations.
1178      Decl = ClassTemplateSpecializationDecl::Create(Context,
1179                                    ClassTemplate->getDeclContext(),
1180                                    ClassTemplate->getLocation(),
1181                                    ClassTemplate,
1182                                    Converted, 0);
1183      ClassTemplate->getSpecializations().InsertNode(Decl, InsertPos);
1184      Decl->setLexicalDeclContext(CurContext);
1185    }
1186
1187    CanonType = Context.getTypeDeclType(Decl);
1188  }
1189
1190  // Build the fully-sugared type for this class template
1191  // specialization, which refers back to the class template
1192  // specialization we created or found.
1193  //FIXME: Preserve type source info.
1194  return Context.getTemplateSpecializationType(Name, TemplateArgs,
1195                                               NumTemplateArgs, CanonType);
1196}
1197
1198Action::TypeResult
1199Sema::ActOnTemplateIdType(TemplateTy TemplateD, SourceLocation TemplateLoc,
1200                          SourceLocation LAngleLoc,
1201                          ASTTemplateArgsPtr TemplateArgsIn,
1202                          SourceLocation *TemplateArgLocs,
1203                          SourceLocation RAngleLoc) {
1204  TemplateName Template = TemplateD.getAsVal<TemplateName>();
1205
1206  // Translate the parser's template argument list in our AST format.
1207  llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
1208  translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
1209
1210  QualType Result = CheckTemplateIdType(Template, TemplateLoc, LAngleLoc,
1211                                        TemplateArgs.data(),
1212                                        TemplateArgs.size(),
1213                                        RAngleLoc);
1214  TemplateArgsIn.release();
1215
1216  if (Result.isNull())
1217    return true;
1218
1219  return Result.getAsOpaquePtr();
1220}
1221
1222Sema::TypeResult Sema::ActOnTagTemplateIdType(TypeResult TypeResult,
1223                                              TagUseKind TUK,
1224                                              DeclSpec::TST TagSpec,
1225                                              SourceLocation TagLoc) {
1226  if (TypeResult.isInvalid())
1227    return Sema::TypeResult();
1228
1229  QualType Type = QualType::getFromOpaquePtr(TypeResult.get());
1230
1231  // Verify the tag specifier.
1232  TagDecl::TagKind TagKind = TagDecl::getTagKindForTypeSpec(TagSpec);
1233
1234  if (const RecordType *RT = Type->getAs<RecordType>()) {
1235    RecordDecl *D = RT->getDecl();
1236
1237    IdentifierInfo *Id = D->getIdentifier();
1238    assert(Id && "templated class must have an identifier");
1239
1240    if (!isAcceptableTagRedeclaration(D, TagKind, TagLoc, *Id)) {
1241      Diag(TagLoc, diag::err_use_with_wrong_tag)
1242        << Type
1243        << CodeModificationHint::CreateReplacement(SourceRange(TagLoc),
1244                                                   D->getKindName());
1245      Diag(D->getLocation(), diag::note_previous_use);
1246    }
1247  }
1248
1249  QualType ElabType = Context.getElaboratedType(Type, TagKind);
1250
1251  return ElabType.getAsOpaquePtr();
1252}
1253
1254Sema::OwningExprResult Sema::BuildTemplateIdExpr(TemplateName Template,
1255                                                 SourceLocation TemplateNameLoc,
1256                                                 SourceLocation LAngleLoc,
1257                                           const TemplateArgument *TemplateArgs,
1258                                                 unsigned NumTemplateArgs,
1259                                                 SourceLocation RAngleLoc) {
1260  // FIXME: Can we do any checking at this point? I guess we could check the
1261  // template arguments that we have against the template name, if the template
1262  // name refers to a single template. That's not a terribly common case,
1263  // though.
1264  return Owned(TemplateIdRefExpr::Create(Context,
1265                                         /*FIXME: New type?*/Context.OverloadTy,
1266                                         /*FIXME: Necessary?*/0,
1267                                         /*FIXME: Necessary?*/SourceRange(),
1268                                         Template, TemplateNameLoc, LAngleLoc,
1269                                         TemplateArgs,
1270                                         NumTemplateArgs, RAngleLoc));
1271}
1272
1273Sema::OwningExprResult Sema::ActOnTemplateIdExpr(TemplateTy TemplateD,
1274                                                 SourceLocation TemplateNameLoc,
1275                                                 SourceLocation LAngleLoc,
1276                                              ASTTemplateArgsPtr TemplateArgsIn,
1277                                                SourceLocation *TemplateArgLocs,
1278                                                 SourceLocation RAngleLoc) {
1279  TemplateName Template = TemplateD.getAsVal<TemplateName>();
1280
1281  // Translate the parser's template argument list in our AST format.
1282  llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
1283  translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
1284  TemplateArgsIn.release();
1285
1286  return BuildTemplateIdExpr(Template, TemplateNameLoc, LAngleLoc,
1287                             TemplateArgs.data(), TemplateArgs.size(),
1288                             RAngleLoc);
1289}
1290
1291Sema::OwningExprResult
1292Sema::ActOnMemberTemplateIdReferenceExpr(Scope *S, ExprArg Base,
1293                                         SourceLocation OpLoc,
1294                                         tok::TokenKind OpKind,
1295                                         const CXXScopeSpec &SS,
1296                                         TemplateTy TemplateD,
1297                                         SourceLocation TemplateNameLoc,
1298                                         SourceLocation LAngleLoc,
1299                                         ASTTemplateArgsPtr TemplateArgsIn,
1300                                         SourceLocation *TemplateArgLocs,
1301                                         SourceLocation RAngleLoc) {
1302  TemplateName Template = TemplateD.getAsVal<TemplateName>();
1303
1304  // FIXME: We're going to end up looking up the template based on its name,
1305  // twice!
1306  DeclarationName Name;
1307  if (TemplateDecl *ActualTemplate = Template.getAsTemplateDecl())
1308    Name = ActualTemplate->getDeclName();
1309  else if (OverloadedFunctionDecl *Ovl = Template.getAsOverloadedFunctionDecl())
1310    Name = Ovl->getDeclName();
1311  else
1312    Name = Template.getAsDependentTemplateName()->getName();
1313
1314  // Translate the parser's template argument list in our AST format.
1315  llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
1316  translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
1317  TemplateArgsIn.release();
1318
1319  // Do we have the save the actual template name? We might need it...
1320  return BuildMemberReferenceExpr(S, move(Base), OpLoc, OpKind, TemplateNameLoc,
1321                                  Name, true, LAngleLoc,
1322                                  TemplateArgs.data(), TemplateArgs.size(),
1323                                  RAngleLoc, DeclPtrTy(), &SS);
1324}
1325
1326/// \brief Form a dependent template name.
1327///
1328/// This action forms a dependent template name given the template
1329/// name and its (presumably dependent) scope specifier. For
1330/// example, given "MetaFun::template apply", the scope specifier \p
1331/// SS will be "MetaFun::", \p TemplateKWLoc contains the location
1332/// of the "template" keyword, and "apply" is the \p Name.
1333Sema::TemplateTy
1334Sema::ActOnDependentTemplateName(SourceLocation TemplateKWLoc,
1335                                 const IdentifierInfo &Name,
1336                                 SourceLocation NameLoc,
1337                                 const CXXScopeSpec &SS,
1338                                 TypeTy *ObjectType) {
1339  if ((ObjectType &&
1340       computeDeclContext(QualType::getFromOpaquePtr(ObjectType))) ||
1341      (SS.isSet() && computeDeclContext(SS, false))) {
1342    // C++0x [temp.names]p5:
1343    //   If a name prefixed by the keyword template is not the name of
1344    //   a template, the program is ill-formed. [Note: the keyword
1345    //   template may not be applied to non-template members of class
1346    //   templates. -end note ] [ Note: as is the case with the
1347    //   typename prefix, the template prefix is allowed in cases
1348    //   where it is not strictly necessary; i.e., when the
1349    //   nested-name-specifier or the expression on the left of the ->
1350    //   or . is not dependent on a template-parameter, or the use
1351    //   does not appear in the scope of a template. -end note]
1352    //
1353    // Note: C++03 was more strict here, because it banned the use of
1354    // the "template" keyword prior to a template-name that was not a
1355    // dependent name. C++ DR468 relaxed this requirement (the
1356    // "template" keyword is now permitted). We follow the C++0x
1357    // rules, even in C++03 mode, retroactively applying the DR.
1358    TemplateTy Template;
1359    TemplateNameKind TNK = isTemplateName(0, Name, NameLoc, &SS, ObjectType,
1360                                          false, Template);
1361    if (TNK == TNK_Non_template) {
1362      Diag(NameLoc, diag::err_template_kw_refers_to_non_template)
1363        << &Name;
1364      return TemplateTy();
1365    }
1366
1367    return Template;
1368  }
1369
1370  NestedNameSpecifier *Qualifier
1371    = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
1372  return TemplateTy::make(Context.getDependentTemplateName(Qualifier, &Name));
1373}
1374
1375bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param,
1376                                     const TemplateArgument &Arg,
1377                                     TemplateArgumentListBuilder &Converted) {
1378  // Check template type parameter.
1379  if (Arg.getKind() != TemplateArgument::Type) {
1380    // C++ [temp.arg.type]p1:
1381    //   A template-argument for a template-parameter which is a
1382    //   type shall be a type-id.
1383
1384    // We have a template type parameter but the template argument
1385    // is not a type.
1386    Diag(Arg.getLocation(), diag::err_template_arg_must_be_type);
1387    Diag(Param->getLocation(), diag::note_template_param_here);
1388
1389    return true;
1390  }
1391
1392  if (CheckTemplateArgument(Param, Arg.getAsType(), Arg.getLocation()))
1393    return true;
1394
1395  // Add the converted template type argument.
1396  Converted.Append(
1397                 TemplateArgument(Arg.getLocation(),
1398                                  Context.getCanonicalType(Arg.getAsType())));
1399  return false;
1400}
1401
1402/// \brief Check that the given template argument list is well-formed
1403/// for specializing the given template.
1404bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
1405                                     SourceLocation TemplateLoc,
1406                                     SourceLocation LAngleLoc,
1407                                     const TemplateArgument *TemplateArgs,
1408                                     unsigned NumTemplateArgs,
1409                                     SourceLocation RAngleLoc,
1410                                     bool PartialTemplateArgs,
1411                                     TemplateArgumentListBuilder &Converted) {
1412  TemplateParameterList *Params = Template->getTemplateParameters();
1413  unsigned NumParams = Params->size();
1414  unsigned NumArgs = NumTemplateArgs;
1415  bool Invalid = false;
1416
1417  bool HasParameterPack =
1418    NumParams > 0 && Params->getParam(NumParams - 1)->isTemplateParameterPack();
1419
1420  if ((NumArgs > NumParams && !HasParameterPack) ||
1421      (NumArgs < Params->getMinRequiredArguments() &&
1422       !PartialTemplateArgs)) {
1423    // FIXME: point at either the first arg beyond what we can handle,
1424    // or the '>', depending on whether we have too many or too few
1425    // arguments.
1426    SourceRange Range;
1427    if (NumArgs > NumParams)
1428      Range = SourceRange(TemplateArgs[NumParams].getLocation(), RAngleLoc);
1429    Diag(TemplateLoc, diag::err_template_arg_list_different_arity)
1430      << (NumArgs > NumParams)
1431      << (isa<ClassTemplateDecl>(Template)? 0 :
1432          isa<FunctionTemplateDecl>(Template)? 1 :
1433          isa<TemplateTemplateParmDecl>(Template)? 2 : 3)
1434      << Template << Range;
1435    Diag(Template->getLocation(), diag::note_template_decl_here)
1436      << Params->getSourceRange();
1437    Invalid = true;
1438  }
1439
1440  // C++ [temp.arg]p1:
1441  //   [...] The type and form of each template-argument specified in
1442  //   a template-id shall match the type and form specified for the
1443  //   corresponding parameter declared by the template in its
1444  //   template-parameter-list.
1445  unsigned ArgIdx = 0;
1446  for (TemplateParameterList::iterator Param = Params->begin(),
1447                                       ParamEnd = Params->end();
1448       Param != ParamEnd; ++Param, ++ArgIdx) {
1449    if (ArgIdx > NumArgs && PartialTemplateArgs)
1450      break;
1451
1452    // Decode the template argument
1453    TemplateArgument Arg;
1454    if (ArgIdx >= NumArgs) {
1455      // Retrieve the default template argument from the template
1456      // parameter.
1457      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) {
1458        if (TTP->isParameterPack()) {
1459          // We have an empty argument pack.
1460          Converted.BeginPack();
1461          Converted.EndPack();
1462          break;
1463        }
1464
1465        if (!TTP->hasDefaultArgument())
1466          break;
1467
1468        QualType ArgType = TTP->getDefaultArgument();
1469
1470        // If the argument type is dependent, instantiate it now based
1471        // on the previously-computed template arguments.
1472        if (ArgType->isDependentType()) {
1473          InstantiatingTemplate Inst(*this, TemplateLoc,
1474                                     Template, Converted.getFlatArguments(),
1475                                     Converted.flatSize(),
1476                                     SourceRange(TemplateLoc, RAngleLoc));
1477
1478          TemplateArgumentList TemplateArgs(Context, Converted,
1479                                            /*TakeArgs=*/false);
1480          ArgType = SubstType(ArgType,
1481                              MultiLevelTemplateArgumentList(TemplateArgs),
1482                              TTP->getDefaultArgumentLoc(),
1483                              TTP->getDeclName());
1484        }
1485
1486        if (ArgType.isNull())
1487          return true;
1488
1489        Arg = TemplateArgument(TTP->getLocation(), ArgType);
1490      } else if (NonTypeTemplateParmDecl *NTTP
1491                   = dyn_cast<NonTypeTemplateParmDecl>(*Param)) {
1492        if (!NTTP->hasDefaultArgument())
1493          break;
1494
1495        InstantiatingTemplate Inst(*this, TemplateLoc,
1496                                   Template, Converted.getFlatArguments(),
1497                                   Converted.flatSize(),
1498                                   SourceRange(TemplateLoc, RAngleLoc));
1499
1500        TemplateArgumentList TemplateArgs(Context, Converted,
1501                                          /*TakeArgs=*/false);
1502
1503        Sema::OwningExprResult E
1504          = SubstExpr(NTTP->getDefaultArgument(),
1505                      MultiLevelTemplateArgumentList(TemplateArgs));
1506        if (E.isInvalid())
1507          return true;
1508
1509        Arg = TemplateArgument(E.takeAs<Expr>());
1510      } else {
1511        TemplateTemplateParmDecl *TempParm
1512          = cast<TemplateTemplateParmDecl>(*Param);
1513
1514        if (!TempParm->hasDefaultArgument())
1515          break;
1516
1517        // FIXME: Subst default argument
1518        Arg = TemplateArgument(TempParm->getDefaultArgument());
1519      }
1520    } else {
1521      // Retrieve the template argument produced by the user.
1522      Arg = TemplateArgs[ArgIdx];
1523    }
1524
1525
1526    if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*Param)) {
1527      if (TTP->isParameterPack()) {
1528        Converted.BeginPack();
1529        // Check all the remaining arguments (if any).
1530        for (; ArgIdx < NumArgs; ++ArgIdx) {
1531          if (CheckTemplateTypeArgument(TTP, TemplateArgs[ArgIdx], Converted))
1532            Invalid = true;
1533        }
1534
1535        Converted.EndPack();
1536      } else {
1537        if (CheckTemplateTypeArgument(TTP, Arg, Converted))
1538          Invalid = true;
1539      }
1540    } else if (NonTypeTemplateParmDecl *NTTP
1541                 = dyn_cast<NonTypeTemplateParmDecl>(*Param)) {
1542      // Check non-type template parameters.
1543
1544      // Do substitution on the type of the non-type template parameter
1545      // with the template arguments we've seen thus far.
1546      QualType NTTPType = NTTP->getType();
1547      if (NTTPType->isDependentType()) {
1548        // Do substitution on the type of the non-type template parameter.
1549        InstantiatingTemplate Inst(*this, TemplateLoc,
1550                                   Template, Converted.getFlatArguments(),
1551                                   Converted.flatSize(),
1552                                   SourceRange(TemplateLoc, RAngleLoc));
1553
1554        TemplateArgumentList TemplateArgs(Context, Converted,
1555                                          /*TakeArgs=*/false);
1556        NTTPType = SubstType(NTTPType,
1557                             MultiLevelTemplateArgumentList(TemplateArgs),
1558                             NTTP->getLocation(),
1559                             NTTP->getDeclName());
1560        // If that worked, check the non-type template parameter type
1561        // for validity.
1562        if (!NTTPType.isNull())
1563          NTTPType = CheckNonTypeTemplateParameterType(NTTPType,
1564                                                       NTTP->getLocation());
1565        if (NTTPType.isNull()) {
1566          Invalid = true;
1567          break;
1568        }
1569      }
1570
1571      switch (Arg.getKind()) {
1572      case TemplateArgument::Null:
1573        assert(false && "Should never see a NULL template argument here");
1574        break;
1575
1576      case TemplateArgument::Expression: {
1577        Expr *E = Arg.getAsExpr();
1578        TemplateArgument Result;
1579        if (CheckTemplateArgument(NTTP, NTTPType, E, Result))
1580          Invalid = true;
1581        else
1582          Converted.Append(Result);
1583        break;
1584      }
1585
1586      case TemplateArgument::Declaration:
1587      case TemplateArgument::Integral:
1588        // We've already checked this template argument, so just copy
1589        // it to the list of converted arguments.
1590        Converted.Append(Arg);
1591        break;
1592
1593      case TemplateArgument::Type:
1594        // We have a non-type template parameter but the template
1595        // argument is a type.
1596
1597        // C++ [temp.arg]p2:
1598        //   In a template-argument, an ambiguity between a type-id and
1599        //   an expression is resolved to a type-id, regardless of the
1600        //   form of the corresponding template-parameter.
1601        //
1602        // We warn specifically about this case, since it can be rather
1603        // confusing for users.
1604        if (Arg.getAsType()->isFunctionType())
1605          Diag(Arg.getLocation(), diag::err_template_arg_nontype_ambig)
1606            << Arg.getAsType();
1607        else
1608          Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr);
1609        Diag((*Param)->getLocation(), diag::note_template_param_here);
1610        Invalid = true;
1611        break;
1612
1613      case TemplateArgument::Pack:
1614        assert(0 && "FIXME: Implement!");
1615        break;
1616      }
1617    } else {
1618      // Check template template parameters.
1619      TemplateTemplateParmDecl *TempParm
1620        = cast<TemplateTemplateParmDecl>(*Param);
1621
1622      switch (Arg.getKind()) {
1623      case TemplateArgument::Null:
1624        assert(false && "Should never see a NULL template argument here");
1625        break;
1626
1627      case TemplateArgument::Expression: {
1628        Expr *ArgExpr = Arg.getAsExpr();
1629        if (ArgExpr && isa<DeclRefExpr>(ArgExpr) &&
1630            isa<TemplateDecl>(cast<DeclRefExpr>(ArgExpr)->getDecl())) {
1631          if (CheckTemplateArgument(TempParm, cast<DeclRefExpr>(ArgExpr)))
1632            Invalid = true;
1633
1634          // Add the converted template argument.
1635          Decl *D
1636            = cast<DeclRefExpr>(ArgExpr)->getDecl()->getCanonicalDecl();
1637          Converted.Append(TemplateArgument(Arg.getLocation(), D));
1638          continue;
1639        }
1640      }
1641        // fall through
1642
1643      case TemplateArgument::Type: {
1644        // We have a template template parameter but the template
1645        // argument does not refer to a template.
1646        Diag(Arg.getLocation(), diag::err_template_arg_must_be_template);
1647        Invalid = true;
1648        break;
1649      }
1650
1651      case TemplateArgument::Declaration:
1652        // We've already checked this template argument, so just copy
1653        // it to the list of converted arguments.
1654        Converted.Append(Arg);
1655        break;
1656
1657      case TemplateArgument::Integral:
1658        assert(false && "Integral argument with template template parameter");
1659        break;
1660
1661      case TemplateArgument::Pack:
1662        assert(0 && "FIXME: Implement!");
1663        break;
1664      }
1665    }
1666  }
1667
1668  return Invalid;
1669}
1670
1671/// \brief Check a template argument against its corresponding
1672/// template type parameter.
1673///
1674/// This routine implements the semantics of C++ [temp.arg.type]. It
1675/// returns true if an error occurred, and false otherwise.
1676bool Sema::CheckTemplateArgument(TemplateTypeParmDecl *Param,
1677                                 QualType Arg, SourceLocation ArgLoc) {
1678  // C++ [temp.arg.type]p2:
1679  //   A local type, a type with no linkage, an unnamed type or a type
1680  //   compounded from any of these types shall not be used as a
1681  //   template-argument for a template type-parameter.
1682  //
1683  // FIXME: Perform the recursive and no-linkage type checks.
1684  const TagType *Tag = 0;
1685  if (const EnumType *EnumT = Arg->getAs<EnumType>())
1686    Tag = EnumT;
1687  else if (const RecordType *RecordT = Arg->getAs<RecordType>())
1688    Tag = RecordT;
1689  if (Tag && Tag->getDecl()->getDeclContext()->isFunctionOrMethod())
1690    return Diag(ArgLoc, diag::err_template_arg_local_type)
1691      << QualType(Tag, 0);
1692  else if (Tag && !Tag->getDecl()->getDeclName() &&
1693           !Tag->getDecl()->getTypedefForAnonDecl()) {
1694    Diag(ArgLoc, diag::err_template_arg_unnamed_type);
1695    Diag(Tag->getDecl()->getLocation(), diag::note_template_unnamed_type_here);
1696    return true;
1697  }
1698
1699  return false;
1700}
1701
1702/// \brief Checks whether the given template argument is the address
1703/// of an object or function according to C++ [temp.arg.nontype]p1.
1704bool Sema::CheckTemplateArgumentAddressOfObjectOrFunction(Expr *Arg,
1705                                                          NamedDecl *&Entity) {
1706  bool Invalid = false;
1707
1708  // See through any implicit casts we added to fix the type.
1709  while (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg))
1710    Arg = Cast->getSubExpr();
1711
1712  // C++0x allows nullptr, and there's no further checking to be done for that.
1713  if (Arg->getType()->isNullPtrType())
1714    return false;
1715
1716  // C++ [temp.arg.nontype]p1:
1717  //
1718  //   A template-argument for a non-type, non-template
1719  //   template-parameter shall be one of: [...]
1720  //
1721  //     -- the address of an object or function with external
1722  //        linkage, including function templates and function
1723  //        template-ids but excluding non-static class members,
1724  //        expressed as & id-expression where the & is optional if
1725  //        the name refers to a function or array, or if the
1726  //        corresponding template-parameter is a reference; or
1727  DeclRefExpr *DRE = 0;
1728
1729  // Ignore (and complain about) any excess parentheses.
1730  while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
1731    if (!Invalid) {
1732      Diag(Arg->getSourceRange().getBegin(),
1733           diag::err_template_arg_extra_parens)
1734        << Arg->getSourceRange();
1735      Invalid = true;
1736    }
1737
1738    Arg = Parens->getSubExpr();
1739  }
1740
1741  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg)) {
1742    if (UnOp->getOpcode() == UnaryOperator::AddrOf)
1743      DRE = dyn_cast<DeclRefExpr>(UnOp->getSubExpr());
1744  } else
1745    DRE = dyn_cast<DeclRefExpr>(Arg);
1746
1747  if (!DRE || !isa<ValueDecl>(DRE->getDecl()))
1748    return Diag(Arg->getSourceRange().getBegin(),
1749                diag::err_template_arg_not_object_or_func_form)
1750      << Arg->getSourceRange();
1751
1752  // Cannot refer to non-static data members
1753  if (FieldDecl *Field = dyn_cast<FieldDecl>(DRE->getDecl()))
1754    return Diag(Arg->getSourceRange().getBegin(), diag::err_template_arg_field)
1755      << Field << Arg->getSourceRange();
1756
1757  // Cannot refer to non-static member functions
1758  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(DRE->getDecl()))
1759    if (!Method->isStatic())
1760      return Diag(Arg->getSourceRange().getBegin(),
1761                  diag::err_template_arg_method)
1762        << Method << Arg->getSourceRange();
1763
1764  // Functions must have external linkage.
1765  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(DRE->getDecl())) {
1766    if (Func->getStorageClass() == FunctionDecl::Static) {
1767      Diag(Arg->getSourceRange().getBegin(),
1768           diag::err_template_arg_function_not_extern)
1769        << Func << Arg->getSourceRange();
1770      Diag(Func->getLocation(), diag::note_template_arg_internal_object)
1771        << true;
1772      return true;
1773    }
1774
1775    // Okay: we've named a function with external linkage.
1776    Entity = Func;
1777    return Invalid;
1778  }
1779
1780  if (VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl())) {
1781    if (!Var->hasGlobalStorage()) {
1782      Diag(Arg->getSourceRange().getBegin(),
1783           diag::err_template_arg_object_not_extern)
1784        << Var << Arg->getSourceRange();
1785      Diag(Var->getLocation(), diag::note_template_arg_internal_object)
1786        << true;
1787      return true;
1788    }
1789
1790    // Okay: we've named an object with external linkage
1791    Entity = Var;
1792    return Invalid;
1793  }
1794
1795  // We found something else, but we don't know specifically what it is.
1796  Diag(Arg->getSourceRange().getBegin(),
1797       diag::err_template_arg_not_object_or_func)
1798      << Arg->getSourceRange();
1799  Diag(DRE->getDecl()->getLocation(),
1800       diag::note_template_arg_refers_here);
1801  return true;
1802}
1803
1804/// \brief Checks whether the given template argument is a pointer to
1805/// member constant according to C++ [temp.arg.nontype]p1.
1806bool
1807Sema::CheckTemplateArgumentPointerToMember(Expr *Arg, NamedDecl *&Member) {
1808  bool Invalid = false;
1809
1810  // See through any implicit casts we added to fix the type.
1811  while (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(Arg))
1812    Arg = Cast->getSubExpr();
1813
1814  // C++0x allows nullptr, and there's no further checking to be done for that.
1815  if (Arg->getType()->isNullPtrType())
1816    return false;
1817
1818  // C++ [temp.arg.nontype]p1:
1819  //
1820  //   A template-argument for a non-type, non-template
1821  //   template-parameter shall be one of: [...]
1822  //
1823  //     -- a pointer to member expressed as described in 5.3.1.
1824  QualifiedDeclRefExpr *DRE = 0;
1825
1826  // Ignore (and complain about) any excess parentheses.
1827  while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {
1828    if (!Invalid) {
1829      Diag(Arg->getSourceRange().getBegin(),
1830           diag::err_template_arg_extra_parens)
1831        << Arg->getSourceRange();
1832      Invalid = true;
1833    }
1834
1835    Arg = Parens->getSubExpr();
1836  }
1837
1838  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(Arg))
1839    if (UnOp->getOpcode() == UnaryOperator::AddrOf)
1840      DRE = dyn_cast<QualifiedDeclRefExpr>(UnOp->getSubExpr());
1841
1842  if (!DRE)
1843    return Diag(Arg->getSourceRange().getBegin(),
1844                diag::err_template_arg_not_pointer_to_member_form)
1845      << Arg->getSourceRange();
1846
1847  if (isa<FieldDecl>(DRE->getDecl()) || isa<CXXMethodDecl>(DRE->getDecl())) {
1848    assert((isa<FieldDecl>(DRE->getDecl()) ||
1849            !cast<CXXMethodDecl>(DRE->getDecl())->isStatic()) &&
1850           "Only non-static member pointers can make it here");
1851
1852    // Okay: this is the address of a non-static member, and therefore
1853    // a member pointer constant.
1854    Member = DRE->getDecl();
1855    return Invalid;
1856  }
1857
1858  // We found something else, but we don't know specifically what it is.
1859  Diag(Arg->getSourceRange().getBegin(),
1860       diag::err_template_arg_not_pointer_to_member_form)
1861      << Arg->getSourceRange();
1862  Diag(DRE->getDecl()->getLocation(),
1863       diag::note_template_arg_refers_here);
1864  return true;
1865}
1866
1867/// \brief Check a template argument against its corresponding
1868/// non-type template parameter.
1869///
1870/// This routine implements the semantics of C++ [temp.arg.nontype].
1871/// It returns true if an error occurred, and false otherwise. \p
1872/// InstantiatedParamType is the type of the non-type template
1873/// parameter after it has been instantiated.
1874///
1875/// If no error was detected, Converted receives the converted template argument.
1876bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
1877                                 QualType InstantiatedParamType, Expr *&Arg,
1878                                 TemplateArgument &Converted) {
1879  SourceLocation StartLoc = Arg->getSourceRange().getBegin();
1880
1881  // If either the parameter has a dependent type or the argument is
1882  // type-dependent, there's nothing we can check now.
1883  // FIXME: Add template argument to Converted!
1884  if (InstantiatedParamType->isDependentType() || Arg->isTypeDependent()) {
1885    // FIXME: Produce a cloned, canonical expression?
1886    Converted = TemplateArgument(Arg);
1887    return false;
1888  }
1889
1890  // C++ [temp.arg.nontype]p5:
1891  //   The following conversions are performed on each expression used
1892  //   as a non-type template-argument. If a non-type
1893  //   template-argument cannot be converted to the type of the
1894  //   corresponding template-parameter then the program is
1895  //   ill-formed.
1896  //
1897  //     -- for a non-type template-parameter of integral or
1898  //        enumeration type, integral promotions (4.5) and integral
1899  //        conversions (4.7) are applied.
1900  QualType ParamType = InstantiatedParamType;
1901  QualType ArgType = Arg->getType();
1902  if (ParamType->isIntegralType() || ParamType->isEnumeralType()) {
1903    // C++ [temp.arg.nontype]p1:
1904    //   A template-argument for a non-type, non-template
1905    //   template-parameter shall be one of:
1906    //
1907    //     -- an integral constant-expression of integral or enumeration
1908    //        type; or
1909    //     -- the name of a non-type template-parameter; or
1910    SourceLocation NonConstantLoc;
1911    llvm::APSInt Value;
1912    if (!ArgType->isIntegralType() && !ArgType->isEnumeralType()) {
1913      Diag(Arg->getSourceRange().getBegin(),
1914           diag::err_template_arg_not_integral_or_enumeral)
1915        << ArgType << Arg->getSourceRange();
1916      Diag(Param->getLocation(), diag::note_template_param_here);
1917      return true;
1918    } else if (!Arg->isValueDependent() &&
1919               !Arg->isIntegerConstantExpr(Value, Context, &NonConstantLoc)) {
1920      Diag(NonConstantLoc, diag::err_template_arg_not_ice)
1921        << ArgType << Arg->getSourceRange();
1922      return true;
1923    }
1924
1925    // FIXME: We need some way to more easily get the unqualified form
1926    // of the types without going all the way to the
1927    // canonical type.
1928    if (Context.getCanonicalType(ParamType).getCVRQualifiers())
1929      ParamType = Context.getCanonicalType(ParamType).getUnqualifiedType();
1930    if (Context.getCanonicalType(ArgType).getCVRQualifiers())
1931      ArgType = Context.getCanonicalType(ArgType).getUnqualifiedType();
1932
1933    // Try to convert the argument to the parameter's type.
1934    if (ParamType == ArgType) {
1935      // Okay: no conversion necessary
1936    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) ||
1937               !ParamType->isEnumeralType()) {
1938      // This is an integral promotion or conversion.
1939      ImpCastExprToType(Arg, ParamType, CastExpr::CK_IntegralCast);
1940    } else {
1941      // We can't perform this conversion.
1942      Diag(Arg->getSourceRange().getBegin(),
1943           diag::err_template_arg_not_convertible)
1944        << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
1945      Diag(Param->getLocation(), diag::note_template_param_here);
1946      return true;
1947    }
1948
1949    QualType IntegerType = Context.getCanonicalType(ParamType);
1950    if (const EnumType *Enum = IntegerType->getAs<EnumType>())
1951      IntegerType = Context.getCanonicalType(Enum->getDecl()->getIntegerType());
1952
1953    if (!Arg->isValueDependent()) {
1954      // Check that an unsigned parameter does not receive a negative
1955      // value.
1956      if (IntegerType->isUnsignedIntegerType()
1957          && (Value.isSigned() && Value.isNegative())) {
1958        Diag(Arg->getSourceRange().getBegin(), diag::err_template_arg_negative)
1959          << Value.toString(10) << Param->getType()
1960          << Arg->getSourceRange();
1961        Diag(Param->getLocation(), diag::note_template_param_here);
1962        return true;
1963      }
1964
1965      // Check that we don't overflow the template parameter type.
1966      unsigned AllowedBits = Context.getTypeSize(IntegerType);
1967      if (Value.getActiveBits() > AllowedBits) {
1968        Diag(Arg->getSourceRange().getBegin(),
1969             diag::err_template_arg_too_large)
1970          << Value.toString(10) << Param->getType()
1971          << Arg->getSourceRange();
1972        Diag(Param->getLocation(), diag::note_template_param_here);
1973        return true;
1974      }
1975
1976      if (Value.getBitWidth() != AllowedBits)
1977        Value.extOrTrunc(AllowedBits);
1978      Value.setIsSigned(IntegerType->isSignedIntegerType());
1979    }
1980
1981    // Add the value of this argument to the list of converted
1982    // arguments. We use the bitwidth and signedness of the template
1983    // parameter.
1984    if (Arg->isValueDependent()) {
1985      // The argument is value-dependent. Create a new
1986      // TemplateArgument with the converted expression.
1987      Converted = TemplateArgument(Arg);
1988      return false;
1989    }
1990
1991    Converted = TemplateArgument(StartLoc, Value,
1992                                 ParamType->isEnumeralType() ? ParamType
1993                                                             : IntegerType);
1994    return false;
1995  }
1996
1997  // Handle pointer-to-function, reference-to-function, and
1998  // pointer-to-member-function all in (roughly) the same way.
1999  if (// -- For a non-type template-parameter of type pointer to
2000      //    function, only the function-to-pointer conversion (4.3) is
2001      //    applied. If the template-argument represents a set of
2002      //    overloaded functions (or a pointer to such), the matching
2003      //    function is selected from the set (13.4).
2004      // In C++0x, any std::nullptr_t value can be converted.
2005      (ParamType->isPointerType() &&
2006       ParamType->getAs<PointerType>()->getPointeeType()->isFunctionType()) ||
2007      // -- For a non-type template-parameter of type reference to
2008      //    function, no conversions apply. If the template-argument
2009      //    represents a set of overloaded functions, the matching
2010      //    function is selected from the set (13.4).
2011      (ParamType->isReferenceType() &&
2012       ParamType->getAs<ReferenceType>()->getPointeeType()->isFunctionType()) ||
2013      // -- For a non-type template-parameter of type pointer to
2014      //    member function, no conversions apply. If the
2015      //    template-argument represents a set of overloaded member
2016      //    functions, the matching member function is selected from
2017      //    the set (13.4).
2018      // Again, C++0x allows a std::nullptr_t value.
2019      (ParamType->isMemberPointerType() &&
2020       ParamType->getAs<MemberPointerType>()->getPointeeType()
2021         ->isFunctionType())) {
2022    if (Context.hasSameUnqualifiedType(ArgType,
2023                                       ParamType.getNonReferenceType())) {
2024      // We don't have to do anything: the types already match.
2025    } else if (ArgType->isNullPtrType() && (ParamType->isPointerType() ||
2026                 ParamType->isMemberPointerType())) {
2027      ArgType = ParamType;
2028      if (ParamType->isMemberPointerType())
2029        ImpCastExprToType(Arg, ParamType, CastExpr::CK_NullToMemberPointer);
2030      else
2031        ImpCastExprToType(Arg, ParamType, CastExpr::CK_BitCast);
2032    } else if (ArgType->isFunctionType() && ParamType->isPointerType()) {
2033      ArgType = Context.getPointerType(ArgType);
2034      ImpCastExprToType(Arg, ArgType, CastExpr::CK_FunctionToPointerDecay);
2035    } else if (FunctionDecl *Fn
2036                 = ResolveAddressOfOverloadedFunction(Arg, ParamType, true)) {
2037      if (DiagnoseUseOfDecl(Fn, Arg->getSourceRange().getBegin()))
2038        return true;
2039
2040      FixOverloadedFunctionReference(Arg, Fn);
2041      ArgType = Arg->getType();
2042      if (ArgType->isFunctionType() && ParamType->isPointerType()) {
2043        ArgType = Context.getPointerType(Arg->getType());
2044        ImpCastExprToType(Arg, ArgType, CastExpr::CK_FunctionToPointerDecay);
2045      }
2046    }
2047
2048    if (!Context.hasSameUnqualifiedType(ArgType,
2049                                        ParamType.getNonReferenceType())) {
2050      // We can't perform this conversion.
2051      Diag(Arg->getSourceRange().getBegin(),
2052           diag::err_template_arg_not_convertible)
2053        << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
2054      Diag(Param->getLocation(), diag::note_template_param_here);
2055      return true;
2056    }
2057
2058    if (ParamType->isMemberPointerType()) {
2059      NamedDecl *Member = 0;
2060      if (CheckTemplateArgumentPointerToMember(Arg, Member))
2061        return true;
2062
2063      if (Member)
2064        Member = cast<NamedDecl>(Member->getCanonicalDecl());
2065      Converted = TemplateArgument(StartLoc, Member);
2066      return false;
2067    }
2068
2069    NamedDecl *Entity = 0;
2070    if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
2071      return true;
2072
2073    if (Entity)
2074      Entity = cast<NamedDecl>(Entity->getCanonicalDecl());
2075    Converted = TemplateArgument(StartLoc, Entity);
2076    return false;
2077  }
2078
2079  if (ParamType->isPointerType()) {
2080    //   -- for a non-type template-parameter of type pointer to
2081    //      object, qualification conversions (4.4) and the
2082    //      array-to-pointer conversion (4.2) are applied.
2083    // C++0x also allows a value of std::nullptr_t.
2084    assert(ParamType->getAs<PointerType>()->getPointeeType()->isObjectType() &&
2085           "Only object pointers allowed here");
2086
2087    if (ArgType->isNullPtrType()) {
2088      ArgType = ParamType;
2089      ImpCastExprToType(Arg, ParamType, CastExpr::CK_BitCast);
2090    } else if (ArgType->isArrayType()) {
2091      ArgType = Context.getArrayDecayedType(ArgType);
2092      ImpCastExprToType(Arg, ArgType, CastExpr::CK_ArrayToPointerDecay);
2093    }
2094
2095    if (IsQualificationConversion(ArgType, ParamType)) {
2096      ArgType = ParamType;
2097      ImpCastExprToType(Arg, ParamType, CastExpr::CK_NoOp);
2098    }
2099
2100    if (!Context.hasSameUnqualifiedType(ArgType, ParamType)) {
2101      // We can't perform this conversion.
2102      Diag(Arg->getSourceRange().getBegin(),
2103           diag::err_template_arg_not_convertible)
2104        << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
2105      Diag(Param->getLocation(), diag::note_template_param_here);
2106      return true;
2107    }
2108
2109    NamedDecl *Entity = 0;
2110    if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
2111      return true;
2112
2113    if (Entity)
2114      Entity = cast<NamedDecl>(Entity->getCanonicalDecl());
2115    Converted = TemplateArgument(StartLoc, Entity);
2116    return false;
2117  }
2118
2119  if (const ReferenceType *ParamRefType = ParamType->getAs<ReferenceType>()) {
2120    //   -- For a non-type template-parameter of type reference to
2121    //      object, no conversions apply. The type referred to by the
2122    //      reference may be more cv-qualified than the (otherwise
2123    //      identical) type of the template-argument. The
2124    //      template-parameter is bound directly to the
2125    //      template-argument, which must be an lvalue.
2126    assert(ParamRefType->getPointeeType()->isObjectType() &&
2127           "Only object references allowed here");
2128
2129    if (!Context.hasSameUnqualifiedType(ParamRefType->getPointeeType(), ArgType)) {
2130      Diag(Arg->getSourceRange().getBegin(),
2131           diag::err_template_arg_no_ref_bind)
2132        << InstantiatedParamType << Arg->getType()
2133        << Arg->getSourceRange();
2134      Diag(Param->getLocation(), diag::note_template_param_here);
2135      return true;
2136    }
2137
2138    unsigned ParamQuals
2139      = Context.getCanonicalType(ParamType).getCVRQualifiers();
2140    unsigned ArgQuals = Context.getCanonicalType(ArgType).getCVRQualifiers();
2141
2142    if ((ParamQuals | ArgQuals) != ParamQuals) {
2143      Diag(Arg->getSourceRange().getBegin(),
2144           diag::err_template_arg_ref_bind_ignores_quals)
2145        << InstantiatedParamType << Arg->getType()
2146        << Arg->getSourceRange();
2147      Diag(Param->getLocation(), diag::note_template_param_here);
2148      return true;
2149    }
2150
2151    NamedDecl *Entity = 0;
2152    if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
2153      return true;
2154
2155    Entity = cast<NamedDecl>(Entity->getCanonicalDecl());
2156    Converted = TemplateArgument(StartLoc, Entity);
2157    return false;
2158  }
2159
2160  //     -- For a non-type template-parameter of type pointer to data
2161  //        member, qualification conversions (4.4) are applied.
2162  // C++0x allows std::nullptr_t values.
2163  assert(ParamType->isMemberPointerType() && "Only pointers to members remain");
2164
2165  if (Context.hasSameUnqualifiedType(ParamType, ArgType)) {
2166    // Types match exactly: nothing more to do here.
2167  } else if (ArgType->isNullPtrType()) {
2168    ImpCastExprToType(Arg, ParamType, CastExpr::CK_NullToMemberPointer);
2169  } else if (IsQualificationConversion(ArgType, ParamType)) {
2170    ImpCastExprToType(Arg, ParamType, CastExpr::CK_NoOp);
2171  } else {
2172    // We can't perform this conversion.
2173    Diag(Arg->getSourceRange().getBegin(),
2174         diag::err_template_arg_not_convertible)
2175      << Arg->getType() << InstantiatedParamType << Arg->getSourceRange();
2176    Diag(Param->getLocation(), diag::note_template_param_here);
2177    return true;
2178  }
2179
2180  NamedDecl *Member = 0;
2181  if (CheckTemplateArgumentPointerToMember(Arg, Member))
2182    return true;
2183
2184  if (Member)
2185    Member = cast<NamedDecl>(Member->getCanonicalDecl());
2186  Converted = TemplateArgument(StartLoc, Member);
2187  return false;
2188}
2189
2190/// \brief Check a template argument against its corresponding
2191/// template template parameter.
2192///
2193/// This routine implements the semantics of C++ [temp.arg.template].
2194/// It returns true if an error occurred, and false otherwise.
2195bool Sema::CheckTemplateArgument(TemplateTemplateParmDecl *Param,
2196                                 DeclRefExpr *Arg) {
2197  assert(isa<TemplateDecl>(Arg->getDecl()) && "Only template decls allowed");
2198  TemplateDecl *Template = cast<TemplateDecl>(Arg->getDecl());
2199
2200  // C++ [temp.arg.template]p1:
2201  //   A template-argument for a template template-parameter shall be
2202  //   the name of a class template, expressed as id-expression. Only
2203  //   primary class templates are considered when matching the
2204  //   template template argument with the corresponding parameter;
2205  //   partial specializations are not considered even if their
2206  //   parameter lists match that of the template template parameter.
2207  //
2208  // Note that we also allow template template parameters here, which
2209  // will happen when we are dealing with, e.g., class template
2210  // partial specializations.
2211  if (!isa<ClassTemplateDecl>(Template) &&
2212      !isa<TemplateTemplateParmDecl>(Template)) {
2213    assert(isa<FunctionTemplateDecl>(Template) &&
2214           "Only function templates are possible here");
2215    Diag(Arg->getLocStart(), diag::err_template_arg_not_class_template);
2216    Diag(Template->getLocation(), diag::note_template_arg_refers_here_func)
2217      << Template;
2218  }
2219
2220  return !TemplateParameterListsAreEqual(Template->getTemplateParameters(),
2221                                         Param->getTemplateParameters(),
2222                                         true, true,
2223                                         Arg->getSourceRange().getBegin());
2224}
2225
2226/// \brief Determine whether the given template parameter lists are
2227/// equivalent.
2228///
2229/// \param New  The new template parameter list, typically written in the
2230/// source code as part of a new template declaration.
2231///
2232/// \param Old  The old template parameter list, typically found via
2233/// name lookup of the template declared with this template parameter
2234/// list.
2235///
2236/// \param Complain  If true, this routine will produce a diagnostic if
2237/// the template parameter lists are not equivalent.
2238///
2239/// \param IsTemplateTemplateParm  If true, this routine is being
2240/// called to compare the template parameter lists of a template
2241/// template parameter.
2242///
2243/// \param TemplateArgLoc If this source location is valid, then we
2244/// are actually checking the template parameter list of a template
2245/// argument (New) against the template parameter list of its
2246/// corresponding template template parameter (Old). We produce
2247/// slightly different diagnostics in this scenario.
2248///
2249/// \returns True if the template parameter lists are equal, false
2250/// otherwise.
2251bool
2252Sema::TemplateParameterListsAreEqual(TemplateParameterList *New,
2253                                     TemplateParameterList *Old,
2254                                     bool Complain,
2255                                     bool IsTemplateTemplateParm,
2256                                     SourceLocation TemplateArgLoc) {
2257  if (Old->size() != New->size()) {
2258    if (Complain) {
2259      unsigned NextDiag = diag::err_template_param_list_different_arity;
2260      if (TemplateArgLoc.isValid()) {
2261        Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);
2262        NextDiag = diag::note_template_param_list_different_arity;
2263      }
2264      Diag(New->getTemplateLoc(), NextDiag)
2265          << (New->size() > Old->size())
2266          << IsTemplateTemplateParm
2267          << SourceRange(New->getTemplateLoc(), New->getRAngleLoc());
2268      Diag(Old->getTemplateLoc(), diag::note_template_prev_declaration)
2269        << IsTemplateTemplateParm
2270        << SourceRange(Old->getTemplateLoc(), Old->getRAngleLoc());
2271    }
2272
2273    return false;
2274  }
2275
2276  for (TemplateParameterList::iterator OldParm = Old->begin(),
2277         OldParmEnd = Old->end(), NewParm = New->begin();
2278       OldParm != OldParmEnd; ++OldParm, ++NewParm) {
2279    if ((*OldParm)->getKind() != (*NewParm)->getKind()) {
2280      if (Complain) {
2281        unsigned NextDiag = diag::err_template_param_different_kind;
2282        if (TemplateArgLoc.isValid()) {
2283          Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);
2284          NextDiag = diag::note_template_param_different_kind;
2285        }
2286        Diag((*NewParm)->getLocation(), NextDiag)
2287        << IsTemplateTemplateParm;
2288        Diag((*OldParm)->getLocation(), diag::note_template_prev_declaration)
2289        << IsTemplateTemplateParm;
2290      }
2291      return false;
2292    }
2293
2294    if (isa<TemplateTypeParmDecl>(*OldParm)) {
2295      // Okay; all template type parameters are equivalent (since we
2296      // know we're at the same index).
2297#if 0
2298      // FIXME: Enable this code in debug mode *after* we properly go through
2299      // and "instantiate" the template parameter lists of template template
2300      // parameters. It's only after this instantiation that (1) any dependent
2301      // types within the template parameter list of the template template
2302      // parameter can be checked, and (2) the template type parameter depths
2303      // will match up.
2304      QualType OldParmType
2305        = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*OldParm));
2306      QualType NewParmType
2307        = Context.getTypeDeclType(cast<TemplateTypeParmDecl>(*NewParm));
2308      assert(Context.getCanonicalType(OldParmType) ==
2309             Context.getCanonicalType(NewParmType) &&
2310             "type parameter mismatch?");
2311#endif
2312    } else if (NonTypeTemplateParmDecl *OldNTTP
2313                 = dyn_cast<NonTypeTemplateParmDecl>(*OldParm)) {
2314      // The types of non-type template parameters must agree.
2315      NonTypeTemplateParmDecl *NewNTTP
2316        = cast<NonTypeTemplateParmDecl>(*NewParm);
2317      if (Context.getCanonicalType(OldNTTP->getType()) !=
2318            Context.getCanonicalType(NewNTTP->getType())) {
2319        if (Complain) {
2320          unsigned NextDiag = diag::err_template_nontype_parm_different_type;
2321          if (TemplateArgLoc.isValid()) {
2322            Diag(TemplateArgLoc,
2323                 diag::err_template_arg_template_params_mismatch);
2324            NextDiag = diag::note_template_nontype_parm_different_type;
2325          }
2326          Diag(NewNTTP->getLocation(), NextDiag)
2327            << NewNTTP->getType()
2328            << IsTemplateTemplateParm;
2329          Diag(OldNTTP->getLocation(),
2330               diag::note_template_nontype_parm_prev_declaration)
2331            << OldNTTP->getType();
2332        }
2333        return false;
2334      }
2335    } else {
2336      // The template parameter lists of template template
2337      // parameters must agree.
2338      // FIXME: Could we perform a faster "type" comparison here?
2339      assert(isa<TemplateTemplateParmDecl>(*OldParm) &&
2340             "Only template template parameters handled here");
2341      TemplateTemplateParmDecl *OldTTP
2342        = cast<TemplateTemplateParmDecl>(*OldParm);
2343      TemplateTemplateParmDecl *NewTTP
2344        = cast<TemplateTemplateParmDecl>(*NewParm);
2345      if (!TemplateParameterListsAreEqual(NewTTP->getTemplateParameters(),
2346                                          OldTTP->getTemplateParameters(),
2347                                          Complain,
2348                                          /*IsTemplateTemplateParm=*/true,
2349                                          TemplateArgLoc))
2350        return false;
2351    }
2352  }
2353
2354  return true;
2355}
2356
2357/// \brief Check whether a template can be declared within this scope.
2358///
2359/// If the template declaration is valid in this scope, returns
2360/// false. Otherwise, issues a diagnostic and returns true.
2361bool
2362Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {
2363  // Find the nearest enclosing declaration scope.
2364  while ((S->getFlags() & Scope::DeclScope) == 0 ||
2365         (S->getFlags() & Scope::TemplateParamScope) != 0)
2366    S = S->getParent();
2367
2368  // C++ [temp]p2:
2369  //   A template-declaration can appear only as a namespace scope or
2370  //   class scope declaration.
2371  DeclContext *Ctx = static_cast<DeclContext *>(S->getEntity());
2372  if (Ctx && isa<LinkageSpecDecl>(Ctx) &&
2373      cast<LinkageSpecDecl>(Ctx)->getLanguage() != LinkageSpecDecl::lang_cxx)
2374    return Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage)
2375             << TemplateParams->getSourceRange();
2376
2377  while (Ctx && isa<LinkageSpecDecl>(Ctx))
2378    Ctx = Ctx->getParent();
2379
2380  if (Ctx && (Ctx->isFileContext() || Ctx->isRecord()))
2381    return false;
2382
2383  return Diag(TemplateParams->getTemplateLoc(),
2384              diag::err_template_outside_namespace_or_class_scope)
2385    << TemplateParams->getSourceRange();
2386}
2387
2388/// \brief Determine what kind of template specialization the given declaration
2389/// is.
2390static TemplateSpecializationKind getTemplateSpecializationKind(NamedDecl *D) {
2391  if (!D)
2392    return TSK_Undeclared;
2393
2394  if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D))
2395    return Record->getTemplateSpecializationKind();
2396  if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D))
2397    return Function->getTemplateSpecializationKind();
2398  if (VarDecl *Var = dyn_cast<VarDecl>(D))
2399    return Var->getTemplateSpecializationKind();
2400
2401  return TSK_Undeclared;
2402}
2403
2404/// \brief Check whether a specialization is well-formed in the current
2405/// context.
2406///
2407/// This routine determines whether a template specialization can be declared
2408/// in the current context (C++ [temp.expl.spec]p2).
2409///
2410/// \param S the semantic analysis object for which this check is being
2411/// performed.
2412///
2413/// \param Specialized the entity being specialized or instantiated, which
2414/// may be a kind of template (class template, function template, etc.) or
2415/// a member of a class template (member function, static data member,
2416/// member class).
2417///
2418/// \param PrevDecl the previous declaration of this entity, if any.
2419///
2420/// \param Loc the location of the explicit specialization or instantiation of
2421/// this entity.
2422///
2423/// \param IsPartialSpecialization whether this is a partial specialization of
2424/// a class template.
2425///
2426/// \returns true if there was an error that we cannot recover from, false
2427/// otherwise.
2428static bool CheckTemplateSpecializationScope(Sema &S,
2429                                             NamedDecl *Specialized,
2430                                             NamedDecl *PrevDecl,
2431                                             SourceLocation Loc,
2432                                             bool IsPartialSpecialization) {
2433  // Keep these "kind" numbers in sync with the %select statements in the
2434  // various diagnostics emitted by this routine.
2435  int EntityKind = 0;
2436  bool isTemplateSpecialization = false;
2437  if (isa<ClassTemplateDecl>(Specialized)) {
2438    EntityKind = IsPartialSpecialization? 1 : 0;
2439    isTemplateSpecialization = true;
2440  } else if (isa<FunctionTemplateDecl>(Specialized)) {
2441    EntityKind = 2;
2442    isTemplateSpecialization = true;
2443  } else if (isa<CXXMethodDecl>(Specialized))
2444    EntityKind = 3;
2445  else if (isa<VarDecl>(Specialized))
2446    EntityKind = 4;
2447  else if (isa<RecordDecl>(Specialized))
2448    EntityKind = 5;
2449  else {
2450    S.Diag(Loc, diag::err_template_spec_unknown_kind);
2451    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
2452    return true;
2453  }
2454
2455  // C++ [temp.expl.spec]p2:
2456  //   An explicit specialization shall be declared in the namespace
2457  //   of which the template is a member, or, for member templates, in
2458  //   the namespace of which the enclosing class or enclosing class
2459  //   template is a member. An explicit specialization of a member
2460  //   function, member class or static data member of a class
2461  //   template shall be declared in the namespace of which the class
2462  //   template is a member. Such a declaration may also be a
2463  //   definition. If the declaration is not a definition, the
2464  //   specialization may be defined later in the name- space in which
2465  //   the explicit specialization was declared, or in a namespace
2466  //   that encloses the one in which the explicit specialization was
2467  //   declared.
2468  if (S.CurContext->getLookupContext()->isFunctionOrMethod()) {
2469    S.Diag(Loc, diag::err_template_spec_decl_function_scope)
2470      << Specialized;
2471    return true;
2472  }
2473
2474  if (S.CurContext->isRecord() && !IsPartialSpecialization) {
2475    S.Diag(Loc, diag::err_template_spec_decl_class_scope)
2476      << Specialized;
2477    return true;
2478  }
2479
2480  // C++ [temp.class.spec]p6:
2481  //   A class template partial specialization may be declared or redeclared
2482  //   in any namespace scope in which its definition may be defined (14.5.1
2483  //   and 14.5.2).
2484  bool ComplainedAboutScope = false;
2485  DeclContext *SpecializedContext
2486    = Specialized->getDeclContext()->getEnclosingNamespaceContext();
2487  DeclContext *DC = S.CurContext->getEnclosingNamespaceContext();
2488  if ((!PrevDecl ||
2489       getTemplateSpecializationKind(PrevDecl) == TSK_Undeclared ||
2490       getTemplateSpecializationKind(PrevDecl) == TSK_ImplicitInstantiation)){
2491    // There is no prior declaration of this entity, so this
2492    // specialization must be in the same context as the template
2493    // itself.
2494    if (!DC->Equals(SpecializedContext)) {
2495      if (isa<TranslationUnitDecl>(SpecializedContext))
2496        S.Diag(Loc, diag::err_template_spec_decl_out_of_scope_global)
2497        << EntityKind << Specialized;
2498      else if (isa<NamespaceDecl>(SpecializedContext))
2499        S.Diag(Loc, diag::err_template_spec_decl_out_of_scope)
2500        << EntityKind << Specialized
2501        << cast<NamedDecl>(SpecializedContext);
2502
2503      S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
2504      ComplainedAboutScope = true;
2505    }
2506  }
2507
2508  // Make sure that this redeclaration (or definition) occurs in an enclosing
2509  // namespace.
2510  // Note that HandleDeclarator() performs this check for explicit
2511  // specializations of function templates, static data members, and member
2512  // functions, so we skip the check here for those kinds of entities.
2513  // FIXME: HandleDeclarator's diagnostics aren't quite as good, though.
2514  // Should we refactor that check, so that it occurs later?
2515  if (!ComplainedAboutScope && !DC->Encloses(SpecializedContext) &&
2516      !(isa<FunctionTemplateDecl>(Specialized) || isa<VarDecl>(Specialized) ||
2517        isa<FunctionDecl>(Specialized))) {
2518    if (isa<TranslationUnitDecl>(SpecializedContext))
2519      S.Diag(Loc, diag::err_template_spec_redecl_global_scope)
2520        << EntityKind << Specialized;
2521    else if (isa<NamespaceDecl>(SpecializedContext))
2522      S.Diag(Loc, diag::err_template_spec_redecl_out_of_scope)
2523        << EntityKind << Specialized
2524        << cast<NamedDecl>(SpecializedContext);
2525
2526    S.Diag(Specialized->getLocation(), diag::note_specialized_entity);
2527  }
2528
2529  // FIXME: check for specialization-after-instantiation errors and such.
2530
2531  return false;
2532}
2533
2534/// \brief Check the non-type template arguments of a class template
2535/// partial specialization according to C++ [temp.class.spec]p9.
2536///
2537/// \param TemplateParams the template parameters of the primary class
2538/// template.
2539///
2540/// \param TemplateArg the template arguments of the class template
2541/// partial specialization.
2542///
2543/// \param MirrorsPrimaryTemplate will be set true if the class
2544/// template partial specialization arguments are identical to the
2545/// implicit template arguments of the primary template. This is not
2546/// necessarily an error (C++0x), and it is left to the caller to diagnose
2547/// this condition when it is an error.
2548///
2549/// \returns true if there was an error, false otherwise.
2550bool Sema::CheckClassTemplatePartialSpecializationArgs(
2551                                        TemplateParameterList *TemplateParams,
2552                             const TemplateArgumentListBuilder &TemplateArgs,
2553                                        bool &MirrorsPrimaryTemplate) {
2554  // FIXME: the interface to this function will have to change to
2555  // accommodate variadic templates.
2556  MirrorsPrimaryTemplate = true;
2557
2558  const TemplateArgument *ArgList = TemplateArgs.getFlatArguments();
2559
2560  for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {
2561    // Determine whether the template argument list of the partial
2562    // specialization is identical to the implicit argument list of
2563    // the primary template. The caller may need to diagnostic this as
2564    // an error per C++ [temp.class.spec]p9b3.
2565    if (MirrorsPrimaryTemplate) {
2566      if (TemplateTypeParmDecl *TTP
2567            = dyn_cast<TemplateTypeParmDecl>(TemplateParams->getParam(I))) {
2568        if (Context.getCanonicalType(Context.getTypeDeclType(TTP)) !=
2569              Context.getCanonicalType(ArgList[I].getAsType()))
2570          MirrorsPrimaryTemplate = false;
2571      } else if (TemplateTemplateParmDecl *TTP
2572                   = dyn_cast<TemplateTemplateParmDecl>(
2573                                                 TemplateParams->getParam(I))) {
2574        // FIXME: We should settle on either Declaration storage or
2575        // Expression storage for template template parameters.
2576        TemplateTemplateParmDecl *ArgDecl
2577          = dyn_cast_or_null<TemplateTemplateParmDecl>(
2578                                                  ArgList[I].getAsDecl());
2579        if (!ArgDecl)
2580          if (DeclRefExpr *DRE
2581                = dyn_cast_or_null<DeclRefExpr>(ArgList[I].getAsExpr()))
2582            ArgDecl = dyn_cast<TemplateTemplateParmDecl>(DRE->getDecl());
2583
2584        if (!ArgDecl ||
2585            ArgDecl->getIndex() != TTP->getIndex() ||
2586            ArgDecl->getDepth() != TTP->getDepth())
2587          MirrorsPrimaryTemplate = false;
2588      }
2589    }
2590
2591    NonTypeTemplateParmDecl *Param
2592      = dyn_cast<NonTypeTemplateParmDecl>(TemplateParams->getParam(I));
2593    if (!Param) {
2594      continue;
2595    }
2596
2597    Expr *ArgExpr = ArgList[I].getAsExpr();
2598    if (!ArgExpr) {
2599      MirrorsPrimaryTemplate = false;
2600      continue;
2601    }
2602
2603    // C++ [temp.class.spec]p8:
2604    //   A non-type argument is non-specialized if it is the name of a
2605    //   non-type parameter. All other non-type arguments are
2606    //   specialized.
2607    //
2608    // Below, we check the two conditions that only apply to
2609    // specialized non-type arguments, so skip any non-specialized
2610    // arguments.
2611    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ArgExpr))
2612      if (NonTypeTemplateParmDecl *NTTP
2613            = dyn_cast<NonTypeTemplateParmDecl>(DRE->getDecl())) {
2614        if (MirrorsPrimaryTemplate &&
2615            (Param->getIndex() != NTTP->getIndex() ||
2616             Param->getDepth() != NTTP->getDepth()))
2617          MirrorsPrimaryTemplate = false;
2618
2619        continue;
2620      }
2621
2622    // C++ [temp.class.spec]p9:
2623    //   Within the argument list of a class template partial
2624    //   specialization, the following restrictions apply:
2625    //     -- A partially specialized non-type argument expression
2626    //        shall not involve a template parameter of the partial
2627    //        specialization except when the argument expression is a
2628    //        simple identifier.
2629    if (ArgExpr->isTypeDependent() || ArgExpr->isValueDependent()) {
2630      Diag(ArgExpr->getLocStart(),
2631           diag::err_dependent_non_type_arg_in_partial_spec)
2632        << ArgExpr->getSourceRange();
2633      return true;
2634    }
2635
2636    //     -- The type of a template parameter corresponding to a
2637    //        specialized non-type argument shall not be dependent on a
2638    //        parameter of the specialization.
2639    if (Param->getType()->isDependentType()) {
2640      Diag(ArgExpr->getLocStart(),
2641           diag::err_dependent_typed_non_type_arg_in_partial_spec)
2642        << Param->getType()
2643        << ArgExpr->getSourceRange();
2644      Diag(Param->getLocation(), diag::note_template_param_here);
2645      return true;
2646    }
2647
2648    MirrorsPrimaryTemplate = false;
2649  }
2650
2651  return false;
2652}
2653
2654Sema::DeclResult
2655Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec,
2656                                       TagUseKind TUK,
2657                                       SourceLocation KWLoc,
2658                                       const CXXScopeSpec &SS,
2659                                       TemplateTy TemplateD,
2660                                       SourceLocation TemplateNameLoc,
2661                                       SourceLocation LAngleLoc,
2662                                       ASTTemplateArgsPtr TemplateArgsIn,
2663                                       SourceLocation *TemplateArgLocs,
2664                                       SourceLocation RAngleLoc,
2665                                       AttributeList *Attr,
2666                               MultiTemplateParamsArg TemplateParameterLists) {
2667  assert(TUK != TUK_Reference && "References are not specializations");
2668
2669  // Find the class template we're specializing
2670  TemplateName Name = TemplateD.getAsVal<TemplateName>();
2671  ClassTemplateDecl *ClassTemplate
2672    = cast<ClassTemplateDecl>(Name.getAsTemplateDecl());
2673
2674  bool isExplicitSpecialization = false;
2675  bool isPartialSpecialization = false;
2676
2677  // Check the validity of the template headers that introduce this
2678  // template.
2679  // FIXME: We probably shouldn't complain about these headers for
2680  // friend declarations.
2681  TemplateParameterList *TemplateParams
2682    = MatchTemplateParametersToScopeSpecifier(TemplateNameLoc, SS,
2683                        (TemplateParameterList**)TemplateParameterLists.get(),
2684                                              TemplateParameterLists.size(),
2685                                              isExplicitSpecialization);
2686  if (TemplateParams && TemplateParams->size() > 0) {
2687    isPartialSpecialization = true;
2688
2689    // C++ [temp.class.spec]p10:
2690    //   The template parameter list of a specialization shall not
2691    //   contain default template argument values.
2692    for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {
2693      Decl *Param = TemplateParams->getParam(I);
2694      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param)) {
2695        if (TTP->hasDefaultArgument()) {
2696          Diag(TTP->getDefaultArgumentLoc(),
2697               diag::err_default_arg_in_partial_spec);
2698          TTP->setDefaultArgument(QualType(), SourceLocation(), false);
2699        }
2700      } else if (NonTypeTemplateParmDecl *NTTP
2701                   = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
2702        if (Expr *DefArg = NTTP->getDefaultArgument()) {
2703          Diag(NTTP->getDefaultArgumentLoc(),
2704               diag::err_default_arg_in_partial_spec)
2705            << DefArg->getSourceRange();
2706          NTTP->setDefaultArgument(0);
2707          DefArg->Destroy(Context);
2708        }
2709      } else {
2710        TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(Param);
2711        if (Expr *DefArg = TTP->getDefaultArgument()) {
2712          Diag(TTP->getDefaultArgumentLoc(),
2713               diag::err_default_arg_in_partial_spec)
2714            << DefArg->getSourceRange();
2715          TTP->setDefaultArgument(0);
2716          DefArg->Destroy(Context);
2717        }
2718      }
2719    }
2720  } else if (TemplateParams) {
2721    if (TUK == TUK_Friend)
2722      Diag(KWLoc, diag::err_template_spec_friend)
2723        << CodeModificationHint::CreateRemoval(
2724                                SourceRange(TemplateParams->getTemplateLoc(),
2725                                            TemplateParams->getRAngleLoc()))
2726        << SourceRange(LAngleLoc, RAngleLoc);
2727    else
2728      isExplicitSpecialization = true;
2729  } else if (TUK != TUK_Friend) {
2730    Diag(KWLoc, diag::err_template_spec_needs_header)
2731      << CodeModificationHint::CreateInsertion(KWLoc, "template<> ");
2732    isExplicitSpecialization = true;
2733  }
2734
2735  // Check that the specialization uses the same tag kind as the
2736  // original template.
2737  TagDecl::TagKind Kind;
2738  switch (TagSpec) {
2739  default: assert(0 && "Unknown tag type!");
2740  case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break;
2741  case DeclSpec::TST_union:  Kind = TagDecl::TK_union; break;
2742  case DeclSpec::TST_class:  Kind = TagDecl::TK_class; break;
2743  }
2744  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(),
2745                                    Kind, KWLoc,
2746                                    *ClassTemplate->getIdentifier())) {
2747    Diag(KWLoc, diag::err_use_with_wrong_tag)
2748      << ClassTemplate
2749      << CodeModificationHint::CreateReplacement(KWLoc,
2750                            ClassTemplate->getTemplatedDecl()->getKindName());
2751    Diag(ClassTemplate->getTemplatedDecl()->getLocation(),
2752         diag::note_previous_use);
2753    Kind = ClassTemplate->getTemplatedDecl()->getTagKind();
2754  }
2755
2756  // Translate the parser's template argument list in our AST format.
2757  llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
2758  translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
2759
2760  // Check that the template argument list is well-formed for this
2761  // template.
2762  TemplateArgumentListBuilder Converted(ClassTemplate->getTemplateParameters(),
2763                                        TemplateArgs.size());
2764  if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc,
2765                                TemplateArgs.data(), TemplateArgs.size(),
2766                                RAngleLoc, false, Converted))
2767    return true;
2768
2769  assert((Converted.structuredSize() ==
2770            ClassTemplate->getTemplateParameters()->size()) &&
2771         "Converted template argument list is too short!");
2772
2773  // Find the class template (partial) specialization declaration that
2774  // corresponds to these arguments.
2775  llvm::FoldingSetNodeID ID;
2776  if (isPartialSpecialization) {
2777    bool MirrorsPrimaryTemplate;
2778    if (CheckClassTemplatePartialSpecializationArgs(
2779                                         ClassTemplate->getTemplateParameters(),
2780                                         Converted, MirrorsPrimaryTemplate))
2781      return true;
2782
2783    if (MirrorsPrimaryTemplate) {
2784      // C++ [temp.class.spec]p9b3:
2785      //
2786      //   -- The argument list of the specialization shall not be identical
2787      //      to the implicit argument list of the primary template.
2788      Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template)
2789        << (TUK == TUK_Definition)
2790        << CodeModificationHint::CreateRemoval(SourceRange(LAngleLoc,
2791                                                           RAngleLoc));
2792      return CheckClassTemplate(S, TagSpec, TUK, KWLoc, SS,
2793                                ClassTemplate->getIdentifier(),
2794                                TemplateNameLoc,
2795                                Attr,
2796                                TemplateParams,
2797                                AS_none);
2798    }
2799
2800    // FIXME: Diagnose friend partial specializations
2801
2802    // FIXME: Template parameter list matters, too
2803    ClassTemplatePartialSpecializationDecl::Profile(ID,
2804                                                   Converted.getFlatArguments(),
2805                                                   Converted.flatSize(),
2806                                                    Context);
2807  } else
2808    ClassTemplateSpecializationDecl::Profile(ID,
2809                                             Converted.getFlatArguments(),
2810                                             Converted.flatSize(),
2811                                             Context);
2812  void *InsertPos = 0;
2813  ClassTemplateSpecializationDecl *PrevDecl = 0;
2814
2815  if (isPartialSpecialization)
2816    PrevDecl
2817      = ClassTemplate->getPartialSpecializations().FindNodeOrInsertPos(ID,
2818                                                                    InsertPos);
2819  else
2820    PrevDecl
2821      = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
2822
2823  ClassTemplateSpecializationDecl *Specialization = 0;
2824
2825  // Check whether we can declare a class template specialization in
2826  // the current scope.
2827  if (TUK != TUK_Friend &&
2828      CheckTemplateSpecializationScope(*this, ClassTemplate, PrevDecl,
2829                                       TemplateNameLoc,
2830                                       isPartialSpecialization))
2831    return true;
2832
2833  // The canonical type
2834  QualType CanonType;
2835  if (PrevDecl &&
2836      (PrevDecl->getSpecializationKind() == TSK_Undeclared ||
2837       TUK == TUK_Friend)) {
2838    // Since the only prior class template specialization with these
2839    // arguments was referenced but not declared, or we're only
2840    // referencing this specialization as a friend, reuse that
2841    // declaration node as our own, updating its source location to
2842    // reflect our new declaration.
2843    Specialization = PrevDecl;
2844    Specialization->setLocation(TemplateNameLoc);
2845    PrevDecl = 0;
2846    CanonType = Context.getTypeDeclType(Specialization);
2847  } else if (isPartialSpecialization) {
2848    // Build the canonical type that describes the converted template
2849    // arguments of the class template partial specialization.
2850    CanonType = Context.getTemplateSpecializationType(
2851                                                  TemplateName(ClassTemplate),
2852                                                  Converted.getFlatArguments(),
2853                                                  Converted.flatSize());
2854
2855    // Create a new class template partial specialization declaration node.
2856    TemplateParameterList *TemplateParams
2857      = static_cast<TemplateParameterList*>(*TemplateParameterLists.get());
2858    ClassTemplatePartialSpecializationDecl *PrevPartial
2859      = cast_or_null<ClassTemplatePartialSpecializationDecl>(PrevDecl);
2860    ClassTemplatePartialSpecializationDecl *Partial
2861      = ClassTemplatePartialSpecializationDecl::Create(Context,
2862                                             ClassTemplate->getDeclContext(),
2863                                                       TemplateNameLoc,
2864                                                       TemplateParams,
2865                                                       ClassTemplate,
2866                                                       Converted,
2867                                                       PrevPartial);
2868
2869    if (PrevPartial) {
2870      ClassTemplate->getPartialSpecializations().RemoveNode(PrevPartial);
2871      ClassTemplate->getPartialSpecializations().GetOrInsertNode(Partial);
2872    } else {
2873      ClassTemplate->getPartialSpecializations().InsertNode(Partial, InsertPos);
2874    }
2875    Specialization = Partial;
2876
2877    // Check that all of the template parameters of the class template
2878    // partial specialization are deducible from the template
2879    // arguments. If not, this class template partial specialization
2880    // will never be used.
2881    llvm::SmallVector<bool, 8> DeducibleParams;
2882    DeducibleParams.resize(TemplateParams->size());
2883    MarkUsedTemplateParameters(Partial->getTemplateArgs(), true,
2884                               DeducibleParams);
2885    unsigned NumNonDeducible = 0;
2886    for (unsigned I = 0, N = DeducibleParams.size(); I != N; ++I)
2887      if (!DeducibleParams[I])
2888        ++NumNonDeducible;
2889
2890    if (NumNonDeducible) {
2891      Diag(TemplateNameLoc, diag::warn_partial_specs_not_deducible)
2892        << (NumNonDeducible > 1)
2893        << SourceRange(TemplateNameLoc, RAngleLoc);
2894      for (unsigned I = 0, N = DeducibleParams.size(); I != N; ++I) {
2895        if (!DeducibleParams[I]) {
2896          NamedDecl *Param = cast<NamedDecl>(TemplateParams->getParam(I));
2897          if (Param->getDeclName())
2898            Diag(Param->getLocation(),
2899                 diag::note_partial_spec_unused_parameter)
2900              << Param->getDeclName();
2901          else
2902            Diag(Param->getLocation(),
2903                 diag::note_partial_spec_unused_parameter)
2904              << std::string("<anonymous>");
2905        }
2906      }
2907    }
2908  } else {
2909    // Create a new class template specialization declaration node for
2910    // this explicit specialization or friend declaration.
2911    Specialization
2912      = ClassTemplateSpecializationDecl::Create(Context,
2913                                             ClassTemplate->getDeclContext(),
2914                                                TemplateNameLoc,
2915                                                ClassTemplate,
2916                                                Converted,
2917                                                PrevDecl);
2918
2919    if (PrevDecl) {
2920      ClassTemplate->getSpecializations().RemoveNode(PrevDecl);
2921      ClassTemplate->getSpecializations().GetOrInsertNode(Specialization);
2922    } else {
2923      ClassTemplate->getSpecializations().InsertNode(Specialization,
2924                                                     InsertPos);
2925    }
2926
2927    CanonType = Context.getTypeDeclType(Specialization);
2928  }
2929
2930  // C++ [temp.expl.spec]p6:
2931  //   If a template, a member template or the member of a class template is
2932  //   explicitly specialized then that specialization shall be declared
2933  //   before the first use of that specialization that would cause an implicit
2934  //   instantiation to take place, in every translation unit in which such a
2935  //   use occurs; no diagnostic is required.
2936  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {
2937    SourceRange Range(TemplateNameLoc, RAngleLoc);
2938    Diag(TemplateNameLoc, diag::err_specialization_after_instantiation)
2939      << Context.getTypeDeclType(Specialization) << Range;
2940
2941    Diag(PrevDecl->getPointOfInstantiation(),
2942         diag::note_instantiation_required_here)
2943      << (PrevDecl->getTemplateSpecializationKind()
2944                                                != TSK_ImplicitInstantiation);
2945    return true;
2946  }
2947
2948  // If this is not a friend, note that this is an explicit specialization.
2949  if (TUK != TUK_Friend)
2950    Specialization->setSpecializationKind(TSK_ExplicitSpecialization);
2951
2952  // Check that this isn't a redefinition of this specialization.
2953  if (TUK == TUK_Definition) {
2954    if (RecordDecl *Def = Specialization->getDefinition(Context)) {
2955      SourceRange Range(TemplateNameLoc, RAngleLoc);
2956      Diag(TemplateNameLoc, diag::err_redefinition)
2957        << Context.getTypeDeclType(Specialization) << Range;
2958      Diag(Def->getLocation(), diag::note_previous_definition);
2959      Specialization->setInvalidDecl();
2960      return true;
2961    }
2962  }
2963
2964  // Build the fully-sugared type for this class template
2965  // specialization as the user wrote in the specialization
2966  // itself. This means that we'll pretty-print the type retrieved
2967  // from the specialization's declaration the way that the user
2968  // actually wrote the specialization, rather than formatting the
2969  // name based on the "canonical" representation used to store the
2970  // template arguments in the specialization.
2971  QualType WrittenTy
2972    = Context.getTemplateSpecializationType(Name,
2973                                            TemplateArgs.data(),
2974                                            TemplateArgs.size(),
2975                                            CanonType);
2976  if (TUK != TUK_Friend)
2977    Specialization->setTypeAsWritten(WrittenTy);
2978  TemplateArgsIn.release();
2979
2980  // C++ [temp.expl.spec]p9:
2981  //   A template explicit specialization is in the scope of the
2982  //   namespace in which the template was defined.
2983  //
2984  // We actually implement this paragraph where we set the semantic
2985  // context (in the creation of the ClassTemplateSpecializationDecl),
2986  // but we also maintain the lexical context where the actual
2987  // definition occurs.
2988  Specialization->setLexicalDeclContext(CurContext);
2989
2990  // We may be starting the definition of this specialization.
2991  if (TUK == TUK_Definition)
2992    Specialization->startDefinition();
2993
2994  if (TUK == TUK_Friend) {
2995    FriendDecl *Friend = FriendDecl::Create(Context, CurContext,
2996                                            TemplateNameLoc,
2997                                            WrittenTy.getTypePtr(),
2998                                            /*FIXME:*/KWLoc);
2999    Friend->setAccess(AS_public);
3000    CurContext->addDecl(Friend);
3001  } else {
3002    // Add the specialization into its lexical context, so that it can
3003    // be seen when iterating through the list of declarations in that
3004    // context. However, specializations are not found by name lookup.
3005    CurContext->addDecl(Specialization);
3006  }
3007  return DeclPtrTy::make(Specialization);
3008}
3009
3010Sema::DeclPtrTy
3011Sema::ActOnTemplateDeclarator(Scope *S,
3012                              MultiTemplateParamsArg TemplateParameterLists,
3013                              Declarator &D) {
3014  return HandleDeclarator(S, D, move(TemplateParameterLists), false);
3015}
3016
3017Sema::DeclPtrTy
3018Sema::ActOnStartOfFunctionTemplateDef(Scope *FnBodyScope,
3019                               MultiTemplateParamsArg TemplateParameterLists,
3020                                      Declarator &D) {
3021  assert(getCurFunctionDecl() == 0 && "Function parsing confused");
3022  assert(D.getTypeObject(0).Kind == DeclaratorChunk::Function &&
3023         "Not a function declarator!");
3024  DeclaratorChunk::FunctionTypeInfo &FTI = D.getTypeObject(0).Fun;
3025
3026  if (FTI.hasPrototype) {
3027    // FIXME: Diagnose arguments without names in C.
3028  }
3029
3030  Scope *ParentScope = FnBodyScope->getParent();
3031
3032  DeclPtrTy DP = HandleDeclarator(ParentScope, D,
3033                                  move(TemplateParameterLists),
3034                                  /*IsFunctionDefinition=*/true);
3035  if (FunctionTemplateDecl *FunctionTemplate
3036        = dyn_cast_or_null<FunctionTemplateDecl>(DP.getAs<Decl>()))
3037    return ActOnStartOfFunctionDef(FnBodyScope,
3038                      DeclPtrTy::make(FunctionTemplate->getTemplatedDecl()));
3039  if (FunctionDecl *Function = dyn_cast_or_null<FunctionDecl>(DP.getAs<Decl>()))
3040    return ActOnStartOfFunctionDef(FnBodyScope, DeclPtrTy::make(Function));
3041  return DeclPtrTy();
3042}
3043
3044/// \brief Diagnose cases where we have an explicit template specialization
3045/// before/after an explicit template instantiation, producing diagnostics
3046/// for those cases where they are required and determining whether the
3047/// new specialization/instantiation will have any effect.
3048///
3049/// \param S the semantic analysis object.
3050///
3051/// \param NewLoc the location of the new explicit specialization or
3052/// instantiation.
3053///
3054/// \param NewTSK the kind of the new explicit specialization or instantiation.
3055///
3056/// \param PrevDecl the previous declaration of the entity.
3057///
3058/// \param PrevTSK the kind of the old explicit specialization or instantiatin.
3059///
3060/// \param PrevPointOfInstantiation if valid, indicates where the previus
3061/// declaration was instantiated (either implicitly or explicitly).
3062///
3063/// \param SuppressNew will be set to true to indicate that the new
3064/// specialization or instantiation has no effect and should be ignored.
3065///
3066/// \returns true if there was an error that should prevent the introduction of
3067/// the new declaration into the AST, false otherwise.
3068static bool
3069CheckSpecializationInstantiationRedecl(Sema &S,
3070                                       SourceLocation NewLoc,
3071                                       TemplateSpecializationKind NewTSK,
3072                                       NamedDecl *PrevDecl,
3073                                       TemplateSpecializationKind PrevTSK,
3074                                       SourceLocation PrevPointOfInstantiation,
3075                                       bool &SuppressNew) {
3076  SuppressNew = false;
3077
3078  switch (NewTSK) {
3079  case TSK_Undeclared:
3080  case TSK_ImplicitInstantiation:
3081    assert(false && "Don't check implicit instantiations here");
3082    return false;
3083
3084  case TSK_ExplicitSpecialization:
3085    switch (PrevTSK) {
3086    case TSK_Undeclared:
3087    case TSK_ExplicitSpecialization:
3088      // Okay, we're just specializing something that is either already
3089      // explicitly specialized or has merely been mentioned without any
3090      // instantiation.
3091      return false;
3092
3093    case TSK_ImplicitInstantiation:
3094      if (PrevPointOfInstantiation.isInvalid()) {
3095        // The declaration itself has not actually been instantiated, so it is
3096        // still okay to specialize it.
3097        return false;
3098      }
3099      // Fall through
3100
3101    case TSK_ExplicitInstantiationDeclaration:
3102    case TSK_ExplicitInstantiationDefinition:
3103      assert((PrevTSK == TSK_ImplicitInstantiation ||
3104              PrevPointOfInstantiation.isValid()) &&
3105             "Explicit instantiation without point of instantiation?");
3106
3107      // C++ [temp.expl.spec]p6:
3108      //   If a template, a member template or the member of a class template
3109      //   is explicitly specialized then that specialization shall be declared
3110      //   before the first use of that specialization that would cause an
3111      //   implicit instantiation to take place, in every translation unit in
3112      //   which such a use occurs; no diagnostic is required.
3113      S.Diag(NewLoc, diag::err_specialization_after_instantiation)
3114        << PrevDecl;
3115      S.Diag(PrevPointOfInstantiation, diag::note_instantiation_required_here)
3116        << (PrevTSK != TSK_ImplicitInstantiation);
3117
3118      return true;
3119    }
3120    break;
3121
3122  case TSK_ExplicitInstantiationDeclaration:
3123    switch (PrevTSK) {
3124    case TSK_ExplicitInstantiationDeclaration:
3125      // This explicit instantiation declaration is redundant (that's okay).
3126      SuppressNew = true;
3127      return false;
3128
3129    case TSK_Undeclared:
3130    case TSK_ImplicitInstantiation:
3131      // We're explicitly instantiating something that may have already been
3132      // implicitly instantiated; that's fine.
3133      return false;
3134
3135    case TSK_ExplicitSpecialization:
3136      // C++0x [temp.explicit]p4:
3137      //   For a given set of template parameters, if an explicit instantiation
3138      //   of a template appears after a declaration of an explicit
3139      //   specialization for that template, the explicit instantiation has no
3140      //   effect.
3141      return false;
3142
3143    case TSK_ExplicitInstantiationDefinition:
3144      // C++0x [temp.explicit]p10:
3145      //   If an entity is the subject of both an explicit instantiation
3146      //   declaration and an explicit instantiation definition in the same
3147      //   translation unit, the definition shall follow the declaration.
3148      S.Diag(NewLoc,
3149             diag::err_explicit_instantiation_declaration_after_definition);
3150      S.Diag(PrevPointOfInstantiation,
3151             diag::note_explicit_instantiation_definition_here);
3152      assert(PrevPointOfInstantiation.isValid() &&
3153             "Explicit instantiation without point of instantiation?");
3154      SuppressNew = true;
3155      return false;
3156    }
3157    break;
3158
3159  case TSK_ExplicitInstantiationDefinition:
3160    switch (PrevTSK) {
3161    case TSK_Undeclared:
3162    case TSK_ImplicitInstantiation:
3163      // We're explicitly instantiating something that may have already been
3164      // implicitly instantiated; that's fine.
3165      return false;
3166
3167    case TSK_ExplicitSpecialization:
3168      // C++ DR 259, C++0x [temp.explicit]p4:
3169      //   For a given set of template parameters, if an explicit
3170      //   instantiation of a template appears after a declaration of
3171      //   an explicit specialization for that template, the explicit
3172      //   instantiation has no effect.
3173      //
3174      // In C++98/03 mode, we only give an extension warning here, because it
3175      // is not not harmful to try to explicitly instantiate something that
3176      // has been explicitly specialized.
3177      if (!S.getLangOptions().CPlusPlus0x) {
3178        S.Diag(NewLoc, diag::ext_explicit_instantiation_after_specialization)
3179          << PrevDecl;
3180        S.Diag(PrevDecl->getLocation(),
3181             diag::note_previous_template_specialization);
3182      }
3183      SuppressNew = true;
3184      return false;
3185
3186    case TSK_ExplicitInstantiationDeclaration:
3187      // We're explicity instantiating a definition for something for which we
3188      // were previously asked to suppress instantiations. That's fine.
3189      return false;
3190
3191    case TSK_ExplicitInstantiationDefinition:
3192      // C++0x [temp.spec]p5:
3193      //   For a given template and a given set of template-arguments,
3194      //     - an explicit instantiation definition shall appear at most once
3195      //       in a program,
3196      S.Diag(NewLoc, diag::err_explicit_instantiation_duplicate)
3197        << PrevDecl;
3198      S.Diag(PrevPointOfInstantiation,
3199             diag::note_previous_explicit_instantiation);
3200      SuppressNew = true;
3201      return false;
3202    }
3203    break;
3204  }
3205
3206  assert(false && "Missing specialization/instantiation case?");
3207
3208  return false;
3209}
3210
3211/// \brief Perform semantic analysis for the given function template
3212/// specialization.
3213///
3214/// This routine performs all of the semantic analysis required for an
3215/// explicit function template specialization. On successful completion,
3216/// the function declaration \p FD will become a function template
3217/// specialization.
3218///
3219/// \param FD the function declaration, which will be updated to become a
3220/// function template specialization.
3221///
3222/// \param HasExplicitTemplateArgs whether any template arguments were
3223/// explicitly provided.
3224///
3225/// \param LAngleLoc the location of the left angle bracket ('<'), if
3226/// template arguments were explicitly provided.
3227///
3228/// \param ExplicitTemplateArgs the explicitly-provided template arguments,
3229/// if any.
3230///
3231/// \param NumExplicitTemplateArgs the number of explicitly-provided template
3232/// arguments. This number may be zero even when HasExplicitTemplateArgs is
3233/// true as in, e.g., \c void sort<>(char*, char*);
3234///
3235/// \param RAngleLoc the location of the right angle bracket ('>'), if
3236/// template arguments were explicitly provided.
3237///
3238/// \param PrevDecl the set of declarations that
3239bool
3240Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD,
3241                                          bool HasExplicitTemplateArgs,
3242                                          SourceLocation LAngleLoc,
3243                              const TemplateArgument *ExplicitTemplateArgs,
3244                                          unsigned NumExplicitTemplateArgs,
3245                                          SourceLocation RAngleLoc,
3246                                          NamedDecl *&PrevDecl) {
3247  // The set of function template specializations that could match this
3248  // explicit function template specialization.
3249  typedef llvm::SmallVector<FunctionDecl *, 8> CandidateSet;
3250  CandidateSet Candidates;
3251
3252  DeclContext *FDLookupContext = FD->getDeclContext()->getLookupContext();
3253  for (OverloadIterator Ovl(PrevDecl), OvlEnd; Ovl != OvlEnd; ++Ovl) {
3254    if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(*Ovl)) {
3255      // Only consider templates found within the same semantic lookup scope as
3256      // FD.
3257      if (!FDLookupContext->Equals(Ovl->getDeclContext()->getLookupContext()))
3258        continue;
3259
3260      // C++ [temp.expl.spec]p11:
3261      //   A trailing template-argument can be left unspecified in the
3262      //   template-id naming an explicit function template specialization
3263      //   provided it can be deduced from the function argument type.
3264      // Perform template argument deduction to determine whether we may be
3265      // specializing this template.
3266      // FIXME: It is somewhat wasteful to build
3267      TemplateDeductionInfo Info(Context);
3268      FunctionDecl *Specialization = 0;
3269      if (TemplateDeductionResult TDK
3270            = DeduceTemplateArguments(FunTmpl, HasExplicitTemplateArgs,
3271                                      ExplicitTemplateArgs,
3272                                      NumExplicitTemplateArgs,
3273                                      FD->getType(),
3274                                      Specialization,
3275                                      Info)) {
3276        // FIXME: Template argument deduction failed; record why it failed, so
3277        // that we can provide nifty diagnostics.
3278        (void)TDK;
3279        continue;
3280      }
3281
3282      // Record this candidate.
3283      Candidates.push_back(Specialization);
3284    }
3285  }
3286
3287  // Find the most specialized function template.
3288  FunctionDecl *Specialization = getMostSpecialized(Candidates.data(),
3289                                                    Candidates.size(),
3290                                                    TPOC_Other,
3291                                                    FD->getLocation(),
3292                  PartialDiagnostic(diag::err_function_template_spec_no_match)
3293                    << FD->getDeclName(),
3294                  PartialDiagnostic(diag::err_function_template_spec_ambiguous)
3295                    << FD->getDeclName() << HasExplicitTemplateArgs,
3296                  PartialDiagnostic(diag::note_function_template_spec_matched));
3297  if (!Specialization)
3298    return true;
3299
3300  // FIXME: Check if the prior specialization has a point of instantiation.
3301  // If so, we have run afoul of .
3302
3303  // Check the scope of this explicit specialization.
3304  if (CheckTemplateSpecializationScope(*this,
3305                                       Specialization->getPrimaryTemplate(),
3306                                       Specialization, FD->getLocation(),
3307                                       false))
3308    return true;
3309
3310  // C++ [temp.expl.spec]p6:
3311  //   If a template, a member template or the member of a class template is
3312  //   explicitly specialized then that spe- cialization shall be declared
3313  //   before the first use of that specialization that would cause an implicit
3314  //   instantiation to take place, in every translation unit in which such a
3315  //   use occurs; no diagnostic is required.
3316  FunctionTemplateSpecializationInfo *SpecInfo
3317    = Specialization->getTemplateSpecializationInfo();
3318  assert(SpecInfo && "Function template specialization info missing?");
3319  if (SpecInfo->getPointOfInstantiation().isValid()) {
3320    Diag(FD->getLocation(), diag::err_specialization_after_instantiation)
3321      << FD;
3322    Diag(SpecInfo->getPointOfInstantiation(),
3323         diag::note_instantiation_required_here)
3324      << (Specialization->getTemplateSpecializationKind()
3325                                                != TSK_ImplicitInstantiation);
3326    return true;
3327  }
3328
3329  // Mark the prior declaration as an explicit specialization, so that later
3330  // clients know that this is an explicit specialization.
3331  SpecInfo->setTemplateSpecializationKind(TSK_ExplicitSpecialization);
3332
3333  // Turn the given function declaration into a function template
3334  // specialization, with the template arguments from the previous
3335  // specialization.
3336  FD->setFunctionTemplateSpecialization(Context,
3337                                        Specialization->getPrimaryTemplate(),
3338                         new (Context) TemplateArgumentList(
3339                             *Specialization->getTemplateSpecializationArgs()),
3340                                        /*InsertPos=*/0,
3341                                        TSK_ExplicitSpecialization);
3342
3343  // The "previous declaration" for this function template specialization is
3344  // the prior function template specialization.
3345  PrevDecl = Specialization;
3346  return false;
3347}
3348
3349/// \brief Perform semantic analysis for the given non-template member
3350/// specialization.
3351///
3352/// This routine performs all of the semantic analysis required for an
3353/// explicit member function specialization. On successful completion,
3354/// the function declaration \p FD will become a member function
3355/// specialization.
3356///
3357/// \param Member the member declaration, which will be updated to become a
3358/// specialization.
3359///
3360/// \param PrevDecl the set of declarations, one of which may be specialized
3361/// by this function specialization.
3362bool
3363Sema::CheckMemberSpecialization(NamedDecl *Member, NamedDecl *&PrevDecl) {
3364  assert(!isa<TemplateDecl>(Member) && "Only for non-template members");
3365
3366  // Try to find the member we are instantiating.
3367  NamedDecl *Instantiation = 0;
3368  NamedDecl *InstantiatedFrom = 0;
3369  MemberSpecializationInfo *MSInfo = 0;
3370
3371  if (!PrevDecl) {
3372    // Nowhere to look anyway.
3373  } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Member)) {
3374    for (OverloadIterator Ovl(PrevDecl), OvlEnd; Ovl != OvlEnd; ++Ovl) {
3375      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(*Ovl)) {
3376        if (Context.hasSameType(Function->getType(), Method->getType())) {
3377          Instantiation = Method;
3378          InstantiatedFrom = Method->getInstantiatedFromMemberFunction();
3379          MSInfo = Method->getMemberSpecializationInfo();
3380          break;
3381        }
3382      }
3383    }
3384  } else if (isa<VarDecl>(Member)) {
3385    if (VarDecl *PrevVar = dyn_cast<VarDecl>(PrevDecl))
3386      if (PrevVar->isStaticDataMember()) {
3387        Instantiation = PrevDecl;
3388        InstantiatedFrom = PrevVar->getInstantiatedFromStaticDataMember();
3389        MSInfo = PrevVar->getMemberSpecializationInfo();
3390      }
3391  } else if (isa<RecordDecl>(Member)) {
3392    if (CXXRecordDecl *PrevRecord = dyn_cast<CXXRecordDecl>(PrevDecl)) {
3393      Instantiation = PrevDecl;
3394      InstantiatedFrom = PrevRecord->getInstantiatedFromMemberClass();
3395      MSInfo = PrevRecord->getMemberSpecializationInfo();
3396    }
3397  }
3398
3399  if (!Instantiation) {
3400    // There is no previous declaration that matches. Since member
3401    // specializations are always out-of-line, the caller will complain about
3402    // this mismatch later.
3403    return false;
3404  }
3405
3406  // Make sure that this is a specialization of a member.
3407  if (!InstantiatedFrom) {
3408    Diag(Member->getLocation(), diag::err_spec_member_not_instantiated)
3409      << Member;
3410    Diag(Instantiation->getLocation(), diag::note_specialized_decl);
3411    return true;
3412  }
3413
3414  // C++ [temp.expl.spec]p6:
3415  //   If a template, a member template or the member of a class template is
3416  //   explicitly specialized then that spe- cialization shall be declared
3417  //   before the first use of that specialization that would cause an implicit
3418  //   instantiation to take place, in every translation unit in which such a
3419  //   use occurs; no diagnostic is required.
3420  assert(MSInfo && "Member specialization info missing?");
3421  if (MSInfo->getPointOfInstantiation().isValid()) {
3422    Diag(Member->getLocation(), diag::err_specialization_after_instantiation)
3423      << Member;
3424    Diag(MSInfo->getPointOfInstantiation(),
3425         diag::note_instantiation_required_here)
3426      << (MSInfo->getTemplateSpecializationKind() != TSK_ImplicitInstantiation);
3427    return true;
3428  }
3429
3430  // Check the scope of this explicit specialization.
3431  if (CheckTemplateSpecializationScope(*this,
3432                                       InstantiatedFrom,
3433                                       Instantiation, Member->getLocation(),
3434                                       false))
3435    return true;
3436
3437  // Note that this is an explicit instantiation of a member.
3438  // the original declaration to note that it is an explicit specialization
3439  // (if it was previously an implicit instantiation). This latter step
3440  // makes bookkeeping easier.
3441  if (isa<FunctionDecl>(Member)) {
3442    FunctionDecl *InstantiationFunction = cast<FunctionDecl>(Instantiation);
3443    if (InstantiationFunction->getTemplateSpecializationKind() ==
3444          TSK_ImplicitInstantiation) {
3445      InstantiationFunction->setTemplateSpecializationKind(
3446                                                  TSK_ExplicitSpecialization);
3447      InstantiationFunction->setLocation(Member->getLocation());
3448    }
3449
3450    cast<FunctionDecl>(Member)->setInstantiationOfMemberFunction(
3451                                        cast<CXXMethodDecl>(InstantiatedFrom),
3452                                                  TSK_ExplicitSpecialization);
3453  } else if (isa<VarDecl>(Member)) {
3454    VarDecl *InstantiationVar = cast<VarDecl>(Instantiation);
3455    if (InstantiationVar->getTemplateSpecializationKind() ==
3456          TSK_ImplicitInstantiation) {
3457      InstantiationVar->setTemplateSpecializationKind(
3458                                                  TSK_ExplicitSpecialization);
3459      InstantiationVar->setLocation(Member->getLocation());
3460    }
3461
3462    Context.setInstantiatedFromStaticDataMember(cast<VarDecl>(Member),
3463                                                cast<VarDecl>(InstantiatedFrom),
3464                                                TSK_ExplicitSpecialization);
3465  } else {
3466    assert(isa<CXXRecordDecl>(Member) && "Only member classes remain");
3467    CXXRecordDecl *InstantiationClass = cast<CXXRecordDecl>(Instantiation);
3468    if (InstantiationClass->getTemplateSpecializationKind() ==
3469          TSK_ImplicitInstantiation) {
3470      InstantiationClass->setTemplateSpecializationKind(
3471                                                   TSK_ExplicitSpecialization);
3472      InstantiationClass->setLocation(Member->getLocation());
3473    }
3474
3475    cast<CXXRecordDecl>(Member)->setInstantiationOfMemberClass(
3476                                        cast<CXXRecordDecl>(InstantiatedFrom),
3477                                                   TSK_ExplicitSpecialization);
3478  }
3479
3480  // Save the caller the trouble of having to figure out which declaration
3481  // this specialization matches.
3482  PrevDecl = Instantiation;
3483  return false;
3484}
3485
3486/// \brief Check the scope of an explicit instantiation.
3487static void CheckExplicitInstantiationScope(Sema &S, NamedDecl *D,
3488                                            SourceLocation InstLoc,
3489                                            bool WasQualifiedName) {
3490  DeclContext *ExpectedContext
3491    = D->getDeclContext()->getEnclosingNamespaceContext()->getLookupContext();
3492  DeclContext *CurContext = S.CurContext->getLookupContext();
3493
3494  // C++0x [temp.explicit]p2:
3495  //   An explicit instantiation shall appear in an enclosing namespace of its
3496  //   template.
3497  //
3498  // This is DR275, which we do not retroactively apply to C++98/03.
3499  if (S.getLangOptions().CPlusPlus0x &&
3500      !CurContext->Encloses(ExpectedContext)) {
3501    if (NamespaceDecl *NS = dyn_cast<NamespaceDecl>(ExpectedContext))
3502      S.Diag(InstLoc, diag::err_explicit_instantiation_out_of_scope)
3503        << D << NS;
3504    else
3505      S.Diag(InstLoc, diag::err_explicit_instantiation_must_be_global)
3506        << D;
3507    S.Diag(D->getLocation(), diag::note_explicit_instantiation_here);
3508    return;
3509  }
3510
3511  // C++0x [temp.explicit]p2:
3512  //   If the name declared in the explicit instantiation is an unqualified
3513  //   name, the explicit instantiation shall appear in the namespace where
3514  //   its template is declared or, if that namespace is inline (7.3.1), any
3515  //   namespace from its enclosing namespace set.
3516  if (WasQualifiedName)
3517    return;
3518
3519  if (CurContext->Equals(ExpectedContext))
3520    return;
3521
3522  S.Diag(InstLoc, diag::err_explicit_instantiation_unqualified_wrong_namespace)
3523    << D << ExpectedContext;
3524  S.Diag(D->getLocation(), diag::note_explicit_instantiation_here);
3525}
3526
3527/// \brief Determine whether the given scope specifier has a template-id in it.
3528static bool ScopeSpecifierHasTemplateId(const CXXScopeSpec &SS) {
3529  if (!SS.isSet())
3530    return false;
3531
3532  // C++0x [temp.explicit]p2:
3533  //   If the explicit instantiation is for a member function, a member class
3534  //   or a static data member of a class template specialization, the name of
3535  //   the class template specialization in the qualified-id for the member
3536  //   name shall be a simple-template-id.
3537  //
3538  // C++98 has the same restriction, just worded differently.
3539  for (NestedNameSpecifier *NNS = (NestedNameSpecifier *)SS.getScopeRep();
3540       NNS; NNS = NNS->getPrefix())
3541    if (Type *T = NNS->getAsType())
3542      if (isa<TemplateSpecializationType>(T))
3543        return true;
3544
3545  return false;
3546}
3547
3548// Explicit instantiation of a class template specialization
3549// FIXME: Implement extern template semantics
3550Sema::DeclResult
3551Sema::ActOnExplicitInstantiation(Scope *S,
3552                                 SourceLocation ExternLoc,
3553                                 SourceLocation TemplateLoc,
3554                                 unsigned TagSpec,
3555                                 SourceLocation KWLoc,
3556                                 const CXXScopeSpec &SS,
3557                                 TemplateTy TemplateD,
3558                                 SourceLocation TemplateNameLoc,
3559                                 SourceLocation LAngleLoc,
3560                                 ASTTemplateArgsPtr TemplateArgsIn,
3561                                 SourceLocation *TemplateArgLocs,
3562                                 SourceLocation RAngleLoc,
3563                                 AttributeList *Attr) {
3564  // Find the class template we're specializing
3565  TemplateName Name = TemplateD.getAsVal<TemplateName>();
3566  ClassTemplateDecl *ClassTemplate
3567    = cast<ClassTemplateDecl>(Name.getAsTemplateDecl());
3568
3569  // Check that the specialization uses the same tag kind as the
3570  // original template.
3571  TagDecl::TagKind Kind;
3572  switch (TagSpec) {
3573  default: assert(0 && "Unknown tag type!");
3574  case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break;
3575  case DeclSpec::TST_union:  Kind = TagDecl::TK_union; break;
3576  case DeclSpec::TST_class:  Kind = TagDecl::TK_class; break;
3577  }
3578  if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(),
3579                                    Kind, KWLoc,
3580                                    *ClassTemplate->getIdentifier())) {
3581    Diag(KWLoc, diag::err_use_with_wrong_tag)
3582      << ClassTemplate
3583      << CodeModificationHint::CreateReplacement(KWLoc,
3584                            ClassTemplate->getTemplatedDecl()->getKindName());
3585    Diag(ClassTemplate->getTemplatedDecl()->getLocation(),
3586         diag::note_previous_use);
3587    Kind = ClassTemplate->getTemplatedDecl()->getTagKind();
3588  }
3589
3590  // C++0x [temp.explicit]p2:
3591  //   There are two forms of explicit instantiation: an explicit instantiation
3592  //   definition and an explicit instantiation declaration. An explicit
3593  //   instantiation declaration begins with the extern keyword. [...]
3594  TemplateSpecializationKind TSK
3595    = ExternLoc.isInvalid()? TSK_ExplicitInstantiationDefinition
3596                           : TSK_ExplicitInstantiationDeclaration;
3597
3598  // Translate the parser's template argument list in our AST format.
3599  llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
3600  translateTemplateArguments(TemplateArgsIn, TemplateArgLocs, TemplateArgs);
3601
3602  // Check that the template argument list is well-formed for this
3603  // template.
3604  TemplateArgumentListBuilder Converted(ClassTemplate->getTemplateParameters(),
3605                                        TemplateArgs.size());
3606  if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc,
3607                                TemplateArgs.data(), TemplateArgs.size(),
3608                                RAngleLoc, false, Converted))
3609    return true;
3610
3611  assert((Converted.structuredSize() ==
3612            ClassTemplate->getTemplateParameters()->size()) &&
3613         "Converted template argument list is too short!");
3614
3615  // Find the class template specialization declaration that
3616  // corresponds to these arguments.
3617  llvm::FoldingSetNodeID ID;
3618  ClassTemplateSpecializationDecl::Profile(ID,
3619                                           Converted.getFlatArguments(),
3620                                           Converted.flatSize(),
3621                                           Context);
3622  void *InsertPos = 0;
3623  ClassTemplateSpecializationDecl *PrevDecl
3624    = ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
3625
3626  // C++0x [temp.explicit]p2:
3627  //   [...] An explicit instantiation shall appear in an enclosing
3628  //   namespace of its template. [...]
3629  //
3630  // This is C++ DR 275.
3631  CheckExplicitInstantiationScope(*this, ClassTemplate, TemplateNameLoc,
3632                                  SS.isSet());
3633
3634  ClassTemplateSpecializationDecl *Specialization = 0;
3635
3636  if (PrevDecl) {
3637    bool SuppressNew = false;
3638    if (CheckSpecializationInstantiationRedecl(*this, TemplateNameLoc, TSK,
3639                                               PrevDecl,
3640                                              PrevDecl->getSpecializationKind(),
3641                                            PrevDecl->getPointOfInstantiation(),
3642                                               SuppressNew))
3643      return DeclPtrTy::make(PrevDecl);
3644
3645    if (SuppressNew)
3646      return DeclPtrTy::make(PrevDecl);
3647
3648    if (PrevDecl->getSpecializationKind() == TSK_ImplicitInstantiation ||
3649        PrevDecl->getSpecializationKind() == TSK_Undeclared) {
3650      // Since the only prior class template specialization with these
3651      // arguments was referenced but not declared, reuse that
3652      // declaration node as our own, updating its source location to
3653      // reflect our new declaration.
3654      Specialization = PrevDecl;
3655      Specialization->setLocation(TemplateNameLoc);
3656      PrevDecl = 0;
3657    }
3658  }
3659
3660  if (!Specialization) {
3661    // Create a new class template specialization declaration node for
3662    // this explicit specialization.
3663    Specialization
3664      = ClassTemplateSpecializationDecl::Create(Context,
3665                                             ClassTemplate->getDeclContext(),
3666                                                TemplateNameLoc,
3667                                                ClassTemplate,
3668                                                Converted, PrevDecl);
3669
3670    if (PrevDecl) {
3671      // Remove the previous declaration from the folding set, since we want
3672      // to introduce a new declaration.
3673      ClassTemplate->getSpecializations().RemoveNode(PrevDecl);
3674      ClassTemplate->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
3675    }
3676
3677    // Insert the new specialization.
3678    ClassTemplate->getSpecializations().InsertNode(Specialization, InsertPos);
3679  }
3680
3681  // Build the fully-sugared type for this explicit instantiation as
3682  // the user wrote in the explicit instantiation itself. This means
3683  // that we'll pretty-print the type retrieved from the
3684  // specialization's declaration the way that the user actually wrote
3685  // the explicit instantiation, rather than formatting the name based
3686  // on the "canonical" representation used to store the template
3687  // arguments in the specialization.
3688  QualType WrittenTy
3689    = Context.getTemplateSpecializationType(Name,
3690                                            TemplateArgs.data(),
3691                                            TemplateArgs.size(),
3692                                  Context.getTypeDeclType(Specialization));
3693  Specialization->setTypeAsWritten(WrittenTy);
3694  TemplateArgsIn.release();
3695
3696  // Add the explicit instantiation into its lexical context. However,
3697  // since explicit instantiations are never found by name lookup, we
3698  // just put it into the declaration context directly.
3699  Specialization->setLexicalDeclContext(CurContext);
3700  CurContext->addDecl(Specialization);
3701
3702  Specialization->setPointOfInstantiation(TemplateNameLoc);
3703
3704  // C++ [temp.explicit]p3:
3705  //   A definition of a class template or class member template
3706  //   shall be in scope at the point of the explicit instantiation of
3707  //   the class template or class member template.
3708  //
3709  // This check comes when we actually try to perform the
3710  // instantiation.
3711  ClassTemplateSpecializationDecl *Def
3712    = cast_or_null<ClassTemplateSpecializationDecl>(
3713                                        Specialization->getDefinition(Context));
3714  if (!Def)
3715    InstantiateClassTemplateSpecialization(Specialization, TSK);
3716  else // Instantiate the members of this class template specialization.
3717    InstantiateClassTemplateSpecializationMembers(TemplateNameLoc, Def, TSK);
3718
3719  return DeclPtrTy::make(Specialization);
3720}
3721
3722// Explicit instantiation of a member class of a class template.
3723Sema::DeclResult
3724Sema::ActOnExplicitInstantiation(Scope *S,
3725                                 SourceLocation ExternLoc,
3726                                 SourceLocation TemplateLoc,
3727                                 unsigned TagSpec,
3728                                 SourceLocation KWLoc,
3729                                 const CXXScopeSpec &SS,
3730                                 IdentifierInfo *Name,
3731                                 SourceLocation NameLoc,
3732                                 AttributeList *Attr) {
3733
3734  bool Owned = false;
3735  bool IsDependent = false;
3736  DeclPtrTy TagD = ActOnTag(S, TagSpec, Action::TUK_Reference,
3737                            KWLoc, SS, Name, NameLoc, Attr, AS_none,
3738                            MultiTemplateParamsArg(*this, 0, 0),
3739                            Owned, IsDependent);
3740  assert(!IsDependent && "explicit instantiation of dependent name not yet handled");
3741
3742  if (!TagD)
3743    return true;
3744
3745  TagDecl *Tag = cast<TagDecl>(TagD.getAs<Decl>());
3746  if (Tag->isEnum()) {
3747    Diag(TemplateLoc, diag::err_explicit_instantiation_enum)
3748      << Context.getTypeDeclType(Tag);
3749    return true;
3750  }
3751
3752  if (Tag->isInvalidDecl())
3753    return true;
3754
3755  CXXRecordDecl *Record = cast<CXXRecordDecl>(Tag);
3756  CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass();
3757  if (!Pattern) {
3758    Diag(TemplateLoc, diag::err_explicit_instantiation_nontemplate_type)
3759      << Context.getTypeDeclType(Record);
3760    Diag(Record->getLocation(), diag::note_nontemplate_decl_here);
3761    return true;
3762  }
3763
3764  // C++0x [temp.explicit]p2:
3765  //   If the explicit instantiation is for a class or member class, the
3766  //   elaborated-type-specifier in the declaration shall include a
3767  //   simple-template-id.
3768  //
3769  // C++98 has the same restriction, just worded differently.
3770  if (!ScopeSpecifierHasTemplateId(SS))
3771    Diag(TemplateLoc, diag::err_explicit_instantiation_without_qualified_id)
3772      << Record << SS.getRange();
3773
3774  // C++0x [temp.explicit]p2:
3775  //   There are two forms of explicit instantiation: an explicit instantiation
3776  //   definition and an explicit instantiation declaration. An explicit
3777  //   instantiation declaration begins with the extern keyword. [...]
3778  TemplateSpecializationKind TSK
3779    = ExternLoc.isInvalid()? TSK_ExplicitInstantiationDefinition
3780                           : TSK_ExplicitInstantiationDeclaration;
3781
3782  // C++0x [temp.explicit]p2:
3783  //   [...] An explicit instantiation shall appear in an enclosing
3784  //   namespace of its template. [...]
3785  //
3786  // This is C++ DR 275.
3787  CheckExplicitInstantiationScope(*this, Record, NameLoc, true);
3788
3789  // Verify that it is okay to explicitly instantiate here.
3790  CXXRecordDecl *PrevDecl
3791    = cast_or_null<CXXRecordDecl>(Record->getPreviousDeclaration());
3792  if (!PrevDecl && Record->getDefinition(Context))
3793    PrevDecl = Record;
3794  if (PrevDecl) {
3795    MemberSpecializationInfo *MSInfo = PrevDecl->getMemberSpecializationInfo();
3796    bool SuppressNew = false;
3797    assert(MSInfo && "No member specialization information?");
3798    if (CheckSpecializationInstantiationRedecl(*this, TemplateLoc, TSK,
3799                                               PrevDecl,
3800                                        MSInfo->getTemplateSpecializationKind(),
3801                                             MSInfo->getPointOfInstantiation(),
3802                                               SuppressNew))
3803      return true;
3804    if (SuppressNew)
3805      return TagD;
3806  }
3807
3808  CXXRecordDecl *RecordDef
3809    = cast_or_null<CXXRecordDecl>(Record->getDefinition(Context));
3810  if (!RecordDef) {
3811    // C++ [temp.explicit]p3:
3812    //   A definition of a member class of a class template shall be in scope
3813    //   at the point of an explicit instantiation of the member class.
3814    CXXRecordDecl *Def
3815      = cast_or_null<CXXRecordDecl>(Pattern->getDefinition(Context));
3816    if (!Def) {
3817      Diag(TemplateLoc, diag::err_explicit_instantiation_undefined_member)
3818        << 0 << Record->getDeclName() << Record->getDeclContext();
3819      Diag(Pattern->getLocation(), diag::note_forward_declaration)
3820        << Pattern;
3821      return true;
3822    } else if (InstantiateClass(NameLoc, Record, Def,
3823                                getTemplateInstantiationArgs(Record),
3824                                TSK))
3825      return true;
3826  } else // Instantiate all of the members of the class.
3827    InstantiateClassMembers(NameLoc, RecordDef,
3828                            getTemplateInstantiationArgs(Record), TSK);
3829
3830  // FIXME: We don't have any representation for explicit instantiations of
3831  // member classes. Such a representation is not needed for compilation, but it
3832  // should be available for clients that want to see all of the declarations in
3833  // the source code.
3834  return TagD;
3835}
3836
3837Sema::DeclResult Sema::ActOnExplicitInstantiation(Scope *S,
3838                                                  SourceLocation ExternLoc,
3839                                                  SourceLocation TemplateLoc,
3840                                                  Declarator &D) {
3841  // Explicit instantiations always require a name.
3842  DeclarationName Name = GetNameForDeclarator(D);
3843  if (!Name) {
3844    if (!D.isInvalidType())
3845      Diag(D.getDeclSpec().getSourceRange().getBegin(),
3846           diag::err_explicit_instantiation_requires_name)
3847        << D.getDeclSpec().getSourceRange()
3848        << D.getSourceRange();
3849
3850    return true;
3851  }
3852
3853  // The scope passed in may not be a decl scope.  Zip up the scope tree until
3854  // we find one that is.
3855  while ((S->getFlags() & Scope::DeclScope) == 0 ||
3856         (S->getFlags() & Scope::TemplateParamScope) != 0)
3857    S = S->getParent();
3858
3859  // Determine the type of the declaration.
3860  QualType R = GetTypeForDeclarator(D, S, 0);
3861  if (R.isNull())
3862    return true;
3863
3864  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {
3865    // Cannot explicitly instantiate a typedef.
3866    Diag(D.getIdentifierLoc(), diag::err_explicit_instantiation_of_typedef)
3867      << Name;
3868    return true;
3869  }
3870
3871  // C++0x [temp.explicit]p1:
3872  //   [...] An explicit instantiation of a function template shall not use the
3873  //   inline or constexpr specifiers.
3874  // Presumably, this also applies to member functions of class templates as
3875  // well.
3876  if (D.getDeclSpec().isInlineSpecified() && getLangOptions().CPlusPlus0x)
3877    Diag(D.getDeclSpec().getInlineSpecLoc(),
3878         diag::err_explicit_instantiation_inline)
3879      << CodeModificationHint::CreateRemoval(
3880                              SourceRange(D.getDeclSpec().getInlineSpecLoc()));
3881
3882  // FIXME: check for constexpr specifier.
3883
3884  // C++0x [temp.explicit]p2:
3885  //   There are two forms of explicit instantiation: an explicit instantiation
3886  //   definition and an explicit instantiation declaration. An explicit
3887  //   instantiation declaration begins with the extern keyword. [...]
3888  TemplateSpecializationKind TSK
3889    = ExternLoc.isInvalid()? TSK_ExplicitInstantiationDefinition
3890                           : TSK_ExplicitInstantiationDeclaration;
3891
3892  LookupResult Previous;
3893  LookupParsedName(Previous, S, &D.getCXXScopeSpec(),
3894                   Name, LookupOrdinaryName);
3895
3896  if (!R->isFunctionType()) {
3897    // C++ [temp.explicit]p1:
3898    //   A [...] static data member of a class template can be explicitly
3899    //   instantiated from the member definition associated with its class
3900    //   template.
3901    if (Previous.isAmbiguous()) {
3902      return DiagnoseAmbiguousLookup(Previous, Name, D.getIdentifierLoc(),
3903                                     D.getSourceRange());
3904    }
3905
3906    VarDecl *Prev = dyn_cast_or_null<VarDecl>(
3907        Previous.getAsSingleDecl(Context));
3908    if (!Prev || !Prev->isStaticDataMember()) {
3909      // We expect to see a data data member here.
3910      Diag(D.getIdentifierLoc(), diag::err_explicit_instantiation_not_known)
3911        << Name;
3912      for (LookupResult::iterator P = Previous.begin(), PEnd = Previous.end();
3913           P != PEnd; ++P)
3914        Diag((*P)->getLocation(), diag::note_explicit_instantiation_here);
3915      return true;
3916    }
3917
3918    if (!Prev->getInstantiatedFromStaticDataMember()) {
3919      // FIXME: Check for explicit specialization?
3920      Diag(D.getIdentifierLoc(),
3921           diag::err_explicit_instantiation_data_member_not_instantiated)
3922        << Prev;
3923      Diag(Prev->getLocation(), diag::note_explicit_instantiation_here);
3924      // FIXME: Can we provide a note showing where this was declared?
3925      return true;
3926    }
3927
3928    // C++0x [temp.explicit]p2:
3929    //   If the explicit instantiation is for a member function, a member class
3930    //   or a static data member of a class template specialization, the name of
3931    //   the class template specialization in the qualified-id for the member
3932    //   name shall be a simple-template-id.
3933    //
3934    // C++98 has the same restriction, just worded differently.
3935    if (!ScopeSpecifierHasTemplateId(D.getCXXScopeSpec()))
3936      Diag(D.getIdentifierLoc(),
3937           diag::err_explicit_instantiation_without_qualified_id)
3938        << Prev << D.getCXXScopeSpec().getRange();
3939
3940    // Check the scope of this explicit instantiation.
3941    CheckExplicitInstantiationScope(*this, Prev, D.getIdentifierLoc(), true);
3942
3943    // Verify that it is okay to explicitly instantiate here.
3944    MemberSpecializationInfo *MSInfo = Prev->getMemberSpecializationInfo();
3945    assert(MSInfo && "Missing static data member specialization info?");
3946    bool SuppressNew = false;
3947    if (CheckSpecializationInstantiationRedecl(*this, D.getIdentifierLoc(), TSK,
3948                                               Prev,
3949                                        MSInfo->getTemplateSpecializationKind(),
3950                                              MSInfo->getPointOfInstantiation(),
3951                                               SuppressNew))
3952      return true;
3953    if (SuppressNew)
3954      return DeclPtrTy();
3955
3956    // Instantiate static data member.
3957    Prev->setTemplateSpecializationKind(TSK, D.getIdentifierLoc());
3958    if (TSK == TSK_ExplicitInstantiationDefinition)
3959      InstantiateStaticDataMemberDefinition(D.getIdentifierLoc(), Prev, false,
3960                                            /*DefinitionRequired=*/true);
3961
3962    // FIXME: Create an ExplicitInstantiation node?
3963    return DeclPtrTy();
3964  }
3965
3966  // If the declarator is a template-id, translate the parser's template
3967  // argument list into our AST format.
3968  bool HasExplicitTemplateArgs = false;
3969  llvm::SmallVector<TemplateArgument, 16> TemplateArgs;
3970  if (D.getKind() == Declarator::DK_TemplateId) {
3971    TemplateIdAnnotation *TemplateId = D.getTemplateId();
3972    ASTTemplateArgsPtr TemplateArgsPtr(*this,
3973                                       TemplateId->getTemplateArgs(),
3974                                       TemplateId->getTemplateArgIsType(),
3975                                       TemplateId->NumArgs);
3976    translateTemplateArguments(TemplateArgsPtr,
3977                               TemplateId->getTemplateArgLocations(),
3978                               TemplateArgs);
3979    HasExplicitTemplateArgs = true;
3980    TemplateArgsPtr.release();
3981  }
3982
3983  // C++ [temp.explicit]p1:
3984  //   A [...] function [...] can be explicitly instantiated from its template.
3985  //   A member function [...] of a class template can be explicitly
3986  //  instantiated from the member definition associated with its class
3987  //  template.
3988  llvm::SmallVector<FunctionDecl *, 8> Matches;
3989  for (LookupResult::iterator P = Previous.begin(), PEnd = Previous.end();
3990       P != PEnd; ++P) {
3991    NamedDecl *Prev = *P;
3992    if (!HasExplicitTemplateArgs) {
3993      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Prev)) {
3994        if (Context.hasSameUnqualifiedType(Method->getType(), R)) {
3995          Matches.clear();
3996          Matches.push_back(Method);
3997          break;
3998        }
3999      }
4000    }
4001
4002    FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(Prev);
4003    if (!FunTmpl)
4004      continue;
4005
4006    TemplateDeductionInfo Info(Context);
4007    FunctionDecl *Specialization = 0;
4008    if (TemplateDeductionResult TDK
4009          = DeduceTemplateArguments(FunTmpl, HasExplicitTemplateArgs,
4010                                    TemplateArgs.data(), TemplateArgs.size(),
4011                                    R, Specialization, Info)) {
4012      // FIXME: Keep track of almost-matches?
4013      (void)TDK;
4014      continue;
4015    }
4016
4017    Matches.push_back(Specialization);
4018  }
4019
4020  // Find the most specialized function template specialization.
4021  FunctionDecl *Specialization
4022    = getMostSpecialized(Matches.data(), Matches.size(), TPOC_Other,
4023                         D.getIdentifierLoc(),
4024          PartialDiagnostic(diag::err_explicit_instantiation_not_known) << Name,
4025          PartialDiagnostic(diag::err_explicit_instantiation_ambiguous) << Name,
4026                PartialDiagnostic(diag::note_explicit_instantiation_candidate));
4027
4028  if (!Specialization)
4029    return true;
4030
4031  if (Specialization->getTemplateSpecializationKind() == TSK_Undeclared) {
4032    Diag(D.getIdentifierLoc(),
4033         diag::err_explicit_instantiation_member_function_not_instantiated)
4034      << Specialization
4035      << (Specialization->getTemplateSpecializationKind() ==
4036          TSK_ExplicitSpecialization);
4037    Diag(Specialization->getLocation(), diag::note_explicit_instantiation_here);
4038    return true;
4039  }
4040
4041  FunctionDecl *PrevDecl = Specialization->getPreviousDeclaration();
4042  if (!PrevDecl && Specialization->isThisDeclarationADefinition())
4043    PrevDecl = Specialization;
4044
4045  if (PrevDecl) {
4046    bool SuppressNew = false;
4047    if (CheckSpecializationInstantiationRedecl(*this, D.getIdentifierLoc(), TSK,
4048                                               PrevDecl,
4049                                     PrevDecl->getTemplateSpecializationKind(),
4050                                          PrevDecl->getPointOfInstantiation(),
4051                                               SuppressNew))
4052      return true;
4053
4054    // FIXME: We may still want to build some representation of this
4055    // explicit specialization.
4056    if (SuppressNew)
4057      return DeclPtrTy();
4058  }
4059
4060  if (TSK == TSK_ExplicitInstantiationDefinition)
4061    InstantiateFunctionDefinition(D.getIdentifierLoc(), Specialization,
4062                                  false, /*DefinitionRequired=*/true);
4063
4064  Specialization->setTemplateSpecializationKind(TSK, D.getIdentifierLoc());
4065
4066  // C++0x [temp.explicit]p2:
4067  //   If the explicit instantiation is for a member function, a member class
4068  //   or a static data member of a class template specialization, the name of
4069  //   the class template specialization in the qualified-id for the member
4070  //   name shall be a simple-template-id.
4071  //
4072  // C++98 has the same restriction, just worded differently.
4073  FunctionTemplateDecl *FunTmpl = Specialization->getPrimaryTemplate();
4074  if (D.getKind() != Declarator::DK_TemplateId && !FunTmpl &&
4075      D.getCXXScopeSpec().isSet() &&
4076      !ScopeSpecifierHasTemplateId(D.getCXXScopeSpec()))
4077    Diag(D.getIdentifierLoc(),
4078         diag::err_explicit_instantiation_without_qualified_id)
4079    << Specialization << D.getCXXScopeSpec().getRange();
4080
4081  CheckExplicitInstantiationScope(*this,
4082                   FunTmpl? (NamedDecl *)FunTmpl
4083                          : Specialization->getInstantiatedFromMemberFunction(),
4084                                  D.getIdentifierLoc(),
4085                                  D.getCXXScopeSpec().isSet());
4086
4087  // FIXME: Create some kind of ExplicitInstantiationDecl here.
4088  return DeclPtrTy();
4089}
4090
4091Sema::TypeResult
4092Sema::ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
4093                        const CXXScopeSpec &SS, IdentifierInfo *Name,
4094                        SourceLocation TagLoc, SourceLocation NameLoc) {
4095  // This has to hold, because SS is expected to be defined.
4096  assert(Name && "Expected a name in a dependent tag");
4097
4098  NestedNameSpecifier *NNS
4099    = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
4100  if (!NNS)
4101    return true;
4102
4103  QualType T = CheckTypenameType(NNS, *Name, SourceRange(TagLoc, NameLoc));
4104  if (T.isNull())
4105    return true;
4106
4107  TagDecl::TagKind TagKind = TagDecl::getTagKindForTypeSpec(TagSpec);
4108  QualType ElabType = Context.getElaboratedType(T, TagKind);
4109
4110  return ElabType.getAsOpaquePtr();
4111}
4112
4113Sema::TypeResult
4114Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS,
4115                        const IdentifierInfo &II, SourceLocation IdLoc) {
4116  NestedNameSpecifier *NNS
4117    = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
4118  if (!NNS)
4119    return true;
4120
4121  QualType T = CheckTypenameType(NNS, II, SourceRange(TypenameLoc, IdLoc));
4122  if (T.isNull())
4123    return true;
4124  return T.getAsOpaquePtr();
4125}
4126
4127Sema::TypeResult
4128Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS,
4129                        SourceLocation TemplateLoc, TypeTy *Ty) {
4130  QualType T = GetTypeFromParser(Ty);
4131  NestedNameSpecifier *NNS
4132    = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
4133  const TemplateSpecializationType *TemplateId
4134    = T->getAs<TemplateSpecializationType>();
4135  assert(TemplateId && "Expected a template specialization type");
4136
4137  if (computeDeclContext(SS, false)) {
4138    // If we can compute a declaration context, then the "typename"
4139    // keyword was superfluous. Just build a QualifiedNameType to keep
4140    // track of the nested-name-specifier.
4141
4142    // FIXME: Note that the QualifiedNameType had the "typename" keyword!
4143    return Context.getQualifiedNameType(NNS, T).getAsOpaquePtr();
4144  }
4145
4146  return Context.getTypenameType(NNS, TemplateId).getAsOpaquePtr();
4147}
4148
4149/// \brief Build the type that describes a C++ typename specifier,
4150/// e.g., "typename T::type".
4151QualType
4152Sema::CheckTypenameType(NestedNameSpecifier *NNS, const IdentifierInfo &II,
4153                        SourceRange Range) {
4154  CXXRecordDecl *CurrentInstantiation = 0;
4155  if (NNS->isDependent()) {
4156    CurrentInstantiation = getCurrentInstantiationOf(NNS);
4157
4158    // If the nested-name-specifier does not refer to the current
4159    // instantiation, then build a typename type.
4160    if (!CurrentInstantiation)
4161      return Context.getTypenameType(NNS, &II);
4162
4163    // The nested-name-specifier refers to the current instantiation, so the
4164    // "typename" keyword itself is superfluous. In C++03, the program is
4165    // actually ill-formed. However, DR 382 (in C++0x CD1) allows such
4166    // extraneous "typename" keywords, and we retroactively apply this DR to
4167    // C++03 code.
4168  }
4169
4170  DeclContext *Ctx = 0;
4171
4172  if (CurrentInstantiation)
4173    Ctx = CurrentInstantiation;
4174  else {
4175    CXXScopeSpec SS;
4176    SS.setScopeRep(NNS);
4177    SS.setRange(Range);
4178    if (RequireCompleteDeclContext(SS))
4179      return QualType();
4180
4181    Ctx = computeDeclContext(SS);
4182  }
4183  assert(Ctx && "No declaration context?");
4184
4185  DeclarationName Name(&II);
4186  LookupResult Result;
4187  LookupQualifiedName(Result, Ctx, Name, LookupOrdinaryName, false);
4188  unsigned DiagID = 0;
4189  Decl *Referenced = 0;
4190  switch (Result.getKind()) {
4191  case LookupResult::NotFound:
4192    DiagID = diag::err_typename_nested_not_found;
4193    break;
4194
4195  case LookupResult::Found:
4196    if (TypeDecl *Type = dyn_cast<TypeDecl>(Result.getFoundDecl())) {
4197      // We found a type. Build a QualifiedNameType, since the
4198      // typename-specifier was just sugar. FIXME: Tell
4199      // QualifiedNameType that it has a "typename" prefix.
4200      return Context.getQualifiedNameType(NNS, Context.getTypeDeclType(Type));
4201    }
4202
4203    DiagID = diag::err_typename_nested_not_type;
4204    Referenced = Result.getFoundDecl();
4205    break;
4206
4207  case LookupResult::FoundOverloaded:
4208    DiagID = diag::err_typename_nested_not_type;
4209    Referenced = *Result.begin();
4210    break;
4211
4212  case LookupResult::Ambiguous:
4213    DiagnoseAmbiguousLookup(Result, Name, Range.getEnd(), Range);
4214    return QualType();
4215  }
4216
4217  // If we get here, it's because name lookup did not find a
4218  // type. Emit an appropriate diagnostic and return an error.
4219  Diag(Range.getEnd(), DiagID) << Range << Name << Ctx;
4220  if (Referenced)
4221    Diag(Referenced->getLocation(), diag::note_typename_refers_here)
4222      << Name;
4223  return QualType();
4224}
4225
4226namespace {
4227  // See Sema::RebuildTypeInCurrentInstantiation
4228  class VISIBILITY_HIDDEN CurrentInstantiationRebuilder
4229    : public TreeTransform<CurrentInstantiationRebuilder> {
4230    SourceLocation Loc;
4231    DeclarationName Entity;
4232
4233  public:
4234    CurrentInstantiationRebuilder(Sema &SemaRef,
4235                                  SourceLocation Loc,
4236                                  DeclarationName Entity)
4237    : TreeTransform<CurrentInstantiationRebuilder>(SemaRef),
4238      Loc(Loc), Entity(Entity) { }
4239
4240    /// \brief Determine whether the given type \p T has already been
4241    /// transformed.
4242    ///
4243    /// For the purposes of type reconstruction, a type has already been
4244    /// transformed if it is NULL or if it is not dependent.
4245    bool AlreadyTransformed(QualType T) {
4246      return T.isNull() || !T->isDependentType();
4247    }
4248
4249    /// \brief Returns the location of the entity whose type is being
4250    /// rebuilt.
4251    SourceLocation getBaseLocation() { return Loc; }
4252
4253    /// \brief Returns the name of the entity whose type is being rebuilt.
4254    DeclarationName getBaseEntity() { return Entity; }
4255
4256    /// \brief Transforms an expression by returning the expression itself
4257    /// (an identity function).
4258    ///
4259    /// FIXME: This is completely unsafe; we will need to actually clone the
4260    /// expressions.
4261    Sema::OwningExprResult TransformExpr(Expr *E) {
4262      return getSema().Owned(E);
4263    }
4264
4265    /// \brief Transforms a typename type by determining whether the type now
4266    /// refers to a member of the current instantiation, and then
4267    /// type-checking and building a QualifiedNameType (when possible).
4268    QualType TransformTypenameType(const TypenameType *T);
4269  };
4270}
4271
4272QualType
4273CurrentInstantiationRebuilder::TransformTypenameType(const TypenameType *T) {
4274  NestedNameSpecifier *NNS
4275    = TransformNestedNameSpecifier(T->getQualifier(),
4276                              /*FIXME:*/SourceRange(getBaseLocation()));
4277  if (!NNS)
4278    return QualType();
4279
4280  // If the nested-name-specifier did not change, and we cannot compute the
4281  // context corresponding to the nested-name-specifier, then this
4282  // typename type will not change; exit early.
4283  CXXScopeSpec SS;
4284  SS.setRange(SourceRange(getBaseLocation()));
4285  SS.setScopeRep(NNS);
4286  if (NNS == T->getQualifier() && getSema().computeDeclContext(SS) == 0)
4287    return QualType(T, 0);
4288
4289  // Rebuild the typename type, which will probably turn into a
4290  // QualifiedNameType.
4291  if (const TemplateSpecializationType *TemplateId = T->getTemplateId()) {
4292    QualType NewTemplateId
4293      = TransformType(QualType(TemplateId, 0));
4294    if (NewTemplateId.isNull())
4295      return QualType();
4296
4297    if (NNS == T->getQualifier() &&
4298        NewTemplateId == QualType(TemplateId, 0))
4299      return QualType(T, 0);
4300
4301    return getDerived().RebuildTypenameType(NNS, NewTemplateId);
4302  }
4303
4304  return getDerived().RebuildTypenameType(NNS, T->getIdentifier());
4305}
4306
4307/// \brief Rebuilds a type within the context of the current instantiation.
4308///
4309/// The type \p T is part of the type of an out-of-line member definition of
4310/// a class template (or class template partial specialization) that was parsed
4311/// and constructed before we entered the scope of the class template (or
4312/// partial specialization thereof). This routine will rebuild that type now
4313/// that we have entered the declarator's scope, which may produce different
4314/// canonical types, e.g.,
4315///
4316/// \code
4317/// template<typename T>
4318/// struct X {
4319///   typedef T* pointer;
4320///   pointer data();
4321/// };
4322///
4323/// template<typename T>
4324/// typename X<T>::pointer X<T>::data() { ... }
4325/// \endcode
4326///
4327/// Here, the type "typename X<T>::pointer" will be created as a TypenameType,
4328/// since we do not know that we can look into X<T> when we parsed the type.
4329/// This function will rebuild the type, performing the lookup of "pointer"
4330/// in X<T> and returning a QualifiedNameType whose canonical type is the same
4331/// as the canonical type of T*, allowing the return types of the out-of-line
4332/// definition and the declaration to match.
4333QualType Sema::RebuildTypeInCurrentInstantiation(QualType T, SourceLocation Loc,
4334                                                 DeclarationName Name) {
4335  if (T.isNull() || !T->isDependentType())
4336    return T;
4337
4338  CurrentInstantiationRebuilder Rebuilder(*this, Loc, Name);
4339  return Rebuilder.TransformType(T);
4340}
4341
4342/// \brief Produces a formatted string that describes the binding of
4343/// template parameters to template arguments.
4344std::string
4345Sema::getTemplateArgumentBindingsText(const TemplateParameterList *Params,
4346                                      const TemplateArgumentList &Args) {
4347  std::string Result;
4348
4349  if (!Params || Params->size() == 0)
4350    return Result;
4351
4352  for (unsigned I = 0, N = Params->size(); I != N; ++I) {
4353    if (I == 0)
4354      Result += "[with ";
4355    else
4356      Result += ", ";
4357
4358    if (const IdentifierInfo *Id = Params->getParam(I)->getIdentifier()) {
4359      Result += Id->getName();
4360    } else {
4361      Result += '$';
4362      Result += llvm::utostr(I);
4363    }
4364
4365    Result += " = ";
4366
4367    switch (Args[I].getKind()) {
4368      case TemplateArgument::Null:
4369        Result += "<no value>";
4370        break;
4371
4372      case TemplateArgument::Type: {
4373        std::string TypeStr;
4374        Args[I].getAsType().getAsStringInternal(TypeStr,
4375                                                Context.PrintingPolicy);
4376        Result += TypeStr;
4377        break;
4378      }
4379
4380      case TemplateArgument::Declaration: {
4381        bool Unnamed = true;
4382        if (NamedDecl *ND = dyn_cast_or_null<NamedDecl>(Args[I].getAsDecl())) {
4383          if (ND->getDeclName()) {
4384            Unnamed = false;
4385            Result += ND->getNameAsString();
4386          }
4387        }
4388
4389        if (Unnamed) {
4390          Result += "<anonymous>";
4391        }
4392        break;
4393      }
4394
4395      case TemplateArgument::Integral: {
4396        Result += Args[I].getAsIntegral()->toString(10);
4397        break;
4398      }
4399
4400      case TemplateArgument::Expression: {
4401        assert(false && "No expressions in deduced template arguments!");
4402        Result += "<expression>";
4403        break;
4404      }
4405
4406      case TemplateArgument::Pack:
4407        // FIXME: Format template argument packs
4408        Result += "<template argument pack>";
4409        break;
4410    }
4411  }
4412
4413  Result += ']';
4414  return Result;
4415}
4416