xref: /freebsd/contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp (revision 8c27c5541e95164a37ac1beb7bd4ef43429aed55)
1 //===------- SemaTemplateInstantiate.cpp - C++ Template Instantiation ------===/
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //===----------------------------------------------------------------------===/
7 //
8 //  This file implements C++ template instantiation.
9 //
10 //===----------------------------------------------------------------------===/
11 
12 #include "clang/Sema/SemaInternal.h"
13 #include "TreeTransform.h"
14 #include "clang/AST/ASTConsumer.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/ASTLambda.h"
17 #include "clang/AST/ASTMutationListener.h"
18 #include "clang/AST/DeclTemplate.h"
19 #include "clang/AST/Expr.h"
20 #include "clang/AST/PrettyDeclStackTrace.h"
21 #include "clang/AST/TypeVisitor.h"
22 #include "clang/Basic/LangOptions.h"
23 #include "clang/Basic/Stack.h"
24 #include "clang/Sema/DeclSpec.h"
25 #include "clang/Sema/Initialization.h"
26 #include "clang/Sema/Lookup.h"
27 #include "clang/Sema/Template.h"
28 #include "clang/Sema/TemplateDeduction.h"
29 #include "clang/Sema/TemplateInstCallback.h"
30 #include "clang/Sema/SemaConcept.h"
31 #include "llvm/Support/TimeProfiler.h"
32 
33 using namespace clang;
34 using namespace sema;
35 
36 //===----------------------------------------------------------------------===/
37 // Template Instantiation Support
38 //===----------------------------------------------------------------------===/
39 
40 /// Retrieve the template argument list(s) that should be used to
41 /// instantiate the definition of the given declaration.
42 ///
43 /// \param D the declaration for which we are computing template instantiation
44 /// arguments.
45 ///
46 /// \param Innermost if non-NULL, the innermost template argument list.
47 ///
48 /// \param RelativeToPrimary true if we should get the template
49 /// arguments relative to the primary template, even when we're
50 /// dealing with a specialization. This is only relevant for function
51 /// template specializations.
52 ///
53 /// \param Pattern If non-NULL, indicates the pattern from which we will be
54 /// instantiating the definition of the given declaration, \p D. This is
55 /// used to determine the proper set of template instantiation arguments for
56 /// friend function template specializations.
57 MultiLevelTemplateArgumentList
58 Sema::getTemplateInstantiationArgs(NamedDecl *D,
59                                    const TemplateArgumentList *Innermost,
60                                    bool RelativeToPrimary,
61                                    const FunctionDecl *Pattern) {
62   // Accumulate the set of template argument lists in this structure.
63   MultiLevelTemplateArgumentList Result;
64 
65   if (Innermost)
66     Result.addOuterTemplateArguments(Innermost);
67 
68   DeclContext *Ctx = dyn_cast<DeclContext>(D);
69   if (!Ctx) {
70     Ctx = D->getDeclContext();
71 
72     // Add template arguments from a variable template instantiation. For a
73     // class-scope explicit specialization, there are no template arguments
74     // at this level, but there may be enclosing template arguments.
75     VarTemplateSpecializationDecl *Spec =
76         dyn_cast<VarTemplateSpecializationDecl>(D);
77     if (Spec && !Spec->isClassScopeExplicitSpecialization()) {
78       // We're done when we hit an explicit specialization.
79       if (Spec->getSpecializationKind() == TSK_ExplicitSpecialization &&
80           !isa<VarTemplatePartialSpecializationDecl>(Spec))
81         return Result;
82 
83       Result.addOuterTemplateArguments(&Spec->getTemplateInstantiationArgs());
84 
85       // If this variable template specialization was instantiated from a
86       // specialized member that is a variable template, we're done.
87       assert(Spec->getSpecializedTemplate() && "No variable template?");
88       llvm::PointerUnion<VarTemplateDecl*,
89                          VarTemplatePartialSpecializationDecl*> Specialized
90                              = Spec->getSpecializedTemplateOrPartial();
91       if (VarTemplatePartialSpecializationDecl *Partial =
92               Specialized.dyn_cast<VarTemplatePartialSpecializationDecl *>()) {
93         if (Partial->isMemberSpecialization())
94           return Result;
95       } else {
96         VarTemplateDecl *Tmpl = Specialized.get<VarTemplateDecl *>();
97         if (Tmpl->isMemberSpecialization())
98           return Result;
99       }
100     }
101 
102     // If we have a template template parameter with translation unit context,
103     // then we're performing substitution into a default template argument of
104     // this template template parameter before we've constructed the template
105     // that will own this template template parameter. In this case, we
106     // use empty template parameter lists for all of the outer templates
107     // to avoid performing any substitutions.
108     if (Ctx->isTranslationUnit()) {
109       if (TemplateTemplateParmDecl *TTP
110                                       = dyn_cast<TemplateTemplateParmDecl>(D)) {
111         for (unsigned I = 0, N = TTP->getDepth() + 1; I != N; ++I)
112           Result.addOuterTemplateArguments(None);
113         return Result;
114       }
115     }
116   }
117 
118   while (!Ctx->isFileContext()) {
119     // Add template arguments from a class template instantiation.
120     ClassTemplateSpecializationDecl *Spec
121           = dyn_cast<ClassTemplateSpecializationDecl>(Ctx);
122     if (Spec && !Spec->isClassScopeExplicitSpecialization()) {
123       // We're done when we hit an explicit specialization.
124       if (Spec->getSpecializationKind() == TSK_ExplicitSpecialization &&
125           !isa<ClassTemplatePartialSpecializationDecl>(Spec))
126         break;
127 
128       Result.addOuterTemplateArguments(&Spec->getTemplateInstantiationArgs());
129 
130       // If this class template specialization was instantiated from a
131       // specialized member that is a class template, we're done.
132       assert(Spec->getSpecializedTemplate() && "No class template?");
133       if (Spec->getSpecializedTemplate()->isMemberSpecialization())
134         break;
135     }
136     // Add template arguments from a function template specialization.
137     else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Ctx)) {
138       if (!RelativeToPrimary &&
139           Function->getTemplateSpecializationKindForInstantiation() ==
140               TSK_ExplicitSpecialization)
141         break;
142 
143       if (const TemplateArgumentList *TemplateArgs
144             = Function->getTemplateSpecializationArgs()) {
145         // Add the template arguments for this specialization.
146         Result.addOuterTemplateArguments(TemplateArgs);
147 
148         // If this function was instantiated from a specialized member that is
149         // a function template, we're done.
150         assert(Function->getPrimaryTemplate() && "No function template?");
151         if (Function->getPrimaryTemplate()->isMemberSpecialization())
152           break;
153 
154         // If this function is a generic lambda specialization, we are done.
155         if (isGenericLambdaCallOperatorOrStaticInvokerSpecialization(Function))
156           break;
157 
158       } else if (FunctionTemplateDecl *FunTmpl
159                                    = Function->getDescribedFunctionTemplate()) {
160         // Add the "injected" template arguments.
161         Result.addOuterTemplateArguments(FunTmpl->getInjectedTemplateArgs());
162       }
163 
164       // If this is a friend declaration and it declares an entity at
165       // namespace scope, take arguments from its lexical parent
166       // instead of its semantic parent, unless of course the pattern we're
167       // instantiating actually comes from the file's context!
168       if (Function->getFriendObjectKind() &&
169           Function->getDeclContext()->isFileContext() &&
170           (!Pattern || !Pattern->getLexicalDeclContext()->isFileContext())) {
171         Ctx = Function->getLexicalDeclContext();
172         RelativeToPrimary = false;
173         continue;
174       }
175     } else if (CXXRecordDecl *Rec = dyn_cast<CXXRecordDecl>(Ctx)) {
176       if (ClassTemplateDecl *ClassTemplate = Rec->getDescribedClassTemplate()) {
177         QualType T = ClassTemplate->getInjectedClassNameSpecialization();
178         const TemplateSpecializationType *TST =
179             cast<TemplateSpecializationType>(Context.getCanonicalType(T));
180         Result.addOuterTemplateArguments(
181             llvm::makeArrayRef(TST->getArgs(), TST->getNumArgs()));
182         if (ClassTemplate->isMemberSpecialization())
183           break;
184       }
185     }
186 
187     Ctx = Ctx->getParent();
188     RelativeToPrimary = false;
189   }
190 
191   return Result;
192 }
193 
194 bool Sema::CodeSynthesisContext::isInstantiationRecord() const {
195   switch (Kind) {
196   case TemplateInstantiation:
197   case ExceptionSpecInstantiation:
198   case DefaultTemplateArgumentInstantiation:
199   case DefaultFunctionArgumentInstantiation:
200   case ExplicitTemplateArgumentSubstitution:
201   case DeducedTemplateArgumentSubstitution:
202   case PriorTemplateArgumentSubstitution:
203   case ConstraintsCheck:
204   case NestedRequirementConstraintsCheck:
205     return true;
206 
207   case RequirementInstantiation:
208   case DefaultTemplateArgumentChecking:
209   case DeclaringSpecialMember:
210   case DeclaringImplicitEqualityComparison:
211   case DefiningSynthesizedFunction:
212   case ExceptionSpecEvaluation:
213   case ConstraintSubstitution:
214   case ParameterMappingSubstitution:
215   case ConstraintNormalization:
216   case RewritingOperatorAsSpaceship:
217     return false;
218 
219   // This function should never be called when Kind's value is Memoization.
220   case Memoization:
221     break;
222   }
223 
224   llvm_unreachable("Invalid SynthesisKind!");
225 }
226 
227 Sema::InstantiatingTemplate::InstantiatingTemplate(
228     Sema &SemaRef, CodeSynthesisContext::SynthesisKind Kind,
229     SourceLocation PointOfInstantiation, SourceRange InstantiationRange,
230     Decl *Entity, NamedDecl *Template, ArrayRef<TemplateArgument> TemplateArgs,
231     sema::TemplateDeductionInfo *DeductionInfo)
232     : SemaRef(SemaRef) {
233   // Don't allow further instantiation if a fatal error and an uncompilable
234   // error have occurred. Any diagnostics we might have raised will not be
235   // visible, and we do not need to construct a correct AST.
236   if (SemaRef.Diags.hasFatalErrorOccurred() &&
237       SemaRef.Diags.hasUncompilableErrorOccurred()) {
238     Invalid = true;
239     return;
240   }
241   Invalid = CheckInstantiationDepth(PointOfInstantiation, InstantiationRange);
242   if (!Invalid) {
243     CodeSynthesisContext Inst;
244     Inst.Kind = Kind;
245     Inst.PointOfInstantiation = PointOfInstantiation;
246     Inst.Entity = Entity;
247     Inst.Template = Template;
248     Inst.TemplateArgs = TemplateArgs.data();
249     Inst.NumTemplateArgs = TemplateArgs.size();
250     Inst.DeductionInfo = DeductionInfo;
251     Inst.InstantiationRange = InstantiationRange;
252     SemaRef.pushCodeSynthesisContext(Inst);
253 
254     AlreadyInstantiating = !Inst.Entity ? false :
255         !SemaRef.InstantiatingSpecializations
256              .insert(std::make_pair(Inst.Entity->getCanonicalDecl(), Inst.Kind))
257              .second;
258     atTemplateBegin(SemaRef.TemplateInstCallbacks, SemaRef, Inst);
259   }
260 }
261 
262 Sema::InstantiatingTemplate::InstantiatingTemplate(
263     Sema &SemaRef, SourceLocation PointOfInstantiation, Decl *Entity,
264     SourceRange InstantiationRange)
265     : InstantiatingTemplate(SemaRef,
266                             CodeSynthesisContext::TemplateInstantiation,
267                             PointOfInstantiation, InstantiationRange, Entity) {}
268 
269 Sema::InstantiatingTemplate::InstantiatingTemplate(
270     Sema &SemaRef, SourceLocation PointOfInstantiation, FunctionDecl *Entity,
271     ExceptionSpecification, SourceRange InstantiationRange)
272     : InstantiatingTemplate(
273           SemaRef, CodeSynthesisContext::ExceptionSpecInstantiation,
274           PointOfInstantiation, InstantiationRange, Entity) {}
275 
276 Sema::InstantiatingTemplate::InstantiatingTemplate(
277     Sema &SemaRef, SourceLocation PointOfInstantiation, TemplateParameter Param,
278     TemplateDecl *Template, ArrayRef<TemplateArgument> TemplateArgs,
279     SourceRange InstantiationRange)
280     : InstantiatingTemplate(
281           SemaRef,
282           CodeSynthesisContext::DefaultTemplateArgumentInstantiation,
283           PointOfInstantiation, InstantiationRange, getAsNamedDecl(Param),
284           Template, TemplateArgs) {}
285 
286 Sema::InstantiatingTemplate::InstantiatingTemplate(
287     Sema &SemaRef, SourceLocation PointOfInstantiation,
288     FunctionTemplateDecl *FunctionTemplate,
289     ArrayRef<TemplateArgument> TemplateArgs,
290     CodeSynthesisContext::SynthesisKind Kind,
291     sema::TemplateDeductionInfo &DeductionInfo, SourceRange InstantiationRange)
292     : InstantiatingTemplate(SemaRef, Kind, PointOfInstantiation,
293                             InstantiationRange, FunctionTemplate, nullptr,
294                             TemplateArgs, &DeductionInfo) {
295   assert(
296     Kind == CodeSynthesisContext::ExplicitTemplateArgumentSubstitution ||
297     Kind == CodeSynthesisContext::DeducedTemplateArgumentSubstitution);
298 }
299 
300 Sema::InstantiatingTemplate::InstantiatingTemplate(
301     Sema &SemaRef, SourceLocation PointOfInstantiation,
302     TemplateDecl *Template,
303     ArrayRef<TemplateArgument> TemplateArgs,
304     sema::TemplateDeductionInfo &DeductionInfo, SourceRange InstantiationRange)
305     : InstantiatingTemplate(
306           SemaRef,
307           CodeSynthesisContext::DeducedTemplateArgumentSubstitution,
308           PointOfInstantiation, InstantiationRange, Template, nullptr,
309           TemplateArgs, &DeductionInfo) {}
310 
311 Sema::InstantiatingTemplate::InstantiatingTemplate(
312     Sema &SemaRef, SourceLocation PointOfInstantiation,
313     ClassTemplatePartialSpecializationDecl *PartialSpec,
314     ArrayRef<TemplateArgument> TemplateArgs,
315     sema::TemplateDeductionInfo &DeductionInfo, SourceRange InstantiationRange)
316     : InstantiatingTemplate(
317           SemaRef,
318           CodeSynthesisContext::DeducedTemplateArgumentSubstitution,
319           PointOfInstantiation, InstantiationRange, PartialSpec, nullptr,
320           TemplateArgs, &DeductionInfo) {}
321 
322 Sema::InstantiatingTemplate::InstantiatingTemplate(
323     Sema &SemaRef, SourceLocation PointOfInstantiation,
324     VarTemplatePartialSpecializationDecl *PartialSpec,
325     ArrayRef<TemplateArgument> TemplateArgs,
326     sema::TemplateDeductionInfo &DeductionInfo, SourceRange InstantiationRange)
327     : InstantiatingTemplate(
328           SemaRef,
329           CodeSynthesisContext::DeducedTemplateArgumentSubstitution,
330           PointOfInstantiation, InstantiationRange, PartialSpec, nullptr,
331           TemplateArgs, &DeductionInfo) {}
332 
333 Sema::InstantiatingTemplate::InstantiatingTemplate(
334     Sema &SemaRef, SourceLocation PointOfInstantiation, ParmVarDecl *Param,
335     ArrayRef<TemplateArgument> TemplateArgs, SourceRange InstantiationRange)
336     : InstantiatingTemplate(
337           SemaRef,
338           CodeSynthesisContext::DefaultFunctionArgumentInstantiation,
339           PointOfInstantiation, InstantiationRange, Param, nullptr,
340           TemplateArgs) {}
341 
342 Sema::InstantiatingTemplate::InstantiatingTemplate(
343     Sema &SemaRef, SourceLocation PointOfInstantiation, NamedDecl *Template,
344     NonTypeTemplateParmDecl *Param, ArrayRef<TemplateArgument> TemplateArgs,
345     SourceRange InstantiationRange)
346     : InstantiatingTemplate(
347           SemaRef,
348           CodeSynthesisContext::PriorTemplateArgumentSubstitution,
349           PointOfInstantiation, InstantiationRange, Param, Template,
350           TemplateArgs) {}
351 
352 Sema::InstantiatingTemplate::InstantiatingTemplate(
353     Sema &SemaRef, SourceLocation PointOfInstantiation, NamedDecl *Template,
354     TemplateTemplateParmDecl *Param, ArrayRef<TemplateArgument> TemplateArgs,
355     SourceRange InstantiationRange)
356     : InstantiatingTemplate(
357           SemaRef,
358           CodeSynthesisContext::PriorTemplateArgumentSubstitution,
359           PointOfInstantiation, InstantiationRange, Param, Template,
360           TemplateArgs) {}
361 
362 Sema::InstantiatingTemplate::InstantiatingTemplate(
363     Sema &SemaRef, SourceLocation PointOfInstantiation, TemplateDecl *Template,
364     NamedDecl *Param, ArrayRef<TemplateArgument> TemplateArgs,
365     SourceRange InstantiationRange)
366     : InstantiatingTemplate(
367           SemaRef, CodeSynthesisContext::DefaultTemplateArgumentChecking,
368           PointOfInstantiation, InstantiationRange, Param, Template,
369           TemplateArgs) {}
370 
371 Sema::InstantiatingTemplate::InstantiatingTemplate(
372     Sema &SemaRef, SourceLocation PointOfInstantiation,
373     concepts::Requirement *Req, sema::TemplateDeductionInfo &DeductionInfo,
374     SourceRange InstantiationRange)
375     : InstantiatingTemplate(
376           SemaRef, CodeSynthesisContext::RequirementInstantiation,
377           PointOfInstantiation, InstantiationRange, /*Entity=*/nullptr,
378           /*Template=*/nullptr, /*TemplateArgs=*/None, &DeductionInfo) {}
379 
380 
381 Sema::InstantiatingTemplate::InstantiatingTemplate(
382     Sema &SemaRef, SourceLocation PointOfInstantiation,
383     concepts::NestedRequirement *Req, ConstraintsCheck,
384     SourceRange InstantiationRange)
385     : InstantiatingTemplate(
386           SemaRef, CodeSynthesisContext::NestedRequirementConstraintsCheck,
387           PointOfInstantiation, InstantiationRange, /*Entity=*/nullptr,
388           /*Template=*/nullptr, /*TemplateArgs=*/None) {}
389 
390 
391 Sema::InstantiatingTemplate::InstantiatingTemplate(
392     Sema &SemaRef, SourceLocation PointOfInstantiation,
393     ConstraintsCheck, NamedDecl *Template,
394     ArrayRef<TemplateArgument> TemplateArgs, SourceRange InstantiationRange)
395     : InstantiatingTemplate(
396           SemaRef, CodeSynthesisContext::ConstraintsCheck,
397           PointOfInstantiation, InstantiationRange, Template, nullptr,
398           TemplateArgs) {}
399 
400 Sema::InstantiatingTemplate::InstantiatingTemplate(
401     Sema &SemaRef, SourceLocation PointOfInstantiation,
402     ConstraintSubstitution, NamedDecl *Template,
403     sema::TemplateDeductionInfo &DeductionInfo, SourceRange InstantiationRange)
404     : InstantiatingTemplate(
405           SemaRef, CodeSynthesisContext::ConstraintSubstitution,
406           PointOfInstantiation, InstantiationRange, Template, nullptr,
407           {}, &DeductionInfo) {}
408 
409 Sema::InstantiatingTemplate::InstantiatingTemplate(
410     Sema &SemaRef, SourceLocation PointOfInstantiation,
411     ConstraintNormalization, NamedDecl *Template,
412     SourceRange InstantiationRange)
413     : InstantiatingTemplate(
414           SemaRef, CodeSynthesisContext::ConstraintNormalization,
415           PointOfInstantiation, InstantiationRange, Template) {}
416 
417 Sema::InstantiatingTemplate::InstantiatingTemplate(
418     Sema &SemaRef, SourceLocation PointOfInstantiation,
419     ParameterMappingSubstitution, NamedDecl *Template,
420     SourceRange InstantiationRange)
421     : InstantiatingTemplate(
422           SemaRef, CodeSynthesisContext::ParameterMappingSubstitution,
423           PointOfInstantiation, InstantiationRange, Template) {}
424 
425 void Sema::pushCodeSynthesisContext(CodeSynthesisContext Ctx) {
426   Ctx.SavedInNonInstantiationSFINAEContext = InNonInstantiationSFINAEContext;
427   InNonInstantiationSFINAEContext = false;
428 
429   CodeSynthesisContexts.push_back(Ctx);
430 
431   if (!Ctx.isInstantiationRecord())
432     ++NonInstantiationEntries;
433 
434   // Check to see if we're low on stack space. We can't do anything about this
435   // from here, but we can at least warn the user.
436   if (isStackNearlyExhausted())
437     warnStackExhausted(Ctx.PointOfInstantiation);
438 }
439 
440 void Sema::popCodeSynthesisContext() {
441   auto &Active = CodeSynthesisContexts.back();
442   if (!Active.isInstantiationRecord()) {
443     assert(NonInstantiationEntries > 0);
444     --NonInstantiationEntries;
445   }
446 
447   InNonInstantiationSFINAEContext = Active.SavedInNonInstantiationSFINAEContext;
448 
449   // Name lookup no longer looks in this template's defining module.
450   assert(CodeSynthesisContexts.size() >=
451              CodeSynthesisContextLookupModules.size() &&
452          "forgot to remove a lookup module for a template instantiation");
453   if (CodeSynthesisContexts.size() ==
454       CodeSynthesisContextLookupModules.size()) {
455     if (Module *M = CodeSynthesisContextLookupModules.back())
456       LookupModulesCache.erase(M);
457     CodeSynthesisContextLookupModules.pop_back();
458   }
459 
460   // If we've left the code synthesis context for the current context stack,
461   // stop remembering that we've emitted that stack.
462   if (CodeSynthesisContexts.size() ==
463       LastEmittedCodeSynthesisContextDepth)
464     LastEmittedCodeSynthesisContextDepth = 0;
465 
466   CodeSynthesisContexts.pop_back();
467 }
468 
469 void Sema::InstantiatingTemplate::Clear() {
470   if (!Invalid) {
471     if (!AlreadyInstantiating) {
472       auto &Active = SemaRef.CodeSynthesisContexts.back();
473       if (Active.Entity)
474         SemaRef.InstantiatingSpecializations.erase(
475             std::make_pair(Active.Entity, Active.Kind));
476     }
477 
478     atTemplateEnd(SemaRef.TemplateInstCallbacks, SemaRef,
479                   SemaRef.CodeSynthesisContexts.back());
480 
481     SemaRef.popCodeSynthesisContext();
482     Invalid = true;
483   }
484 }
485 
486 bool Sema::InstantiatingTemplate::CheckInstantiationDepth(
487                                         SourceLocation PointOfInstantiation,
488                                            SourceRange InstantiationRange) {
489   assert(SemaRef.NonInstantiationEntries <=
490          SemaRef.CodeSynthesisContexts.size());
491   if ((SemaRef.CodeSynthesisContexts.size() -
492           SemaRef.NonInstantiationEntries)
493         <= SemaRef.getLangOpts().InstantiationDepth)
494     return false;
495 
496   SemaRef.Diag(PointOfInstantiation,
497                diag::err_template_recursion_depth_exceeded)
498     << SemaRef.getLangOpts().InstantiationDepth
499     << InstantiationRange;
500   SemaRef.Diag(PointOfInstantiation, diag::note_template_recursion_depth)
501     << SemaRef.getLangOpts().InstantiationDepth;
502   return true;
503 }
504 
505 /// Prints the current instantiation stack through a series of
506 /// notes.
507 void Sema::PrintInstantiationStack() {
508   // Determine which template instantiations to skip, if any.
509   unsigned SkipStart = CodeSynthesisContexts.size(), SkipEnd = SkipStart;
510   unsigned Limit = Diags.getTemplateBacktraceLimit();
511   if (Limit && Limit < CodeSynthesisContexts.size()) {
512     SkipStart = Limit / 2 + Limit % 2;
513     SkipEnd = CodeSynthesisContexts.size() - Limit / 2;
514   }
515 
516   // FIXME: In all of these cases, we need to show the template arguments
517   unsigned InstantiationIdx = 0;
518   for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator
519          Active = CodeSynthesisContexts.rbegin(),
520          ActiveEnd = CodeSynthesisContexts.rend();
521        Active != ActiveEnd;
522        ++Active, ++InstantiationIdx) {
523     // Skip this instantiation?
524     if (InstantiationIdx >= SkipStart && InstantiationIdx < SkipEnd) {
525       if (InstantiationIdx == SkipStart) {
526         // Note that we're skipping instantiations.
527         Diags.Report(Active->PointOfInstantiation,
528                      diag::note_instantiation_contexts_suppressed)
529           << unsigned(CodeSynthesisContexts.size() - Limit);
530       }
531       continue;
532     }
533 
534     switch (Active->Kind) {
535     case CodeSynthesisContext::TemplateInstantiation: {
536       Decl *D = Active->Entity;
537       if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {
538         unsigned DiagID = diag::note_template_member_class_here;
539         if (isa<ClassTemplateSpecializationDecl>(Record))
540           DiagID = diag::note_template_class_instantiation_here;
541         Diags.Report(Active->PointOfInstantiation, DiagID)
542           << Record << Active->InstantiationRange;
543       } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
544         unsigned DiagID;
545         if (Function->getPrimaryTemplate())
546           DiagID = diag::note_function_template_spec_here;
547         else
548           DiagID = diag::note_template_member_function_here;
549         Diags.Report(Active->PointOfInstantiation, DiagID)
550           << Function
551           << Active->InstantiationRange;
552       } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
553         Diags.Report(Active->PointOfInstantiation,
554                      VD->isStaticDataMember()?
555                        diag::note_template_static_data_member_def_here
556                      : diag::note_template_variable_def_here)
557           << VD
558           << Active->InstantiationRange;
559       } else if (EnumDecl *ED = dyn_cast<EnumDecl>(D)) {
560         Diags.Report(Active->PointOfInstantiation,
561                      diag::note_template_enum_def_here)
562           << ED
563           << Active->InstantiationRange;
564       } else if (FieldDecl *FD = dyn_cast<FieldDecl>(D)) {
565         Diags.Report(Active->PointOfInstantiation,
566                      diag::note_template_nsdmi_here)
567             << FD << Active->InstantiationRange;
568       } else {
569         Diags.Report(Active->PointOfInstantiation,
570                      diag::note_template_type_alias_instantiation_here)
571           << cast<TypeAliasTemplateDecl>(D)
572           << Active->InstantiationRange;
573       }
574       break;
575     }
576 
577     case CodeSynthesisContext::DefaultTemplateArgumentInstantiation: {
578       TemplateDecl *Template = cast<TemplateDecl>(Active->Template);
579       SmallVector<char, 128> TemplateArgsStr;
580       llvm::raw_svector_ostream OS(TemplateArgsStr);
581       Template->printName(OS);
582       printTemplateArgumentList(OS, Active->template_arguments(),
583                                 getPrintingPolicy());
584       Diags.Report(Active->PointOfInstantiation,
585                    diag::note_default_arg_instantiation_here)
586         << OS.str()
587         << Active->InstantiationRange;
588       break;
589     }
590 
591     case CodeSynthesisContext::ExplicitTemplateArgumentSubstitution: {
592       FunctionTemplateDecl *FnTmpl = cast<FunctionTemplateDecl>(Active->Entity);
593       Diags.Report(Active->PointOfInstantiation,
594                    diag::note_explicit_template_arg_substitution_here)
595         << FnTmpl
596         << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(),
597                                            Active->TemplateArgs,
598                                            Active->NumTemplateArgs)
599         << Active->InstantiationRange;
600       break;
601     }
602 
603     case CodeSynthesisContext::DeducedTemplateArgumentSubstitution: {
604       if (FunctionTemplateDecl *FnTmpl =
605               dyn_cast<FunctionTemplateDecl>(Active->Entity)) {
606         Diags.Report(Active->PointOfInstantiation,
607                      diag::note_function_template_deduction_instantiation_here)
608           << FnTmpl
609           << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(),
610                                              Active->TemplateArgs,
611                                              Active->NumTemplateArgs)
612           << Active->InstantiationRange;
613       } else {
614         bool IsVar = isa<VarTemplateDecl>(Active->Entity) ||
615                      isa<VarTemplateSpecializationDecl>(Active->Entity);
616         bool IsTemplate = false;
617         TemplateParameterList *Params;
618         if (auto *D = dyn_cast<TemplateDecl>(Active->Entity)) {
619           IsTemplate = true;
620           Params = D->getTemplateParameters();
621         } else if (auto *D = dyn_cast<ClassTemplatePartialSpecializationDecl>(
622                        Active->Entity)) {
623           Params = D->getTemplateParameters();
624         } else if (auto *D = dyn_cast<VarTemplatePartialSpecializationDecl>(
625                        Active->Entity)) {
626           Params = D->getTemplateParameters();
627         } else {
628           llvm_unreachable("unexpected template kind");
629         }
630 
631         Diags.Report(Active->PointOfInstantiation,
632                      diag::note_deduced_template_arg_substitution_here)
633           << IsVar << IsTemplate << cast<NamedDecl>(Active->Entity)
634           << getTemplateArgumentBindingsText(Params, Active->TemplateArgs,
635                                              Active->NumTemplateArgs)
636           << Active->InstantiationRange;
637       }
638       break;
639     }
640 
641     case CodeSynthesisContext::DefaultFunctionArgumentInstantiation: {
642       ParmVarDecl *Param = cast<ParmVarDecl>(Active->Entity);
643       FunctionDecl *FD = cast<FunctionDecl>(Param->getDeclContext());
644 
645       SmallVector<char, 128> TemplateArgsStr;
646       llvm::raw_svector_ostream OS(TemplateArgsStr);
647       FD->printName(OS);
648       printTemplateArgumentList(OS, Active->template_arguments(),
649                                 getPrintingPolicy());
650       Diags.Report(Active->PointOfInstantiation,
651                    diag::note_default_function_arg_instantiation_here)
652         << OS.str()
653         << Active->InstantiationRange;
654       break;
655     }
656 
657     case CodeSynthesisContext::PriorTemplateArgumentSubstitution: {
658       NamedDecl *Parm = cast<NamedDecl>(Active->Entity);
659       std::string Name;
660       if (!Parm->getName().empty())
661         Name = std::string(" '") + Parm->getName().str() + "'";
662 
663       TemplateParameterList *TemplateParams = nullptr;
664       if (TemplateDecl *Template = dyn_cast<TemplateDecl>(Active->Template))
665         TemplateParams = Template->getTemplateParameters();
666       else
667         TemplateParams =
668           cast<ClassTemplatePartialSpecializationDecl>(Active->Template)
669                                                       ->getTemplateParameters();
670       Diags.Report(Active->PointOfInstantiation,
671                    diag::note_prior_template_arg_substitution)
672         << isa<TemplateTemplateParmDecl>(Parm)
673         << Name
674         << getTemplateArgumentBindingsText(TemplateParams,
675                                            Active->TemplateArgs,
676                                            Active->NumTemplateArgs)
677         << Active->InstantiationRange;
678       break;
679     }
680 
681     case CodeSynthesisContext::DefaultTemplateArgumentChecking: {
682       TemplateParameterList *TemplateParams = nullptr;
683       if (TemplateDecl *Template = dyn_cast<TemplateDecl>(Active->Template))
684         TemplateParams = Template->getTemplateParameters();
685       else
686         TemplateParams =
687           cast<ClassTemplatePartialSpecializationDecl>(Active->Template)
688                                                       ->getTemplateParameters();
689 
690       Diags.Report(Active->PointOfInstantiation,
691                    diag::note_template_default_arg_checking)
692         << getTemplateArgumentBindingsText(TemplateParams,
693                                            Active->TemplateArgs,
694                                            Active->NumTemplateArgs)
695         << Active->InstantiationRange;
696       break;
697     }
698 
699     case CodeSynthesisContext::ExceptionSpecEvaluation:
700       Diags.Report(Active->PointOfInstantiation,
701                    diag::note_evaluating_exception_spec_here)
702           << cast<FunctionDecl>(Active->Entity);
703       break;
704 
705     case CodeSynthesisContext::ExceptionSpecInstantiation:
706       Diags.Report(Active->PointOfInstantiation,
707                    diag::note_template_exception_spec_instantiation_here)
708         << cast<FunctionDecl>(Active->Entity)
709         << Active->InstantiationRange;
710       break;
711 
712     case CodeSynthesisContext::RequirementInstantiation:
713       Diags.Report(Active->PointOfInstantiation,
714                    diag::note_template_requirement_instantiation_here)
715         << Active->InstantiationRange;
716       break;
717 
718     case CodeSynthesisContext::NestedRequirementConstraintsCheck:
719       Diags.Report(Active->PointOfInstantiation,
720                    diag::note_nested_requirement_here)
721         << Active->InstantiationRange;
722       break;
723 
724     case CodeSynthesisContext::DeclaringSpecialMember:
725       Diags.Report(Active->PointOfInstantiation,
726                    diag::note_in_declaration_of_implicit_special_member)
727         << cast<CXXRecordDecl>(Active->Entity) << Active->SpecialMember;
728       break;
729 
730     case CodeSynthesisContext::DeclaringImplicitEqualityComparison:
731       Diags.Report(Active->Entity->getLocation(),
732                    diag::note_in_declaration_of_implicit_equality_comparison);
733       break;
734 
735     case CodeSynthesisContext::DefiningSynthesizedFunction: {
736       // FIXME: For synthesized functions that are not defaulted,
737       // produce a note.
738       auto *FD = dyn_cast<FunctionDecl>(Active->Entity);
739       DefaultedFunctionKind DFK =
740           FD ? getDefaultedFunctionKind(FD) : DefaultedFunctionKind();
741       if (DFK.isSpecialMember()) {
742         auto *MD = cast<CXXMethodDecl>(FD);
743         Diags.Report(Active->PointOfInstantiation,
744                      diag::note_member_synthesized_at)
745             << MD->isExplicitlyDefaulted() << DFK.asSpecialMember()
746             << Context.getTagDeclType(MD->getParent());
747       } else if (DFK.isComparison()) {
748         Diags.Report(Active->PointOfInstantiation,
749                      diag::note_comparison_synthesized_at)
750             << (int)DFK.asComparison()
751             << Context.getTagDeclType(
752                    cast<CXXRecordDecl>(FD->getLexicalDeclContext()));
753       }
754       break;
755     }
756 
757     case CodeSynthesisContext::RewritingOperatorAsSpaceship:
758       Diags.Report(Active->Entity->getLocation(),
759                    diag::note_rewriting_operator_as_spaceship);
760       break;
761 
762     case CodeSynthesisContext::Memoization:
763       break;
764 
765     case CodeSynthesisContext::ConstraintsCheck: {
766       unsigned DiagID = 0;
767       if (!Active->Entity) {
768         Diags.Report(Active->PointOfInstantiation,
769                      diag::note_nested_requirement_here)
770           << Active->InstantiationRange;
771         break;
772       }
773       if (isa<ConceptDecl>(Active->Entity))
774         DiagID = diag::note_concept_specialization_here;
775       else if (isa<TemplateDecl>(Active->Entity))
776         DiagID = diag::note_checking_constraints_for_template_id_here;
777       else if (isa<VarTemplatePartialSpecializationDecl>(Active->Entity))
778         DiagID = diag::note_checking_constraints_for_var_spec_id_here;
779       else if (isa<ClassTemplatePartialSpecializationDecl>(Active->Entity))
780         DiagID = diag::note_checking_constraints_for_class_spec_id_here;
781       else {
782         assert(isa<FunctionDecl>(Active->Entity));
783         DiagID = diag::note_checking_constraints_for_function_here;
784       }
785       SmallVector<char, 128> TemplateArgsStr;
786       llvm::raw_svector_ostream OS(TemplateArgsStr);
787       cast<NamedDecl>(Active->Entity)->printName(OS);
788       if (!isa<FunctionDecl>(Active->Entity))
789         printTemplateArgumentList(OS, Active->template_arguments(),
790                                   getPrintingPolicy());
791       Diags.Report(Active->PointOfInstantiation, DiagID) << OS.str()
792         << Active->InstantiationRange;
793       break;
794     }
795     case CodeSynthesisContext::ConstraintSubstitution:
796       Diags.Report(Active->PointOfInstantiation,
797                    diag::note_constraint_substitution_here)
798           << Active->InstantiationRange;
799       break;
800     case CodeSynthesisContext::ConstraintNormalization:
801       Diags.Report(Active->PointOfInstantiation,
802                    diag::note_constraint_normalization_here)
803           << cast<NamedDecl>(Active->Entity)->getName()
804           << Active->InstantiationRange;
805       break;
806     case CodeSynthesisContext::ParameterMappingSubstitution:
807       Diags.Report(Active->PointOfInstantiation,
808                    diag::note_parameter_mapping_substitution_here)
809           << Active->InstantiationRange;
810       break;
811     }
812   }
813 }
814 
815 Optional<TemplateDeductionInfo *> Sema::isSFINAEContext() const {
816   if (InNonInstantiationSFINAEContext)
817     return Optional<TemplateDeductionInfo *>(nullptr);
818 
819   for (SmallVectorImpl<CodeSynthesisContext>::const_reverse_iterator
820          Active = CodeSynthesisContexts.rbegin(),
821          ActiveEnd = CodeSynthesisContexts.rend();
822        Active != ActiveEnd;
823        ++Active)
824   {
825     switch (Active->Kind) {
826     case CodeSynthesisContext::TemplateInstantiation:
827       // An instantiation of an alias template may or may not be a SFINAE
828       // context, depending on what else is on the stack.
829       if (isa<TypeAliasTemplateDecl>(Active->Entity))
830         break;
831       LLVM_FALLTHROUGH;
832     case CodeSynthesisContext::DefaultFunctionArgumentInstantiation:
833     case CodeSynthesisContext::ExceptionSpecInstantiation:
834     case CodeSynthesisContext::ConstraintsCheck:
835     case CodeSynthesisContext::ParameterMappingSubstitution:
836     case CodeSynthesisContext::ConstraintNormalization:
837     case CodeSynthesisContext::NestedRequirementConstraintsCheck:
838       // This is a template instantiation, so there is no SFINAE.
839       return None;
840 
841     case CodeSynthesisContext::DefaultTemplateArgumentInstantiation:
842     case CodeSynthesisContext::PriorTemplateArgumentSubstitution:
843     case CodeSynthesisContext::DefaultTemplateArgumentChecking:
844       // A default template argument instantiation and substitution into
845       // template parameters with arguments for prior parameters may or may
846       // not be a SFINAE context; look further up the stack.
847       break;
848 
849     case CodeSynthesisContext::ExplicitTemplateArgumentSubstitution:
850     case CodeSynthesisContext::DeducedTemplateArgumentSubstitution:
851     case CodeSynthesisContext::ConstraintSubstitution:
852     case CodeSynthesisContext::RequirementInstantiation:
853       // We're either substituting explicitly-specified template arguments,
854       // deduced template arguments, a constraint expression or a requirement
855       // in a requires expression, so SFINAE applies.
856       assert(Active->DeductionInfo && "Missing deduction info pointer");
857       return Active->DeductionInfo;
858 
859     case CodeSynthesisContext::DeclaringSpecialMember:
860     case CodeSynthesisContext::DeclaringImplicitEqualityComparison:
861     case CodeSynthesisContext::DefiningSynthesizedFunction:
862     case CodeSynthesisContext::RewritingOperatorAsSpaceship:
863       // This happens in a context unrelated to template instantiation, so
864       // there is no SFINAE.
865       return None;
866 
867     case CodeSynthesisContext::ExceptionSpecEvaluation:
868       // FIXME: This should not be treated as a SFINAE context, because
869       // we will cache an incorrect exception specification. However, clang
870       // bootstrap relies this! See PR31692.
871       break;
872 
873     case CodeSynthesisContext::Memoization:
874       break;
875     }
876 
877     // The inner context was transparent for SFINAE. If it occurred within a
878     // non-instantiation SFINAE context, then SFINAE applies.
879     if (Active->SavedInNonInstantiationSFINAEContext)
880       return Optional<TemplateDeductionInfo *>(nullptr);
881   }
882 
883   return None;
884 }
885 
886 //===----------------------------------------------------------------------===/
887 // Template Instantiation for Types
888 //===----------------------------------------------------------------------===/
889 namespace {
890   class TemplateInstantiator : public TreeTransform<TemplateInstantiator> {
891     const MultiLevelTemplateArgumentList &TemplateArgs;
892     SourceLocation Loc;
893     DeclarationName Entity;
894 
895   public:
896     typedef TreeTransform<TemplateInstantiator> inherited;
897 
898     TemplateInstantiator(Sema &SemaRef,
899                          const MultiLevelTemplateArgumentList &TemplateArgs,
900                          SourceLocation Loc,
901                          DeclarationName Entity)
902       : inherited(SemaRef), TemplateArgs(TemplateArgs), Loc(Loc),
903         Entity(Entity) { }
904 
905     /// Determine whether the given type \p T has already been
906     /// transformed.
907     ///
908     /// For the purposes of template instantiation, a type has already been
909     /// transformed if it is NULL or if it is not dependent.
910     bool AlreadyTransformed(QualType T);
911 
912     /// Returns the location of the entity being instantiated, if known.
913     SourceLocation getBaseLocation() { return Loc; }
914 
915     /// Returns the name of the entity being instantiated, if any.
916     DeclarationName getBaseEntity() { return Entity; }
917 
918     /// Sets the "base" location and entity when that
919     /// information is known based on another transformation.
920     void setBase(SourceLocation Loc, DeclarationName Entity) {
921       this->Loc = Loc;
922       this->Entity = Entity;
923     }
924 
925     bool TryExpandParameterPacks(SourceLocation EllipsisLoc,
926                                  SourceRange PatternRange,
927                                  ArrayRef<UnexpandedParameterPack> Unexpanded,
928                                  bool &ShouldExpand, bool &RetainExpansion,
929                                  Optional<unsigned> &NumExpansions) {
930       return getSema().CheckParameterPacksForExpansion(EllipsisLoc,
931                                                        PatternRange, Unexpanded,
932                                                        TemplateArgs,
933                                                        ShouldExpand,
934                                                        RetainExpansion,
935                                                        NumExpansions);
936     }
937 
938     void ExpandingFunctionParameterPack(ParmVarDecl *Pack) {
939       SemaRef.CurrentInstantiationScope->MakeInstantiatedLocalArgPack(Pack);
940     }
941 
942     TemplateArgument ForgetPartiallySubstitutedPack() {
943       TemplateArgument Result;
944       if (NamedDecl *PartialPack
945             = SemaRef.CurrentInstantiationScope->getPartiallySubstitutedPack()){
946         MultiLevelTemplateArgumentList &TemplateArgs
947           = const_cast<MultiLevelTemplateArgumentList &>(this->TemplateArgs);
948         unsigned Depth, Index;
949         std::tie(Depth, Index) = getDepthAndIndex(PartialPack);
950         if (TemplateArgs.hasTemplateArgument(Depth, Index)) {
951           Result = TemplateArgs(Depth, Index);
952           TemplateArgs.setArgument(Depth, Index, TemplateArgument());
953         }
954       }
955 
956       return Result;
957     }
958 
959     void RememberPartiallySubstitutedPack(TemplateArgument Arg) {
960       if (Arg.isNull())
961         return;
962 
963       if (NamedDecl *PartialPack
964             = SemaRef.CurrentInstantiationScope->getPartiallySubstitutedPack()){
965         MultiLevelTemplateArgumentList &TemplateArgs
966         = const_cast<MultiLevelTemplateArgumentList &>(this->TemplateArgs);
967         unsigned Depth, Index;
968         std::tie(Depth, Index) = getDepthAndIndex(PartialPack);
969         TemplateArgs.setArgument(Depth, Index, Arg);
970       }
971     }
972 
973     /// Transform the given declaration by instantiating a reference to
974     /// this declaration.
975     Decl *TransformDecl(SourceLocation Loc, Decl *D);
976 
977     void transformAttrs(Decl *Old, Decl *New) {
978       SemaRef.InstantiateAttrs(TemplateArgs, Old, New);
979     }
980 
981     void transformedLocalDecl(Decl *Old, ArrayRef<Decl *> NewDecls) {
982       if (Old->isParameterPack()) {
983         SemaRef.CurrentInstantiationScope->MakeInstantiatedLocalArgPack(Old);
984         for (auto *New : NewDecls)
985           SemaRef.CurrentInstantiationScope->InstantiatedLocalPackArg(
986               Old, cast<VarDecl>(New));
987         return;
988       }
989 
990       assert(NewDecls.size() == 1 &&
991              "should only have multiple expansions for a pack");
992       Decl *New = NewDecls.front();
993 
994       // If we've instantiated the call operator of a lambda or the call
995       // operator template of a generic lambda, update the "instantiation of"
996       // information.
997       auto *NewMD = dyn_cast<CXXMethodDecl>(New);
998       if (NewMD && isLambdaCallOperator(NewMD)) {
999         auto *OldMD = dyn_cast<CXXMethodDecl>(Old);
1000         if (auto *NewTD = NewMD->getDescribedFunctionTemplate())
1001           NewTD->setInstantiatedFromMemberTemplate(
1002               OldMD->getDescribedFunctionTemplate());
1003         else
1004           NewMD->setInstantiationOfMemberFunction(OldMD,
1005                                                   TSK_ImplicitInstantiation);
1006       }
1007 
1008       SemaRef.CurrentInstantiationScope->InstantiatedLocal(Old, New);
1009 
1010       // We recreated a local declaration, but not by instantiating it. There
1011       // may be pending dependent diagnostics to produce.
1012       if (auto *DC = dyn_cast<DeclContext>(Old))
1013         SemaRef.PerformDependentDiagnostics(DC, TemplateArgs);
1014     }
1015 
1016     /// Transform the definition of the given declaration by
1017     /// instantiating it.
1018     Decl *TransformDefinition(SourceLocation Loc, Decl *D);
1019 
1020     /// Transform the first qualifier within a scope by instantiating the
1021     /// declaration.
1022     NamedDecl *TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc);
1023 
1024     /// Rebuild the exception declaration and register the declaration
1025     /// as an instantiated local.
1026     VarDecl *RebuildExceptionDecl(VarDecl *ExceptionDecl,
1027                                   TypeSourceInfo *Declarator,
1028                                   SourceLocation StartLoc,
1029                                   SourceLocation NameLoc,
1030                                   IdentifierInfo *Name);
1031 
1032     /// Rebuild the Objective-C exception declaration and register the
1033     /// declaration as an instantiated local.
1034     VarDecl *RebuildObjCExceptionDecl(VarDecl *ExceptionDecl,
1035                                       TypeSourceInfo *TSInfo, QualType T);
1036 
1037     /// Check for tag mismatches when instantiating an
1038     /// elaborated type.
1039     QualType RebuildElaboratedType(SourceLocation KeywordLoc,
1040                                    ElaboratedTypeKeyword Keyword,
1041                                    NestedNameSpecifierLoc QualifierLoc,
1042                                    QualType T);
1043 
1044     TemplateName
1045     TransformTemplateName(CXXScopeSpec &SS, TemplateName Name,
1046                           SourceLocation NameLoc,
1047                           QualType ObjectType = QualType(),
1048                           NamedDecl *FirstQualifierInScope = nullptr,
1049                           bool AllowInjectedClassName = false);
1050 
1051     const LoopHintAttr *TransformLoopHintAttr(const LoopHintAttr *LH);
1052 
1053     ExprResult TransformPredefinedExpr(PredefinedExpr *E);
1054     ExprResult TransformDeclRefExpr(DeclRefExpr *E);
1055     ExprResult TransformCXXDefaultArgExpr(CXXDefaultArgExpr *E);
1056 
1057     ExprResult TransformTemplateParmRefExpr(DeclRefExpr *E,
1058                                             NonTypeTemplateParmDecl *D);
1059     ExprResult TransformSubstNonTypeTemplateParmPackExpr(
1060                                            SubstNonTypeTemplateParmPackExpr *E);
1061     ExprResult TransformSubstNonTypeTemplateParmExpr(
1062                                            SubstNonTypeTemplateParmExpr *E);
1063 
1064     /// Rebuild a DeclRefExpr for a VarDecl reference.
1065     ExprResult RebuildVarDeclRefExpr(VarDecl *PD, SourceLocation Loc);
1066 
1067     /// Transform a reference to a function or init-capture parameter pack.
1068     ExprResult TransformFunctionParmPackRefExpr(DeclRefExpr *E, VarDecl *PD);
1069 
1070     /// Transform a FunctionParmPackExpr which was built when we couldn't
1071     /// expand a function parameter pack reference which refers to an expanded
1072     /// pack.
1073     ExprResult TransformFunctionParmPackExpr(FunctionParmPackExpr *E);
1074 
1075     QualType TransformFunctionProtoType(TypeLocBuilder &TLB,
1076                                         FunctionProtoTypeLoc TL) {
1077       // Call the base version; it will forward to our overridden version below.
1078       return inherited::TransformFunctionProtoType(TLB, TL);
1079     }
1080 
1081     template<typename Fn>
1082     QualType TransformFunctionProtoType(TypeLocBuilder &TLB,
1083                                         FunctionProtoTypeLoc TL,
1084                                         CXXRecordDecl *ThisContext,
1085                                         Qualifiers ThisTypeQuals,
1086                                         Fn TransformExceptionSpec);
1087 
1088     ParmVarDecl *TransformFunctionTypeParam(ParmVarDecl *OldParm,
1089                                             int indexAdjustment,
1090                                             Optional<unsigned> NumExpansions,
1091                                             bool ExpectParameterPack);
1092 
1093     /// Transforms a template type parameter type by performing
1094     /// substitution of the corresponding template type argument.
1095     QualType TransformTemplateTypeParmType(TypeLocBuilder &TLB,
1096                                            TemplateTypeParmTypeLoc TL);
1097 
1098     /// Transforms an already-substituted template type parameter pack
1099     /// into either itself (if we aren't substituting into its pack expansion)
1100     /// or the appropriate substituted argument.
1101     QualType TransformSubstTemplateTypeParmPackType(TypeLocBuilder &TLB,
1102                                            SubstTemplateTypeParmPackTypeLoc TL);
1103 
1104     ExprResult TransformLambdaExpr(LambdaExpr *E) {
1105       LocalInstantiationScope Scope(SemaRef, /*CombineWithOuterScope=*/true);
1106       return TreeTransform<TemplateInstantiator>::TransformLambdaExpr(E);
1107     }
1108 
1109     ExprResult TransformRequiresExpr(RequiresExpr *E) {
1110       LocalInstantiationScope Scope(SemaRef, /*CombineWithOuterScope=*/true);
1111       return TreeTransform<TemplateInstantiator>::TransformRequiresExpr(E);
1112     }
1113 
1114     bool TransformRequiresExprRequirements(
1115         ArrayRef<concepts::Requirement *> Reqs,
1116         SmallVectorImpl<concepts::Requirement *> &Transformed) {
1117       bool SatisfactionDetermined = false;
1118       for (concepts::Requirement *Req : Reqs) {
1119         concepts::Requirement *TransReq = nullptr;
1120         if (!SatisfactionDetermined) {
1121           if (auto *TypeReq = dyn_cast<concepts::TypeRequirement>(Req))
1122             TransReq = TransformTypeRequirement(TypeReq);
1123           else if (auto *ExprReq = dyn_cast<concepts::ExprRequirement>(Req))
1124             TransReq = TransformExprRequirement(ExprReq);
1125           else
1126             TransReq = TransformNestedRequirement(
1127                 cast<concepts::NestedRequirement>(Req));
1128           if (!TransReq)
1129             return true;
1130           if (!TransReq->isDependent() && !TransReq->isSatisfied())
1131             // [expr.prim.req]p6
1132             //   [...]  The substitution and semantic constraint checking
1133             //   proceeds in lexical order and stops when a condition that
1134             //   determines the result of the requires-expression is
1135             //   encountered. [..]
1136             SatisfactionDetermined = true;
1137         } else
1138           TransReq = Req;
1139         Transformed.push_back(TransReq);
1140       }
1141       return false;
1142     }
1143 
1144     TemplateParameterList *TransformTemplateParameterList(
1145                               TemplateParameterList *OrigTPL)  {
1146       if (!OrigTPL || !OrigTPL->size()) return OrigTPL;
1147 
1148       DeclContext *Owner = OrigTPL->getParam(0)->getDeclContext();
1149       TemplateDeclInstantiator  DeclInstantiator(getSema(),
1150                         /* DeclContext *Owner */ Owner, TemplateArgs);
1151       return DeclInstantiator.SubstTemplateParams(OrigTPL);
1152     }
1153 
1154     concepts::TypeRequirement *
1155     TransformTypeRequirement(concepts::TypeRequirement *Req);
1156     concepts::ExprRequirement *
1157     TransformExprRequirement(concepts::ExprRequirement *Req);
1158     concepts::NestedRequirement *
1159     TransformNestedRequirement(concepts::NestedRequirement *Req);
1160 
1161   private:
1162     ExprResult transformNonTypeTemplateParmRef(NonTypeTemplateParmDecl *parm,
1163                                                SourceLocation loc,
1164                                                TemplateArgument arg);
1165   };
1166 }
1167 
1168 bool TemplateInstantiator::AlreadyTransformed(QualType T) {
1169   if (T.isNull())
1170     return true;
1171 
1172   if (T->isInstantiationDependentType() || T->isVariablyModifiedType())
1173     return false;
1174 
1175   getSema().MarkDeclarationsReferencedInType(Loc, T);
1176   return true;
1177 }
1178 
1179 static TemplateArgument
1180 getPackSubstitutedTemplateArgument(Sema &S, TemplateArgument Arg) {
1181   assert(S.ArgumentPackSubstitutionIndex >= 0);
1182   assert(S.ArgumentPackSubstitutionIndex < (int)Arg.pack_size());
1183   Arg = Arg.pack_begin()[S.ArgumentPackSubstitutionIndex];
1184   if (Arg.isPackExpansion())
1185     Arg = Arg.getPackExpansionPattern();
1186   return Arg;
1187 }
1188 
1189 Decl *TemplateInstantiator::TransformDecl(SourceLocation Loc, Decl *D) {
1190   if (!D)
1191     return nullptr;
1192 
1193   if (TemplateTemplateParmDecl *TTP = dyn_cast<TemplateTemplateParmDecl>(D)) {
1194     if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
1195       // If the corresponding template argument is NULL or non-existent, it's
1196       // because we are performing instantiation from explicitly-specified
1197       // template arguments in a function template, but there were some
1198       // arguments left unspecified.
1199       if (!TemplateArgs.hasTemplateArgument(TTP->getDepth(),
1200                                             TTP->getPosition()))
1201         return D;
1202 
1203       TemplateArgument Arg = TemplateArgs(TTP->getDepth(), TTP->getPosition());
1204 
1205       if (TTP->isParameterPack()) {
1206         assert(Arg.getKind() == TemplateArgument::Pack &&
1207                "Missing argument pack");
1208         Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1209       }
1210 
1211       TemplateName Template = Arg.getAsTemplate().getNameToSubstitute();
1212       assert(!Template.isNull() && Template.getAsTemplateDecl() &&
1213              "Wrong kind of template template argument");
1214       return Template.getAsTemplateDecl();
1215     }
1216 
1217     // Fall through to find the instantiated declaration for this template
1218     // template parameter.
1219   }
1220 
1221   return SemaRef.FindInstantiatedDecl(Loc, cast<NamedDecl>(D), TemplateArgs);
1222 }
1223 
1224 Decl *TemplateInstantiator::TransformDefinition(SourceLocation Loc, Decl *D) {
1225   Decl *Inst = getSema().SubstDecl(D, getSema().CurContext, TemplateArgs);
1226   if (!Inst)
1227     return nullptr;
1228 
1229   getSema().CurrentInstantiationScope->InstantiatedLocal(D, Inst);
1230   return Inst;
1231 }
1232 
1233 NamedDecl *
1234 TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D,
1235                                                      SourceLocation Loc) {
1236   // If the first part of the nested-name-specifier was a template type
1237   // parameter, instantiate that type parameter down to a tag type.
1238   if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) {
1239     const TemplateTypeParmType *TTP
1240       = cast<TemplateTypeParmType>(getSema().Context.getTypeDeclType(TTPD));
1241 
1242     if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
1243       // FIXME: This needs testing w/ member access expressions.
1244       TemplateArgument Arg = TemplateArgs(TTP->getDepth(), TTP->getIndex());
1245 
1246       if (TTP->isParameterPack()) {
1247         assert(Arg.getKind() == TemplateArgument::Pack &&
1248                "Missing argument pack");
1249 
1250         if (getSema().ArgumentPackSubstitutionIndex == -1)
1251           return nullptr;
1252 
1253         Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1254       }
1255 
1256       QualType T = Arg.getAsType();
1257       if (T.isNull())
1258         return cast_or_null<NamedDecl>(TransformDecl(Loc, D));
1259 
1260       if (const TagType *Tag = T->getAs<TagType>())
1261         return Tag->getDecl();
1262 
1263       // The resulting type is not a tag; complain.
1264       getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T;
1265       return nullptr;
1266     }
1267   }
1268 
1269   return cast_or_null<NamedDecl>(TransformDecl(Loc, D));
1270 }
1271 
1272 VarDecl *
1273 TemplateInstantiator::RebuildExceptionDecl(VarDecl *ExceptionDecl,
1274                                            TypeSourceInfo *Declarator,
1275                                            SourceLocation StartLoc,
1276                                            SourceLocation NameLoc,
1277                                            IdentifierInfo *Name) {
1278   VarDecl *Var = inherited::RebuildExceptionDecl(ExceptionDecl, Declarator,
1279                                                  StartLoc, NameLoc, Name);
1280   if (Var)
1281     getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var);
1282   return Var;
1283 }
1284 
1285 VarDecl *TemplateInstantiator::RebuildObjCExceptionDecl(VarDecl *ExceptionDecl,
1286                                                         TypeSourceInfo *TSInfo,
1287                                                         QualType T) {
1288   VarDecl *Var = inherited::RebuildObjCExceptionDecl(ExceptionDecl, TSInfo, T);
1289   if (Var)
1290     getSema().CurrentInstantiationScope->InstantiatedLocal(ExceptionDecl, Var);
1291   return Var;
1292 }
1293 
1294 QualType
1295 TemplateInstantiator::RebuildElaboratedType(SourceLocation KeywordLoc,
1296                                             ElaboratedTypeKeyword Keyword,
1297                                             NestedNameSpecifierLoc QualifierLoc,
1298                                             QualType T) {
1299   if (const TagType *TT = T->getAs<TagType>()) {
1300     TagDecl* TD = TT->getDecl();
1301 
1302     SourceLocation TagLocation = KeywordLoc;
1303 
1304     IdentifierInfo *Id = TD->getIdentifier();
1305 
1306     // TODO: should we even warn on struct/class mismatches for this?  Seems
1307     // like it's likely to produce a lot of spurious errors.
1308     if (Id && Keyword != ETK_None && Keyword != ETK_Typename) {
1309       TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForKeyword(Keyword);
1310       if (!SemaRef.isAcceptableTagRedeclaration(TD, Kind, /*isDefinition*/false,
1311                                                 TagLocation, Id)) {
1312         SemaRef.Diag(TagLocation, diag::err_use_with_wrong_tag)
1313           << Id
1314           << FixItHint::CreateReplacement(SourceRange(TagLocation),
1315                                           TD->getKindName());
1316         SemaRef.Diag(TD->getLocation(), diag::note_previous_use);
1317       }
1318     }
1319   }
1320 
1321   return TreeTransform<TemplateInstantiator>::RebuildElaboratedType(KeywordLoc,
1322                                                                     Keyword,
1323                                                                   QualifierLoc,
1324                                                                     T);
1325 }
1326 
1327 TemplateName TemplateInstantiator::TransformTemplateName(
1328     CXXScopeSpec &SS, TemplateName Name, SourceLocation NameLoc,
1329     QualType ObjectType, NamedDecl *FirstQualifierInScope,
1330     bool AllowInjectedClassName) {
1331   if (TemplateTemplateParmDecl *TTP
1332        = dyn_cast_or_null<TemplateTemplateParmDecl>(Name.getAsTemplateDecl())) {
1333     if (TTP->getDepth() < TemplateArgs.getNumLevels()) {
1334       // If the corresponding template argument is NULL or non-existent, it's
1335       // because we are performing instantiation from explicitly-specified
1336       // template arguments in a function template, but there were some
1337       // arguments left unspecified.
1338       if (!TemplateArgs.hasTemplateArgument(TTP->getDepth(),
1339                                             TTP->getPosition()))
1340         return Name;
1341 
1342       TemplateArgument Arg = TemplateArgs(TTP->getDepth(), TTP->getPosition());
1343 
1344       if (TTP->isParameterPack()) {
1345         assert(Arg.getKind() == TemplateArgument::Pack &&
1346                "Missing argument pack");
1347 
1348         if (getSema().ArgumentPackSubstitutionIndex == -1) {
1349           // We have the template argument pack to substitute, but we're not
1350           // actually expanding the enclosing pack expansion yet. So, just
1351           // keep the entire argument pack.
1352           return getSema().Context.getSubstTemplateTemplateParmPack(TTP, Arg);
1353         }
1354 
1355         Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1356       }
1357 
1358       TemplateName Template = Arg.getAsTemplate().getNameToSubstitute();
1359       assert(!Template.isNull() && "Null template template argument");
1360       assert(!Template.getAsQualifiedTemplateName() &&
1361              "template decl to substitute is qualified?");
1362 
1363       Template = getSema().Context.getSubstTemplateTemplateParm(TTP, Template);
1364       return Template;
1365     }
1366   }
1367 
1368   if (SubstTemplateTemplateParmPackStorage *SubstPack
1369       = Name.getAsSubstTemplateTemplateParmPack()) {
1370     if (getSema().ArgumentPackSubstitutionIndex == -1)
1371       return Name;
1372 
1373     TemplateArgument Arg = SubstPack->getArgumentPack();
1374     Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1375     return Arg.getAsTemplate().getNameToSubstitute();
1376   }
1377 
1378   return inherited::TransformTemplateName(SS, Name, NameLoc, ObjectType,
1379                                           FirstQualifierInScope,
1380                                           AllowInjectedClassName);
1381 }
1382 
1383 ExprResult
1384 TemplateInstantiator::TransformPredefinedExpr(PredefinedExpr *E) {
1385   if (!E->isTypeDependent())
1386     return E;
1387 
1388   return getSema().BuildPredefinedExpr(E->getLocation(), E->getIdentKind());
1389 }
1390 
1391 ExprResult
1392 TemplateInstantiator::TransformTemplateParmRefExpr(DeclRefExpr *E,
1393                                                NonTypeTemplateParmDecl *NTTP) {
1394   // If the corresponding template argument is NULL or non-existent, it's
1395   // because we are performing instantiation from explicitly-specified
1396   // template arguments in a function template, but there were some
1397   // arguments left unspecified.
1398   if (!TemplateArgs.hasTemplateArgument(NTTP->getDepth(),
1399                                         NTTP->getPosition()))
1400     return E;
1401 
1402   TemplateArgument Arg = TemplateArgs(NTTP->getDepth(), NTTP->getPosition());
1403 
1404   if (TemplateArgs.getNumLevels() != TemplateArgs.getNumSubstitutedLevels()) {
1405     // We're performing a partial substitution, so the substituted argument
1406     // could be dependent. As a result we can't create a SubstNonType*Expr
1407     // node now, since that represents a fully-substituted argument.
1408     // FIXME: We should have some AST representation for this.
1409     if (Arg.getKind() == TemplateArgument::Pack) {
1410       // FIXME: This won't work for alias templates.
1411       assert(Arg.pack_size() == 1 && Arg.pack_begin()->isPackExpansion() &&
1412              "unexpected pack arguments in partial substitution");
1413       Arg = Arg.pack_begin()->getPackExpansionPattern();
1414     }
1415     assert(Arg.getKind() == TemplateArgument::Expression &&
1416            "unexpected nontype template argument kind in partial substitution");
1417     return Arg.getAsExpr();
1418   }
1419 
1420   if (NTTP->isParameterPack()) {
1421     assert(Arg.getKind() == TemplateArgument::Pack &&
1422            "Missing argument pack");
1423 
1424     if (getSema().ArgumentPackSubstitutionIndex == -1) {
1425       // We have an argument pack, but we can't select a particular argument
1426       // out of it yet. Therefore, we'll build an expression to hold on to that
1427       // argument pack.
1428       QualType TargetType = SemaRef.SubstType(NTTP->getType(), TemplateArgs,
1429                                               E->getLocation(),
1430                                               NTTP->getDeclName());
1431       if (TargetType.isNull())
1432         return ExprError();
1433 
1434       return new (SemaRef.Context) SubstNonTypeTemplateParmPackExpr(
1435           TargetType.getNonLValueExprType(SemaRef.Context),
1436           TargetType->isReferenceType() ? VK_LValue : VK_RValue, NTTP,
1437           E->getLocation(), Arg);
1438     }
1439 
1440     Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1441   }
1442 
1443   return transformNonTypeTemplateParmRef(NTTP, E->getLocation(), Arg);
1444 }
1445 
1446 const LoopHintAttr *
1447 TemplateInstantiator::TransformLoopHintAttr(const LoopHintAttr *LH) {
1448   Expr *TransformedExpr = getDerived().TransformExpr(LH->getValue()).get();
1449 
1450   if (TransformedExpr == LH->getValue())
1451     return LH;
1452 
1453   // Generate error if there is a problem with the value.
1454   if (getSema().CheckLoopHintExpr(TransformedExpr, LH->getLocation()))
1455     return LH;
1456 
1457   // Create new LoopHintValueAttr with integral expression in place of the
1458   // non-type template parameter.
1459   return LoopHintAttr::CreateImplicit(getSema().Context, LH->getOption(),
1460                                       LH->getState(), TransformedExpr, *LH);
1461 }
1462 
1463 ExprResult TemplateInstantiator::transformNonTypeTemplateParmRef(
1464                                                  NonTypeTemplateParmDecl *parm,
1465                                                  SourceLocation loc,
1466                                                  TemplateArgument arg) {
1467   ExprResult result;
1468   QualType type;
1469 
1470   // The template argument itself might be an expression, in which
1471   // case we just return that expression.
1472   if (arg.getKind() == TemplateArgument::Expression) {
1473     Expr *argExpr = arg.getAsExpr();
1474     result = argExpr;
1475     type = argExpr->getType();
1476 
1477   } else if (arg.getKind() == TemplateArgument::Declaration ||
1478              arg.getKind() == TemplateArgument::NullPtr) {
1479     ValueDecl *VD;
1480     if (arg.getKind() == TemplateArgument::Declaration) {
1481       VD = arg.getAsDecl();
1482 
1483       // Find the instantiation of the template argument.  This is
1484       // required for nested templates.
1485       VD = cast_or_null<ValueDecl>(
1486              getSema().FindInstantiatedDecl(loc, VD, TemplateArgs));
1487       if (!VD)
1488         return ExprError();
1489     } else {
1490       // Propagate NULL template argument.
1491       VD = nullptr;
1492     }
1493 
1494     // Derive the type we want the substituted decl to have.  This had
1495     // better be non-dependent, or these checks will have serious problems.
1496     if (parm->isExpandedParameterPack()) {
1497       type = parm->getExpansionType(SemaRef.ArgumentPackSubstitutionIndex);
1498     } else if (parm->isParameterPack() &&
1499                isa<PackExpansionType>(parm->getType())) {
1500       type = SemaRef.SubstType(
1501                         cast<PackExpansionType>(parm->getType())->getPattern(),
1502                                      TemplateArgs, loc, parm->getDeclName());
1503     } else {
1504       type = SemaRef.SubstType(VD ? arg.getParamTypeForDecl() : arg.getNullPtrType(),
1505                                TemplateArgs, loc, parm->getDeclName());
1506     }
1507     assert(!type.isNull() && "type substitution failed for param type");
1508     assert(!type->isDependentType() && "param type still dependent");
1509     result = SemaRef.BuildExpressionFromDeclTemplateArgument(arg, type, loc);
1510 
1511     if (!result.isInvalid()) type = result.get()->getType();
1512   } else {
1513     result = SemaRef.BuildExpressionFromIntegralTemplateArgument(arg, loc);
1514 
1515     // Note that this type can be different from the type of 'result',
1516     // e.g. if it's an enum type.
1517     type = arg.getIntegralType();
1518   }
1519   if (result.isInvalid()) return ExprError();
1520 
1521   Expr *resultExpr = result.get();
1522   return new (SemaRef.Context) SubstNonTypeTemplateParmExpr(
1523       type, resultExpr->getValueKind(), loc, parm, resultExpr);
1524 }
1525 
1526 ExprResult
1527 TemplateInstantiator::TransformSubstNonTypeTemplateParmPackExpr(
1528                                           SubstNonTypeTemplateParmPackExpr *E) {
1529   if (getSema().ArgumentPackSubstitutionIndex == -1) {
1530     // We aren't expanding the parameter pack, so just return ourselves.
1531     return E;
1532   }
1533 
1534   TemplateArgument Arg = E->getArgumentPack();
1535   Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1536   return transformNonTypeTemplateParmRef(E->getParameterPack(),
1537                                          E->getParameterPackLocation(),
1538                                          Arg);
1539 }
1540 
1541 ExprResult
1542 TemplateInstantiator::TransformSubstNonTypeTemplateParmExpr(
1543                                           SubstNonTypeTemplateParmExpr *E) {
1544   ExprResult SubstReplacement = TransformExpr(E->getReplacement());
1545   if (SubstReplacement.isInvalid())
1546     return true;
1547   QualType SubstType = TransformType(E->getType());
1548   if (SubstType.isNull())
1549     return true;
1550   // The type may have been previously dependent and not now, which means we
1551   // might have to implicit cast the argument to the new type, for example:
1552   // template<auto T, decltype(T) U>
1553   // concept C = sizeof(U) == 4;
1554   // void foo() requires C<2, 'a'> { }
1555   // When normalizing foo(), we first form the normalized constraints of C:
1556   // AtomicExpr(sizeof(U) == 4,
1557   //            U=SubstNonTypeTemplateParmExpr(Param=U,
1558   //                                           Expr=DeclRef(U),
1559   //                                           Type=decltype(T)))
1560   // Then we substitute T = 2, U = 'a' into the parameter mapping, and need to
1561   // produce:
1562   // AtomicExpr(sizeof(U) == 4,
1563   //            U=SubstNonTypeTemplateParmExpr(Param=U,
1564   //                                           Expr=ImpCast(
1565   //                                               decltype(2),
1566   //                                               SubstNTTPE(Param=U, Expr='a',
1567   //                                                          Type=char)),
1568   //                                           Type=decltype(2)))
1569   // The call to CheckTemplateArgument here produces the ImpCast.
1570   TemplateArgument Converted;
1571   if (SemaRef.CheckTemplateArgument(E->getParameter(), SubstType,
1572                                     SubstReplacement.get(),
1573                                     Converted).isInvalid())
1574     return true;
1575   return transformNonTypeTemplateParmRef(E->getParameter(),
1576                                          E->getExprLoc(), Converted);
1577 }
1578 
1579 ExprResult TemplateInstantiator::RebuildVarDeclRefExpr(VarDecl *PD,
1580                                                        SourceLocation Loc) {
1581   DeclarationNameInfo NameInfo(PD->getDeclName(), Loc);
1582   return getSema().BuildDeclarationNameExpr(CXXScopeSpec(), NameInfo, PD);
1583 }
1584 
1585 ExprResult
1586 TemplateInstantiator::TransformFunctionParmPackExpr(FunctionParmPackExpr *E) {
1587   if (getSema().ArgumentPackSubstitutionIndex != -1) {
1588     // We can expand this parameter pack now.
1589     VarDecl *D = E->getExpansion(getSema().ArgumentPackSubstitutionIndex);
1590     VarDecl *VD = cast_or_null<VarDecl>(TransformDecl(E->getExprLoc(), D));
1591     if (!VD)
1592       return ExprError();
1593     return RebuildVarDeclRefExpr(VD, E->getExprLoc());
1594   }
1595 
1596   QualType T = TransformType(E->getType());
1597   if (T.isNull())
1598     return ExprError();
1599 
1600   // Transform each of the parameter expansions into the corresponding
1601   // parameters in the instantiation of the function decl.
1602   SmallVector<VarDecl *, 8> Vars;
1603   Vars.reserve(E->getNumExpansions());
1604   for (FunctionParmPackExpr::iterator I = E->begin(), End = E->end();
1605        I != End; ++I) {
1606     VarDecl *D = cast_or_null<VarDecl>(TransformDecl(E->getExprLoc(), *I));
1607     if (!D)
1608       return ExprError();
1609     Vars.push_back(D);
1610   }
1611 
1612   auto *PackExpr =
1613       FunctionParmPackExpr::Create(getSema().Context, T, E->getParameterPack(),
1614                                    E->getParameterPackLocation(), Vars);
1615   getSema().MarkFunctionParmPackReferenced(PackExpr);
1616   return PackExpr;
1617 }
1618 
1619 ExprResult
1620 TemplateInstantiator::TransformFunctionParmPackRefExpr(DeclRefExpr *E,
1621                                                        VarDecl *PD) {
1622   typedef LocalInstantiationScope::DeclArgumentPack DeclArgumentPack;
1623   llvm::PointerUnion<Decl *, DeclArgumentPack *> *Found
1624     = getSema().CurrentInstantiationScope->findInstantiationOf(PD);
1625   assert(Found && "no instantiation for parameter pack");
1626 
1627   Decl *TransformedDecl;
1628   if (DeclArgumentPack *Pack = Found->dyn_cast<DeclArgumentPack *>()) {
1629     // If this is a reference to a function parameter pack which we can
1630     // substitute but can't yet expand, build a FunctionParmPackExpr for it.
1631     if (getSema().ArgumentPackSubstitutionIndex == -1) {
1632       QualType T = TransformType(E->getType());
1633       if (T.isNull())
1634         return ExprError();
1635       auto *PackExpr = FunctionParmPackExpr::Create(getSema().Context, T, PD,
1636                                                     E->getExprLoc(), *Pack);
1637       getSema().MarkFunctionParmPackReferenced(PackExpr);
1638       return PackExpr;
1639     }
1640 
1641     TransformedDecl = (*Pack)[getSema().ArgumentPackSubstitutionIndex];
1642   } else {
1643     TransformedDecl = Found->get<Decl*>();
1644   }
1645 
1646   // We have either an unexpanded pack or a specific expansion.
1647   return RebuildVarDeclRefExpr(cast<VarDecl>(TransformedDecl), E->getExprLoc());
1648 }
1649 
1650 ExprResult
1651 TemplateInstantiator::TransformDeclRefExpr(DeclRefExpr *E) {
1652   NamedDecl *D = E->getDecl();
1653 
1654   // Handle references to non-type template parameters and non-type template
1655   // parameter packs.
1656   if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(D)) {
1657     if (NTTP->getDepth() < TemplateArgs.getNumLevels())
1658       return TransformTemplateParmRefExpr(E, NTTP);
1659 
1660     // We have a non-type template parameter that isn't fully substituted;
1661     // FindInstantiatedDecl will find it in the local instantiation scope.
1662   }
1663 
1664   // Handle references to function parameter packs.
1665   if (VarDecl *PD = dyn_cast<VarDecl>(D))
1666     if (PD->isParameterPack())
1667       return TransformFunctionParmPackRefExpr(E, PD);
1668 
1669   return TreeTransform<TemplateInstantiator>::TransformDeclRefExpr(E);
1670 }
1671 
1672 ExprResult TemplateInstantiator::TransformCXXDefaultArgExpr(
1673     CXXDefaultArgExpr *E) {
1674   assert(!cast<FunctionDecl>(E->getParam()->getDeclContext())->
1675              getDescribedFunctionTemplate() &&
1676          "Default arg expressions are never formed in dependent cases.");
1677   return SemaRef.BuildCXXDefaultArgExpr(E->getUsedLocation(),
1678                            cast<FunctionDecl>(E->getParam()->getDeclContext()),
1679                                         E->getParam());
1680 }
1681 
1682 template<typename Fn>
1683 QualType TemplateInstantiator::TransformFunctionProtoType(TypeLocBuilder &TLB,
1684                                  FunctionProtoTypeLoc TL,
1685                                  CXXRecordDecl *ThisContext,
1686                                  Qualifiers ThisTypeQuals,
1687                                  Fn TransformExceptionSpec) {
1688   // We need a local instantiation scope for this function prototype.
1689   LocalInstantiationScope Scope(SemaRef, /*CombineWithOuterScope=*/true);
1690   return inherited::TransformFunctionProtoType(
1691       TLB, TL, ThisContext, ThisTypeQuals, TransformExceptionSpec);
1692 }
1693 
1694 ParmVarDecl *
1695 TemplateInstantiator::TransformFunctionTypeParam(ParmVarDecl *OldParm,
1696                                                  int indexAdjustment,
1697                                                Optional<unsigned> NumExpansions,
1698                                                  bool ExpectParameterPack) {
1699   auto NewParm =
1700       SemaRef.SubstParmVarDecl(OldParm, TemplateArgs, indexAdjustment,
1701                                NumExpansions, ExpectParameterPack);
1702   if (NewParm && SemaRef.getLangOpts().OpenCL)
1703     SemaRef.deduceOpenCLAddressSpace(NewParm);
1704   return NewParm;
1705 }
1706 
1707 QualType
1708 TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB,
1709                                                 TemplateTypeParmTypeLoc TL) {
1710   const TemplateTypeParmType *T = TL.getTypePtr();
1711   if (T->getDepth() < TemplateArgs.getNumLevels()) {
1712     // Replace the template type parameter with its corresponding
1713     // template argument.
1714 
1715     // If the corresponding template argument is NULL or doesn't exist, it's
1716     // because we are performing instantiation from explicitly-specified
1717     // template arguments in a function template class, but there were some
1718     // arguments left unspecified.
1719     if (!TemplateArgs.hasTemplateArgument(T->getDepth(), T->getIndex())) {
1720       TemplateTypeParmTypeLoc NewTL
1721         = TLB.push<TemplateTypeParmTypeLoc>(TL.getType());
1722       NewTL.setNameLoc(TL.getNameLoc());
1723       return TL.getType();
1724     }
1725 
1726     TemplateArgument Arg = TemplateArgs(T->getDepth(), T->getIndex());
1727 
1728     if (T->isParameterPack()) {
1729       assert(Arg.getKind() == TemplateArgument::Pack &&
1730              "Missing argument pack");
1731 
1732       if (getSema().ArgumentPackSubstitutionIndex == -1) {
1733         // We have the template argument pack, but we're not expanding the
1734         // enclosing pack expansion yet. Just save the template argument
1735         // pack for later substitution.
1736         QualType Result
1737           = getSema().Context.getSubstTemplateTypeParmPackType(T, Arg);
1738         SubstTemplateTypeParmPackTypeLoc NewTL
1739           = TLB.push<SubstTemplateTypeParmPackTypeLoc>(Result);
1740         NewTL.setNameLoc(TL.getNameLoc());
1741         return Result;
1742       }
1743 
1744       Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1745     }
1746 
1747     assert(Arg.getKind() == TemplateArgument::Type &&
1748            "Template argument kind mismatch");
1749 
1750     QualType Replacement = Arg.getAsType();
1751 
1752     // TODO: only do this uniquing once, at the start of instantiation.
1753     QualType Result
1754       = getSema().Context.getSubstTemplateTypeParmType(T, Replacement);
1755     SubstTemplateTypeParmTypeLoc NewTL
1756       = TLB.push<SubstTemplateTypeParmTypeLoc>(Result);
1757     NewTL.setNameLoc(TL.getNameLoc());
1758     return Result;
1759   }
1760 
1761   // The template type parameter comes from an inner template (e.g.,
1762   // the template parameter list of a member template inside the
1763   // template we are instantiating). Create a new template type
1764   // parameter with the template "level" reduced by one.
1765   TemplateTypeParmDecl *NewTTPDecl = nullptr;
1766   if (TemplateTypeParmDecl *OldTTPDecl = T->getDecl())
1767     NewTTPDecl = cast_or_null<TemplateTypeParmDecl>(
1768                                   TransformDecl(TL.getNameLoc(), OldTTPDecl));
1769 
1770   QualType Result = getSema().Context.getTemplateTypeParmType(
1771       T->getDepth() - TemplateArgs.getNumSubstitutedLevels(), T->getIndex(),
1772       T->isParameterPack(), NewTTPDecl);
1773   TemplateTypeParmTypeLoc NewTL = TLB.push<TemplateTypeParmTypeLoc>(Result);
1774   NewTL.setNameLoc(TL.getNameLoc());
1775   return Result;
1776 }
1777 
1778 QualType
1779 TemplateInstantiator::TransformSubstTemplateTypeParmPackType(
1780                                                             TypeLocBuilder &TLB,
1781                                          SubstTemplateTypeParmPackTypeLoc TL) {
1782   if (getSema().ArgumentPackSubstitutionIndex == -1) {
1783     // We aren't expanding the parameter pack, so just return ourselves.
1784     SubstTemplateTypeParmPackTypeLoc NewTL
1785       = TLB.push<SubstTemplateTypeParmPackTypeLoc>(TL.getType());
1786     NewTL.setNameLoc(TL.getNameLoc());
1787     return TL.getType();
1788   }
1789 
1790   TemplateArgument Arg = TL.getTypePtr()->getArgumentPack();
1791   Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
1792   QualType Result = Arg.getAsType();
1793 
1794   Result = getSema().Context.getSubstTemplateTypeParmType(
1795                                       TL.getTypePtr()->getReplacedParameter(),
1796                                                           Result);
1797   SubstTemplateTypeParmTypeLoc NewTL
1798     = TLB.push<SubstTemplateTypeParmTypeLoc>(Result);
1799   NewTL.setNameLoc(TL.getNameLoc());
1800   return Result;
1801 }
1802 
1803 template<typename EntityPrinter>
1804 static concepts::Requirement::SubstitutionDiagnostic *
1805 createSubstDiag(Sema &S, TemplateDeductionInfo &Info, EntityPrinter Printer) {
1806   SmallString<128> Message;
1807   SourceLocation ErrorLoc;
1808   if (Info.hasSFINAEDiagnostic()) {
1809     PartialDiagnosticAt PDA(SourceLocation(),
1810                             PartialDiagnostic::NullDiagnostic{});
1811     Info.takeSFINAEDiagnostic(PDA);
1812     PDA.second.EmitToString(S.getDiagnostics(), Message);
1813     ErrorLoc = PDA.first;
1814   } else {
1815     ErrorLoc = Info.getLocation();
1816   }
1817   char *MessageBuf = new (S.Context) char[Message.size()];
1818   std::copy(Message.begin(), Message.end(), MessageBuf);
1819   SmallString<128> Entity;
1820   llvm::raw_svector_ostream OS(Entity);
1821   Printer(OS);
1822   char *EntityBuf = new (S.Context) char[Entity.size()];
1823   std::copy(Entity.begin(), Entity.end(), EntityBuf);
1824   return new (S.Context) concepts::Requirement::SubstitutionDiagnostic{
1825       StringRef(EntityBuf, Entity.size()), ErrorLoc,
1826       StringRef(MessageBuf, Message.size())};
1827 }
1828 
1829 concepts::TypeRequirement *
1830 TemplateInstantiator::TransformTypeRequirement(concepts::TypeRequirement *Req) {
1831   if (!Req->isDependent() && !AlwaysRebuild())
1832     return Req;
1833   if (Req->isSubstitutionFailure()) {
1834     if (AlwaysRebuild())
1835       return RebuildTypeRequirement(
1836               Req->getSubstitutionDiagnostic());
1837     return Req;
1838   }
1839 
1840   Sema::SFINAETrap Trap(SemaRef);
1841   TemplateDeductionInfo Info(Req->getType()->getTypeLoc().getBeginLoc());
1842   Sema::InstantiatingTemplate TypeInst(SemaRef,
1843       Req->getType()->getTypeLoc().getBeginLoc(), Req, Info,
1844       Req->getType()->getTypeLoc().getSourceRange());
1845   if (TypeInst.isInvalid())
1846     return nullptr;
1847   TypeSourceInfo *TransType = TransformType(Req->getType());
1848   if (!TransType || Trap.hasErrorOccurred())
1849     return RebuildTypeRequirement(createSubstDiag(SemaRef, Info,
1850         [&] (llvm::raw_ostream& OS) {
1851             Req->getType()->getType().print(OS, SemaRef.getPrintingPolicy());
1852         }));
1853   return RebuildTypeRequirement(TransType);
1854 }
1855 
1856 concepts::ExprRequirement *
1857 TemplateInstantiator::TransformExprRequirement(concepts::ExprRequirement *Req) {
1858   if (!Req->isDependent() && !AlwaysRebuild())
1859     return Req;
1860 
1861   Sema::SFINAETrap Trap(SemaRef);
1862   TemplateDeductionInfo Info(Req->getExpr()->getBeginLoc());
1863 
1864   llvm::PointerUnion<Expr *, concepts::Requirement::SubstitutionDiagnostic *>
1865       TransExpr;
1866   if (Req->isExprSubstitutionFailure())
1867     TransExpr = Req->getExprSubstitutionDiagnostic();
1868   else {
1869     Sema::InstantiatingTemplate ExprInst(SemaRef, Req->getExpr()->getBeginLoc(),
1870                                          Req, Info,
1871                                          Req->getExpr()->getSourceRange());
1872     if (ExprInst.isInvalid())
1873       return nullptr;
1874     ExprResult TransExprRes = TransformExpr(Req->getExpr());
1875     if (TransExprRes.isInvalid() || Trap.hasErrorOccurred())
1876       TransExpr = createSubstDiag(SemaRef, Info,
1877           [&] (llvm::raw_ostream& OS) {
1878               Req->getExpr()->printPretty(OS, nullptr,
1879                                           SemaRef.getPrintingPolicy());
1880           });
1881     else
1882       TransExpr = TransExprRes.get();
1883   }
1884 
1885   llvm::Optional<concepts::ExprRequirement::ReturnTypeRequirement> TransRetReq;
1886   const auto &RetReq = Req->getReturnTypeRequirement();
1887   if (RetReq.isEmpty())
1888     TransRetReq.emplace();
1889   else if (RetReq.isSubstitutionFailure())
1890     TransRetReq.emplace(RetReq.getSubstitutionDiagnostic());
1891   else if (RetReq.isTypeConstraint()) {
1892     TemplateParameterList *OrigTPL =
1893         RetReq.getTypeConstraintTemplateParameterList();
1894     Sema::InstantiatingTemplate TPLInst(SemaRef, OrigTPL->getTemplateLoc(),
1895                                         Req, Info, OrigTPL->getSourceRange());
1896     if (TPLInst.isInvalid())
1897       return nullptr;
1898     TemplateParameterList *TPL =
1899         TransformTemplateParameterList(OrigTPL);
1900     if (!TPL)
1901       TransRetReq.emplace(createSubstDiag(SemaRef, Info,
1902           [&] (llvm::raw_ostream& OS) {
1903               RetReq.getTypeConstraint()->getImmediatelyDeclaredConstraint()
1904                   ->printPretty(OS, nullptr, SemaRef.getPrintingPolicy());
1905           }));
1906     else {
1907       TPLInst.Clear();
1908       TransRetReq.emplace(TPL);
1909     }
1910   }
1911   assert(TransRetReq.hasValue() &&
1912          "All code paths leading here must set TransRetReq");
1913   if (Expr *E = TransExpr.dyn_cast<Expr *>())
1914     return RebuildExprRequirement(E, Req->isSimple(), Req->getNoexceptLoc(),
1915                                   std::move(*TransRetReq));
1916   return RebuildExprRequirement(
1917       TransExpr.get<concepts::Requirement::SubstitutionDiagnostic *>(),
1918       Req->isSimple(), Req->getNoexceptLoc(), std::move(*TransRetReq));
1919 }
1920 
1921 concepts::NestedRequirement *
1922 TemplateInstantiator::TransformNestedRequirement(
1923     concepts::NestedRequirement *Req) {
1924   if (!Req->isDependent() && !AlwaysRebuild())
1925     return Req;
1926   if (Req->isSubstitutionFailure()) {
1927     if (AlwaysRebuild())
1928       return RebuildNestedRequirement(
1929           Req->getSubstitutionDiagnostic());
1930     return Req;
1931   }
1932   Sema::InstantiatingTemplate ReqInst(SemaRef,
1933       Req->getConstraintExpr()->getBeginLoc(), Req,
1934       Sema::InstantiatingTemplate::ConstraintsCheck{},
1935       Req->getConstraintExpr()->getSourceRange());
1936 
1937   ExprResult TransConstraint;
1938   TemplateDeductionInfo Info(Req->getConstraintExpr()->getBeginLoc());
1939   {
1940     EnterExpressionEvaluationContext ContextRAII(
1941         SemaRef, Sema::ExpressionEvaluationContext::ConstantEvaluated);
1942     Sema::SFINAETrap Trap(SemaRef);
1943     Sema::InstantiatingTemplate ConstrInst(SemaRef,
1944         Req->getConstraintExpr()->getBeginLoc(), Req, Info,
1945         Req->getConstraintExpr()->getSourceRange());
1946     if (ConstrInst.isInvalid())
1947       return nullptr;
1948     TransConstraint = TransformExpr(Req->getConstraintExpr());
1949     if (TransConstraint.isInvalid() || Trap.hasErrorOccurred())
1950       return RebuildNestedRequirement(createSubstDiag(SemaRef, Info,
1951           [&] (llvm::raw_ostream& OS) {
1952               Req->getConstraintExpr()->printPretty(OS, nullptr,
1953                                                     SemaRef.getPrintingPolicy());
1954           }));
1955   }
1956   return RebuildNestedRequirement(TransConstraint.get());
1957 }
1958 
1959 
1960 /// Perform substitution on the type T with a given set of template
1961 /// arguments.
1962 ///
1963 /// This routine substitutes the given template arguments into the
1964 /// type T and produces the instantiated type.
1965 ///
1966 /// \param T the type into which the template arguments will be
1967 /// substituted. If this type is not dependent, it will be returned
1968 /// immediately.
1969 ///
1970 /// \param Args the template arguments that will be
1971 /// substituted for the top-level template parameters within T.
1972 ///
1973 /// \param Loc the location in the source code where this substitution
1974 /// is being performed. It will typically be the location of the
1975 /// declarator (if we're instantiating the type of some declaration)
1976 /// or the location of the type in the source code (if, e.g., we're
1977 /// instantiating the type of a cast expression).
1978 ///
1979 /// \param Entity the name of the entity associated with a declaration
1980 /// being instantiated (if any). May be empty to indicate that there
1981 /// is no such entity (if, e.g., this is a type that occurs as part of
1982 /// a cast expression) or that the entity has no name (e.g., an
1983 /// unnamed function parameter).
1984 ///
1985 /// \param AllowDeducedTST Whether a DeducedTemplateSpecializationType is
1986 /// acceptable as the top level type of the result.
1987 ///
1988 /// \returns If the instantiation succeeds, the instantiated
1989 /// type. Otherwise, produces diagnostics and returns a NULL type.
1990 TypeSourceInfo *Sema::SubstType(TypeSourceInfo *T,
1991                                 const MultiLevelTemplateArgumentList &Args,
1992                                 SourceLocation Loc,
1993                                 DeclarationName Entity,
1994                                 bool AllowDeducedTST) {
1995   assert(!CodeSynthesisContexts.empty() &&
1996          "Cannot perform an instantiation without some context on the "
1997          "instantiation stack");
1998 
1999   if (!T->getType()->isInstantiationDependentType() &&
2000       !T->getType()->isVariablyModifiedType())
2001     return T;
2002 
2003   TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
2004   return AllowDeducedTST ? Instantiator.TransformTypeWithDeducedTST(T)
2005                          : Instantiator.TransformType(T);
2006 }
2007 
2008 TypeSourceInfo *Sema::SubstType(TypeLoc TL,
2009                                 const MultiLevelTemplateArgumentList &Args,
2010                                 SourceLocation Loc,
2011                                 DeclarationName Entity) {
2012   assert(!CodeSynthesisContexts.empty() &&
2013          "Cannot perform an instantiation without some context on the "
2014          "instantiation stack");
2015 
2016   if (TL.getType().isNull())
2017     return nullptr;
2018 
2019   if (!TL.getType()->isInstantiationDependentType() &&
2020       !TL.getType()->isVariablyModifiedType()) {
2021     // FIXME: Make a copy of the TypeLoc data here, so that we can
2022     // return a new TypeSourceInfo. Inefficient!
2023     TypeLocBuilder TLB;
2024     TLB.pushFullCopy(TL);
2025     return TLB.getTypeSourceInfo(Context, TL.getType());
2026   }
2027 
2028   TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
2029   TypeLocBuilder TLB;
2030   TLB.reserve(TL.getFullDataSize());
2031   QualType Result = Instantiator.TransformType(TLB, TL);
2032   if (Result.isNull())
2033     return nullptr;
2034 
2035   return TLB.getTypeSourceInfo(Context, Result);
2036 }
2037 
2038 /// Deprecated form of the above.
2039 QualType Sema::SubstType(QualType T,
2040                          const MultiLevelTemplateArgumentList &TemplateArgs,
2041                          SourceLocation Loc, DeclarationName Entity) {
2042   assert(!CodeSynthesisContexts.empty() &&
2043          "Cannot perform an instantiation without some context on the "
2044          "instantiation stack");
2045 
2046   // If T is not a dependent type or a variably-modified type, there
2047   // is nothing to do.
2048   if (!T->isInstantiationDependentType() && !T->isVariablyModifiedType())
2049     return T;
2050 
2051   TemplateInstantiator Instantiator(*this, TemplateArgs, Loc, Entity);
2052   return Instantiator.TransformType(T);
2053 }
2054 
2055 static bool NeedsInstantiationAsFunctionType(TypeSourceInfo *T) {
2056   if (T->getType()->isInstantiationDependentType() ||
2057       T->getType()->isVariablyModifiedType())
2058     return true;
2059 
2060   TypeLoc TL = T->getTypeLoc().IgnoreParens();
2061   if (!TL.getAs<FunctionProtoTypeLoc>())
2062     return false;
2063 
2064   FunctionProtoTypeLoc FP = TL.castAs<FunctionProtoTypeLoc>();
2065   for (ParmVarDecl *P : FP.getParams()) {
2066     // This must be synthesized from a typedef.
2067     if (!P) continue;
2068 
2069     // If there are any parameters, a new TypeSourceInfo that refers to the
2070     // instantiated parameters must be built.
2071     return true;
2072   }
2073 
2074   return false;
2075 }
2076 
2077 /// A form of SubstType intended specifically for instantiating the
2078 /// type of a FunctionDecl.  Its purpose is solely to force the
2079 /// instantiation of default-argument expressions and to avoid
2080 /// instantiating an exception-specification.
2081 TypeSourceInfo *Sema::SubstFunctionDeclType(TypeSourceInfo *T,
2082                                 const MultiLevelTemplateArgumentList &Args,
2083                                 SourceLocation Loc,
2084                                 DeclarationName Entity,
2085                                 CXXRecordDecl *ThisContext,
2086                                 Qualifiers ThisTypeQuals) {
2087   assert(!CodeSynthesisContexts.empty() &&
2088          "Cannot perform an instantiation without some context on the "
2089          "instantiation stack");
2090 
2091   if (!NeedsInstantiationAsFunctionType(T))
2092     return T;
2093 
2094   TemplateInstantiator Instantiator(*this, Args, Loc, Entity);
2095 
2096   TypeLocBuilder TLB;
2097 
2098   TypeLoc TL = T->getTypeLoc();
2099   TLB.reserve(TL.getFullDataSize());
2100 
2101   QualType Result;
2102 
2103   if (FunctionProtoTypeLoc Proto =
2104           TL.IgnoreParens().getAs<FunctionProtoTypeLoc>()) {
2105     // Instantiate the type, other than its exception specification. The
2106     // exception specification is instantiated in InitFunctionInstantiation
2107     // once we've built the FunctionDecl.
2108     // FIXME: Set the exception specification to EST_Uninstantiated here,
2109     // instead of rebuilding the function type again later.
2110     Result = Instantiator.TransformFunctionProtoType(
2111         TLB, Proto, ThisContext, ThisTypeQuals,
2112         [](FunctionProtoType::ExceptionSpecInfo &ESI,
2113            bool &Changed) { return false; });
2114   } else {
2115     Result = Instantiator.TransformType(TLB, TL);
2116   }
2117   if (Result.isNull())
2118     return nullptr;
2119 
2120   return TLB.getTypeSourceInfo(Context, Result);
2121 }
2122 
2123 bool Sema::SubstExceptionSpec(SourceLocation Loc,
2124                               FunctionProtoType::ExceptionSpecInfo &ESI,
2125                               SmallVectorImpl<QualType> &ExceptionStorage,
2126                               const MultiLevelTemplateArgumentList &Args) {
2127   assert(ESI.Type != EST_Uninstantiated);
2128 
2129   bool Changed = false;
2130   TemplateInstantiator Instantiator(*this, Args, Loc, DeclarationName());
2131   return Instantiator.TransformExceptionSpec(Loc, ESI, ExceptionStorage,
2132                                              Changed);
2133 }
2134 
2135 void Sema::SubstExceptionSpec(FunctionDecl *New, const FunctionProtoType *Proto,
2136                               const MultiLevelTemplateArgumentList &Args) {
2137   FunctionProtoType::ExceptionSpecInfo ESI =
2138       Proto->getExtProtoInfo().ExceptionSpec;
2139 
2140   SmallVector<QualType, 4> ExceptionStorage;
2141   if (SubstExceptionSpec(New->getTypeSourceInfo()->getTypeLoc().getEndLoc(),
2142                          ESI, ExceptionStorage, Args))
2143     // On error, recover by dropping the exception specification.
2144     ESI.Type = EST_None;
2145 
2146   UpdateExceptionSpec(New, ESI);
2147 }
2148 
2149 namespace {
2150 
2151   struct GetContainedInventedTypeParmVisitor :
2152     public TypeVisitor<GetContainedInventedTypeParmVisitor,
2153                        TemplateTypeParmDecl *> {
2154     using TypeVisitor<GetContainedInventedTypeParmVisitor,
2155                       TemplateTypeParmDecl *>::Visit;
2156 
2157     TemplateTypeParmDecl *Visit(QualType T) {
2158       if (T.isNull())
2159         return nullptr;
2160       return Visit(T.getTypePtr());
2161     }
2162     // The deduced type itself.
2163     TemplateTypeParmDecl *VisitTemplateTypeParmType(
2164         const TemplateTypeParmType *T) {
2165       if (!T->getDecl()->isImplicit())
2166         return nullptr;
2167       return T->getDecl();
2168     }
2169 
2170     // Only these types can contain 'auto' types, and subsequently be replaced
2171     // by references to invented parameters.
2172 
2173     TemplateTypeParmDecl *VisitElaboratedType(const ElaboratedType *T) {
2174       return Visit(T->getNamedType());
2175     }
2176 
2177     TemplateTypeParmDecl *VisitPointerType(const PointerType *T) {
2178       return Visit(T->getPointeeType());
2179     }
2180 
2181     TemplateTypeParmDecl *VisitBlockPointerType(const BlockPointerType *T) {
2182       return Visit(T->getPointeeType());
2183     }
2184 
2185     TemplateTypeParmDecl *VisitReferenceType(const ReferenceType *T) {
2186       return Visit(T->getPointeeTypeAsWritten());
2187     }
2188 
2189     TemplateTypeParmDecl *VisitMemberPointerType(const MemberPointerType *T) {
2190       return Visit(T->getPointeeType());
2191     }
2192 
2193     TemplateTypeParmDecl *VisitArrayType(const ArrayType *T) {
2194       return Visit(T->getElementType());
2195     }
2196 
2197     TemplateTypeParmDecl *VisitDependentSizedExtVectorType(
2198       const DependentSizedExtVectorType *T) {
2199       return Visit(T->getElementType());
2200     }
2201 
2202     TemplateTypeParmDecl *VisitVectorType(const VectorType *T) {
2203       return Visit(T->getElementType());
2204     }
2205 
2206     TemplateTypeParmDecl *VisitFunctionProtoType(const FunctionProtoType *T) {
2207       return VisitFunctionType(T);
2208     }
2209 
2210     TemplateTypeParmDecl *VisitFunctionType(const FunctionType *T) {
2211       return Visit(T->getReturnType());
2212     }
2213 
2214     TemplateTypeParmDecl *VisitParenType(const ParenType *T) {
2215       return Visit(T->getInnerType());
2216     }
2217 
2218     TemplateTypeParmDecl *VisitAttributedType(const AttributedType *T) {
2219       return Visit(T->getModifiedType());
2220     }
2221 
2222     TemplateTypeParmDecl *VisitMacroQualifiedType(const MacroQualifiedType *T) {
2223       return Visit(T->getUnderlyingType());
2224     }
2225 
2226     TemplateTypeParmDecl *VisitAdjustedType(const AdjustedType *T) {
2227       return Visit(T->getOriginalType());
2228     }
2229 
2230     TemplateTypeParmDecl *VisitPackExpansionType(const PackExpansionType *T) {
2231       return Visit(T->getPattern());
2232     }
2233   };
2234 
2235 } // namespace
2236 
2237 ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm,
2238                             const MultiLevelTemplateArgumentList &TemplateArgs,
2239                                     int indexAdjustment,
2240                                     Optional<unsigned> NumExpansions,
2241                                     bool ExpectParameterPack) {
2242   TypeSourceInfo *OldDI = OldParm->getTypeSourceInfo();
2243   TypeSourceInfo *NewDI = nullptr;
2244 
2245   TypeLoc OldTL = OldDI->getTypeLoc();
2246   if (PackExpansionTypeLoc ExpansionTL = OldTL.getAs<PackExpansionTypeLoc>()) {
2247 
2248     // We have a function parameter pack. Substitute into the pattern of the
2249     // expansion.
2250     NewDI = SubstType(ExpansionTL.getPatternLoc(), TemplateArgs,
2251                       OldParm->getLocation(), OldParm->getDeclName());
2252     if (!NewDI)
2253       return nullptr;
2254 
2255     if (NewDI->getType()->containsUnexpandedParameterPack()) {
2256       // We still have unexpanded parameter packs, which means that
2257       // our function parameter is still a function parameter pack.
2258       // Therefore, make its type a pack expansion type.
2259       NewDI = CheckPackExpansion(NewDI, ExpansionTL.getEllipsisLoc(),
2260                                  NumExpansions);
2261     } else if (ExpectParameterPack) {
2262       // We expected to get a parameter pack but didn't (because the type
2263       // itself is not a pack expansion type), so complain. This can occur when
2264       // the substitution goes through an alias template that "loses" the
2265       // pack expansion.
2266       Diag(OldParm->getLocation(),
2267            diag::err_function_parameter_pack_without_parameter_packs)
2268         << NewDI->getType();
2269       return nullptr;
2270     }
2271   } else {
2272     NewDI = SubstType(OldDI, TemplateArgs, OldParm->getLocation(),
2273                       OldParm->getDeclName());
2274   }
2275 
2276   if (!NewDI)
2277     return nullptr;
2278 
2279   if (NewDI->getType()->isVoidType()) {
2280     Diag(OldParm->getLocation(), diag::err_param_with_void_type);
2281     return nullptr;
2282   }
2283 
2284   // In abbreviated templates, TemplateTypeParmDecls with possible
2285   // TypeConstraints are created when the parameter list is originally parsed.
2286   // The TypeConstraints can therefore reference other functions parameters in
2287   // the abbreviated function template, which is why we must instantiate them
2288   // here, when the instantiated versions of those referenced parameters are in
2289   // scope.
2290   if (TemplateTypeParmDecl *TTP =
2291           GetContainedInventedTypeParmVisitor().Visit(OldDI->getType())) {
2292     if (const TypeConstraint *TC = TTP->getTypeConstraint()) {
2293       auto *Inst = cast_or_null<TemplateTypeParmDecl>(
2294           FindInstantiatedDecl(TTP->getLocation(), TTP, TemplateArgs));
2295       // We will first get here when instantiating the abbreviated function
2296       // template's described function, but we might also get here later.
2297       // Make sure we do not instantiate the TypeConstraint more than once.
2298       if (Inst && !Inst->getTypeConstraint()) {
2299         // TODO: Concepts: do not instantiate the constraint (delayed constraint
2300         // substitution)
2301         const ASTTemplateArgumentListInfo *TemplArgInfo
2302           = TC->getTemplateArgsAsWritten();
2303         TemplateArgumentListInfo InstArgs;
2304 
2305         if (TemplArgInfo) {
2306           InstArgs.setLAngleLoc(TemplArgInfo->LAngleLoc);
2307           InstArgs.setRAngleLoc(TemplArgInfo->RAngleLoc);
2308           if (Subst(TemplArgInfo->getTemplateArgs(),
2309                     TemplArgInfo->NumTemplateArgs, InstArgs, TemplateArgs))
2310             return nullptr;
2311         }
2312         if (AttachTypeConstraint(
2313                 TC->getNestedNameSpecifierLoc(), TC->getConceptNameInfo(),
2314                 TC->getNamedConcept(), &InstArgs, Inst,
2315                 TTP->isParameterPack()
2316                     ? cast<CXXFoldExpr>(TC->getImmediatelyDeclaredConstraint())
2317                         ->getEllipsisLoc()
2318                     : SourceLocation()))
2319           return nullptr;
2320       }
2321     }
2322   }
2323 
2324   ParmVarDecl *NewParm = CheckParameter(Context.getTranslationUnitDecl(),
2325                                         OldParm->getInnerLocStart(),
2326                                         OldParm->getLocation(),
2327                                         OldParm->getIdentifier(),
2328                                         NewDI->getType(), NewDI,
2329                                         OldParm->getStorageClass());
2330   if (!NewParm)
2331     return nullptr;
2332 
2333   // Mark the (new) default argument as uninstantiated (if any).
2334   if (OldParm->hasUninstantiatedDefaultArg()) {
2335     Expr *Arg = OldParm->getUninstantiatedDefaultArg();
2336     NewParm->setUninstantiatedDefaultArg(Arg);
2337   } else if (OldParm->hasUnparsedDefaultArg()) {
2338     NewParm->setUnparsedDefaultArg();
2339     UnparsedDefaultArgInstantiations[OldParm].push_back(NewParm);
2340   } else if (Expr *Arg = OldParm->getDefaultArg()) {
2341     FunctionDecl *OwningFunc = cast<FunctionDecl>(OldParm->getDeclContext());
2342     if (OwningFunc->isLexicallyWithinFunctionOrMethod()) {
2343       // Instantiate default arguments for methods of local classes (DR1484)
2344       // and non-defining declarations.
2345       Sema::ContextRAII SavedContext(*this, OwningFunc);
2346       LocalInstantiationScope Local(*this, true);
2347       ExprResult NewArg = SubstExpr(Arg, TemplateArgs);
2348       if (NewArg.isUsable()) {
2349         // It would be nice if we still had this.
2350         SourceLocation EqualLoc = NewArg.get()->getBeginLoc();
2351         SetParamDefaultArgument(NewParm, NewArg.get(), EqualLoc);
2352       }
2353     } else {
2354       // FIXME: if we non-lazily instantiated non-dependent default args for
2355       // non-dependent parameter types we could remove a bunch of duplicate
2356       // conversion warnings for such arguments.
2357       NewParm->setUninstantiatedDefaultArg(Arg);
2358     }
2359   }
2360 
2361   NewParm->setHasInheritedDefaultArg(OldParm->hasInheritedDefaultArg());
2362 
2363   if (OldParm->isParameterPack() && !NewParm->isParameterPack()) {
2364     // Add the new parameter to the instantiated parameter pack.
2365     CurrentInstantiationScope->InstantiatedLocalPackArg(OldParm, NewParm);
2366   } else {
2367     // Introduce an Old -> New mapping
2368     CurrentInstantiationScope->InstantiatedLocal(OldParm, NewParm);
2369   }
2370 
2371   // FIXME: OldParm may come from a FunctionProtoType, in which case CurContext
2372   // can be anything, is this right ?
2373   NewParm->setDeclContext(CurContext);
2374 
2375   NewParm->setScopeInfo(OldParm->getFunctionScopeDepth(),
2376                         OldParm->getFunctionScopeIndex() + indexAdjustment);
2377 
2378   InstantiateAttrs(TemplateArgs, OldParm, NewParm);
2379 
2380   return NewParm;
2381 }
2382 
2383 /// Substitute the given template arguments into the given set of
2384 /// parameters, producing the set of parameter types that would be generated
2385 /// from such a substitution.
2386 bool Sema::SubstParmTypes(
2387     SourceLocation Loc, ArrayRef<ParmVarDecl *> Params,
2388     const FunctionProtoType::ExtParameterInfo *ExtParamInfos,
2389     const MultiLevelTemplateArgumentList &TemplateArgs,
2390     SmallVectorImpl<QualType> &ParamTypes,
2391     SmallVectorImpl<ParmVarDecl *> *OutParams,
2392     ExtParameterInfoBuilder &ParamInfos) {
2393   assert(!CodeSynthesisContexts.empty() &&
2394          "Cannot perform an instantiation without some context on the "
2395          "instantiation stack");
2396 
2397   TemplateInstantiator Instantiator(*this, TemplateArgs, Loc,
2398                                     DeclarationName());
2399   return Instantiator.TransformFunctionTypeParams(
2400       Loc, Params, nullptr, ExtParamInfos, ParamTypes, OutParams, ParamInfos);
2401 }
2402 
2403 /// Perform substitution on the base class specifiers of the
2404 /// given class template specialization.
2405 ///
2406 /// Produces a diagnostic and returns true on error, returns false and
2407 /// attaches the instantiated base classes to the class template
2408 /// specialization if successful.
2409 bool
2410 Sema::SubstBaseSpecifiers(CXXRecordDecl *Instantiation,
2411                           CXXRecordDecl *Pattern,
2412                           const MultiLevelTemplateArgumentList &TemplateArgs) {
2413   bool Invalid = false;
2414   SmallVector<CXXBaseSpecifier*, 4> InstantiatedBases;
2415   for (const auto &Base : Pattern->bases()) {
2416     if (!Base.getType()->isDependentType()) {
2417       if (const CXXRecordDecl *RD = Base.getType()->getAsCXXRecordDecl()) {
2418         if (RD->isInvalidDecl())
2419           Instantiation->setInvalidDecl();
2420       }
2421       InstantiatedBases.push_back(new (Context) CXXBaseSpecifier(Base));
2422       continue;
2423     }
2424 
2425     SourceLocation EllipsisLoc;
2426     TypeSourceInfo *BaseTypeLoc;
2427     if (Base.isPackExpansion()) {
2428       // This is a pack expansion. See whether we should expand it now, or
2429       // wait until later.
2430       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
2431       collectUnexpandedParameterPacks(Base.getTypeSourceInfo()->getTypeLoc(),
2432                                       Unexpanded);
2433       bool ShouldExpand = false;
2434       bool RetainExpansion = false;
2435       Optional<unsigned> NumExpansions;
2436       if (CheckParameterPacksForExpansion(Base.getEllipsisLoc(),
2437                                           Base.getSourceRange(),
2438                                           Unexpanded,
2439                                           TemplateArgs, ShouldExpand,
2440                                           RetainExpansion,
2441                                           NumExpansions)) {
2442         Invalid = true;
2443         continue;
2444       }
2445 
2446       // If we should expand this pack expansion now, do so.
2447       if (ShouldExpand) {
2448         for (unsigned I = 0; I != *NumExpansions; ++I) {
2449             Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(*this, I);
2450 
2451           TypeSourceInfo *BaseTypeLoc = SubstType(Base.getTypeSourceInfo(),
2452                                                   TemplateArgs,
2453                                               Base.getSourceRange().getBegin(),
2454                                                   DeclarationName());
2455           if (!BaseTypeLoc) {
2456             Invalid = true;
2457             continue;
2458           }
2459 
2460           if (CXXBaseSpecifier *InstantiatedBase
2461                 = CheckBaseSpecifier(Instantiation,
2462                                      Base.getSourceRange(),
2463                                      Base.isVirtual(),
2464                                      Base.getAccessSpecifierAsWritten(),
2465                                      BaseTypeLoc,
2466                                      SourceLocation()))
2467             InstantiatedBases.push_back(InstantiatedBase);
2468           else
2469             Invalid = true;
2470         }
2471 
2472         continue;
2473       }
2474 
2475       // The resulting base specifier will (still) be a pack expansion.
2476       EllipsisLoc = Base.getEllipsisLoc();
2477       Sema::ArgumentPackSubstitutionIndexRAII SubstIndex(*this, -1);
2478       BaseTypeLoc = SubstType(Base.getTypeSourceInfo(),
2479                               TemplateArgs,
2480                               Base.getSourceRange().getBegin(),
2481                               DeclarationName());
2482     } else {
2483       BaseTypeLoc = SubstType(Base.getTypeSourceInfo(),
2484                               TemplateArgs,
2485                               Base.getSourceRange().getBegin(),
2486                               DeclarationName());
2487     }
2488 
2489     if (!BaseTypeLoc) {
2490       Invalid = true;
2491       continue;
2492     }
2493 
2494     if (CXXBaseSpecifier *InstantiatedBase
2495           = CheckBaseSpecifier(Instantiation,
2496                                Base.getSourceRange(),
2497                                Base.isVirtual(),
2498                                Base.getAccessSpecifierAsWritten(),
2499                                BaseTypeLoc,
2500                                EllipsisLoc))
2501       InstantiatedBases.push_back(InstantiatedBase);
2502     else
2503       Invalid = true;
2504   }
2505 
2506   if (!Invalid && AttachBaseSpecifiers(Instantiation, InstantiatedBases))
2507     Invalid = true;
2508 
2509   return Invalid;
2510 }
2511 
2512 // Defined via #include from SemaTemplateInstantiateDecl.cpp
2513 namespace clang {
2514   namespace sema {
2515     Attr *instantiateTemplateAttribute(const Attr *At, ASTContext &C, Sema &S,
2516                             const MultiLevelTemplateArgumentList &TemplateArgs);
2517     Attr *instantiateTemplateAttributeForDecl(
2518         const Attr *At, ASTContext &C, Sema &S,
2519         const MultiLevelTemplateArgumentList &TemplateArgs);
2520   }
2521 }
2522 
2523 /// Instantiate the definition of a class from a given pattern.
2524 ///
2525 /// \param PointOfInstantiation The point of instantiation within the
2526 /// source code.
2527 ///
2528 /// \param Instantiation is the declaration whose definition is being
2529 /// instantiated. This will be either a class template specialization
2530 /// or a member class of a class template specialization.
2531 ///
2532 /// \param Pattern is the pattern from which the instantiation
2533 /// occurs. This will be either the declaration of a class template or
2534 /// the declaration of a member class of a class template.
2535 ///
2536 /// \param TemplateArgs The template arguments to be substituted into
2537 /// the pattern.
2538 ///
2539 /// \param TSK the kind of implicit or explicit instantiation to perform.
2540 ///
2541 /// \param Complain whether to complain if the class cannot be instantiated due
2542 /// to the lack of a definition.
2543 ///
2544 /// \returns true if an error occurred, false otherwise.
2545 bool
2546 Sema::InstantiateClass(SourceLocation PointOfInstantiation,
2547                        CXXRecordDecl *Instantiation, CXXRecordDecl *Pattern,
2548                        const MultiLevelTemplateArgumentList &TemplateArgs,
2549                        TemplateSpecializationKind TSK,
2550                        bool Complain) {
2551   CXXRecordDecl *PatternDef
2552     = cast_or_null<CXXRecordDecl>(Pattern->getDefinition());
2553   if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Instantiation,
2554                                 Instantiation->getInstantiatedFromMemberClass(),
2555                                      Pattern, PatternDef, TSK, Complain))
2556     return true;
2557 
2558   llvm::TimeTraceScope TimeScope("InstantiateClass", [&]() {
2559     std::string Name;
2560     llvm::raw_string_ostream OS(Name);
2561     Instantiation->getNameForDiagnostic(OS, getPrintingPolicy(),
2562                                         /*Qualified=*/true);
2563     return Name;
2564   });
2565 
2566   Pattern = PatternDef;
2567 
2568   // Record the point of instantiation.
2569   if (MemberSpecializationInfo *MSInfo
2570         = Instantiation->getMemberSpecializationInfo()) {
2571     MSInfo->setTemplateSpecializationKind(TSK);
2572     MSInfo->setPointOfInstantiation(PointOfInstantiation);
2573   } else if (ClassTemplateSpecializationDecl *Spec
2574         = dyn_cast<ClassTemplateSpecializationDecl>(Instantiation)) {
2575     Spec->setTemplateSpecializationKind(TSK);
2576     Spec->setPointOfInstantiation(PointOfInstantiation);
2577   }
2578 
2579   InstantiatingTemplate Inst(*this, PointOfInstantiation, Instantiation);
2580   if (Inst.isInvalid())
2581     return true;
2582   assert(!Inst.isAlreadyInstantiating() && "should have been caught by caller");
2583   PrettyDeclStackTraceEntry CrashInfo(Context, Instantiation, SourceLocation(),
2584                                       "instantiating class definition");
2585 
2586   // Enter the scope of this instantiation. We don't use
2587   // PushDeclContext because we don't have a scope.
2588   ContextRAII SavedContext(*this, Instantiation);
2589   EnterExpressionEvaluationContext EvalContext(
2590       *this, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
2591 
2592   // If this is an instantiation of a local class, merge this local
2593   // instantiation scope with the enclosing scope. Otherwise, every
2594   // instantiation of a class has its own local instantiation scope.
2595   bool MergeWithParentScope = !Instantiation->isDefinedOutsideFunctionOrMethod();
2596   LocalInstantiationScope Scope(*this, MergeWithParentScope);
2597 
2598   // Some class state isn't processed immediately but delayed till class
2599   // instantiation completes. We may not be ready to handle any delayed state
2600   // already on the stack as it might correspond to a different class, so save
2601   // it now and put it back later.
2602   SavePendingParsedClassStateRAII SavedPendingParsedClassState(*this);
2603 
2604   // Pull attributes from the pattern onto the instantiation.
2605   InstantiateAttrs(TemplateArgs, Pattern, Instantiation);
2606 
2607   // Start the definition of this instantiation.
2608   Instantiation->startDefinition();
2609 
2610   // The instantiation is visible here, even if it was first declared in an
2611   // unimported module.
2612   Instantiation->setVisibleDespiteOwningModule();
2613 
2614   // FIXME: This loses the as-written tag kind for an explicit instantiation.
2615   Instantiation->setTagKind(Pattern->getTagKind());
2616 
2617   // Do substitution on the base class specifiers.
2618   if (SubstBaseSpecifiers(Instantiation, Pattern, TemplateArgs))
2619     Instantiation->setInvalidDecl();
2620 
2621   TemplateDeclInstantiator Instantiator(*this, Instantiation, TemplateArgs);
2622   SmallVector<Decl*, 4> Fields;
2623   // Delay instantiation of late parsed attributes.
2624   LateInstantiatedAttrVec LateAttrs;
2625   Instantiator.enableLateAttributeInstantiation(&LateAttrs);
2626 
2627   bool MightHaveConstexprVirtualFunctions = false;
2628   for (auto *Member : Pattern->decls()) {
2629     // Don't instantiate members not belonging in this semantic context.
2630     // e.g. for:
2631     // @code
2632     //    template <int i> class A {
2633     //      class B *g;
2634     //    };
2635     // @endcode
2636     // 'class B' has the template as lexical context but semantically it is
2637     // introduced in namespace scope.
2638     if (Member->getDeclContext() != Pattern)
2639       continue;
2640 
2641     // BlockDecls can appear in a default-member-initializer. They must be the
2642     // child of a BlockExpr, so we only know how to instantiate them from there.
2643     if (isa<BlockDecl>(Member))
2644       continue;
2645 
2646     if (Member->isInvalidDecl()) {
2647       Instantiation->setInvalidDecl();
2648       continue;
2649     }
2650 
2651     Decl *NewMember = Instantiator.Visit(Member);
2652     if (NewMember) {
2653       if (FieldDecl *Field = dyn_cast<FieldDecl>(NewMember)) {
2654         Fields.push_back(Field);
2655       } else if (EnumDecl *Enum = dyn_cast<EnumDecl>(NewMember)) {
2656         // C++11 [temp.inst]p1: The implicit instantiation of a class template
2657         // specialization causes the implicit instantiation of the definitions
2658         // of unscoped member enumerations.
2659         // Record a point of instantiation for this implicit instantiation.
2660         if (TSK == TSK_ImplicitInstantiation && !Enum->isScoped() &&
2661             Enum->isCompleteDefinition()) {
2662           MemberSpecializationInfo *MSInfo =Enum->getMemberSpecializationInfo();
2663           assert(MSInfo && "no spec info for member enum specialization");
2664           MSInfo->setTemplateSpecializationKind(TSK_ImplicitInstantiation);
2665           MSInfo->setPointOfInstantiation(PointOfInstantiation);
2666         }
2667       } else if (StaticAssertDecl *SA = dyn_cast<StaticAssertDecl>(NewMember)) {
2668         if (SA->isFailed()) {
2669           // A static_assert failed. Bail out; instantiating this
2670           // class is probably not meaningful.
2671           Instantiation->setInvalidDecl();
2672           break;
2673         }
2674       } else if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(NewMember)) {
2675         if (MD->isConstexpr() && !MD->getFriendObjectKind() &&
2676             (MD->isVirtualAsWritten() || Instantiation->getNumBases()))
2677           MightHaveConstexprVirtualFunctions = true;
2678       }
2679 
2680       if (NewMember->isInvalidDecl())
2681         Instantiation->setInvalidDecl();
2682     } else {
2683       // FIXME: Eventually, a NULL return will mean that one of the
2684       // instantiations was a semantic disaster, and we'll want to mark the
2685       // declaration invalid.
2686       // For now, we expect to skip some members that we can't yet handle.
2687     }
2688   }
2689 
2690   // Finish checking fields.
2691   ActOnFields(nullptr, Instantiation->getLocation(), Instantiation, Fields,
2692               SourceLocation(), SourceLocation(), ParsedAttributesView());
2693   CheckCompletedCXXClass(nullptr, Instantiation);
2694 
2695   // Default arguments are parsed, if not instantiated. We can go instantiate
2696   // default arg exprs for default constructors if necessary now. Unless we're
2697   // parsing a class, in which case wait until that's finished.
2698   if (ParsingClassDepth == 0)
2699     ActOnFinishCXXNonNestedClass();
2700 
2701   // Instantiate late parsed attributes, and attach them to their decls.
2702   // See Sema::InstantiateAttrs
2703   for (LateInstantiatedAttrVec::iterator I = LateAttrs.begin(),
2704        E = LateAttrs.end(); I != E; ++I) {
2705     assert(CurrentInstantiationScope == Instantiator.getStartingScope());
2706     CurrentInstantiationScope = I->Scope;
2707 
2708     // Allow 'this' within late-parsed attributes.
2709     NamedDecl *ND = dyn_cast<NamedDecl>(I->NewDecl);
2710     CXXRecordDecl *ThisContext =
2711         dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext());
2712     CXXThisScopeRAII ThisScope(*this, ThisContext, Qualifiers(),
2713                                ND && ND->isCXXInstanceMember());
2714 
2715     Attr *NewAttr =
2716       instantiateTemplateAttribute(I->TmplAttr, Context, *this, TemplateArgs);
2717     I->NewDecl->addAttr(NewAttr);
2718     LocalInstantiationScope::deleteScopes(I->Scope,
2719                                           Instantiator.getStartingScope());
2720   }
2721   Instantiator.disableLateAttributeInstantiation();
2722   LateAttrs.clear();
2723 
2724   ActOnFinishDelayedMemberInitializers(Instantiation);
2725 
2726   // FIXME: We should do something similar for explicit instantiations so they
2727   // end up in the right module.
2728   if (TSK == TSK_ImplicitInstantiation) {
2729     Instantiation->setLocation(Pattern->getLocation());
2730     Instantiation->setLocStart(Pattern->getInnerLocStart());
2731     Instantiation->setBraceRange(Pattern->getBraceRange());
2732   }
2733 
2734   if (!Instantiation->isInvalidDecl()) {
2735     // Perform any dependent diagnostics from the pattern.
2736     PerformDependentDiagnostics(Pattern, TemplateArgs);
2737 
2738     // Instantiate any out-of-line class template partial
2739     // specializations now.
2740     for (TemplateDeclInstantiator::delayed_partial_spec_iterator
2741               P = Instantiator.delayed_partial_spec_begin(),
2742            PEnd = Instantiator.delayed_partial_spec_end();
2743          P != PEnd; ++P) {
2744       if (!Instantiator.InstantiateClassTemplatePartialSpecialization(
2745               P->first, P->second)) {
2746         Instantiation->setInvalidDecl();
2747         break;
2748       }
2749     }
2750 
2751     // Instantiate any out-of-line variable template partial
2752     // specializations now.
2753     for (TemplateDeclInstantiator::delayed_var_partial_spec_iterator
2754               P = Instantiator.delayed_var_partial_spec_begin(),
2755            PEnd = Instantiator.delayed_var_partial_spec_end();
2756          P != PEnd; ++P) {
2757       if (!Instantiator.InstantiateVarTemplatePartialSpecialization(
2758               P->first, P->second)) {
2759         Instantiation->setInvalidDecl();
2760         break;
2761       }
2762     }
2763   }
2764 
2765   // Exit the scope of this instantiation.
2766   SavedContext.pop();
2767 
2768   if (!Instantiation->isInvalidDecl()) {
2769     Consumer.HandleTagDeclDefinition(Instantiation);
2770 
2771     // Always emit the vtable for an explicit instantiation definition
2772     // of a polymorphic class template specialization. Otherwise, eagerly
2773     // instantiate only constexpr virtual functions in preparation for their use
2774     // in constant evaluation.
2775     if (TSK == TSK_ExplicitInstantiationDefinition)
2776       MarkVTableUsed(PointOfInstantiation, Instantiation, true);
2777     else if (MightHaveConstexprVirtualFunctions)
2778       MarkVirtualMembersReferenced(PointOfInstantiation, Instantiation,
2779                                    /*ConstexprOnly*/ true);
2780   }
2781 
2782   return Instantiation->isInvalidDecl();
2783 }
2784 
2785 /// Instantiate the definition of an enum from a given pattern.
2786 ///
2787 /// \param PointOfInstantiation The point of instantiation within the
2788 ///        source code.
2789 /// \param Instantiation is the declaration whose definition is being
2790 ///        instantiated. This will be a member enumeration of a class
2791 ///        temploid specialization, or a local enumeration within a
2792 ///        function temploid specialization.
2793 /// \param Pattern The templated declaration from which the instantiation
2794 ///        occurs.
2795 /// \param TemplateArgs The template arguments to be substituted into
2796 ///        the pattern.
2797 /// \param TSK The kind of implicit or explicit instantiation to perform.
2798 ///
2799 /// \return \c true if an error occurred, \c false otherwise.
2800 bool Sema::InstantiateEnum(SourceLocation PointOfInstantiation,
2801                            EnumDecl *Instantiation, EnumDecl *Pattern,
2802                            const MultiLevelTemplateArgumentList &TemplateArgs,
2803                            TemplateSpecializationKind TSK) {
2804   EnumDecl *PatternDef = Pattern->getDefinition();
2805   if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Instantiation,
2806                                  Instantiation->getInstantiatedFromMemberEnum(),
2807                                      Pattern, PatternDef, TSK,/*Complain*/true))
2808     return true;
2809   Pattern = PatternDef;
2810 
2811   // Record the point of instantiation.
2812   if (MemberSpecializationInfo *MSInfo
2813         = Instantiation->getMemberSpecializationInfo()) {
2814     MSInfo->setTemplateSpecializationKind(TSK);
2815     MSInfo->setPointOfInstantiation(PointOfInstantiation);
2816   }
2817 
2818   InstantiatingTemplate Inst(*this, PointOfInstantiation, Instantiation);
2819   if (Inst.isInvalid())
2820     return true;
2821   if (Inst.isAlreadyInstantiating())
2822     return false;
2823   PrettyDeclStackTraceEntry CrashInfo(Context, Instantiation, SourceLocation(),
2824                                       "instantiating enum definition");
2825 
2826   // The instantiation is visible here, even if it was first declared in an
2827   // unimported module.
2828   Instantiation->setVisibleDespiteOwningModule();
2829 
2830   // Enter the scope of this instantiation. We don't use
2831   // PushDeclContext because we don't have a scope.
2832   ContextRAII SavedContext(*this, Instantiation);
2833   EnterExpressionEvaluationContext EvalContext(
2834       *this, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
2835 
2836   LocalInstantiationScope Scope(*this, /*MergeWithParentScope*/true);
2837 
2838   // Pull attributes from the pattern onto the instantiation.
2839   InstantiateAttrs(TemplateArgs, Pattern, Instantiation);
2840 
2841   TemplateDeclInstantiator Instantiator(*this, Instantiation, TemplateArgs);
2842   Instantiator.InstantiateEnumDefinition(Instantiation, Pattern);
2843 
2844   // Exit the scope of this instantiation.
2845   SavedContext.pop();
2846 
2847   return Instantiation->isInvalidDecl();
2848 }
2849 
2850 
2851 /// Instantiate the definition of a field from the given pattern.
2852 ///
2853 /// \param PointOfInstantiation The point of instantiation within the
2854 ///        source code.
2855 /// \param Instantiation is the declaration whose definition is being
2856 ///        instantiated. This will be a class of a class temploid
2857 ///        specialization, or a local enumeration within a function temploid
2858 ///        specialization.
2859 /// \param Pattern The templated declaration from which the instantiation
2860 ///        occurs.
2861 /// \param TemplateArgs The template arguments to be substituted into
2862 ///        the pattern.
2863 ///
2864 /// \return \c true if an error occurred, \c false otherwise.
2865 bool Sema::InstantiateInClassInitializer(
2866     SourceLocation PointOfInstantiation, FieldDecl *Instantiation,
2867     FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs) {
2868   // If there is no initializer, we don't need to do anything.
2869   if (!Pattern->hasInClassInitializer())
2870     return false;
2871 
2872   assert(Instantiation->getInClassInitStyle() ==
2873              Pattern->getInClassInitStyle() &&
2874          "pattern and instantiation disagree about init style");
2875 
2876   // Error out if we haven't parsed the initializer of the pattern yet because
2877   // we are waiting for the closing brace of the outer class.
2878   Expr *OldInit = Pattern->getInClassInitializer();
2879   if (!OldInit) {
2880     RecordDecl *PatternRD = Pattern->getParent();
2881     RecordDecl *OutermostClass = PatternRD->getOuterLexicalRecordContext();
2882     Diag(PointOfInstantiation,
2883          diag::err_in_class_initializer_not_yet_parsed)
2884         << OutermostClass << Pattern;
2885     Diag(Pattern->getEndLoc(), diag::note_in_class_initializer_not_yet_parsed);
2886     Instantiation->setInvalidDecl();
2887     return true;
2888   }
2889 
2890   InstantiatingTemplate Inst(*this, PointOfInstantiation, Instantiation);
2891   if (Inst.isInvalid())
2892     return true;
2893   if (Inst.isAlreadyInstantiating()) {
2894     // Error out if we hit an instantiation cycle for this initializer.
2895     Diag(PointOfInstantiation, diag::err_in_class_initializer_cycle)
2896       << Instantiation;
2897     return true;
2898   }
2899   PrettyDeclStackTraceEntry CrashInfo(Context, Instantiation, SourceLocation(),
2900                                       "instantiating default member init");
2901 
2902   // Enter the scope of this instantiation. We don't use PushDeclContext because
2903   // we don't have a scope.
2904   ContextRAII SavedContext(*this, Instantiation->getParent());
2905   EnterExpressionEvaluationContext EvalContext(
2906       *this, Sema::ExpressionEvaluationContext::PotentiallyEvaluated);
2907 
2908   LocalInstantiationScope Scope(*this, true);
2909 
2910   // Instantiate the initializer.
2911   ActOnStartCXXInClassMemberInitializer();
2912   CXXThisScopeRAII ThisScope(*this, Instantiation->getParent(), Qualifiers());
2913 
2914   ExprResult NewInit = SubstInitializer(OldInit, TemplateArgs,
2915                                         /*CXXDirectInit=*/false);
2916   Expr *Init = NewInit.get();
2917   assert((!Init || !isa<ParenListExpr>(Init)) && "call-style init in class");
2918   ActOnFinishCXXInClassMemberInitializer(
2919       Instantiation, Init ? Init->getBeginLoc() : SourceLocation(), Init);
2920 
2921   if (auto *L = getASTMutationListener())
2922     L->DefaultMemberInitializerInstantiated(Instantiation);
2923 
2924   // Return true if the in-class initializer is still missing.
2925   return !Instantiation->getInClassInitializer();
2926 }
2927 
2928 namespace {
2929   /// A partial specialization whose template arguments have matched
2930   /// a given template-id.
2931   struct PartialSpecMatchResult {
2932     ClassTemplatePartialSpecializationDecl *Partial;
2933     TemplateArgumentList *Args;
2934   };
2935 }
2936 
2937 bool Sema::usesPartialOrExplicitSpecialization(
2938     SourceLocation Loc, ClassTemplateSpecializationDecl *ClassTemplateSpec) {
2939   if (ClassTemplateSpec->getTemplateSpecializationKind() ==
2940       TSK_ExplicitSpecialization)
2941     return true;
2942 
2943   SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs;
2944   ClassTemplateSpec->getSpecializedTemplate()
2945                    ->getPartialSpecializations(PartialSpecs);
2946   for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I) {
2947     TemplateDeductionInfo Info(Loc);
2948     if (!DeduceTemplateArguments(PartialSpecs[I],
2949                                  ClassTemplateSpec->getTemplateArgs(), Info))
2950       return true;
2951   }
2952 
2953   return false;
2954 }
2955 
2956 /// Get the instantiation pattern to use to instantiate the definition of a
2957 /// given ClassTemplateSpecializationDecl (either the pattern of the primary
2958 /// template or of a partial specialization).
2959 static CXXRecordDecl *
2960 getPatternForClassTemplateSpecialization(
2961     Sema &S, SourceLocation PointOfInstantiation,
2962     ClassTemplateSpecializationDecl *ClassTemplateSpec,
2963     TemplateSpecializationKind TSK, bool Complain) {
2964   Sema::InstantiatingTemplate Inst(S, PointOfInstantiation, ClassTemplateSpec);
2965   if (Inst.isInvalid() || Inst.isAlreadyInstantiating())
2966     return nullptr;
2967 
2968   llvm::PointerUnion<ClassTemplateDecl *,
2969                      ClassTemplatePartialSpecializationDecl *>
2970       Specialized = ClassTemplateSpec->getSpecializedTemplateOrPartial();
2971   if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {
2972     // Find best matching specialization.
2973     ClassTemplateDecl *Template = ClassTemplateSpec->getSpecializedTemplate();
2974 
2975     // C++ [temp.class.spec.match]p1:
2976     //   When a class template is used in a context that requires an
2977     //   instantiation of the class, it is necessary to determine
2978     //   whether the instantiation is to be generated using the primary
2979     //   template or one of the partial specializations. This is done by
2980     //   matching the template arguments of the class template
2981     //   specialization with the template argument lists of the partial
2982     //   specializations.
2983     typedef PartialSpecMatchResult MatchResult;
2984     SmallVector<MatchResult, 4> Matched;
2985     SmallVector<ClassTemplatePartialSpecializationDecl *, 4> PartialSpecs;
2986     Template->getPartialSpecializations(PartialSpecs);
2987     TemplateSpecCandidateSet FailedCandidates(PointOfInstantiation);
2988     for (unsigned I = 0, N = PartialSpecs.size(); I != N; ++I) {
2989       ClassTemplatePartialSpecializationDecl *Partial = PartialSpecs[I];
2990       TemplateDeductionInfo Info(FailedCandidates.getLocation());
2991       if (Sema::TemplateDeductionResult Result = S.DeduceTemplateArguments(
2992               Partial, ClassTemplateSpec->getTemplateArgs(), Info)) {
2993         // Store the failed-deduction information for use in diagnostics, later.
2994         // TODO: Actually use the failed-deduction info?
2995         FailedCandidates.addCandidate().set(
2996             DeclAccessPair::make(Template, AS_public), Partial,
2997             MakeDeductionFailureInfo(S.Context, Result, Info));
2998         (void)Result;
2999       } else {
3000         Matched.push_back(PartialSpecMatchResult());
3001         Matched.back().Partial = Partial;
3002         Matched.back().Args = Info.take();
3003       }
3004     }
3005 
3006     // If we're dealing with a member template where the template parameters
3007     // have been instantiated, this provides the original template parameters
3008     // from which the member template's parameters were instantiated.
3009 
3010     if (Matched.size() >= 1) {
3011       SmallVectorImpl<MatchResult>::iterator Best = Matched.begin();
3012       if (Matched.size() == 1) {
3013         //   -- If exactly one matching specialization is found, the
3014         //      instantiation is generated from that specialization.
3015         // We don't need to do anything for this.
3016       } else {
3017         //   -- If more than one matching specialization is found, the
3018         //      partial order rules (14.5.4.2) are used to determine
3019         //      whether one of the specializations is more specialized
3020         //      than the others. If none of the specializations is more
3021         //      specialized than all of the other matching
3022         //      specializations, then the use of the class template is
3023         //      ambiguous and the program is ill-formed.
3024         for (SmallVectorImpl<MatchResult>::iterator P = Best + 1,
3025                                                  PEnd = Matched.end();
3026              P != PEnd; ++P) {
3027           if (S.getMoreSpecializedPartialSpecialization(
3028                   P->Partial, Best->Partial, PointOfInstantiation) ==
3029               P->Partial)
3030             Best = P;
3031         }
3032 
3033         // Determine if the best partial specialization is more specialized than
3034         // the others.
3035         bool Ambiguous = false;
3036         for (SmallVectorImpl<MatchResult>::iterator P = Matched.begin(),
3037                                                  PEnd = Matched.end();
3038              P != PEnd; ++P) {
3039           if (P != Best && S.getMoreSpecializedPartialSpecialization(
3040                                P->Partial, Best->Partial,
3041                                PointOfInstantiation) != Best->Partial) {
3042             Ambiguous = true;
3043             break;
3044           }
3045         }
3046 
3047         if (Ambiguous) {
3048           // Partial ordering did not produce a clear winner. Complain.
3049           Inst.Clear();
3050           ClassTemplateSpec->setInvalidDecl();
3051           S.Diag(PointOfInstantiation,
3052                  diag::err_partial_spec_ordering_ambiguous)
3053               << ClassTemplateSpec;
3054 
3055           // Print the matching partial specializations.
3056           for (SmallVectorImpl<MatchResult>::iterator P = Matched.begin(),
3057                                                    PEnd = Matched.end();
3058                P != PEnd; ++P)
3059             S.Diag(P->Partial->getLocation(), diag::note_partial_spec_match)
3060                 << S.getTemplateArgumentBindingsText(
3061                        P->Partial->getTemplateParameters(), *P->Args);
3062 
3063           return nullptr;
3064         }
3065       }
3066 
3067       ClassTemplateSpec->setInstantiationOf(Best->Partial, Best->Args);
3068     } else {
3069       //   -- If no matches are found, the instantiation is generated
3070       //      from the primary template.
3071     }
3072   }
3073 
3074   CXXRecordDecl *Pattern = nullptr;
3075   Specialized = ClassTemplateSpec->getSpecializedTemplateOrPartial();
3076   if (auto *PartialSpec =
3077           Specialized.dyn_cast<ClassTemplatePartialSpecializationDecl *>()) {
3078     // Instantiate using the best class template partial specialization.
3079     while (PartialSpec->getInstantiatedFromMember()) {
3080       // If we've found an explicit specialization of this class template,
3081       // stop here and use that as the pattern.
3082       if (PartialSpec->isMemberSpecialization())
3083         break;
3084 
3085       PartialSpec = PartialSpec->getInstantiatedFromMember();
3086     }
3087     Pattern = PartialSpec;
3088   } else {
3089     ClassTemplateDecl *Template = ClassTemplateSpec->getSpecializedTemplate();
3090     while (Template->getInstantiatedFromMemberTemplate()) {
3091       // If we've found an explicit specialization of this class template,
3092       // stop here and use that as the pattern.
3093       if (Template->isMemberSpecialization())
3094         break;
3095 
3096       Template = Template->getInstantiatedFromMemberTemplate();
3097     }
3098     Pattern = Template->getTemplatedDecl();
3099   }
3100 
3101   return Pattern;
3102 }
3103 
3104 bool Sema::InstantiateClassTemplateSpecialization(
3105     SourceLocation PointOfInstantiation,
3106     ClassTemplateSpecializationDecl *ClassTemplateSpec,
3107     TemplateSpecializationKind TSK, bool Complain) {
3108   // Perform the actual instantiation on the canonical declaration.
3109   ClassTemplateSpec = cast<ClassTemplateSpecializationDecl>(
3110       ClassTemplateSpec->getCanonicalDecl());
3111   if (ClassTemplateSpec->isInvalidDecl())
3112     return true;
3113 
3114   CXXRecordDecl *Pattern = getPatternForClassTemplateSpecialization(
3115       *this, PointOfInstantiation, ClassTemplateSpec, TSK, Complain);
3116   if (!Pattern)
3117     return true;
3118 
3119   return InstantiateClass(PointOfInstantiation, ClassTemplateSpec, Pattern,
3120                           getTemplateInstantiationArgs(ClassTemplateSpec), TSK,
3121                           Complain);
3122 }
3123 
3124 /// Instantiates the definitions of all of the member
3125 /// of the given class, which is an instantiation of a class template
3126 /// or a member class of a template.
3127 void
3128 Sema::InstantiateClassMembers(SourceLocation PointOfInstantiation,
3129                               CXXRecordDecl *Instantiation,
3130                         const MultiLevelTemplateArgumentList &TemplateArgs,
3131                               TemplateSpecializationKind TSK) {
3132   // FIXME: We need to notify the ASTMutationListener that we did all of these
3133   // things, in case we have an explicit instantiation definition in a PCM, a
3134   // module, or preamble, and the declaration is in an imported AST.
3135   assert(
3136       (TSK == TSK_ExplicitInstantiationDefinition ||
3137        TSK == TSK_ExplicitInstantiationDeclaration ||
3138        (TSK == TSK_ImplicitInstantiation && Instantiation->isLocalClass())) &&
3139       "Unexpected template specialization kind!");
3140   for (auto *D : Instantiation->decls()) {
3141     bool SuppressNew = false;
3142     if (auto *Function = dyn_cast<FunctionDecl>(D)) {
3143       if (FunctionDecl *Pattern =
3144               Function->getInstantiatedFromMemberFunction()) {
3145 
3146         if (Function->hasAttr<ExcludeFromExplicitInstantiationAttr>())
3147           continue;
3148 
3149         MemberSpecializationInfo *MSInfo =
3150             Function->getMemberSpecializationInfo();
3151         assert(MSInfo && "No member specialization information?");
3152         if (MSInfo->getTemplateSpecializationKind()
3153                                                  == TSK_ExplicitSpecialization)
3154           continue;
3155 
3156         if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
3157                                                    Function,
3158                                         MSInfo->getTemplateSpecializationKind(),
3159                                               MSInfo->getPointOfInstantiation(),
3160                                                    SuppressNew) ||
3161             SuppressNew)
3162           continue;
3163 
3164         // C++11 [temp.explicit]p8:
3165         //   An explicit instantiation definition that names a class template
3166         //   specialization explicitly instantiates the class template
3167         //   specialization and is only an explicit instantiation definition
3168         //   of members whose definition is visible at the point of
3169         //   instantiation.
3170         if (TSK == TSK_ExplicitInstantiationDefinition && !Pattern->isDefined())
3171           continue;
3172 
3173         Function->setTemplateSpecializationKind(TSK, PointOfInstantiation);
3174 
3175         if (Function->isDefined()) {
3176           // Let the ASTConsumer know that this function has been explicitly
3177           // instantiated now, and its linkage might have changed.
3178           Consumer.HandleTopLevelDecl(DeclGroupRef(Function));
3179         } else if (TSK == TSK_ExplicitInstantiationDefinition) {
3180           InstantiateFunctionDefinition(PointOfInstantiation, Function);
3181         } else if (TSK == TSK_ImplicitInstantiation) {
3182           PendingLocalImplicitInstantiations.push_back(
3183               std::make_pair(Function, PointOfInstantiation));
3184         }
3185       }
3186     } else if (auto *Var = dyn_cast<VarDecl>(D)) {
3187       if (isa<VarTemplateSpecializationDecl>(Var))
3188         continue;
3189 
3190       if (Var->isStaticDataMember()) {
3191         if (Var->hasAttr<ExcludeFromExplicitInstantiationAttr>())
3192           continue;
3193 
3194         MemberSpecializationInfo *MSInfo = Var->getMemberSpecializationInfo();
3195         assert(MSInfo && "No member specialization information?");
3196         if (MSInfo->getTemplateSpecializationKind()
3197                                                  == TSK_ExplicitSpecialization)
3198           continue;
3199 
3200         if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
3201                                                    Var,
3202                                         MSInfo->getTemplateSpecializationKind(),
3203                                               MSInfo->getPointOfInstantiation(),
3204                                                    SuppressNew) ||
3205             SuppressNew)
3206           continue;
3207 
3208         if (TSK == TSK_ExplicitInstantiationDefinition) {
3209           // C++0x [temp.explicit]p8:
3210           //   An explicit instantiation definition that names a class template
3211           //   specialization explicitly instantiates the class template
3212           //   specialization and is only an explicit instantiation definition
3213           //   of members whose definition is visible at the point of
3214           //   instantiation.
3215           if (!Var->getInstantiatedFromStaticDataMember()->getDefinition())
3216             continue;
3217 
3218           Var->setTemplateSpecializationKind(TSK, PointOfInstantiation);
3219           InstantiateVariableDefinition(PointOfInstantiation, Var);
3220         } else {
3221           Var->setTemplateSpecializationKind(TSK, PointOfInstantiation);
3222         }
3223       }
3224     } else if (auto *Record = dyn_cast<CXXRecordDecl>(D)) {
3225       if (Record->hasAttr<ExcludeFromExplicitInstantiationAttr>())
3226         continue;
3227 
3228       // Always skip the injected-class-name, along with any
3229       // redeclarations of nested classes, since both would cause us
3230       // to try to instantiate the members of a class twice.
3231       // Skip closure types; they'll get instantiated when we instantiate
3232       // the corresponding lambda-expression.
3233       if (Record->isInjectedClassName() || Record->getPreviousDecl() ||
3234           Record->isLambda())
3235         continue;
3236 
3237       MemberSpecializationInfo *MSInfo = Record->getMemberSpecializationInfo();
3238       assert(MSInfo && "No member specialization information?");
3239 
3240       if (MSInfo->getTemplateSpecializationKind()
3241                                                 == TSK_ExplicitSpecialization)
3242         continue;
3243 
3244       if (Context.getTargetInfo().getTriple().isOSWindows() &&
3245           TSK == TSK_ExplicitInstantiationDeclaration) {
3246         // On Windows, explicit instantiation decl of the outer class doesn't
3247         // affect the inner class. Typically extern template declarations are
3248         // used in combination with dll import/export annotations, but those
3249         // are not propagated from the outer class templates to inner classes.
3250         // Therefore, do not instantiate inner classes on this platform, so
3251         // that users don't end up with undefined symbols during linking.
3252         continue;
3253       }
3254 
3255       if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
3256                                                  Record,
3257                                         MSInfo->getTemplateSpecializationKind(),
3258                                               MSInfo->getPointOfInstantiation(),
3259                                                  SuppressNew) ||
3260           SuppressNew)
3261         continue;
3262 
3263       CXXRecordDecl *Pattern = Record->getInstantiatedFromMemberClass();
3264       assert(Pattern && "Missing instantiated-from-template information");
3265 
3266       if (!Record->getDefinition()) {
3267         if (!Pattern->getDefinition()) {
3268           // C++0x [temp.explicit]p8:
3269           //   An explicit instantiation definition that names a class template
3270           //   specialization explicitly instantiates the class template
3271           //   specialization and is only an explicit instantiation definition
3272           //   of members whose definition is visible at the point of
3273           //   instantiation.
3274           if (TSK == TSK_ExplicitInstantiationDeclaration) {
3275             MSInfo->setTemplateSpecializationKind(TSK);
3276             MSInfo->setPointOfInstantiation(PointOfInstantiation);
3277           }
3278 
3279           continue;
3280         }
3281 
3282         InstantiateClass(PointOfInstantiation, Record, Pattern,
3283                          TemplateArgs,
3284                          TSK);
3285       } else {
3286         if (TSK == TSK_ExplicitInstantiationDefinition &&
3287             Record->getTemplateSpecializationKind() ==
3288                 TSK_ExplicitInstantiationDeclaration) {
3289           Record->setTemplateSpecializationKind(TSK);
3290           MarkVTableUsed(PointOfInstantiation, Record, true);
3291         }
3292       }
3293 
3294       Pattern = cast_or_null<CXXRecordDecl>(Record->getDefinition());
3295       if (Pattern)
3296         InstantiateClassMembers(PointOfInstantiation, Pattern, TemplateArgs,
3297                                 TSK);
3298     } else if (auto *Enum = dyn_cast<EnumDecl>(D)) {
3299       MemberSpecializationInfo *MSInfo = Enum->getMemberSpecializationInfo();
3300       assert(MSInfo && "No member specialization information?");
3301 
3302       if (MSInfo->getTemplateSpecializationKind()
3303             == TSK_ExplicitSpecialization)
3304         continue;
3305 
3306       if (CheckSpecializationInstantiationRedecl(
3307             PointOfInstantiation, TSK, Enum,
3308             MSInfo->getTemplateSpecializationKind(),
3309             MSInfo->getPointOfInstantiation(), SuppressNew) ||
3310           SuppressNew)
3311         continue;
3312 
3313       if (Enum->getDefinition())
3314         continue;
3315 
3316       EnumDecl *Pattern = Enum->getTemplateInstantiationPattern();
3317       assert(Pattern && "Missing instantiated-from-template information");
3318 
3319       if (TSK == TSK_ExplicitInstantiationDefinition) {
3320         if (!Pattern->getDefinition())
3321           continue;
3322 
3323         InstantiateEnum(PointOfInstantiation, Enum, Pattern, TemplateArgs, TSK);
3324       } else {
3325         MSInfo->setTemplateSpecializationKind(TSK);
3326         MSInfo->setPointOfInstantiation(PointOfInstantiation);
3327       }
3328     } else if (auto *Field = dyn_cast<FieldDecl>(D)) {
3329       // No need to instantiate in-class initializers during explicit
3330       // instantiation.
3331       if (Field->hasInClassInitializer() && TSK == TSK_ImplicitInstantiation) {
3332         CXXRecordDecl *ClassPattern =
3333             Instantiation->getTemplateInstantiationPattern();
3334         DeclContext::lookup_result Lookup =
3335             ClassPattern->lookup(Field->getDeclName());
3336         FieldDecl *Pattern = cast<FieldDecl>(Lookup.front());
3337         InstantiateInClassInitializer(PointOfInstantiation, Field, Pattern,
3338                                       TemplateArgs);
3339       }
3340     }
3341   }
3342 }
3343 
3344 /// Instantiate the definitions of all of the members of the
3345 /// given class template specialization, which was named as part of an
3346 /// explicit instantiation.
3347 void
3348 Sema::InstantiateClassTemplateSpecializationMembers(
3349                                            SourceLocation PointOfInstantiation,
3350                             ClassTemplateSpecializationDecl *ClassTemplateSpec,
3351                                                TemplateSpecializationKind TSK) {
3352   // C++0x [temp.explicit]p7:
3353   //   An explicit instantiation that names a class template
3354   //   specialization is an explicit instantion of the same kind
3355   //   (declaration or definition) of each of its members (not
3356   //   including members inherited from base classes) that has not
3357   //   been previously explicitly specialized in the translation unit
3358   //   containing the explicit instantiation, except as described
3359   //   below.
3360   InstantiateClassMembers(PointOfInstantiation, ClassTemplateSpec,
3361                           getTemplateInstantiationArgs(ClassTemplateSpec),
3362                           TSK);
3363 }
3364 
3365 StmtResult
3366 Sema::SubstStmt(Stmt *S, const MultiLevelTemplateArgumentList &TemplateArgs) {
3367   if (!S)
3368     return S;
3369 
3370   TemplateInstantiator Instantiator(*this, TemplateArgs,
3371                                     SourceLocation(),
3372                                     DeclarationName());
3373   return Instantiator.TransformStmt(S);
3374 }
3375 
3376 bool Sema::SubstTemplateArguments(
3377     ArrayRef<TemplateArgumentLoc> Args,
3378     const MultiLevelTemplateArgumentList &TemplateArgs,
3379     TemplateArgumentListInfo &Out) {
3380   TemplateInstantiator Instantiator(*this, TemplateArgs,
3381                                     SourceLocation(),
3382                                     DeclarationName());
3383   return Instantiator.TransformTemplateArguments(Args.begin(), Args.end(),
3384                                                  Out);
3385 }
3386 
3387 ExprResult
3388 Sema::SubstExpr(Expr *E, const MultiLevelTemplateArgumentList &TemplateArgs) {
3389   if (!E)
3390     return E;
3391 
3392   TemplateInstantiator Instantiator(*this, TemplateArgs,
3393                                     SourceLocation(),
3394                                     DeclarationName());
3395   return Instantiator.TransformExpr(E);
3396 }
3397 
3398 ExprResult Sema::SubstInitializer(Expr *Init,
3399                           const MultiLevelTemplateArgumentList &TemplateArgs,
3400                           bool CXXDirectInit) {
3401   TemplateInstantiator Instantiator(*this, TemplateArgs,
3402                                     SourceLocation(),
3403                                     DeclarationName());
3404   return Instantiator.TransformInitializer(Init, CXXDirectInit);
3405 }
3406 
3407 bool Sema::SubstExprs(ArrayRef<Expr *> Exprs, bool IsCall,
3408                       const MultiLevelTemplateArgumentList &TemplateArgs,
3409                       SmallVectorImpl<Expr *> &Outputs) {
3410   if (Exprs.empty())
3411     return false;
3412 
3413   TemplateInstantiator Instantiator(*this, TemplateArgs,
3414                                     SourceLocation(),
3415                                     DeclarationName());
3416   return Instantiator.TransformExprs(Exprs.data(), Exprs.size(),
3417                                      IsCall, Outputs);
3418 }
3419 
3420 NestedNameSpecifierLoc
3421 Sema::SubstNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
3422                         const MultiLevelTemplateArgumentList &TemplateArgs) {
3423   if (!NNS)
3424     return NestedNameSpecifierLoc();
3425 
3426   TemplateInstantiator Instantiator(*this, TemplateArgs, NNS.getBeginLoc(),
3427                                     DeclarationName());
3428   return Instantiator.TransformNestedNameSpecifierLoc(NNS);
3429 }
3430 
3431 /// Do template substitution on declaration name info.
3432 DeclarationNameInfo
3433 Sema::SubstDeclarationNameInfo(const DeclarationNameInfo &NameInfo,
3434                          const MultiLevelTemplateArgumentList &TemplateArgs) {
3435   TemplateInstantiator Instantiator(*this, TemplateArgs, NameInfo.getLoc(),
3436                                     NameInfo.getName());
3437   return Instantiator.TransformDeclarationNameInfo(NameInfo);
3438 }
3439 
3440 TemplateName
3441 Sema::SubstTemplateName(NestedNameSpecifierLoc QualifierLoc,
3442                         TemplateName Name, SourceLocation Loc,
3443                         const MultiLevelTemplateArgumentList &TemplateArgs) {
3444   TemplateInstantiator Instantiator(*this, TemplateArgs, Loc,
3445                                     DeclarationName());
3446   CXXScopeSpec SS;
3447   SS.Adopt(QualifierLoc);
3448   return Instantiator.TransformTemplateName(SS, Name, Loc);
3449 }
3450 
3451 bool Sema::Subst(const TemplateArgumentLoc *Args, unsigned NumArgs,
3452                  TemplateArgumentListInfo &Result,
3453                  const MultiLevelTemplateArgumentList &TemplateArgs) {
3454   TemplateInstantiator Instantiator(*this, TemplateArgs, SourceLocation(),
3455                                     DeclarationName());
3456 
3457   return Instantiator.TransformTemplateArguments(Args, NumArgs, Result);
3458 }
3459 
3460 static const Decl *getCanonicalParmVarDecl(const Decl *D) {
3461   // When storing ParmVarDecls in the local instantiation scope, we always
3462   // want to use the ParmVarDecl from the canonical function declaration,
3463   // since the map is then valid for any redeclaration or definition of that
3464   // function.
3465   if (const ParmVarDecl *PV = dyn_cast<ParmVarDecl>(D)) {
3466     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(PV->getDeclContext())) {
3467       unsigned i = PV->getFunctionScopeIndex();
3468       // This parameter might be from a freestanding function type within the
3469       // function and isn't necessarily referring to one of FD's parameters.
3470       if (i < FD->getNumParams() && FD->getParamDecl(i) == PV)
3471         return FD->getCanonicalDecl()->getParamDecl(i);
3472     }
3473   }
3474   return D;
3475 }
3476 
3477 
3478 llvm::PointerUnion<Decl *, LocalInstantiationScope::DeclArgumentPack *> *
3479 LocalInstantiationScope::findInstantiationOf(const Decl *D) {
3480   D = getCanonicalParmVarDecl(D);
3481   for (LocalInstantiationScope *Current = this; Current;
3482        Current = Current->Outer) {
3483 
3484     // Check if we found something within this scope.
3485     const Decl *CheckD = D;
3486     do {
3487       LocalDeclsMap::iterator Found = Current->LocalDecls.find(CheckD);
3488       if (Found != Current->LocalDecls.end())
3489         return &Found->second;
3490 
3491       // If this is a tag declaration, it's possible that we need to look for
3492       // a previous declaration.
3493       if (const TagDecl *Tag = dyn_cast<TagDecl>(CheckD))
3494         CheckD = Tag->getPreviousDecl();
3495       else
3496         CheckD = nullptr;
3497     } while (CheckD);
3498 
3499     // If we aren't combined with our outer scope, we're done.
3500     if (!Current->CombineWithOuterScope)
3501       break;
3502   }
3503 
3504   // If we're performing a partial substitution during template argument
3505   // deduction, we may not have values for template parameters yet.
3506   if (isa<NonTypeTemplateParmDecl>(D) || isa<TemplateTypeParmDecl>(D) ||
3507       isa<TemplateTemplateParmDecl>(D))
3508     return nullptr;
3509 
3510   // Local types referenced prior to definition may require instantiation.
3511   if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D))
3512     if (RD->isLocalClass())
3513       return nullptr;
3514 
3515   // Enumeration types referenced prior to definition may appear as a result of
3516   // error recovery.
3517   if (isa<EnumDecl>(D))
3518     return nullptr;
3519 
3520   // If we didn't find the decl, then we either have a sema bug, or we have a
3521   // forward reference to a label declaration.  Return null to indicate that
3522   // we have an uninstantiated label.
3523   assert(isa<LabelDecl>(D) && "declaration not instantiated in this scope");
3524   return nullptr;
3525 }
3526 
3527 void LocalInstantiationScope::InstantiatedLocal(const Decl *D, Decl *Inst) {
3528   D = getCanonicalParmVarDecl(D);
3529   llvm::PointerUnion<Decl *, DeclArgumentPack *> &Stored = LocalDecls[D];
3530   if (Stored.isNull()) {
3531 #ifndef NDEBUG
3532     // It should not be present in any surrounding scope either.
3533     LocalInstantiationScope *Current = this;
3534     while (Current->CombineWithOuterScope && Current->Outer) {
3535       Current = Current->Outer;
3536       assert(Current->LocalDecls.find(D) == Current->LocalDecls.end() &&
3537              "Instantiated local in inner and outer scopes");
3538     }
3539 #endif
3540     Stored = Inst;
3541   } else if (DeclArgumentPack *Pack = Stored.dyn_cast<DeclArgumentPack *>()) {
3542     Pack->push_back(cast<VarDecl>(Inst));
3543   } else {
3544     assert(Stored.get<Decl *>() == Inst && "Already instantiated this local");
3545   }
3546 }
3547 
3548 void LocalInstantiationScope::InstantiatedLocalPackArg(const Decl *D,
3549                                                        VarDecl *Inst) {
3550   D = getCanonicalParmVarDecl(D);
3551   DeclArgumentPack *Pack = LocalDecls[D].get<DeclArgumentPack *>();
3552   Pack->push_back(Inst);
3553 }
3554 
3555 void LocalInstantiationScope::MakeInstantiatedLocalArgPack(const Decl *D) {
3556 #ifndef NDEBUG
3557   // This should be the first time we've been told about this decl.
3558   for (LocalInstantiationScope *Current = this;
3559        Current && Current->CombineWithOuterScope; Current = Current->Outer)
3560     assert(Current->LocalDecls.find(D) == Current->LocalDecls.end() &&
3561            "Creating local pack after instantiation of local");
3562 #endif
3563 
3564   D = getCanonicalParmVarDecl(D);
3565   llvm::PointerUnion<Decl *, DeclArgumentPack *> &Stored = LocalDecls[D];
3566   DeclArgumentPack *Pack = new DeclArgumentPack;
3567   Stored = Pack;
3568   ArgumentPacks.push_back(Pack);
3569 }
3570 
3571 void LocalInstantiationScope::SetPartiallySubstitutedPack(NamedDecl *Pack,
3572                                           const TemplateArgument *ExplicitArgs,
3573                                                     unsigned NumExplicitArgs) {
3574   assert((!PartiallySubstitutedPack || PartiallySubstitutedPack == Pack) &&
3575          "Already have a partially-substituted pack");
3576   assert((!PartiallySubstitutedPack
3577           || NumArgsInPartiallySubstitutedPack == NumExplicitArgs) &&
3578          "Wrong number of arguments in partially-substituted pack");
3579   PartiallySubstitutedPack = Pack;
3580   ArgsInPartiallySubstitutedPack = ExplicitArgs;
3581   NumArgsInPartiallySubstitutedPack = NumExplicitArgs;
3582 }
3583 
3584 NamedDecl *LocalInstantiationScope::getPartiallySubstitutedPack(
3585                                          const TemplateArgument **ExplicitArgs,
3586                                               unsigned *NumExplicitArgs) const {
3587   if (ExplicitArgs)
3588     *ExplicitArgs = nullptr;
3589   if (NumExplicitArgs)
3590     *NumExplicitArgs = 0;
3591 
3592   for (const LocalInstantiationScope *Current = this; Current;
3593        Current = Current->Outer) {
3594     if (Current->PartiallySubstitutedPack) {
3595       if (ExplicitArgs)
3596         *ExplicitArgs = Current->ArgsInPartiallySubstitutedPack;
3597       if (NumExplicitArgs)
3598         *NumExplicitArgs = Current->NumArgsInPartiallySubstitutedPack;
3599 
3600       return Current->PartiallySubstitutedPack;
3601     }
3602 
3603     if (!Current->CombineWithOuterScope)
3604       break;
3605   }
3606 
3607   return nullptr;
3608 }
3609