1 //===--- SemaTemplateInstantiateDecl.cpp - C++ Template Decl 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 for declarations.
10 //
11 //===----------------------------------------------------------------------===/
12 #include "clang/Sema/SemaInternal.h"
13 #include "clang/AST/ASTConsumer.h"
14 #include "clang/AST/ASTContext.h"
15 #include "clang/AST/DeclTemplate.h"
16 #include "clang/AST/DeclVisitor.h"
17 #include "clang/AST/DependentDiagnostic.h"
18 #include "clang/AST/Expr.h"
19 #include "clang/AST/ExprCXX.h"
20 #include "clang/AST/TypeLoc.h"
21 #include "clang/Lex/Preprocessor.h"
22 #include "clang/Sema/Lookup.h"
23 #include "clang/Sema/PrettyDeclStackTrace.h"
24 #include "clang/Sema/Template.h"
25 
26 using namespace clang;
27 
28 static bool isDeclWithinFunction(const Decl *D) {
29   const DeclContext *DC = D->getDeclContext();
30   if (DC->isFunctionOrMethod())
31     return true;
32 
33   if (DC->isRecord())
34     return cast<CXXRecordDecl>(DC)->isLocalClass();
35 
36   return false;
37 }
38 
39 bool TemplateDeclInstantiator::SubstQualifier(const DeclaratorDecl *OldDecl,
40                                               DeclaratorDecl *NewDecl) {
41   if (!OldDecl->getQualifierLoc())
42     return false;
43 
44   NestedNameSpecifierLoc NewQualifierLoc
45     = SemaRef.SubstNestedNameSpecifierLoc(OldDecl->getQualifierLoc(),
46                                           TemplateArgs);
47 
48   if (!NewQualifierLoc)
49     return true;
50 
51   NewDecl->setQualifierInfo(NewQualifierLoc);
52   return false;
53 }
54 
55 bool TemplateDeclInstantiator::SubstQualifier(const TagDecl *OldDecl,
56                                               TagDecl *NewDecl) {
57   if (!OldDecl->getQualifierLoc())
58     return false;
59 
60   NestedNameSpecifierLoc NewQualifierLoc
61   = SemaRef.SubstNestedNameSpecifierLoc(OldDecl->getQualifierLoc(),
62                                         TemplateArgs);
63 
64   if (!NewQualifierLoc)
65     return true;
66 
67   NewDecl->setQualifierInfo(NewQualifierLoc);
68   return false;
69 }
70 
71 // Include attribute instantiation code.
72 #include "clang/Sema/AttrTemplateInstantiate.inc"
73 
74 static void instantiateDependentAlignedAttr(
75     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
76     const AlignedAttr *Aligned, Decl *New, bool IsPackExpansion) {
77   if (Aligned->isAlignmentExpr()) {
78     // The alignment expression is a constant expression.
79     EnterExpressionEvaluationContext Unevaluated(S, Sema::ConstantEvaluated);
80     ExprResult Result = S.SubstExpr(Aligned->getAlignmentExpr(), TemplateArgs);
81     if (!Result.isInvalid())
82       S.AddAlignedAttr(Aligned->getLocation(), New, Result.takeAs<Expr>(),
83                        Aligned->getSpellingListIndex(), IsPackExpansion);
84   } else {
85     TypeSourceInfo *Result = S.SubstType(Aligned->getAlignmentType(),
86                                          TemplateArgs, Aligned->getLocation(),
87                                          DeclarationName());
88     if (Result)
89       S.AddAlignedAttr(Aligned->getLocation(), New, Result,
90                        Aligned->getSpellingListIndex(), IsPackExpansion);
91   }
92 }
93 
94 static void instantiateDependentAlignedAttr(
95     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
96     const AlignedAttr *Aligned, Decl *New) {
97   if (!Aligned->isPackExpansion()) {
98     instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, false);
99     return;
100   }
101 
102   SmallVector<UnexpandedParameterPack, 2> Unexpanded;
103   if (Aligned->isAlignmentExpr())
104     S.collectUnexpandedParameterPacks(Aligned->getAlignmentExpr(),
105                                       Unexpanded);
106   else
107     S.collectUnexpandedParameterPacks(Aligned->getAlignmentType()->getTypeLoc(),
108                                       Unexpanded);
109   assert(!Unexpanded.empty() && "Pack expansion without parameter packs?");
110 
111   // Determine whether we can expand this attribute pack yet.
112   bool Expand = true, RetainExpansion = false;
113   Optional<unsigned> NumExpansions;
114   // FIXME: Use the actual location of the ellipsis.
115   SourceLocation EllipsisLoc = Aligned->getLocation();
116   if (S.CheckParameterPacksForExpansion(EllipsisLoc, Aligned->getRange(),
117                                         Unexpanded, TemplateArgs, Expand,
118                                         RetainExpansion, NumExpansions))
119     return;
120 
121   if (!Expand) {
122     Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, -1);
123     instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, true);
124   } else {
125     for (unsigned I = 0; I != *NumExpansions; ++I) {
126       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(S, I);
127       instantiateDependentAlignedAttr(S, TemplateArgs, Aligned, New, false);
128     }
129   }
130 }
131 
132 static void instantiateDependentEnableIfAttr(
133     Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs,
134     const EnableIfAttr *A, const Decl *Tmpl, Decl *New) {
135   Expr *Cond = 0;
136   {
137     EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
138     ExprResult Result = S.SubstExpr(A->getCond(), TemplateArgs);
139     if (Result.isInvalid())
140       return;
141     Cond = Result.takeAs<Expr>();
142   }
143   if (A->getCond()->isTypeDependent() && !Cond->isTypeDependent()) {
144     ExprResult Converted = S.PerformContextuallyConvertToBool(Cond);
145     if (Converted.isInvalid())
146       return;
147     Cond = Converted.take();
148   }
149 
150   SmallVector<PartialDiagnosticAt, 8> Diags;
151   if (A->getCond()->isValueDependent() && !Cond->isValueDependent() &&
152       !Expr::isPotentialConstantExprUnevaluated(Cond, cast<FunctionDecl>(Tmpl),
153                                                 Diags)) {
154     S.Diag(A->getLocation(), diag::err_enable_if_never_constant_expr);
155     for (int I = 0, N = Diags.size(); I != N; ++I)
156       S.Diag(Diags[I].first, Diags[I].second);
157     return;
158   }
159 
160   EnableIfAttr *EIA = new (S.getASTContext())
161                         EnableIfAttr(A->getLocation(), S.getASTContext(), Cond,
162                                      A->getMessage(),
163                                      A->getSpellingListIndex());
164   New->addAttr(EIA);
165 }
166 
167 void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
168                             const Decl *Tmpl, Decl *New,
169                             LateInstantiatedAttrVec *LateAttrs,
170                             LocalInstantiationScope *OuterMostScope) {
171   for (const auto *TmplAttr : Tmpl->attrs()) {
172     // FIXME: This should be generalized to more than just the AlignedAttr.
173     const AlignedAttr *Aligned = dyn_cast<AlignedAttr>(TmplAttr);
174     if (Aligned && Aligned->isAlignmentDependent()) {
175       instantiateDependentAlignedAttr(*this, TemplateArgs, Aligned, New);
176       continue;
177     }
178 
179     const EnableIfAttr *EnableIf = dyn_cast<EnableIfAttr>(TmplAttr);
180     if (EnableIf && EnableIf->getCond()->isValueDependent()) {
181       instantiateDependentEnableIfAttr(*this, TemplateArgs, EnableIf, Tmpl,
182                                        New);
183       continue;
184     }
185 
186     assert(!TmplAttr->isPackExpansion());
187     if (TmplAttr->isLateParsed() && LateAttrs) {
188       // Late parsed attributes must be instantiated and attached after the
189       // enclosing class has been instantiated.  See Sema::InstantiateClass.
190       LocalInstantiationScope *Saved = 0;
191       if (CurrentInstantiationScope)
192         Saved = CurrentInstantiationScope->cloneScopes(OuterMostScope);
193       LateAttrs->push_back(LateInstantiatedAttribute(TmplAttr, Saved, New));
194     } else {
195       // Allow 'this' within late-parsed attributes.
196       NamedDecl *ND = dyn_cast<NamedDecl>(New);
197       CXXRecordDecl *ThisContext =
198           dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext());
199       CXXThisScopeRAII ThisScope(*this, ThisContext, /*TypeQuals*/0,
200                                  ND && ND->isCXXInstanceMember());
201 
202       Attr *NewAttr = sema::instantiateTemplateAttribute(TmplAttr, Context,
203                                                          *this, TemplateArgs);
204       if (NewAttr)
205         New->addAttr(NewAttr);
206     }
207   }
208 }
209 
210 Decl *
211 TemplateDeclInstantiator::VisitTranslationUnitDecl(TranslationUnitDecl *D) {
212   llvm_unreachable("Translation units cannot be instantiated");
213 }
214 
215 Decl *
216 TemplateDeclInstantiator::VisitLabelDecl(LabelDecl *D) {
217   LabelDecl *Inst = LabelDecl::Create(SemaRef.Context, Owner, D->getLocation(),
218                                       D->getIdentifier());
219   Owner->addDecl(Inst);
220   return Inst;
221 }
222 
223 Decl *
224 TemplateDeclInstantiator::VisitNamespaceDecl(NamespaceDecl *D) {
225   llvm_unreachable("Namespaces cannot be instantiated");
226 }
227 
228 Decl *
229 TemplateDeclInstantiator::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
230   NamespaceAliasDecl *Inst
231     = NamespaceAliasDecl::Create(SemaRef.Context, Owner,
232                                  D->getNamespaceLoc(),
233                                  D->getAliasLoc(),
234                                  D->getIdentifier(),
235                                  D->getQualifierLoc(),
236                                  D->getTargetNameLoc(),
237                                  D->getNamespace());
238   Owner->addDecl(Inst);
239   return Inst;
240 }
241 
242 Decl *TemplateDeclInstantiator::InstantiateTypedefNameDecl(TypedefNameDecl *D,
243                                                            bool IsTypeAlias) {
244   bool Invalid = false;
245   TypeSourceInfo *DI = D->getTypeSourceInfo();
246   if (DI->getType()->isInstantiationDependentType() ||
247       DI->getType()->isVariablyModifiedType()) {
248     DI = SemaRef.SubstType(DI, TemplateArgs,
249                            D->getLocation(), D->getDeclName());
250     if (!DI) {
251       Invalid = true;
252       DI = SemaRef.Context.getTrivialTypeSourceInfo(SemaRef.Context.IntTy);
253     }
254   } else {
255     SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
256   }
257 
258   // HACK: g++ has a bug where it gets the value kind of ?: wrong.
259   // libstdc++ relies upon this bug in its implementation of common_type.
260   // If we happen to be processing that implementation, fake up the g++ ?:
261   // semantics. See LWG issue 2141 for more information on the bug.
262   const DecltypeType *DT = DI->getType()->getAs<DecltypeType>();
263   CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D->getDeclContext());
264   if (DT && RD && isa<ConditionalOperator>(DT->getUnderlyingExpr()) &&
265       DT->isReferenceType() &&
266       RD->getEnclosingNamespaceContext() == SemaRef.getStdNamespace() &&
267       RD->getIdentifier() && RD->getIdentifier()->isStr("common_type") &&
268       D->getIdentifier() && D->getIdentifier()->isStr("type") &&
269       SemaRef.getSourceManager().isInSystemHeader(D->getLocStart()))
270     // Fold it to the (non-reference) type which g++ would have produced.
271     DI = SemaRef.Context.getTrivialTypeSourceInfo(
272       DI->getType().getNonReferenceType());
273 
274   // Create the new typedef
275   TypedefNameDecl *Typedef;
276   if (IsTypeAlias)
277     Typedef = TypeAliasDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
278                                     D->getLocation(), D->getIdentifier(), DI);
279   else
280     Typedef = TypedefDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
281                                   D->getLocation(), D->getIdentifier(), DI);
282   if (Invalid)
283     Typedef->setInvalidDecl();
284 
285   // If the old typedef was the name for linkage purposes of an anonymous
286   // tag decl, re-establish that relationship for the new typedef.
287   if (const TagType *oldTagType = D->getUnderlyingType()->getAs<TagType>()) {
288     TagDecl *oldTag = oldTagType->getDecl();
289     if (oldTag->getTypedefNameForAnonDecl() == D && !Invalid) {
290       TagDecl *newTag = DI->getType()->castAs<TagType>()->getDecl();
291       assert(!newTag->hasNameForLinkage());
292       newTag->setTypedefNameForAnonDecl(Typedef);
293     }
294   }
295 
296   if (TypedefNameDecl *Prev = D->getPreviousDecl()) {
297     NamedDecl *InstPrev = SemaRef.FindInstantiatedDecl(D->getLocation(), Prev,
298                                                        TemplateArgs);
299     if (!InstPrev)
300       return 0;
301 
302     TypedefNameDecl *InstPrevTypedef = cast<TypedefNameDecl>(InstPrev);
303 
304     // If the typedef types are not identical, reject them.
305     SemaRef.isIncompatibleTypedef(InstPrevTypedef, Typedef);
306 
307     Typedef->setPreviousDecl(InstPrevTypedef);
308   }
309 
310   SemaRef.InstantiateAttrs(TemplateArgs, D, Typedef);
311 
312   Typedef->setAccess(D->getAccess());
313 
314   return Typedef;
315 }
316 
317 Decl *TemplateDeclInstantiator::VisitTypedefDecl(TypedefDecl *D) {
318   Decl *Typedef = InstantiateTypedefNameDecl(D, /*IsTypeAlias=*/false);
319   Owner->addDecl(Typedef);
320   return Typedef;
321 }
322 
323 Decl *TemplateDeclInstantiator::VisitTypeAliasDecl(TypeAliasDecl *D) {
324   Decl *Typedef = InstantiateTypedefNameDecl(D, /*IsTypeAlias=*/true);
325   Owner->addDecl(Typedef);
326   return Typedef;
327 }
328 
329 Decl *
330 TemplateDeclInstantiator::VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D) {
331   // Create a local instantiation scope for this type alias template, which
332   // will contain the instantiations of the template parameters.
333   LocalInstantiationScope Scope(SemaRef);
334 
335   TemplateParameterList *TempParams = D->getTemplateParameters();
336   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
337   if (!InstParams)
338     return 0;
339 
340   TypeAliasDecl *Pattern = D->getTemplatedDecl();
341 
342   TypeAliasTemplateDecl *PrevAliasTemplate = 0;
343   if (Pattern->getPreviousDecl()) {
344     DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
345     if (!Found.empty()) {
346       PrevAliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Found.front());
347     }
348   }
349 
350   TypeAliasDecl *AliasInst = cast_or_null<TypeAliasDecl>(
351     InstantiateTypedefNameDecl(Pattern, /*IsTypeAlias=*/true));
352   if (!AliasInst)
353     return 0;
354 
355   TypeAliasTemplateDecl *Inst
356     = TypeAliasTemplateDecl::Create(SemaRef.Context, Owner, D->getLocation(),
357                                     D->getDeclName(), InstParams, AliasInst);
358   if (PrevAliasTemplate)
359     Inst->setPreviousDecl(PrevAliasTemplate);
360 
361   Inst->setAccess(D->getAccess());
362 
363   if (!PrevAliasTemplate)
364     Inst->setInstantiatedFromMemberTemplate(D);
365 
366   Owner->addDecl(Inst);
367 
368   return Inst;
369 }
370 
371 Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D) {
372   return VisitVarDecl(D, /*InstantiatingVarTemplate=*/false);
373 }
374 
375 Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D,
376                                              bool InstantiatingVarTemplate) {
377 
378   // If this is the variable for an anonymous struct or union,
379   // instantiate the anonymous struct/union type first.
380   if (const RecordType *RecordTy = D->getType()->getAs<RecordType>())
381     if (RecordTy->getDecl()->isAnonymousStructOrUnion())
382       if (!VisitCXXRecordDecl(cast<CXXRecordDecl>(RecordTy->getDecl())))
383         return 0;
384 
385   // Do substitution on the type of the declaration
386   TypeSourceInfo *DI = SemaRef.SubstType(D->getTypeSourceInfo(),
387                                          TemplateArgs,
388                                          D->getTypeSpecStartLoc(),
389                                          D->getDeclName());
390   if (!DI)
391     return 0;
392 
393   if (DI->getType()->isFunctionType()) {
394     SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function)
395       << D->isStaticDataMember() << DI->getType();
396     return 0;
397   }
398 
399   DeclContext *DC = Owner;
400   if (D->isLocalExternDecl())
401     SemaRef.adjustContextForLocalExternDecl(DC);
402 
403   // Build the instantiated declaration.
404   VarDecl *Var = VarDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(),
405                                  D->getLocation(), D->getIdentifier(),
406                                  DI->getType(), DI, D->getStorageClass());
407 
408   // In ARC, infer 'retaining' for variables of retainable type.
409   if (SemaRef.getLangOpts().ObjCAutoRefCount &&
410       SemaRef.inferObjCARCLifetime(Var))
411     Var->setInvalidDecl();
412 
413   // Substitute the nested name specifier, if any.
414   if (SubstQualifier(D, Var))
415     return 0;
416 
417   SemaRef.BuildVariableInstantiation(Var, D, TemplateArgs, LateAttrs, Owner,
418                                      StartingScope, InstantiatingVarTemplate);
419   return Var;
420 }
421 
422 Decl *TemplateDeclInstantiator::VisitAccessSpecDecl(AccessSpecDecl *D) {
423   AccessSpecDecl* AD
424     = AccessSpecDecl::Create(SemaRef.Context, D->getAccess(), Owner,
425                              D->getAccessSpecifierLoc(), D->getColonLoc());
426   Owner->addHiddenDecl(AD);
427   return AD;
428 }
429 
430 Decl *TemplateDeclInstantiator::VisitFieldDecl(FieldDecl *D) {
431   bool Invalid = false;
432   TypeSourceInfo *DI = D->getTypeSourceInfo();
433   if (DI->getType()->isInstantiationDependentType() ||
434       DI->getType()->isVariablyModifiedType())  {
435     DI = SemaRef.SubstType(DI, TemplateArgs,
436                            D->getLocation(), D->getDeclName());
437     if (!DI) {
438       DI = D->getTypeSourceInfo();
439       Invalid = true;
440     } else if (DI->getType()->isFunctionType()) {
441       // C++ [temp.arg.type]p3:
442       //   If a declaration acquires a function type through a type
443       //   dependent on a template-parameter and this causes a
444       //   declaration that does not use the syntactic form of a
445       //   function declarator to have function type, the program is
446       //   ill-formed.
447       SemaRef.Diag(D->getLocation(), diag::err_field_instantiates_to_function)
448         << DI->getType();
449       Invalid = true;
450     }
451   } else {
452     SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
453   }
454 
455   Expr *BitWidth = D->getBitWidth();
456   if (Invalid)
457     BitWidth = 0;
458   else if (BitWidth) {
459     // The bit-width expression is a constant expression.
460     EnterExpressionEvaluationContext Unevaluated(SemaRef,
461                                                  Sema::ConstantEvaluated);
462 
463     ExprResult InstantiatedBitWidth
464       = SemaRef.SubstExpr(BitWidth, TemplateArgs);
465     if (InstantiatedBitWidth.isInvalid()) {
466       Invalid = true;
467       BitWidth = 0;
468     } else
469       BitWidth = InstantiatedBitWidth.takeAs<Expr>();
470   }
471 
472   FieldDecl *Field = SemaRef.CheckFieldDecl(D->getDeclName(),
473                                             DI->getType(), DI,
474                                             cast<RecordDecl>(Owner),
475                                             D->getLocation(),
476                                             D->isMutable(),
477                                             BitWidth,
478                                             D->getInClassInitStyle(),
479                                             D->getInnerLocStart(),
480                                             D->getAccess(),
481                                             0);
482   if (!Field) {
483     cast<Decl>(Owner)->setInvalidDecl();
484     return 0;
485   }
486 
487   SemaRef.InstantiateAttrs(TemplateArgs, D, Field, LateAttrs, StartingScope);
488 
489   if (Field->hasAttrs())
490     SemaRef.CheckAlignasUnderalignment(Field);
491 
492   if (Invalid)
493     Field->setInvalidDecl();
494 
495   if (!Field->getDeclName()) {
496     // Keep track of where this decl came from.
497     SemaRef.Context.setInstantiatedFromUnnamedFieldDecl(Field, D);
498   }
499   if (CXXRecordDecl *Parent= dyn_cast<CXXRecordDecl>(Field->getDeclContext())) {
500     if (Parent->isAnonymousStructOrUnion() &&
501         Parent->getRedeclContext()->isFunctionOrMethod())
502       SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Field);
503   }
504 
505   Field->setImplicit(D->isImplicit());
506   Field->setAccess(D->getAccess());
507   Owner->addDecl(Field);
508 
509   return Field;
510 }
511 
512 Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {
513   bool Invalid = false;
514   TypeSourceInfo *DI = D->getTypeSourceInfo();
515 
516   if (DI->getType()->isVariablyModifiedType()) {
517     SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified)
518       << D;
519     Invalid = true;
520   } else if (DI->getType()->isInstantiationDependentType())  {
521     DI = SemaRef.SubstType(DI, TemplateArgs,
522                            D->getLocation(), D->getDeclName());
523     if (!DI) {
524       DI = D->getTypeSourceInfo();
525       Invalid = true;
526     } else if (DI->getType()->isFunctionType()) {
527       // C++ [temp.arg.type]p3:
528       //   If a declaration acquires a function type through a type
529       //   dependent on a template-parameter and this causes a
530       //   declaration that does not use the syntactic form of a
531       //   function declarator to have function type, the program is
532       //   ill-formed.
533       SemaRef.Diag(D->getLocation(), diag::err_field_instantiates_to_function)
534       << DI->getType();
535       Invalid = true;
536     }
537   } else {
538     SemaRef.MarkDeclarationsReferencedInType(D->getLocation(), DI->getType());
539   }
540 
541   MSPropertyDecl *Property = MSPropertyDecl::Create(
542       SemaRef.Context, Owner, D->getLocation(), D->getDeclName(), DI->getType(),
543       DI, D->getLocStart(), D->getGetterId(), D->getSetterId());
544 
545   SemaRef.InstantiateAttrs(TemplateArgs, D, Property, LateAttrs,
546                            StartingScope);
547 
548   if (Invalid)
549     Property->setInvalidDecl();
550 
551   Property->setAccess(D->getAccess());
552   Owner->addDecl(Property);
553 
554   return Property;
555 }
556 
557 Decl *TemplateDeclInstantiator::VisitIndirectFieldDecl(IndirectFieldDecl *D) {
558   NamedDecl **NamedChain =
559     new (SemaRef.Context)NamedDecl*[D->getChainingSize()];
560 
561   int i = 0;
562   for (auto *PI : D->chain()) {
563     NamedDecl *Next = SemaRef.FindInstantiatedDecl(D->getLocation(), PI,
564                                               TemplateArgs);
565     if (!Next)
566       return 0;
567 
568     NamedChain[i++] = Next;
569   }
570 
571   QualType T = cast<FieldDecl>(NamedChain[i-1])->getType();
572   IndirectFieldDecl* IndirectField
573     = IndirectFieldDecl::Create(SemaRef.Context, Owner, D->getLocation(),
574                                 D->getIdentifier(), T,
575                                 NamedChain, D->getChainingSize());
576 
577 
578   IndirectField->setImplicit(D->isImplicit());
579   IndirectField->setAccess(D->getAccess());
580   Owner->addDecl(IndirectField);
581   return IndirectField;
582 }
583 
584 Decl *TemplateDeclInstantiator::VisitFriendDecl(FriendDecl *D) {
585   // Handle friend type expressions by simply substituting template
586   // parameters into the pattern type and checking the result.
587   if (TypeSourceInfo *Ty = D->getFriendType()) {
588     TypeSourceInfo *InstTy;
589     // If this is an unsupported friend, don't bother substituting template
590     // arguments into it. The actual type referred to won't be used by any
591     // parts of Clang, and may not be valid for instantiating. Just use the
592     // same info for the instantiated friend.
593     if (D->isUnsupportedFriend()) {
594       InstTy = Ty;
595     } else {
596       InstTy = SemaRef.SubstType(Ty, TemplateArgs,
597                                  D->getLocation(), DeclarationName());
598     }
599     if (!InstTy)
600       return 0;
601 
602     FriendDecl *FD = SemaRef.CheckFriendTypeDecl(D->getLocStart(),
603                                                  D->getFriendLoc(), InstTy);
604     if (!FD)
605       return 0;
606 
607     FD->setAccess(AS_public);
608     FD->setUnsupportedFriend(D->isUnsupportedFriend());
609     Owner->addDecl(FD);
610     return FD;
611   }
612 
613   NamedDecl *ND = D->getFriendDecl();
614   assert(ND && "friend decl must be a decl or a type!");
615 
616   // All of the Visit implementations for the various potential friend
617   // declarations have to be carefully written to work for friend
618   // objects, with the most important detail being that the target
619   // decl should almost certainly not be placed in Owner.
620   Decl *NewND = Visit(ND);
621   if (!NewND) return 0;
622 
623   FriendDecl *FD =
624     FriendDecl::Create(SemaRef.Context, Owner, D->getLocation(),
625                        cast<NamedDecl>(NewND), D->getFriendLoc());
626   FD->setAccess(AS_public);
627   FD->setUnsupportedFriend(D->isUnsupportedFriend());
628   Owner->addDecl(FD);
629   return FD;
630 }
631 
632 Decl *TemplateDeclInstantiator::VisitStaticAssertDecl(StaticAssertDecl *D) {
633   Expr *AssertExpr = D->getAssertExpr();
634 
635   // The expression in a static assertion is a constant expression.
636   EnterExpressionEvaluationContext Unevaluated(SemaRef,
637                                                Sema::ConstantEvaluated);
638 
639   ExprResult InstantiatedAssertExpr
640     = SemaRef.SubstExpr(AssertExpr, TemplateArgs);
641   if (InstantiatedAssertExpr.isInvalid())
642     return 0;
643 
644   return SemaRef.BuildStaticAssertDeclaration(D->getLocation(),
645                                               InstantiatedAssertExpr.get(),
646                                               D->getMessage(),
647                                               D->getRParenLoc(),
648                                               D->isFailed());
649 }
650 
651 Decl *TemplateDeclInstantiator::VisitEnumDecl(EnumDecl *D) {
652   EnumDecl *PrevDecl = 0;
653   if (D->getPreviousDecl()) {
654     NamedDecl *Prev = SemaRef.FindInstantiatedDecl(D->getLocation(),
655                                                    D->getPreviousDecl(),
656                                                    TemplateArgs);
657     if (!Prev) return 0;
658     PrevDecl = cast<EnumDecl>(Prev);
659   }
660 
661   EnumDecl *Enum = EnumDecl::Create(SemaRef.Context, Owner, D->getLocStart(),
662                                     D->getLocation(), D->getIdentifier(),
663                                     PrevDecl, D->isScoped(),
664                                     D->isScopedUsingClassTag(), D->isFixed());
665   if (D->isFixed()) {
666     if (TypeSourceInfo *TI = D->getIntegerTypeSourceInfo()) {
667       // If we have type source information for the underlying type, it means it
668       // has been explicitly set by the user. Perform substitution on it before
669       // moving on.
670       SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
671       TypeSourceInfo *NewTI = SemaRef.SubstType(TI, TemplateArgs, UnderlyingLoc,
672                                                 DeclarationName());
673       if (!NewTI || SemaRef.CheckEnumUnderlyingType(NewTI))
674         Enum->setIntegerType(SemaRef.Context.IntTy);
675       else
676         Enum->setIntegerTypeSourceInfo(NewTI);
677     } else {
678       assert(!D->getIntegerType()->isDependentType()
679              && "Dependent type without type source info");
680       Enum->setIntegerType(D->getIntegerType());
681     }
682   }
683 
684   SemaRef.InstantiateAttrs(TemplateArgs, D, Enum);
685 
686   Enum->setInstantiationOfMemberEnum(D, TSK_ImplicitInstantiation);
687   Enum->setAccess(D->getAccess());
688   // Forward the mangling number from the template to the instantiated decl.
689   SemaRef.Context.setManglingNumber(Enum, SemaRef.Context.getManglingNumber(D));
690   if (SubstQualifier(D, Enum)) return 0;
691   Owner->addDecl(Enum);
692 
693   EnumDecl *Def = D->getDefinition();
694   if (Def && Def != D) {
695     // If this is an out-of-line definition of an enum member template, check
696     // that the underlying types match in the instantiation of both
697     // declarations.
698     if (TypeSourceInfo *TI = Def->getIntegerTypeSourceInfo()) {
699       SourceLocation UnderlyingLoc = TI->getTypeLoc().getBeginLoc();
700       QualType DefnUnderlying =
701         SemaRef.SubstType(TI->getType(), TemplateArgs,
702                           UnderlyingLoc, DeclarationName());
703       SemaRef.CheckEnumRedeclaration(Def->getLocation(), Def->isScoped(),
704                                      DefnUnderlying, Enum);
705     }
706   }
707 
708   // C++11 [temp.inst]p1: The implicit instantiation of a class template
709   // specialization causes the implicit instantiation of the declarations, but
710   // not the definitions of scoped member enumerations.
711   //
712   // DR1484 clarifies that enumeration definitions inside of a template
713   // declaration aren't considered entities that can be separately instantiated
714   // from the rest of the entity they are declared inside of.
715   if (isDeclWithinFunction(D) ? D == Def : Def && !Enum->isScoped()) {
716     SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Enum);
717     InstantiateEnumDefinition(Enum, Def);
718   }
719 
720   return Enum;
721 }
722 
723 void TemplateDeclInstantiator::InstantiateEnumDefinition(
724     EnumDecl *Enum, EnumDecl *Pattern) {
725   Enum->startDefinition();
726 
727   // Update the location to refer to the definition.
728   Enum->setLocation(Pattern->getLocation());
729 
730   SmallVector<Decl*, 4> Enumerators;
731 
732   EnumConstantDecl *LastEnumConst = 0;
733   for (auto *EC : Pattern->enumerators()) {
734     // The specified value for the enumerator.
735     ExprResult Value = SemaRef.Owned((Expr *)0);
736     if (Expr *UninstValue = EC->getInitExpr()) {
737       // The enumerator's value expression is a constant expression.
738       EnterExpressionEvaluationContext Unevaluated(SemaRef,
739                                                    Sema::ConstantEvaluated);
740 
741       Value = SemaRef.SubstExpr(UninstValue, TemplateArgs);
742     }
743 
744     // Drop the initial value and continue.
745     bool isInvalid = false;
746     if (Value.isInvalid()) {
747       Value = SemaRef.Owned((Expr *)0);
748       isInvalid = true;
749     }
750 
751     EnumConstantDecl *EnumConst
752       = SemaRef.CheckEnumConstant(Enum, LastEnumConst,
753                                   EC->getLocation(), EC->getIdentifier(),
754                                   Value.get());
755 
756     if (isInvalid) {
757       if (EnumConst)
758         EnumConst->setInvalidDecl();
759       Enum->setInvalidDecl();
760     }
761 
762     if (EnumConst) {
763       SemaRef.InstantiateAttrs(TemplateArgs, EC, EnumConst);
764 
765       EnumConst->setAccess(Enum->getAccess());
766       Enum->addDecl(EnumConst);
767       Enumerators.push_back(EnumConst);
768       LastEnumConst = EnumConst;
769 
770       if (Pattern->getDeclContext()->isFunctionOrMethod() &&
771           !Enum->isScoped()) {
772         // If the enumeration is within a function or method, record the enum
773         // constant as a local.
774         SemaRef.CurrentInstantiationScope->InstantiatedLocal(EC, EnumConst);
775       }
776     }
777   }
778 
779   // FIXME: Fixup LBraceLoc
780   SemaRef.ActOnEnumBody(Enum->getLocation(), SourceLocation(),
781                         Enum->getRBraceLoc(), Enum,
782                         Enumerators,
783                         0, 0);
784 }
785 
786 Decl *TemplateDeclInstantiator::VisitEnumConstantDecl(EnumConstantDecl *D) {
787   llvm_unreachable("EnumConstantDecls can only occur within EnumDecls.");
788 }
789 
790 Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {
791   bool isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
792 
793   // Create a local instantiation scope for this class template, which
794   // will contain the instantiations of the template parameters.
795   LocalInstantiationScope Scope(SemaRef);
796   TemplateParameterList *TempParams = D->getTemplateParameters();
797   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
798   if (!InstParams)
799     return NULL;
800 
801   CXXRecordDecl *Pattern = D->getTemplatedDecl();
802 
803   // Instantiate the qualifier.  We have to do this first in case
804   // we're a friend declaration, because if we are then we need to put
805   // the new declaration in the appropriate context.
806   NestedNameSpecifierLoc QualifierLoc = Pattern->getQualifierLoc();
807   if (QualifierLoc) {
808     QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
809                                                        TemplateArgs);
810     if (!QualifierLoc)
811       return 0;
812   }
813 
814   CXXRecordDecl *PrevDecl = 0;
815   ClassTemplateDecl *PrevClassTemplate = 0;
816 
817   if (!isFriend && Pattern->getPreviousDecl()) {
818     DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
819     if (!Found.empty()) {
820       PrevClassTemplate = dyn_cast<ClassTemplateDecl>(Found.front());
821       if (PrevClassTemplate)
822         PrevDecl = PrevClassTemplate->getTemplatedDecl();
823     }
824   }
825 
826   // If this isn't a friend, then it's a member template, in which
827   // case we just want to build the instantiation in the
828   // specialization.  If it is a friend, we want to build it in
829   // the appropriate context.
830   DeclContext *DC = Owner;
831   if (isFriend) {
832     if (QualifierLoc) {
833       CXXScopeSpec SS;
834       SS.Adopt(QualifierLoc);
835       DC = SemaRef.computeDeclContext(SS);
836       if (!DC) return 0;
837     } else {
838       DC = SemaRef.FindInstantiatedContext(Pattern->getLocation(),
839                                            Pattern->getDeclContext(),
840                                            TemplateArgs);
841     }
842 
843     // Look for a previous declaration of the template in the owning
844     // context.
845     LookupResult R(SemaRef, Pattern->getDeclName(), Pattern->getLocation(),
846                    Sema::LookupOrdinaryName, Sema::ForRedeclaration);
847     SemaRef.LookupQualifiedName(R, DC);
848 
849     if (R.isSingleResult()) {
850       PrevClassTemplate = R.getAsSingle<ClassTemplateDecl>();
851       if (PrevClassTemplate)
852         PrevDecl = PrevClassTemplate->getTemplatedDecl();
853     }
854 
855     if (!PrevClassTemplate && QualifierLoc) {
856       SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope)
857         << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC
858         << QualifierLoc.getSourceRange();
859       return 0;
860     }
861 
862     bool AdoptedPreviousTemplateParams = false;
863     if (PrevClassTemplate) {
864       bool Complain = true;
865 
866       // HACK: libstdc++ 4.2.1 contains an ill-formed friend class
867       // template for struct std::tr1::__detail::_Map_base, where the
868       // template parameters of the friend declaration don't match the
869       // template parameters of the original declaration. In this one
870       // case, we don't complain about the ill-formed friend
871       // declaration.
872       if (isFriend && Pattern->getIdentifier() &&
873           Pattern->getIdentifier()->isStr("_Map_base") &&
874           DC->isNamespace() &&
875           cast<NamespaceDecl>(DC)->getIdentifier() &&
876           cast<NamespaceDecl>(DC)->getIdentifier()->isStr("__detail")) {
877         DeclContext *DCParent = DC->getParent();
878         if (DCParent->isNamespace() &&
879             cast<NamespaceDecl>(DCParent)->getIdentifier() &&
880             cast<NamespaceDecl>(DCParent)->getIdentifier()->isStr("tr1")) {
881           DeclContext *DCParent2 = DCParent->getParent();
882           if (DCParent2->isNamespace() &&
883               cast<NamespaceDecl>(DCParent2)->getIdentifier() &&
884               cast<NamespaceDecl>(DCParent2)->getIdentifier()->isStr("std") &&
885               DCParent2->getParent()->isTranslationUnit())
886             Complain = false;
887         }
888       }
889 
890       TemplateParameterList *PrevParams
891         = PrevClassTemplate->getTemplateParameters();
892 
893       // Make sure the parameter lists match.
894       if (!SemaRef.TemplateParameterListsAreEqual(InstParams, PrevParams,
895                                                   Complain,
896                                                   Sema::TPL_TemplateMatch)) {
897         if (Complain)
898           return 0;
899 
900         AdoptedPreviousTemplateParams = true;
901         InstParams = PrevParams;
902       }
903 
904       // Do some additional validation, then merge default arguments
905       // from the existing declarations.
906       if (!AdoptedPreviousTemplateParams &&
907           SemaRef.CheckTemplateParameterList(InstParams, PrevParams,
908                                              Sema::TPC_ClassTemplate))
909         return 0;
910     }
911   }
912 
913   CXXRecordDecl *RecordInst
914     = CXXRecordDecl::Create(SemaRef.Context, Pattern->getTagKind(), DC,
915                             Pattern->getLocStart(), Pattern->getLocation(),
916                             Pattern->getIdentifier(), PrevDecl,
917                             /*DelayTypeCreation=*/true);
918 
919   if (QualifierLoc)
920     RecordInst->setQualifierInfo(QualifierLoc);
921 
922   ClassTemplateDecl *Inst
923     = ClassTemplateDecl::Create(SemaRef.Context, DC, D->getLocation(),
924                                 D->getIdentifier(), InstParams, RecordInst,
925                                 PrevClassTemplate);
926   RecordInst->setDescribedClassTemplate(Inst);
927 
928   if (isFriend) {
929     if (PrevClassTemplate)
930       Inst->setAccess(PrevClassTemplate->getAccess());
931     else
932       Inst->setAccess(D->getAccess());
933 
934     Inst->setObjectOfFriendDecl();
935     // TODO: do we want to track the instantiation progeny of this
936     // friend target decl?
937   } else {
938     Inst->setAccess(D->getAccess());
939     if (!PrevClassTemplate)
940       Inst->setInstantiatedFromMemberTemplate(D);
941   }
942 
943   // Trigger creation of the type for the instantiation.
944   SemaRef.Context.getInjectedClassNameType(RecordInst,
945                                     Inst->getInjectedClassNameSpecialization());
946 
947   // Finish handling of friends.
948   if (isFriend) {
949     DC->makeDeclVisibleInContext(Inst);
950     Inst->setLexicalDeclContext(Owner);
951     RecordInst->setLexicalDeclContext(Owner);
952     return Inst;
953   }
954 
955   if (D->isOutOfLine()) {
956     Inst->setLexicalDeclContext(D->getLexicalDeclContext());
957     RecordInst->setLexicalDeclContext(D->getLexicalDeclContext());
958   }
959 
960   Owner->addDecl(Inst);
961 
962   if (!PrevClassTemplate) {
963     // Queue up any out-of-line partial specializations of this member
964     // class template; the client will force their instantiation once
965     // the enclosing class has been instantiated.
966     SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs;
967     D->getPartialSpecializations(PartialSpecs);
968     for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I)
969       if (PartialSpecs[I]->getFirstDecl()->isOutOfLine())
970         OutOfLinePartialSpecs.push_back(std::make_pair(Inst, PartialSpecs[I]));
971   }
972 
973   return Inst;
974 }
975 
976 Decl *
977 TemplateDeclInstantiator::VisitClassTemplatePartialSpecializationDecl(
978                                    ClassTemplatePartialSpecializationDecl *D) {
979   ClassTemplateDecl *ClassTemplate = D->getSpecializedTemplate();
980 
981   // Lookup the already-instantiated declaration in the instantiation
982   // of the class template and return that.
983   DeclContext::lookup_result Found
984     = Owner->lookup(ClassTemplate->getDeclName());
985   if (Found.empty())
986     return 0;
987 
988   ClassTemplateDecl *InstClassTemplate
989     = dyn_cast<ClassTemplateDecl>(Found.front());
990   if (!InstClassTemplate)
991     return 0;
992 
993   if (ClassTemplatePartialSpecializationDecl *Result
994         = InstClassTemplate->findPartialSpecInstantiatedFromMember(D))
995     return Result;
996 
997   return InstantiateClassTemplatePartialSpecialization(InstClassTemplate, D);
998 }
999 
1000 Decl *TemplateDeclInstantiator::VisitVarTemplateDecl(VarTemplateDecl *D) {
1001   assert(D->getTemplatedDecl()->isStaticDataMember() &&
1002          "Only static data member templates are allowed.");
1003 
1004   // Create a local instantiation scope for this variable template, which
1005   // will contain the instantiations of the template parameters.
1006   LocalInstantiationScope Scope(SemaRef);
1007   TemplateParameterList *TempParams = D->getTemplateParameters();
1008   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
1009   if (!InstParams)
1010     return NULL;
1011 
1012   VarDecl *Pattern = D->getTemplatedDecl();
1013   VarTemplateDecl *PrevVarTemplate = 0;
1014 
1015   if (Pattern->getPreviousDecl()) {
1016     DeclContext::lookup_result Found = Owner->lookup(Pattern->getDeclName());
1017     if (!Found.empty())
1018       PrevVarTemplate = dyn_cast<VarTemplateDecl>(Found.front());
1019   }
1020 
1021   VarDecl *VarInst =
1022       cast_or_null<VarDecl>(VisitVarDecl(Pattern,
1023                                          /*InstantiatingVarTemplate=*/true));
1024 
1025   DeclContext *DC = Owner;
1026 
1027   VarTemplateDecl *Inst = VarTemplateDecl::Create(
1028       SemaRef.Context, DC, D->getLocation(), D->getIdentifier(), InstParams,
1029       VarInst);
1030   VarInst->setDescribedVarTemplate(Inst);
1031   Inst->setPreviousDecl(PrevVarTemplate);
1032 
1033   Inst->setAccess(D->getAccess());
1034   if (!PrevVarTemplate)
1035     Inst->setInstantiatedFromMemberTemplate(D);
1036 
1037   if (D->isOutOfLine()) {
1038     Inst->setLexicalDeclContext(D->getLexicalDeclContext());
1039     VarInst->setLexicalDeclContext(D->getLexicalDeclContext());
1040   }
1041 
1042   Owner->addDecl(Inst);
1043 
1044   if (!PrevVarTemplate) {
1045     // Queue up any out-of-line partial specializations of this member
1046     // variable template; the client will force their instantiation once
1047     // the enclosing class has been instantiated.
1048     SmallVector<VarTemplatePartialSpecializationDecl *, 4> PartialSpecs;
1049     D->getPartialSpecializations(PartialSpecs);
1050     for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I)
1051       if (PartialSpecs[I]->getFirstDecl()->isOutOfLine())
1052         OutOfLineVarPartialSpecs.push_back(
1053             std::make_pair(Inst, PartialSpecs[I]));
1054   }
1055 
1056   return Inst;
1057 }
1058 
1059 Decl *TemplateDeclInstantiator::VisitVarTemplatePartialSpecializationDecl(
1060     VarTemplatePartialSpecializationDecl *D) {
1061   assert(D->isStaticDataMember() &&
1062          "Only static data member templates are allowed.");
1063 
1064   VarTemplateDecl *VarTemplate = D->getSpecializedTemplate();
1065 
1066   // Lookup the already-instantiated declaration and return that.
1067   DeclContext::lookup_result Found = Owner->lookup(VarTemplate->getDeclName());
1068   assert(!Found.empty() && "Instantiation found nothing?");
1069 
1070   VarTemplateDecl *InstVarTemplate = dyn_cast<VarTemplateDecl>(Found.front());
1071   assert(InstVarTemplate && "Instantiation did not find a variable template?");
1072 
1073   if (VarTemplatePartialSpecializationDecl *Result =
1074           InstVarTemplate->findPartialSpecInstantiatedFromMember(D))
1075     return Result;
1076 
1077   return InstantiateVarTemplatePartialSpecialization(InstVarTemplate, D);
1078 }
1079 
1080 Decl *
1081 TemplateDeclInstantiator::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
1082   // Create a local instantiation scope for this function template, which
1083   // will contain the instantiations of the template parameters and then get
1084   // merged with the local instantiation scope for the function template
1085   // itself.
1086   LocalInstantiationScope Scope(SemaRef);
1087 
1088   TemplateParameterList *TempParams = D->getTemplateParameters();
1089   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
1090   if (!InstParams)
1091     return NULL;
1092 
1093   FunctionDecl *Instantiated = 0;
1094   if (CXXMethodDecl *DMethod = dyn_cast<CXXMethodDecl>(D->getTemplatedDecl()))
1095     Instantiated = cast_or_null<FunctionDecl>(VisitCXXMethodDecl(DMethod,
1096                                                                  InstParams));
1097   else
1098     Instantiated = cast_or_null<FunctionDecl>(VisitFunctionDecl(
1099                                                           D->getTemplatedDecl(),
1100                                                                 InstParams));
1101 
1102   if (!Instantiated)
1103     return 0;
1104 
1105   // Link the instantiated function template declaration to the function
1106   // template from which it was instantiated.
1107   FunctionTemplateDecl *InstTemplate
1108     = Instantiated->getDescribedFunctionTemplate();
1109   InstTemplate->setAccess(D->getAccess());
1110   assert(InstTemplate &&
1111          "VisitFunctionDecl/CXXMethodDecl didn't create a template!");
1112 
1113   bool isFriend = (InstTemplate->getFriendObjectKind() != Decl::FOK_None);
1114 
1115   // Link the instantiation back to the pattern *unless* this is a
1116   // non-definition friend declaration.
1117   if (!InstTemplate->getInstantiatedFromMemberTemplate() &&
1118       !(isFriend && !D->getTemplatedDecl()->isThisDeclarationADefinition()))
1119     InstTemplate->setInstantiatedFromMemberTemplate(D);
1120 
1121   // Make declarations visible in the appropriate context.
1122   if (!isFriend) {
1123     Owner->addDecl(InstTemplate);
1124   } else if (InstTemplate->getDeclContext()->isRecord() &&
1125              !D->getPreviousDecl()) {
1126     SemaRef.CheckFriendAccess(InstTemplate);
1127   }
1128 
1129   return InstTemplate;
1130 }
1131 
1132 Decl *TemplateDeclInstantiator::VisitCXXRecordDecl(CXXRecordDecl *D) {
1133   CXXRecordDecl *PrevDecl = 0;
1134   if (D->isInjectedClassName())
1135     PrevDecl = cast<CXXRecordDecl>(Owner);
1136   else if (D->getPreviousDecl()) {
1137     NamedDecl *Prev = SemaRef.FindInstantiatedDecl(D->getLocation(),
1138                                                    D->getPreviousDecl(),
1139                                                    TemplateArgs);
1140     if (!Prev) return 0;
1141     PrevDecl = cast<CXXRecordDecl>(Prev);
1142   }
1143 
1144   CXXRecordDecl *Record
1145     = CXXRecordDecl::Create(SemaRef.Context, D->getTagKind(), Owner,
1146                             D->getLocStart(), D->getLocation(),
1147                             D->getIdentifier(), PrevDecl);
1148 
1149   // Substitute the nested name specifier, if any.
1150   if (SubstQualifier(D, Record))
1151     return 0;
1152 
1153   Record->setImplicit(D->isImplicit());
1154   // FIXME: Check against AS_none is an ugly hack to work around the issue that
1155   // the tag decls introduced by friend class declarations don't have an access
1156   // specifier. Remove once this area of the code gets sorted out.
1157   if (D->getAccess() != AS_none)
1158     Record->setAccess(D->getAccess());
1159   if (!D->isInjectedClassName())
1160     Record->setInstantiationOfMemberClass(D, TSK_ImplicitInstantiation);
1161 
1162   // If the original function was part of a friend declaration,
1163   // inherit its namespace state.
1164   if (D->getFriendObjectKind())
1165     Record->setObjectOfFriendDecl();
1166 
1167   // Make sure that anonymous structs and unions are recorded.
1168   if (D->isAnonymousStructOrUnion())
1169     Record->setAnonymousStructOrUnion(true);
1170 
1171   if (D->isLocalClass())
1172     SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Record);
1173 
1174   // Forward the mangling number from the template to the instantiated decl.
1175   SemaRef.Context.setManglingNumber(Record,
1176                                     SemaRef.Context.getManglingNumber(D));
1177 
1178   Owner->addDecl(Record);
1179 
1180   // DR1484 clarifies that the members of a local class are instantiated as part
1181   // of the instantiation of their enclosing entity.
1182   if (D->isCompleteDefinition() && D->isLocalClass()) {
1183     SemaRef.InstantiateClass(D->getLocation(), Record, D, TemplateArgs,
1184                              TSK_ImplicitInstantiation,
1185                              /*Complain=*/true);
1186     SemaRef.InstantiateClassMembers(D->getLocation(), Record, TemplateArgs,
1187                                     TSK_ImplicitInstantiation);
1188   }
1189   return Record;
1190 }
1191 
1192 /// \brief Adjust the given function type for an instantiation of the
1193 /// given declaration, to cope with modifications to the function's type that
1194 /// aren't reflected in the type-source information.
1195 ///
1196 /// \param D The declaration we're instantiating.
1197 /// \param TInfo The already-instantiated type.
1198 static QualType adjustFunctionTypeForInstantiation(ASTContext &Context,
1199                                                    FunctionDecl *D,
1200                                                    TypeSourceInfo *TInfo) {
1201   const FunctionProtoType *OrigFunc
1202     = D->getType()->castAs<FunctionProtoType>();
1203   const FunctionProtoType *NewFunc
1204     = TInfo->getType()->castAs<FunctionProtoType>();
1205   if (OrigFunc->getExtInfo() == NewFunc->getExtInfo())
1206     return TInfo->getType();
1207 
1208   FunctionProtoType::ExtProtoInfo NewEPI = NewFunc->getExtProtoInfo();
1209   NewEPI.ExtInfo = OrigFunc->getExtInfo();
1210   return Context.getFunctionType(NewFunc->getReturnType(),
1211                                  NewFunc->getParamTypes(), NewEPI);
1212 }
1213 
1214 /// Normal class members are of more specific types and therefore
1215 /// don't make it here.  This function serves two purposes:
1216 ///   1) instantiating function templates
1217 ///   2) substituting friend declarations
1218 Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D,
1219                                        TemplateParameterList *TemplateParams) {
1220   // Check whether there is already a function template specialization for
1221   // this declaration.
1222   FunctionTemplateDecl *FunctionTemplate = D->getDescribedFunctionTemplate();
1223   if (FunctionTemplate && !TemplateParams) {
1224     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
1225 
1226     void *InsertPos = 0;
1227     FunctionDecl *SpecFunc
1228       = FunctionTemplate->findSpecialization(Innermost.begin(), Innermost.size(),
1229                                              InsertPos);
1230 
1231     // If we already have a function template specialization, return it.
1232     if (SpecFunc)
1233       return SpecFunc;
1234   }
1235 
1236   bool isFriend;
1237   if (FunctionTemplate)
1238     isFriend = (FunctionTemplate->getFriendObjectKind() != Decl::FOK_None);
1239   else
1240     isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
1241 
1242   bool MergeWithParentScope = (TemplateParams != 0) ||
1243     Owner->isFunctionOrMethod() ||
1244     !(isa<Decl>(Owner) &&
1245       cast<Decl>(Owner)->isDefinedOutsideFunctionOrMethod());
1246   LocalInstantiationScope Scope(SemaRef, MergeWithParentScope);
1247 
1248   SmallVector<ParmVarDecl *, 4> Params;
1249   TypeSourceInfo *TInfo = SubstFunctionType(D, Params);
1250   if (!TInfo)
1251     return 0;
1252   QualType T = adjustFunctionTypeForInstantiation(SemaRef.Context, D, TInfo);
1253 
1254   NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc();
1255   if (QualifierLoc) {
1256     QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
1257                                                        TemplateArgs);
1258     if (!QualifierLoc)
1259       return 0;
1260   }
1261 
1262   // If we're instantiating a local function declaration, put the result
1263   // in the enclosing namespace; otherwise we need to find the instantiated
1264   // context.
1265   DeclContext *DC;
1266   if (D->isLocalExternDecl()) {
1267     DC = Owner;
1268     SemaRef.adjustContextForLocalExternDecl(DC);
1269   } else if (isFriend && QualifierLoc) {
1270     CXXScopeSpec SS;
1271     SS.Adopt(QualifierLoc);
1272     DC = SemaRef.computeDeclContext(SS);
1273     if (!DC) return 0;
1274   } else {
1275     DC = SemaRef.FindInstantiatedContext(D->getLocation(), D->getDeclContext(),
1276                                          TemplateArgs);
1277   }
1278 
1279   FunctionDecl *Function =
1280       FunctionDecl::Create(SemaRef.Context, DC, D->getInnerLocStart(),
1281                            D->getNameInfo(), T, TInfo,
1282                            D->getCanonicalDecl()->getStorageClass(),
1283                            D->isInlineSpecified(), D->hasWrittenPrototype(),
1284                            D->isConstexpr());
1285   Function->setRangeEnd(D->getSourceRange().getEnd());
1286 
1287   if (D->isInlined())
1288     Function->setImplicitlyInline();
1289 
1290   if (QualifierLoc)
1291     Function->setQualifierInfo(QualifierLoc);
1292 
1293   if (D->isLocalExternDecl())
1294     Function->setLocalExternDecl();
1295 
1296   DeclContext *LexicalDC = Owner;
1297   if (!isFriend && D->isOutOfLine() && !D->isLocalExternDecl()) {
1298     assert(D->getDeclContext()->isFileContext());
1299     LexicalDC = D->getDeclContext();
1300   }
1301 
1302   Function->setLexicalDeclContext(LexicalDC);
1303 
1304   // Attach the parameters
1305   for (unsigned P = 0; P < Params.size(); ++P)
1306     if (Params[P])
1307       Params[P]->setOwningFunction(Function);
1308   Function->setParams(Params);
1309 
1310   SourceLocation InstantiateAtPOI;
1311   if (TemplateParams) {
1312     // Our resulting instantiation is actually a function template, since we
1313     // are substituting only the outer template parameters. For example, given
1314     //
1315     //   template<typename T>
1316     //   struct X {
1317     //     template<typename U> friend void f(T, U);
1318     //   };
1319     //
1320     //   X<int> x;
1321     //
1322     // We are instantiating the friend function template "f" within X<int>,
1323     // which means substituting int for T, but leaving "f" as a friend function
1324     // template.
1325     // Build the function template itself.
1326     FunctionTemplate = FunctionTemplateDecl::Create(SemaRef.Context, DC,
1327                                                     Function->getLocation(),
1328                                                     Function->getDeclName(),
1329                                                     TemplateParams, Function);
1330     Function->setDescribedFunctionTemplate(FunctionTemplate);
1331 
1332     FunctionTemplate->setLexicalDeclContext(LexicalDC);
1333 
1334     if (isFriend && D->isThisDeclarationADefinition()) {
1335       // TODO: should we remember this connection regardless of whether
1336       // the friend declaration provided a body?
1337       FunctionTemplate->setInstantiatedFromMemberTemplate(
1338                                            D->getDescribedFunctionTemplate());
1339     }
1340   } else if (FunctionTemplate) {
1341     // Record this function template specialization.
1342     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
1343     Function->setFunctionTemplateSpecialization(FunctionTemplate,
1344                             TemplateArgumentList::CreateCopy(SemaRef.Context,
1345                                                              Innermost.begin(),
1346                                                              Innermost.size()),
1347                                                 /*InsertPos=*/0);
1348   } else if (isFriend) {
1349     // Note, we need this connection even if the friend doesn't have a body.
1350     // Its body may exist but not have been attached yet due to deferred
1351     // parsing.
1352     // FIXME: It might be cleaner to set this when attaching the body to the
1353     // friend function declaration, however that would require finding all the
1354     // instantiations and modifying them.
1355     Function->setInstantiationOfMemberFunction(D, TSK_ImplicitInstantiation);
1356   }
1357 
1358   if (InitFunctionInstantiation(Function, D))
1359     Function->setInvalidDecl();
1360 
1361   bool isExplicitSpecialization = false;
1362 
1363   LookupResult Previous(
1364       SemaRef, Function->getDeclName(), SourceLocation(),
1365       D->isLocalExternDecl() ? Sema::LookupRedeclarationWithLinkage
1366                              : Sema::LookupOrdinaryName,
1367       Sema::ForRedeclaration);
1368 
1369   if (DependentFunctionTemplateSpecializationInfo *Info
1370         = D->getDependentSpecializationInfo()) {
1371     assert(isFriend && "non-friend has dependent specialization info?");
1372 
1373     // This needs to be set now for future sanity.
1374     Function->setObjectOfFriendDecl();
1375 
1376     // Instantiate the explicit template arguments.
1377     TemplateArgumentListInfo ExplicitArgs(Info->getLAngleLoc(),
1378                                           Info->getRAngleLoc());
1379     if (SemaRef.Subst(Info->getTemplateArgs(), Info->getNumTemplateArgs(),
1380                       ExplicitArgs, TemplateArgs))
1381       return 0;
1382 
1383     // Map the candidate templates to their instantiations.
1384     for (unsigned I = 0, E = Info->getNumTemplates(); I != E; ++I) {
1385       Decl *Temp = SemaRef.FindInstantiatedDecl(D->getLocation(),
1386                                                 Info->getTemplate(I),
1387                                                 TemplateArgs);
1388       if (!Temp) return 0;
1389 
1390       Previous.addDecl(cast<FunctionTemplateDecl>(Temp));
1391     }
1392 
1393     if (SemaRef.CheckFunctionTemplateSpecialization(Function,
1394                                                     &ExplicitArgs,
1395                                                     Previous))
1396       Function->setInvalidDecl();
1397 
1398     isExplicitSpecialization = true;
1399 
1400   } else if (TemplateParams || !FunctionTemplate) {
1401     // Look only into the namespace where the friend would be declared to
1402     // find a previous declaration. This is the innermost enclosing namespace,
1403     // as described in ActOnFriendFunctionDecl.
1404     SemaRef.LookupQualifiedName(Previous, DC);
1405 
1406     // In C++, the previous declaration we find might be a tag type
1407     // (class or enum). In this case, the new declaration will hide the
1408     // tag type. Note that this does does not apply if we're declaring a
1409     // typedef (C++ [dcl.typedef]p4).
1410     if (Previous.isSingleTagDecl())
1411       Previous.clear();
1412   }
1413 
1414   SemaRef.CheckFunctionDeclaration(/*Scope*/ 0, Function, Previous,
1415                                    isExplicitSpecialization);
1416 
1417   NamedDecl *PrincipalDecl = (TemplateParams
1418                               ? cast<NamedDecl>(FunctionTemplate)
1419                               : Function);
1420 
1421   // If the original function was part of a friend declaration,
1422   // inherit its namespace state and add it to the owner.
1423   if (isFriend) {
1424     PrincipalDecl->setObjectOfFriendDecl();
1425     DC->makeDeclVisibleInContext(PrincipalDecl);
1426 
1427     bool QueuedInstantiation = false;
1428 
1429     // C++11 [temp.friend]p4 (DR329):
1430     //   When a function is defined in a friend function declaration in a class
1431     //   template, the function is instantiated when the function is odr-used.
1432     //   The same restrictions on multiple declarations and definitions that
1433     //   apply to non-template function declarations and definitions also apply
1434     //   to these implicit definitions.
1435     if (D->isThisDeclarationADefinition()) {
1436       // Check for a function body.
1437       const FunctionDecl *Definition = 0;
1438       if (Function->isDefined(Definition) &&
1439           Definition->getTemplateSpecializationKind() == TSK_Undeclared) {
1440         SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
1441             << Function->getDeclName();
1442         SemaRef.Diag(Definition->getLocation(), diag::note_previous_definition);
1443       }
1444       // Check for redefinitions due to other instantiations of this or
1445       // a similar friend function.
1446       else for (auto R : Function->redecls()) {
1447         if (R == Function)
1448           continue;
1449 
1450         // If some prior declaration of this function has been used, we need
1451         // to instantiate its definition.
1452         if (!QueuedInstantiation && R->isUsed(false)) {
1453           if (MemberSpecializationInfo *MSInfo =
1454                   Function->getMemberSpecializationInfo()) {
1455             if (MSInfo->getPointOfInstantiation().isInvalid()) {
1456               SourceLocation Loc = R->getLocation(); // FIXME
1457               MSInfo->setPointOfInstantiation(Loc);
1458               SemaRef.PendingLocalImplicitInstantiations.push_back(
1459                                                std::make_pair(Function, Loc));
1460               QueuedInstantiation = true;
1461             }
1462           }
1463         }
1464 
1465         // If some prior declaration of this function was a friend with an
1466         // uninstantiated definition, reject it.
1467         if (R->getFriendObjectKind()) {
1468           if (const FunctionDecl *RPattern =
1469                   R->getTemplateInstantiationPattern()) {
1470             if (RPattern->isDefined(RPattern)) {
1471               SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
1472                 << Function->getDeclName();
1473               SemaRef.Diag(R->getLocation(), diag::note_previous_definition);
1474               break;
1475             }
1476           }
1477         }
1478       }
1479     }
1480   }
1481 
1482   if (Function->isLocalExternDecl() && !Function->getPreviousDecl())
1483     DC->makeDeclVisibleInContext(PrincipalDecl);
1484 
1485   if (Function->isOverloadedOperator() && !DC->isRecord() &&
1486       PrincipalDecl->isInIdentifierNamespace(Decl::IDNS_Ordinary))
1487     PrincipalDecl->setNonMemberOperator();
1488 
1489   assert(!D->isDefaulted() && "only methods should be defaulted");
1490   return Function;
1491 }
1492 
1493 Decl *
1494 TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D,
1495                                       TemplateParameterList *TemplateParams,
1496                                       bool IsClassScopeSpecialization) {
1497   FunctionTemplateDecl *FunctionTemplate = D->getDescribedFunctionTemplate();
1498   if (FunctionTemplate && !TemplateParams) {
1499     // We are creating a function template specialization from a function
1500     // template. Check whether there is already a function template
1501     // specialization for this particular set of template arguments.
1502     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
1503 
1504     void *InsertPos = 0;
1505     FunctionDecl *SpecFunc
1506       = FunctionTemplate->findSpecialization(Innermost.begin(),
1507                                              Innermost.size(),
1508                                              InsertPos);
1509 
1510     // If we already have a function template specialization, return it.
1511     if (SpecFunc)
1512       return SpecFunc;
1513   }
1514 
1515   bool isFriend;
1516   if (FunctionTemplate)
1517     isFriend = (FunctionTemplate->getFriendObjectKind() != Decl::FOK_None);
1518   else
1519     isFriend = (D->getFriendObjectKind() != Decl::FOK_None);
1520 
1521   bool MergeWithParentScope = (TemplateParams != 0) ||
1522     !(isa<Decl>(Owner) &&
1523       cast<Decl>(Owner)->isDefinedOutsideFunctionOrMethod());
1524   LocalInstantiationScope Scope(SemaRef, MergeWithParentScope);
1525 
1526   // Instantiate enclosing template arguments for friends.
1527   SmallVector<TemplateParameterList *, 4> TempParamLists;
1528   unsigned NumTempParamLists = 0;
1529   if (isFriend && (NumTempParamLists = D->getNumTemplateParameterLists())) {
1530     TempParamLists.set_size(NumTempParamLists);
1531     for (unsigned I = 0; I != NumTempParamLists; ++I) {
1532       TemplateParameterList *TempParams = D->getTemplateParameterList(I);
1533       TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
1534       if (!InstParams)
1535         return NULL;
1536       TempParamLists[I] = InstParams;
1537     }
1538   }
1539 
1540   SmallVector<ParmVarDecl *, 4> Params;
1541   TypeSourceInfo *TInfo = SubstFunctionType(D, Params);
1542   if (!TInfo)
1543     return 0;
1544   QualType T = adjustFunctionTypeForInstantiation(SemaRef.Context, D, TInfo);
1545 
1546   NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc();
1547   if (QualifierLoc) {
1548     QualifierLoc = SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc,
1549                                                  TemplateArgs);
1550     if (!QualifierLoc)
1551       return 0;
1552   }
1553 
1554   DeclContext *DC = Owner;
1555   if (isFriend) {
1556     if (QualifierLoc) {
1557       CXXScopeSpec SS;
1558       SS.Adopt(QualifierLoc);
1559       DC = SemaRef.computeDeclContext(SS);
1560 
1561       if (DC && SemaRef.RequireCompleteDeclContext(SS, DC))
1562         return 0;
1563     } else {
1564       DC = SemaRef.FindInstantiatedContext(D->getLocation(),
1565                                            D->getDeclContext(),
1566                                            TemplateArgs);
1567     }
1568     if (!DC) return 0;
1569   }
1570 
1571   // Build the instantiated method declaration.
1572   CXXRecordDecl *Record = cast<CXXRecordDecl>(DC);
1573   CXXMethodDecl *Method = 0;
1574 
1575   SourceLocation StartLoc = D->getInnerLocStart();
1576   DeclarationNameInfo NameInfo
1577     = SemaRef.SubstDeclarationNameInfo(D->getNameInfo(), TemplateArgs);
1578   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
1579     Method = CXXConstructorDecl::Create(SemaRef.Context, Record,
1580                                         StartLoc, NameInfo, T, TInfo,
1581                                         Constructor->isExplicit(),
1582                                         Constructor->isInlineSpecified(),
1583                                         false, Constructor->isConstexpr());
1584 
1585     // Claim that the instantiation of a constructor or constructor template
1586     // inherits the same constructor that the template does.
1587     if (CXXConstructorDecl *Inh = const_cast<CXXConstructorDecl *>(
1588             Constructor->getInheritedConstructor())) {
1589       // If we're instantiating a specialization of a function template, our
1590       // "inherited constructor" will actually itself be a function template.
1591       // Instantiate a declaration of it, too.
1592       if (FunctionTemplate) {
1593         assert(!TemplateParams && Inh->getDescribedFunctionTemplate() &&
1594                !Inh->getParent()->isDependentContext() &&
1595                "inheriting constructor template in dependent context?");
1596         Sema::InstantiatingTemplate Inst(SemaRef, Constructor->getLocation(),
1597                                          Inh);
1598         if (Inst.isInvalid())
1599           return 0;
1600         Sema::ContextRAII SavedContext(SemaRef, Inh->getDeclContext());
1601         LocalInstantiationScope LocalScope(SemaRef);
1602 
1603         // Use the same template arguments that we deduced for the inheriting
1604         // constructor. There's no way they could be deduced differently.
1605         MultiLevelTemplateArgumentList InheritedArgs;
1606         InheritedArgs.addOuterTemplateArguments(TemplateArgs.getInnermost());
1607         Inh = cast_or_null<CXXConstructorDecl>(
1608             SemaRef.SubstDecl(Inh, Inh->getDeclContext(), InheritedArgs));
1609         if (!Inh)
1610           return 0;
1611       }
1612       cast<CXXConstructorDecl>(Method)->setInheritedConstructor(Inh);
1613     }
1614   } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) {
1615     Method = CXXDestructorDecl::Create(SemaRef.Context, Record,
1616                                        StartLoc, NameInfo, T, TInfo,
1617                                        Destructor->isInlineSpecified(),
1618                                        false);
1619   } else if (CXXConversionDecl *Conversion = dyn_cast<CXXConversionDecl>(D)) {
1620     Method = CXXConversionDecl::Create(SemaRef.Context, Record,
1621                                        StartLoc, NameInfo, T, TInfo,
1622                                        Conversion->isInlineSpecified(),
1623                                        Conversion->isExplicit(),
1624                                        Conversion->isConstexpr(),
1625                                        Conversion->getLocEnd());
1626   } else {
1627     StorageClass SC = D->isStatic() ? SC_Static : SC_None;
1628     Method = CXXMethodDecl::Create(SemaRef.Context, Record,
1629                                    StartLoc, NameInfo, T, TInfo,
1630                                    SC, D->isInlineSpecified(),
1631                                    D->isConstexpr(), D->getLocEnd());
1632   }
1633 
1634   if (D->isInlined())
1635     Method->setImplicitlyInline();
1636 
1637   if (QualifierLoc)
1638     Method->setQualifierInfo(QualifierLoc);
1639 
1640   if (TemplateParams) {
1641     // Our resulting instantiation is actually a function template, since we
1642     // are substituting only the outer template parameters. For example, given
1643     //
1644     //   template<typename T>
1645     //   struct X {
1646     //     template<typename U> void f(T, U);
1647     //   };
1648     //
1649     //   X<int> x;
1650     //
1651     // We are instantiating the member template "f" within X<int>, which means
1652     // substituting int for T, but leaving "f" as a member function template.
1653     // Build the function template itself.
1654     FunctionTemplate = FunctionTemplateDecl::Create(SemaRef.Context, Record,
1655                                                     Method->getLocation(),
1656                                                     Method->getDeclName(),
1657                                                     TemplateParams, Method);
1658     if (isFriend) {
1659       FunctionTemplate->setLexicalDeclContext(Owner);
1660       FunctionTemplate->setObjectOfFriendDecl();
1661     } else if (D->isOutOfLine())
1662       FunctionTemplate->setLexicalDeclContext(D->getLexicalDeclContext());
1663     Method->setDescribedFunctionTemplate(FunctionTemplate);
1664   } else if (FunctionTemplate) {
1665     // Record this function template specialization.
1666     ArrayRef<TemplateArgument> Innermost = TemplateArgs.getInnermost();
1667     Method->setFunctionTemplateSpecialization(FunctionTemplate,
1668                          TemplateArgumentList::CreateCopy(SemaRef.Context,
1669                                                           Innermost.begin(),
1670                                                           Innermost.size()),
1671                                               /*InsertPos=*/0);
1672   } else if (!isFriend) {
1673     // Record that this is an instantiation of a member function.
1674     Method->setInstantiationOfMemberFunction(D, TSK_ImplicitInstantiation);
1675   }
1676 
1677   // If we are instantiating a member function defined
1678   // out-of-line, the instantiation will have the same lexical
1679   // context (which will be a namespace scope) as the template.
1680   if (isFriend) {
1681     if (NumTempParamLists)
1682       Method->setTemplateParameterListsInfo(SemaRef.Context,
1683                                             NumTempParamLists,
1684                                             TempParamLists.data());
1685 
1686     Method->setLexicalDeclContext(Owner);
1687     Method->setObjectOfFriendDecl();
1688   } else if (D->isOutOfLine())
1689     Method->setLexicalDeclContext(D->getLexicalDeclContext());
1690 
1691   // Attach the parameters
1692   for (unsigned P = 0; P < Params.size(); ++P)
1693     Params[P]->setOwningFunction(Method);
1694   Method->setParams(Params);
1695 
1696   if (InitMethodInstantiation(Method, D))
1697     Method->setInvalidDecl();
1698 
1699   LookupResult Previous(SemaRef, NameInfo, Sema::LookupOrdinaryName,
1700                         Sema::ForRedeclaration);
1701 
1702   if (!FunctionTemplate || TemplateParams || isFriend) {
1703     SemaRef.LookupQualifiedName(Previous, Record);
1704 
1705     // In C++, the previous declaration we find might be a tag type
1706     // (class or enum). In this case, the new declaration will hide the
1707     // tag type. Note that this does does not apply if we're declaring a
1708     // typedef (C++ [dcl.typedef]p4).
1709     if (Previous.isSingleTagDecl())
1710       Previous.clear();
1711   }
1712 
1713   if (!IsClassScopeSpecialization)
1714     SemaRef.CheckFunctionDeclaration(0, Method, Previous, false);
1715 
1716   if (D->isPure())
1717     SemaRef.CheckPureMethod(Method, SourceRange());
1718 
1719   // Propagate access.  For a non-friend declaration, the access is
1720   // whatever we're propagating from.  For a friend, it should be the
1721   // previous declaration we just found.
1722   if (isFriend && Method->getPreviousDecl())
1723     Method->setAccess(Method->getPreviousDecl()->getAccess());
1724   else
1725     Method->setAccess(D->getAccess());
1726   if (FunctionTemplate)
1727     FunctionTemplate->setAccess(Method->getAccess());
1728 
1729   SemaRef.CheckOverrideControl(Method);
1730 
1731   // If a function is defined as defaulted or deleted, mark it as such now.
1732   if (D->isExplicitlyDefaulted())
1733     SemaRef.SetDeclDefaulted(Method, Method->getLocation());
1734   if (D->isDeletedAsWritten())
1735     SemaRef.SetDeclDeleted(Method, Method->getLocation());
1736 
1737   // If there's a function template, let our caller handle it.
1738   if (FunctionTemplate) {
1739     // do nothing
1740 
1741   // Don't hide a (potentially) valid declaration with an invalid one.
1742   } else if (Method->isInvalidDecl() && !Previous.empty()) {
1743     // do nothing
1744 
1745   // Otherwise, check access to friends and make them visible.
1746   } else if (isFriend) {
1747     // We only need to re-check access for methods which we didn't
1748     // manage to match during parsing.
1749     if (!D->getPreviousDecl())
1750       SemaRef.CheckFriendAccess(Method);
1751 
1752     Record->makeDeclVisibleInContext(Method);
1753 
1754   // Otherwise, add the declaration.  We don't need to do this for
1755   // class-scope specializations because we'll have matched them with
1756   // the appropriate template.
1757   } else if (!IsClassScopeSpecialization) {
1758     Owner->addDecl(Method);
1759   }
1760 
1761   return Method;
1762 }
1763 
1764 Decl *TemplateDeclInstantiator::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
1765   return VisitCXXMethodDecl(D);
1766 }
1767 
1768 Decl *TemplateDeclInstantiator::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
1769   return VisitCXXMethodDecl(D);
1770 }
1771 
1772 Decl *TemplateDeclInstantiator::VisitCXXConversionDecl(CXXConversionDecl *D) {
1773   return VisitCXXMethodDecl(D);
1774 }
1775 
1776 Decl *TemplateDeclInstantiator::VisitParmVarDecl(ParmVarDecl *D) {
1777   return SemaRef.SubstParmVarDecl(D, TemplateArgs, /*indexAdjustment*/ 0, None,
1778                                   /*ExpectParameterPack=*/ false);
1779 }
1780 
1781 Decl *TemplateDeclInstantiator::VisitTemplateTypeParmDecl(
1782                                                     TemplateTypeParmDecl *D) {
1783   // TODO: don't always clone when decls are refcounted.
1784   assert(D->getTypeForDecl()->isTemplateTypeParmType());
1785 
1786   TemplateTypeParmDecl *Inst =
1787     TemplateTypeParmDecl::Create(SemaRef.Context, Owner,
1788                                  D->getLocStart(), D->getLocation(),
1789                                  D->getDepth() - TemplateArgs.getNumLevels(),
1790                                  D->getIndex(), D->getIdentifier(),
1791                                  D->wasDeclaredWithTypename(),
1792                                  D->isParameterPack());
1793   Inst->setAccess(AS_public);
1794 
1795   if (D->hasDefaultArgument()) {
1796     TypeSourceInfo *InstantiatedDefaultArg =
1797         SemaRef.SubstType(D->getDefaultArgumentInfo(), TemplateArgs,
1798                           D->getDefaultArgumentLoc(), D->getDeclName());
1799     if (InstantiatedDefaultArg)
1800       Inst->setDefaultArgument(InstantiatedDefaultArg, false);
1801   }
1802 
1803   // Introduce this template parameter's instantiation into the instantiation
1804   // scope.
1805   SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Inst);
1806 
1807   return Inst;
1808 }
1809 
1810 Decl *TemplateDeclInstantiator::VisitNonTypeTemplateParmDecl(
1811                                                  NonTypeTemplateParmDecl *D) {
1812   // Substitute into the type of the non-type template parameter.
1813   TypeLoc TL = D->getTypeSourceInfo()->getTypeLoc();
1814   SmallVector<TypeSourceInfo *, 4> ExpandedParameterPackTypesAsWritten;
1815   SmallVector<QualType, 4> ExpandedParameterPackTypes;
1816   bool IsExpandedParameterPack = false;
1817   TypeSourceInfo *DI;
1818   QualType T;
1819   bool Invalid = false;
1820 
1821   if (D->isExpandedParameterPack()) {
1822     // The non-type template parameter pack is an already-expanded pack
1823     // expansion of types. Substitute into each of the expanded types.
1824     ExpandedParameterPackTypes.reserve(D->getNumExpansionTypes());
1825     ExpandedParameterPackTypesAsWritten.reserve(D->getNumExpansionTypes());
1826     for (unsigned I = 0, N = D->getNumExpansionTypes(); I != N; ++I) {
1827       TypeSourceInfo *NewDI =SemaRef.SubstType(D->getExpansionTypeSourceInfo(I),
1828                                                TemplateArgs,
1829                                                D->getLocation(),
1830                                                D->getDeclName());
1831       if (!NewDI)
1832         return 0;
1833 
1834       ExpandedParameterPackTypesAsWritten.push_back(NewDI);
1835       QualType NewT =SemaRef.CheckNonTypeTemplateParameterType(NewDI->getType(),
1836                                                               D->getLocation());
1837       if (NewT.isNull())
1838         return 0;
1839       ExpandedParameterPackTypes.push_back(NewT);
1840     }
1841 
1842     IsExpandedParameterPack = true;
1843     DI = D->getTypeSourceInfo();
1844     T = DI->getType();
1845   } else if (D->isPackExpansion()) {
1846     // The non-type template parameter pack's type is a pack expansion of types.
1847     // Determine whether we need to expand this parameter pack into separate
1848     // types.
1849     PackExpansionTypeLoc Expansion = TL.castAs<PackExpansionTypeLoc>();
1850     TypeLoc Pattern = Expansion.getPatternLoc();
1851     SmallVector<UnexpandedParameterPack, 2> Unexpanded;
1852     SemaRef.collectUnexpandedParameterPacks(Pattern, Unexpanded);
1853 
1854     // Determine whether the set of unexpanded parameter packs can and should
1855     // be expanded.
1856     bool Expand = true;
1857     bool RetainExpansion = false;
1858     Optional<unsigned> OrigNumExpansions
1859       = Expansion.getTypePtr()->getNumExpansions();
1860     Optional<unsigned> NumExpansions = OrigNumExpansions;
1861     if (SemaRef.CheckParameterPacksForExpansion(Expansion.getEllipsisLoc(),
1862                                                 Pattern.getSourceRange(),
1863                                                 Unexpanded,
1864                                                 TemplateArgs,
1865                                                 Expand, RetainExpansion,
1866                                                 NumExpansions))
1867       return 0;
1868 
1869     if (Expand) {
1870       for (unsigned I = 0; I != *NumExpansions; ++I) {
1871         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, I);
1872         TypeSourceInfo *NewDI = SemaRef.SubstType(Pattern, TemplateArgs,
1873                                                   D->getLocation(),
1874                                                   D->getDeclName());
1875         if (!NewDI)
1876           return 0;
1877 
1878         ExpandedParameterPackTypesAsWritten.push_back(NewDI);
1879         QualType NewT = SemaRef.CheckNonTypeTemplateParameterType(
1880                                                               NewDI->getType(),
1881                                                               D->getLocation());
1882         if (NewT.isNull())
1883           return 0;
1884         ExpandedParameterPackTypes.push_back(NewT);
1885       }
1886 
1887       // Note that we have an expanded parameter pack. The "type" of this
1888       // expanded parameter pack is the original expansion type, but callers
1889       // will end up using the expanded parameter pack types for type-checking.
1890       IsExpandedParameterPack = true;
1891       DI = D->getTypeSourceInfo();
1892       T = DI->getType();
1893     } else {
1894       // We cannot fully expand the pack expansion now, so substitute into the
1895       // pattern and create a new pack expansion type.
1896       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
1897       TypeSourceInfo *NewPattern = SemaRef.SubstType(Pattern, TemplateArgs,
1898                                                      D->getLocation(),
1899                                                      D->getDeclName());
1900       if (!NewPattern)
1901         return 0;
1902 
1903       DI = SemaRef.CheckPackExpansion(NewPattern, Expansion.getEllipsisLoc(),
1904                                       NumExpansions);
1905       if (!DI)
1906         return 0;
1907 
1908       T = DI->getType();
1909     }
1910   } else {
1911     // Simple case: substitution into a parameter that is not a parameter pack.
1912     DI = SemaRef.SubstType(D->getTypeSourceInfo(), TemplateArgs,
1913                            D->getLocation(), D->getDeclName());
1914     if (!DI)
1915       return 0;
1916 
1917     // Check that this type is acceptable for a non-type template parameter.
1918     T = SemaRef.CheckNonTypeTemplateParameterType(DI->getType(),
1919                                                   D->getLocation());
1920     if (T.isNull()) {
1921       T = SemaRef.Context.IntTy;
1922       Invalid = true;
1923     }
1924   }
1925 
1926   NonTypeTemplateParmDecl *Param;
1927   if (IsExpandedParameterPack)
1928     Param = NonTypeTemplateParmDecl::Create(SemaRef.Context, Owner,
1929                                             D->getInnerLocStart(),
1930                                             D->getLocation(),
1931                                     D->getDepth() - TemplateArgs.getNumLevels(),
1932                                             D->getPosition(),
1933                                             D->getIdentifier(), T,
1934                                             DI,
1935                                             ExpandedParameterPackTypes.data(),
1936                                             ExpandedParameterPackTypes.size(),
1937                                     ExpandedParameterPackTypesAsWritten.data());
1938   else
1939     Param = NonTypeTemplateParmDecl::Create(SemaRef.Context, Owner,
1940                                             D->getInnerLocStart(),
1941                                             D->getLocation(),
1942                                     D->getDepth() - TemplateArgs.getNumLevels(),
1943                                             D->getPosition(),
1944                                             D->getIdentifier(), T,
1945                                             D->isParameterPack(), DI);
1946 
1947   Param->setAccess(AS_public);
1948   if (Invalid)
1949     Param->setInvalidDecl();
1950 
1951   if (D->hasDefaultArgument()) {
1952     ExprResult Value = SemaRef.SubstExpr(D->getDefaultArgument(), TemplateArgs);
1953     if (!Value.isInvalid())
1954       Param->setDefaultArgument(Value.get(), false);
1955   }
1956 
1957   // Introduce this template parameter's instantiation into the instantiation
1958   // scope.
1959   SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Param);
1960   return Param;
1961 }
1962 
1963 static void collectUnexpandedParameterPacks(
1964     Sema &S,
1965     TemplateParameterList *Params,
1966     SmallVectorImpl<UnexpandedParameterPack> &Unexpanded) {
1967   for (TemplateParameterList::const_iterator I = Params->begin(),
1968                                              E = Params->end(); I != E; ++I) {
1969     if ((*I)->isTemplateParameterPack())
1970       continue;
1971     if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(*I))
1972       S.collectUnexpandedParameterPacks(NTTP->getTypeSourceInfo()->getTypeLoc(),
1973                                         Unexpanded);
1974     if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(*I))
1975       collectUnexpandedParameterPacks(S, TTP->getTemplateParameters(),
1976                                       Unexpanded);
1977   }
1978 }
1979 
1980 Decl *
1981 TemplateDeclInstantiator::VisitTemplateTemplateParmDecl(
1982                                                   TemplateTemplateParmDecl *D) {
1983   // Instantiate the template parameter list of the template template parameter.
1984   TemplateParameterList *TempParams = D->getTemplateParameters();
1985   TemplateParameterList *InstParams;
1986   SmallVector<TemplateParameterList*, 8> ExpandedParams;
1987 
1988   bool IsExpandedParameterPack = false;
1989 
1990   if (D->isExpandedParameterPack()) {
1991     // The template template parameter pack is an already-expanded pack
1992     // expansion of template parameters. Substitute into each of the expanded
1993     // parameters.
1994     ExpandedParams.reserve(D->getNumExpansionTemplateParameters());
1995     for (unsigned I = 0, N = D->getNumExpansionTemplateParameters();
1996          I != N; ++I) {
1997       LocalInstantiationScope Scope(SemaRef);
1998       TemplateParameterList *Expansion =
1999         SubstTemplateParams(D->getExpansionTemplateParameters(I));
2000       if (!Expansion)
2001         return 0;
2002       ExpandedParams.push_back(Expansion);
2003     }
2004 
2005     IsExpandedParameterPack = true;
2006     InstParams = TempParams;
2007   } else if (D->isPackExpansion()) {
2008     // The template template parameter pack expands to a pack of template
2009     // template parameters. Determine whether we need to expand this parameter
2010     // pack into separate parameters.
2011     SmallVector<UnexpandedParameterPack, 2> Unexpanded;
2012     collectUnexpandedParameterPacks(SemaRef, D->getTemplateParameters(),
2013                                     Unexpanded);
2014 
2015     // Determine whether the set of unexpanded parameter packs can and should
2016     // be expanded.
2017     bool Expand = true;
2018     bool RetainExpansion = false;
2019     Optional<unsigned> NumExpansions;
2020     if (SemaRef.CheckParameterPacksForExpansion(D->getLocation(),
2021                                                 TempParams->getSourceRange(),
2022                                                 Unexpanded,
2023                                                 TemplateArgs,
2024                                                 Expand, RetainExpansion,
2025                                                 NumExpansions))
2026       return 0;
2027 
2028     if (Expand) {
2029       for (unsigned I = 0; I != *NumExpansions; ++I) {
2030         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, I);
2031         LocalInstantiationScope Scope(SemaRef);
2032         TemplateParameterList *Expansion = SubstTemplateParams(TempParams);
2033         if (!Expansion)
2034           return 0;
2035         ExpandedParams.push_back(Expansion);
2036       }
2037 
2038       // Note that we have an expanded parameter pack. The "type" of this
2039       // expanded parameter pack is the original expansion type, but callers
2040       // will end up using the expanded parameter pack types for type-checking.
2041       IsExpandedParameterPack = true;
2042       InstParams = TempParams;
2043     } else {
2044       // We cannot fully expand the pack expansion now, so just substitute
2045       // into the pattern.
2046       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
2047 
2048       LocalInstantiationScope Scope(SemaRef);
2049       InstParams = SubstTemplateParams(TempParams);
2050       if (!InstParams)
2051         return 0;
2052     }
2053   } else {
2054     // Perform the actual substitution of template parameters within a new,
2055     // local instantiation scope.
2056     LocalInstantiationScope Scope(SemaRef);
2057     InstParams = SubstTemplateParams(TempParams);
2058     if (!InstParams)
2059       return 0;
2060   }
2061 
2062   // Build the template template parameter.
2063   TemplateTemplateParmDecl *Param;
2064   if (IsExpandedParameterPack)
2065     Param = TemplateTemplateParmDecl::Create(SemaRef.Context, Owner,
2066                                              D->getLocation(),
2067                                    D->getDepth() - TemplateArgs.getNumLevels(),
2068                                              D->getPosition(),
2069                                              D->getIdentifier(), InstParams,
2070                                              ExpandedParams);
2071   else
2072     Param = TemplateTemplateParmDecl::Create(SemaRef.Context, Owner,
2073                                              D->getLocation(),
2074                                    D->getDepth() - TemplateArgs.getNumLevels(),
2075                                              D->getPosition(),
2076                                              D->isParameterPack(),
2077                                              D->getIdentifier(), InstParams);
2078   if (D->hasDefaultArgument()) {
2079     NestedNameSpecifierLoc QualifierLoc =
2080         D->getDefaultArgument().getTemplateQualifierLoc();
2081     QualifierLoc =
2082         SemaRef.SubstNestedNameSpecifierLoc(QualifierLoc, TemplateArgs);
2083     TemplateName TName = SemaRef.SubstTemplateName(
2084         QualifierLoc, D->getDefaultArgument().getArgument().getAsTemplate(),
2085         D->getDefaultArgument().getTemplateNameLoc(), TemplateArgs);
2086     if (!TName.isNull())
2087       Param->setDefaultArgument(
2088           TemplateArgumentLoc(TemplateArgument(TName),
2089                               D->getDefaultArgument().getTemplateQualifierLoc(),
2090                               D->getDefaultArgument().getTemplateNameLoc()),
2091           false);
2092   }
2093   Param->setAccess(AS_public);
2094 
2095   // Introduce this template parameter's instantiation into the instantiation
2096   // scope.
2097   SemaRef.CurrentInstantiationScope->InstantiatedLocal(D, Param);
2098 
2099   return Param;
2100 }
2101 
2102 Decl *TemplateDeclInstantiator::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
2103   // Using directives are never dependent (and never contain any types or
2104   // expressions), so they require no explicit instantiation work.
2105 
2106   UsingDirectiveDecl *Inst
2107     = UsingDirectiveDecl::Create(SemaRef.Context, Owner, D->getLocation(),
2108                                  D->getNamespaceKeyLocation(),
2109                                  D->getQualifierLoc(),
2110                                  D->getIdentLocation(),
2111                                  D->getNominatedNamespace(),
2112                                  D->getCommonAncestor());
2113 
2114   // Add the using directive to its declaration context
2115   // only if this is not a function or method.
2116   if (!Owner->isFunctionOrMethod())
2117     Owner->addDecl(Inst);
2118 
2119   return Inst;
2120 }
2121 
2122 Decl *TemplateDeclInstantiator::VisitUsingDecl(UsingDecl *D) {
2123 
2124   // The nested name specifier may be dependent, for example
2125   //     template <typename T> struct t {
2126   //       struct s1 { T f1(); };
2127   //       struct s2 : s1 { using s1::f1; };
2128   //     };
2129   //     template struct t<int>;
2130   // Here, in using s1::f1, s1 refers to t<T>::s1;
2131   // we need to substitute for t<int>::s1.
2132   NestedNameSpecifierLoc QualifierLoc
2133     = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(),
2134                                           TemplateArgs);
2135   if (!QualifierLoc)
2136     return 0;
2137 
2138   // The name info is non-dependent, so no transformation
2139   // is required.
2140   DeclarationNameInfo NameInfo = D->getNameInfo();
2141 
2142   // We only need to do redeclaration lookups if we're in a class
2143   // scope (in fact, it's not really even possible in non-class
2144   // scopes).
2145   bool CheckRedeclaration = Owner->isRecord();
2146 
2147   LookupResult Prev(SemaRef, NameInfo, Sema::LookupUsingDeclName,
2148                     Sema::ForRedeclaration);
2149 
2150   UsingDecl *NewUD = UsingDecl::Create(SemaRef.Context, Owner,
2151                                        D->getUsingLoc(),
2152                                        QualifierLoc,
2153                                        NameInfo,
2154                                        D->hasTypename());
2155 
2156   CXXScopeSpec SS;
2157   SS.Adopt(QualifierLoc);
2158   if (CheckRedeclaration) {
2159     Prev.setHideTags(false);
2160     SemaRef.LookupQualifiedName(Prev, Owner);
2161 
2162     // Check for invalid redeclarations.
2163     if (SemaRef.CheckUsingDeclRedeclaration(D->getUsingLoc(),
2164                                             D->hasTypename(), SS,
2165                                             D->getLocation(), Prev))
2166       NewUD->setInvalidDecl();
2167 
2168   }
2169 
2170   if (!NewUD->isInvalidDecl() &&
2171       SemaRef.CheckUsingDeclQualifier(D->getUsingLoc(), SS,
2172                                       D->getLocation()))
2173     NewUD->setInvalidDecl();
2174 
2175   SemaRef.Context.setInstantiatedFromUsingDecl(NewUD, D);
2176   NewUD->setAccess(D->getAccess());
2177   Owner->addDecl(NewUD);
2178 
2179   // Don't process the shadow decls for an invalid decl.
2180   if (NewUD->isInvalidDecl())
2181     return NewUD;
2182 
2183   if (NameInfo.getName().getNameKind() == DeclarationName::CXXConstructorName) {
2184     if (SemaRef.CheckInheritingConstructorUsingDecl(NewUD))
2185       NewUD->setInvalidDecl();
2186     return NewUD;
2187   }
2188 
2189   bool isFunctionScope = Owner->isFunctionOrMethod();
2190 
2191   // Process the shadow decls.
2192   for (UsingDecl::shadow_iterator I = D->shadow_begin(), E = D->shadow_end();
2193          I != E; ++I) {
2194     UsingShadowDecl *Shadow = *I;
2195     NamedDecl *InstTarget =
2196         cast_or_null<NamedDecl>(SemaRef.FindInstantiatedDecl(
2197             Shadow->getLocation(), Shadow->getTargetDecl(), TemplateArgs));
2198     if (!InstTarget)
2199       return 0;
2200 
2201     UsingShadowDecl *PrevDecl = 0;
2202     if (CheckRedeclaration) {
2203       if (SemaRef.CheckUsingShadowDecl(NewUD, InstTarget, Prev, PrevDecl))
2204         continue;
2205     } else if (UsingShadowDecl *OldPrev = Shadow->getPreviousDecl()) {
2206       PrevDecl = cast_or_null<UsingShadowDecl>(SemaRef.FindInstantiatedDecl(
2207           Shadow->getLocation(), OldPrev, TemplateArgs));
2208     }
2209 
2210     UsingShadowDecl *InstShadow =
2211         SemaRef.BuildUsingShadowDecl(/*Scope*/0, NewUD, InstTarget, PrevDecl);
2212     SemaRef.Context.setInstantiatedFromUsingShadowDecl(InstShadow, Shadow);
2213 
2214     if (isFunctionScope)
2215       SemaRef.CurrentInstantiationScope->InstantiatedLocal(Shadow, InstShadow);
2216   }
2217 
2218   return NewUD;
2219 }
2220 
2221 Decl *TemplateDeclInstantiator::VisitUsingShadowDecl(UsingShadowDecl *D) {
2222   // Ignore these;  we handle them in bulk when processing the UsingDecl.
2223   return 0;
2224 }
2225 
2226 Decl * TemplateDeclInstantiator
2227     ::VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D) {
2228   NestedNameSpecifierLoc QualifierLoc
2229     = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(),
2230                                           TemplateArgs);
2231   if (!QualifierLoc)
2232     return 0;
2233 
2234   CXXScopeSpec SS;
2235   SS.Adopt(QualifierLoc);
2236 
2237   // Since NameInfo refers to a typename, it cannot be a C++ special name.
2238   // Hence, no transformation is required for it.
2239   DeclarationNameInfo NameInfo(D->getDeclName(), D->getLocation());
2240   NamedDecl *UD =
2241     SemaRef.BuildUsingDeclaration(/*Scope*/ 0, D->getAccess(),
2242                                   D->getUsingLoc(), SS, NameInfo, 0,
2243                                   /*instantiation*/ true,
2244                                   /*typename*/ true, D->getTypenameLoc());
2245   if (UD)
2246     SemaRef.Context.setInstantiatedFromUsingDecl(cast<UsingDecl>(UD), D);
2247 
2248   return UD;
2249 }
2250 
2251 Decl * TemplateDeclInstantiator
2252     ::VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D) {
2253   NestedNameSpecifierLoc QualifierLoc
2254       = SemaRef.SubstNestedNameSpecifierLoc(D->getQualifierLoc(), TemplateArgs);
2255   if (!QualifierLoc)
2256     return 0;
2257 
2258   CXXScopeSpec SS;
2259   SS.Adopt(QualifierLoc);
2260 
2261   DeclarationNameInfo NameInfo
2262     = SemaRef.SubstDeclarationNameInfo(D->getNameInfo(), TemplateArgs);
2263 
2264   NamedDecl *UD =
2265     SemaRef.BuildUsingDeclaration(/*Scope*/ 0, D->getAccess(),
2266                                   D->getUsingLoc(), SS, NameInfo, 0,
2267                                   /*instantiation*/ true,
2268                                   /*typename*/ false, SourceLocation());
2269   if (UD)
2270     SemaRef.Context.setInstantiatedFromUsingDecl(cast<UsingDecl>(UD), D);
2271 
2272   return UD;
2273 }
2274 
2275 
2276 Decl *TemplateDeclInstantiator::VisitClassScopeFunctionSpecializationDecl(
2277                                      ClassScopeFunctionSpecializationDecl *Decl) {
2278   CXXMethodDecl *OldFD = Decl->getSpecialization();
2279   CXXMethodDecl *NewFD = cast<CXXMethodDecl>(VisitCXXMethodDecl(OldFD,
2280                                                                 0, true));
2281 
2282   LookupResult Previous(SemaRef, NewFD->getNameInfo(), Sema::LookupOrdinaryName,
2283                         Sema::ForRedeclaration);
2284 
2285   TemplateArgumentListInfo TemplateArgs;
2286   TemplateArgumentListInfo* TemplateArgsPtr = 0;
2287   if (Decl->hasExplicitTemplateArgs()) {
2288     TemplateArgs = Decl->templateArgs();
2289     TemplateArgsPtr = &TemplateArgs;
2290   }
2291 
2292   SemaRef.LookupQualifiedName(Previous, SemaRef.CurContext);
2293   if (SemaRef.CheckFunctionTemplateSpecialization(NewFD, TemplateArgsPtr,
2294                                                   Previous)) {
2295     NewFD->setInvalidDecl();
2296     return NewFD;
2297   }
2298 
2299   // Associate the specialization with the pattern.
2300   FunctionDecl *Specialization = cast<FunctionDecl>(Previous.getFoundDecl());
2301   assert(Specialization && "Class scope Specialization is null");
2302   SemaRef.Context.setClassScopeSpecializationPattern(Specialization, OldFD);
2303 
2304   return NewFD;
2305 }
2306 
2307 Decl *TemplateDeclInstantiator::VisitOMPThreadPrivateDecl(
2308                                      OMPThreadPrivateDecl *D) {
2309   SmallVector<Expr *, 5> Vars;
2310   for (ArrayRef<Expr *>::iterator I = D->varlist_begin(),
2311                                   E = D->varlist_end();
2312        I != E; ++I) {
2313     Expr *Var = SemaRef.SubstExpr(*I, TemplateArgs).take();
2314     assert(isa<DeclRefExpr>(Var) && "threadprivate arg is not a DeclRefExpr");
2315     Vars.push_back(Var);
2316   }
2317 
2318   OMPThreadPrivateDecl *TD =
2319     SemaRef.CheckOMPThreadPrivateDecl(D->getLocation(), Vars);
2320 
2321   TD->setAccess(AS_public);
2322   Owner->addDecl(TD);
2323 
2324   return TD;
2325 }
2326 
2327 Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D) {
2328   return VisitFunctionDecl(D, 0);
2329 }
2330 
2331 Decl *TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D) {
2332   return VisitCXXMethodDecl(D, 0);
2333 }
2334 
2335 Decl *TemplateDeclInstantiator::VisitRecordDecl(RecordDecl *D) {
2336   llvm_unreachable("There are only CXXRecordDecls in C++");
2337 }
2338 
2339 Decl *
2340 TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(
2341     ClassTemplateSpecializationDecl *D) {
2342   // As a MS extension, we permit class-scope explicit specialization
2343   // of member class templates.
2344   ClassTemplateDecl *ClassTemplate = D->getSpecializedTemplate();
2345   assert(ClassTemplate->getDeclContext()->isRecord() &&
2346          D->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&
2347          "can only instantiate an explicit specialization "
2348          "for a member class template");
2349 
2350   // Lookup the already-instantiated declaration in the instantiation
2351   // of the class template. FIXME: Diagnose or assert if this fails?
2352   DeclContext::lookup_result Found
2353     = Owner->lookup(ClassTemplate->getDeclName());
2354   if (Found.empty())
2355     return 0;
2356   ClassTemplateDecl *InstClassTemplate
2357     = dyn_cast<ClassTemplateDecl>(Found.front());
2358   if (!InstClassTemplate)
2359     return 0;
2360 
2361   // Substitute into the template arguments of the class template explicit
2362   // specialization.
2363   TemplateSpecializationTypeLoc Loc = D->getTypeAsWritten()->getTypeLoc().
2364                                         castAs<TemplateSpecializationTypeLoc>();
2365   TemplateArgumentListInfo InstTemplateArgs(Loc.getLAngleLoc(),
2366                                             Loc.getRAngleLoc());
2367   SmallVector<TemplateArgumentLoc, 4> ArgLocs;
2368   for (unsigned I = 0; I != Loc.getNumArgs(); ++I)
2369     ArgLocs.push_back(Loc.getArgLoc(I));
2370   if (SemaRef.Subst(ArgLocs.data(), ArgLocs.size(),
2371                     InstTemplateArgs, TemplateArgs))
2372     return 0;
2373 
2374   // Check that the template argument list is well-formed for this
2375   // class template.
2376   SmallVector<TemplateArgument, 4> Converted;
2377   if (SemaRef.CheckTemplateArgumentList(InstClassTemplate,
2378                                         D->getLocation(),
2379                                         InstTemplateArgs,
2380                                         false,
2381                                         Converted))
2382     return 0;
2383 
2384   // Figure out where to insert this class template explicit specialization
2385   // in the member template's set of class template explicit specializations.
2386   void *InsertPos = 0;
2387   ClassTemplateSpecializationDecl *PrevDecl =
2388       InstClassTemplate->findSpecialization(Converted.data(), Converted.size(),
2389                                             InsertPos);
2390 
2391   // Check whether we've already seen a conflicting instantiation of this
2392   // declaration (for instance, if there was a prior implicit instantiation).
2393   bool Ignored;
2394   if (PrevDecl &&
2395       SemaRef.CheckSpecializationInstantiationRedecl(D->getLocation(),
2396                                                      D->getSpecializationKind(),
2397                                                      PrevDecl,
2398                                                      PrevDecl->getSpecializationKind(),
2399                                                      PrevDecl->getPointOfInstantiation(),
2400                                                      Ignored))
2401     return 0;
2402 
2403   // If PrevDecl was a definition and D is also a definition, diagnose.
2404   // This happens in cases like:
2405   //
2406   //   template<typename T, typename U>
2407   //   struct Outer {
2408   //     template<typename X> struct Inner;
2409   //     template<> struct Inner<T> {};
2410   //     template<> struct Inner<U> {};
2411   //   };
2412   //
2413   //   Outer<int, int> outer; // error: the explicit specializations of Inner
2414   //                          // have the same signature.
2415   if (PrevDecl && PrevDecl->getDefinition() &&
2416       D->isThisDeclarationADefinition()) {
2417     SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;
2418     SemaRef.Diag(PrevDecl->getDefinition()->getLocation(),
2419                  diag::note_previous_definition);
2420     return 0;
2421   }
2422 
2423   // Create the class template partial specialization declaration.
2424   ClassTemplateSpecializationDecl *InstD
2425     = ClassTemplateSpecializationDecl::Create(SemaRef.Context,
2426                                               D->getTagKind(),
2427                                               Owner,
2428                                               D->getLocStart(),
2429                                               D->getLocation(),
2430                                               InstClassTemplate,
2431                                               Converted.data(),
2432                                               Converted.size(),
2433                                               PrevDecl);
2434 
2435   // Add this partial specialization to the set of class template partial
2436   // specializations.
2437   if (!PrevDecl)
2438     InstClassTemplate->AddSpecialization(InstD, InsertPos);
2439 
2440   // Substitute the nested name specifier, if any.
2441   if (SubstQualifier(D, InstD))
2442     return 0;
2443 
2444   // Build the canonical type that describes the converted template
2445   // arguments of the class template explicit specialization.
2446   QualType CanonType = SemaRef.Context.getTemplateSpecializationType(
2447       TemplateName(InstClassTemplate), Converted.data(), Converted.size(),
2448       SemaRef.Context.getRecordType(InstD));
2449 
2450   // Build the fully-sugared type for this class template
2451   // specialization as the user wrote in the specialization
2452   // itself. This means that we'll pretty-print the type retrieved
2453   // from the specialization's declaration the way that the user
2454   // actually wrote the specialization, rather than formatting the
2455   // name based on the "canonical" representation used to store the
2456   // template arguments in the specialization.
2457   TypeSourceInfo *WrittenTy = SemaRef.Context.getTemplateSpecializationTypeInfo(
2458       TemplateName(InstClassTemplate), D->getLocation(), InstTemplateArgs,
2459       CanonType);
2460 
2461   InstD->setAccess(D->getAccess());
2462   InstD->setInstantiationOfMemberClass(D, TSK_ImplicitInstantiation);
2463   InstD->setSpecializationKind(D->getSpecializationKind());
2464   InstD->setTypeAsWritten(WrittenTy);
2465   InstD->setExternLoc(D->getExternLoc());
2466   InstD->setTemplateKeywordLoc(D->getTemplateKeywordLoc());
2467 
2468   Owner->addDecl(InstD);
2469 
2470   // Instantiate the members of the class-scope explicit specialization eagerly.
2471   // We don't have support for lazy instantiation of an explicit specialization
2472   // yet, and MSVC eagerly instantiates in this case.
2473   if (D->isThisDeclarationADefinition() &&
2474       SemaRef.InstantiateClass(D->getLocation(), InstD, D, TemplateArgs,
2475                                TSK_ImplicitInstantiation,
2476                                /*Complain=*/true))
2477     return 0;
2478 
2479   return InstD;
2480 }
2481 
2482 Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
2483     VarTemplateSpecializationDecl *D) {
2484 
2485   TemplateArgumentListInfo VarTemplateArgsInfo;
2486   VarTemplateDecl *VarTemplate = D->getSpecializedTemplate();
2487   assert(VarTemplate &&
2488          "A template specialization without specialized template?");
2489 
2490   // Substitute the current template arguments.
2491   const TemplateArgumentListInfo &TemplateArgsInfo = D->getTemplateArgsInfo();
2492   VarTemplateArgsInfo.setLAngleLoc(TemplateArgsInfo.getLAngleLoc());
2493   VarTemplateArgsInfo.setRAngleLoc(TemplateArgsInfo.getRAngleLoc());
2494 
2495   if (SemaRef.Subst(TemplateArgsInfo.getArgumentArray(),
2496                     TemplateArgsInfo.size(), VarTemplateArgsInfo, TemplateArgs))
2497     return 0;
2498 
2499   // Check that the template argument list is well-formed for this template.
2500   SmallVector<TemplateArgument, 4> Converted;
2501   if (SemaRef.CheckTemplateArgumentList(
2502           VarTemplate, VarTemplate->getLocStart(),
2503           const_cast<TemplateArgumentListInfo &>(VarTemplateArgsInfo), false,
2504           Converted))
2505     return 0;
2506 
2507   // Find the variable template specialization declaration that
2508   // corresponds to these arguments.
2509   void *InsertPos = 0;
2510   if (VarTemplateSpecializationDecl *VarSpec = VarTemplate->findSpecialization(
2511           Converted.data(), Converted.size(), InsertPos))
2512     // If we already have a variable template specialization, return it.
2513     return VarSpec;
2514 
2515   return VisitVarTemplateSpecializationDecl(VarTemplate, D, InsertPos,
2516                                             VarTemplateArgsInfo, Converted);
2517 }
2518 
2519 Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(
2520     VarTemplateDecl *VarTemplate, VarDecl *D, void *InsertPos,
2521     const TemplateArgumentListInfo &TemplateArgsInfo,
2522     llvm::ArrayRef<TemplateArgument> Converted) {
2523 
2524   // If this is the variable for an anonymous struct or union,
2525   // instantiate the anonymous struct/union type first.
2526   if (const RecordType *RecordTy = D->getType()->getAs<RecordType>())
2527     if (RecordTy->getDecl()->isAnonymousStructOrUnion())
2528       if (!VisitCXXRecordDecl(cast<CXXRecordDecl>(RecordTy->getDecl())))
2529         return 0;
2530 
2531   // Do substitution on the type of the declaration
2532   TypeSourceInfo *DI =
2533       SemaRef.SubstType(D->getTypeSourceInfo(), TemplateArgs,
2534                         D->getTypeSpecStartLoc(), D->getDeclName());
2535   if (!DI)
2536     return 0;
2537 
2538   if (DI->getType()->isFunctionType()) {
2539     SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function)
2540         << D->isStaticDataMember() << DI->getType();
2541     return 0;
2542   }
2543 
2544   // Build the instantiated declaration
2545   VarTemplateSpecializationDecl *Var = VarTemplateSpecializationDecl::Create(
2546       SemaRef.Context, Owner, D->getInnerLocStart(), D->getLocation(),
2547       VarTemplate, DI->getType(), DI, D->getStorageClass(), Converted.data(),
2548       Converted.size());
2549   Var->setTemplateArgsInfo(TemplateArgsInfo);
2550   if (InsertPos)
2551     VarTemplate->AddSpecialization(Var, InsertPos);
2552 
2553   // Substitute the nested name specifier, if any.
2554   if (SubstQualifier(D, Var))
2555     return 0;
2556 
2557   SemaRef.BuildVariableInstantiation(Var, D, TemplateArgs, LateAttrs,
2558                                      Owner, StartingScope);
2559 
2560   return Var;
2561 }
2562 
2563 Decl *TemplateDeclInstantiator::VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D) {
2564   llvm_unreachable("@defs is not supported in Objective-C++");
2565 }
2566 
2567 Decl *TemplateDeclInstantiator::VisitFriendTemplateDecl(FriendTemplateDecl *D) {
2568   // FIXME: We need to be able to instantiate FriendTemplateDecls.
2569   unsigned DiagID = SemaRef.getDiagnostics().getCustomDiagID(
2570                                                DiagnosticsEngine::Error,
2571                                                "cannot instantiate %0 yet");
2572   SemaRef.Diag(D->getLocation(), DiagID)
2573     << D->getDeclKindName();
2574 
2575   return 0;
2576 }
2577 
2578 Decl *TemplateDeclInstantiator::VisitDecl(Decl *D) {
2579   llvm_unreachable("Unexpected decl");
2580 }
2581 
2582 Decl *Sema::SubstDecl(Decl *D, DeclContext *Owner,
2583                       const MultiLevelTemplateArgumentList &TemplateArgs) {
2584   TemplateDeclInstantiator Instantiator(*this, Owner, TemplateArgs);
2585   if (D->isInvalidDecl())
2586     return 0;
2587 
2588   return Instantiator.Visit(D);
2589 }
2590 
2591 /// \brief Instantiates a nested template parameter list in the current
2592 /// instantiation context.
2593 ///
2594 /// \param L The parameter list to instantiate
2595 ///
2596 /// \returns NULL if there was an error
2597 TemplateParameterList *
2598 TemplateDeclInstantiator::SubstTemplateParams(TemplateParameterList *L) {
2599   // Get errors for all the parameters before bailing out.
2600   bool Invalid = false;
2601 
2602   unsigned N = L->size();
2603   typedef SmallVector<NamedDecl *, 8> ParamVector;
2604   ParamVector Params;
2605   Params.reserve(N);
2606   for (TemplateParameterList::iterator PI = L->begin(), PE = L->end();
2607        PI != PE; ++PI) {
2608     NamedDecl *D = cast_or_null<NamedDecl>(Visit(*PI));
2609     Params.push_back(D);
2610     Invalid = Invalid || !D || D->isInvalidDecl();
2611   }
2612 
2613   // Clean up if we had an error.
2614   if (Invalid)
2615     return NULL;
2616 
2617   TemplateParameterList *InstL
2618     = TemplateParameterList::Create(SemaRef.Context, L->getTemplateLoc(),
2619                                     L->getLAngleLoc(), &Params.front(), N,
2620                                     L->getRAngleLoc());
2621   return InstL;
2622 }
2623 
2624 /// \brief Instantiate the declaration of a class template partial
2625 /// specialization.
2626 ///
2627 /// \param ClassTemplate the (instantiated) class template that is partially
2628 // specialized by the instantiation of \p PartialSpec.
2629 ///
2630 /// \param PartialSpec the (uninstantiated) class template partial
2631 /// specialization that we are instantiating.
2632 ///
2633 /// \returns The instantiated partial specialization, if successful; otherwise,
2634 /// NULL to indicate an error.
2635 ClassTemplatePartialSpecializationDecl *
2636 TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(
2637                                             ClassTemplateDecl *ClassTemplate,
2638                           ClassTemplatePartialSpecializationDecl *PartialSpec) {
2639   // Create a local instantiation scope for this class template partial
2640   // specialization, which will contain the instantiations of the template
2641   // parameters.
2642   LocalInstantiationScope Scope(SemaRef);
2643 
2644   // Substitute into the template parameters of the class template partial
2645   // specialization.
2646   TemplateParameterList *TempParams = PartialSpec->getTemplateParameters();
2647   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
2648   if (!InstParams)
2649     return 0;
2650 
2651   // Substitute into the template arguments of the class template partial
2652   // specialization.
2653   const ASTTemplateArgumentListInfo *TemplArgInfo
2654     = PartialSpec->getTemplateArgsAsWritten();
2655   TemplateArgumentListInfo InstTemplateArgs(TemplArgInfo->LAngleLoc,
2656                                             TemplArgInfo->RAngleLoc);
2657   if (SemaRef.Subst(TemplArgInfo->getTemplateArgs(),
2658                     TemplArgInfo->NumTemplateArgs,
2659                     InstTemplateArgs, TemplateArgs))
2660     return 0;
2661 
2662   // Check that the template argument list is well-formed for this
2663   // class template.
2664   SmallVector<TemplateArgument, 4> Converted;
2665   if (SemaRef.CheckTemplateArgumentList(ClassTemplate,
2666                                         PartialSpec->getLocation(),
2667                                         InstTemplateArgs,
2668                                         false,
2669                                         Converted))
2670     return 0;
2671 
2672   // Figure out where to insert this class template partial specialization
2673   // in the member template's set of class template partial specializations.
2674   void *InsertPos = 0;
2675   ClassTemplateSpecializationDecl *PrevDecl
2676     = ClassTemplate->findPartialSpecialization(Converted.data(),
2677                                                Converted.size(), InsertPos);
2678 
2679   // Build the canonical type that describes the converted template
2680   // arguments of the class template partial specialization.
2681   QualType CanonType
2682     = SemaRef.Context.getTemplateSpecializationType(TemplateName(ClassTemplate),
2683                                                     Converted.data(),
2684                                                     Converted.size());
2685 
2686   // Build the fully-sugared type for this class template
2687   // specialization as the user wrote in the specialization
2688   // itself. This means that we'll pretty-print the type retrieved
2689   // from the specialization's declaration the way that the user
2690   // actually wrote the specialization, rather than formatting the
2691   // name based on the "canonical" representation used to store the
2692   // template arguments in the specialization.
2693   TypeSourceInfo *WrittenTy
2694     = SemaRef.Context.getTemplateSpecializationTypeInfo(
2695                                                     TemplateName(ClassTemplate),
2696                                                     PartialSpec->getLocation(),
2697                                                     InstTemplateArgs,
2698                                                     CanonType);
2699 
2700   if (PrevDecl) {
2701     // We've already seen a partial specialization with the same template
2702     // parameters and template arguments. This can happen, for example, when
2703     // substituting the outer template arguments ends up causing two
2704     // class template partial specializations of a member class template
2705     // to have identical forms, e.g.,
2706     //
2707     //   template<typename T, typename U>
2708     //   struct Outer {
2709     //     template<typename X, typename Y> struct Inner;
2710     //     template<typename Y> struct Inner<T, Y>;
2711     //     template<typename Y> struct Inner<U, Y>;
2712     //   };
2713     //
2714     //   Outer<int, int> outer; // error: the partial specializations of Inner
2715     //                          // have the same signature.
2716     SemaRef.Diag(PartialSpec->getLocation(), diag::err_partial_spec_redeclared)
2717       << WrittenTy->getType();
2718     SemaRef.Diag(PrevDecl->getLocation(), diag::note_prev_partial_spec_here)
2719       << SemaRef.Context.getTypeDeclType(PrevDecl);
2720     return 0;
2721   }
2722 
2723 
2724   // Create the class template partial specialization declaration.
2725   ClassTemplatePartialSpecializationDecl *InstPartialSpec
2726     = ClassTemplatePartialSpecializationDecl::Create(SemaRef.Context,
2727                                                      PartialSpec->getTagKind(),
2728                                                      Owner,
2729                                                      PartialSpec->getLocStart(),
2730                                                      PartialSpec->getLocation(),
2731                                                      InstParams,
2732                                                      ClassTemplate,
2733                                                      Converted.data(),
2734                                                      Converted.size(),
2735                                                      InstTemplateArgs,
2736                                                      CanonType,
2737                                                      0);
2738   // Substitute the nested name specifier, if any.
2739   if (SubstQualifier(PartialSpec, InstPartialSpec))
2740     return 0;
2741 
2742   InstPartialSpec->setInstantiatedFromMember(PartialSpec);
2743   InstPartialSpec->setTypeAsWritten(WrittenTy);
2744 
2745   // Add this partial specialization to the set of class template partial
2746   // specializations.
2747   ClassTemplate->AddPartialSpecialization(InstPartialSpec, /*InsertPos=*/0);
2748   return InstPartialSpec;
2749 }
2750 
2751 /// \brief Instantiate the declaration of a variable template partial
2752 /// specialization.
2753 ///
2754 /// \param VarTemplate the (instantiated) variable template that is partially
2755 /// specialized by the instantiation of \p PartialSpec.
2756 ///
2757 /// \param PartialSpec the (uninstantiated) variable template partial
2758 /// specialization that we are instantiating.
2759 ///
2760 /// \returns The instantiated partial specialization, if successful; otherwise,
2761 /// NULL to indicate an error.
2762 VarTemplatePartialSpecializationDecl *
2763 TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization(
2764     VarTemplateDecl *VarTemplate,
2765     VarTemplatePartialSpecializationDecl *PartialSpec) {
2766   // Create a local instantiation scope for this variable template partial
2767   // specialization, which will contain the instantiations of the template
2768   // parameters.
2769   LocalInstantiationScope Scope(SemaRef);
2770 
2771   // Substitute into the template parameters of the variable template partial
2772   // specialization.
2773   TemplateParameterList *TempParams = PartialSpec->getTemplateParameters();
2774   TemplateParameterList *InstParams = SubstTemplateParams(TempParams);
2775   if (!InstParams)
2776     return 0;
2777 
2778   // Substitute into the template arguments of the variable template partial
2779   // specialization.
2780   const ASTTemplateArgumentListInfo *TemplArgInfo
2781     = PartialSpec->getTemplateArgsAsWritten();
2782   TemplateArgumentListInfo InstTemplateArgs(TemplArgInfo->LAngleLoc,
2783                                             TemplArgInfo->RAngleLoc);
2784   if (SemaRef.Subst(TemplArgInfo->getTemplateArgs(),
2785                     TemplArgInfo->NumTemplateArgs,
2786                     InstTemplateArgs, TemplateArgs))
2787     return 0;
2788 
2789   // Check that the template argument list is well-formed for this
2790   // class template.
2791   SmallVector<TemplateArgument, 4> Converted;
2792   if (SemaRef.CheckTemplateArgumentList(VarTemplate, PartialSpec->getLocation(),
2793                                         InstTemplateArgs, false, Converted))
2794     return 0;
2795 
2796   // Figure out where to insert this variable template partial specialization
2797   // in the member template's set of variable template partial specializations.
2798   void *InsertPos = 0;
2799   VarTemplateSpecializationDecl *PrevDecl =
2800       VarTemplate->findPartialSpecialization(Converted.data(), Converted.size(),
2801                                              InsertPos);
2802 
2803   // Build the canonical type that describes the converted template
2804   // arguments of the variable template partial specialization.
2805   QualType CanonType = SemaRef.Context.getTemplateSpecializationType(
2806       TemplateName(VarTemplate), Converted.data(), Converted.size());
2807 
2808   // Build the fully-sugared type for this variable template
2809   // specialization as the user wrote in the specialization
2810   // itself. This means that we'll pretty-print the type retrieved
2811   // from the specialization's declaration the way that the user
2812   // actually wrote the specialization, rather than formatting the
2813   // name based on the "canonical" representation used to store the
2814   // template arguments in the specialization.
2815   TypeSourceInfo *WrittenTy = SemaRef.Context.getTemplateSpecializationTypeInfo(
2816       TemplateName(VarTemplate), PartialSpec->getLocation(), InstTemplateArgs,
2817       CanonType);
2818 
2819   if (PrevDecl) {
2820     // We've already seen a partial specialization with the same template
2821     // parameters and template arguments. This can happen, for example, when
2822     // substituting the outer template arguments ends up causing two
2823     // variable template partial specializations of a member variable template
2824     // to have identical forms, e.g.,
2825     //
2826     //   template<typename T, typename U>
2827     //   struct Outer {
2828     //     template<typename X, typename Y> pair<X,Y> p;
2829     //     template<typename Y> pair<T, Y> p;
2830     //     template<typename Y> pair<U, Y> p;
2831     //   };
2832     //
2833     //   Outer<int, int> outer; // error: the partial specializations of Inner
2834     //                          // have the same signature.
2835     SemaRef.Diag(PartialSpec->getLocation(),
2836                  diag::err_var_partial_spec_redeclared)
2837         << WrittenTy->getType();
2838     SemaRef.Diag(PrevDecl->getLocation(),
2839                  diag::note_var_prev_partial_spec_here);
2840     return 0;
2841   }
2842 
2843   // Do substitution on the type of the declaration
2844   TypeSourceInfo *DI = SemaRef.SubstType(
2845       PartialSpec->getTypeSourceInfo(), TemplateArgs,
2846       PartialSpec->getTypeSpecStartLoc(), PartialSpec->getDeclName());
2847   if (!DI)
2848     return 0;
2849 
2850   if (DI->getType()->isFunctionType()) {
2851     SemaRef.Diag(PartialSpec->getLocation(),
2852                  diag::err_variable_instantiates_to_function)
2853         << PartialSpec->isStaticDataMember() << DI->getType();
2854     return 0;
2855   }
2856 
2857   // Create the variable template partial specialization declaration.
2858   VarTemplatePartialSpecializationDecl *InstPartialSpec =
2859       VarTemplatePartialSpecializationDecl::Create(
2860           SemaRef.Context, Owner, PartialSpec->getInnerLocStart(),
2861           PartialSpec->getLocation(), InstParams, VarTemplate, DI->getType(),
2862           DI, PartialSpec->getStorageClass(), Converted.data(),
2863           Converted.size(), InstTemplateArgs);
2864 
2865   // Substitute the nested name specifier, if any.
2866   if (SubstQualifier(PartialSpec, InstPartialSpec))
2867     return 0;
2868 
2869   InstPartialSpec->setInstantiatedFromMember(PartialSpec);
2870   InstPartialSpec->setTypeAsWritten(WrittenTy);
2871 
2872   // Add this partial specialization to the set of variable template partial
2873   // specializations. The instantiation of the initializer is not necessary.
2874   VarTemplate->AddPartialSpecialization(InstPartialSpec, /*InsertPos=*/0);
2875 
2876   SemaRef.BuildVariableInstantiation(InstPartialSpec, PartialSpec, TemplateArgs,
2877                                      LateAttrs, Owner, StartingScope);
2878 
2879   return InstPartialSpec;
2880 }
2881 
2882 TypeSourceInfo*
2883 TemplateDeclInstantiator::SubstFunctionType(FunctionDecl *D,
2884                               SmallVectorImpl<ParmVarDecl *> &Params) {
2885   TypeSourceInfo *OldTInfo = D->getTypeSourceInfo();
2886   assert(OldTInfo && "substituting function without type source info");
2887   assert(Params.empty() && "parameter vector is non-empty at start");
2888 
2889   CXXRecordDecl *ThisContext = 0;
2890   unsigned ThisTypeQuals = 0;
2891   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
2892     ThisContext = cast<CXXRecordDecl>(Owner);
2893     ThisTypeQuals = Method->getTypeQualifiers();
2894   }
2895 
2896   TypeSourceInfo *NewTInfo
2897     = SemaRef.SubstFunctionDeclType(OldTInfo, TemplateArgs,
2898                                     D->getTypeSpecStartLoc(),
2899                                     D->getDeclName(),
2900                                     ThisContext, ThisTypeQuals);
2901   if (!NewTInfo)
2902     return 0;
2903 
2904   TypeLoc OldTL = OldTInfo->getTypeLoc().IgnoreParens();
2905   if (FunctionProtoTypeLoc OldProtoLoc = OldTL.getAs<FunctionProtoTypeLoc>()) {
2906     if (NewTInfo != OldTInfo) {
2907       // Get parameters from the new type info.
2908       TypeLoc NewTL = NewTInfo->getTypeLoc().IgnoreParens();
2909       FunctionProtoTypeLoc NewProtoLoc = NewTL.castAs<FunctionProtoTypeLoc>();
2910       unsigned NewIdx = 0;
2911       for (unsigned OldIdx = 0, NumOldParams = OldProtoLoc.getNumParams();
2912            OldIdx != NumOldParams; ++OldIdx) {
2913         ParmVarDecl *OldParam = OldProtoLoc.getParam(OldIdx);
2914         LocalInstantiationScope *Scope = SemaRef.CurrentInstantiationScope;
2915 
2916         Optional<unsigned> NumArgumentsInExpansion;
2917         if (OldParam->isParameterPack())
2918           NumArgumentsInExpansion =
2919               SemaRef.getNumArgumentsInExpansion(OldParam->getType(),
2920                                                  TemplateArgs);
2921         if (!NumArgumentsInExpansion) {
2922           // Simple case: normal parameter, or a parameter pack that's
2923           // instantiated to a (still-dependent) parameter pack.
2924           ParmVarDecl *NewParam = NewProtoLoc.getParam(NewIdx++);
2925           Params.push_back(NewParam);
2926           Scope->InstantiatedLocal(OldParam, NewParam);
2927         } else {
2928           // Parameter pack expansion: make the instantiation an argument pack.
2929           Scope->MakeInstantiatedLocalArgPack(OldParam);
2930           for (unsigned I = 0; I != *NumArgumentsInExpansion; ++I) {
2931             ParmVarDecl *NewParam = NewProtoLoc.getParam(NewIdx++);
2932             Params.push_back(NewParam);
2933             Scope->InstantiatedLocalPackArg(OldParam, NewParam);
2934           }
2935         }
2936       }
2937     } else {
2938       // The function type itself was not dependent and therefore no
2939       // substitution occurred. However, we still need to instantiate
2940       // the function parameters themselves.
2941       const FunctionProtoType *OldProto =
2942           cast<FunctionProtoType>(OldProtoLoc.getType());
2943       for (unsigned i = 0, i_end = OldProtoLoc.getNumParams(); i != i_end;
2944            ++i) {
2945         ParmVarDecl *OldParam = OldProtoLoc.getParam(i);
2946         if (!OldParam) {
2947           Params.push_back(SemaRef.BuildParmVarDeclForTypedef(
2948               D, D->getLocation(), OldProto->getParamType(i)));
2949           continue;
2950         }
2951 
2952         ParmVarDecl *Parm =
2953             cast_or_null<ParmVarDecl>(VisitParmVarDecl(OldParam));
2954         if (!Parm)
2955           return 0;
2956         Params.push_back(Parm);
2957       }
2958     }
2959   } else {
2960     // If the type of this function, after ignoring parentheses, is not
2961     // *directly* a function type, then we're instantiating a function that
2962     // was declared via a typedef or with attributes, e.g.,
2963     //
2964     //   typedef int functype(int, int);
2965     //   functype func;
2966     //   int __cdecl meth(int, int);
2967     //
2968     // In this case, we'll just go instantiate the ParmVarDecls that we
2969     // synthesized in the method declaration.
2970     SmallVector<QualType, 4> ParamTypes;
2971     if (SemaRef.SubstParmTypes(D->getLocation(), D->param_begin(),
2972                                D->getNumParams(), TemplateArgs, ParamTypes,
2973                                &Params))
2974       return 0;
2975   }
2976 
2977   return NewTInfo;
2978 }
2979 
2980 /// Introduce the instantiated function parameters into the local
2981 /// instantiation scope, and set the parameter names to those used
2982 /// in the template.
2983 static void addInstantiatedParametersToScope(Sema &S, FunctionDecl *Function,
2984                                              const FunctionDecl *PatternDecl,
2985                                              LocalInstantiationScope &Scope,
2986                            const MultiLevelTemplateArgumentList &TemplateArgs) {
2987   unsigned FParamIdx = 0;
2988   for (unsigned I = 0, N = PatternDecl->getNumParams(); I != N; ++I) {
2989     const ParmVarDecl *PatternParam = PatternDecl->getParamDecl(I);
2990     if (!PatternParam->isParameterPack()) {
2991       // Simple case: not a parameter pack.
2992       assert(FParamIdx < Function->getNumParams());
2993       ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
2994       FunctionParam->setDeclName(PatternParam->getDeclName());
2995       Scope.InstantiatedLocal(PatternParam, FunctionParam);
2996       ++FParamIdx;
2997       continue;
2998     }
2999 
3000     // Expand the parameter pack.
3001     Scope.MakeInstantiatedLocalArgPack(PatternParam);
3002     Optional<unsigned> NumArgumentsInExpansion
3003       = S.getNumArgumentsInExpansion(PatternParam->getType(), TemplateArgs);
3004     assert(NumArgumentsInExpansion &&
3005            "should only be called when all template arguments are known");
3006     for (unsigned Arg = 0; Arg < *NumArgumentsInExpansion; ++Arg) {
3007       ParmVarDecl *FunctionParam = Function->getParamDecl(FParamIdx);
3008       FunctionParam->setDeclName(PatternParam->getDeclName());
3009       Scope.InstantiatedLocalPackArg(PatternParam, FunctionParam);
3010       ++FParamIdx;
3011     }
3012   }
3013 }
3014 
3015 static void InstantiateExceptionSpec(Sema &SemaRef, FunctionDecl *New,
3016                                      const FunctionProtoType *Proto,
3017                            const MultiLevelTemplateArgumentList &TemplateArgs) {
3018   assert(Proto->getExceptionSpecType() != EST_Uninstantiated);
3019 
3020   // C++11 [expr.prim.general]p3:
3021   //   If a declaration declares a member function or member function
3022   //   template of a class X, the expression this is a prvalue of type
3023   //   "pointer to cv-qualifier-seq X" between the optional cv-qualifer-seq
3024   //   and the end of the function-definition, member-declarator, or
3025   //   declarator.
3026   CXXRecordDecl *ThisContext = 0;
3027   unsigned ThisTypeQuals = 0;
3028   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(New)) {
3029     ThisContext = Method->getParent();
3030     ThisTypeQuals = Method->getTypeQualifiers();
3031   }
3032   Sema::CXXThisScopeRAII ThisScope(SemaRef, ThisContext, ThisTypeQuals,
3033                                    SemaRef.getLangOpts().CPlusPlus11);
3034 
3035   // The function has an exception specification or a "noreturn"
3036   // attribute. Substitute into each of the exception types.
3037   SmallVector<QualType, 4> Exceptions;
3038   for (unsigned I = 0, N = Proto->getNumExceptions(); I != N; ++I) {
3039     // FIXME: Poor location information!
3040     if (const PackExpansionType *PackExpansion
3041           = Proto->getExceptionType(I)->getAs<PackExpansionType>()) {
3042       // We have a pack expansion. Instantiate it.
3043       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
3044       SemaRef.collectUnexpandedParameterPacks(PackExpansion->getPattern(),
3045                                               Unexpanded);
3046       assert(!Unexpanded.empty() &&
3047              "Pack expansion without parameter packs?");
3048 
3049       bool Expand = false;
3050       bool RetainExpansion = false;
3051       Optional<unsigned> NumExpansions = PackExpansion->getNumExpansions();
3052       if (SemaRef.CheckParameterPacksForExpansion(New->getLocation(),
3053                                                   SourceRange(),
3054                                                   Unexpanded,
3055                                                   TemplateArgs,
3056                                                   Expand,
3057                                                   RetainExpansion,
3058                                                   NumExpansions))
3059         break;
3060 
3061       if (!Expand) {
3062         // We can't expand this pack expansion into separate arguments yet;
3063         // just substitute into the pattern and create a new pack expansion
3064         // type.
3065         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, -1);
3066         QualType T = SemaRef.SubstType(PackExpansion->getPattern(),
3067                                        TemplateArgs,
3068                                      New->getLocation(), New->getDeclName());
3069         if (T.isNull())
3070           break;
3071 
3072         T = SemaRef.Context.getPackExpansionType(T, NumExpansions);
3073         Exceptions.push_back(T);
3074         continue;
3075       }
3076 
3077       // Substitute into the pack expansion pattern for each template
3078       bool Invalid = false;
3079       for (unsigned ArgIdx = 0; ArgIdx != *NumExpansions; ++ArgIdx) {
3080         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(SemaRef, ArgIdx);
3081 
3082         QualType T = SemaRef.SubstType(PackExpansion->getPattern(),
3083                                        TemplateArgs,
3084                                      New->getLocation(), New->getDeclName());
3085         if (T.isNull()) {
3086           Invalid = true;
3087           break;
3088         }
3089 
3090         Exceptions.push_back(T);
3091       }
3092 
3093       if (Invalid)
3094         break;
3095 
3096       continue;
3097     }
3098 
3099     QualType T
3100       = SemaRef.SubstType(Proto->getExceptionType(I), TemplateArgs,
3101                           New->getLocation(), New->getDeclName());
3102     if (T.isNull() ||
3103         SemaRef.CheckSpecifiedExceptionType(T, New->getLocation()))
3104       continue;
3105 
3106     Exceptions.push_back(T);
3107   }
3108   Expr *NoexceptExpr = 0;
3109   if (Expr *OldNoexceptExpr = Proto->getNoexceptExpr()) {
3110     EnterExpressionEvaluationContext Unevaluated(SemaRef,
3111                                                  Sema::ConstantEvaluated);
3112     ExprResult E = SemaRef.SubstExpr(OldNoexceptExpr, TemplateArgs);
3113     if (E.isUsable())
3114       E = SemaRef.CheckBooleanCondition(E.get(), E.get()->getLocStart());
3115 
3116     if (E.isUsable()) {
3117       NoexceptExpr = E.take();
3118       if (!NoexceptExpr->isTypeDependent() &&
3119           !NoexceptExpr->isValueDependent())
3120         NoexceptExpr
3121           = SemaRef.VerifyIntegerConstantExpression(NoexceptExpr,
3122               0, diag::err_noexcept_needs_constant_expression,
3123               /*AllowFold*/ false).take();
3124     }
3125   }
3126 
3127   // Rebuild the function type
3128   const FunctionProtoType *NewProto
3129     = New->getType()->getAs<FunctionProtoType>();
3130   assert(NewProto && "Template instantiation without function prototype?");
3131 
3132   FunctionProtoType::ExtProtoInfo EPI = NewProto->getExtProtoInfo();
3133   EPI.ExceptionSpecType = Proto->getExceptionSpecType();
3134   EPI.NumExceptions = Exceptions.size();
3135   EPI.Exceptions = Exceptions.data();
3136   EPI.NoexceptExpr = NoexceptExpr;
3137 
3138   New->setType(SemaRef.Context.getFunctionType(NewProto->getReturnType(),
3139                                                NewProto->getParamTypes(), EPI));
3140 }
3141 
3142 void Sema::InstantiateExceptionSpec(SourceLocation PointOfInstantiation,
3143                                     FunctionDecl *Decl) {
3144   const FunctionProtoType *Proto = Decl->getType()->castAs<FunctionProtoType>();
3145   if (Proto->getExceptionSpecType() != EST_Uninstantiated)
3146     return;
3147 
3148   InstantiatingTemplate Inst(*this, PointOfInstantiation, Decl,
3149                              InstantiatingTemplate::ExceptionSpecification());
3150   if (Inst.isInvalid()) {
3151     // We hit the instantiation depth limit. Clear the exception specification
3152     // so that our callers don't have to cope with EST_Uninstantiated.
3153     FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
3154     EPI.ExceptionSpecType = EST_None;
3155     Decl->setType(Context.getFunctionType(Proto->getReturnType(),
3156                                           Proto->getParamTypes(), EPI));
3157     return;
3158   }
3159 
3160   // Enter the scope of this instantiation. We don't use
3161   // PushDeclContext because we don't have a scope.
3162   Sema::ContextRAII savedContext(*this, Decl);
3163   LocalInstantiationScope Scope(*this);
3164 
3165   MultiLevelTemplateArgumentList TemplateArgs =
3166     getTemplateInstantiationArgs(Decl, 0, /*RelativeToPrimary*/true);
3167 
3168   FunctionDecl *Template = Proto->getExceptionSpecTemplate();
3169   addInstantiatedParametersToScope(*this, Decl, Template, Scope, TemplateArgs);
3170 
3171   ::InstantiateExceptionSpec(*this, Decl,
3172                              Template->getType()->castAs<FunctionProtoType>(),
3173                              TemplateArgs);
3174 }
3175 
3176 /// \brief Initializes the common fields of an instantiation function
3177 /// declaration (New) from the corresponding fields of its template (Tmpl).
3178 ///
3179 /// \returns true if there was an error
3180 bool
3181 TemplateDeclInstantiator::InitFunctionInstantiation(FunctionDecl *New,
3182                                                     FunctionDecl *Tmpl) {
3183   if (Tmpl->isDeleted())
3184     New->setDeletedAsWritten();
3185 
3186   // Forward the mangling number from the template to the instantiated decl.
3187   SemaRef.Context.setManglingNumber(New,
3188                                     SemaRef.Context.getManglingNumber(Tmpl));
3189 
3190   // If we are performing substituting explicitly-specified template arguments
3191   // or deduced template arguments into a function template and we reach this
3192   // point, we are now past the point where SFINAE applies and have committed
3193   // to keeping the new function template specialization. We therefore
3194   // convert the active template instantiation for the function template
3195   // into a template instantiation for this specific function template
3196   // specialization, which is not a SFINAE context, so that we diagnose any
3197   // further errors in the declaration itself.
3198   typedef Sema::ActiveTemplateInstantiation ActiveInstType;
3199   ActiveInstType &ActiveInst = SemaRef.ActiveTemplateInstantiations.back();
3200   if (ActiveInst.Kind == ActiveInstType::ExplicitTemplateArgumentSubstitution ||
3201       ActiveInst.Kind == ActiveInstType::DeducedTemplateArgumentSubstitution) {
3202     if (FunctionTemplateDecl *FunTmpl
3203           = dyn_cast<FunctionTemplateDecl>(ActiveInst.Entity)) {
3204       assert(FunTmpl->getTemplatedDecl() == Tmpl &&
3205              "Deduction from the wrong function template?");
3206       (void) FunTmpl;
3207       ActiveInst.Kind = ActiveInstType::TemplateInstantiation;
3208       ActiveInst.Entity = New;
3209     }
3210   }
3211 
3212   const FunctionProtoType *Proto = Tmpl->getType()->getAs<FunctionProtoType>();
3213   assert(Proto && "Function template without prototype?");
3214 
3215   if (Proto->hasExceptionSpec() || Proto->getNoReturnAttr()) {
3216     FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
3217 
3218     // DR1330: In C++11, defer instantiation of a non-trivial
3219     // exception specification.
3220     if (SemaRef.getLangOpts().CPlusPlus11 &&
3221         EPI.ExceptionSpecType != EST_None &&
3222         EPI.ExceptionSpecType != EST_DynamicNone &&
3223         EPI.ExceptionSpecType != EST_BasicNoexcept) {
3224       FunctionDecl *ExceptionSpecTemplate = Tmpl;
3225       if (EPI.ExceptionSpecType == EST_Uninstantiated)
3226         ExceptionSpecTemplate = EPI.ExceptionSpecTemplate;
3227       ExceptionSpecificationType NewEST = EST_Uninstantiated;
3228       if (EPI.ExceptionSpecType == EST_Unevaluated)
3229         NewEST = EST_Unevaluated;
3230 
3231       // Mark the function has having an uninstantiated exception specification.
3232       const FunctionProtoType *NewProto
3233         = New->getType()->getAs<FunctionProtoType>();
3234       assert(NewProto && "Template instantiation without function prototype?");
3235       EPI = NewProto->getExtProtoInfo();
3236       EPI.ExceptionSpecType = NewEST;
3237       EPI.ExceptionSpecDecl = New;
3238       EPI.ExceptionSpecTemplate = ExceptionSpecTemplate;
3239       New->setType(SemaRef.Context.getFunctionType(
3240           NewProto->getReturnType(), NewProto->getParamTypes(), EPI));
3241     } else {
3242       ::InstantiateExceptionSpec(SemaRef, New, Proto, TemplateArgs);
3243     }
3244   }
3245 
3246   // Get the definition. Leaves the variable unchanged if undefined.
3247   const FunctionDecl *Definition = Tmpl;
3248   Tmpl->isDefined(Definition);
3249 
3250   SemaRef.InstantiateAttrs(TemplateArgs, Definition, New,
3251                            LateAttrs, StartingScope);
3252 
3253   return false;
3254 }
3255 
3256 /// \brief Initializes common fields of an instantiated method
3257 /// declaration (New) from the corresponding fields of its template
3258 /// (Tmpl).
3259 ///
3260 /// \returns true if there was an error
3261 bool
3262 TemplateDeclInstantiator::InitMethodInstantiation(CXXMethodDecl *New,
3263                                                   CXXMethodDecl *Tmpl) {
3264   if (InitFunctionInstantiation(New, Tmpl))
3265     return true;
3266 
3267   New->setAccess(Tmpl->getAccess());
3268   if (Tmpl->isVirtualAsWritten())
3269     New->setVirtualAsWritten(true);
3270 
3271   // FIXME: New needs a pointer to Tmpl
3272   return false;
3273 }
3274 
3275 /// \brief Instantiate the definition of the given function from its
3276 /// template.
3277 ///
3278 /// \param PointOfInstantiation the point at which the instantiation was
3279 /// required. Note that this is not precisely a "point of instantiation"
3280 /// for the function, but it's close.
3281 ///
3282 /// \param Function the already-instantiated declaration of a
3283 /// function template specialization or member function of a class template
3284 /// specialization.
3285 ///
3286 /// \param Recursive if true, recursively instantiates any functions that
3287 /// are required by this instantiation.
3288 ///
3289 /// \param DefinitionRequired if true, then we are performing an explicit
3290 /// instantiation where the body of the function is required. Complain if
3291 /// there is no such body.
3292 void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
3293                                          FunctionDecl *Function,
3294                                          bool Recursive,
3295                                          bool DefinitionRequired) {
3296   if (Function->isInvalidDecl() || Function->isDefined())
3297     return;
3298 
3299   // Never instantiate an explicit specialization except if it is a class scope
3300   // explicit specialization.
3301   if (Function->getTemplateSpecializationKind() == TSK_ExplicitSpecialization &&
3302       !Function->getClassScopeSpecializationPattern())
3303     return;
3304 
3305   // Find the function body that we'll be substituting.
3306   const FunctionDecl *PatternDecl = Function->getTemplateInstantiationPattern();
3307   assert(PatternDecl && "instantiating a non-template");
3308 
3309   Stmt *Pattern = PatternDecl->getBody(PatternDecl);
3310   assert(PatternDecl && "template definition is not a template");
3311   if (!Pattern) {
3312     // Try to find a defaulted definition
3313     PatternDecl->isDefined(PatternDecl);
3314   }
3315   assert(PatternDecl && "template definition is not a template");
3316 
3317   // Postpone late parsed template instantiations.
3318   if (PatternDecl->isLateTemplateParsed() &&
3319       !LateTemplateParser) {
3320     PendingInstantiations.push_back(
3321       std::make_pair(Function, PointOfInstantiation));
3322     return;
3323   }
3324 
3325   // Call the LateTemplateParser callback if there is a need to late parse
3326   // a templated function definition.
3327   if (!Pattern && PatternDecl->isLateTemplateParsed() &&
3328       LateTemplateParser) {
3329     // FIXME: Optimize to allow individual templates to be deserialized.
3330     if (PatternDecl->isFromASTFile())
3331       ExternalSource->ReadLateParsedTemplates(LateParsedTemplateMap);
3332 
3333     LateParsedTemplate *LPT = LateParsedTemplateMap.lookup(PatternDecl);
3334     assert(LPT && "missing LateParsedTemplate");
3335     LateTemplateParser(OpaqueParser, *LPT);
3336     Pattern = PatternDecl->getBody(PatternDecl);
3337   }
3338 
3339   if (!Pattern && !PatternDecl->isDefaulted()) {
3340     if (DefinitionRequired) {
3341       if (Function->getPrimaryTemplate())
3342         Diag(PointOfInstantiation,
3343              diag::err_explicit_instantiation_undefined_func_template)
3344           << Function->getPrimaryTemplate();
3345       else
3346         Diag(PointOfInstantiation,
3347              diag::err_explicit_instantiation_undefined_member)
3348           << 1 << Function->getDeclName() << Function->getDeclContext();
3349 
3350       if (PatternDecl)
3351         Diag(PatternDecl->getLocation(),
3352              diag::note_explicit_instantiation_here);
3353       Function->setInvalidDecl();
3354     } else if (Function->getTemplateSpecializationKind()
3355                  == TSK_ExplicitInstantiationDefinition) {
3356       PendingInstantiations.push_back(
3357         std::make_pair(Function, PointOfInstantiation));
3358     }
3359 
3360     return;
3361   }
3362 
3363   // C++1y [temp.explicit]p10:
3364   //   Except for inline functions, declarations with types deduced from their
3365   //   initializer or return value, and class template specializations, other
3366   //   explicit instantiation declarations have the effect of suppressing the
3367   //   implicit instantiation of the entity to which they refer.
3368   if (Function->getTemplateSpecializationKind() ==
3369           TSK_ExplicitInstantiationDeclaration &&
3370       !PatternDecl->isInlined() &&
3371       !PatternDecl->getReturnType()->getContainedAutoType())
3372     return;
3373 
3374   if (PatternDecl->isInlined())
3375     Function->setImplicitlyInline();
3376 
3377   InstantiatingTemplate Inst(*this, PointOfInstantiation, Function);
3378   if (Inst.isInvalid())
3379     return;
3380 
3381   // Copy the inner loc start from the pattern.
3382   Function->setInnerLocStart(PatternDecl->getInnerLocStart());
3383 
3384   // If we're performing recursive template instantiation, create our own
3385   // queue of pending implicit instantiations that we will instantiate later,
3386   // while we're still within our own instantiation context.
3387   SmallVector<VTableUse, 16> SavedVTableUses;
3388   std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
3389   SavePendingLocalImplicitInstantiationsRAII
3390       SavedPendingLocalImplicitInstantiations(*this);
3391   if (Recursive) {
3392     VTableUses.swap(SavedVTableUses);
3393     PendingInstantiations.swap(SavedPendingInstantiations);
3394   }
3395 
3396   EnterExpressionEvaluationContext EvalContext(*this,
3397                                                Sema::PotentiallyEvaluated);
3398 
3399   // Introduce a new scope where local variable instantiations will be
3400   // recorded, unless we're actually a member function within a local
3401   // class, in which case we need to merge our results with the parent
3402   // scope (of the enclosing function).
3403   bool MergeWithParentScope = false;
3404   if (CXXRecordDecl *Rec = dyn_cast<CXXRecordDecl>(Function->getDeclContext()))
3405     MergeWithParentScope = Rec->isLocalClass();
3406 
3407   LocalInstantiationScope Scope(*this, MergeWithParentScope);
3408 
3409   if (PatternDecl->isDefaulted())
3410     SetDeclDefaulted(Function, PatternDecl->getLocation());
3411   else {
3412     ActOnStartOfFunctionDef(0, Function);
3413 
3414     // Enter the scope of this instantiation. We don't use
3415     // PushDeclContext because we don't have a scope.
3416     Sema::ContextRAII savedContext(*this, Function);
3417 
3418     MultiLevelTemplateArgumentList TemplateArgs =
3419       getTemplateInstantiationArgs(Function, 0, false, PatternDecl);
3420 
3421     addInstantiatedParametersToScope(*this, Function, PatternDecl, Scope,
3422                                      TemplateArgs);
3423 
3424     // If this is a constructor, instantiate the member initializers.
3425     if (const CXXConstructorDecl *Ctor =
3426           dyn_cast<CXXConstructorDecl>(PatternDecl)) {
3427       InstantiateMemInitializers(cast<CXXConstructorDecl>(Function), Ctor,
3428                                  TemplateArgs);
3429     }
3430 
3431     // Instantiate the function body.
3432     StmtResult Body = SubstStmt(Pattern, TemplateArgs);
3433 
3434     if (Body.isInvalid())
3435       Function->setInvalidDecl();
3436 
3437     ActOnFinishFunctionBody(Function, Body.get(),
3438                             /*IsInstantiation=*/true);
3439 
3440     PerformDependentDiagnostics(PatternDecl, TemplateArgs);
3441 
3442     savedContext.pop();
3443   }
3444 
3445   DeclGroupRef DG(Function);
3446   Consumer.HandleTopLevelDecl(DG);
3447 
3448   // This class may have local implicit instantiations that need to be
3449   // instantiation within this scope.
3450   PerformPendingInstantiations(/*LocalOnly=*/true);
3451   Scope.Exit();
3452 
3453   if (Recursive) {
3454     // Define any pending vtables.
3455     DefineUsedVTables();
3456 
3457     // Instantiate any pending implicit instantiations found during the
3458     // instantiation of this template.
3459     PerformPendingInstantiations();
3460 
3461     // Restore the set of pending vtables.
3462     assert(VTableUses.empty() &&
3463            "VTableUses should be empty before it is discarded.");
3464     VTableUses.swap(SavedVTableUses);
3465 
3466     // Restore the set of pending implicit instantiations.
3467     assert(PendingInstantiations.empty() &&
3468            "PendingInstantiations should be empty before it is discarded.");
3469     PendingInstantiations.swap(SavedPendingInstantiations);
3470   }
3471 }
3472 
3473 VarTemplateSpecializationDecl *Sema::BuildVarTemplateInstantiation(
3474     VarTemplateDecl *VarTemplate, VarDecl *FromVar,
3475     const TemplateArgumentList &TemplateArgList,
3476     const TemplateArgumentListInfo &TemplateArgsInfo,
3477     SmallVectorImpl<TemplateArgument> &Converted,
3478     SourceLocation PointOfInstantiation, void *InsertPos,
3479     LateInstantiatedAttrVec *LateAttrs,
3480     LocalInstantiationScope *StartingScope) {
3481   if (FromVar->isInvalidDecl())
3482     return 0;
3483 
3484   InstantiatingTemplate Inst(*this, PointOfInstantiation, FromVar);
3485   if (Inst.isInvalid())
3486     return 0;
3487 
3488   MultiLevelTemplateArgumentList TemplateArgLists;
3489   TemplateArgLists.addOuterTemplateArguments(&TemplateArgList);
3490 
3491   // Instantiate the first declaration of the variable template: for a partial
3492   // specialization of a static data member template, the first declaration may
3493   // or may not be the declaration in the class; if it's in the class, we want
3494   // to instantiate a member in the class (a declaration), and if it's outside,
3495   // we want to instantiate a definition.
3496   //
3497   // If we're instantiating an explicitly-specialized member template or member
3498   // partial specialization, don't do this. The member specialization completely
3499   // replaces the original declaration in this case.
3500   bool IsMemberSpec = false;
3501   if (VarTemplatePartialSpecializationDecl *PartialSpec =
3502           dyn_cast<VarTemplatePartialSpecializationDecl>(FromVar))
3503     IsMemberSpec = PartialSpec->isMemberSpecialization();
3504   else if (VarTemplateDecl *FromTemplate = FromVar->getDescribedVarTemplate())
3505     IsMemberSpec = FromTemplate->isMemberSpecialization();
3506   if (!IsMemberSpec)
3507     FromVar = FromVar->getFirstDecl();
3508 
3509   MultiLevelTemplateArgumentList MultiLevelList(TemplateArgList);
3510   TemplateDeclInstantiator Instantiator(*this, FromVar->getDeclContext(),
3511                                         MultiLevelList);
3512 
3513   // TODO: Set LateAttrs and StartingScope ...
3514 
3515   return cast_or_null<VarTemplateSpecializationDecl>(
3516       Instantiator.VisitVarTemplateSpecializationDecl(
3517           VarTemplate, FromVar, InsertPos, TemplateArgsInfo, Converted));
3518 }
3519 
3520 /// \brief Instantiates a variable template specialization by completing it
3521 /// with appropriate type information and initializer.
3522 VarTemplateSpecializationDecl *Sema::CompleteVarTemplateSpecializationDecl(
3523     VarTemplateSpecializationDecl *VarSpec, VarDecl *PatternDecl,
3524     const MultiLevelTemplateArgumentList &TemplateArgs) {
3525 
3526   // Do substitution on the type of the declaration
3527   TypeSourceInfo *DI =
3528       SubstType(PatternDecl->getTypeSourceInfo(), TemplateArgs,
3529                 PatternDecl->getTypeSpecStartLoc(), PatternDecl->getDeclName());
3530   if (!DI)
3531     return 0;
3532 
3533   // Update the type of this variable template specialization.
3534   VarSpec->setType(DI->getType());
3535 
3536   // Instantiate the initializer.
3537   InstantiateVariableInitializer(VarSpec, PatternDecl, TemplateArgs);
3538 
3539   return VarSpec;
3540 }
3541 
3542 /// BuildVariableInstantiation - Used after a new variable has been created.
3543 /// Sets basic variable data and decides whether to postpone the
3544 /// variable instantiation.
3545 void Sema::BuildVariableInstantiation(
3546     VarDecl *NewVar, VarDecl *OldVar,
3547     const MultiLevelTemplateArgumentList &TemplateArgs,
3548     LateInstantiatedAttrVec *LateAttrs, DeclContext *Owner,
3549     LocalInstantiationScope *StartingScope,
3550     bool InstantiatingVarTemplate) {
3551 
3552   // If we are instantiating a local extern declaration, the
3553   // instantiation belongs lexically to the containing function.
3554   // If we are instantiating a static data member defined
3555   // out-of-line, the instantiation will have the same lexical
3556   // context (which will be a namespace scope) as the template.
3557   if (OldVar->isLocalExternDecl()) {
3558     NewVar->setLocalExternDecl();
3559     NewVar->setLexicalDeclContext(Owner);
3560   } else if (OldVar->isOutOfLine())
3561     NewVar->setLexicalDeclContext(OldVar->getLexicalDeclContext());
3562   NewVar->setTSCSpec(OldVar->getTSCSpec());
3563   NewVar->setInitStyle(OldVar->getInitStyle());
3564   NewVar->setCXXForRangeDecl(OldVar->isCXXForRangeDecl());
3565   NewVar->setConstexpr(OldVar->isConstexpr());
3566   NewVar->setInitCapture(OldVar->isInitCapture());
3567   NewVar->setPreviousDeclInSameBlockScope(
3568       OldVar->isPreviousDeclInSameBlockScope());
3569   NewVar->setAccess(OldVar->getAccess());
3570 
3571   if (!OldVar->isStaticDataMember()) {
3572     if (OldVar->isUsed(false))
3573       NewVar->setIsUsed();
3574     NewVar->setReferenced(OldVar->isReferenced());
3575   }
3576 
3577   // See if the old variable had a type-specifier that defined an anonymous tag.
3578   // If it did, mark the new variable as being the declarator for the new
3579   // anonymous tag.
3580   if (const TagType *OldTagType = OldVar->getType()->getAs<TagType>()) {
3581     TagDecl *OldTag = OldTagType->getDecl();
3582     if (OldTag->getDeclaratorForAnonDecl() == OldVar) {
3583       TagDecl *NewTag = NewVar->getType()->castAs<TagType>()->getDecl();
3584       assert(!NewTag->hasNameForLinkage() &&
3585              !NewTag->hasDeclaratorForAnonDecl());
3586       NewTag->setDeclaratorForAnonDecl(NewVar);
3587     }
3588   }
3589 
3590   InstantiateAttrs(TemplateArgs, OldVar, NewVar, LateAttrs, StartingScope);
3591 
3592   if (NewVar->hasAttrs())
3593     CheckAlignasUnderalignment(NewVar);
3594 
3595   LookupResult Previous(
3596       *this, NewVar->getDeclName(), NewVar->getLocation(),
3597       NewVar->isLocalExternDecl() ? Sema::LookupRedeclarationWithLinkage
3598                                   : Sema::LookupOrdinaryName,
3599       Sema::ForRedeclaration);
3600 
3601   if (NewVar->isLocalExternDecl() && OldVar->getPreviousDecl() &&
3602       (!OldVar->getPreviousDecl()->getDeclContext()->isDependentContext() ||
3603        OldVar->getPreviousDecl()->getDeclContext()==OldVar->getDeclContext())) {
3604     // We have a previous declaration. Use that one, so we merge with the
3605     // right type.
3606     if (NamedDecl *NewPrev = FindInstantiatedDecl(
3607             NewVar->getLocation(), OldVar->getPreviousDecl(), TemplateArgs))
3608       Previous.addDecl(NewPrev);
3609   } else if (!isa<VarTemplateSpecializationDecl>(NewVar) &&
3610              OldVar->hasLinkage())
3611     LookupQualifiedName(Previous, NewVar->getDeclContext(), false);
3612   CheckVariableDeclaration(NewVar, Previous);
3613 
3614   if (!InstantiatingVarTemplate) {
3615     NewVar->getLexicalDeclContext()->addHiddenDecl(NewVar);
3616     if (!NewVar->isLocalExternDecl() || !NewVar->getPreviousDecl())
3617       NewVar->getDeclContext()->makeDeclVisibleInContext(NewVar);
3618   }
3619 
3620   if (!OldVar->isOutOfLine()) {
3621     if (NewVar->getDeclContext()->isFunctionOrMethod())
3622       CurrentInstantiationScope->InstantiatedLocal(OldVar, NewVar);
3623   }
3624 
3625   // Link instantiations of static data members back to the template from
3626   // which they were instantiated.
3627   if (NewVar->isStaticDataMember() && !InstantiatingVarTemplate)
3628     NewVar->setInstantiationOfStaticDataMember(OldVar,
3629                                                TSK_ImplicitInstantiation);
3630 
3631   // Forward the mangling number from the template to the instantiated decl.
3632   Context.setManglingNumber(NewVar, Context.getManglingNumber(OldVar));
3633   Context.setStaticLocalNumber(NewVar, Context.getStaticLocalNumber(OldVar));
3634 
3635   // Delay instantiation of the initializer for variable templates until a
3636   // definition of the variable is needed.
3637   if (!isa<VarTemplateSpecializationDecl>(NewVar) && !InstantiatingVarTemplate)
3638     InstantiateVariableInitializer(NewVar, OldVar, TemplateArgs);
3639 
3640   // Diagnose unused local variables with dependent types, where the diagnostic
3641   // will have been deferred.
3642   if (!NewVar->isInvalidDecl() &&
3643       NewVar->getDeclContext()->isFunctionOrMethod() && !NewVar->isUsed() &&
3644       OldVar->getType()->isDependentType())
3645     DiagnoseUnusedDecl(NewVar);
3646 }
3647 
3648 /// \brief Instantiate the initializer of a variable.
3649 void Sema::InstantiateVariableInitializer(
3650     VarDecl *Var, VarDecl *OldVar,
3651     const MultiLevelTemplateArgumentList &TemplateArgs) {
3652 
3653   if (Var->getAnyInitializer())
3654     // We already have an initializer in the class.
3655     return;
3656 
3657   if (OldVar->getInit()) {
3658     if (Var->isStaticDataMember() && !OldVar->isOutOfLine())
3659       PushExpressionEvaluationContext(Sema::ConstantEvaluated, OldVar);
3660     else
3661       PushExpressionEvaluationContext(Sema::PotentiallyEvaluated, OldVar);
3662 
3663     // Instantiate the initializer.
3664     ExprResult Init =
3665         SubstInitializer(OldVar->getInit(), TemplateArgs,
3666                          OldVar->getInitStyle() == VarDecl::CallInit);
3667     if (!Init.isInvalid()) {
3668       bool TypeMayContainAuto = true;
3669       if (Init.get()) {
3670         bool DirectInit = OldVar->isDirectInit();
3671         AddInitializerToDecl(Var, Init.take(), DirectInit, TypeMayContainAuto);
3672       } else
3673         ActOnUninitializedDecl(Var, TypeMayContainAuto);
3674     } else {
3675       // FIXME: Not too happy about invalidating the declaration
3676       // because of a bogus initializer.
3677       Var->setInvalidDecl();
3678     }
3679 
3680     PopExpressionEvaluationContext();
3681   } else if ((!Var->isStaticDataMember() || Var->isOutOfLine()) &&
3682              !Var->isCXXForRangeDecl())
3683     ActOnUninitializedDecl(Var, false);
3684 }
3685 
3686 /// \brief Instantiate the definition of the given variable from its
3687 /// template.
3688 ///
3689 /// \param PointOfInstantiation the point at which the instantiation was
3690 /// required. Note that this is not precisely a "point of instantiation"
3691 /// for the function, but it's close.
3692 ///
3693 /// \param Var the already-instantiated declaration of a static member
3694 /// variable of a class template specialization.
3695 ///
3696 /// \param Recursive if true, recursively instantiates any functions that
3697 /// are required by this instantiation.
3698 ///
3699 /// \param DefinitionRequired if true, then we are performing an explicit
3700 /// instantiation where an out-of-line definition of the member variable
3701 /// is required. Complain if there is no such definition.
3702 void Sema::InstantiateStaticDataMemberDefinition(
3703                                           SourceLocation PointOfInstantiation,
3704                                                  VarDecl *Var,
3705                                                  bool Recursive,
3706                                                  bool DefinitionRequired) {
3707   InstantiateVariableDefinition(PointOfInstantiation, Var, Recursive,
3708                                 DefinitionRequired);
3709 }
3710 
3711 void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
3712                                          VarDecl *Var, bool Recursive,
3713                                          bool DefinitionRequired) {
3714   if (Var->isInvalidDecl())
3715     return;
3716 
3717   VarTemplateSpecializationDecl *VarSpec =
3718       dyn_cast<VarTemplateSpecializationDecl>(Var);
3719   VarDecl *PatternDecl = 0, *Def = 0;
3720   MultiLevelTemplateArgumentList TemplateArgs =
3721       getTemplateInstantiationArgs(Var);
3722 
3723   if (VarSpec) {
3724     // If this is a variable template specialization, make sure that it is
3725     // non-dependent, then find its instantiation pattern.
3726     bool InstantiationDependent = false;
3727     assert(!TemplateSpecializationType::anyDependentTemplateArguments(
3728                VarSpec->getTemplateArgsInfo(), InstantiationDependent) &&
3729            "Only instantiate variable template specializations that are "
3730            "not type-dependent");
3731     (void)InstantiationDependent;
3732 
3733     // Find the variable initialization that we'll be substituting. If the
3734     // pattern was instantiated from a member template, look back further to
3735     // find the real pattern.
3736     assert(VarSpec->getSpecializedTemplate() &&
3737            "Specialization without specialized template?");
3738     llvm::PointerUnion<VarTemplateDecl *,
3739                        VarTemplatePartialSpecializationDecl *> PatternPtr =
3740         VarSpec->getSpecializedTemplateOrPartial();
3741     if (PatternPtr.is<VarTemplatePartialSpecializationDecl *>()) {
3742       VarTemplatePartialSpecializationDecl *Tmpl =
3743           PatternPtr.get<VarTemplatePartialSpecializationDecl *>();
3744       while (VarTemplatePartialSpecializationDecl *From =
3745                  Tmpl->getInstantiatedFromMember()) {
3746         if (Tmpl->isMemberSpecialization())
3747           break;
3748 
3749         Tmpl = From;
3750       }
3751       PatternDecl = Tmpl;
3752     } else {
3753       VarTemplateDecl *Tmpl = PatternPtr.get<VarTemplateDecl *>();
3754       while (VarTemplateDecl *From =
3755                  Tmpl->getInstantiatedFromMemberTemplate()) {
3756         if (Tmpl->isMemberSpecialization())
3757           break;
3758 
3759         Tmpl = From;
3760       }
3761       PatternDecl = Tmpl->getTemplatedDecl();
3762     }
3763 
3764     // If this is a static data member template, there might be an
3765     // uninstantiated initializer on the declaration. If so, instantiate
3766     // it now.
3767     if (PatternDecl->isStaticDataMember() &&
3768         (PatternDecl = PatternDecl->getFirstDecl())->hasInit() &&
3769         !Var->hasInit()) {
3770       // FIXME: Factor out the duplicated instantiation context setup/tear down
3771       // code here.
3772       InstantiatingTemplate Inst(*this, PointOfInstantiation, Var);
3773       if (Inst.isInvalid())
3774         return;
3775 
3776       // If we're performing recursive template instantiation, create our own
3777       // queue of pending implicit instantiations that we will instantiate
3778       // later, while we're still within our own instantiation context.
3779       SmallVector<VTableUse, 16> SavedVTableUses;
3780       std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
3781       if (Recursive) {
3782         VTableUses.swap(SavedVTableUses);
3783         PendingInstantiations.swap(SavedPendingInstantiations);
3784       }
3785 
3786       LocalInstantiationScope Local(*this);
3787 
3788       // Enter the scope of this instantiation. We don't use
3789       // PushDeclContext because we don't have a scope.
3790       ContextRAII PreviousContext(*this, Var->getDeclContext());
3791       InstantiateVariableInitializer(Var, PatternDecl, TemplateArgs);
3792       PreviousContext.pop();
3793 
3794       // FIXME: Need to inform the ASTConsumer that we instantiated the
3795       // initializer?
3796 
3797       // This variable may have local implicit instantiations that need to be
3798       // instantiated within this scope.
3799       PerformPendingInstantiations(/*LocalOnly=*/true);
3800 
3801       Local.Exit();
3802 
3803       if (Recursive) {
3804         // Define any newly required vtables.
3805         DefineUsedVTables();
3806 
3807         // Instantiate any pending implicit instantiations found during the
3808         // instantiation of this template.
3809         PerformPendingInstantiations();
3810 
3811         // Restore the set of pending vtables.
3812         assert(VTableUses.empty() &&
3813                "VTableUses should be empty before it is discarded.");
3814         VTableUses.swap(SavedVTableUses);
3815 
3816         // Restore the set of pending implicit instantiations.
3817         assert(PendingInstantiations.empty() &&
3818                "PendingInstantiations should be empty before it is discarded.");
3819         PendingInstantiations.swap(SavedPendingInstantiations);
3820       }
3821     }
3822 
3823     // Find actual definition
3824     Def = PatternDecl->getDefinition(getASTContext());
3825   } else {
3826     // If this is a static data member, find its out-of-line definition.
3827     assert(Var->isStaticDataMember() && "not a static data member?");
3828     PatternDecl = Var->getInstantiatedFromStaticDataMember();
3829 
3830     assert(PatternDecl && "data member was not instantiated from a template?");
3831     assert(PatternDecl->isStaticDataMember() && "not a static data member?");
3832     Def = PatternDecl->getOutOfLineDefinition();
3833   }
3834 
3835   // If we don't have a definition of the variable template, we won't perform
3836   // any instantiation. Rather, we rely on the user to instantiate this
3837   // definition (or provide a specialization for it) in another translation
3838   // unit.
3839   if (!Def) {
3840     if (DefinitionRequired) {
3841       if (VarSpec)
3842         Diag(PointOfInstantiation,
3843              diag::err_explicit_instantiation_undefined_var_template) << Var;
3844       else
3845         Diag(PointOfInstantiation,
3846              diag::err_explicit_instantiation_undefined_member)
3847             << 2 << Var->getDeclName() << Var->getDeclContext();
3848       Diag(PatternDecl->getLocation(),
3849            diag::note_explicit_instantiation_here);
3850       if (VarSpec)
3851         Var->setInvalidDecl();
3852     } else if (Var->getTemplateSpecializationKind()
3853                  == TSK_ExplicitInstantiationDefinition) {
3854       PendingInstantiations.push_back(
3855         std::make_pair(Var, PointOfInstantiation));
3856     }
3857 
3858     return;
3859   }
3860 
3861   TemplateSpecializationKind TSK = Var->getTemplateSpecializationKind();
3862 
3863   // Never instantiate an explicit specialization.
3864   if (TSK == TSK_ExplicitSpecialization)
3865     return;
3866 
3867   // C++11 [temp.explicit]p10:
3868   //   Except for inline functions, [...] explicit instantiation declarations
3869   //   have the effect of suppressing the implicit instantiation of the entity
3870   //   to which they refer.
3871   if (TSK == TSK_ExplicitInstantiationDeclaration)
3872     return;
3873 
3874   // Make sure to pass the instantiated variable to the consumer at the end.
3875   struct PassToConsumerRAII {
3876     ASTConsumer &Consumer;
3877     VarDecl *Var;
3878 
3879     PassToConsumerRAII(ASTConsumer &Consumer, VarDecl *Var)
3880       : Consumer(Consumer), Var(Var) { }
3881 
3882     ~PassToConsumerRAII() {
3883       Consumer.HandleCXXStaticMemberVarInstantiation(Var);
3884     }
3885   } PassToConsumerRAII(Consumer, Var);
3886 
3887   // If we already have a definition, we're done.
3888   if (VarDecl *Def = Var->getDefinition()) {
3889     // We may be explicitly instantiating something we've already implicitly
3890     // instantiated.
3891     Def->setTemplateSpecializationKind(Var->getTemplateSpecializationKind(),
3892                                        PointOfInstantiation);
3893     return;
3894   }
3895 
3896   InstantiatingTemplate Inst(*this, PointOfInstantiation, Var);
3897   if (Inst.isInvalid())
3898     return;
3899 
3900   // If we're performing recursive template instantiation, create our own
3901   // queue of pending implicit instantiations that we will instantiate later,
3902   // while we're still within our own instantiation context.
3903   SmallVector<VTableUse, 16> SavedVTableUses;
3904   std::deque<PendingImplicitInstantiation> SavedPendingInstantiations;
3905   SavePendingLocalImplicitInstantiationsRAII
3906       SavedPendingLocalImplicitInstantiations(*this);
3907   if (Recursive) {
3908     VTableUses.swap(SavedVTableUses);
3909     PendingInstantiations.swap(SavedPendingInstantiations);
3910   }
3911 
3912   // Enter the scope of this instantiation. We don't use
3913   // PushDeclContext because we don't have a scope.
3914   ContextRAII PreviousContext(*this, Var->getDeclContext());
3915   LocalInstantiationScope Local(*this);
3916 
3917   VarDecl *OldVar = Var;
3918   if (!VarSpec)
3919     Var = cast_or_null<VarDecl>(SubstDecl(Def, Var->getDeclContext(),
3920                                           TemplateArgs));
3921   else if (Var->isStaticDataMember() &&
3922            Var->getLexicalDeclContext()->isRecord()) {
3923     // We need to instantiate the definition of a static data member template,
3924     // and all we have is the in-class declaration of it. Instantiate a separate
3925     // declaration of the definition.
3926     TemplateDeclInstantiator Instantiator(*this, Var->getDeclContext(),
3927                                           TemplateArgs);
3928     Var = cast_or_null<VarDecl>(Instantiator.VisitVarTemplateSpecializationDecl(
3929         VarSpec->getSpecializedTemplate(), Def, 0,
3930         VarSpec->getTemplateArgsInfo(), VarSpec->getTemplateArgs().asArray()));
3931     if (Var) {
3932       llvm::PointerUnion<VarTemplateDecl *,
3933                          VarTemplatePartialSpecializationDecl *> PatternPtr =
3934           VarSpec->getSpecializedTemplateOrPartial();
3935       if (VarTemplatePartialSpecializationDecl *Partial =
3936           PatternPtr.dyn_cast<VarTemplatePartialSpecializationDecl *>())
3937         cast<VarTemplateSpecializationDecl>(Var)->setInstantiationOf(
3938             Partial, &VarSpec->getTemplateInstantiationArgs());
3939 
3940       // Merge the definition with the declaration.
3941       LookupResult R(*this, Var->getDeclName(), Var->getLocation(),
3942                      LookupOrdinaryName, ForRedeclaration);
3943       R.addDecl(OldVar);
3944       MergeVarDecl(Var, R);
3945 
3946       // Attach the initializer.
3947       InstantiateVariableInitializer(Var, Def, TemplateArgs);
3948     }
3949   } else
3950     // Complete the existing variable's definition with an appropriately
3951     // substituted type and initializer.
3952     Var = CompleteVarTemplateSpecializationDecl(VarSpec, Def, TemplateArgs);
3953 
3954   PreviousContext.pop();
3955 
3956   if (Var) {
3957     PassToConsumerRAII.Var = Var;
3958     Var->setTemplateSpecializationKind(OldVar->getTemplateSpecializationKind(),
3959                                        OldVar->getPointOfInstantiation());
3960   }
3961 
3962   // This variable may have local implicit instantiations that need to be
3963   // instantiated within this scope.
3964   PerformPendingInstantiations(/*LocalOnly=*/true);
3965 
3966   Local.Exit();
3967 
3968   if (Recursive) {
3969     // Define any newly required vtables.
3970     DefineUsedVTables();
3971 
3972     // Instantiate any pending implicit instantiations found during the
3973     // instantiation of this template.
3974     PerformPendingInstantiations();
3975 
3976     // Restore the set of pending vtables.
3977     assert(VTableUses.empty() &&
3978            "VTableUses should be empty before it is discarded.");
3979     VTableUses.swap(SavedVTableUses);
3980 
3981     // Restore the set of pending implicit instantiations.
3982     assert(PendingInstantiations.empty() &&
3983            "PendingInstantiations should be empty before it is discarded.");
3984     PendingInstantiations.swap(SavedPendingInstantiations);
3985   }
3986 }
3987 
3988 void
3989 Sema::InstantiateMemInitializers(CXXConstructorDecl *New,
3990                                  const CXXConstructorDecl *Tmpl,
3991                            const MultiLevelTemplateArgumentList &TemplateArgs) {
3992 
3993   SmallVector<CXXCtorInitializer*, 4> NewInits;
3994   bool AnyErrors = Tmpl->isInvalidDecl();
3995 
3996   // Instantiate all the initializers.
3997   for (CXXConstructorDecl::init_const_iterator Inits = Tmpl->init_begin(),
3998                                             InitsEnd = Tmpl->init_end();
3999        Inits != InitsEnd; ++Inits) {
4000     CXXCtorInitializer *Init = *Inits;
4001 
4002     // Only instantiate written initializers, let Sema re-construct implicit
4003     // ones.
4004     if (!Init->isWritten())
4005       continue;
4006 
4007     SourceLocation EllipsisLoc;
4008 
4009     if (Init->isPackExpansion()) {
4010       // This is a pack expansion. We should expand it now.
4011       TypeLoc BaseTL = Init->getTypeSourceInfo()->getTypeLoc();
4012       SmallVector<UnexpandedParameterPack, 4> Unexpanded;
4013       collectUnexpandedParameterPacks(BaseTL, Unexpanded);
4014       collectUnexpandedParameterPacks(Init->getInit(), Unexpanded);
4015       bool ShouldExpand = false;
4016       bool RetainExpansion = false;
4017       Optional<unsigned> NumExpansions;
4018       if (CheckParameterPacksForExpansion(Init->getEllipsisLoc(),
4019                                           BaseTL.getSourceRange(),
4020                                           Unexpanded,
4021                                           TemplateArgs, ShouldExpand,
4022                                           RetainExpansion,
4023                                           NumExpansions)) {
4024         AnyErrors = true;
4025         New->setInvalidDecl();
4026         continue;
4027       }
4028       assert(ShouldExpand && "Partial instantiation of base initializer?");
4029 
4030       // Loop over all of the arguments in the argument pack(s),
4031       for (unsigned I = 0; I != *NumExpansions; ++I) {
4032         Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(*this, I);
4033 
4034         // Instantiate the initializer.
4035         ExprResult TempInit = SubstInitializer(Init->getInit(), TemplateArgs,
4036                                                /*CXXDirectInit=*/true);
4037         if (TempInit.isInvalid()) {
4038           AnyErrors = true;
4039           break;
4040         }
4041 
4042         // Instantiate the base type.
4043         TypeSourceInfo *BaseTInfo = SubstType(Init->getTypeSourceInfo(),
4044                                               TemplateArgs,
4045                                               Init->getSourceLocation(),
4046                                               New->getDeclName());
4047         if (!BaseTInfo) {
4048           AnyErrors = true;
4049           break;
4050         }
4051 
4052         // Build the initializer.
4053         MemInitResult NewInit = BuildBaseInitializer(BaseTInfo->getType(),
4054                                                      BaseTInfo, TempInit.take(),
4055                                                      New->getParent(),
4056                                                      SourceLocation());
4057         if (NewInit.isInvalid()) {
4058           AnyErrors = true;
4059           break;
4060         }
4061 
4062         NewInits.push_back(NewInit.get());
4063       }
4064 
4065       continue;
4066     }
4067 
4068     // Instantiate the initializer.
4069     ExprResult TempInit = SubstInitializer(Init->getInit(), TemplateArgs,
4070                                            /*CXXDirectInit=*/true);
4071     if (TempInit.isInvalid()) {
4072       AnyErrors = true;
4073       continue;
4074     }
4075 
4076     MemInitResult NewInit;
4077     if (Init->isDelegatingInitializer() || Init->isBaseInitializer()) {
4078       TypeSourceInfo *TInfo = SubstType(Init->getTypeSourceInfo(),
4079                                         TemplateArgs,
4080                                         Init->getSourceLocation(),
4081                                         New->getDeclName());
4082       if (!TInfo) {
4083         AnyErrors = true;
4084         New->setInvalidDecl();
4085         continue;
4086       }
4087 
4088       if (Init->isBaseInitializer())
4089         NewInit = BuildBaseInitializer(TInfo->getType(), TInfo, TempInit.take(),
4090                                        New->getParent(), EllipsisLoc);
4091       else
4092         NewInit = BuildDelegatingInitializer(TInfo, TempInit.take(),
4093                                   cast<CXXRecordDecl>(CurContext->getParent()));
4094     } else if (Init->isMemberInitializer()) {
4095       FieldDecl *Member = cast_or_null<FieldDecl>(FindInstantiatedDecl(
4096                                                      Init->getMemberLocation(),
4097                                                      Init->getMember(),
4098                                                      TemplateArgs));
4099       if (!Member) {
4100         AnyErrors = true;
4101         New->setInvalidDecl();
4102         continue;
4103       }
4104 
4105       NewInit = BuildMemberInitializer(Member, TempInit.take(),
4106                                        Init->getSourceLocation());
4107     } else if (Init->isIndirectMemberInitializer()) {
4108       IndirectFieldDecl *IndirectMember =
4109          cast_or_null<IndirectFieldDecl>(FindInstantiatedDecl(
4110                                  Init->getMemberLocation(),
4111                                  Init->getIndirectMember(), TemplateArgs));
4112 
4113       if (!IndirectMember) {
4114         AnyErrors = true;
4115         New->setInvalidDecl();
4116         continue;
4117       }
4118 
4119       NewInit = BuildMemberInitializer(IndirectMember, TempInit.take(),
4120                                        Init->getSourceLocation());
4121     }
4122 
4123     if (NewInit.isInvalid()) {
4124       AnyErrors = true;
4125       New->setInvalidDecl();
4126     } else {
4127       NewInits.push_back(NewInit.get());
4128     }
4129   }
4130 
4131   // Assign all the initializers to the new constructor.
4132   ActOnMemInitializers(New,
4133                        /*FIXME: ColonLoc */
4134                        SourceLocation(),
4135                        NewInits,
4136                        AnyErrors);
4137 }
4138 
4139 // TODO: this could be templated if the various decl types used the
4140 // same method name.
4141 static bool isInstantiationOf(ClassTemplateDecl *Pattern,
4142                               ClassTemplateDecl *Instance) {
4143   Pattern = Pattern->getCanonicalDecl();
4144 
4145   do {
4146     Instance = Instance->getCanonicalDecl();
4147     if (Pattern == Instance) return true;
4148     Instance = Instance->getInstantiatedFromMemberTemplate();
4149   } while (Instance);
4150 
4151   return false;
4152 }
4153 
4154 static bool isInstantiationOf(FunctionTemplateDecl *Pattern,
4155                               FunctionTemplateDecl *Instance) {
4156   Pattern = Pattern->getCanonicalDecl();
4157 
4158   do {
4159     Instance = Instance->getCanonicalDecl();
4160     if (Pattern == Instance) return true;
4161     Instance = Instance->getInstantiatedFromMemberTemplate();
4162   } while (Instance);
4163 
4164   return false;
4165 }
4166 
4167 static bool
4168 isInstantiationOf(ClassTemplatePartialSpecializationDecl *Pattern,
4169                   ClassTemplatePartialSpecializationDecl *Instance) {
4170   Pattern
4171     = cast<ClassTemplatePartialSpecializationDecl>(Pattern->getCanonicalDecl());
4172   do {
4173     Instance = cast<ClassTemplatePartialSpecializationDecl>(
4174                                                 Instance->getCanonicalDecl());
4175     if (Pattern == Instance)
4176       return true;
4177     Instance = Instance->getInstantiatedFromMember();
4178   } while (Instance);
4179 
4180   return false;
4181 }
4182 
4183 static bool isInstantiationOf(CXXRecordDecl *Pattern,
4184                               CXXRecordDecl *Instance) {
4185   Pattern = Pattern->getCanonicalDecl();
4186 
4187   do {
4188     Instance = Instance->getCanonicalDecl();
4189     if (Pattern == Instance) return true;
4190     Instance = Instance->getInstantiatedFromMemberClass();
4191   } while (Instance);
4192 
4193   return false;
4194 }
4195 
4196 static bool isInstantiationOf(FunctionDecl *Pattern,
4197                               FunctionDecl *Instance) {
4198   Pattern = Pattern->getCanonicalDecl();
4199 
4200   do {
4201     Instance = Instance->getCanonicalDecl();
4202     if (Pattern == Instance) return true;
4203     Instance = Instance->getInstantiatedFromMemberFunction();
4204   } while (Instance);
4205 
4206   return false;
4207 }
4208 
4209 static bool isInstantiationOf(EnumDecl *Pattern,
4210                               EnumDecl *Instance) {
4211   Pattern = Pattern->getCanonicalDecl();
4212 
4213   do {
4214     Instance = Instance->getCanonicalDecl();
4215     if (Pattern == Instance) return true;
4216     Instance = Instance->getInstantiatedFromMemberEnum();
4217   } while (Instance);
4218 
4219   return false;
4220 }
4221 
4222 static bool isInstantiationOf(UsingShadowDecl *Pattern,
4223                               UsingShadowDecl *Instance,
4224                               ASTContext &C) {
4225   return C.getInstantiatedFromUsingShadowDecl(Instance) == Pattern;
4226 }
4227 
4228 static bool isInstantiationOf(UsingDecl *Pattern,
4229                               UsingDecl *Instance,
4230                               ASTContext &C) {
4231   return C.getInstantiatedFromUsingDecl(Instance) == Pattern;
4232 }
4233 
4234 static bool isInstantiationOf(UnresolvedUsingValueDecl *Pattern,
4235                               UsingDecl *Instance,
4236                               ASTContext &C) {
4237   return C.getInstantiatedFromUsingDecl(Instance) == Pattern;
4238 }
4239 
4240 static bool isInstantiationOf(UnresolvedUsingTypenameDecl *Pattern,
4241                               UsingDecl *Instance,
4242                               ASTContext &C) {
4243   return C.getInstantiatedFromUsingDecl(Instance) == Pattern;
4244 }
4245 
4246 static bool isInstantiationOfStaticDataMember(VarDecl *Pattern,
4247                                               VarDecl *Instance) {
4248   assert(Instance->isStaticDataMember());
4249 
4250   Pattern = Pattern->getCanonicalDecl();
4251 
4252   do {
4253     Instance = Instance->getCanonicalDecl();
4254     if (Pattern == Instance) return true;
4255     Instance = Instance->getInstantiatedFromStaticDataMember();
4256   } while (Instance);
4257 
4258   return false;
4259 }
4260 
4261 // Other is the prospective instantiation
4262 // D is the prospective pattern
4263 static bool isInstantiationOf(ASTContext &Ctx, NamedDecl *D, Decl *Other) {
4264   if (D->getKind() != Other->getKind()) {
4265     if (UnresolvedUsingTypenameDecl *UUD
4266           = dyn_cast<UnresolvedUsingTypenameDecl>(D)) {
4267       if (UsingDecl *UD = dyn_cast<UsingDecl>(Other)) {
4268         return isInstantiationOf(UUD, UD, Ctx);
4269       }
4270     }
4271 
4272     if (UnresolvedUsingValueDecl *UUD
4273           = dyn_cast<UnresolvedUsingValueDecl>(D)) {
4274       if (UsingDecl *UD = dyn_cast<UsingDecl>(Other)) {
4275         return isInstantiationOf(UUD, UD, Ctx);
4276       }
4277     }
4278 
4279     return false;
4280   }
4281 
4282   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Other))
4283     return isInstantiationOf(cast<CXXRecordDecl>(D), Record);
4284 
4285   if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Other))
4286     return isInstantiationOf(cast<FunctionDecl>(D), Function);
4287 
4288   if (EnumDecl *Enum = dyn_cast<EnumDecl>(Other))
4289     return isInstantiationOf(cast<EnumDecl>(D), Enum);
4290 
4291   if (VarDecl *Var = dyn_cast<VarDecl>(Other))
4292     if (Var->isStaticDataMember())
4293       return isInstantiationOfStaticDataMember(cast<VarDecl>(D), Var);
4294 
4295   if (ClassTemplateDecl *Temp = dyn_cast<ClassTemplateDecl>(Other))
4296     return isInstantiationOf(cast<ClassTemplateDecl>(D), Temp);
4297 
4298   if (FunctionTemplateDecl *Temp = dyn_cast<FunctionTemplateDecl>(Other))
4299     return isInstantiationOf(cast<FunctionTemplateDecl>(D), Temp);
4300 
4301   if (ClassTemplatePartialSpecializationDecl *PartialSpec
4302         = dyn_cast<ClassTemplatePartialSpecializationDecl>(Other))
4303     return isInstantiationOf(cast<ClassTemplatePartialSpecializationDecl>(D),
4304                              PartialSpec);
4305 
4306   if (FieldDecl *Field = dyn_cast<FieldDecl>(Other)) {
4307     if (!Field->getDeclName()) {
4308       // This is an unnamed field.
4309       return Ctx.getInstantiatedFromUnnamedFieldDecl(Field) ==
4310         cast<FieldDecl>(D);
4311     }
4312   }
4313 
4314   if (UsingDecl *Using = dyn_cast<UsingDecl>(Other))
4315     return isInstantiationOf(cast<UsingDecl>(D), Using, Ctx);
4316 
4317   if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(Other))
4318     return isInstantiationOf(cast<UsingShadowDecl>(D), Shadow, Ctx);
4319 
4320   return D->getDeclName() && isa<NamedDecl>(Other) &&
4321     D->getDeclName() == cast<NamedDecl>(Other)->getDeclName();
4322 }
4323 
4324 template<typename ForwardIterator>
4325 static NamedDecl *findInstantiationOf(ASTContext &Ctx,
4326                                       NamedDecl *D,
4327                                       ForwardIterator first,
4328                                       ForwardIterator last) {
4329   for (; first != last; ++first)
4330     if (isInstantiationOf(Ctx, D, *first))
4331       return cast<NamedDecl>(*first);
4332 
4333   return 0;
4334 }
4335 
4336 /// \brief Finds the instantiation of the given declaration context
4337 /// within the current instantiation.
4338 ///
4339 /// \returns NULL if there was an error
4340 DeclContext *Sema::FindInstantiatedContext(SourceLocation Loc, DeclContext* DC,
4341                           const MultiLevelTemplateArgumentList &TemplateArgs) {
4342   if (NamedDecl *D = dyn_cast<NamedDecl>(DC)) {
4343     Decl* ID = FindInstantiatedDecl(Loc, D, TemplateArgs);
4344     return cast_or_null<DeclContext>(ID);
4345   } else return DC;
4346 }
4347 
4348 /// \brief Find the instantiation of the given declaration within the
4349 /// current instantiation.
4350 ///
4351 /// This routine is intended to be used when \p D is a declaration
4352 /// referenced from within a template, that needs to mapped into the
4353 /// corresponding declaration within an instantiation. For example,
4354 /// given:
4355 ///
4356 /// \code
4357 /// template<typename T>
4358 /// struct X {
4359 ///   enum Kind {
4360 ///     KnownValue = sizeof(T)
4361 ///   };
4362 ///
4363 ///   bool getKind() const { return KnownValue; }
4364 /// };
4365 ///
4366 /// template struct X<int>;
4367 /// \endcode
4368 ///
4369 /// In the instantiation of <tt>X<int>::getKind()</tt>, we need to map the
4370 /// \p EnumConstantDecl for \p KnownValue (which refers to
4371 /// <tt>X<T>::<Kind>::KnownValue</tt>) to its instantiation
4372 /// (<tt>X<int>::<Kind>::KnownValue</tt>). \p FindInstantiatedDecl performs
4373 /// this mapping from within the instantiation of <tt>X<int></tt>.
4374 NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
4375                           const MultiLevelTemplateArgumentList &TemplateArgs) {
4376   DeclContext *ParentDC = D->getDeclContext();
4377   // FIXME: Parmeters of pointer to functions (y below) that are themselves
4378   // parameters (p below) can have their ParentDC set to the translation-unit
4379   // - thus we can not consistently check if the ParentDC of such a parameter
4380   // is Dependent or/and a FunctionOrMethod.
4381   // For e.g. this code, during Template argument deduction tries to
4382   // find an instantiated decl for (T y) when the ParentDC for y is
4383   // the translation unit.
4384   //   e.g. template <class T> void Foo(auto (*p)(T y) -> decltype(y())) {}
4385   //   float baz(float(*)()) { return 0.0; }
4386   //   Foo(baz);
4387   // The better fix here is perhaps to ensure that a ParmVarDecl, by the time
4388   // it gets here, always has a FunctionOrMethod as its ParentDC??
4389   // For now:
4390   //  - as long as we have a ParmVarDecl whose parent is non-dependent and
4391   //    whose type is not instantiation dependent, do nothing to the decl
4392   //  - otherwise find its instantiated decl.
4393   if (isa<ParmVarDecl>(D) && !ParentDC->isDependentContext() &&
4394       !cast<ParmVarDecl>(D)->getType()->isInstantiationDependentType())
4395     return D;
4396   if (isa<ParmVarDecl>(D) || isa<NonTypeTemplateParmDecl>(D) ||
4397       isa<TemplateTypeParmDecl>(D) || isa<TemplateTemplateParmDecl>(D) ||
4398       (ParentDC->isFunctionOrMethod() && ParentDC->isDependentContext()) ||
4399       (isa<CXXRecordDecl>(D) && cast<CXXRecordDecl>(D)->isLambda())) {
4400     // D is a local of some kind. Look into the map of local
4401     // declarations to their instantiations.
4402     typedef LocalInstantiationScope::DeclArgumentPack DeclArgumentPack;
4403     llvm::PointerUnion<Decl *, DeclArgumentPack *> *Found
4404       = CurrentInstantiationScope->findInstantiationOf(D);
4405 
4406     if (Found) {
4407       if (Decl *FD = Found->dyn_cast<Decl *>())
4408         return cast<NamedDecl>(FD);
4409 
4410       int PackIdx = ArgumentPackSubstitutionIndex;
4411       assert(PackIdx != -1 && "found declaration pack but not pack expanding");
4412       return cast<NamedDecl>((*Found->get<DeclArgumentPack *>())[PackIdx]);
4413     }
4414 
4415     // If we're performing a partial substitution during template argument
4416     // deduction, we may not have values for template parameters yet. They
4417     // just map to themselves.
4418     if (isa<NonTypeTemplateParmDecl>(D) || isa<TemplateTypeParmDecl>(D) ||
4419         isa<TemplateTemplateParmDecl>(D))
4420       return D;
4421 
4422     if (D->isInvalidDecl())
4423       return 0;
4424 
4425     // If we didn't find the decl, then we must have a label decl that hasn't
4426     // been found yet.  Lazily instantiate it and return it now.
4427     assert(isa<LabelDecl>(D));
4428 
4429     Decl *Inst = SubstDecl(D, CurContext, TemplateArgs);
4430     assert(Inst && "Failed to instantiate label??");
4431 
4432     CurrentInstantiationScope->InstantiatedLocal(D, Inst);
4433     return cast<LabelDecl>(Inst);
4434   }
4435 
4436   // For variable template specializations, update those that are still
4437   // type-dependent.
4438   if (VarTemplateSpecializationDecl *VarSpec =
4439           dyn_cast<VarTemplateSpecializationDecl>(D)) {
4440     bool InstantiationDependent = false;
4441     const TemplateArgumentListInfo &VarTemplateArgs =
4442         VarSpec->getTemplateArgsInfo();
4443     if (TemplateSpecializationType::anyDependentTemplateArguments(
4444             VarTemplateArgs, InstantiationDependent))
4445       D = cast<NamedDecl>(
4446           SubstDecl(D, VarSpec->getDeclContext(), TemplateArgs));
4447     return D;
4448   }
4449 
4450   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
4451     if (!Record->isDependentContext())
4452       return D;
4453 
4454     // Determine whether this record is the "templated" declaration describing
4455     // a class template or class template partial specialization.
4456     ClassTemplateDecl *ClassTemplate = Record->getDescribedClassTemplate();
4457     if (ClassTemplate)
4458       ClassTemplate = ClassTemplate->getCanonicalDecl();
4459     else if (ClassTemplatePartialSpecializationDecl *PartialSpec
4460                = dyn_cast<ClassTemplatePartialSpecializationDecl>(Record))
4461       ClassTemplate = PartialSpec->getSpecializedTemplate()->getCanonicalDecl();
4462 
4463     // Walk the current context to find either the record or an instantiation of
4464     // it.
4465     DeclContext *DC = CurContext;
4466     while (!DC->isFileContext()) {
4467       // If we're performing substitution while we're inside the template
4468       // definition, we'll find our own context. We're done.
4469       if (DC->Equals(Record))
4470         return Record;
4471 
4472       if (CXXRecordDecl *InstRecord = dyn_cast<CXXRecordDecl>(DC)) {
4473         // Check whether we're in the process of instantiating a class template
4474         // specialization of the template we're mapping.
4475         if (ClassTemplateSpecializationDecl *InstSpec
4476                       = dyn_cast<ClassTemplateSpecializationDecl>(InstRecord)){
4477           ClassTemplateDecl *SpecTemplate = InstSpec->getSpecializedTemplate();
4478           if (ClassTemplate && isInstantiationOf(ClassTemplate, SpecTemplate))
4479             return InstRecord;
4480         }
4481 
4482         // Check whether we're in the process of instantiating a member class.
4483         if (isInstantiationOf(Record, InstRecord))
4484           return InstRecord;
4485       }
4486 
4487       // Move to the outer template scope.
4488       if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {
4489         if (FD->getFriendObjectKind() && FD->getDeclContext()->isFileContext()){
4490           DC = FD->getLexicalDeclContext();
4491           continue;
4492         }
4493       }
4494 
4495       DC = DC->getParent();
4496     }
4497 
4498     // Fall through to deal with other dependent record types (e.g.,
4499     // anonymous unions in class templates).
4500   }
4501 
4502   if (!ParentDC->isDependentContext())
4503     return D;
4504 
4505   ParentDC = FindInstantiatedContext(Loc, ParentDC, TemplateArgs);
4506   if (!ParentDC)
4507     return 0;
4508 
4509   if (ParentDC != D->getDeclContext()) {
4510     // We performed some kind of instantiation in the parent context,
4511     // so now we need to look into the instantiated parent context to
4512     // find the instantiation of the declaration D.
4513 
4514     // If our context used to be dependent, we may need to instantiate
4515     // it before performing lookup into that context.
4516     bool IsBeingInstantiated = false;
4517     if (CXXRecordDecl *Spec = dyn_cast<CXXRecordDecl>(ParentDC)) {
4518       if (!Spec->isDependentContext()) {
4519         QualType T = Context.getTypeDeclType(Spec);
4520         const RecordType *Tag = T->getAs<RecordType>();
4521         assert(Tag && "type of non-dependent record is not a RecordType");
4522         if (Tag->isBeingDefined())
4523           IsBeingInstantiated = true;
4524         if (!Tag->isBeingDefined() &&
4525             RequireCompleteType(Loc, T, diag::err_incomplete_type))
4526           return 0;
4527 
4528         ParentDC = Tag->getDecl();
4529       }
4530     }
4531 
4532     NamedDecl *Result = 0;
4533     if (D->getDeclName()) {
4534       DeclContext::lookup_result Found = ParentDC->lookup(D->getDeclName());
4535       Result = findInstantiationOf(Context, D, Found.begin(), Found.end());
4536     } else {
4537       // Since we don't have a name for the entity we're looking for,
4538       // our only option is to walk through all of the declarations to
4539       // find that name. This will occur in a few cases:
4540       //
4541       //   - anonymous struct/union within a template
4542       //   - unnamed class/struct/union/enum within a template
4543       //
4544       // FIXME: Find a better way to find these instantiations!
4545       Result = findInstantiationOf(Context, D,
4546                                    ParentDC->decls_begin(),
4547                                    ParentDC->decls_end());
4548     }
4549 
4550     if (!Result) {
4551       if (isa<UsingShadowDecl>(D)) {
4552         // UsingShadowDecls can instantiate to nothing because of using hiding.
4553       } else if (Diags.hasErrorOccurred()) {
4554         // We've already complained about something, so most likely this
4555         // declaration failed to instantiate. There's no point in complaining
4556         // further, since this is normal in invalid code.
4557       } else if (IsBeingInstantiated) {
4558         // The class in which this member exists is currently being
4559         // instantiated, and we haven't gotten around to instantiating this
4560         // member yet. This can happen when the code uses forward declarations
4561         // of member classes, and introduces ordering dependencies via
4562         // template instantiation.
4563         Diag(Loc, diag::err_member_not_yet_instantiated)
4564           << D->getDeclName()
4565           << Context.getTypeDeclType(cast<CXXRecordDecl>(ParentDC));
4566         Diag(D->getLocation(), diag::note_non_instantiated_member_here);
4567       } else if (EnumConstantDecl *ED = dyn_cast<EnumConstantDecl>(D)) {
4568         // This enumeration constant was found when the template was defined,
4569         // but can't be found in the instantiation. This can happen if an
4570         // unscoped enumeration member is explicitly specialized.
4571         EnumDecl *Enum = cast<EnumDecl>(ED->getLexicalDeclContext());
4572         EnumDecl *Spec = cast<EnumDecl>(FindInstantiatedDecl(Loc, Enum,
4573                                                              TemplateArgs));
4574         assert(Spec->getTemplateSpecializationKind() ==
4575                  TSK_ExplicitSpecialization);
4576         Diag(Loc, diag::err_enumerator_does_not_exist)
4577           << D->getDeclName()
4578           << Context.getTypeDeclType(cast<TypeDecl>(Spec->getDeclContext()));
4579         Diag(Spec->getLocation(), diag::note_enum_specialized_here)
4580           << Context.getTypeDeclType(Spec);
4581       } else {
4582         // We should have found something, but didn't.
4583         llvm_unreachable("Unable to find instantiation of declaration!");
4584       }
4585     }
4586 
4587     D = Result;
4588   }
4589 
4590   return D;
4591 }
4592 
4593 /// \brief Performs template instantiation for all implicit template
4594 /// instantiations we have seen until this point.
4595 void Sema::PerformPendingInstantiations(bool LocalOnly) {
4596   // Load pending instantiations from the external source.
4597   if (!LocalOnly && ExternalSource) {
4598     SmallVector<PendingImplicitInstantiation, 4> Pending;
4599     ExternalSource->ReadPendingInstantiations(Pending);
4600     PendingInstantiations.insert(PendingInstantiations.begin(),
4601                                  Pending.begin(), Pending.end());
4602   }
4603 
4604   while (!PendingLocalImplicitInstantiations.empty() ||
4605          (!LocalOnly && !PendingInstantiations.empty())) {
4606     PendingImplicitInstantiation Inst;
4607 
4608     if (PendingLocalImplicitInstantiations.empty()) {
4609       Inst = PendingInstantiations.front();
4610       PendingInstantiations.pop_front();
4611     } else {
4612       Inst = PendingLocalImplicitInstantiations.front();
4613       PendingLocalImplicitInstantiations.pop_front();
4614     }
4615 
4616     // Instantiate function definitions
4617     if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Inst.first)) {
4618       PrettyDeclStackTraceEntry CrashInfo(*this, Function, SourceLocation(),
4619                                           "instantiating function definition");
4620       bool DefinitionRequired = Function->getTemplateSpecializationKind() ==
4621                                 TSK_ExplicitInstantiationDefinition;
4622       InstantiateFunctionDefinition(/*FIXME:*/Inst.second, Function, true,
4623                                     DefinitionRequired);
4624       continue;
4625     }
4626 
4627     // Instantiate variable definitions
4628     VarDecl *Var = cast<VarDecl>(Inst.first);
4629 
4630     assert((Var->isStaticDataMember() ||
4631             isa<VarTemplateSpecializationDecl>(Var)) &&
4632            "Not a static data member, nor a variable template"
4633            " specialization?");
4634 
4635     // Don't try to instantiate declarations if the most recent redeclaration
4636     // is invalid.
4637     if (Var->getMostRecentDecl()->isInvalidDecl())
4638       continue;
4639 
4640     // Check if the most recent declaration has changed the specialization kind
4641     // and removed the need for implicit instantiation.
4642     switch (Var->getMostRecentDecl()->getTemplateSpecializationKind()) {
4643     case TSK_Undeclared:
4644       llvm_unreachable("Cannot instantitiate an undeclared specialization.");
4645     case TSK_ExplicitInstantiationDeclaration:
4646     case TSK_ExplicitSpecialization:
4647       continue;  // No longer need to instantiate this type.
4648     case TSK_ExplicitInstantiationDefinition:
4649       // We only need an instantiation if the pending instantiation *is* the
4650       // explicit instantiation.
4651       if (Var != Var->getMostRecentDecl()) continue;
4652     case TSK_ImplicitInstantiation:
4653       break;
4654     }
4655 
4656     PrettyDeclStackTraceEntry CrashInfo(*this, Var, SourceLocation(),
4657                                         "instantiating variable definition");
4658     bool DefinitionRequired = Var->getTemplateSpecializationKind() ==
4659                               TSK_ExplicitInstantiationDefinition;
4660 
4661     // Instantiate static data member definitions or variable template
4662     // specializations.
4663     InstantiateVariableDefinition(/*FIXME:*/ Inst.second, Var, true,
4664                                   DefinitionRequired);
4665   }
4666 }
4667 
4668 void Sema::PerformDependentDiagnostics(const DeclContext *Pattern,
4669                        const MultiLevelTemplateArgumentList &TemplateArgs) {
4670   for (auto DD : Pattern->ddiags()) {
4671     switch (DD->getKind()) {
4672     case DependentDiagnostic::Access:
4673       HandleDependentAccessCheck(*DD, TemplateArgs);
4674       break;
4675     }
4676   }
4677 }
4678