SemaTemplateInstantiate.cpp revision 2577743c5650c646fb705df01403707e94f2df04
1//===------- SemaTemplateInstantiate.cpp - C++ Template Instantiation ------===/
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//===----------------------------------------------------------------------===/
8//
9//  This file implements C++ template instantiation.
10//
11//===----------------------------------------------------------------------===/
12
13#include "Sema.h"
14#include "TreeTransform.h"
15#include "Lookup.h"
16#include "clang/AST/ASTConsumer.h"
17#include "clang/AST/ASTContext.h"
18#include "clang/AST/Expr.h"
19#include "clang/AST/DeclTemplate.h"
20#include "clang/Parse/DeclSpec.h"
21#include "clang/Basic/LangOptions.h"
22
23using namespace clang;
24
25//===----------------------------------------------------------------------===/
26// Template Instantiation Support
27//===----------------------------------------------------------------------===/
28
29/// \brief Retrieve the template argument list(s) that should be used to
30/// instantiate the definition of the given declaration.
31///
32/// \param D the declaration for which we are computing template instantiation
33/// arguments.
34///
35/// \param Innermost if non-NULL, the innermost template argument list.
36///
37/// \param RelativeToPrimary true if we should get the template
38/// arguments relative to the primary template, even when we're
39/// dealing with a specialization. This is only relevant for function
40/// template specializations.
41///
42/// \param Pattern If non-NULL, indicates the pattern from which we will be
43/// instantiating the definition of the given declaration, \p D. This is
44/// used to determine the proper set of template instantiation arguments for
45/// friend function template specializations.
46MultiLevelTemplateArgumentList
47Sema::getTemplateInstantiationArgs(NamedDecl *D,
48                                   const TemplateArgumentList *Innermost,
49                                   bool RelativeToPrimary,
50                                   const FunctionDecl *Pattern) {
51  // Accumulate the set of template argument lists in this structure.
52  MultiLevelTemplateArgumentList Result;
53
54  if (Innermost)
55    Result.addOuterTemplateArguments(Innermost);
56
57  DeclContext *Ctx = dyn_cast<DeclContext>(D);
58  if (!Ctx)
59    Ctx = D->getDeclContext();
60
61  while (!Ctx->isFileContext()) {
62    // Add template arguments from a class template instantiation.
63    if (ClassTemplateSpecializationDecl *Spec
64          = dyn_cast<ClassTemplateSpecializationDecl>(Ctx)) {
65      // We're done when we hit an explicit specialization.
66      if (Spec->getSpecializationKind() == TSK_ExplicitSpecialization &&
67          !isa<ClassTemplatePartialSpecializationDecl>(Spec))
68        break;
69
70      Result.addOuterTemplateArguments(&Spec->getTemplateInstantiationArgs());
71
72      // If this class template specialization was instantiated from a
73      // specialized member that is a class template, we're done.
74      assert(Spec->getSpecializedTemplate() && "No class template?");
75      if (Spec->getSpecializedTemplate()->isMemberSpecialization())
76        break;
77    }
78    // Add template arguments from a function template specialization.
79    else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Ctx)) {
80      if (!RelativeToPrimary &&
81          Function->getTemplateSpecializationKind()
82                                                  == TSK_ExplicitSpecialization)
83        break;
84
85      if (const TemplateArgumentList *TemplateArgs
86            = Function->getTemplateSpecializationArgs()) {
87        // Add the template arguments for this specialization.
88        Result.addOuterTemplateArguments(TemplateArgs);
89
90        // If this function was instantiated from a specialized member that is
91        // a function template, we're done.
92        assert(Function->getPrimaryTemplate() && "No function template?");
93        if (Function->getPrimaryTemplate()->isMemberSpecialization())
94          break;
95      }
96
97      // If this is a friend declaration and it declares an entity at
98      // namespace scope, take arguments from its lexical parent
99      // instead of its semantic parent, unless of course the pattern we're
100      // instantiating actually comes from the file's context!
101      if (Function->getFriendObjectKind() &&
102          Function->getDeclContext()->isFileContext() &&
103          (!Pattern || !Pattern->getLexicalDeclContext()->isFileContext())) {
104        Ctx = Function->getLexicalDeclContext();
105        RelativeToPrimary = false;
106        continue;
107      }
108    } else if (CXXRecordDecl *Rec = dyn_cast<CXXRecordDecl>(Ctx)) {
109      if (ClassTemplateDecl *ClassTemplate = Rec->getDescribedClassTemplate()) {
110        QualType T = ClassTemplate->getInjectedClassNameSpecialization();
111        const TemplateSpecializationType *TST
112          = cast<TemplateSpecializationType>(Context.getCanonicalType(T));
113        Result.addOuterTemplateArguments(TST->getArgs(), TST->getNumArgs());
114        if (ClassTemplate->isMemberSpecialization())
115          break;
116      }
117    }
118
119    Ctx = Ctx->getParent();
120    RelativeToPrimary = false;
121  }
122
123  return Result;
124}
125
126bool Sema::ActiveTemplateInstantiation::isInstantiationRecord() const {
127  switch (Kind) {
128  case TemplateInstantiation:
129  case DefaultTemplateArgumentInstantiation:
130  case DefaultFunctionArgumentInstantiation:
131    return true;
132
133  case ExplicitTemplateArgumentSubstitution:
134  case DeducedTemplateArgumentSubstitution:
135  case PriorTemplateArgumentSubstitution:
136  case DefaultTemplateArgumentChecking:
137    return false;
138  }
139
140  return true;
141}
142
143Sema::InstantiatingTemplate::
144InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
145                      Decl *Entity,
146                      SourceRange InstantiationRange)
147  :  SemaRef(SemaRef) {
148
149  Invalid = CheckInstantiationDepth(PointOfInstantiation,
150                                    InstantiationRange);
151  if (!Invalid) {
152    ActiveTemplateInstantiation Inst;
153    Inst.Kind = ActiveTemplateInstantiation::TemplateInstantiation;
154    Inst.PointOfInstantiation = PointOfInstantiation;
155    Inst.Entity = reinterpret_cast<uintptr_t>(Entity);
156    Inst.TemplateArgs = 0;
157    Inst.NumTemplateArgs = 0;
158    Inst.InstantiationRange = InstantiationRange;
159    SemaRef.ActiveTemplateInstantiations.push_back(Inst);
160  }
161}
162
163Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
164                                         SourceLocation PointOfInstantiation,
165                                         TemplateDecl *Template,
166                                         const TemplateArgument *TemplateArgs,
167                                         unsigned NumTemplateArgs,
168                                         SourceRange InstantiationRange)
169  : SemaRef(SemaRef) {
170
171  Invalid = CheckInstantiationDepth(PointOfInstantiation,
172                                    InstantiationRange);
173  if (!Invalid) {
174    ActiveTemplateInstantiation Inst;
175    Inst.Kind
176      = ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation;
177    Inst.PointOfInstantiation = PointOfInstantiation;
178    Inst.Entity = reinterpret_cast<uintptr_t>(Template);
179    Inst.TemplateArgs = TemplateArgs;
180    Inst.NumTemplateArgs = NumTemplateArgs;
181    Inst.InstantiationRange = InstantiationRange;
182    SemaRef.ActiveTemplateInstantiations.push_back(Inst);
183  }
184}
185
186Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
187                                         SourceLocation PointOfInstantiation,
188                                      FunctionTemplateDecl *FunctionTemplate,
189                                        const TemplateArgument *TemplateArgs,
190                                                   unsigned NumTemplateArgs,
191                         ActiveTemplateInstantiation::InstantiationKind Kind,
192                                              SourceRange InstantiationRange)
193: SemaRef(SemaRef) {
194
195  Invalid = CheckInstantiationDepth(PointOfInstantiation,
196                                    InstantiationRange);
197  if (!Invalid) {
198    ActiveTemplateInstantiation Inst;
199    Inst.Kind = Kind;
200    Inst.PointOfInstantiation = PointOfInstantiation;
201    Inst.Entity = reinterpret_cast<uintptr_t>(FunctionTemplate);
202    Inst.TemplateArgs = TemplateArgs;
203    Inst.NumTemplateArgs = NumTemplateArgs;
204    Inst.InstantiationRange = InstantiationRange;
205    SemaRef.ActiveTemplateInstantiations.push_back(Inst);
206
207    if (!Inst.isInstantiationRecord())
208      ++SemaRef.NonInstantiationEntries;
209  }
210}
211
212Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
213                                         SourceLocation PointOfInstantiation,
214                          ClassTemplatePartialSpecializationDecl *PartialSpec,
215                                         const TemplateArgument *TemplateArgs,
216                                         unsigned NumTemplateArgs,
217                                         SourceRange InstantiationRange)
218  : SemaRef(SemaRef) {
219
220  Invalid = false;
221
222  ActiveTemplateInstantiation Inst;
223  Inst.Kind = ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution;
224  Inst.PointOfInstantiation = PointOfInstantiation;
225  Inst.Entity = reinterpret_cast<uintptr_t>(PartialSpec);
226  Inst.TemplateArgs = TemplateArgs;
227  Inst.NumTemplateArgs = NumTemplateArgs;
228  Inst.InstantiationRange = InstantiationRange;
229  SemaRef.ActiveTemplateInstantiations.push_back(Inst);
230
231  assert(!Inst.isInstantiationRecord());
232  ++SemaRef.NonInstantiationEntries;
233}
234
235Sema::InstantiatingTemplate::InstantiatingTemplate(Sema &SemaRef,
236                                          SourceLocation PointOfInstantiation,
237                                          ParmVarDecl *Param,
238                                          const TemplateArgument *TemplateArgs,
239                                          unsigned NumTemplateArgs,
240                                          SourceRange InstantiationRange)
241  : SemaRef(SemaRef) {
242
243  Invalid = CheckInstantiationDepth(PointOfInstantiation, InstantiationRange);
244
245  if (!Invalid) {
246    ActiveTemplateInstantiation Inst;
247    Inst.Kind
248      = ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation;
249    Inst.PointOfInstantiation = PointOfInstantiation;
250    Inst.Entity = reinterpret_cast<uintptr_t>(Param);
251    Inst.TemplateArgs = TemplateArgs;
252    Inst.NumTemplateArgs = NumTemplateArgs;
253    Inst.InstantiationRange = InstantiationRange;
254    SemaRef.ActiveTemplateInstantiations.push_back(Inst);
255  }
256}
257
258Sema::InstantiatingTemplate::
259InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
260                      TemplateDecl *Template,
261                      NonTypeTemplateParmDecl *Param,
262                      const TemplateArgument *TemplateArgs,
263                      unsigned NumTemplateArgs,
264                      SourceRange InstantiationRange) : SemaRef(SemaRef) {
265  Invalid = false;
266
267  ActiveTemplateInstantiation Inst;
268  Inst.Kind = ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution;
269  Inst.PointOfInstantiation = PointOfInstantiation;
270  Inst.Template = Template;
271  Inst.Entity = reinterpret_cast<uintptr_t>(Param);
272  Inst.TemplateArgs = TemplateArgs;
273  Inst.NumTemplateArgs = NumTemplateArgs;
274  Inst.InstantiationRange = InstantiationRange;
275  SemaRef.ActiveTemplateInstantiations.push_back(Inst);
276
277  assert(!Inst.isInstantiationRecord());
278  ++SemaRef.NonInstantiationEntries;
279}
280
281Sema::InstantiatingTemplate::
282InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
283                      TemplateDecl *Template,
284                      TemplateTemplateParmDecl *Param,
285                      const TemplateArgument *TemplateArgs,
286                      unsigned NumTemplateArgs,
287                      SourceRange InstantiationRange) : SemaRef(SemaRef) {
288  Invalid = false;
289  ActiveTemplateInstantiation Inst;
290  Inst.Kind = ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution;
291  Inst.PointOfInstantiation = PointOfInstantiation;
292  Inst.Template = Template;
293  Inst.Entity = reinterpret_cast<uintptr_t>(Param);
294  Inst.TemplateArgs = TemplateArgs;
295  Inst.NumTemplateArgs = NumTemplateArgs;
296  Inst.InstantiationRange = InstantiationRange;
297  SemaRef.ActiveTemplateInstantiations.push_back(Inst);
298
299  assert(!Inst.isInstantiationRecord());
300  ++SemaRef.NonInstantiationEntries;
301}
302
303Sema::InstantiatingTemplate::
304InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
305                      TemplateDecl *Template,
306                      NamedDecl *Param,
307                      const TemplateArgument *TemplateArgs,
308                      unsigned NumTemplateArgs,
309                      SourceRange InstantiationRange) : SemaRef(SemaRef) {
310  Invalid = false;
311
312  ActiveTemplateInstantiation Inst;
313  Inst.Kind = ActiveTemplateInstantiation::DefaultTemplateArgumentChecking;
314  Inst.PointOfInstantiation = PointOfInstantiation;
315  Inst.Template = Template;
316  Inst.Entity = reinterpret_cast<uintptr_t>(Param);
317  Inst.TemplateArgs = TemplateArgs;
318  Inst.NumTemplateArgs = NumTemplateArgs;
319  Inst.InstantiationRange = InstantiationRange;
320  SemaRef.ActiveTemplateInstantiations.push_back(Inst);
321
322  assert(!Inst.isInstantiationRecord());
323  ++SemaRef.NonInstantiationEntries;
324}
325
326void Sema::InstantiatingTemplate::Clear() {
327  if (!Invalid) {
328    if (!SemaRef.ActiveTemplateInstantiations.back().isInstantiationRecord()) {
329      assert(SemaRef.NonInstantiationEntries > 0);
330      --SemaRef.NonInstantiationEntries;
331    }
332
333    SemaRef.ActiveTemplateInstantiations.pop_back();
334    Invalid = true;
335  }
336}
337
338bool Sema::InstantiatingTemplate::CheckInstantiationDepth(
339                                        SourceLocation PointOfInstantiation,
340                                           SourceRange InstantiationRange) {
341  assert(SemaRef.NonInstantiationEntries <=
342                                   SemaRef.ActiveTemplateInstantiations.size());
343  if ((SemaRef.ActiveTemplateInstantiations.size() -
344          SemaRef.NonInstantiationEntries)
345        <= SemaRef.getLangOptions().InstantiationDepth)
346    return false;
347
348  SemaRef.Diag(PointOfInstantiation,
349               diag::err_template_recursion_depth_exceeded)
350    << SemaRef.getLangOptions().InstantiationDepth
351    << InstantiationRange;
352  SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth)
353    << SemaRef.getLangOptions().InstantiationDepth;
354  return true;
355}
356
357/// \brief Prints the current instantiation stack through a series of
358/// notes.
359void Sema::PrintInstantiationStack() {
360  // Determine which template instantiations to skip, if any.
361  unsigned SkipStart = ActiveTemplateInstantiations.size(), SkipEnd = SkipStart;
362  unsigned Limit = Diags.getTemplateBacktraceLimit();
363  if (Limit && Limit < ActiveTemplateInstantiations.size()) {
364    SkipStart = Limit / 2 + Limit % 2;
365    SkipEnd = ActiveTemplateInstantiations.size() - Limit / 2;
366  }
367
368  // FIXME: In all of these cases, we need to show the template arguments
369  unsigned InstantiationIdx = 0;
370  for (llvm::SmallVector<ActiveTemplateInstantiation, 16>::reverse_iterator
371         Active = ActiveTemplateInstantiations.rbegin(),
372         ActiveEnd = ActiveTemplateInstantiations.rend();
373       Active != ActiveEnd;
374       ++Active, ++InstantiationIdx) {
375    // Skip this instantiation?
376    if (InstantiationIdx >= SkipStart && InstantiationIdx < SkipEnd) {
377      if (InstantiationIdx == SkipStart) {
378        // Note that we're skipping instantiations.
379        Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
380                     diag::note_instantiation_contexts_suppressed)
381          << unsigned(ActiveTemplateInstantiations.size() - Limit);
382      }
383      continue;
384    }
385
386    switch (Active->Kind) {
387    case ActiveTemplateInstantiation::TemplateInstantiation: {
388      Decl *D = reinterpret_cast<Decl *>(Active->Entity);
389      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
390        unsigned DiagID = diag::note_template_member_class_here;
391        if (isa<ClassTemplateSpecializationDecl>(Record))
392          DiagID = diag::note_template_class_instantiation_here;
393        Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
394                     DiagID)
395          << Context.getTypeDeclType(Record)
396          << Active->InstantiationRange;
397      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
398        unsigned DiagID;
399        if (Function->getPrimaryTemplate())
400          DiagID = diag::note_function_template_spec_here;
401        else
402          DiagID = diag::note_template_member_function_here;
403        Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
404                     DiagID)
405          << Function
406          << Active->InstantiationRange;
407      } else {
408        Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
409                     diag::note_template_static_data_member_def_here)
410          << cast<VarDecl>(D)
411          << Active->InstantiationRange;
412      }
413      break;
414    }
415
416    case ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation: {
417      TemplateDecl *Template = cast<TemplateDecl>((Decl *)Active->Entity);
418      std::string TemplateArgsStr
419        = TemplateSpecializationType::PrintTemplateArgumentList(
420                                                         Active->TemplateArgs,
421                                                      Active->NumTemplateArgs,
422                                                      Context.PrintingPolicy);
423      Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
424                   diag::note_default_arg_instantiation_here)
425        << (Template->getNameAsString() + TemplateArgsStr)
426        << Active->InstantiationRange;
427      break;
428    }
429
430    case ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution: {
431      FunctionTemplateDecl *FnTmpl
432        = cast<FunctionTemplateDecl>((Decl *)Active->Entity);
433      Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
434                   diag::note_explicit_template_arg_substitution_here)
435        << FnTmpl
436        << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(),
437                                           Active->TemplateArgs,
438                                           Active->NumTemplateArgs)
439        << Active->InstantiationRange;
440      break;
441    }
442
443    case ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution:
444      if (ClassTemplatePartialSpecializationDecl *PartialSpec
445            = dyn_cast<ClassTemplatePartialSpecializationDecl>(
446                                                    (Decl *)Active->Entity)) {
447        Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
448                     diag::note_partial_spec_deduct_instantiation_here)
449          << Context.getTypeDeclType(PartialSpec)
450          << getTemplateArgumentBindingsText(
451                                         PartialSpec->getTemplateParameters(),
452                                             Active->TemplateArgs,
453                                             Active->NumTemplateArgs)
454          << Active->InstantiationRange;
455      } else {
456        FunctionTemplateDecl *FnTmpl
457          = cast<FunctionTemplateDecl>((Decl *)Active->Entity);
458        Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
459                     diag::note_function_template_deduction_instantiation_here)
460          << FnTmpl
461          << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(),
462                                             Active->TemplateArgs,
463                                             Active->NumTemplateArgs)
464          << Active->InstantiationRange;
465      }
466      break;
467
468    case ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation: {
469      ParmVarDecl *Param = cast<ParmVarDecl>((Decl *)Active->Entity);
470      FunctionDecl *FD = cast<FunctionDecl>(Param->getDeclContext());
471
472      std::string TemplateArgsStr
473        = TemplateSpecializationType::PrintTemplateArgumentList(
474                                                         Active->TemplateArgs,
475                                                      Active->NumTemplateArgs,
476                                                      Context.PrintingPolicy);
477      Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
478                   diag::note_default_function_arg_instantiation_here)
479        << (FD->getNameAsString() + TemplateArgsStr)
480        << Active->InstantiationRange;
481      break;
482    }
483
484    case ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution: {
485      NamedDecl *Parm = cast<NamedDecl>((Decl *)Active->Entity);
486      std::string Name;
487      if (!Parm->getName().empty())
488        Name = std::string(" '") + Parm->getName().str() + "'";
489
490      Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
491                   diag::note_prior_template_arg_substitution)
492        << isa<TemplateTemplateParmDecl>(Parm)
493        << Name
494        << getTemplateArgumentBindingsText(
495                                    Active->Template->getTemplateParameters(),
496                                           Active->TemplateArgs,
497                                           Active->NumTemplateArgs)
498        << Active->InstantiationRange;
499      break;
500    }
501
502    case ActiveTemplateInstantiation::DefaultTemplateArgumentChecking: {
503      Diags.Report(FullSourceLoc(Active->PointOfInstantiation, SourceMgr),
504                   diag::note_template_default_arg_checking)
505        << getTemplateArgumentBindingsText(
506                                     Active->Template->getTemplateParameters(),
507                                           Active->TemplateArgs,
508                                           Active->NumTemplateArgs)
509        << Active->InstantiationRange;
510      break;
511    }
512    }
513  }
514}
515
516bool Sema::isSFINAEContext() const {
517  using llvm::SmallVector;
518  for (SmallVector<ActiveTemplateInstantiation, 16>::const_reverse_iterator
519         Active = ActiveTemplateInstantiations.rbegin(),
520         ActiveEnd = ActiveTemplateInstantiations.rend();
521       Active != ActiveEnd;
522       ++Active)
523  {
524    switch(Active->Kind) {
525    case ActiveTemplateInstantiation::TemplateInstantiation:
526    case ActiveTemplateInstantiation::DefaultFunctionArgumentInstantiation:
527      // This is a template instantiation, so there is no SFINAE.
528      return false;
529
530    case ActiveTemplateInstantiation::DefaultTemplateArgumentInstantiation:
531    case ActiveTemplateInstantiation::PriorTemplateArgumentSubstitution:
532    case ActiveTemplateInstantiation::DefaultTemplateArgumentChecking:
533      // A default template argument instantiation and substitution into
534      // template parameters with arguments for prior parameters may or may
535      // not be a SFINAE context; look further up the stack.
536      break;
537
538    case ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution:
539    case ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution:
540      // We're either substitution explicitly-specified template arguments
541      // or deduced template arguments, so SFINAE applies.
542      return true;
543    }
544  }
545
546  return false;
547}
548
549//===----------------------------------------------------------------------===/
550// Template Instantiation for Types
551//===----------------------------------------------------------------------===/
552namespace {
553  class TemplateInstantiator : public TreeTransform<TemplateInstantiator> {
554    const MultiLevelTemplateArgumentList &TemplateArgs;
555    SourceLocation Loc;
556    DeclarationName Entity;
557
558  public:
559    typedef TreeTransform<TemplateInstantiator> inherited;
560
561    TemplateInstantiator(Sema &SemaRef,
562                         const MultiLevelTemplateArgumentList &TemplateArgs,
563                         SourceLocation Loc,
564                         DeclarationName Entity)
565      : inherited(SemaRef), TemplateArgs(TemplateArgs), Loc(Loc),
566        Entity(Entity) { }
567
568    /// \brief Determine whether the given type \p T has already been
569    /// transformed.
570    ///
571    /// For the purposes of template instantiation, a type has already been
572    /// transformed if it is NULL or if it is not dependent.
573    bool AlreadyTransformed(QualType T);
574
575    /// \brief Returns the location of the entity being instantiated, if known.
576    SourceLocation getBaseLocation() { return Loc; }
577
578    /// \brief Returns the name of the entity being instantiated, if any.
579    DeclarationName getBaseEntity() { return Entity; }
580
581    /// \brief Sets the "base" location and entity when that
582    /// information is known based on another transformation.
583    void setBase(SourceLocation Loc, DeclarationName Entity) {
584      this->Loc = Loc;
585      this->Entity = Entity;
586    }
587
588    /// \brief Transform the given declaration by instantiating a reference to
589    /// this declaration.
590    Decl *TransformDecl(SourceLocation Loc, Decl *D);
591
592    /// \brief Transform the definition of the given declaration by
593    /// instantiating it.
594    Decl *TransformDefinition(SourceLocation Loc, Decl *D);
595
596    /// \bried Transform the first qualifier within a scope by instantiating the
597    /// declaration.
598    NamedDecl *TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc);
599
600    /// \brief Rebuild the exception declaration and register the declaration
601    /// as an instantiated local.
602    VarDecl *RebuildExceptionDecl(VarDecl *ExceptionDecl, QualType T,
603                                  TypeSourceInfo *Declarator,
604                                  IdentifierInfo *Name,
605                                  SourceLocation Loc, SourceRange TypeRange);
606
607    /// \brief Rebuild the Objective-C exception declaration and register the
608    /// declaration as an instantiated local.
609    VarDecl *RebuildObjCExceptionDecl(VarDecl *ExceptionDecl,
610                                      TypeSourceInfo *TSInfo, QualType T);
611
612    /// \brief Check for tag mismatches when instantiating an
613    /// elaborated type.
614    QualType RebuildElaboratedType(ElaboratedTypeKeyword Keyword,
615                                   NestedNameSpecifier *NNS, QualType T);
616
617    Sema::OwningExprResult TransformPredefinedExpr(PredefinedExpr *E);
618    Sema::OwningExprResult TransformDeclRefExpr(DeclRefExpr *E);
619    Sema::OwningExprResult TransformCXXDefaultArgExpr(CXXDefaultArgExpr *E);
620    Sema::OwningExprResult TransformTemplateParmRefExpr(DeclRefExpr *E,
621                                                NonTypeTemplateParmDecl *D);
622
623    QualType TransformFunctionProtoType(TypeLocBuilder &TLB,
624                                        FunctionProtoTypeLoc TL,
625                                        QualType ObjectType);
626    ParmVarDecl *TransformFunctionTypeParam(ParmVarDecl *OldParm);
627
628    /// \brief Transforms a template type parameter type by performing
629    /// substitution of the corresponding template type argument.
630    QualType TransformTemplateTypeParmType(TypeLocBuilder &TLB,
631                                           TemplateTypeParmTypeLoc TL,
632                                           QualType ObjectType);
633
634    Sema::OwningExprResult TransformCallExpr(CallExpr *CE) {
635      getSema().CallsUndergoingInstantiation.push_back(CE);
636      OwningExprResult Result =
637          TreeTransform<TemplateInstantiator>::TransformCallExpr(CE);
638      getSema().CallsUndergoingInstantiation.pop_back();
639      return move(Result);
640    }
641  };
642}
643
644bool TemplateInstantiator::AlreadyTransformed(QualType T) {
645  if (T.isNull())
646    return true;
647
648  if (T->isDependentType() || T->isVariablyModifiedType())
649    return false;
650
651  getSema().MarkDeclarationsReferencedInType(Loc, T);
652  return true;
653}
654
655Decl *TemplateInstantiator::TransformDecl(SourceLocation Loc, Decl *D) {
656  if (!D)
657    return 0;
658
659  if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(D)) {
660    if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
661      // If the corresponding template argument is NULL or non-existent, it's
662      // because we are performing instantiation from explicitly-specified
663      // template arguments in a function template, but there were some
664      // arguments left unspecified.
665      if (!TemplateArgs.hasTemplateArgument(TTP->getDepth(),
666                                            TTP->getPosition()))
667        return D;
668
669      TemplateName Template
670        = TemplateArgs(TTP->getDepth(), TTP->getPosition()).getAsTemplate();
671      assert(!Template.isNull() && Template.getAsTemplateDecl() &&
672             "Wrong kind of template template argument");
673      return Template.getAsTemplateDecl();
674    }
675
676    // Fall through to find the instantiated declaration for this template
677    // template parameter.
678  }
679
680  return SemaRef.FindInstantiatedDecl(Loc, cast<NamedDecl>(D), TemplateArgs);
681}
682
683Decl *TemplateInstantiator::TransformDefinition(SourceLocation Loc, Decl *D) {
684  Decl *Inst = getSema().SubstDecl(D, getSema().CurContext, TemplateArgs);
685  if (!Inst)
686    return 0;
687
688  getSema().CurrentInstantiationScope->InstantiatedLocal(D, Inst);
689  return Inst;
690}
691
692NamedDecl *
693TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D,
694                                                     SourceLocation Loc) {
695  // If the first part of the nested-name-specifier was a template type
696  // parameter, instantiate that type parameter down to a tag type.
697  if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) {
698    const TemplateTypeParmType *TTP
699      = cast<TemplateTypeParmType>(getSema().Context.getTypeDeclType(TTPD));
700    if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
701      QualType T = TemplateArgs(TTP->getDepth(), TTP->getIndex()).getAsType();
702      if (T.isNull())
703        return cast_or_null<NamedDecl>(TransformDecl(Loc, D));
704
705      if (const TagType *Tag = T->getAs<TagType>())
706        return Tag->getDecl();
707
708      // The resulting type is not a tag; complain.
709      getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T;
710      return 0;
711    }
712  }
713
714  return cast_or_null<NamedDecl>(TransformDecl(Loc, D));
715}
716
717VarDecl *
718TemplateInstantiator::RebuildExceptionDecl(VarDecl *ExceptionDecl,
719                                           QualType T,
720                                           TypeSourceInfo *Declarator,
721                                           IdentifierInfo *Name,
722                                           SourceLocation Loc,
723                                           SourceRange TypeRange) {
724  VarDecl *Var = inherited::RebuildExceptionDecl(ExceptionDecl, T, Declarator,
725                                                 Name, Loc, TypeRange);
726  if (Var)
727    getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var);
728  return Var;
729}
730
731VarDecl *TemplateInstantiator::RebuildObjCExceptionDecl(VarDecl *ExceptionDecl,
732                                                        TypeSourceInfo *TSInfo,
733                                                        QualType T) {
734  VarDecl *Var = inherited::RebuildObjCExceptionDecl(ExceptionDecl, TSInfo, T);
735  if (Var)
736    getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var);
737  return Var;
738}
739
740QualType
741TemplateInstantiator::RebuildElaboratedType(ElaboratedTypeKeyword Keyword,
742                                            NestedNameSpecifier *NNS,
743                                            QualType T) {
744  if (const TagType *TT = T->getAs<TagType>()) {
745    TagDecl* TD = TT->getDecl();
746
747    // FIXME: this location is very wrong;  we really need typelocs.
748    SourceLocation TagLocation = TD->getTagKeywordLoc();
749
750    // FIXME: type might be anonymous.
751    IdentifierInfo *Id = TD->getIdentifier();
752
753    // TODO: should we even warn on struct/class mismatches for this?  Seems
754    // like it's likely to produce a lot of spurious errors.
755    if (Keyword != ETK_None && Keyword != ETK_Typename) {
756      TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForKeyword(Keyword);
757      if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, TagLocation, *Id)) {
758        SemaRef.Diag(TagLocation, diag::err_use_with_wrong_tag)
759          << Id
760          << FixItHint::CreateReplacement(SourceRange(TagLocation),
761                                          TD->getKindName());
762        SemaRef.Diag(TD->getLocation(), diag::note_previous_use);
763      }
764    }
765  }
766
767  return TreeTransform<TemplateInstantiator>::RebuildElaboratedType(Keyword,
768                                                                    NNS, T);
769}
770
771Sema::OwningExprResult
772TemplateInstantiator::TransformPredefinedExpr(PredefinedExpr *E) {
773  if (!E->isTypeDependent())
774    return SemaRef.Owned(E->Retain());
775
776  FunctionDecl *currentDecl = getSema().getCurFunctionDecl();
777  assert(currentDecl && "Must have current function declaration when "
778                        "instantiating.");
779
780  PredefinedExpr::IdentType IT = E->getIdentType();
781
782  unsigned Length = PredefinedExpr::ComputeName(IT, currentDecl).length();
783
784  llvm::APInt LengthI(32, Length + 1);
785  QualType ResTy = getSema().Context.CharTy.withConst();
786  ResTy = getSema().Context.getConstantArrayType(ResTy, LengthI,
787                                                 ArrayType::Normal, 0);
788  PredefinedExpr *PE =
789    new (getSema().Context) PredefinedExpr(E->getLocation(), ResTy, IT);
790  return getSema().Owned(PE);
791}
792
793Sema::OwningExprResult
794TemplateInstantiator::TransformTemplateParmRefExpr(DeclRefExpr *E,
795                                               NonTypeTemplateParmDecl *NTTP) {
796  // If the corresponding template argument is NULL or non-existent, it's
797  // because we are performing instantiation from explicitly-specified
798  // template arguments in a function template, but there were some
799  // arguments left unspecified.
800  if (!TemplateArgs.hasTemplateArgument(NTTP->getDepth(),
801                                        NTTP->getPosition()))
802    return SemaRef.Owned(E->Retain());
803
804  const TemplateArgument &Arg = TemplateArgs(NTTP->getDepth(),
805                                             NTTP->getPosition());
806
807  // The template argument itself might be an expression, in which
808  // case we just return that expression.
809  if (Arg.getKind() == TemplateArgument::Expression)
810    return SemaRef.Owned(Arg.getAsExpr()->Retain());
811
812  if (Arg.getKind() == TemplateArgument::Declaration) {
813    ValueDecl *VD = cast<ValueDecl>(Arg.getAsDecl());
814
815    // Find the instantiation of the template argument.  This is
816    // required for nested templates.
817    VD = cast_or_null<ValueDecl>(
818                            getSema().FindInstantiatedDecl(E->getLocation(),
819                                                           VD, TemplateArgs));
820    if (!VD)
821      return SemaRef.ExprError();
822
823    // Derive the type we want the substituted decl to have.  This had
824    // better be non-dependent, or these checks will have serious problems.
825    QualType TargetType = SemaRef.SubstType(NTTP->getType(), TemplateArgs,
826                                            E->getLocation(),
827                                            DeclarationName());
828    assert(!TargetType.isNull() && "type substitution failed for param type");
829    assert(!TargetType->isDependentType() && "param type still dependent");
830    return SemaRef.BuildExpressionFromDeclTemplateArgument(Arg,
831                                                           TargetType,
832                                                           E->getLocation());
833  }
834
835  return SemaRef.BuildExpressionFromIntegralTemplateArgument(Arg,
836                                                E->getSourceRange().getBegin());
837}
838
839
840Sema::OwningExprResult
841TemplateInstantiator::TransformDeclRefExpr(DeclRefExpr *E) {
842  NamedDecl *D = E->getDecl();
843  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(D)) {
844    if (NTTP->getDepth() < TemplateArgs.getNumLevels())
845      return TransformTemplateParmRefExpr(E, NTTP);
846
847    // We have a non-type template parameter that isn't fully substituted;
848    // FindInstantiatedDecl will find it in the local instantiation scope.
849  }
850
851  return TreeTransform<TemplateInstantiator>::TransformDeclRefExpr(E);
852}
853
854Sema::OwningExprResult TemplateInstantiator::TransformCXXDefaultArgExpr(
855    CXXDefaultArgExpr *E) {
856  assert(!cast<FunctionDecl>(E->getParam()->getDeclContext())->
857             getDescribedFunctionTemplate() &&
858         "Default arg expressions are never formed in dependent cases.");
859  return SemaRef.BuildCXXDefaultArgExpr(E->getUsedLocation(),
860                           cast<FunctionDecl>(E->getParam()->getDeclContext()),
861                                        E->getParam());
862}
863
864QualType TemplateInstantiator::TransformFunctionProtoType(TypeLocBuilder &TLB,
865                                                        FunctionProtoTypeLoc TL,
866                                                          QualType ObjectType) {
867  // We need a local instantiation scope for this function prototype.
868  Sema::LocalInstantiationScope Scope(SemaRef, /*CombineWithOuterScope=*/true);
869  return inherited::TransformFunctionProtoType(TLB, TL, ObjectType);
870}
871
872ParmVarDecl *
873TemplateInstantiator::TransformFunctionTypeParam(ParmVarDecl *OldParm) {
874  return SemaRef.SubstParmVarDecl(OldParm, TemplateArgs);
875}
876
877QualType
878TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB,
879                                                TemplateTypeParmTypeLoc TL,
880                                                    QualType ObjectType) {
881  TemplateTypeParmType *T = TL.getTypePtr();
882  if (T->getDepth() < TemplateArgs.getNumLevels()) {
883    // Replace the template type parameter with its corresponding
884    // template argument.
885
886    // If the corresponding template argument is NULL or doesn't exist, it's
887    // because we are performing instantiation from explicitly-specified
888    // template arguments in a function template class, but there were some
889    // arguments left unspecified.
890    if (!TemplateArgs.hasTemplateArgument(T->getDepth(), T->getIndex())) {
891      TemplateTypeParmTypeLoc NewTL
892        = TLB.push<TemplateTypeParmTypeLoc>(TL.getType());
893      NewTL.setNameLoc(TL.getNameLoc());
894      return TL.getType();
895    }
896
897    assert(TemplateArgs(T->getDepth(), T->getIndex()).getKind()
898             == TemplateArgument::Type &&
899           "Template argument kind mismatch");
900
901    QualType Replacement
902      = TemplateArgs(T->getDepth(), T->getIndex()).getAsType();
903
904    // TODO: only do this uniquing once, at the start of instantiation.
905    QualType Result
906      = getSema().Context.getSubstTemplateTypeParmType(T, Replacement);
907    SubstTemplateTypeParmTypeLoc NewTL
908      = TLB.push<SubstTemplateTypeParmTypeLoc>(Result);
909    NewTL.setNameLoc(TL.getNameLoc());
910    return Result;
911  }
912
913  // The template type parameter comes from an inner template (e.g.,
914  // the template parameter list of a member template inside the
915  // template we are instantiating). Create a new template type
916  // parameter with the template "level" reduced by one.
917  QualType Result
918    = getSema().Context.getTemplateTypeParmType(T->getDepth()
919                                                 - TemplateArgs.getNumLevels(),
920                                                T->getIndex(),
921                                                T->isParameterPack(),
922                                                T->getName());
923  TemplateTypeParmTypeLoc NewTL = TLB.push<TemplateTypeParmTypeLoc>(Result);
924  NewTL.setNameLoc(TL.getNameLoc());
925  return Result;
926}
927
928/// \brief Perform substitution on the type T with a given set of template
929/// arguments.
930///
931/// This routine substitutes the given template arguments into the
932/// type T and produces the instantiated type.
933///
934/// \param T the type into which the template arguments will be
935/// substituted. If this type is not dependent, it will be returned
936/// immediately.
937///
938/// \param TemplateArgs the template arguments that will be
939/// substituted for the top-level template parameters within T.
940///
941/// \param Loc the location in the source code where this substitution
942/// is being performed. It will typically be the location of the
943/// declarator (if we're instantiating the type of some declaration)
944/// or the location of the type in the source code (if, e.g., we're
945/// instantiating the type of a cast expression).
946///
947/// \param Entity the name of the entity associated with a declaration
948/// being instantiated (if any). May be empty to indicate that there
949/// is no such entity (if, e.g., this is a type that occurs as part of
950/// a cast expression) or that the entity has no name (e.g., an
951/// unnamed function parameter).
952///
953/// \returns If the instantiation succeeds, the instantiated
954/// type. Otherwise, produces diagnostics and returns a NULL type.
955TypeSourceInfo *Sema::SubstType(TypeSourceInfo *T,
956                                const MultiLevelTemplateArgumentList &Args,
957                                SourceLocation Loc,
958                                DeclarationName Entity) {
959  assert(!ActiveTemplateInstantiations.empty() &&
960         "Cannot perform an instantiation without some context on the "
961         "instantiation stack");
962
963  if (!T->getType()->isDependentType() &&
964      !T->getType()->isVariablyModifiedType())
965    return T;
966
967  TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
968  return Instantiator.TransformType(T);
969}
970
971/// Deprecated form of the above.
972QualType Sema::SubstType(QualType T,
973                         const MultiLevelTemplateArgumentList &TemplateArgs,
974                         SourceLocation Loc, DeclarationName Entity) {
975  assert(!ActiveTemplateInstantiations.empty() &&
976         "Cannot perform an instantiation without some context on the "
977         "instantiation stack");
978
979  // If T is not a dependent type or a variably-modified type, there
980  // is nothing to do.
981  if (!T->isDependentType() && !T->isVariablyModifiedType())
982    return T;
983
984  TemplateInstantiator Instantiator(*this, TemplateArgs, Loc, Entity);
985  return Instantiator.TransformType(T);
986}
987
988static bool NeedsInstantiationAsFunctionType(TypeSourceInfo *T) {
989  if (T->getType()->isDependentType() || T->getType()->isVariablyModifiedType())
990    return true;
991
992  TypeLoc TL = T->getTypeLoc();
993  if (!isa<FunctionProtoTypeLoc>(TL))
994    return false;
995
996  FunctionProtoTypeLoc FP = cast<FunctionProtoTypeLoc>(TL);
997  for (unsigned I = 0, E = FP.getNumArgs(); I != E; ++I) {
998    ParmVarDecl *P = FP.getArg(I);
999
1000    // TODO: currently we always rebuild expressions.  When we
1001    // properly get lazier about this, we should use the same
1002    // logic to avoid rebuilding prototypes here.
1003    if (P->hasInit())
1004      return true;
1005  }
1006
1007  return false;
1008}
1009
1010/// A form of SubstType intended specifically for instantiating the
1011/// type of a FunctionDecl.  Its purpose is solely to force the
1012/// instantiation of default-argument expressions.
1013TypeSourceInfo *Sema::SubstFunctionDeclType(TypeSourceInfo *T,
1014                                const MultiLevelTemplateArgumentList &Args,
1015                                SourceLocation Loc,
1016                                DeclarationName Entity) {
1017  assert(!ActiveTemplateInstantiations.empty() &&
1018         "Cannot perform an instantiation without some context on the "
1019         "instantiation stack");
1020
1021  if (!NeedsInstantiationAsFunctionType(T))
1022    return T;
1023
1024  TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
1025
1026  TypeLocBuilder TLB;
1027
1028  TypeLoc TL = T->getTypeLoc();
1029  TLB.reserve(TL.getFullDataSize());
1030
1031  QualType Result = Instantiator.TransformType(TLB, TL, QualType());
1032  if (Result.isNull())
1033    return 0;
1034
1035  return TLB.getTypeSourceInfo(Context, Result);
1036}
1037
1038ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm,
1039                          const MultiLevelTemplateArgumentList &TemplateArgs) {
1040  TypeSourceInfo *OldDI = OldParm->getTypeSourceInfo();
1041  TypeSourceInfo *NewDI = SubstType(OldDI, TemplateArgs, OldParm->getLocation(),
1042                                    OldParm->getDeclName());
1043  if (!NewDI)
1044    return 0;
1045
1046  if (NewDI->getType()->isVoidType()) {
1047    Diag(OldParm->getLocation(), diag::err_param_with_void_type);
1048    return 0;
1049  }
1050
1051  ParmVarDecl *NewParm = CheckParameter(Context.getTranslationUnitDecl(),
1052                                        NewDI, NewDI->getType(),
1053                                        OldParm->getIdentifier(),
1054                                        OldParm->getLocation(),
1055                                        OldParm->getStorageClass(),
1056                                        OldParm->getStorageClassAsWritten());
1057  if (!NewParm)
1058    return 0;
1059
1060  // Mark the (new) default argument as uninstantiated (if any).
1061  if (OldParm->hasUninstantiatedDefaultArg()) {
1062    Expr *Arg = OldParm->getUninstantiatedDefaultArg();
1063    NewParm->setUninstantiatedDefaultArg(Arg);
1064  } else if (Expr *Arg = OldParm->getDefaultArg())
1065    NewParm->setUninstantiatedDefaultArg(Arg);
1066
1067  NewParm->setHasInheritedDefaultArg(OldParm->hasInheritedDefaultArg());
1068
1069  CurrentInstantiationScope->InstantiatedLocal(OldParm, NewParm);
1070  // FIXME: OldParm may come from a FunctionProtoType, in which case CurContext
1071  // can be anything, is this right ?
1072  NewParm->setDeclContext(CurContext);
1073
1074  return NewParm;
1075}
1076
1077/// \brief Perform substitution on the base class specifiers of the
1078/// given class template specialization.
1079///
1080/// Produces a diagnostic and returns true on error, returns false and
1081/// attaches the instantiated base classes to the class template
1082/// specialization if successful.
1083bool
1084Sema::SubstBaseSpecifiers(CXXRecordDecl *Instantiation,
1085                          CXXRecordDecl *Pattern,
1086                          const MultiLevelTemplateArgumentList &TemplateArgs) {
1087  bool Invalid = false;
1088  llvm::SmallVector<CXXBaseSpecifier*, 4> InstantiatedBases;
1089  for (ClassTemplateSpecializationDecl::base_class_iterator
1090         Base = Pattern->bases_begin(), BaseEnd = Pattern->bases_end();
1091       Base != BaseEnd; ++Base) {
1092    if (!Base->getType()->isDependentType()) {
1093      const CXXRecordDecl *BaseDecl =
1094        cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
1095
1096      // Make sure to set the attributes from the base.
1097      SetClassDeclAttributesFromBase(Instantiation, BaseDecl,
1098                                     Base->isVirtual());
1099
1100      InstantiatedBases.push_back(new (Context) CXXBaseSpecifier(*Base));
1101      continue;
1102    }
1103
1104    TypeSourceInfo *BaseTypeLoc = SubstType(Base->getTypeSourceInfo(),
1105                                            TemplateArgs,
1106                                            Base->getSourceRange().getBegin(),
1107                                            DeclarationName());
1108    if (!BaseTypeLoc) {
1109      Invalid = true;
1110      continue;
1111    }
1112
1113    if (CXXBaseSpecifier *InstantiatedBase
1114          = CheckBaseSpecifier(Instantiation,
1115                               Base->getSourceRange(),
1116                               Base->isVirtual(),
1117                               Base->getAccessSpecifierAsWritten(),
1118                               BaseTypeLoc))
1119      InstantiatedBases.push_back(InstantiatedBase);
1120    else
1121      Invalid = true;
1122  }
1123
1124  if (!Invalid &&
1125      AttachBaseSpecifiers(Instantiation, InstantiatedBases.data(),
1126                           InstantiatedBases.size()))
1127    Invalid = true;
1128
1129  return Invalid;
1130}
1131
1132/// \brief Instantiate the definition of a class from a given pattern.
1133///
1134/// \param PointOfInstantiation The point of instantiation within the
1135/// source code.
1136///
1137/// \param Instantiation is the declaration whose definition is being
1138/// instantiated. This will be either a class template specialization
1139/// or a member class of a class template specialization.
1140///
1141/// \param Pattern is the pattern from which the instantiation
1142/// occurs. This will be either the declaration of a class template or
1143/// the declaration of a member class of a class template.
1144///
1145/// \param TemplateArgs The template arguments to be substituted into
1146/// the pattern.
1147///
1148/// \param TSK the kind of implicit or explicit instantiation to perform.
1149///
1150/// \param Complain whether to complain if the class cannot be instantiated due
1151/// to the lack of a definition.
1152///
1153/// \returns true if an error occurred, false otherwise.
1154bool
1155Sema::InstantiateClass(SourceLocation PointOfInstantiation,
1156                       CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
1157                       const MultiLevelTemplateArgumentList &TemplateArgs,
1158                       TemplateSpecializationKind TSK,
1159                       bool Complain) {
1160  bool Invalid = false;
1161
1162  CXXRecordDecl *PatternDef
1163    = cast_or_null<CXXRecordDecl>(Pattern->getDefinition());
1164  if (!PatternDef) {
1165    if (!Complain) {
1166      // Say nothing
1167    } else if (Pattern == Instantiation->getInstantiatedFromMemberClass()) {
1168      Diag(PointOfInstantiation,
1169           diag::err_implicit_instantiate_member_undefined)
1170        << Context.getTypeDeclType(Instantiation);
1171      Diag(Pattern->getLocation(), diag::note_member_of_template_here);
1172    } else {
1173      Diag(PointOfInstantiation, diag::err_template_instantiate_undefined)
1174        << (TSK != TSK_ImplicitInstantiation)
1175        << Context.getTypeDeclType(Instantiation);
1176      Diag(Pattern->getLocation(), diag::note_template_decl_here);
1177    }
1178    return true;
1179  }
1180  Pattern = PatternDef;
1181
1182  // \brief Record the point of instantiation.
1183  if (MemberSpecializationInfo *MSInfo
1184        = Instantiation->getMemberSpecializationInfo()) {
1185    MSInfo->setTemplateSpecializationKind(TSK);
1186    MSInfo->setPointOfInstantiation(PointOfInstantiation);
1187  } else if (ClassTemplateSpecializationDecl *Spec
1188               = dyn_cast<ClassTemplateSpecializationDecl>(Instantiation)) {
1189    Spec->setTemplateSpecializationKind(TSK);
1190    Spec->setPointOfInstantiation(PointOfInstantiation);
1191  }
1192
1193  InstantiatingTemplate Inst(*this, PointOfInstantiation, Instantiation);
1194  if (Inst)
1195    return true;
1196
1197  // Enter the scope of this instantiation. We don't use
1198  // PushDeclContext because we don't have a scope.
1199  ContextRAII SavedContext(*this, Instantiation);
1200  EnterExpressionEvaluationContext EvalContext(*this,
1201                                               Action::PotentiallyEvaluated);
1202
1203  // If this is an instantiation of a local class, merge this local
1204  // instantiation scope with the enclosing scope. Otherwise, every
1205  // instantiation of a class has its own local instantiation scope.
1206  bool MergeWithParentScope = !Instantiation->isDefinedOutsideFunctionOrMethod();
1207  Sema::LocalInstantiationScope Scope(*this, MergeWithParentScope);
1208
1209  // Pull attributes from the pattern onto the instantiation.
1210  InstantiateAttrs(TemplateArgs, Pattern, Instantiation);
1211
1212  // Start the definition of this instantiation.
1213  Instantiation->startDefinition();
1214
1215  Instantiation->setTagKind(Pattern->getTagKind());
1216
1217  // Do substitution on the base class specifiers.
1218  if (SubstBaseSpecifiers(Instantiation, Pattern, TemplateArgs))
1219    Invalid = true;
1220
1221  llvm::SmallVector<DeclPtrTy, 4> Fields;
1222  for (RecordDecl::decl_iterator Member = Pattern->decls_begin(),
1223         MemberEnd = Pattern->decls_end();
1224       Member != MemberEnd; ++Member) {
1225    Decl *NewMember = SubstDecl(*Member, Instantiation, TemplateArgs);
1226    if (NewMember) {
1227      if (FieldDecl *Field = dyn_cast<FieldDecl>(NewMember))
1228        Fields.push_back(DeclPtrTy::make(Field));
1229      else if (NewMember->isInvalidDecl())
1230        Invalid = true;
1231    } else {
1232      // FIXME: Eventually, a NULL return will mean that one of the
1233      // instantiations was a semantic disaster, and we'll want to set Invalid =
1234      // true. For now, we expect to skip some members that we can't yet handle.
1235    }
1236  }
1237
1238  // Finish checking fields.
1239  ActOnFields(0, Instantiation->getLocation(), DeclPtrTy::make(Instantiation),
1240              Fields.data(), Fields.size(), SourceLocation(), SourceLocation(),
1241              0);
1242  CheckCompletedCXXClass(Instantiation);
1243  if (Instantiation->isInvalidDecl())
1244    Invalid = true;
1245
1246  // Exit the scope of this instantiation.
1247  SavedContext.pop();
1248
1249  if (!Invalid) {
1250    Consumer.HandleTagDeclDefinition(Instantiation);
1251
1252    // Always emit the vtable for an explicit instantiation definition
1253    // of a polymorphic class template specialization.
1254    if (TSK == TSK_ExplicitInstantiationDefinition)
1255      MarkVTableUsed(PointOfInstantiation, Instantiation, true);
1256  }
1257
1258  return Invalid;
1259}
1260
1261bool
1262Sema::InstantiateClassTemplateSpecialization(
1263                           SourceLocation PointOfInstantiation,
1264                           ClassTemplateSpecializationDecl *ClassTemplateSpec,
1265                           TemplateSpecializationKind TSK,
1266                           bool Complain) {
1267  // Perform the actual instantiation on the canonical declaration.
1268  ClassTemplateSpec = cast<ClassTemplateSpecializationDecl>(
1269                                         ClassTemplateSpec->getCanonicalDecl());
1270
1271  // Check whether we have already instantiated or specialized this class
1272  // template specialization.
1273  if (ClassTemplateSpec->getSpecializationKind() != TSK_Undeclared) {
1274    if (ClassTemplateSpec->getSpecializationKind() ==
1275          TSK_ExplicitInstantiationDeclaration &&
1276        TSK == TSK_ExplicitInstantiationDefinition) {
1277      // An explicit instantiation definition follows an explicit instantiation
1278      // declaration (C++0x [temp.explicit]p10); go ahead and perform the
1279      // explicit instantiation.
1280      ClassTemplateSpec->setSpecializationKind(TSK);
1281
1282      // If this is an explicit instantiation definition, mark the
1283      // vtable as used.
1284      if (TSK == TSK_ExplicitInstantiationDefinition)
1285        MarkVTableUsed(PointOfInstantiation, ClassTemplateSpec, true);
1286
1287      return false;
1288    }
1289
1290    // We can only instantiate something that hasn't already been
1291    // instantiated or specialized. Fail without any diagnostics: our
1292    // caller will provide an error message.
1293    return true;
1294  }
1295
1296  if (ClassTemplateSpec->isInvalidDecl())
1297    return true;
1298
1299  ClassTemplateDecl *Template = ClassTemplateSpec->getSpecializedTemplate();
1300  CXXRecordDecl *Pattern = 0;
1301
1302  // C++ [temp.class.spec.match]p1:
1303  //   When a class template is used in a context that requires an
1304  //   instantiation of the class, it is necessary to determine
1305  //   whether the instantiation is to be generated using the primary
1306  //   template or one of the partial specializations. This is done by
1307  //   matching the template arguments of the class template
1308  //   specialization with the template argument lists of the partial
1309  //   specializations.
1310  typedef std::pair<ClassTemplatePartialSpecializationDecl *,
1311                    TemplateArgumentList *> MatchResult;
1312  llvm::SmallVector<MatchResult, 4> Matched;
1313  llvm::SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs;
1314  Template->getPartialSpecializations(PartialSpecs);
1315  for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I) {
1316    ClassTemplatePartialSpecializationDecl *Partial = PartialSpecs[I];
1317    TemplateDeductionInfo Info(Context, PointOfInstantiation);
1318    if (TemplateDeductionResult Result
1319          = DeduceTemplateArguments(Partial,
1320                                    ClassTemplateSpec->getTemplateArgs(),
1321                                    Info)) {
1322      // FIXME: Store the failed-deduction information for use in
1323      // diagnostics, later.
1324      (void)Result;
1325    } else {
1326      Matched.push_back(std::make_pair(Partial, Info.take()));
1327    }
1328  }
1329
1330  if (Matched.size() >= 1) {
1331    llvm::SmallVector<MatchResult, 4>::iterator Best = Matched.begin();
1332    if (Matched.size() == 1) {
1333      //   -- If exactly one matching specialization is found, the
1334      //      instantiation is generated from that specialization.
1335      // We don't need to do anything for this.
1336    } else {
1337      //   -- If more than one matching specialization is found, the
1338      //      partial order rules (14.5.4.2) are used to determine
1339      //      whether one of the specializations is more specialized
1340      //      than the others. If none of the specializations is more
1341      //      specialized than all of the other matching
1342      //      specializations, then the use of the class template is
1343      //      ambiguous and the program is ill-formed.
1344      for (llvm::SmallVector<MatchResult, 4>::iterator P = Best + 1,
1345                                                    PEnd = Matched.end();
1346           P != PEnd; ++P) {
1347        if (getMoreSpecializedPartialSpecialization(P->first, Best->first,
1348                                                    PointOfInstantiation)
1349              == P->first)
1350          Best = P;
1351      }
1352
1353      // Determine if the best partial specialization is more specialized than
1354      // the others.
1355      bool Ambiguous = false;
1356      for (llvm::SmallVector<MatchResult, 4>::iterator P = Matched.begin(),
1357                                                    PEnd = Matched.end();
1358           P != PEnd; ++P) {
1359        if (P != Best &&
1360            getMoreSpecializedPartialSpecialization(P->first, Best->first,
1361                                                    PointOfInstantiation)
1362              != Best->first) {
1363          Ambiguous = true;
1364          break;
1365        }
1366      }
1367
1368      if (Ambiguous) {
1369        // Partial ordering did not produce a clear winner. Complain.
1370        ClassTemplateSpec->setInvalidDecl();
1371        Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous)
1372          << ClassTemplateSpec;
1373
1374        // Print the matching partial specializations.
1375        for (llvm::SmallVector<MatchResult, 4>::iterator P = Matched.begin(),
1376                                                      PEnd = Matched.end();
1377             P != PEnd; ++P)
1378          Diag(P->first->getLocation(), diag::note_partial_spec_match)
1379            << getTemplateArgumentBindingsText(P->first->getTemplateParameters(),
1380                                               *P->second);
1381
1382        return true;
1383      }
1384    }
1385
1386    // Instantiate using the best class template partial specialization.
1387    ClassTemplatePartialSpecializationDecl *OrigPartialSpec = Best->first;
1388    while (OrigPartialSpec->getInstantiatedFromMember()) {
1389      // If we've found an explicit specialization of this class template,
1390      // stop here and use that as the pattern.
1391      if (OrigPartialSpec->isMemberSpecialization())
1392        break;
1393
1394      OrigPartialSpec = OrigPartialSpec->getInstantiatedFromMember();
1395    }
1396
1397    Pattern = OrigPartialSpec;
1398    ClassTemplateSpec->setInstantiationOf(Best->first, Best->second);
1399  } else {
1400    //   -- If no matches are found, the instantiation is generated
1401    //      from the primary template.
1402    ClassTemplateDecl *OrigTemplate = Template;
1403    while (OrigTemplate->getInstantiatedFromMemberTemplate()) {
1404      // If we've found an explicit specialization of this class template,
1405      // stop here and use that as the pattern.
1406      if (OrigTemplate->isMemberSpecialization())
1407        break;
1408
1409      OrigTemplate = OrigTemplate->getInstantiatedFromMemberTemplate();
1410    }
1411
1412    Pattern = OrigTemplate->getTemplatedDecl();
1413  }
1414
1415  bool Result = InstantiateClass(PointOfInstantiation, ClassTemplateSpec,
1416                                 Pattern,
1417                                getTemplateInstantiationArgs(ClassTemplateSpec),
1418                                 TSK,
1419                                 Complain);
1420
1421  return Result;
1422}
1423
1424/// \brief Instantiates the definitions of all of the member
1425/// of the given class, which is an instantiation of a class template
1426/// or a member class of a template.
1427void
1428Sema::InstantiateClassMembers(SourceLocation PointOfInstantiation,
1429                              CXXRecordDecl *Instantiation,
1430                        const MultiLevelTemplateArgumentList &TemplateArgs,
1431                              TemplateSpecializationKind TSK) {
1432  for (DeclContext::decl_iterator D = Instantiation->decls_begin(),
1433                               DEnd = Instantiation->decls_end();
1434       D != DEnd; ++D) {
1435    bool SuppressNew = false;
1436    if (FunctionDecl *Function = dyn_cast<FunctionDecl>(*D)) {
1437      if (FunctionDecl *Pattern
1438            = Function->getInstantiatedFromMemberFunction()) {
1439        MemberSpecializationInfo *MSInfo
1440          = Function->getMemberSpecializationInfo();
1441        assert(MSInfo && "No member specialization information?");
1442        if (MSInfo->getTemplateSpecializationKind()
1443                                                 == TSK_ExplicitSpecialization)
1444          continue;
1445
1446        if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
1447                                                   Function,
1448                                        MSInfo->getTemplateSpecializationKind(),
1449                                              MSInfo->getPointOfInstantiation(),
1450                                                   SuppressNew) ||
1451            SuppressNew)
1452          continue;
1453
1454        if (Function->hasBody())
1455          continue;
1456
1457        if (TSK == TSK_ExplicitInstantiationDefinition) {
1458          // C++0x [temp.explicit]p8:
1459          //   An explicit instantiation definition that names a class template
1460          //   specialization explicitly instantiates the class template
1461          //   specialization and is only an explicit instantiation definition
1462          //   of members whose definition is visible at the point of
1463          //   instantiation.
1464          if (!Pattern->hasBody())
1465            continue;
1466
1467          Function->setTemplateSpecializationKind(TSK, PointOfInstantiation);
1468
1469          InstantiateFunctionDefinition(PointOfInstantiation, Function);
1470        } else {
1471          Function->setTemplateSpecializationKind(TSK, PointOfInstantiation);
1472        }
1473      }
1474    } else if (VarDecl *Var = dyn_cast<VarDecl>(*D)) {
1475      if (Var->isStaticDataMember()) {
1476        MemberSpecializationInfo *MSInfo = Var->getMemberSpecializationInfo();
1477        assert(MSInfo && "No member specialization information?");
1478        if (MSInfo->getTemplateSpecializationKind()
1479                                                 == TSK_ExplicitSpecialization)
1480          continue;
1481
1482        if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
1483                                                   Var,
1484                                        MSInfo->getTemplateSpecializationKind(),
1485                                              MSInfo->getPointOfInstantiation(),
1486                                                   SuppressNew) ||
1487            SuppressNew)
1488          continue;
1489
1490        if (TSK == TSK_ExplicitInstantiationDefinition) {
1491          // C++0x [temp.explicit]p8:
1492          //   An explicit instantiation definition that names a class template
1493          //   specialization explicitly instantiates the class template
1494          //   specialization and is only an explicit instantiation definition
1495          //   of members whose definition is visible at the point of
1496          //   instantiation.
1497          if (!Var->getInstantiatedFromStaticDataMember()
1498                                                     ->getOutOfLineDefinition())
1499            continue;
1500
1501          Var->setTemplateSpecializationKind(TSK, PointOfInstantiation);
1502          InstantiateStaticDataMemberDefinition(PointOfInstantiation, Var);
1503        } else {
1504          Var->setTemplateSpecializationKind(TSK, PointOfInstantiation);
1505        }
1506      }
1507    } else if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(*D)) {
1508      // Always skip the injected-class-name, along with any
1509      // redeclarations of nested classes, since both would cause us
1510      // to try to instantiate the members of a class twice.
1511      if (Record->isInjectedClassName() || Record->getPreviousDeclaration())
1512        continue;
1513
1514      MemberSpecializationInfo *MSInfo = Record->getMemberSpecializationInfo();
1515      assert(MSInfo && "No member specialization information?");
1516
1517      if (MSInfo->getTemplateSpecializationKind()
1518                                                == TSK_ExplicitSpecialization)
1519        continue;
1520
1521      if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
1522                                                 Record,
1523                                        MSInfo->getTemplateSpecializationKind(),
1524                                              MSInfo->getPointOfInstantiation(),
1525                                                 SuppressNew) ||
1526          SuppressNew)
1527        continue;
1528
1529      CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass();
1530      assert(Pattern && "Missing instantiated-from-template information");
1531
1532      if (!Record->getDefinition()) {
1533        if (!Pattern->getDefinition()) {
1534          // C++0x [temp.explicit]p8:
1535          //   An explicit instantiation definition that names a class template
1536          //   specialization explicitly instantiates the class template
1537          //   specialization and is only an explicit instantiation definition
1538          //   of members whose definition is visible at the point of
1539          //   instantiation.
1540          if (TSK == TSK_ExplicitInstantiationDeclaration) {
1541            MSInfo->setTemplateSpecializationKind(TSK);
1542            MSInfo->setPointOfInstantiation(PointOfInstantiation);
1543          }
1544
1545          continue;
1546        }
1547
1548        InstantiateClass(PointOfInstantiation, Record, Pattern,
1549                         TemplateArgs,
1550                         TSK);
1551      }
1552
1553      Pattern = cast_or_null<CXXRecordDecl>(Record->getDefinition());
1554      if (Pattern)
1555        InstantiateClassMembers(PointOfInstantiation, Pattern, TemplateArgs,
1556                                TSK);
1557    }
1558  }
1559}
1560
1561/// \brief Instantiate the definitions of all of the members of the
1562/// given class template specialization, which was named as part of an
1563/// explicit instantiation.
1564void
1565Sema::InstantiateClassTemplateSpecializationMembers(
1566                                           SourceLocation PointOfInstantiation,
1567                            ClassTemplateSpecializationDecl *ClassTemplateSpec,
1568                                               TemplateSpecializationKind TSK) {
1569  // C++0x [temp.explicit]p7:
1570  //   An explicit instantiation that names a class template
1571  //   specialization is an explicit instantion of the same kind
1572  //   (declaration or definition) of each of its members (not
1573  //   including members inherited from base classes) that has not
1574  //   been previously explicitly specialized in the translation unit
1575  //   containing the explicit instantiation, except as described
1576  //   below.
1577  InstantiateClassMembers(PointOfInstantiation, ClassTemplateSpec,
1578                          getTemplateInstantiationArgs(ClassTemplateSpec),
1579                          TSK);
1580}
1581
1582Sema::OwningStmtResult
1583Sema::SubstStmt(Stmt *S, const MultiLevelTemplateArgumentList &TemplateArgs) {
1584  if (!S)
1585    return Owned(S);
1586
1587  TemplateInstantiator Instantiator(*this, TemplateArgs,
1588                                    SourceLocation(),
1589                                    DeclarationName());
1590  return Instantiator.TransformStmt(S);
1591}
1592
1593Sema::OwningExprResult
1594Sema::SubstExpr(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs) {
1595  if (!E)
1596    return Owned(E);
1597
1598  TemplateInstantiator Instantiator(*this, TemplateArgs,
1599                                    SourceLocation(),
1600                                    DeclarationName());
1601  return Instantiator.TransformExpr(E);
1602}
1603
1604/// \brief Do template substitution on a nested-name-specifier.
1605NestedNameSpecifier *
1606Sema::SubstNestedNameSpecifier(NestedNameSpecifier *NNS,
1607                               SourceRange Range,
1608                         const MultiLevelTemplateArgumentList &TemplateArgs) {
1609  TemplateInstantiator Instantiator(*this, TemplateArgs, Range.getBegin(),
1610                                    DeclarationName());
1611  return Instantiator.TransformNestedNameSpecifier(NNS, Range);
1612}
1613
1614/// \brief Do template substitution on declaration name info.
1615DeclarationNameInfo
1616Sema::SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
1617                         const MultiLevelTemplateArgumentList &TemplateArgs) {
1618  TemplateInstantiator Instantiator(*this, TemplateArgs, NameInfo.getLoc(),
1619                                    NameInfo.getName());
1620  return Instantiator.TransformDeclarationNameInfo(NameInfo);
1621}
1622
1623TemplateName
1624Sema::SubstTemplateName(TemplateName Name, SourceLocation Loc,
1625                        const MultiLevelTemplateArgumentList &TemplateArgs) {
1626  TemplateInstantiator Instantiator(*this, TemplateArgs, Loc,
1627                                    DeclarationName());
1628  return Instantiator.TransformTemplateName(Name);
1629}
1630
1631bool Sema::Subst(const TemplateArgumentLoc &Input, TemplateArgumentLoc &Output,
1632                 const MultiLevelTemplateArgumentList &TemplateArgs) {
1633  TemplateInstantiator Instantiator(*this, TemplateArgs, SourceLocation(),
1634                                    DeclarationName());
1635
1636  return Instantiator.TransformTemplateArgument(Input, Output);
1637}
1638
1639Decl *Sema::LocalInstantiationScope::getInstantiationOf(const Decl *D) {
1640  for (LocalInstantiationScope *Current = this; Current;
1641       Current = Current->Outer) {
1642    // Check if we found something within this scope.
1643    llvm::DenseMap<const Decl *, Decl *>::iterator Found
1644      = Current->LocalDecls.find(D);
1645    if (Found != Current->LocalDecls.end())
1646      return Found->second;
1647
1648    // If we aren't combined with our outer scope, we're done.
1649    if (!Current->CombineWithOuterScope)
1650      break;
1651  }
1652
1653  assert(D->isInvalidDecl() &&
1654         "declaration was not instantiated in this scope!");
1655  return 0;
1656}
1657
1658void Sema::LocalInstantiationScope::InstantiatedLocal(const Decl *D,
1659                                                      Decl *Inst) {
1660  Decl *&Stored = LocalDecls[D];
1661  assert((!Stored || Stored == Inst)&& "Already instantiated this local");
1662  Stored = Inst;
1663}
1664