1 //===------- SemaTemplateDeduction.cpp - Template Argument Deduction ------===/
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //===----------------------------------------------------------------------===/
8 //
9 //  This file implements C++ template argument deduction.
10 //
11 //===----------------------------------------------------------------------===/
12 
13 #include "clang/Sema/TemplateDeduction.h"
14 #include "TreeTransform.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/ASTLambda.h"
17 #include "clang/AST/DeclObjC.h"
18 #include "clang/AST/DeclTemplate.h"
19 #include "clang/AST/Expr.h"
20 #include "clang/AST/ExprCXX.h"
21 #include "clang/AST/StmtVisitor.h"
22 #include "clang/AST/TypeOrdering.h"
23 #include "clang/Sema/DeclSpec.h"
24 #include "clang/Sema/Sema.h"
25 #include "clang/Sema/Template.h"
26 #include "llvm/ADT/SmallBitVector.h"
27 #include <algorithm>
28 
29 namespace clang {
30   using namespace sema;
31   /// \brief Various flags that control template argument deduction.
32   ///
33   /// These flags can be bitwise-OR'd together.
34   enum TemplateDeductionFlags {
35     /// \brief No template argument deduction flags, which indicates the
36     /// strictest results for template argument deduction (as used for, e.g.,
37     /// matching class template partial specializations).
38     TDF_None = 0,
39     /// \brief Within template argument deduction from a function call, we are
40     /// matching with a parameter type for which the original parameter was
41     /// a reference.
42     TDF_ParamWithReferenceType = 0x1,
43     /// \brief Within template argument deduction from a function call, we
44     /// are matching in a case where we ignore cv-qualifiers.
45     TDF_IgnoreQualifiers = 0x02,
46     /// \brief Within template argument deduction from a function call,
47     /// we are matching in a case where we can perform template argument
48     /// deduction from a template-id of a derived class of the argument type.
49     TDF_DerivedClass = 0x04,
50     /// \brief Allow non-dependent types to differ, e.g., when performing
51     /// template argument deduction from a function call where conversions
52     /// may apply.
53     TDF_SkipNonDependent = 0x08,
54     /// \brief Whether we are performing template argument deduction for
55     /// parameters and arguments in a top-level template argument
56     TDF_TopLevelParameterTypeList = 0x10,
57     /// \brief Within template argument deduction from overload resolution per
58     /// C++ [over.over] allow matching function types that are compatible in
59     /// terms of noreturn and default calling convention adjustments.
60     TDF_InOverloadResolution = 0x20
61   };
62 }
63 
64 using namespace clang;
65 
66 /// \brief Compare two APSInts, extending and switching the sign as
67 /// necessary to compare their values regardless of underlying type.
68 static bool hasSameExtendedValue(llvm::APSInt X, llvm::APSInt Y) {
69   if (Y.getBitWidth() > X.getBitWidth())
70     X = X.extend(Y.getBitWidth());
71   else if (Y.getBitWidth() < X.getBitWidth())
72     Y = Y.extend(X.getBitWidth());
73 
74   // If there is a signedness mismatch, correct it.
75   if (X.isSigned() != Y.isSigned()) {
76     // If the signed value is negative, then the values cannot be the same.
77     if ((Y.isSigned() && Y.isNegative()) || (X.isSigned() && X.isNegative()))
78       return false;
79 
80     Y.setIsSigned(true);
81     X.setIsSigned(true);
82   }
83 
84   return X == Y;
85 }
86 
87 static Sema::TemplateDeductionResult
88 DeduceTemplateArguments(Sema &S,
89                         TemplateParameterList *TemplateParams,
90                         const TemplateArgument &Param,
91                         TemplateArgument Arg,
92                         TemplateDeductionInfo &Info,
93                         SmallVectorImpl<DeducedTemplateArgument> &Deduced);
94 
95 static Sema::TemplateDeductionResult
96 DeduceTemplateArgumentsByTypeMatch(Sema &S,
97                                    TemplateParameterList *TemplateParams,
98                                    QualType Param,
99                                    QualType Arg,
100                                    TemplateDeductionInfo &Info,
101                                    SmallVectorImpl<DeducedTemplateArgument> &
102                                                       Deduced,
103                                    unsigned TDF,
104                                    bool PartialOrdering = false,
105                                    bool DeducedFromArrayBound = false);
106 
107 static Sema::TemplateDeductionResult
108 DeduceTemplateArguments(Sema &S, TemplateParameterList *TemplateParams,
109                         ArrayRef<TemplateArgument> Params,
110                         ArrayRef<TemplateArgument> Args,
111                         TemplateDeductionInfo &Info,
112                         SmallVectorImpl<DeducedTemplateArgument> &Deduced,
113                         bool NumberOfArgumentsMustMatch);
114 
115 /// \brief If the given expression is of a form that permits the deduction
116 /// of a non-type template parameter, return the declaration of that
117 /// non-type template parameter.
118 static NonTypeTemplateParmDecl *
119 getDeducedParameterFromExpr(TemplateDeductionInfo &Info, Expr *E) {
120   // If we are within an alias template, the expression may have undergone
121   // any number of parameter substitutions already.
122   while (1) {
123     if (ImplicitCastExpr *IC = dyn_cast<ImplicitCastExpr>(E))
124       E = IC->getSubExpr();
125     else if (SubstNonTypeTemplateParmExpr *Subst =
126                dyn_cast<SubstNonTypeTemplateParmExpr>(E))
127       E = Subst->getReplacement();
128     else
129       break;
130   }
131 
132   if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
133     if (auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(DRE->getDecl()))
134       if (NTTP->getDepth() == Info.getDeducedDepth())
135         return NTTP;
136 
137   return nullptr;
138 }
139 
140 /// \brief Determine whether two declaration pointers refer to the same
141 /// declaration.
142 static bool isSameDeclaration(Decl *X, Decl *Y) {
143   if (NamedDecl *NX = dyn_cast<NamedDecl>(X))
144     X = NX->getUnderlyingDecl();
145   if (NamedDecl *NY = dyn_cast<NamedDecl>(Y))
146     Y = NY->getUnderlyingDecl();
147 
148   return X->getCanonicalDecl() == Y->getCanonicalDecl();
149 }
150 
151 /// \brief Verify that the given, deduced template arguments are compatible.
152 ///
153 /// \returns The deduced template argument, or a NULL template argument if
154 /// the deduced template arguments were incompatible.
155 static DeducedTemplateArgument
156 checkDeducedTemplateArguments(ASTContext &Context,
157                               const DeducedTemplateArgument &X,
158                               const DeducedTemplateArgument &Y) {
159   // We have no deduction for one or both of the arguments; they're compatible.
160   if (X.isNull())
161     return Y;
162   if (Y.isNull())
163     return X;
164 
165   // If we have two non-type template argument values deduced for the same
166   // parameter, they must both match the type of the parameter, and thus must
167   // match each other's type. As we're only keeping one of them, we must check
168   // for that now. The exception is that if either was deduced from an array
169   // bound, the type is permitted to differ.
170   if (!X.wasDeducedFromArrayBound() && !Y.wasDeducedFromArrayBound()) {
171     QualType XType = X.getNonTypeTemplateArgumentType();
172     if (!XType.isNull()) {
173       QualType YType = Y.getNonTypeTemplateArgumentType();
174       if (YType.isNull() || !Context.hasSameType(XType, YType))
175         return DeducedTemplateArgument();
176     }
177   }
178 
179   switch (X.getKind()) {
180   case TemplateArgument::Null:
181     llvm_unreachable("Non-deduced template arguments handled above");
182 
183   case TemplateArgument::Type:
184     // If two template type arguments have the same type, they're compatible.
185     if (Y.getKind() == TemplateArgument::Type &&
186         Context.hasSameType(X.getAsType(), Y.getAsType()))
187       return X;
188 
189     // If one of the two arguments was deduced from an array bound, the other
190     // supersedes it.
191     if (X.wasDeducedFromArrayBound() != Y.wasDeducedFromArrayBound())
192       return X.wasDeducedFromArrayBound() ? Y : X;
193 
194     // The arguments are not compatible.
195     return DeducedTemplateArgument();
196 
197   case TemplateArgument::Integral:
198     // If we deduced a constant in one case and either a dependent expression or
199     // declaration in another case, keep the integral constant.
200     // If both are integral constants with the same value, keep that value.
201     if (Y.getKind() == TemplateArgument::Expression ||
202         Y.getKind() == TemplateArgument::Declaration ||
203         (Y.getKind() == TemplateArgument::Integral &&
204          hasSameExtendedValue(X.getAsIntegral(), Y.getAsIntegral())))
205       return X.wasDeducedFromArrayBound() ? Y : X;
206 
207     // All other combinations are incompatible.
208     return DeducedTemplateArgument();
209 
210   case TemplateArgument::Template:
211     if (Y.getKind() == TemplateArgument::Template &&
212         Context.hasSameTemplateName(X.getAsTemplate(), Y.getAsTemplate()))
213       return X;
214 
215     // All other combinations are incompatible.
216     return DeducedTemplateArgument();
217 
218   case TemplateArgument::TemplateExpansion:
219     if (Y.getKind() == TemplateArgument::TemplateExpansion &&
220         Context.hasSameTemplateName(X.getAsTemplateOrTemplatePattern(),
221                                     Y.getAsTemplateOrTemplatePattern()))
222       return X;
223 
224     // All other combinations are incompatible.
225     return DeducedTemplateArgument();
226 
227   case TemplateArgument::Expression: {
228     if (Y.getKind() != TemplateArgument::Expression)
229       return checkDeducedTemplateArguments(Context, Y, X);
230 
231     // Compare the expressions for equality
232     llvm::FoldingSetNodeID ID1, ID2;
233     X.getAsExpr()->Profile(ID1, Context, true);
234     Y.getAsExpr()->Profile(ID2, Context, true);
235     if (ID1 == ID2)
236       return X.wasDeducedFromArrayBound() ? Y : X;
237 
238     // Differing dependent expressions are incompatible.
239     return DeducedTemplateArgument();
240   }
241 
242   case TemplateArgument::Declaration:
243     assert(!X.wasDeducedFromArrayBound());
244 
245     // If we deduced a declaration and a dependent expression, keep the
246     // declaration.
247     if (Y.getKind() == TemplateArgument::Expression)
248       return X;
249 
250     // If we deduced a declaration and an integral constant, keep the
251     // integral constant and whichever type did not come from an array
252     // bound.
253     if (Y.getKind() == TemplateArgument::Integral) {
254       if (Y.wasDeducedFromArrayBound())
255         return TemplateArgument(Context, Y.getAsIntegral(),
256                                 X.getParamTypeForDecl());
257       return Y;
258     }
259 
260     // If we deduced two declarations, make sure they they refer to the
261     // same declaration.
262     if (Y.getKind() == TemplateArgument::Declaration &&
263         isSameDeclaration(X.getAsDecl(), Y.getAsDecl()))
264       return X;
265 
266     // All other combinations are incompatible.
267     return DeducedTemplateArgument();
268 
269   case TemplateArgument::NullPtr:
270     // If we deduced a null pointer and a dependent expression, keep the
271     // null pointer.
272     if (Y.getKind() == TemplateArgument::Expression)
273       return X;
274 
275     // If we deduced a null pointer and an integral constant, keep the
276     // integral constant.
277     if (Y.getKind() == TemplateArgument::Integral)
278       return Y;
279 
280     // If we deduced two null pointers, they are the same.
281     if (Y.getKind() == TemplateArgument::NullPtr)
282       return X;
283 
284     // All other combinations are incompatible.
285     return DeducedTemplateArgument();
286 
287   case TemplateArgument::Pack:
288     if (Y.getKind() != TemplateArgument::Pack ||
289         X.pack_size() != Y.pack_size())
290       return DeducedTemplateArgument();
291 
292     llvm::SmallVector<TemplateArgument, 8> NewPack;
293     for (TemplateArgument::pack_iterator XA = X.pack_begin(),
294                                       XAEnd = X.pack_end(),
295                                          YA = Y.pack_begin();
296          XA != XAEnd; ++XA, ++YA) {
297       TemplateArgument Merged = checkDeducedTemplateArguments(
298           Context, DeducedTemplateArgument(*XA, X.wasDeducedFromArrayBound()),
299           DeducedTemplateArgument(*YA, Y.wasDeducedFromArrayBound()));
300       if (Merged.isNull())
301         return DeducedTemplateArgument();
302       NewPack.push_back(Merged);
303     }
304 
305     return DeducedTemplateArgument(
306         TemplateArgument::CreatePackCopy(Context, NewPack),
307         X.wasDeducedFromArrayBound() && Y.wasDeducedFromArrayBound());
308   }
309 
310   llvm_unreachable("Invalid TemplateArgument Kind!");
311 }
312 
313 /// \brief Deduce the value of the given non-type template parameter
314 /// as the given deduced template argument. All non-type template parameter
315 /// deduction is funneled through here.
316 static Sema::TemplateDeductionResult DeduceNonTypeTemplateArgument(
317     Sema &S, TemplateParameterList *TemplateParams,
318     NonTypeTemplateParmDecl *NTTP, const DeducedTemplateArgument &NewDeduced,
319     QualType ValueType, TemplateDeductionInfo &Info,
320     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
321   assert(NTTP->getDepth() == Info.getDeducedDepth() &&
322          "deducing non-type template argument with wrong depth");
323 
324   DeducedTemplateArgument Result = checkDeducedTemplateArguments(
325       S.Context, Deduced[NTTP->getIndex()], NewDeduced);
326   if (Result.isNull()) {
327     Info.Param = NTTP;
328     Info.FirstArg = Deduced[NTTP->getIndex()];
329     Info.SecondArg = NewDeduced;
330     return Sema::TDK_Inconsistent;
331   }
332 
333   Deduced[NTTP->getIndex()] = Result;
334   if (!S.getLangOpts().CPlusPlus1z)
335     return Sema::TDK_Success;
336 
337   // FIXME: It's not clear how deduction of a parameter of reference
338   // type from an argument (of non-reference type) should be performed.
339   // For now, we just remove reference types from both sides and let
340   // the final check for matching types sort out the mess.
341   return DeduceTemplateArgumentsByTypeMatch(
342       S, TemplateParams, NTTP->getType().getNonReferenceType(),
343       ValueType.getNonReferenceType(), Info, Deduced, TDF_SkipNonDependent,
344       /*PartialOrdering=*/false,
345       /*ArrayBound=*/NewDeduced.wasDeducedFromArrayBound());
346 }
347 
348 /// \brief Deduce the value of the given non-type template parameter
349 /// from the given integral constant.
350 static Sema::TemplateDeductionResult DeduceNonTypeTemplateArgument(
351     Sema &S, TemplateParameterList *TemplateParams,
352     NonTypeTemplateParmDecl *NTTP, const llvm::APSInt &Value,
353     QualType ValueType, bool DeducedFromArrayBound, TemplateDeductionInfo &Info,
354     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
355   return DeduceNonTypeTemplateArgument(
356       S, TemplateParams, NTTP,
357       DeducedTemplateArgument(S.Context, Value, ValueType,
358                               DeducedFromArrayBound),
359       ValueType, Info, Deduced);
360 }
361 
362 /// \brief Deduce the value of the given non-type template parameter
363 /// from the given null pointer template argument type.
364 static Sema::TemplateDeductionResult DeduceNullPtrTemplateArgument(
365     Sema &S, TemplateParameterList *TemplateParams,
366     NonTypeTemplateParmDecl *NTTP, QualType NullPtrType,
367     TemplateDeductionInfo &Info,
368     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
369   Expr *Value =
370       S.ImpCastExprToType(new (S.Context) CXXNullPtrLiteralExpr(
371                               S.Context.NullPtrTy, NTTP->getLocation()),
372                           NullPtrType, CK_NullToPointer)
373           .get();
374   return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP,
375                                        DeducedTemplateArgument(Value),
376                                        Value->getType(), Info, Deduced);
377 }
378 
379 /// \brief Deduce the value of the given non-type template parameter
380 /// from the given type- or value-dependent expression.
381 ///
382 /// \returns true if deduction succeeded, false otherwise.
383 static Sema::TemplateDeductionResult DeduceNonTypeTemplateArgument(
384     Sema &S, TemplateParameterList *TemplateParams,
385     NonTypeTemplateParmDecl *NTTP, Expr *Value, TemplateDeductionInfo &Info,
386     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
387   return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP,
388                                        DeducedTemplateArgument(Value),
389                                        Value->getType(), Info, Deduced);
390 }
391 
392 /// \brief Deduce the value of the given non-type template parameter
393 /// from the given declaration.
394 ///
395 /// \returns true if deduction succeeded, false otherwise.
396 static Sema::TemplateDeductionResult DeduceNonTypeTemplateArgument(
397     Sema &S, TemplateParameterList *TemplateParams,
398     NonTypeTemplateParmDecl *NTTP, ValueDecl *D, QualType T,
399     TemplateDeductionInfo &Info,
400     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
401   D = D ? cast<ValueDecl>(D->getCanonicalDecl()) : nullptr;
402   TemplateArgument New(D, T);
403   return DeduceNonTypeTemplateArgument(
404       S, TemplateParams, NTTP, DeducedTemplateArgument(New), T, Info, Deduced);
405 }
406 
407 static Sema::TemplateDeductionResult
408 DeduceTemplateArguments(Sema &S,
409                         TemplateParameterList *TemplateParams,
410                         TemplateName Param,
411                         TemplateName Arg,
412                         TemplateDeductionInfo &Info,
413                         SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
414   TemplateDecl *ParamDecl = Param.getAsTemplateDecl();
415   if (!ParamDecl) {
416     // The parameter type is dependent and is not a template template parameter,
417     // so there is nothing that we can deduce.
418     return Sema::TDK_Success;
419   }
420 
421   if (TemplateTemplateParmDecl *TempParam
422         = dyn_cast<TemplateTemplateParmDecl>(ParamDecl)) {
423     // If we're not deducing at this depth, there's nothing to deduce.
424     if (TempParam->getDepth() != Info.getDeducedDepth())
425       return Sema::TDK_Success;
426 
427     DeducedTemplateArgument NewDeduced(S.Context.getCanonicalTemplateName(Arg));
428     DeducedTemplateArgument Result = checkDeducedTemplateArguments(S.Context,
429                                                  Deduced[TempParam->getIndex()],
430                                                                    NewDeduced);
431     if (Result.isNull()) {
432       Info.Param = TempParam;
433       Info.FirstArg = Deduced[TempParam->getIndex()];
434       Info.SecondArg = NewDeduced;
435       return Sema::TDK_Inconsistent;
436     }
437 
438     Deduced[TempParam->getIndex()] = Result;
439     return Sema::TDK_Success;
440   }
441 
442   // Verify that the two template names are equivalent.
443   if (S.Context.hasSameTemplateName(Param, Arg))
444     return Sema::TDK_Success;
445 
446   // Mismatch of non-dependent template parameter to argument.
447   Info.FirstArg = TemplateArgument(Param);
448   Info.SecondArg = TemplateArgument(Arg);
449   return Sema::TDK_NonDeducedMismatch;
450 }
451 
452 /// \brief Deduce the template arguments by comparing the template parameter
453 /// type (which is a template-id) with the template argument type.
454 ///
455 /// \param S the Sema
456 ///
457 /// \param TemplateParams the template parameters that we are deducing
458 ///
459 /// \param Param the parameter type
460 ///
461 /// \param Arg the argument type
462 ///
463 /// \param Info information about the template argument deduction itself
464 ///
465 /// \param Deduced the deduced template arguments
466 ///
467 /// \returns the result of template argument deduction so far. Note that a
468 /// "success" result means that template argument deduction has not yet failed,
469 /// but it may still fail, later, for other reasons.
470 static Sema::TemplateDeductionResult
471 DeduceTemplateArguments(Sema &S,
472                         TemplateParameterList *TemplateParams,
473                         const TemplateSpecializationType *Param,
474                         QualType Arg,
475                         TemplateDeductionInfo &Info,
476                         SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
477   assert(Arg.isCanonical() && "Argument type must be canonical");
478 
479   // Check whether the template argument is a dependent template-id.
480   if (const TemplateSpecializationType *SpecArg
481         = dyn_cast<TemplateSpecializationType>(Arg)) {
482     // Perform template argument deduction for the template name.
483     if (Sema::TemplateDeductionResult Result
484           = DeduceTemplateArguments(S, TemplateParams,
485                                     Param->getTemplateName(),
486                                     SpecArg->getTemplateName(),
487                                     Info, Deduced))
488       return Result;
489 
490 
491     // Perform template argument deduction on each template
492     // argument. Ignore any missing/extra arguments, since they could be
493     // filled in by default arguments.
494     return DeduceTemplateArguments(S, TemplateParams,
495                                    Param->template_arguments(),
496                                    SpecArg->template_arguments(), Info, Deduced,
497                                    /*NumberOfArgumentsMustMatch=*/false);
498   }
499 
500   // If the argument type is a class template specialization, we
501   // perform template argument deduction using its template
502   // arguments.
503   const RecordType *RecordArg = dyn_cast<RecordType>(Arg);
504   if (!RecordArg) {
505     Info.FirstArg = TemplateArgument(QualType(Param, 0));
506     Info.SecondArg = TemplateArgument(Arg);
507     return Sema::TDK_NonDeducedMismatch;
508   }
509 
510   ClassTemplateSpecializationDecl *SpecArg
511     = dyn_cast<ClassTemplateSpecializationDecl>(RecordArg->getDecl());
512   if (!SpecArg) {
513     Info.FirstArg = TemplateArgument(QualType(Param, 0));
514     Info.SecondArg = TemplateArgument(Arg);
515     return Sema::TDK_NonDeducedMismatch;
516   }
517 
518   // Perform template argument deduction for the template name.
519   if (Sema::TemplateDeductionResult Result
520         = DeduceTemplateArguments(S,
521                                   TemplateParams,
522                                   Param->getTemplateName(),
523                                TemplateName(SpecArg->getSpecializedTemplate()),
524                                   Info, Deduced))
525     return Result;
526 
527   // Perform template argument deduction for the template arguments.
528   return DeduceTemplateArguments(S, TemplateParams, Param->template_arguments(),
529                                  SpecArg->getTemplateArgs().asArray(), Info,
530                                  Deduced, /*NumberOfArgumentsMustMatch=*/true);
531 }
532 
533 /// \brief Determines whether the given type is an opaque type that
534 /// might be more qualified when instantiated.
535 static bool IsPossiblyOpaquelyQualifiedType(QualType T) {
536   switch (T->getTypeClass()) {
537   case Type::TypeOfExpr:
538   case Type::TypeOf:
539   case Type::DependentName:
540   case Type::Decltype:
541   case Type::UnresolvedUsing:
542   case Type::TemplateTypeParm:
543     return true;
544 
545   case Type::ConstantArray:
546   case Type::IncompleteArray:
547   case Type::VariableArray:
548   case Type::DependentSizedArray:
549     return IsPossiblyOpaquelyQualifiedType(
550                                       cast<ArrayType>(T)->getElementType());
551 
552   default:
553     return false;
554   }
555 }
556 
557 /// \brief Retrieve the depth and index of a template parameter.
558 static std::pair<unsigned, unsigned>
559 getDepthAndIndex(NamedDecl *ND) {
560   if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ND))
561     return std::make_pair(TTP->getDepth(), TTP->getIndex());
562 
563   if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(ND))
564     return std::make_pair(NTTP->getDepth(), NTTP->getIndex());
565 
566   TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(ND);
567   return std::make_pair(TTP->getDepth(), TTP->getIndex());
568 }
569 
570 /// \brief Retrieve the depth and index of an unexpanded parameter pack.
571 static std::pair<unsigned, unsigned>
572 getDepthAndIndex(UnexpandedParameterPack UPP) {
573   if (const TemplateTypeParmType *TTP
574                           = UPP.first.dyn_cast<const TemplateTypeParmType *>())
575     return std::make_pair(TTP->getDepth(), TTP->getIndex());
576 
577   return getDepthAndIndex(UPP.first.get<NamedDecl *>());
578 }
579 
580 /// \brief Helper function to build a TemplateParameter when we don't
581 /// know its type statically.
582 static TemplateParameter makeTemplateParameter(Decl *D) {
583   if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(D))
584     return TemplateParameter(TTP);
585   if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(D))
586     return TemplateParameter(NTTP);
587 
588   return TemplateParameter(cast<TemplateTemplateParmDecl>(D));
589 }
590 
591 /// A pack that we're currently deducing.
592 struct clang::DeducedPack {
593   DeducedPack(unsigned Index) : Index(Index), Outer(nullptr) {}
594 
595   // The index of the pack.
596   unsigned Index;
597 
598   // The old value of the pack before we started deducing it.
599   DeducedTemplateArgument Saved;
600 
601   // A deferred value of this pack from an inner deduction, that couldn't be
602   // deduced because this deduction hadn't happened yet.
603   DeducedTemplateArgument DeferredDeduction;
604 
605   // The new value of the pack.
606   SmallVector<DeducedTemplateArgument, 4> New;
607 
608   // The outer deduction for this pack, if any.
609   DeducedPack *Outer;
610 };
611 
612 namespace {
613 /// A scope in which we're performing pack deduction.
614 class PackDeductionScope {
615 public:
616   PackDeductionScope(Sema &S, TemplateParameterList *TemplateParams,
617                      SmallVectorImpl<DeducedTemplateArgument> &Deduced,
618                      TemplateDeductionInfo &Info, TemplateArgument Pattern)
619       : S(S), TemplateParams(TemplateParams), Deduced(Deduced), Info(Info) {
620     // Compute the set of template parameter indices that correspond to
621     // parameter packs expanded by the pack expansion.
622     {
623       llvm::SmallBitVector SawIndices(TemplateParams->size());
624       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
625       S.collectUnexpandedParameterPacks(Pattern, Unexpanded);
626       for (unsigned I = 0, N = Unexpanded.size(); I != N; ++I) {
627         unsigned Depth, Index;
628         std::tie(Depth, Index) = getDepthAndIndex(Unexpanded[I]);
629         if (Depth == Info.getDeducedDepth() && !SawIndices[Index]) {
630           SawIndices[Index] = true;
631 
632           // Save the deduced template argument for the parameter pack expanded
633           // by this pack expansion, then clear out the deduction.
634           DeducedPack Pack(Index);
635           Pack.Saved = Deduced[Index];
636           Deduced[Index] = TemplateArgument();
637 
638           Packs.push_back(Pack);
639         }
640       }
641     }
642     assert(!Packs.empty() && "Pack expansion without unexpanded packs?");
643 
644     for (auto &Pack : Packs) {
645       if (Info.PendingDeducedPacks.size() > Pack.Index)
646         Pack.Outer = Info.PendingDeducedPacks[Pack.Index];
647       else
648         Info.PendingDeducedPacks.resize(Pack.Index + 1);
649       Info.PendingDeducedPacks[Pack.Index] = &Pack;
650 
651       if (S.CurrentInstantiationScope) {
652         // If the template argument pack was explicitly specified, add that to
653         // the set of deduced arguments.
654         const TemplateArgument *ExplicitArgs;
655         unsigned NumExplicitArgs;
656         NamedDecl *PartiallySubstitutedPack =
657             S.CurrentInstantiationScope->getPartiallySubstitutedPack(
658                 &ExplicitArgs, &NumExplicitArgs);
659         if (PartiallySubstitutedPack &&
660             getDepthAndIndex(PartiallySubstitutedPack) ==
661                 std::make_pair(Info.getDeducedDepth(), Pack.Index))
662           Pack.New.append(ExplicitArgs, ExplicitArgs + NumExplicitArgs);
663       }
664     }
665   }
666 
667   ~PackDeductionScope() {
668     for (auto &Pack : Packs)
669       Info.PendingDeducedPacks[Pack.Index] = Pack.Outer;
670   }
671 
672   /// Determine whether this pack has already been partially expanded into a
673   /// sequence of (prior) function parameters / template arguments.
674   bool isPartiallyExpanded() {
675     if (Packs.size() != 1 || !S.CurrentInstantiationScope)
676       return false;
677 
678     auto *PartiallySubstitutedPack =
679         S.CurrentInstantiationScope->getPartiallySubstitutedPack();
680     return PartiallySubstitutedPack &&
681            getDepthAndIndex(PartiallySubstitutedPack) ==
682                std::make_pair(Info.getDeducedDepth(), Packs.front().Index);
683   }
684 
685   /// Move to deducing the next element in each pack that is being deduced.
686   void nextPackElement() {
687     // Capture the deduced template arguments for each parameter pack expanded
688     // by this pack expansion, add them to the list of arguments we've deduced
689     // for that pack, then clear out the deduced argument.
690     for (auto &Pack : Packs) {
691       DeducedTemplateArgument &DeducedArg = Deduced[Pack.Index];
692       if (!Pack.New.empty() || !DeducedArg.isNull()) {
693         while (Pack.New.size() < PackElements)
694           Pack.New.push_back(DeducedTemplateArgument());
695         Pack.New.push_back(DeducedArg);
696         DeducedArg = DeducedTemplateArgument();
697       }
698     }
699     ++PackElements;
700   }
701 
702   /// \brief Finish template argument deduction for a set of argument packs,
703   /// producing the argument packs and checking for consistency with prior
704   /// deductions.
705   Sema::TemplateDeductionResult finish() {
706     // Build argument packs for each of the parameter packs expanded by this
707     // pack expansion.
708     for (auto &Pack : Packs) {
709       // Put back the old value for this pack.
710       Deduced[Pack.Index] = Pack.Saved;
711 
712       // Build or find a new value for this pack.
713       DeducedTemplateArgument NewPack;
714       if (PackElements && Pack.New.empty()) {
715         if (Pack.DeferredDeduction.isNull()) {
716           // We were not able to deduce anything for this parameter pack
717           // (because it only appeared in non-deduced contexts), so just
718           // restore the saved argument pack.
719           continue;
720         }
721 
722         NewPack = Pack.DeferredDeduction;
723         Pack.DeferredDeduction = TemplateArgument();
724       } else if (Pack.New.empty()) {
725         // If we deduced an empty argument pack, create it now.
726         NewPack = DeducedTemplateArgument(TemplateArgument::getEmptyPack());
727       } else {
728         TemplateArgument *ArgumentPack =
729             new (S.Context) TemplateArgument[Pack.New.size()];
730         std::copy(Pack.New.begin(), Pack.New.end(), ArgumentPack);
731         NewPack = DeducedTemplateArgument(
732             TemplateArgument(llvm::makeArrayRef(ArgumentPack, Pack.New.size())),
733             Pack.New[0].wasDeducedFromArrayBound());
734       }
735 
736       // Pick where we're going to put the merged pack.
737       DeducedTemplateArgument *Loc;
738       if (Pack.Outer) {
739         if (Pack.Outer->DeferredDeduction.isNull()) {
740           // Defer checking this pack until we have a complete pack to compare
741           // it against.
742           Pack.Outer->DeferredDeduction = NewPack;
743           continue;
744         }
745         Loc = &Pack.Outer->DeferredDeduction;
746       } else {
747         Loc = &Deduced[Pack.Index];
748       }
749 
750       // Check the new pack matches any previous value.
751       DeducedTemplateArgument OldPack = *Loc;
752       DeducedTemplateArgument Result =
753           checkDeducedTemplateArguments(S.Context, OldPack, NewPack);
754 
755       // If we deferred a deduction of this pack, check that one now too.
756       if (!Result.isNull() && !Pack.DeferredDeduction.isNull()) {
757         OldPack = Result;
758         NewPack = Pack.DeferredDeduction;
759         Result = checkDeducedTemplateArguments(S.Context, OldPack, NewPack);
760       }
761 
762       if (Result.isNull()) {
763         Info.Param =
764             makeTemplateParameter(TemplateParams->getParam(Pack.Index));
765         Info.FirstArg = OldPack;
766         Info.SecondArg = NewPack;
767         return Sema::TDK_Inconsistent;
768       }
769 
770       *Loc = Result;
771     }
772 
773     return Sema::TDK_Success;
774   }
775 
776 private:
777   Sema &S;
778   TemplateParameterList *TemplateParams;
779   SmallVectorImpl<DeducedTemplateArgument> &Deduced;
780   TemplateDeductionInfo &Info;
781   unsigned PackElements = 0;
782 
783   SmallVector<DeducedPack, 2> Packs;
784 };
785 } // namespace
786 
787 /// \brief Deduce the template arguments by comparing the list of parameter
788 /// types to the list of argument types, as in the parameter-type-lists of
789 /// function types (C++ [temp.deduct.type]p10).
790 ///
791 /// \param S The semantic analysis object within which we are deducing
792 ///
793 /// \param TemplateParams The template parameters that we are deducing
794 ///
795 /// \param Params The list of parameter types
796 ///
797 /// \param NumParams The number of types in \c Params
798 ///
799 /// \param Args The list of argument types
800 ///
801 /// \param NumArgs The number of types in \c Args
802 ///
803 /// \param Info information about the template argument deduction itself
804 ///
805 /// \param Deduced the deduced template arguments
806 ///
807 /// \param TDF bitwise OR of the TemplateDeductionFlags bits that describe
808 /// how template argument deduction is performed.
809 ///
810 /// \param PartialOrdering If true, we are performing template argument
811 /// deduction for during partial ordering for a call
812 /// (C++0x [temp.deduct.partial]).
813 ///
814 /// \returns the result of template argument deduction so far. Note that a
815 /// "success" result means that template argument deduction has not yet failed,
816 /// but it may still fail, later, for other reasons.
817 static Sema::TemplateDeductionResult
818 DeduceTemplateArguments(Sema &S,
819                         TemplateParameterList *TemplateParams,
820                         const QualType *Params, unsigned NumParams,
821                         const QualType *Args, unsigned NumArgs,
822                         TemplateDeductionInfo &Info,
823                         SmallVectorImpl<DeducedTemplateArgument> &Deduced,
824                         unsigned TDF,
825                         bool PartialOrdering = false) {
826   // Fast-path check to see if we have too many/too few arguments.
827   if (NumParams != NumArgs &&
828       !(NumParams && isa<PackExpansionType>(Params[NumParams - 1])) &&
829       !(NumArgs && isa<PackExpansionType>(Args[NumArgs - 1])))
830     return Sema::TDK_MiscellaneousDeductionFailure;
831 
832   // C++0x [temp.deduct.type]p10:
833   //   Similarly, if P has a form that contains (T), then each parameter type
834   //   Pi of the respective parameter-type- list of P is compared with the
835   //   corresponding parameter type Ai of the corresponding parameter-type-list
836   //   of A. [...]
837   unsigned ArgIdx = 0, ParamIdx = 0;
838   for (; ParamIdx != NumParams; ++ParamIdx) {
839     // Check argument types.
840     const PackExpansionType *Expansion
841                                 = dyn_cast<PackExpansionType>(Params[ParamIdx]);
842     if (!Expansion) {
843       // Simple case: compare the parameter and argument types at this point.
844 
845       // Make sure we have an argument.
846       if (ArgIdx >= NumArgs)
847         return Sema::TDK_MiscellaneousDeductionFailure;
848 
849       if (isa<PackExpansionType>(Args[ArgIdx])) {
850         // C++0x [temp.deduct.type]p22:
851         //   If the original function parameter associated with A is a function
852         //   parameter pack and the function parameter associated with P is not
853         //   a function parameter pack, then template argument deduction fails.
854         return Sema::TDK_MiscellaneousDeductionFailure;
855       }
856 
857       if (Sema::TemplateDeductionResult Result
858             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
859                                                  Params[ParamIdx], Args[ArgIdx],
860                                                  Info, Deduced, TDF,
861                                                  PartialOrdering))
862         return Result;
863 
864       ++ArgIdx;
865       continue;
866     }
867 
868     // C++0x [temp.deduct.type]p5:
869     //   The non-deduced contexts are:
870     //     - A function parameter pack that does not occur at the end of the
871     //       parameter-declaration-clause.
872     if (ParamIdx + 1 < NumParams)
873       return Sema::TDK_Success;
874 
875     // C++0x [temp.deduct.type]p10:
876     //   If the parameter-declaration corresponding to Pi is a function
877     //   parameter pack, then the type of its declarator- id is compared with
878     //   each remaining parameter type in the parameter-type-list of A. Each
879     //   comparison deduces template arguments for subsequent positions in the
880     //   template parameter packs expanded by the function parameter pack.
881 
882     QualType Pattern = Expansion->getPattern();
883     PackDeductionScope PackScope(S, TemplateParams, Deduced, Info, Pattern);
884 
885     for (; ArgIdx < NumArgs; ++ArgIdx) {
886       // Deduce template arguments from the pattern.
887       if (Sema::TemplateDeductionResult Result
888             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams, Pattern,
889                                                  Args[ArgIdx], Info, Deduced,
890                                                  TDF, PartialOrdering))
891         return Result;
892 
893       PackScope.nextPackElement();
894     }
895 
896     // Build argument packs for each of the parameter packs expanded by this
897     // pack expansion.
898     if (auto Result = PackScope.finish())
899       return Result;
900   }
901 
902   // Make sure we don't have any extra arguments.
903   if (ArgIdx < NumArgs)
904     return Sema::TDK_MiscellaneousDeductionFailure;
905 
906   return Sema::TDK_Success;
907 }
908 
909 /// \brief Determine whether the parameter has qualifiers that are either
910 /// inconsistent with or a superset of the argument's qualifiers.
911 static bool hasInconsistentOrSupersetQualifiersOf(QualType ParamType,
912                                                   QualType ArgType) {
913   Qualifiers ParamQs = ParamType.getQualifiers();
914   Qualifiers ArgQs = ArgType.getQualifiers();
915 
916   if (ParamQs == ArgQs)
917     return false;
918 
919   // Mismatched (but not missing) Objective-C GC attributes.
920   if (ParamQs.getObjCGCAttr() != ArgQs.getObjCGCAttr() &&
921       ParamQs.hasObjCGCAttr())
922     return true;
923 
924   // Mismatched (but not missing) address spaces.
925   if (ParamQs.getAddressSpace() != ArgQs.getAddressSpace() &&
926       ParamQs.hasAddressSpace())
927     return true;
928 
929   // Mismatched (but not missing) Objective-C lifetime qualifiers.
930   if (ParamQs.getObjCLifetime() != ArgQs.getObjCLifetime() &&
931       ParamQs.hasObjCLifetime())
932     return true;
933 
934   // CVR qualifier superset.
935   return (ParamQs.getCVRQualifiers() != ArgQs.getCVRQualifiers()) &&
936       ((ParamQs.getCVRQualifiers() | ArgQs.getCVRQualifiers())
937                                                 == ParamQs.getCVRQualifiers());
938 }
939 
940 /// \brief Compare types for equality with respect to possibly compatible
941 /// function types (noreturn adjustment, implicit calling conventions). If any
942 /// of parameter and argument is not a function, just perform type comparison.
943 ///
944 /// \param Param the template parameter type.
945 ///
946 /// \param Arg the argument type.
947 bool Sema::isSameOrCompatibleFunctionType(CanQualType Param,
948                                           CanQualType Arg) {
949   const FunctionType *ParamFunction = Param->getAs<FunctionType>(),
950                      *ArgFunction   = Arg->getAs<FunctionType>();
951 
952   // Just compare if not functions.
953   if (!ParamFunction || !ArgFunction)
954     return Param == Arg;
955 
956   // Noreturn and noexcept adjustment.
957   QualType AdjustedParam;
958   if (IsFunctionConversion(Param, Arg, AdjustedParam))
959     return Arg == Context.getCanonicalType(AdjustedParam);
960 
961   // FIXME: Compatible calling conventions.
962 
963   return Param == Arg;
964 }
965 
966 /// \brief Deduce the template arguments by comparing the parameter type and
967 /// the argument type (C++ [temp.deduct.type]).
968 ///
969 /// \param S the semantic analysis object within which we are deducing
970 ///
971 /// \param TemplateParams the template parameters that we are deducing
972 ///
973 /// \param ParamIn the parameter type
974 ///
975 /// \param ArgIn the argument type
976 ///
977 /// \param Info information about the template argument deduction itself
978 ///
979 /// \param Deduced the deduced template arguments
980 ///
981 /// \param TDF bitwise OR of the TemplateDeductionFlags bits that describe
982 /// how template argument deduction is performed.
983 ///
984 /// \param PartialOrdering Whether we're performing template argument deduction
985 /// in the context of partial ordering (C++0x [temp.deduct.partial]).
986 ///
987 /// \returns the result of template argument deduction so far. Note that a
988 /// "success" result means that template argument deduction has not yet failed,
989 /// but it may still fail, later, for other reasons.
990 static Sema::TemplateDeductionResult
991 DeduceTemplateArgumentsByTypeMatch(Sema &S,
992                                    TemplateParameterList *TemplateParams,
993                                    QualType ParamIn, QualType ArgIn,
994                                    TemplateDeductionInfo &Info,
995                             SmallVectorImpl<DeducedTemplateArgument> &Deduced,
996                                    unsigned TDF,
997                                    bool PartialOrdering,
998                                    bool DeducedFromArrayBound) {
999   // We only want to look at the canonical types, since typedefs and
1000   // sugar are not part of template argument deduction.
1001   QualType Param = S.Context.getCanonicalType(ParamIn);
1002   QualType Arg = S.Context.getCanonicalType(ArgIn);
1003 
1004   // If the argument type is a pack expansion, look at its pattern.
1005   // This isn't explicitly called out
1006   if (const PackExpansionType *ArgExpansion
1007                                             = dyn_cast<PackExpansionType>(Arg))
1008     Arg = ArgExpansion->getPattern();
1009 
1010   if (PartialOrdering) {
1011     // C++11 [temp.deduct.partial]p5:
1012     //   Before the partial ordering is done, certain transformations are
1013     //   performed on the types used for partial ordering:
1014     //     - If P is a reference type, P is replaced by the type referred to.
1015     const ReferenceType *ParamRef = Param->getAs<ReferenceType>();
1016     if (ParamRef)
1017       Param = ParamRef->getPointeeType();
1018 
1019     //     - If A is a reference type, A is replaced by the type referred to.
1020     const ReferenceType *ArgRef = Arg->getAs<ReferenceType>();
1021     if (ArgRef)
1022       Arg = ArgRef->getPointeeType();
1023 
1024     if (ParamRef && ArgRef && S.Context.hasSameUnqualifiedType(Param, Arg)) {
1025       // C++11 [temp.deduct.partial]p9:
1026       //   If, for a given type, deduction succeeds in both directions (i.e.,
1027       //   the types are identical after the transformations above) and both
1028       //   P and A were reference types [...]:
1029       //     - if [one type] was an lvalue reference and [the other type] was
1030       //       not, [the other type] is not considered to be at least as
1031       //       specialized as [the first type]
1032       //     - if [one type] is more cv-qualified than [the other type],
1033       //       [the other type] is not considered to be at least as specialized
1034       //       as [the first type]
1035       // Objective-C ARC adds:
1036       //     - [one type] has non-trivial lifetime, [the other type] has
1037       //       __unsafe_unretained lifetime, and the types are otherwise
1038       //       identical
1039       //
1040       // A is "considered to be at least as specialized" as P iff deduction
1041       // succeeds, so we model this as a deduction failure. Note that
1042       // [the first type] is P and [the other type] is A here; the standard
1043       // gets this backwards.
1044       Qualifiers ParamQuals = Param.getQualifiers();
1045       Qualifiers ArgQuals = Arg.getQualifiers();
1046       if ((ParamRef->isLValueReferenceType() &&
1047            !ArgRef->isLValueReferenceType()) ||
1048           ParamQuals.isStrictSupersetOf(ArgQuals) ||
1049           (ParamQuals.hasNonTrivialObjCLifetime() &&
1050            ArgQuals.getObjCLifetime() == Qualifiers::OCL_ExplicitNone &&
1051            ParamQuals.withoutObjCLifetime() ==
1052                ArgQuals.withoutObjCLifetime())) {
1053         Info.FirstArg = TemplateArgument(ParamIn);
1054         Info.SecondArg = TemplateArgument(ArgIn);
1055         return Sema::TDK_NonDeducedMismatch;
1056       }
1057     }
1058 
1059     // C++11 [temp.deduct.partial]p7:
1060     //   Remove any top-level cv-qualifiers:
1061     //     - If P is a cv-qualified type, P is replaced by the cv-unqualified
1062     //       version of P.
1063     Param = Param.getUnqualifiedType();
1064     //     - If A is a cv-qualified type, A is replaced by the cv-unqualified
1065     //       version of A.
1066     Arg = Arg.getUnqualifiedType();
1067   } else {
1068     // C++0x [temp.deduct.call]p4 bullet 1:
1069     //   - If the original P is a reference type, the deduced A (i.e., the type
1070     //     referred to by the reference) can be more cv-qualified than the
1071     //     transformed A.
1072     if (TDF & TDF_ParamWithReferenceType) {
1073       Qualifiers Quals;
1074       QualType UnqualParam = S.Context.getUnqualifiedArrayType(Param, Quals);
1075       Quals.setCVRQualifiers(Quals.getCVRQualifiers() &
1076                              Arg.getCVRQualifiers());
1077       Param = S.Context.getQualifiedType(UnqualParam, Quals);
1078     }
1079 
1080     if ((TDF & TDF_TopLevelParameterTypeList) && !Param->isFunctionType()) {
1081       // C++0x [temp.deduct.type]p10:
1082       //   If P and A are function types that originated from deduction when
1083       //   taking the address of a function template (14.8.2.2) or when deducing
1084       //   template arguments from a function declaration (14.8.2.6) and Pi and
1085       //   Ai are parameters of the top-level parameter-type-list of P and A,
1086       //   respectively, Pi is adjusted if it is an rvalue reference to a
1087       //   cv-unqualified template parameter and Ai is an lvalue reference, in
1088       //   which case the type of Pi is changed to be the template parameter
1089       //   type (i.e., T&& is changed to simply T). [ Note: As a result, when
1090       //   Pi is T&& and Ai is X&, the adjusted Pi will be T, causing T to be
1091       //   deduced as X&. - end note ]
1092       TDF &= ~TDF_TopLevelParameterTypeList;
1093 
1094       if (const RValueReferenceType *ParamRef
1095                                         = Param->getAs<RValueReferenceType>()) {
1096         if (isa<TemplateTypeParmType>(ParamRef->getPointeeType()) &&
1097             !ParamRef->getPointeeType().getQualifiers())
1098           if (Arg->isLValueReferenceType())
1099             Param = ParamRef->getPointeeType();
1100       }
1101     }
1102   }
1103 
1104   // C++ [temp.deduct.type]p9:
1105   //   A template type argument T, a template template argument TT or a
1106   //   template non-type argument i can be deduced if P and A have one of
1107   //   the following forms:
1108   //
1109   //     T
1110   //     cv-list T
1111   if (const TemplateTypeParmType *TemplateTypeParm
1112         = Param->getAs<TemplateTypeParmType>()) {
1113     // Just skip any attempts to deduce from a placeholder type or a parameter
1114     // at a different depth.
1115     if (Arg->isPlaceholderType() ||
1116         Info.getDeducedDepth() != TemplateTypeParm->getDepth())
1117       return Sema::TDK_Success;
1118 
1119     unsigned Index = TemplateTypeParm->getIndex();
1120     bool RecanonicalizeArg = false;
1121 
1122     // If the argument type is an array type, move the qualifiers up to the
1123     // top level, so they can be matched with the qualifiers on the parameter.
1124     if (isa<ArrayType>(Arg)) {
1125       Qualifiers Quals;
1126       Arg = S.Context.getUnqualifiedArrayType(Arg, Quals);
1127       if (Quals) {
1128         Arg = S.Context.getQualifiedType(Arg, Quals);
1129         RecanonicalizeArg = true;
1130       }
1131     }
1132 
1133     // The argument type can not be less qualified than the parameter
1134     // type.
1135     if (!(TDF & TDF_IgnoreQualifiers) &&
1136         hasInconsistentOrSupersetQualifiersOf(Param, Arg)) {
1137       Info.Param = cast<TemplateTypeParmDecl>(TemplateParams->getParam(Index));
1138       Info.FirstArg = TemplateArgument(Param);
1139       Info.SecondArg = TemplateArgument(Arg);
1140       return Sema::TDK_Underqualified;
1141     }
1142 
1143     assert(TemplateTypeParm->getDepth() == Info.getDeducedDepth() &&
1144            "saw template type parameter with wrong depth");
1145     assert(Arg != S.Context.OverloadTy && "Unresolved overloaded function");
1146     QualType DeducedType = Arg;
1147 
1148     // Remove any qualifiers on the parameter from the deduced type.
1149     // We checked the qualifiers for consistency above.
1150     Qualifiers DeducedQs = DeducedType.getQualifiers();
1151     Qualifiers ParamQs = Param.getQualifiers();
1152     DeducedQs.removeCVRQualifiers(ParamQs.getCVRQualifiers());
1153     if (ParamQs.hasObjCGCAttr())
1154       DeducedQs.removeObjCGCAttr();
1155     if (ParamQs.hasAddressSpace())
1156       DeducedQs.removeAddressSpace();
1157     if (ParamQs.hasObjCLifetime())
1158       DeducedQs.removeObjCLifetime();
1159 
1160     // Objective-C ARC:
1161     //   If template deduction would produce a lifetime qualifier on a type
1162     //   that is not a lifetime type, template argument deduction fails.
1163     if (ParamQs.hasObjCLifetime() && !DeducedType->isObjCLifetimeType() &&
1164         !DeducedType->isDependentType()) {
1165       Info.Param = cast<TemplateTypeParmDecl>(TemplateParams->getParam(Index));
1166       Info.FirstArg = TemplateArgument(Param);
1167       Info.SecondArg = TemplateArgument(Arg);
1168       return Sema::TDK_Underqualified;
1169     }
1170 
1171     // Objective-C ARC:
1172     //   If template deduction would produce an argument type with lifetime type
1173     //   but no lifetime qualifier, the __strong lifetime qualifier is inferred.
1174     if (S.getLangOpts().ObjCAutoRefCount &&
1175         DeducedType->isObjCLifetimeType() &&
1176         !DeducedQs.hasObjCLifetime())
1177       DeducedQs.setObjCLifetime(Qualifiers::OCL_Strong);
1178 
1179     DeducedType = S.Context.getQualifiedType(DeducedType.getUnqualifiedType(),
1180                                              DeducedQs);
1181 
1182     if (RecanonicalizeArg)
1183       DeducedType = S.Context.getCanonicalType(DeducedType);
1184 
1185     DeducedTemplateArgument NewDeduced(DeducedType, DeducedFromArrayBound);
1186     DeducedTemplateArgument Result = checkDeducedTemplateArguments(S.Context,
1187                                                                  Deduced[Index],
1188                                                                    NewDeduced);
1189     if (Result.isNull()) {
1190       Info.Param = cast<TemplateTypeParmDecl>(TemplateParams->getParam(Index));
1191       Info.FirstArg = Deduced[Index];
1192       Info.SecondArg = NewDeduced;
1193       return Sema::TDK_Inconsistent;
1194     }
1195 
1196     Deduced[Index] = Result;
1197     return Sema::TDK_Success;
1198   }
1199 
1200   // Set up the template argument deduction information for a failure.
1201   Info.FirstArg = TemplateArgument(ParamIn);
1202   Info.SecondArg = TemplateArgument(ArgIn);
1203 
1204   // If the parameter is an already-substituted template parameter
1205   // pack, do nothing: we don't know which of its arguments to look
1206   // at, so we have to wait until all of the parameter packs in this
1207   // expansion have arguments.
1208   if (isa<SubstTemplateTypeParmPackType>(Param))
1209     return Sema::TDK_Success;
1210 
1211   // Check the cv-qualifiers on the parameter and argument types.
1212   CanQualType CanParam = S.Context.getCanonicalType(Param);
1213   CanQualType CanArg = S.Context.getCanonicalType(Arg);
1214   if (!(TDF & TDF_IgnoreQualifiers)) {
1215     if (TDF & TDF_ParamWithReferenceType) {
1216       if (hasInconsistentOrSupersetQualifiersOf(Param, Arg))
1217         return Sema::TDK_NonDeducedMismatch;
1218     } else if (!IsPossiblyOpaquelyQualifiedType(Param)) {
1219       if (Param.getCVRQualifiers() != Arg.getCVRQualifiers())
1220         return Sema::TDK_NonDeducedMismatch;
1221     }
1222 
1223     // If the parameter type is not dependent, there is nothing to deduce.
1224     if (!Param->isDependentType()) {
1225       if (!(TDF & TDF_SkipNonDependent)) {
1226         bool NonDeduced = (TDF & TDF_InOverloadResolution)?
1227                           !S.isSameOrCompatibleFunctionType(CanParam, CanArg) :
1228                           Param != Arg;
1229         if (NonDeduced) {
1230           return Sema::TDK_NonDeducedMismatch;
1231         }
1232       }
1233       return Sema::TDK_Success;
1234     }
1235   } else if (!Param->isDependentType()) {
1236     CanQualType ParamUnqualType = CanParam.getUnqualifiedType(),
1237                 ArgUnqualType = CanArg.getUnqualifiedType();
1238     bool Success = (TDF & TDF_InOverloadResolution)?
1239                    S.isSameOrCompatibleFunctionType(ParamUnqualType,
1240                                                     ArgUnqualType) :
1241                    ParamUnqualType == ArgUnqualType;
1242     if (Success)
1243       return Sema::TDK_Success;
1244   }
1245 
1246   switch (Param->getTypeClass()) {
1247     // Non-canonical types cannot appear here.
1248 #define NON_CANONICAL_TYPE(Class, Base) \
1249   case Type::Class: llvm_unreachable("deducing non-canonical type: " #Class);
1250 #define TYPE(Class, Base)
1251 #include "clang/AST/TypeNodes.def"
1252 
1253     case Type::TemplateTypeParm:
1254     case Type::SubstTemplateTypeParmPack:
1255       llvm_unreachable("Type nodes handled above");
1256 
1257     // These types cannot be dependent, so simply check whether the types are
1258     // the same.
1259     case Type::Builtin:
1260     case Type::VariableArray:
1261     case Type::Vector:
1262     case Type::FunctionNoProto:
1263     case Type::Record:
1264     case Type::Enum:
1265     case Type::ObjCObject:
1266     case Type::ObjCInterface:
1267     case Type::ObjCObjectPointer: {
1268       if (TDF & TDF_SkipNonDependent)
1269         return Sema::TDK_Success;
1270 
1271       if (TDF & TDF_IgnoreQualifiers) {
1272         Param = Param.getUnqualifiedType();
1273         Arg = Arg.getUnqualifiedType();
1274       }
1275 
1276       return Param == Arg? Sema::TDK_Success : Sema::TDK_NonDeducedMismatch;
1277     }
1278 
1279     //     _Complex T   [placeholder extension]
1280     case Type::Complex:
1281       if (const ComplexType *ComplexArg = Arg->getAs<ComplexType>())
1282         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1283                                     cast<ComplexType>(Param)->getElementType(),
1284                                     ComplexArg->getElementType(),
1285                                     Info, Deduced, TDF);
1286 
1287       return Sema::TDK_NonDeducedMismatch;
1288 
1289     //     _Atomic T   [extension]
1290     case Type::Atomic:
1291       if (const AtomicType *AtomicArg = Arg->getAs<AtomicType>())
1292         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1293                                        cast<AtomicType>(Param)->getValueType(),
1294                                        AtomicArg->getValueType(),
1295                                        Info, Deduced, TDF);
1296 
1297       return Sema::TDK_NonDeducedMismatch;
1298 
1299     //     T *
1300     case Type::Pointer: {
1301       QualType PointeeType;
1302       if (const PointerType *PointerArg = Arg->getAs<PointerType>()) {
1303         PointeeType = PointerArg->getPointeeType();
1304       } else if (const ObjCObjectPointerType *PointerArg
1305                    = Arg->getAs<ObjCObjectPointerType>()) {
1306         PointeeType = PointerArg->getPointeeType();
1307       } else {
1308         return Sema::TDK_NonDeducedMismatch;
1309       }
1310 
1311       unsigned SubTDF = TDF & (TDF_IgnoreQualifiers | TDF_DerivedClass);
1312       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1313                                      cast<PointerType>(Param)->getPointeeType(),
1314                                      PointeeType,
1315                                      Info, Deduced, SubTDF);
1316     }
1317 
1318     //     T &
1319     case Type::LValueReference: {
1320       const LValueReferenceType *ReferenceArg =
1321           Arg->getAs<LValueReferenceType>();
1322       if (!ReferenceArg)
1323         return Sema::TDK_NonDeducedMismatch;
1324 
1325       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1326                            cast<LValueReferenceType>(Param)->getPointeeType(),
1327                            ReferenceArg->getPointeeType(), Info, Deduced, 0);
1328     }
1329 
1330     //     T && [C++0x]
1331     case Type::RValueReference: {
1332       const RValueReferenceType *ReferenceArg =
1333           Arg->getAs<RValueReferenceType>();
1334       if (!ReferenceArg)
1335         return Sema::TDK_NonDeducedMismatch;
1336 
1337       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1338                              cast<RValueReferenceType>(Param)->getPointeeType(),
1339                              ReferenceArg->getPointeeType(),
1340                              Info, Deduced, 0);
1341     }
1342 
1343     //     T [] (implied, but not stated explicitly)
1344     case Type::IncompleteArray: {
1345       const IncompleteArrayType *IncompleteArrayArg =
1346         S.Context.getAsIncompleteArrayType(Arg);
1347       if (!IncompleteArrayArg)
1348         return Sema::TDK_NonDeducedMismatch;
1349 
1350       unsigned SubTDF = TDF & TDF_IgnoreQualifiers;
1351       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1352                     S.Context.getAsIncompleteArrayType(Param)->getElementType(),
1353                     IncompleteArrayArg->getElementType(),
1354                     Info, Deduced, SubTDF);
1355     }
1356 
1357     //     T [integer-constant]
1358     case Type::ConstantArray: {
1359       const ConstantArrayType *ConstantArrayArg =
1360         S.Context.getAsConstantArrayType(Arg);
1361       if (!ConstantArrayArg)
1362         return Sema::TDK_NonDeducedMismatch;
1363 
1364       const ConstantArrayType *ConstantArrayParm =
1365         S.Context.getAsConstantArrayType(Param);
1366       if (ConstantArrayArg->getSize() != ConstantArrayParm->getSize())
1367         return Sema::TDK_NonDeducedMismatch;
1368 
1369       unsigned SubTDF = TDF & TDF_IgnoreQualifiers;
1370       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1371                                            ConstantArrayParm->getElementType(),
1372                                            ConstantArrayArg->getElementType(),
1373                                            Info, Deduced, SubTDF);
1374     }
1375 
1376     //     type [i]
1377     case Type::DependentSizedArray: {
1378       const ArrayType *ArrayArg = S.Context.getAsArrayType(Arg);
1379       if (!ArrayArg)
1380         return Sema::TDK_NonDeducedMismatch;
1381 
1382       unsigned SubTDF = TDF & TDF_IgnoreQualifiers;
1383 
1384       // Check the element type of the arrays
1385       const DependentSizedArrayType *DependentArrayParm
1386         = S.Context.getAsDependentSizedArrayType(Param);
1387       if (Sema::TemplateDeductionResult Result
1388             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1389                                           DependentArrayParm->getElementType(),
1390                                           ArrayArg->getElementType(),
1391                                           Info, Deduced, SubTDF))
1392         return Result;
1393 
1394       // Determine the array bound is something we can deduce.
1395       NonTypeTemplateParmDecl *NTTP
1396         = getDeducedParameterFromExpr(Info, DependentArrayParm->getSizeExpr());
1397       if (!NTTP)
1398         return Sema::TDK_Success;
1399 
1400       // We can perform template argument deduction for the given non-type
1401       // template parameter.
1402       assert(NTTP->getDepth() == Info.getDeducedDepth() &&
1403              "saw non-type template parameter with wrong depth");
1404       if (const ConstantArrayType *ConstantArrayArg
1405             = dyn_cast<ConstantArrayType>(ArrayArg)) {
1406         llvm::APSInt Size(ConstantArrayArg->getSize());
1407         return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP, Size,
1408                                              S.Context.getSizeType(),
1409                                              /*ArrayBound=*/true,
1410                                              Info, Deduced);
1411       }
1412       if (const DependentSizedArrayType *DependentArrayArg
1413             = dyn_cast<DependentSizedArrayType>(ArrayArg))
1414         if (DependentArrayArg->getSizeExpr())
1415           return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP,
1416                                                DependentArrayArg->getSizeExpr(),
1417                                                Info, Deduced);
1418 
1419       // Incomplete type does not match a dependently-sized array type
1420       return Sema::TDK_NonDeducedMismatch;
1421     }
1422 
1423     //     type(*)(T)
1424     //     T(*)()
1425     //     T(*)(T)
1426     case Type::FunctionProto: {
1427       unsigned SubTDF = TDF & TDF_TopLevelParameterTypeList;
1428       const FunctionProtoType *FunctionProtoArg =
1429         dyn_cast<FunctionProtoType>(Arg);
1430       if (!FunctionProtoArg)
1431         return Sema::TDK_NonDeducedMismatch;
1432 
1433       const FunctionProtoType *FunctionProtoParam =
1434         cast<FunctionProtoType>(Param);
1435 
1436       if (FunctionProtoParam->getTypeQuals()
1437             != FunctionProtoArg->getTypeQuals() ||
1438           FunctionProtoParam->getRefQualifier()
1439             != FunctionProtoArg->getRefQualifier() ||
1440           FunctionProtoParam->isVariadic() != FunctionProtoArg->isVariadic())
1441         return Sema::TDK_NonDeducedMismatch;
1442 
1443       // Check return types.
1444       if (Sema::TemplateDeductionResult Result =
1445               DeduceTemplateArgumentsByTypeMatch(
1446                   S, TemplateParams, FunctionProtoParam->getReturnType(),
1447                   FunctionProtoArg->getReturnType(), Info, Deduced, 0))
1448         return Result;
1449 
1450       return DeduceTemplateArguments(
1451           S, TemplateParams, FunctionProtoParam->param_type_begin(),
1452           FunctionProtoParam->getNumParams(),
1453           FunctionProtoArg->param_type_begin(),
1454           FunctionProtoArg->getNumParams(), Info, Deduced, SubTDF);
1455     }
1456 
1457     case Type::InjectedClassName: {
1458       // Treat a template's injected-class-name as if the template
1459       // specialization type had been used.
1460       Param = cast<InjectedClassNameType>(Param)
1461         ->getInjectedSpecializationType();
1462       assert(isa<TemplateSpecializationType>(Param) &&
1463              "injected class name is not a template specialization type");
1464       // fall through
1465     }
1466 
1467     //     template-name<T> (where template-name refers to a class template)
1468     //     template-name<i>
1469     //     TT<T>
1470     //     TT<i>
1471     //     TT<>
1472     case Type::TemplateSpecialization: {
1473       const TemplateSpecializationType *SpecParam =
1474           cast<TemplateSpecializationType>(Param);
1475 
1476       // When Arg cannot be a derived class, we can just try to deduce template
1477       // arguments from the template-id.
1478       const RecordType *RecordT = Arg->getAs<RecordType>();
1479       if (!(TDF & TDF_DerivedClass) || !RecordT)
1480         return DeduceTemplateArguments(S, TemplateParams, SpecParam, Arg, Info,
1481                                        Deduced);
1482 
1483       SmallVector<DeducedTemplateArgument, 8> DeducedOrig(Deduced.begin(),
1484                                                           Deduced.end());
1485 
1486       Sema::TemplateDeductionResult Result = DeduceTemplateArguments(
1487           S, TemplateParams, SpecParam, Arg, Info, Deduced);
1488 
1489       if (Result == Sema::TDK_Success)
1490         return Result;
1491 
1492       // We cannot inspect base classes as part of deduction when the type
1493       // is incomplete, so either instantiate any templates necessary to
1494       // complete the type, or skip over it if it cannot be completed.
1495       if (!S.isCompleteType(Info.getLocation(), Arg))
1496         return Result;
1497 
1498       // C++14 [temp.deduct.call] p4b3:
1499       //   If P is a class and P has the form simple-template-id, then the
1500       //   transformed A can be a derived class of the deduced A. Likewise if
1501       //   P is a pointer to a class of the form simple-template-id, the
1502       //   transformed A can be a pointer to a derived class pointed to by the
1503       //   deduced A.
1504       //
1505       //   These alternatives are considered only if type deduction would
1506       //   otherwise fail. If they yield more than one possible deduced A, the
1507       //   type deduction fails.
1508 
1509       // Reset the incorrectly deduced argument from above.
1510       Deduced = DeducedOrig;
1511 
1512       // Use data recursion to crawl through the list of base classes.
1513       // Visited contains the set of nodes we have already visited, while
1514       // ToVisit is our stack of records that we still need to visit.
1515       llvm::SmallPtrSet<const RecordType *, 8> Visited;
1516       SmallVector<const RecordType *, 8> ToVisit;
1517       ToVisit.push_back(RecordT);
1518       bool Successful = false;
1519       SmallVector<DeducedTemplateArgument, 8> SuccessfulDeduced;
1520       while (!ToVisit.empty()) {
1521         // Retrieve the next class in the inheritance hierarchy.
1522         const RecordType *NextT = ToVisit.pop_back_val();
1523 
1524         // If we have already seen this type, skip it.
1525         if (!Visited.insert(NextT).second)
1526           continue;
1527 
1528         // If this is a base class, try to perform template argument
1529         // deduction from it.
1530         if (NextT != RecordT) {
1531           TemplateDeductionInfo BaseInfo(Info.getLocation());
1532           Sema::TemplateDeductionResult BaseResult =
1533               DeduceTemplateArguments(S, TemplateParams, SpecParam,
1534                                       QualType(NextT, 0), BaseInfo, Deduced);
1535 
1536           // If template argument deduction for this base was successful,
1537           // note that we had some success. Otherwise, ignore any deductions
1538           // from this base class.
1539           if (BaseResult == Sema::TDK_Success) {
1540             // If we've already seen some success, then deduction fails due to
1541             // an ambiguity (temp.deduct.call p5).
1542             if (Successful)
1543               return Sema::TDK_MiscellaneousDeductionFailure;
1544 
1545             Successful = true;
1546             std::swap(SuccessfulDeduced, Deduced);
1547 
1548             Info.Param = BaseInfo.Param;
1549             Info.FirstArg = BaseInfo.FirstArg;
1550             Info.SecondArg = BaseInfo.SecondArg;
1551           }
1552 
1553           Deduced = DeducedOrig;
1554         }
1555 
1556         // Visit base classes
1557         CXXRecordDecl *Next = cast<CXXRecordDecl>(NextT->getDecl());
1558         for (const auto &Base : Next->bases()) {
1559           assert(Base.getType()->isRecordType() &&
1560                  "Base class that isn't a record?");
1561           ToVisit.push_back(Base.getType()->getAs<RecordType>());
1562         }
1563       }
1564 
1565       if (Successful) {
1566         std::swap(SuccessfulDeduced, Deduced);
1567         return Sema::TDK_Success;
1568       }
1569 
1570       return Result;
1571     }
1572 
1573     //     T type::*
1574     //     T T::*
1575     //     T (type::*)()
1576     //     type (T::*)()
1577     //     type (type::*)(T)
1578     //     type (T::*)(T)
1579     //     T (type::*)(T)
1580     //     T (T::*)()
1581     //     T (T::*)(T)
1582     case Type::MemberPointer: {
1583       const MemberPointerType *MemPtrParam = cast<MemberPointerType>(Param);
1584       const MemberPointerType *MemPtrArg = dyn_cast<MemberPointerType>(Arg);
1585       if (!MemPtrArg)
1586         return Sema::TDK_NonDeducedMismatch;
1587 
1588       QualType ParamPointeeType = MemPtrParam->getPointeeType();
1589       if (ParamPointeeType->isFunctionType())
1590         S.adjustMemberFunctionCC(ParamPointeeType, /*IsStatic=*/true,
1591                                  /*IsCtorOrDtor=*/false, Info.getLocation());
1592       QualType ArgPointeeType = MemPtrArg->getPointeeType();
1593       if (ArgPointeeType->isFunctionType())
1594         S.adjustMemberFunctionCC(ArgPointeeType, /*IsStatic=*/true,
1595                                  /*IsCtorOrDtor=*/false, Info.getLocation());
1596 
1597       if (Sema::TemplateDeductionResult Result
1598             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1599                                                  ParamPointeeType,
1600                                                  ArgPointeeType,
1601                                                  Info, Deduced,
1602                                                  TDF & TDF_IgnoreQualifiers))
1603         return Result;
1604 
1605       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1606                                            QualType(MemPtrParam->getClass(), 0),
1607                                            QualType(MemPtrArg->getClass(), 0),
1608                                            Info, Deduced,
1609                                            TDF & TDF_IgnoreQualifiers);
1610     }
1611 
1612     //     (clang extension)
1613     //
1614     //     type(^)(T)
1615     //     T(^)()
1616     //     T(^)(T)
1617     case Type::BlockPointer: {
1618       const BlockPointerType *BlockPtrParam = cast<BlockPointerType>(Param);
1619       const BlockPointerType *BlockPtrArg = dyn_cast<BlockPointerType>(Arg);
1620 
1621       if (!BlockPtrArg)
1622         return Sema::TDK_NonDeducedMismatch;
1623 
1624       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1625                                                 BlockPtrParam->getPointeeType(),
1626                                                 BlockPtrArg->getPointeeType(),
1627                                                 Info, Deduced, 0);
1628     }
1629 
1630     //     (clang extension)
1631     //
1632     //     T __attribute__(((ext_vector_type(<integral constant>))))
1633     case Type::ExtVector: {
1634       const ExtVectorType *VectorParam = cast<ExtVectorType>(Param);
1635       if (const ExtVectorType *VectorArg = dyn_cast<ExtVectorType>(Arg)) {
1636         // Make sure that the vectors have the same number of elements.
1637         if (VectorParam->getNumElements() != VectorArg->getNumElements())
1638           return Sema::TDK_NonDeducedMismatch;
1639 
1640         // Perform deduction on the element types.
1641         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1642                                                   VectorParam->getElementType(),
1643                                                   VectorArg->getElementType(),
1644                                                   Info, Deduced, TDF);
1645       }
1646 
1647       if (const DependentSizedExtVectorType *VectorArg
1648                                 = dyn_cast<DependentSizedExtVectorType>(Arg)) {
1649         // We can't check the number of elements, since the argument has a
1650         // dependent number of elements. This can only occur during partial
1651         // ordering.
1652 
1653         // Perform deduction on the element types.
1654         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1655                                                   VectorParam->getElementType(),
1656                                                   VectorArg->getElementType(),
1657                                                   Info, Deduced, TDF);
1658       }
1659 
1660       return Sema::TDK_NonDeducedMismatch;
1661     }
1662 
1663     //     (clang extension)
1664     //
1665     //     T __attribute__(((ext_vector_type(N))))
1666     case Type::DependentSizedExtVector: {
1667       const DependentSizedExtVectorType *VectorParam
1668         = cast<DependentSizedExtVectorType>(Param);
1669 
1670       if (const ExtVectorType *VectorArg = dyn_cast<ExtVectorType>(Arg)) {
1671         // Perform deduction on the element types.
1672         if (Sema::TemplateDeductionResult Result
1673               = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1674                                                   VectorParam->getElementType(),
1675                                                    VectorArg->getElementType(),
1676                                                    Info, Deduced, TDF))
1677           return Result;
1678 
1679         // Perform deduction on the vector size, if we can.
1680         NonTypeTemplateParmDecl *NTTP
1681           = getDeducedParameterFromExpr(Info, VectorParam->getSizeExpr());
1682         if (!NTTP)
1683           return Sema::TDK_Success;
1684 
1685         llvm::APSInt ArgSize(S.Context.getTypeSize(S.Context.IntTy), false);
1686         ArgSize = VectorArg->getNumElements();
1687         // Note that we use the "array bound" rules here; just like in that
1688         // case, we don't have any particular type for the vector size, but
1689         // we can provide one if necessary.
1690         return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP, ArgSize,
1691                                              S.Context.IntTy, true, Info,
1692                                              Deduced);
1693       }
1694 
1695       if (const DependentSizedExtVectorType *VectorArg
1696                                 = dyn_cast<DependentSizedExtVectorType>(Arg)) {
1697         // Perform deduction on the element types.
1698         if (Sema::TemplateDeductionResult Result
1699             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1700                                                  VectorParam->getElementType(),
1701                                                  VectorArg->getElementType(),
1702                                                  Info, Deduced, TDF))
1703           return Result;
1704 
1705         // Perform deduction on the vector size, if we can.
1706         NonTypeTemplateParmDecl *NTTP
1707           = getDeducedParameterFromExpr(Info, VectorParam->getSizeExpr());
1708         if (!NTTP)
1709           return Sema::TDK_Success;
1710 
1711         return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP,
1712                                              VectorArg->getSizeExpr(),
1713                                              Info, Deduced);
1714       }
1715 
1716       return Sema::TDK_NonDeducedMismatch;
1717     }
1718 
1719     case Type::TypeOfExpr:
1720     case Type::TypeOf:
1721     case Type::DependentName:
1722     case Type::UnresolvedUsing:
1723     case Type::Decltype:
1724     case Type::UnaryTransform:
1725     case Type::Auto:
1726     case Type::DeducedTemplateSpecialization:
1727     case Type::DependentTemplateSpecialization:
1728     case Type::PackExpansion:
1729     case Type::Pipe:
1730       // No template argument deduction for these types
1731       return Sema::TDK_Success;
1732   }
1733 
1734   llvm_unreachable("Invalid Type Class!");
1735 }
1736 
1737 static Sema::TemplateDeductionResult
1738 DeduceTemplateArguments(Sema &S,
1739                         TemplateParameterList *TemplateParams,
1740                         const TemplateArgument &Param,
1741                         TemplateArgument Arg,
1742                         TemplateDeductionInfo &Info,
1743                         SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
1744   // If the template argument is a pack expansion, perform template argument
1745   // deduction against the pattern of that expansion. This only occurs during
1746   // partial ordering.
1747   if (Arg.isPackExpansion())
1748     Arg = Arg.getPackExpansionPattern();
1749 
1750   switch (Param.getKind()) {
1751   case TemplateArgument::Null:
1752     llvm_unreachable("Null template argument in parameter list");
1753 
1754   case TemplateArgument::Type:
1755     if (Arg.getKind() == TemplateArgument::Type)
1756       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1757                                                 Param.getAsType(),
1758                                                 Arg.getAsType(),
1759                                                 Info, Deduced, 0);
1760     Info.FirstArg = Param;
1761     Info.SecondArg = Arg;
1762     return Sema::TDK_NonDeducedMismatch;
1763 
1764   case TemplateArgument::Template:
1765     if (Arg.getKind() == TemplateArgument::Template)
1766       return DeduceTemplateArguments(S, TemplateParams,
1767                                      Param.getAsTemplate(),
1768                                      Arg.getAsTemplate(), Info, Deduced);
1769     Info.FirstArg = Param;
1770     Info.SecondArg = Arg;
1771     return Sema::TDK_NonDeducedMismatch;
1772 
1773   case TemplateArgument::TemplateExpansion:
1774     llvm_unreachable("caller should handle pack expansions");
1775 
1776   case TemplateArgument::Declaration:
1777     if (Arg.getKind() == TemplateArgument::Declaration &&
1778         isSameDeclaration(Param.getAsDecl(), Arg.getAsDecl()))
1779       return Sema::TDK_Success;
1780 
1781     Info.FirstArg = Param;
1782     Info.SecondArg = Arg;
1783     return Sema::TDK_NonDeducedMismatch;
1784 
1785   case TemplateArgument::NullPtr:
1786     if (Arg.getKind() == TemplateArgument::NullPtr &&
1787         S.Context.hasSameType(Param.getNullPtrType(), Arg.getNullPtrType()))
1788       return Sema::TDK_Success;
1789 
1790     Info.FirstArg = Param;
1791     Info.SecondArg = Arg;
1792     return Sema::TDK_NonDeducedMismatch;
1793 
1794   case TemplateArgument::Integral:
1795     if (Arg.getKind() == TemplateArgument::Integral) {
1796       if (hasSameExtendedValue(Param.getAsIntegral(), Arg.getAsIntegral()))
1797         return Sema::TDK_Success;
1798 
1799       Info.FirstArg = Param;
1800       Info.SecondArg = Arg;
1801       return Sema::TDK_NonDeducedMismatch;
1802     }
1803 
1804     if (Arg.getKind() == TemplateArgument::Expression) {
1805       Info.FirstArg = Param;
1806       Info.SecondArg = Arg;
1807       return Sema::TDK_NonDeducedMismatch;
1808     }
1809 
1810     Info.FirstArg = Param;
1811     Info.SecondArg = Arg;
1812     return Sema::TDK_NonDeducedMismatch;
1813 
1814   case TemplateArgument::Expression: {
1815     if (NonTypeTemplateParmDecl *NTTP
1816           = getDeducedParameterFromExpr(Info, Param.getAsExpr())) {
1817       if (Arg.getKind() == TemplateArgument::Integral)
1818         return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP,
1819                                              Arg.getAsIntegral(),
1820                                              Arg.getIntegralType(),
1821                                              /*ArrayBound=*/false,
1822                                              Info, Deduced);
1823       if (Arg.getKind() == TemplateArgument::NullPtr)
1824         return DeduceNullPtrTemplateArgument(S, TemplateParams, NTTP,
1825                                              Arg.getNullPtrType(),
1826                                              Info, Deduced);
1827       if (Arg.getKind() == TemplateArgument::Expression)
1828         return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP,
1829                                              Arg.getAsExpr(), Info, Deduced);
1830       if (Arg.getKind() == TemplateArgument::Declaration)
1831         return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP,
1832                                              Arg.getAsDecl(),
1833                                              Arg.getParamTypeForDecl(),
1834                                              Info, Deduced);
1835 
1836       Info.FirstArg = Param;
1837       Info.SecondArg = Arg;
1838       return Sema::TDK_NonDeducedMismatch;
1839     }
1840 
1841     // Can't deduce anything, but that's okay.
1842     return Sema::TDK_Success;
1843   }
1844   case TemplateArgument::Pack:
1845     llvm_unreachable("Argument packs should be expanded by the caller!");
1846   }
1847 
1848   llvm_unreachable("Invalid TemplateArgument Kind!");
1849 }
1850 
1851 /// \brief Determine whether there is a template argument to be used for
1852 /// deduction.
1853 ///
1854 /// This routine "expands" argument packs in-place, overriding its input
1855 /// parameters so that \c Args[ArgIdx] will be the available template argument.
1856 ///
1857 /// \returns true if there is another template argument (which will be at
1858 /// \c Args[ArgIdx]), false otherwise.
1859 static bool hasTemplateArgumentForDeduction(ArrayRef<TemplateArgument> &Args,
1860                                             unsigned &ArgIdx) {
1861   if (ArgIdx == Args.size())
1862     return false;
1863 
1864   const TemplateArgument &Arg = Args[ArgIdx];
1865   if (Arg.getKind() != TemplateArgument::Pack)
1866     return true;
1867 
1868   assert(ArgIdx == Args.size() - 1 && "Pack not at the end of argument list?");
1869   Args = Arg.pack_elements();
1870   ArgIdx = 0;
1871   return ArgIdx < Args.size();
1872 }
1873 
1874 /// \brief Determine whether the given set of template arguments has a pack
1875 /// expansion that is not the last template argument.
1876 static bool hasPackExpansionBeforeEnd(ArrayRef<TemplateArgument> Args) {
1877   bool FoundPackExpansion = false;
1878   for (const auto &A : Args) {
1879     if (FoundPackExpansion)
1880       return true;
1881 
1882     if (A.getKind() == TemplateArgument::Pack)
1883       return hasPackExpansionBeforeEnd(A.pack_elements());
1884 
1885     if (A.isPackExpansion())
1886       FoundPackExpansion = true;
1887   }
1888 
1889   return false;
1890 }
1891 
1892 static Sema::TemplateDeductionResult
1893 DeduceTemplateArguments(Sema &S, TemplateParameterList *TemplateParams,
1894                         ArrayRef<TemplateArgument> Params,
1895                         ArrayRef<TemplateArgument> Args,
1896                         TemplateDeductionInfo &Info,
1897                         SmallVectorImpl<DeducedTemplateArgument> &Deduced,
1898                         bool NumberOfArgumentsMustMatch) {
1899   // C++0x [temp.deduct.type]p9:
1900   //   If the template argument list of P contains a pack expansion that is not
1901   //   the last template argument, the entire template argument list is a
1902   //   non-deduced context.
1903   if (hasPackExpansionBeforeEnd(Params))
1904     return Sema::TDK_Success;
1905 
1906   // C++0x [temp.deduct.type]p9:
1907   //   If P has a form that contains <T> or <i>, then each argument Pi of the
1908   //   respective template argument list P is compared with the corresponding
1909   //   argument Ai of the corresponding template argument list of A.
1910   unsigned ArgIdx = 0, ParamIdx = 0;
1911   for (; hasTemplateArgumentForDeduction(Params, ParamIdx); ++ParamIdx) {
1912     if (!Params[ParamIdx].isPackExpansion()) {
1913       // The simple case: deduce template arguments by matching Pi and Ai.
1914 
1915       // Check whether we have enough arguments.
1916       if (!hasTemplateArgumentForDeduction(Args, ArgIdx))
1917         return NumberOfArgumentsMustMatch
1918                    ? Sema::TDK_MiscellaneousDeductionFailure
1919                    : Sema::TDK_Success;
1920 
1921       // C++1z [temp.deduct.type]p9:
1922       //   During partial ordering, if Ai was originally a pack expansion [and]
1923       //   Pi is not a pack expansion, template argument deduction fails.
1924       if (Args[ArgIdx].isPackExpansion())
1925         return Sema::TDK_MiscellaneousDeductionFailure;
1926 
1927       // Perform deduction for this Pi/Ai pair.
1928       if (Sema::TemplateDeductionResult Result
1929             = DeduceTemplateArguments(S, TemplateParams,
1930                                       Params[ParamIdx], Args[ArgIdx],
1931                                       Info, Deduced))
1932         return Result;
1933 
1934       // Move to the next argument.
1935       ++ArgIdx;
1936       continue;
1937     }
1938 
1939     // The parameter is a pack expansion.
1940 
1941     // C++0x [temp.deduct.type]p9:
1942     //   If Pi is a pack expansion, then the pattern of Pi is compared with
1943     //   each remaining argument in the template argument list of A. Each
1944     //   comparison deduces template arguments for subsequent positions in the
1945     //   template parameter packs expanded by Pi.
1946     TemplateArgument Pattern = Params[ParamIdx].getPackExpansionPattern();
1947 
1948     // FIXME: If there are no remaining arguments, we can bail out early
1949     // and set any deduced parameter packs to an empty argument pack.
1950     // The latter part of this is a (minor) correctness issue.
1951 
1952     // Prepare to deduce the packs within the pattern.
1953     PackDeductionScope PackScope(S, TemplateParams, Deduced, Info, Pattern);
1954 
1955     // Keep track of the deduced template arguments for each parameter pack
1956     // expanded by this pack expansion (the outer index) and for each
1957     // template argument (the inner SmallVectors).
1958     for (; hasTemplateArgumentForDeduction(Args, ArgIdx); ++ArgIdx) {
1959       // Deduce template arguments from the pattern.
1960       if (Sema::TemplateDeductionResult Result
1961             = DeduceTemplateArguments(S, TemplateParams, Pattern, Args[ArgIdx],
1962                                       Info, Deduced))
1963         return Result;
1964 
1965       PackScope.nextPackElement();
1966     }
1967 
1968     // Build argument packs for each of the parameter packs expanded by this
1969     // pack expansion.
1970     if (auto Result = PackScope.finish())
1971       return Result;
1972   }
1973 
1974   return Sema::TDK_Success;
1975 }
1976 
1977 static Sema::TemplateDeductionResult
1978 DeduceTemplateArguments(Sema &S,
1979                         TemplateParameterList *TemplateParams,
1980                         const TemplateArgumentList &ParamList,
1981                         const TemplateArgumentList &ArgList,
1982                         TemplateDeductionInfo &Info,
1983                         SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
1984   return DeduceTemplateArguments(S, TemplateParams, ParamList.asArray(),
1985                                  ArgList.asArray(), Info, Deduced,
1986                                  /*NumberOfArgumentsMustMatch*/false);
1987 }
1988 
1989 /// \brief Determine whether two template arguments are the same.
1990 static bool isSameTemplateArg(ASTContext &Context,
1991                               TemplateArgument X,
1992                               const TemplateArgument &Y,
1993                               bool PackExpansionMatchesPack = false) {
1994   // If we're checking deduced arguments (X) against original arguments (Y),
1995   // we will have flattened packs to non-expansions in X.
1996   if (PackExpansionMatchesPack && X.isPackExpansion() && !Y.isPackExpansion())
1997     X = X.getPackExpansionPattern();
1998 
1999   if (X.getKind() != Y.getKind())
2000     return false;
2001 
2002   switch (X.getKind()) {
2003     case TemplateArgument::Null:
2004       llvm_unreachable("Comparing NULL template argument");
2005 
2006     case TemplateArgument::Type:
2007       return Context.getCanonicalType(X.getAsType()) ==
2008              Context.getCanonicalType(Y.getAsType());
2009 
2010     case TemplateArgument::Declaration:
2011       return isSameDeclaration(X.getAsDecl(), Y.getAsDecl());
2012 
2013     case TemplateArgument::NullPtr:
2014       return Context.hasSameType(X.getNullPtrType(), Y.getNullPtrType());
2015 
2016     case TemplateArgument::Template:
2017     case TemplateArgument::TemplateExpansion:
2018       return Context.getCanonicalTemplateName(
2019                     X.getAsTemplateOrTemplatePattern()).getAsVoidPointer() ==
2020              Context.getCanonicalTemplateName(
2021                     Y.getAsTemplateOrTemplatePattern()).getAsVoidPointer();
2022 
2023     case TemplateArgument::Integral:
2024       return hasSameExtendedValue(X.getAsIntegral(), Y.getAsIntegral());
2025 
2026     case TemplateArgument::Expression: {
2027       llvm::FoldingSetNodeID XID, YID;
2028       X.getAsExpr()->Profile(XID, Context, true);
2029       Y.getAsExpr()->Profile(YID, Context, true);
2030       return XID == YID;
2031     }
2032 
2033     case TemplateArgument::Pack:
2034       if (X.pack_size() != Y.pack_size())
2035         return false;
2036 
2037       for (TemplateArgument::pack_iterator XP = X.pack_begin(),
2038                                         XPEnd = X.pack_end(),
2039                                            YP = Y.pack_begin();
2040            XP != XPEnd; ++XP, ++YP)
2041         if (!isSameTemplateArg(Context, *XP, *YP, PackExpansionMatchesPack))
2042           return false;
2043 
2044       return true;
2045   }
2046 
2047   llvm_unreachable("Invalid TemplateArgument Kind!");
2048 }
2049 
2050 /// \brief Allocate a TemplateArgumentLoc where all locations have
2051 /// been initialized to the given location.
2052 ///
2053 /// \param Arg The template argument we are producing template argument
2054 /// location information for.
2055 ///
2056 /// \param NTTPType For a declaration template argument, the type of
2057 /// the non-type template parameter that corresponds to this template
2058 /// argument. Can be null if no type sugar is available to add to the
2059 /// type from the template argument.
2060 ///
2061 /// \param Loc The source location to use for the resulting template
2062 /// argument.
2063 TemplateArgumentLoc
2064 Sema::getTrivialTemplateArgumentLoc(const TemplateArgument &Arg,
2065                                     QualType NTTPType, SourceLocation Loc) {
2066   switch (Arg.getKind()) {
2067   case TemplateArgument::Null:
2068     llvm_unreachable("Can't get a NULL template argument here");
2069 
2070   case TemplateArgument::Type:
2071     return TemplateArgumentLoc(
2072         Arg, Context.getTrivialTypeSourceInfo(Arg.getAsType(), Loc));
2073 
2074   case TemplateArgument::Declaration: {
2075     if (NTTPType.isNull())
2076       NTTPType = Arg.getParamTypeForDecl();
2077     Expr *E = BuildExpressionFromDeclTemplateArgument(Arg, NTTPType, Loc)
2078                   .getAs<Expr>();
2079     return TemplateArgumentLoc(TemplateArgument(E), E);
2080   }
2081 
2082   case TemplateArgument::NullPtr: {
2083     if (NTTPType.isNull())
2084       NTTPType = Arg.getNullPtrType();
2085     Expr *E = BuildExpressionFromDeclTemplateArgument(Arg, NTTPType, Loc)
2086                   .getAs<Expr>();
2087     return TemplateArgumentLoc(TemplateArgument(NTTPType, /*isNullPtr*/true),
2088                                E);
2089   }
2090 
2091   case TemplateArgument::Integral: {
2092     Expr *E =
2093         BuildExpressionFromIntegralTemplateArgument(Arg, Loc).getAs<Expr>();
2094     return TemplateArgumentLoc(TemplateArgument(E), E);
2095   }
2096 
2097     case TemplateArgument::Template:
2098     case TemplateArgument::TemplateExpansion: {
2099       NestedNameSpecifierLocBuilder Builder;
2100       TemplateName Template = Arg.getAsTemplate();
2101       if (DependentTemplateName *DTN = Template.getAsDependentTemplateName())
2102         Builder.MakeTrivial(Context, DTN->getQualifier(), Loc);
2103       else if (QualifiedTemplateName *QTN =
2104                    Template.getAsQualifiedTemplateName())
2105         Builder.MakeTrivial(Context, QTN->getQualifier(), Loc);
2106 
2107       if (Arg.getKind() == TemplateArgument::Template)
2108         return TemplateArgumentLoc(Arg, Builder.getWithLocInContext(Context),
2109                                    Loc);
2110 
2111       return TemplateArgumentLoc(Arg, Builder.getWithLocInContext(Context),
2112                                  Loc, Loc);
2113     }
2114 
2115   case TemplateArgument::Expression:
2116     return TemplateArgumentLoc(Arg, Arg.getAsExpr());
2117 
2118   case TemplateArgument::Pack:
2119     return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo());
2120   }
2121 
2122   llvm_unreachable("Invalid TemplateArgument Kind!");
2123 }
2124 
2125 
2126 /// \brief Convert the given deduced template argument and add it to the set of
2127 /// fully-converted template arguments.
2128 static bool
2129 ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param,
2130                                DeducedTemplateArgument Arg,
2131                                NamedDecl *Template,
2132                                TemplateDeductionInfo &Info,
2133                                bool IsDeduced,
2134                                SmallVectorImpl<TemplateArgument> &Output) {
2135   auto ConvertArg = [&](DeducedTemplateArgument Arg,
2136                         unsigned ArgumentPackIndex) {
2137     // Convert the deduced template argument into a template
2138     // argument that we can check, almost as if the user had written
2139     // the template argument explicitly.
2140     TemplateArgumentLoc ArgLoc =
2141         S.getTrivialTemplateArgumentLoc(Arg, QualType(), Info.getLocation());
2142 
2143     // Check the template argument, converting it as necessary.
2144     return S.CheckTemplateArgument(
2145         Param, ArgLoc, Template, Template->getLocation(),
2146         Template->getSourceRange().getEnd(), ArgumentPackIndex, Output,
2147         IsDeduced
2148             ? (Arg.wasDeducedFromArrayBound() ? Sema::CTAK_DeducedFromArrayBound
2149                                               : Sema::CTAK_Deduced)
2150             : Sema::CTAK_Specified);
2151   };
2152 
2153   if (Arg.getKind() == TemplateArgument::Pack) {
2154     // This is a template argument pack, so check each of its arguments against
2155     // the template parameter.
2156     SmallVector<TemplateArgument, 2> PackedArgsBuilder;
2157     for (const auto &P : Arg.pack_elements()) {
2158       // When converting the deduced template argument, append it to the
2159       // general output list. We need to do this so that the template argument
2160       // checking logic has all of the prior template arguments available.
2161       DeducedTemplateArgument InnerArg(P);
2162       InnerArg.setDeducedFromArrayBound(Arg.wasDeducedFromArrayBound());
2163       assert(InnerArg.getKind() != TemplateArgument::Pack &&
2164              "deduced nested pack");
2165       if (P.isNull()) {
2166         // We deduced arguments for some elements of this pack, but not for
2167         // all of them. This happens if we get a conditionally-non-deduced
2168         // context in a pack expansion (such as an overload set in one of the
2169         // arguments).
2170         S.Diag(Param->getLocation(),
2171                diag::err_template_arg_deduced_incomplete_pack)
2172           << Arg << Param;
2173         return true;
2174       }
2175       if (ConvertArg(InnerArg, PackedArgsBuilder.size()))
2176         return true;
2177 
2178       // Move the converted template argument into our argument pack.
2179       PackedArgsBuilder.push_back(Output.pop_back_val());
2180     }
2181 
2182     // If the pack is empty, we still need to substitute into the parameter
2183     // itself, in case that substitution fails.
2184     if (PackedArgsBuilder.empty()) {
2185       LocalInstantiationScope Scope(S);
2186       TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack, Output);
2187       MultiLevelTemplateArgumentList Args(TemplateArgs);
2188 
2189       if (auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
2190         Sema::InstantiatingTemplate Inst(S, Template->getLocation(), Template,
2191                                          NTTP, Output,
2192                                          Template->getSourceRange());
2193         if (Inst.isInvalid() ||
2194             S.SubstType(NTTP->getType(), Args, NTTP->getLocation(),
2195                         NTTP->getDeclName()).isNull())
2196           return true;
2197       } else if (auto *TTP = dyn_cast<TemplateTemplateParmDecl>(Param)) {
2198         Sema::InstantiatingTemplate Inst(S, Template->getLocation(), Template,
2199                                          TTP, Output,
2200                                          Template->getSourceRange());
2201         if (Inst.isInvalid() || !S.SubstDecl(TTP, S.CurContext, Args))
2202           return true;
2203       }
2204       // For type parameters, no substitution is ever required.
2205     }
2206 
2207     // Create the resulting argument pack.
2208     Output.push_back(
2209         TemplateArgument::CreatePackCopy(S.Context, PackedArgsBuilder));
2210     return false;
2211   }
2212 
2213   return ConvertArg(Arg, 0);
2214 }
2215 
2216 // FIXME: This should not be a template, but
2217 // ClassTemplatePartialSpecializationDecl sadly does not derive from
2218 // TemplateDecl.
2219 template<typename TemplateDeclT>
2220 static Sema::TemplateDeductionResult ConvertDeducedTemplateArguments(
2221     Sema &S, TemplateDeclT *Template, bool IsDeduced,
2222     SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2223     TemplateDeductionInfo &Info, SmallVectorImpl<TemplateArgument> &Builder,
2224     LocalInstantiationScope *CurrentInstantiationScope = nullptr,
2225     unsigned NumAlreadyConverted = 0, bool PartialOverloading = false) {
2226   TemplateParameterList *TemplateParams = Template->getTemplateParameters();
2227 
2228   for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {
2229     NamedDecl *Param = TemplateParams->getParam(I);
2230 
2231     if (!Deduced[I].isNull()) {
2232       if (I < NumAlreadyConverted) {
2233         // We may have had explicitly-specified template arguments for a
2234         // template parameter pack (that may or may not have been extended
2235         // via additional deduced arguments).
2236         if (Param->isParameterPack() && CurrentInstantiationScope &&
2237             CurrentInstantiationScope->getPartiallySubstitutedPack() == Param) {
2238           // Forget the partially-substituted pack; its substitution is now
2239           // complete.
2240           CurrentInstantiationScope->ResetPartiallySubstitutedPack();
2241           // We still need to check the argument in case it was extended by
2242           // deduction.
2243         } else {
2244           // We have already fully type-checked and converted this
2245           // argument, because it was explicitly-specified. Just record the
2246           // presence of this argument.
2247           Builder.push_back(Deduced[I]);
2248           continue;
2249         }
2250       }
2251 
2252       // We may have deduced this argument, so it still needs to be
2253       // checked and converted.
2254       if (ConvertDeducedTemplateArgument(S, Param, Deduced[I], Template, Info,
2255                                          IsDeduced, Builder)) {
2256         Info.Param = makeTemplateParameter(Param);
2257         // FIXME: These template arguments are temporary. Free them!
2258         Info.reset(TemplateArgumentList::CreateCopy(S.Context, Builder));
2259         return Sema::TDK_SubstitutionFailure;
2260       }
2261 
2262       continue;
2263     }
2264 
2265     // C++0x [temp.arg.explicit]p3:
2266     //    A trailing template parameter pack (14.5.3) not otherwise deduced will
2267     //    be deduced to an empty sequence of template arguments.
2268     // FIXME: Where did the word "trailing" come from?
2269     if (Param->isTemplateParameterPack()) {
2270       // We may have had explicitly-specified template arguments for this
2271       // template parameter pack. If so, our empty deduction extends the
2272       // explicitly-specified set (C++0x [temp.arg.explicit]p9).
2273       const TemplateArgument *ExplicitArgs;
2274       unsigned NumExplicitArgs;
2275       if (CurrentInstantiationScope &&
2276           CurrentInstantiationScope->getPartiallySubstitutedPack(
2277               &ExplicitArgs, &NumExplicitArgs) == Param) {
2278         Builder.push_back(TemplateArgument(
2279             llvm::makeArrayRef(ExplicitArgs, NumExplicitArgs)));
2280 
2281         // Forget the partially-substituted pack; its substitution is now
2282         // complete.
2283         CurrentInstantiationScope->ResetPartiallySubstitutedPack();
2284       } else {
2285         // Go through the motions of checking the empty argument pack against
2286         // the parameter pack.
2287         DeducedTemplateArgument DeducedPack(TemplateArgument::getEmptyPack());
2288         if (ConvertDeducedTemplateArgument(S, Param, DeducedPack, Template,
2289                                            Info, IsDeduced, Builder)) {
2290           Info.Param = makeTemplateParameter(Param);
2291           // FIXME: These template arguments are temporary. Free them!
2292           Info.reset(TemplateArgumentList::CreateCopy(S.Context, Builder));
2293           return Sema::TDK_SubstitutionFailure;
2294         }
2295       }
2296       continue;
2297     }
2298 
2299     // Substitute into the default template argument, if available.
2300     bool HasDefaultArg = false;
2301     TemplateDecl *TD = dyn_cast<TemplateDecl>(Template);
2302     if (!TD) {
2303       assert(isa<ClassTemplatePartialSpecializationDecl>(Template));
2304       return Sema::TDK_Incomplete;
2305     }
2306 
2307     TemplateArgumentLoc DefArg = S.SubstDefaultTemplateArgumentIfAvailable(
2308         TD, TD->getLocation(), TD->getSourceRange().getEnd(), Param, Builder,
2309         HasDefaultArg);
2310 
2311     // If there was no default argument, deduction is incomplete.
2312     if (DefArg.getArgument().isNull()) {
2313       Info.Param = makeTemplateParameter(
2314           const_cast<NamedDecl *>(TemplateParams->getParam(I)));
2315       Info.reset(TemplateArgumentList::CreateCopy(S.Context, Builder));
2316       if (PartialOverloading) break;
2317 
2318       return HasDefaultArg ? Sema::TDK_SubstitutionFailure
2319                            : Sema::TDK_Incomplete;
2320     }
2321 
2322     // Check whether we can actually use the default argument.
2323     if (S.CheckTemplateArgument(Param, DefArg, TD, TD->getLocation(),
2324                                 TD->getSourceRange().getEnd(), 0, Builder,
2325                                 Sema::CTAK_Specified)) {
2326       Info.Param = makeTemplateParameter(
2327                          const_cast<NamedDecl *>(TemplateParams->getParam(I)));
2328       // FIXME: These template arguments are temporary. Free them!
2329       Info.reset(TemplateArgumentList::CreateCopy(S.Context, Builder));
2330       return Sema::TDK_SubstitutionFailure;
2331     }
2332 
2333     // If we get here, we successfully used the default template argument.
2334   }
2335 
2336   return Sema::TDK_Success;
2337 }
2338 
2339 DeclContext *getAsDeclContextOrEnclosing(Decl *D) {
2340   if (auto *DC = dyn_cast<DeclContext>(D))
2341     return DC;
2342   return D->getDeclContext();
2343 }
2344 
2345 template<typename T> struct IsPartialSpecialization {
2346   static constexpr bool value = false;
2347 };
2348 template<>
2349 struct IsPartialSpecialization<ClassTemplatePartialSpecializationDecl> {
2350   static constexpr bool value = true;
2351 };
2352 template<>
2353 struct IsPartialSpecialization<VarTemplatePartialSpecializationDecl> {
2354   static constexpr bool value = true;
2355 };
2356 
2357 /// Complete template argument deduction for a partial specialization.
2358 template <typename T>
2359 static typename std::enable_if<IsPartialSpecialization<T>::value,
2360                                Sema::TemplateDeductionResult>::type
2361 FinishTemplateArgumentDeduction(
2362     Sema &S, T *Partial, bool IsPartialOrdering,
2363     const TemplateArgumentList &TemplateArgs,
2364     SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2365     TemplateDeductionInfo &Info) {
2366   // Unevaluated SFINAE context.
2367   EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
2368   Sema::SFINAETrap Trap(S);
2369 
2370   Sema::ContextRAII SavedContext(S, getAsDeclContextOrEnclosing(Partial));
2371 
2372   // C++ [temp.deduct.type]p2:
2373   //   [...] or if any template argument remains neither deduced nor
2374   //   explicitly specified, template argument deduction fails.
2375   SmallVector<TemplateArgument, 4> Builder;
2376   if (auto Result = ConvertDeducedTemplateArguments(
2377           S, Partial, IsPartialOrdering, Deduced, Info, Builder))
2378     return Result;
2379 
2380   // Form the template argument list from the deduced template arguments.
2381   TemplateArgumentList *DeducedArgumentList
2382     = TemplateArgumentList::CreateCopy(S.Context, Builder);
2383 
2384   Info.reset(DeducedArgumentList);
2385 
2386   // Substitute the deduced template arguments into the template
2387   // arguments of the class template partial specialization, and
2388   // verify that the instantiated template arguments are both valid
2389   // and are equivalent to the template arguments originally provided
2390   // to the class template.
2391   LocalInstantiationScope InstScope(S);
2392   auto *Template = Partial->getSpecializedTemplate();
2393   const ASTTemplateArgumentListInfo *PartialTemplArgInfo =
2394       Partial->getTemplateArgsAsWritten();
2395   const TemplateArgumentLoc *PartialTemplateArgs =
2396       PartialTemplArgInfo->getTemplateArgs();
2397 
2398   TemplateArgumentListInfo InstArgs(PartialTemplArgInfo->LAngleLoc,
2399                                     PartialTemplArgInfo->RAngleLoc);
2400 
2401   if (S.Subst(PartialTemplateArgs, PartialTemplArgInfo->NumTemplateArgs,
2402               InstArgs, MultiLevelTemplateArgumentList(*DeducedArgumentList))) {
2403     unsigned ArgIdx = InstArgs.size(), ParamIdx = ArgIdx;
2404     if (ParamIdx >= Partial->getTemplateParameters()->size())
2405       ParamIdx = Partial->getTemplateParameters()->size() - 1;
2406 
2407     Decl *Param = const_cast<NamedDecl *>(
2408         Partial->getTemplateParameters()->getParam(ParamIdx));
2409     Info.Param = makeTemplateParameter(Param);
2410     Info.FirstArg = PartialTemplateArgs[ArgIdx].getArgument();
2411     return Sema::TDK_SubstitutionFailure;
2412   }
2413 
2414   SmallVector<TemplateArgument, 4> ConvertedInstArgs;
2415   if (S.CheckTemplateArgumentList(Template, Partial->getLocation(), InstArgs,
2416                                   false, ConvertedInstArgs))
2417     return Sema::TDK_SubstitutionFailure;
2418 
2419   TemplateParameterList *TemplateParams = Template->getTemplateParameters();
2420   for (unsigned I = 0, E = TemplateParams->size(); I != E; ++I) {
2421     TemplateArgument InstArg = ConvertedInstArgs.data()[I];
2422     if (!isSameTemplateArg(S.Context, TemplateArgs[I], InstArg)) {
2423       Info.Param = makeTemplateParameter(TemplateParams->getParam(I));
2424       Info.FirstArg = TemplateArgs[I];
2425       Info.SecondArg = InstArg;
2426       return Sema::TDK_NonDeducedMismatch;
2427     }
2428   }
2429 
2430   if (Trap.hasErrorOccurred())
2431     return Sema::TDK_SubstitutionFailure;
2432 
2433   return Sema::TDK_Success;
2434 }
2435 
2436 /// Complete template argument deduction for a class or variable template,
2437 /// when partial ordering against a partial specialization.
2438 // FIXME: Factor out duplication with partial specialization version above.
2439 Sema::TemplateDeductionResult FinishTemplateArgumentDeduction(
2440     Sema &S, TemplateDecl *Template, bool PartialOrdering,
2441     const TemplateArgumentList &TemplateArgs,
2442     SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2443     TemplateDeductionInfo &Info) {
2444   // Unevaluated SFINAE context.
2445   EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
2446   Sema::SFINAETrap Trap(S);
2447 
2448   Sema::ContextRAII SavedContext(S, getAsDeclContextOrEnclosing(Template));
2449 
2450   // C++ [temp.deduct.type]p2:
2451   //   [...] or if any template argument remains neither deduced nor
2452   //   explicitly specified, template argument deduction fails.
2453   SmallVector<TemplateArgument, 4> Builder;
2454   if (auto Result = ConvertDeducedTemplateArguments(
2455           S, Template, /*IsDeduced*/PartialOrdering, Deduced, Info, Builder))
2456     return Result;
2457 
2458   // Check that we produced the correct argument list.
2459   TemplateParameterList *TemplateParams = Template->getTemplateParameters();
2460   for (unsigned I = 0, E = TemplateParams->size(); I != E; ++I) {
2461     TemplateArgument InstArg = Builder[I];
2462     if (!isSameTemplateArg(S.Context, TemplateArgs[I], InstArg,
2463                            /*PackExpansionMatchesPack*/true)) {
2464       Info.Param = makeTemplateParameter(TemplateParams->getParam(I));
2465       Info.FirstArg = TemplateArgs[I];
2466       Info.SecondArg = InstArg;
2467       return Sema::TDK_NonDeducedMismatch;
2468     }
2469   }
2470 
2471   if (Trap.hasErrorOccurred())
2472     return Sema::TDK_SubstitutionFailure;
2473 
2474   return Sema::TDK_Success;
2475 }
2476 
2477 
2478 /// \brief Perform template argument deduction to determine whether
2479 /// the given template arguments match the given class template
2480 /// partial specialization per C++ [temp.class.spec.match].
2481 Sema::TemplateDeductionResult
2482 Sema::DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
2483                               const TemplateArgumentList &TemplateArgs,
2484                               TemplateDeductionInfo &Info) {
2485   if (Partial->isInvalidDecl())
2486     return TDK_Invalid;
2487 
2488   // C++ [temp.class.spec.match]p2:
2489   //   A partial specialization matches a given actual template
2490   //   argument list if the template arguments of the partial
2491   //   specialization can be deduced from the actual template argument
2492   //   list (14.8.2).
2493 
2494   // Unevaluated SFINAE context.
2495   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
2496   SFINAETrap Trap(*this);
2497 
2498   SmallVector<DeducedTemplateArgument, 4> Deduced;
2499   Deduced.resize(Partial->getTemplateParameters()->size());
2500   if (TemplateDeductionResult Result
2501         = ::DeduceTemplateArguments(*this,
2502                                     Partial->getTemplateParameters(),
2503                                     Partial->getTemplateArgs(),
2504                                     TemplateArgs, Info, Deduced))
2505     return Result;
2506 
2507   SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(), Deduced.end());
2508   InstantiatingTemplate Inst(*this, Info.getLocation(), Partial, DeducedArgs,
2509                              Info);
2510   if (Inst.isInvalid())
2511     return TDK_InstantiationDepth;
2512 
2513   if (Trap.hasErrorOccurred())
2514     return Sema::TDK_SubstitutionFailure;
2515 
2516   return ::FinishTemplateArgumentDeduction(
2517       *this, Partial, /*PartialOrdering=*/false, TemplateArgs, Deduced, Info);
2518 }
2519 
2520 /// \brief Perform template argument deduction to determine whether
2521 /// the given template arguments match the given variable template
2522 /// partial specialization per C++ [temp.class.spec.match].
2523 Sema::TemplateDeductionResult
2524 Sema::DeduceTemplateArguments(VarTemplatePartialSpecializationDecl *Partial,
2525                               const TemplateArgumentList &TemplateArgs,
2526                               TemplateDeductionInfo &Info) {
2527   if (Partial->isInvalidDecl())
2528     return TDK_Invalid;
2529 
2530   // C++ [temp.class.spec.match]p2:
2531   //   A partial specialization matches a given actual template
2532   //   argument list if the template arguments of the partial
2533   //   specialization can be deduced from the actual template argument
2534   //   list (14.8.2).
2535 
2536   // Unevaluated SFINAE context.
2537   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
2538   SFINAETrap Trap(*this);
2539 
2540   SmallVector<DeducedTemplateArgument, 4> Deduced;
2541   Deduced.resize(Partial->getTemplateParameters()->size());
2542   if (TemplateDeductionResult Result = ::DeduceTemplateArguments(
2543           *this, Partial->getTemplateParameters(), Partial->getTemplateArgs(),
2544           TemplateArgs, Info, Deduced))
2545     return Result;
2546 
2547   SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(), Deduced.end());
2548   InstantiatingTemplate Inst(*this, Info.getLocation(), Partial, DeducedArgs,
2549                              Info);
2550   if (Inst.isInvalid())
2551     return TDK_InstantiationDepth;
2552 
2553   if (Trap.hasErrorOccurred())
2554     return Sema::TDK_SubstitutionFailure;
2555 
2556   return ::FinishTemplateArgumentDeduction(
2557       *this, Partial, /*PartialOrdering=*/false, TemplateArgs, Deduced, Info);
2558 }
2559 
2560 /// \brief Determine whether the given type T is a simple-template-id type.
2561 static bool isSimpleTemplateIdType(QualType T) {
2562   if (const TemplateSpecializationType *Spec
2563         = T->getAs<TemplateSpecializationType>())
2564     return Spec->getTemplateName().getAsTemplateDecl() != nullptr;
2565 
2566   return false;
2567 }
2568 
2569 static void
2570 MarkUsedTemplateParameters(ASTContext &Ctx, QualType T,
2571                            bool OnlyDeduced,
2572                            unsigned Level,
2573                            llvm::SmallBitVector &Deduced);
2574 
2575 /// \brief Substitute the explicitly-provided template arguments into the
2576 /// given function template according to C++ [temp.arg.explicit].
2577 ///
2578 /// \param FunctionTemplate the function template into which the explicit
2579 /// template arguments will be substituted.
2580 ///
2581 /// \param ExplicitTemplateArgs the explicitly-specified template
2582 /// arguments.
2583 ///
2584 /// \param Deduced the deduced template arguments, which will be populated
2585 /// with the converted and checked explicit template arguments.
2586 ///
2587 /// \param ParamTypes will be populated with the instantiated function
2588 /// parameters.
2589 ///
2590 /// \param FunctionType if non-NULL, the result type of the function template
2591 /// will also be instantiated and the pointed-to value will be updated with
2592 /// the instantiated function type.
2593 ///
2594 /// \param Info if substitution fails for any reason, this object will be
2595 /// populated with more information about the failure.
2596 ///
2597 /// \returns TDK_Success if substitution was successful, or some failure
2598 /// condition.
2599 Sema::TemplateDeductionResult
2600 Sema::SubstituteExplicitTemplateArguments(
2601                                       FunctionTemplateDecl *FunctionTemplate,
2602                                TemplateArgumentListInfo &ExplicitTemplateArgs,
2603                        SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2604                                  SmallVectorImpl<QualType> &ParamTypes,
2605                                           QualType *FunctionType,
2606                                           TemplateDeductionInfo &Info) {
2607   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
2608   TemplateParameterList *TemplateParams
2609     = FunctionTemplate->getTemplateParameters();
2610 
2611   if (ExplicitTemplateArgs.size() == 0) {
2612     // No arguments to substitute; just copy over the parameter types and
2613     // fill in the function type.
2614     for (auto P : Function->parameters())
2615       ParamTypes.push_back(P->getType());
2616 
2617     if (FunctionType)
2618       *FunctionType = Function->getType();
2619     return TDK_Success;
2620   }
2621 
2622   // Unevaluated SFINAE context.
2623   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
2624   SFINAETrap Trap(*this);
2625 
2626   // C++ [temp.arg.explicit]p3:
2627   //   Template arguments that are present shall be specified in the
2628   //   declaration order of their corresponding template-parameters. The
2629   //   template argument list shall not specify more template-arguments than
2630   //   there are corresponding template-parameters.
2631   SmallVector<TemplateArgument, 4> Builder;
2632 
2633   // Enter a new template instantiation context where we check the
2634   // explicitly-specified template arguments against this function template,
2635   // and then substitute them into the function parameter types.
2636   SmallVector<TemplateArgument, 4> DeducedArgs;
2637   InstantiatingTemplate Inst(*this, Info.getLocation(), FunctionTemplate,
2638                              DeducedArgs,
2639            ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution,
2640                              Info);
2641   if (Inst.isInvalid())
2642     return TDK_InstantiationDepth;
2643 
2644   if (CheckTemplateArgumentList(FunctionTemplate, SourceLocation(),
2645                                 ExplicitTemplateArgs, true, Builder, false) ||
2646       Trap.hasErrorOccurred()) {
2647     unsigned Index = Builder.size();
2648     if (Index >= TemplateParams->size())
2649       Index = TemplateParams->size() - 1;
2650     Info.Param = makeTemplateParameter(TemplateParams->getParam(Index));
2651     return TDK_InvalidExplicitArguments;
2652   }
2653 
2654   // Form the template argument list from the explicitly-specified
2655   // template arguments.
2656   TemplateArgumentList *ExplicitArgumentList
2657     = TemplateArgumentList::CreateCopy(Context, Builder);
2658   Info.reset(ExplicitArgumentList);
2659 
2660   // Template argument deduction and the final substitution should be
2661   // done in the context of the templated declaration.  Explicit
2662   // argument substitution, on the other hand, needs to happen in the
2663   // calling context.
2664   ContextRAII SavedContext(*this, FunctionTemplate->getTemplatedDecl());
2665 
2666   // If we deduced template arguments for a template parameter pack,
2667   // note that the template argument pack is partially substituted and record
2668   // the explicit template arguments. They'll be used as part of deduction
2669   // for this template parameter pack.
2670   for (unsigned I = 0, N = Builder.size(); I != N; ++I) {
2671     const TemplateArgument &Arg = Builder[I];
2672     if (Arg.getKind() == TemplateArgument::Pack) {
2673       CurrentInstantiationScope->SetPartiallySubstitutedPack(
2674                                                  TemplateParams->getParam(I),
2675                                                              Arg.pack_begin(),
2676                                                              Arg.pack_size());
2677       break;
2678     }
2679   }
2680 
2681   const FunctionProtoType *Proto
2682     = Function->getType()->getAs<FunctionProtoType>();
2683   assert(Proto && "Function template does not have a prototype?");
2684 
2685   // Isolate our substituted parameters from our caller.
2686   LocalInstantiationScope InstScope(*this, /*MergeWithOuterScope*/true);
2687 
2688   ExtParameterInfoBuilder ExtParamInfos;
2689 
2690   // Instantiate the types of each of the function parameters given the
2691   // explicitly-specified template arguments. If the function has a trailing
2692   // return type, substitute it after the arguments to ensure we substitute
2693   // in lexical order.
2694   if (Proto->hasTrailingReturn()) {
2695     if (SubstParmTypes(Function->getLocation(), Function->parameters(),
2696                        Proto->getExtParameterInfosOrNull(),
2697                        MultiLevelTemplateArgumentList(*ExplicitArgumentList),
2698                        ParamTypes, /*params*/ nullptr, ExtParamInfos))
2699       return TDK_SubstitutionFailure;
2700   }
2701 
2702   // Instantiate the return type.
2703   QualType ResultType;
2704   {
2705     // C++11 [expr.prim.general]p3:
2706     //   If a declaration declares a member function or member function
2707     //   template of a class X, the expression this is a prvalue of type
2708     //   "pointer to cv-qualifier-seq X" between the optional cv-qualifer-seq
2709     //   and the end of the function-definition, member-declarator, or
2710     //   declarator.
2711     unsigned ThisTypeQuals = 0;
2712     CXXRecordDecl *ThisContext = nullptr;
2713     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
2714       ThisContext = Method->getParent();
2715       ThisTypeQuals = Method->getTypeQualifiers();
2716     }
2717 
2718     CXXThisScopeRAII ThisScope(*this, ThisContext, ThisTypeQuals,
2719                                getLangOpts().CPlusPlus11);
2720 
2721     ResultType =
2722         SubstType(Proto->getReturnType(),
2723                   MultiLevelTemplateArgumentList(*ExplicitArgumentList),
2724                   Function->getTypeSpecStartLoc(), Function->getDeclName());
2725     if (ResultType.isNull() || Trap.hasErrorOccurred())
2726       return TDK_SubstitutionFailure;
2727   }
2728 
2729   // Instantiate the types of each of the function parameters given the
2730   // explicitly-specified template arguments if we didn't do so earlier.
2731   if (!Proto->hasTrailingReturn() &&
2732       SubstParmTypes(Function->getLocation(), Function->parameters(),
2733                      Proto->getExtParameterInfosOrNull(),
2734                      MultiLevelTemplateArgumentList(*ExplicitArgumentList),
2735                      ParamTypes, /*params*/ nullptr, ExtParamInfos))
2736     return TDK_SubstitutionFailure;
2737 
2738   if (FunctionType) {
2739     auto EPI = Proto->getExtProtoInfo();
2740     EPI.ExtParameterInfos = ExtParamInfos.getPointerOrNull(ParamTypes.size());
2741     *FunctionType = BuildFunctionType(ResultType, ParamTypes,
2742                                       Function->getLocation(),
2743                                       Function->getDeclName(),
2744                                       EPI);
2745     if (FunctionType->isNull() || Trap.hasErrorOccurred())
2746       return TDK_SubstitutionFailure;
2747   }
2748 
2749   // C++ [temp.arg.explicit]p2:
2750   //   Trailing template arguments that can be deduced (14.8.2) may be
2751   //   omitted from the list of explicit template-arguments. If all of the
2752   //   template arguments can be deduced, they may all be omitted; in this
2753   //   case, the empty template argument list <> itself may also be omitted.
2754   //
2755   // Take all of the explicitly-specified arguments and put them into
2756   // the set of deduced template arguments. Explicitly-specified
2757   // parameter packs, however, will be set to NULL since the deduction
2758   // mechanisms handle explicitly-specified argument packs directly.
2759   Deduced.reserve(TemplateParams->size());
2760   for (unsigned I = 0, N = ExplicitArgumentList->size(); I != N; ++I) {
2761     const TemplateArgument &Arg = ExplicitArgumentList->get(I);
2762     if (Arg.getKind() == TemplateArgument::Pack)
2763       Deduced.push_back(DeducedTemplateArgument());
2764     else
2765       Deduced.push_back(Arg);
2766   }
2767 
2768   return TDK_Success;
2769 }
2770 
2771 /// \brief Check whether the deduced argument type for a call to a function
2772 /// template matches the actual argument type per C++ [temp.deduct.call]p4.
2773 static bool
2774 CheckOriginalCallArgDeduction(Sema &S, Sema::OriginalCallArg OriginalArg,
2775                               QualType DeducedA) {
2776   ASTContext &Context = S.Context;
2777 
2778   QualType A = OriginalArg.OriginalArgType;
2779   QualType OriginalParamType = OriginalArg.OriginalParamType;
2780 
2781   // Check for type equality (top-level cv-qualifiers are ignored).
2782   if (Context.hasSameUnqualifiedType(A, DeducedA))
2783     return false;
2784 
2785   // Strip off references on the argument types; they aren't needed for
2786   // the following checks.
2787   if (const ReferenceType *DeducedARef = DeducedA->getAs<ReferenceType>())
2788     DeducedA = DeducedARef->getPointeeType();
2789   if (const ReferenceType *ARef = A->getAs<ReferenceType>())
2790     A = ARef->getPointeeType();
2791 
2792   // C++ [temp.deduct.call]p4:
2793   //   [...] However, there are three cases that allow a difference:
2794   //     - If the original P is a reference type, the deduced A (i.e., the
2795   //       type referred to by the reference) can be more cv-qualified than
2796   //       the transformed A.
2797   if (const ReferenceType *OriginalParamRef
2798       = OriginalParamType->getAs<ReferenceType>()) {
2799     // We don't want to keep the reference around any more.
2800     OriginalParamType = OriginalParamRef->getPointeeType();
2801 
2802     // FIXME: Resolve core issue (no number yet): if the original P is a
2803     // reference type and the transformed A is function type "noexcept F",
2804     // the deduced A can be F.
2805     QualType Tmp;
2806     if (A->isFunctionType() && S.IsFunctionConversion(A, DeducedA, Tmp))
2807       return false;
2808 
2809     Qualifiers AQuals = A.getQualifiers();
2810     Qualifiers DeducedAQuals = DeducedA.getQualifiers();
2811 
2812     // Under Objective-C++ ARC, the deduced type may have implicitly
2813     // been given strong or (when dealing with a const reference)
2814     // unsafe_unretained lifetime. If so, update the original
2815     // qualifiers to include this lifetime.
2816     if (S.getLangOpts().ObjCAutoRefCount &&
2817         ((DeducedAQuals.getObjCLifetime() == Qualifiers::OCL_Strong &&
2818           AQuals.getObjCLifetime() == Qualifiers::OCL_None) ||
2819          (DeducedAQuals.hasConst() &&
2820           DeducedAQuals.getObjCLifetime() == Qualifiers::OCL_ExplicitNone))) {
2821       AQuals.setObjCLifetime(DeducedAQuals.getObjCLifetime());
2822     }
2823 
2824     if (AQuals == DeducedAQuals) {
2825       // Qualifiers match; there's nothing to do.
2826     } else if (!DeducedAQuals.compatiblyIncludes(AQuals)) {
2827       return true;
2828     } else {
2829       // Qualifiers are compatible, so have the argument type adopt the
2830       // deduced argument type's qualifiers as if we had performed the
2831       // qualification conversion.
2832       A = Context.getQualifiedType(A.getUnqualifiedType(), DeducedAQuals);
2833     }
2834   }
2835 
2836   //    - The transformed A can be another pointer or pointer to member
2837   //      type that can be converted to the deduced A via a function pointer
2838   //      conversion and/or a qualification conversion.
2839   //
2840   // Also allow conversions which merely strip __attribute__((noreturn)) from
2841   // function types (recursively).
2842   bool ObjCLifetimeConversion = false;
2843   QualType ResultTy;
2844   if ((A->isAnyPointerType() || A->isMemberPointerType()) &&
2845       (S.IsQualificationConversion(A, DeducedA, false,
2846                                    ObjCLifetimeConversion) ||
2847        S.IsFunctionConversion(A, DeducedA, ResultTy)))
2848     return false;
2849 
2850   //    - If P is a class and P has the form simple-template-id, then the
2851   //      transformed A can be a derived class of the deduced A. [...]
2852   //     [...] Likewise, if P is a pointer to a class of the form
2853   //      simple-template-id, the transformed A can be a pointer to a
2854   //      derived class pointed to by the deduced A.
2855   if (const PointerType *OriginalParamPtr
2856       = OriginalParamType->getAs<PointerType>()) {
2857     if (const PointerType *DeducedAPtr = DeducedA->getAs<PointerType>()) {
2858       if (const PointerType *APtr = A->getAs<PointerType>()) {
2859         if (A->getPointeeType()->isRecordType()) {
2860           OriginalParamType = OriginalParamPtr->getPointeeType();
2861           DeducedA = DeducedAPtr->getPointeeType();
2862           A = APtr->getPointeeType();
2863         }
2864       }
2865     }
2866   }
2867 
2868   if (Context.hasSameUnqualifiedType(A, DeducedA))
2869     return false;
2870 
2871   if (A->isRecordType() && isSimpleTemplateIdType(OriginalParamType) &&
2872       S.IsDerivedFrom(SourceLocation(), A, DeducedA))
2873     return false;
2874 
2875   return true;
2876 }
2877 
2878 /// Find the pack index for a particular parameter index in an instantiation of
2879 /// a function template with specific arguments.
2880 ///
2881 /// \return The pack index for whichever pack produced this parameter, or -1
2882 ///         if this was not produced by a parameter. Intended to be used as the
2883 ///         ArgumentPackSubstitutionIndex for further substitutions.
2884 // FIXME: We should track this in OriginalCallArgs so we don't need to
2885 // reconstruct it here.
2886 static unsigned getPackIndexForParam(Sema &S,
2887                                      FunctionTemplateDecl *FunctionTemplate,
2888                                      const MultiLevelTemplateArgumentList &Args,
2889                                      unsigned ParamIdx) {
2890   unsigned Idx = 0;
2891   for (auto *PD : FunctionTemplate->getTemplatedDecl()->parameters()) {
2892     if (PD->isParameterPack()) {
2893       unsigned NumExpansions =
2894           S.getNumArgumentsInExpansion(PD->getType(), Args).getValueOr(1);
2895       if (Idx + NumExpansions > ParamIdx)
2896         return ParamIdx - Idx;
2897       Idx += NumExpansions;
2898     } else {
2899       if (Idx == ParamIdx)
2900         return -1; // Not a pack expansion
2901       ++Idx;
2902     }
2903   }
2904 
2905   llvm_unreachable("parameter index would not be produced from template");
2906 }
2907 
2908 /// \brief Finish template argument deduction for a function template,
2909 /// checking the deduced template arguments for completeness and forming
2910 /// the function template specialization.
2911 ///
2912 /// \param OriginalCallArgs If non-NULL, the original call arguments against
2913 /// which the deduced argument types should be compared.
2914 Sema::TemplateDeductionResult Sema::FinishTemplateArgumentDeduction(
2915     FunctionTemplateDecl *FunctionTemplate,
2916     SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2917     unsigned NumExplicitlySpecified, FunctionDecl *&Specialization,
2918     TemplateDeductionInfo &Info,
2919     SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs,
2920     bool PartialOverloading, llvm::function_ref<bool()> CheckNonDependent) {
2921   // Unevaluated SFINAE context.
2922   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
2923   SFINAETrap Trap(*this);
2924 
2925   // Enter a new template instantiation context while we instantiate the
2926   // actual function declaration.
2927   SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(), Deduced.end());
2928   InstantiatingTemplate Inst(*this, Info.getLocation(), FunctionTemplate,
2929                              DeducedArgs,
2930               ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution,
2931                              Info);
2932   if (Inst.isInvalid())
2933     return TDK_InstantiationDepth;
2934 
2935   ContextRAII SavedContext(*this, FunctionTemplate->getTemplatedDecl());
2936 
2937   // C++ [temp.deduct.type]p2:
2938   //   [...] or if any template argument remains neither deduced nor
2939   //   explicitly specified, template argument deduction fails.
2940   SmallVector<TemplateArgument, 4> Builder;
2941   if (auto Result = ConvertDeducedTemplateArguments(
2942           *this, FunctionTemplate, /*IsDeduced*/true, Deduced, Info, Builder,
2943           CurrentInstantiationScope, NumExplicitlySpecified,
2944           PartialOverloading))
2945     return Result;
2946 
2947   // C++ [temp.deduct.call]p10: [DR1391]
2948   //   If deduction succeeds for all parameters that contain
2949   //   template-parameters that participate in template argument deduction,
2950   //   and all template arguments are explicitly specified, deduced, or
2951   //   obtained from default template arguments, remaining parameters are then
2952   //   compared with the corresponding arguments. For each remaining parameter
2953   //   P with a type that was non-dependent before substitution of any
2954   //   explicitly-specified template arguments, if the corresponding argument
2955   //   A cannot be implicitly converted to P, deduction fails.
2956   if (CheckNonDependent())
2957     return TDK_NonDependentConversionFailure;
2958 
2959   // Form the template argument list from the deduced template arguments.
2960   TemplateArgumentList *DeducedArgumentList
2961     = TemplateArgumentList::CreateCopy(Context, Builder);
2962   Info.reset(DeducedArgumentList);
2963 
2964   // Substitute the deduced template arguments into the function template
2965   // declaration to produce the function template specialization.
2966   DeclContext *Owner = FunctionTemplate->getDeclContext();
2967   if (FunctionTemplate->getFriendObjectKind())
2968     Owner = FunctionTemplate->getLexicalDeclContext();
2969   MultiLevelTemplateArgumentList SubstArgs(*DeducedArgumentList);
2970   Specialization = cast_or_null<FunctionDecl>(
2971       SubstDecl(FunctionTemplate->getTemplatedDecl(), Owner, SubstArgs));
2972   if (!Specialization || Specialization->isInvalidDecl())
2973     return TDK_SubstitutionFailure;
2974 
2975   assert(Specialization->getPrimaryTemplate()->getCanonicalDecl() ==
2976          FunctionTemplate->getCanonicalDecl());
2977 
2978   // If the template argument list is owned by the function template
2979   // specialization, release it.
2980   if (Specialization->getTemplateSpecializationArgs() == DeducedArgumentList &&
2981       !Trap.hasErrorOccurred())
2982     Info.take();
2983 
2984   // There may have been an error that did not prevent us from constructing a
2985   // declaration. Mark the declaration invalid and return with a substitution
2986   // failure.
2987   if (Trap.hasErrorOccurred()) {
2988     Specialization->setInvalidDecl(true);
2989     return TDK_SubstitutionFailure;
2990   }
2991 
2992   if (OriginalCallArgs) {
2993     // C++ [temp.deduct.call]p4:
2994     //   In general, the deduction process attempts to find template argument
2995     //   values that will make the deduced A identical to A (after the type A
2996     //   is transformed as described above). [...]
2997     llvm::SmallDenseMap<std::pair<unsigned, QualType>, QualType> DeducedATypes;
2998     for (unsigned I = 0, N = OriginalCallArgs->size(); I != N; ++I) {
2999       OriginalCallArg OriginalArg = (*OriginalCallArgs)[I];
3000 
3001       auto ParamIdx = OriginalArg.ArgIdx;
3002       if (ParamIdx >= Specialization->getNumParams())
3003         // FIXME: This presumably means a pack ended up smaller than we
3004         // expected while deducing. Should this not result in deduction
3005         // failure? Can it even happen?
3006         continue;
3007 
3008       QualType DeducedA;
3009       if (!OriginalArg.DecomposedParam) {
3010         // P is one of the function parameters, just look up its substituted
3011         // type.
3012         DeducedA = Specialization->getParamDecl(ParamIdx)->getType();
3013       } else {
3014         // P is a decomposed element of a parameter corresponding to a
3015         // braced-init-list argument. Substitute back into P to find the
3016         // deduced A.
3017         QualType &CacheEntry =
3018             DeducedATypes[{ParamIdx, OriginalArg.OriginalParamType}];
3019         if (CacheEntry.isNull()) {
3020           ArgumentPackSubstitutionIndexRAII PackIndex(
3021               *this, getPackIndexForParam(*this, FunctionTemplate, SubstArgs,
3022                                           ParamIdx));
3023           CacheEntry =
3024               SubstType(OriginalArg.OriginalParamType, SubstArgs,
3025                         Specialization->getTypeSpecStartLoc(),
3026                         Specialization->getDeclName());
3027         }
3028         DeducedA = CacheEntry;
3029       }
3030 
3031       if (CheckOriginalCallArgDeduction(*this, OriginalArg, DeducedA)) {
3032         Info.FirstArg = TemplateArgument(DeducedA);
3033         Info.SecondArg = TemplateArgument(OriginalArg.OriginalArgType);
3034         Info.CallArgIndex = OriginalArg.ArgIdx;
3035         return OriginalArg.DecomposedParam ? TDK_DeducedMismatchNested
3036                                            : TDK_DeducedMismatch;
3037       }
3038     }
3039   }
3040 
3041   // If we suppressed any diagnostics while performing template argument
3042   // deduction, and if we haven't already instantiated this declaration,
3043   // keep track of these diagnostics. They'll be emitted if this specialization
3044   // is actually used.
3045   if (Info.diag_begin() != Info.diag_end()) {
3046     SuppressedDiagnosticsMap::iterator
3047       Pos = SuppressedDiagnostics.find(Specialization->getCanonicalDecl());
3048     if (Pos == SuppressedDiagnostics.end())
3049         SuppressedDiagnostics[Specialization->getCanonicalDecl()]
3050           .append(Info.diag_begin(), Info.diag_end());
3051   }
3052 
3053   return TDK_Success;
3054 }
3055 
3056 /// Gets the type of a function for template-argument-deducton
3057 /// purposes when it's considered as part of an overload set.
3058 static QualType GetTypeOfFunction(Sema &S, const OverloadExpr::FindResult &R,
3059                                   FunctionDecl *Fn) {
3060   // We may need to deduce the return type of the function now.
3061   if (S.getLangOpts().CPlusPlus14 && Fn->getReturnType()->isUndeducedType() &&
3062       S.DeduceReturnType(Fn, R.Expression->getExprLoc(), /*Diagnose*/ false))
3063     return QualType();
3064 
3065   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn))
3066     if (Method->isInstance()) {
3067       // An instance method that's referenced in a form that doesn't
3068       // look like a member pointer is just invalid.
3069       if (!R.HasFormOfMemberPointer) return QualType();
3070 
3071       return S.Context.getMemberPointerType(Fn->getType(),
3072                S.Context.getTypeDeclType(Method->getParent()).getTypePtr());
3073     }
3074 
3075   if (!R.IsAddressOfOperand) return Fn->getType();
3076   return S.Context.getPointerType(Fn->getType());
3077 }
3078 
3079 /// Apply the deduction rules for overload sets.
3080 ///
3081 /// \return the null type if this argument should be treated as an
3082 /// undeduced context
3083 static QualType
3084 ResolveOverloadForDeduction(Sema &S, TemplateParameterList *TemplateParams,
3085                             Expr *Arg, QualType ParamType,
3086                             bool ParamWasReference) {
3087 
3088   OverloadExpr::FindResult R = OverloadExpr::find(Arg);
3089 
3090   OverloadExpr *Ovl = R.Expression;
3091 
3092   // C++0x [temp.deduct.call]p4
3093   unsigned TDF = 0;
3094   if (ParamWasReference)
3095     TDF |= TDF_ParamWithReferenceType;
3096   if (R.IsAddressOfOperand)
3097     TDF |= TDF_IgnoreQualifiers;
3098 
3099   // C++0x [temp.deduct.call]p6:
3100   //   When P is a function type, pointer to function type, or pointer
3101   //   to member function type:
3102 
3103   if (!ParamType->isFunctionType() &&
3104       !ParamType->isFunctionPointerType() &&
3105       !ParamType->isMemberFunctionPointerType()) {
3106     if (Ovl->hasExplicitTemplateArgs()) {
3107       // But we can still look for an explicit specialization.
3108       if (FunctionDecl *ExplicitSpec
3109             = S.ResolveSingleFunctionTemplateSpecialization(Ovl))
3110         return GetTypeOfFunction(S, R, ExplicitSpec);
3111     }
3112 
3113     DeclAccessPair DAP;
3114     if (FunctionDecl *Viable =
3115             S.resolveAddressOfOnlyViableOverloadCandidate(Arg, DAP))
3116       return GetTypeOfFunction(S, R, Viable);
3117 
3118     return QualType();
3119   }
3120 
3121   // Gather the explicit template arguments, if any.
3122   TemplateArgumentListInfo ExplicitTemplateArgs;
3123   if (Ovl->hasExplicitTemplateArgs())
3124     Ovl->copyTemplateArgumentsInto(ExplicitTemplateArgs);
3125   QualType Match;
3126   for (UnresolvedSetIterator I = Ovl->decls_begin(),
3127          E = Ovl->decls_end(); I != E; ++I) {
3128     NamedDecl *D = (*I)->getUnderlyingDecl();
3129 
3130     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D)) {
3131       //   - If the argument is an overload set containing one or more
3132       //     function templates, the parameter is treated as a
3133       //     non-deduced context.
3134       if (!Ovl->hasExplicitTemplateArgs())
3135         return QualType();
3136 
3137       // Otherwise, see if we can resolve a function type
3138       FunctionDecl *Specialization = nullptr;
3139       TemplateDeductionInfo Info(Ovl->getNameLoc());
3140       if (S.DeduceTemplateArguments(FunTmpl, &ExplicitTemplateArgs,
3141                                     Specialization, Info))
3142         continue;
3143 
3144       D = Specialization;
3145     }
3146 
3147     FunctionDecl *Fn = cast<FunctionDecl>(D);
3148     QualType ArgType = GetTypeOfFunction(S, R, Fn);
3149     if (ArgType.isNull()) continue;
3150 
3151     // Function-to-pointer conversion.
3152     if (!ParamWasReference && ParamType->isPointerType() &&
3153         ArgType->isFunctionType())
3154       ArgType = S.Context.getPointerType(ArgType);
3155 
3156     //   - If the argument is an overload set (not containing function
3157     //     templates), trial argument deduction is attempted using each
3158     //     of the members of the set. If deduction succeeds for only one
3159     //     of the overload set members, that member is used as the
3160     //     argument value for the deduction. If deduction succeeds for
3161     //     more than one member of the overload set the parameter is
3162     //     treated as a non-deduced context.
3163 
3164     // We do all of this in a fresh context per C++0x [temp.deduct.type]p2:
3165     //   Type deduction is done independently for each P/A pair, and
3166     //   the deduced template argument values are then combined.
3167     // So we do not reject deductions which were made elsewhere.
3168     SmallVector<DeducedTemplateArgument, 8>
3169       Deduced(TemplateParams->size());
3170     TemplateDeductionInfo Info(Ovl->getNameLoc());
3171     Sema::TemplateDeductionResult Result
3172       = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams, ParamType,
3173                                            ArgType, Info, Deduced, TDF);
3174     if (Result) continue;
3175     if (!Match.isNull()) return QualType();
3176     Match = ArgType;
3177   }
3178 
3179   return Match;
3180 }
3181 
3182 /// \brief Perform the adjustments to the parameter and argument types
3183 /// described in C++ [temp.deduct.call].
3184 ///
3185 /// \returns true if the caller should not attempt to perform any template
3186 /// argument deduction based on this P/A pair because the argument is an
3187 /// overloaded function set that could not be resolved.
3188 static bool AdjustFunctionParmAndArgTypesForDeduction(Sema &S,
3189                                           TemplateParameterList *TemplateParams,
3190                                                       QualType &ParamType,
3191                                                       QualType &ArgType,
3192                                                       Expr *Arg,
3193                                                       unsigned &TDF) {
3194   // C++0x [temp.deduct.call]p3:
3195   //   If P is a cv-qualified type, the top level cv-qualifiers of P's type
3196   //   are ignored for type deduction.
3197   if (ParamType.hasQualifiers())
3198     ParamType = ParamType.getUnqualifiedType();
3199 
3200   //   [...] If P is a reference type, the type referred to by P is
3201   //   used for type deduction.
3202   const ReferenceType *ParamRefType = ParamType->getAs<ReferenceType>();
3203   if (ParamRefType)
3204     ParamType = ParamRefType->getPointeeType();
3205 
3206   // Overload sets usually make this parameter an undeduced context,
3207   // but there are sometimes special circumstances.  Typically
3208   // involving a template-id-expr.
3209   if (ArgType == S.Context.OverloadTy) {
3210     ArgType = ResolveOverloadForDeduction(S, TemplateParams,
3211                                           Arg, ParamType,
3212                                           ParamRefType != nullptr);
3213     if (ArgType.isNull())
3214       return true;
3215   }
3216 
3217   if (ParamRefType) {
3218     // If the argument has incomplete array type, try to complete its type.
3219     if (ArgType->isIncompleteArrayType()) {
3220       S.completeExprArrayBound(Arg);
3221       ArgType = Arg->getType();
3222     }
3223 
3224     // C++0x [temp.deduct.call]p3:
3225     //   If P is an rvalue reference to a cv-unqualified template
3226     //   parameter and the argument is an lvalue, the type "lvalue
3227     //   reference to A" is used in place of A for type deduction.
3228     if (ParamRefType->isRValueReferenceType() &&
3229         !ParamType.getQualifiers() &&
3230         isa<TemplateTypeParmType>(ParamType) &&
3231         Arg->isLValue())
3232       ArgType = S.Context.getLValueReferenceType(ArgType);
3233   } else {
3234     // C++ [temp.deduct.call]p2:
3235     //   If P is not a reference type:
3236     //   - If A is an array type, the pointer type produced by the
3237     //     array-to-pointer standard conversion (4.2) is used in place of
3238     //     A for type deduction; otherwise,
3239     if (ArgType->isArrayType())
3240       ArgType = S.Context.getArrayDecayedType(ArgType);
3241     //   - If A is a function type, the pointer type produced by the
3242     //     function-to-pointer standard conversion (4.3) is used in place
3243     //     of A for type deduction; otherwise,
3244     else if (ArgType->isFunctionType())
3245       ArgType = S.Context.getPointerType(ArgType);
3246     else {
3247       // - If A is a cv-qualified type, the top level cv-qualifiers of A's
3248       //   type are ignored for type deduction.
3249       ArgType = ArgType.getUnqualifiedType();
3250     }
3251   }
3252 
3253   // C++0x [temp.deduct.call]p4:
3254   //   In general, the deduction process attempts to find template argument
3255   //   values that will make the deduced A identical to A (after the type A
3256   //   is transformed as described above). [...]
3257   TDF = TDF_SkipNonDependent;
3258 
3259   //     - If the original P is a reference type, the deduced A (i.e., the
3260   //       type referred to by the reference) can be more cv-qualified than
3261   //       the transformed A.
3262   if (ParamRefType)
3263     TDF |= TDF_ParamWithReferenceType;
3264   //     - The transformed A can be another pointer or pointer to member
3265   //       type that can be converted to the deduced A via a qualification
3266   //       conversion (4.4).
3267   if (ArgType->isPointerType() || ArgType->isMemberPointerType() ||
3268       ArgType->isObjCObjectPointerType())
3269     TDF |= TDF_IgnoreQualifiers;
3270   //     - If P is a class and P has the form simple-template-id, then the
3271   //       transformed A can be a derived class of the deduced A. Likewise,
3272   //       if P is a pointer to a class of the form simple-template-id, the
3273   //       transformed A can be a pointer to a derived class pointed to by
3274   //       the deduced A.
3275   if (isSimpleTemplateIdType(ParamType) ||
3276       (isa<PointerType>(ParamType) &&
3277        isSimpleTemplateIdType(
3278                               ParamType->getAs<PointerType>()->getPointeeType())))
3279     TDF |= TDF_DerivedClass;
3280 
3281   return false;
3282 }
3283 
3284 static bool
3285 hasDeducibleTemplateParameters(Sema &S, FunctionTemplateDecl *FunctionTemplate,
3286                                QualType T);
3287 
3288 static Sema::TemplateDeductionResult DeduceTemplateArgumentsFromCallArgument(
3289     Sema &S, TemplateParameterList *TemplateParams, QualType ParamType,
3290     Expr *Arg, TemplateDeductionInfo &Info,
3291     SmallVectorImpl<DeducedTemplateArgument> &Deduced,
3292     SmallVectorImpl<Sema::OriginalCallArg> &OriginalCallArgs,
3293     bool DecomposedParam, unsigned ArgIdx, unsigned TDF);
3294 
3295 /// \brief Attempt template argument deduction from an initializer list
3296 ///        deemed to be an argument in a function call.
3297 static Sema::TemplateDeductionResult DeduceFromInitializerList(
3298     Sema &S, TemplateParameterList *TemplateParams, QualType AdjustedParamType,
3299     InitListExpr *ILE, TemplateDeductionInfo &Info,
3300     SmallVectorImpl<DeducedTemplateArgument> &Deduced,
3301     SmallVectorImpl<Sema::OriginalCallArg> &OriginalCallArgs, unsigned ArgIdx,
3302     unsigned TDF) {
3303   // C++ [temp.deduct.call]p1: (CWG 1591)
3304   //   If removing references and cv-qualifiers from P gives
3305   //   std::initializer_list<P0> or P0[N] for some P0 and N and the argument is
3306   //   a non-empty initializer list, then deduction is performed instead for
3307   //   each element of the initializer list, taking P0 as a function template
3308   //   parameter type and the initializer element as its argument
3309   //
3310   // We've already removed references and cv-qualifiers here.
3311   if (!ILE->getNumInits())
3312     return Sema::TDK_Success;
3313 
3314   QualType ElTy;
3315   auto *ArrTy = S.Context.getAsArrayType(AdjustedParamType);
3316   if (ArrTy)
3317     ElTy = ArrTy->getElementType();
3318   else if (!S.isStdInitializerList(AdjustedParamType, &ElTy)) {
3319     //   Otherwise, an initializer list argument causes the parameter to be
3320     //   considered a non-deduced context
3321     return Sema::TDK_Success;
3322   }
3323 
3324   // Deduction only needs to be done for dependent types.
3325   if (ElTy->isDependentType()) {
3326     for (Expr *E : ILE->inits()) {
3327       if (auto Result = DeduceTemplateArgumentsFromCallArgument(
3328               S, TemplateParams, ElTy, E, Info, Deduced, OriginalCallArgs, true,
3329               ArgIdx, TDF))
3330         return Result;
3331     }
3332   }
3333 
3334   //   in the P0[N] case, if N is a non-type template parameter, N is deduced
3335   //   from the length of the initializer list.
3336   if (auto *DependentArrTy = dyn_cast_or_null<DependentSizedArrayType>(ArrTy)) {
3337     // Determine the array bound is something we can deduce.
3338     if (NonTypeTemplateParmDecl *NTTP =
3339             getDeducedParameterFromExpr(Info, DependentArrTy->getSizeExpr())) {
3340       // We can perform template argument deduction for the given non-type
3341       // template parameter.
3342       llvm::APInt Size(S.Context.getIntWidth(NTTP->getType()),
3343                        ILE->getNumInits());
3344       if (auto Result = DeduceNonTypeTemplateArgument(
3345               S, TemplateParams, NTTP, llvm::APSInt(Size), NTTP->getType(),
3346               /*ArrayBound=*/true, Info, Deduced))
3347         return Result;
3348     }
3349   }
3350 
3351   return Sema::TDK_Success;
3352 }
3353 
3354 /// \brief Perform template argument deduction per [temp.deduct.call] for a
3355 ///        single parameter / argument pair.
3356 static Sema::TemplateDeductionResult DeduceTemplateArgumentsFromCallArgument(
3357     Sema &S, TemplateParameterList *TemplateParams, QualType ParamType,
3358     Expr *Arg, TemplateDeductionInfo &Info,
3359     SmallVectorImpl<DeducedTemplateArgument> &Deduced,
3360     SmallVectorImpl<Sema::OriginalCallArg> &OriginalCallArgs,
3361     bool DecomposedParam, unsigned ArgIdx, unsigned TDF) {
3362   QualType ArgType = Arg->getType();
3363   QualType OrigParamType = ParamType;
3364 
3365   //   If P is a reference type [...]
3366   //   If P is a cv-qualified type [...]
3367   if (AdjustFunctionParmAndArgTypesForDeduction(S, TemplateParams, ParamType,
3368                                                 ArgType, Arg, TDF))
3369     return Sema::TDK_Success;
3370 
3371   //   If [...] the argument is a non-empty initializer list [...]
3372   if (InitListExpr *ILE = dyn_cast<InitListExpr>(Arg))
3373     return DeduceFromInitializerList(S, TemplateParams, ParamType, ILE, Info,
3374                                      Deduced, OriginalCallArgs, ArgIdx, TDF);
3375 
3376   //   [...] the deduction process attempts to find template argument values
3377   //   that will make the deduced A identical to A
3378   //
3379   // Keep track of the argument type and corresponding parameter index,
3380   // so we can check for compatibility between the deduced A and A.
3381   OriginalCallArgs.push_back(
3382       Sema::OriginalCallArg(OrigParamType, DecomposedParam, ArgIdx, ArgType));
3383   return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams, ParamType,
3384                                             ArgType, Info, Deduced, TDF);
3385 }
3386 
3387 /// \brief Perform template argument deduction from a function call
3388 /// (C++ [temp.deduct.call]).
3389 ///
3390 /// \param FunctionTemplate the function template for which we are performing
3391 /// template argument deduction.
3392 ///
3393 /// \param ExplicitTemplateArgs the explicit template arguments provided
3394 /// for this call.
3395 ///
3396 /// \param Args the function call arguments
3397 ///
3398 /// \param Specialization if template argument deduction was successful,
3399 /// this will be set to the function template specialization produced by
3400 /// template argument deduction.
3401 ///
3402 /// \param Info the argument will be updated to provide additional information
3403 /// about template argument deduction.
3404 ///
3405 /// \param CheckNonDependent A callback to invoke to check conversions for
3406 /// non-dependent parameters, between deduction and substitution, per DR1391.
3407 /// If this returns true, substitution will be skipped and we return
3408 /// TDK_NonDependentConversionFailure. The callback is passed the parameter
3409 /// types (after substituting explicit template arguments).
3410 ///
3411 /// \returns the result of template argument deduction.
3412 Sema::TemplateDeductionResult Sema::DeduceTemplateArguments(
3413     FunctionTemplateDecl *FunctionTemplate,
3414     TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args,
3415     FunctionDecl *&Specialization, TemplateDeductionInfo &Info,
3416     bool PartialOverloading,
3417     llvm::function_ref<bool(ArrayRef<QualType>)> CheckNonDependent) {
3418   if (FunctionTemplate->isInvalidDecl())
3419     return TDK_Invalid;
3420 
3421   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
3422   unsigned NumParams = Function->getNumParams();
3423 
3424   // C++ [temp.deduct.call]p1:
3425   //   Template argument deduction is done by comparing each function template
3426   //   parameter type (call it P) with the type of the corresponding argument
3427   //   of the call (call it A) as described below.
3428   if (Args.size() < Function->getMinRequiredArguments() && !PartialOverloading)
3429     return TDK_TooFewArguments;
3430   else if (TooManyArguments(NumParams, Args.size(), PartialOverloading)) {
3431     const FunctionProtoType *Proto
3432       = Function->getType()->getAs<FunctionProtoType>();
3433     if (Proto->isTemplateVariadic())
3434       /* Do nothing */;
3435     else if (!Proto->isVariadic())
3436       return TDK_TooManyArguments;
3437   }
3438 
3439   // The types of the parameters from which we will perform template argument
3440   // deduction.
3441   LocalInstantiationScope InstScope(*this);
3442   TemplateParameterList *TemplateParams
3443     = FunctionTemplate->getTemplateParameters();
3444   SmallVector<DeducedTemplateArgument, 4> Deduced;
3445   SmallVector<QualType, 8> ParamTypes;
3446   unsigned NumExplicitlySpecified = 0;
3447   if (ExplicitTemplateArgs) {
3448     TemplateDeductionResult Result =
3449       SubstituteExplicitTemplateArguments(FunctionTemplate,
3450                                           *ExplicitTemplateArgs,
3451                                           Deduced,
3452                                           ParamTypes,
3453                                           nullptr,
3454                                           Info);
3455     if (Result)
3456       return Result;
3457 
3458     NumExplicitlySpecified = Deduced.size();
3459   } else {
3460     // Just fill in the parameter types from the function declaration.
3461     for (unsigned I = 0; I != NumParams; ++I)
3462       ParamTypes.push_back(Function->getParamDecl(I)->getType());
3463   }
3464 
3465   SmallVector<OriginalCallArg, 8> OriginalCallArgs;
3466 
3467   // Deduce an argument of type ParamType from an expression with index ArgIdx.
3468   auto DeduceCallArgument = [&](QualType ParamType, unsigned ArgIdx) {
3469     // C++ [demp.deduct.call]p1: (DR1391)
3470     //   Template argument deduction is done by comparing each function template
3471     //   parameter that contains template-parameters that participate in
3472     //   template argument deduction ...
3473     if (!hasDeducibleTemplateParameters(*this, FunctionTemplate, ParamType))
3474       return Sema::TDK_Success;
3475 
3476     //   ... with the type of the corresponding argument
3477     return DeduceTemplateArgumentsFromCallArgument(
3478         *this, TemplateParams, ParamType, Args[ArgIdx], Info, Deduced,
3479         OriginalCallArgs, /*Decomposed*/false, ArgIdx, /*TDF*/ 0);
3480   };
3481 
3482   // Deduce template arguments from the function parameters.
3483   Deduced.resize(TemplateParams->size());
3484   SmallVector<QualType, 8> ParamTypesForArgChecking;
3485   for (unsigned ParamIdx = 0, NumParamTypes = ParamTypes.size(), ArgIdx = 0;
3486        ParamIdx != NumParamTypes; ++ParamIdx) {
3487     QualType ParamType = ParamTypes[ParamIdx];
3488 
3489     const PackExpansionType *ParamExpansion =
3490         dyn_cast<PackExpansionType>(ParamType);
3491     if (!ParamExpansion) {
3492       // Simple case: matching a function parameter to a function argument.
3493       if (ArgIdx >= Args.size())
3494         break;
3495 
3496       ParamTypesForArgChecking.push_back(ParamType);
3497       if (auto Result = DeduceCallArgument(ParamType, ArgIdx++))
3498         return Result;
3499 
3500       continue;
3501     }
3502 
3503     QualType ParamPattern = ParamExpansion->getPattern();
3504     PackDeductionScope PackScope(*this, TemplateParams, Deduced, Info,
3505                                  ParamPattern);
3506 
3507     // C++0x [temp.deduct.call]p1:
3508     //   For a function parameter pack that occurs at the end of the
3509     //   parameter-declaration-list, the type A of each remaining argument of
3510     //   the call is compared with the type P of the declarator-id of the
3511     //   function parameter pack. Each comparison deduces template arguments
3512     //   for subsequent positions in the template parameter packs expanded by
3513     //   the function parameter pack. When a function parameter pack appears
3514     //   in a non-deduced context [not at the end of the list], the type of
3515     //   that parameter pack is never deduced.
3516     //
3517     // FIXME: The above rule allows the size of the parameter pack to change
3518     // after we skip it (in the non-deduced case). That makes no sense, so
3519     // we instead notionally deduce the pack against N arguments, where N is
3520     // the length of the explicitly-specified pack if it's expanded by the
3521     // parameter pack and 0 otherwise, and we treat each deduction as a
3522     // non-deduced context.
3523     if (ParamIdx + 1 == NumParamTypes) {
3524       for (; ArgIdx < Args.size(); PackScope.nextPackElement(), ++ArgIdx) {
3525         ParamTypesForArgChecking.push_back(ParamPattern);
3526         if (auto Result = DeduceCallArgument(ParamPattern, ArgIdx))
3527           return Result;
3528       }
3529     } else {
3530       // If the parameter type contains an explicitly-specified pack that we
3531       // could not expand, skip the number of parameters notionally created
3532       // by the expansion.
3533       Optional<unsigned> NumExpansions = ParamExpansion->getNumExpansions();
3534       if (NumExpansions && !PackScope.isPartiallyExpanded()) {
3535         for (unsigned I = 0; I != *NumExpansions && ArgIdx < Args.size();
3536              ++I, ++ArgIdx) {
3537           ParamTypesForArgChecking.push_back(ParamPattern);
3538           // FIXME: Should we add OriginalCallArgs for these? What if the
3539           // corresponding argument is a list?
3540           PackScope.nextPackElement();
3541         }
3542       }
3543     }
3544 
3545     // Build argument packs for each of the parameter packs expanded by this
3546     // pack expansion.
3547     if (auto Result = PackScope.finish())
3548       return Result;
3549   }
3550 
3551   return FinishTemplateArgumentDeduction(
3552       FunctionTemplate, Deduced, NumExplicitlySpecified, Specialization, Info,
3553       &OriginalCallArgs, PartialOverloading,
3554       [&]() { return CheckNonDependent(ParamTypesForArgChecking); });
3555 }
3556 
3557 QualType Sema::adjustCCAndNoReturn(QualType ArgFunctionType,
3558                                    QualType FunctionType,
3559                                    bool AdjustExceptionSpec) {
3560   if (ArgFunctionType.isNull())
3561     return ArgFunctionType;
3562 
3563   const FunctionProtoType *FunctionTypeP =
3564       FunctionType->castAs<FunctionProtoType>();
3565   const FunctionProtoType *ArgFunctionTypeP =
3566       ArgFunctionType->getAs<FunctionProtoType>();
3567 
3568   FunctionProtoType::ExtProtoInfo EPI = ArgFunctionTypeP->getExtProtoInfo();
3569   bool Rebuild = false;
3570 
3571   CallingConv CC = FunctionTypeP->getCallConv();
3572   if (EPI.ExtInfo.getCC() != CC) {
3573     EPI.ExtInfo = EPI.ExtInfo.withCallingConv(CC);
3574     Rebuild = true;
3575   }
3576 
3577   bool NoReturn = FunctionTypeP->getNoReturnAttr();
3578   if (EPI.ExtInfo.getNoReturn() != NoReturn) {
3579     EPI.ExtInfo = EPI.ExtInfo.withNoReturn(NoReturn);
3580     Rebuild = true;
3581   }
3582 
3583   if (AdjustExceptionSpec && (FunctionTypeP->hasExceptionSpec() ||
3584                               ArgFunctionTypeP->hasExceptionSpec())) {
3585     EPI.ExceptionSpec = FunctionTypeP->getExtProtoInfo().ExceptionSpec;
3586     Rebuild = true;
3587   }
3588 
3589   if (!Rebuild)
3590     return ArgFunctionType;
3591 
3592   return Context.getFunctionType(ArgFunctionTypeP->getReturnType(),
3593                                  ArgFunctionTypeP->getParamTypes(), EPI);
3594 }
3595 
3596 /// \brief Deduce template arguments when taking the address of a function
3597 /// template (C++ [temp.deduct.funcaddr]) or matching a specialization to
3598 /// a template.
3599 ///
3600 /// \param FunctionTemplate the function template for which we are performing
3601 /// template argument deduction.
3602 ///
3603 /// \param ExplicitTemplateArgs the explicitly-specified template
3604 /// arguments.
3605 ///
3606 /// \param ArgFunctionType the function type that will be used as the
3607 /// "argument" type (A) when performing template argument deduction from the
3608 /// function template's function type. This type may be NULL, if there is no
3609 /// argument type to compare against, in C++0x [temp.arg.explicit]p3.
3610 ///
3611 /// \param Specialization if template argument deduction was successful,
3612 /// this will be set to the function template specialization produced by
3613 /// template argument deduction.
3614 ///
3615 /// \param Info the argument will be updated to provide additional information
3616 /// about template argument deduction.
3617 ///
3618 /// \param IsAddressOfFunction If \c true, we are deducing as part of taking
3619 /// the address of a function template per [temp.deduct.funcaddr] and
3620 /// [over.over]. If \c false, we are looking up a function template
3621 /// specialization based on its signature, per [temp.deduct.decl].
3622 ///
3623 /// \returns the result of template argument deduction.
3624 Sema::TemplateDeductionResult Sema::DeduceTemplateArguments(
3625     FunctionTemplateDecl *FunctionTemplate,
3626     TemplateArgumentListInfo *ExplicitTemplateArgs, QualType ArgFunctionType,
3627     FunctionDecl *&Specialization, TemplateDeductionInfo &Info,
3628     bool IsAddressOfFunction) {
3629   if (FunctionTemplate->isInvalidDecl())
3630     return TDK_Invalid;
3631 
3632   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
3633   TemplateParameterList *TemplateParams
3634     = FunctionTemplate->getTemplateParameters();
3635   QualType FunctionType = Function->getType();
3636 
3637   // When taking the address of a function, we require convertibility of
3638   // the resulting function type. Otherwise, we allow arbitrary mismatches
3639   // of calling convention, noreturn, and noexcept.
3640   if (!IsAddressOfFunction)
3641     ArgFunctionType = adjustCCAndNoReturn(ArgFunctionType, FunctionType,
3642                                           /*AdjustExceptionSpec*/true);
3643 
3644   // Substitute any explicit template arguments.
3645   LocalInstantiationScope InstScope(*this);
3646   SmallVector<DeducedTemplateArgument, 4> Deduced;
3647   unsigned NumExplicitlySpecified = 0;
3648   SmallVector<QualType, 4> ParamTypes;
3649   if (ExplicitTemplateArgs) {
3650     if (TemplateDeductionResult Result
3651           = SubstituteExplicitTemplateArguments(FunctionTemplate,
3652                                                 *ExplicitTemplateArgs,
3653                                                 Deduced, ParamTypes,
3654                                                 &FunctionType, Info))
3655       return Result;
3656 
3657     NumExplicitlySpecified = Deduced.size();
3658   }
3659 
3660   // Unevaluated SFINAE context.
3661   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
3662   SFINAETrap Trap(*this);
3663 
3664   Deduced.resize(TemplateParams->size());
3665 
3666   // If the function has a deduced return type, substitute it for a dependent
3667   // type so that we treat it as a non-deduced context in what follows. If we
3668   // are looking up by signature, the signature type should also have a deduced
3669   // return type, which we instead expect to exactly match.
3670   bool HasDeducedReturnType = false;
3671   if (getLangOpts().CPlusPlus14 && IsAddressOfFunction &&
3672       Function->getReturnType()->getContainedAutoType()) {
3673     FunctionType = SubstAutoType(FunctionType, Context.DependentTy);
3674     HasDeducedReturnType = true;
3675   }
3676 
3677   if (!ArgFunctionType.isNull()) {
3678     unsigned TDF = TDF_TopLevelParameterTypeList;
3679     if (IsAddressOfFunction)
3680       TDF |= TDF_InOverloadResolution;
3681     // Deduce template arguments from the function type.
3682     if (TemplateDeductionResult Result
3683           = DeduceTemplateArgumentsByTypeMatch(*this, TemplateParams,
3684                                                FunctionType, ArgFunctionType,
3685                                                Info, Deduced, TDF))
3686       return Result;
3687   }
3688 
3689   if (TemplateDeductionResult Result
3690         = FinishTemplateArgumentDeduction(FunctionTemplate, Deduced,
3691                                           NumExplicitlySpecified,
3692                                           Specialization, Info))
3693     return Result;
3694 
3695   // If the function has a deduced return type, deduce it now, so we can check
3696   // that the deduced function type matches the requested type.
3697   if (HasDeducedReturnType &&
3698       Specialization->getReturnType()->isUndeducedType() &&
3699       DeduceReturnType(Specialization, Info.getLocation(), false))
3700     return TDK_MiscellaneousDeductionFailure;
3701 
3702   // If the function has a dependent exception specification, resolve it now,
3703   // so we can check that the exception specification matches.
3704   auto *SpecializationFPT =
3705       Specialization->getType()->castAs<FunctionProtoType>();
3706   if (getLangOpts().CPlusPlus1z &&
3707       isUnresolvedExceptionSpec(SpecializationFPT->getExceptionSpecType()) &&
3708       !ResolveExceptionSpec(Info.getLocation(), SpecializationFPT))
3709     return TDK_MiscellaneousDeductionFailure;
3710 
3711   // Adjust the exception specification of the argument again to match the
3712   // substituted and resolved type we just formed. (Calling convention and
3713   // noreturn can't be dependent, so we don't actually need this for them
3714   // right now.)
3715   QualType SpecializationType = Specialization->getType();
3716   if (!IsAddressOfFunction)
3717     ArgFunctionType = adjustCCAndNoReturn(ArgFunctionType, SpecializationType,
3718                                           /*AdjustExceptionSpec*/true);
3719 
3720   // If the requested function type does not match the actual type of the
3721   // specialization with respect to arguments of compatible pointer to function
3722   // types, template argument deduction fails.
3723   if (!ArgFunctionType.isNull()) {
3724     if (IsAddressOfFunction &&
3725         !isSameOrCompatibleFunctionType(
3726             Context.getCanonicalType(SpecializationType),
3727             Context.getCanonicalType(ArgFunctionType)))
3728       return TDK_MiscellaneousDeductionFailure;
3729 
3730     if (!IsAddressOfFunction &&
3731         !Context.hasSameType(SpecializationType, ArgFunctionType))
3732       return TDK_MiscellaneousDeductionFailure;
3733   }
3734 
3735   return TDK_Success;
3736 }
3737 
3738 /// \brief Given a function declaration (e.g. a generic lambda conversion
3739 ///  function) that contains an 'auto' in its result type, substitute it
3740 ///  with TypeToReplaceAutoWith.  Be careful to pass in the type you want
3741 ///  to replace 'auto' with and not the actual result type you want
3742 ///  to set the function to.
3743 static inline void
3744 SubstAutoWithinFunctionReturnType(FunctionDecl *F,
3745                                     QualType TypeToReplaceAutoWith, Sema &S) {
3746   assert(!TypeToReplaceAutoWith->getContainedAutoType());
3747   QualType AutoResultType = F->getReturnType();
3748   assert(AutoResultType->getContainedAutoType());
3749   QualType DeducedResultType = S.SubstAutoType(AutoResultType,
3750                                                TypeToReplaceAutoWith);
3751   S.Context.adjustDeducedFunctionResultType(F, DeducedResultType);
3752 }
3753 
3754 /// \brief Given a specialized conversion operator of a generic lambda
3755 /// create the corresponding specializations of the call operator and
3756 /// the static-invoker. If the return type of the call operator is auto,
3757 /// deduce its return type and check if that matches the
3758 /// return type of the destination function ptr.
3759 
3760 static inline Sema::TemplateDeductionResult
3761 SpecializeCorrespondingLambdaCallOperatorAndInvoker(
3762     CXXConversionDecl *ConversionSpecialized,
3763     SmallVectorImpl<DeducedTemplateArgument> &DeducedArguments,
3764     QualType ReturnTypeOfDestFunctionPtr,
3765     TemplateDeductionInfo &TDInfo,
3766     Sema &S) {
3767 
3768   CXXRecordDecl *LambdaClass = ConversionSpecialized->getParent();
3769   assert(LambdaClass && LambdaClass->isGenericLambda());
3770 
3771   CXXMethodDecl *CallOpGeneric = LambdaClass->getLambdaCallOperator();
3772   QualType CallOpResultType = CallOpGeneric->getReturnType();
3773   const bool GenericLambdaCallOperatorHasDeducedReturnType =
3774       CallOpResultType->getContainedAutoType();
3775 
3776   FunctionTemplateDecl *CallOpTemplate =
3777       CallOpGeneric->getDescribedFunctionTemplate();
3778 
3779   FunctionDecl *CallOpSpecialized = nullptr;
3780   // Use the deduced arguments of the conversion function, to specialize our
3781   // generic lambda's call operator.
3782   if (Sema::TemplateDeductionResult Result
3783       = S.FinishTemplateArgumentDeduction(CallOpTemplate,
3784                                           DeducedArguments,
3785                                           0, CallOpSpecialized, TDInfo))
3786     return Result;
3787 
3788   // If we need to deduce the return type, do so (instantiates the callop).
3789   if (GenericLambdaCallOperatorHasDeducedReturnType &&
3790       CallOpSpecialized->getReturnType()->isUndeducedType())
3791     S.DeduceReturnType(CallOpSpecialized,
3792                        CallOpSpecialized->getPointOfInstantiation(),
3793                        /*Diagnose*/ true);
3794 
3795   // Check to see if the return type of the destination ptr-to-function
3796   // matches the return type of the call operator.
3797   if (!S.Context.hasSameType(CallOpSpecialized->getReturnType(),
3798                              ReturnTypeOfDestFunctionPtr))
3799     return Sema::TDK_NonDeducedMismatch;
3800   // Since we have succeeded in matching the source and destination
3801   // ptr-to-functions (now including return type), and have successfully
3802   // specialized our corresponding call operator, we are ready to
3803   // specialize the static invoker with the deduced arguments of our
3804   // ptr-to-function.
3805   FunctionDecl *InvokerSpecialized = nullptr;
3806   FunctionTemplateDecl *InvokerTemplate = LambdaClass->
3807                   getLambdaStaticInvoker()->getDescribedFunctionTemplate();
3808 
3809 #ifndef NDEBUG
3810   Sema::TemplateDeductionResult LLVM_ATTRIBUTE_UNUSED Result =
3811 #endif
3812     S.FinishTemplateArgumentDeduction(InvokerTemplate, DeducedArguments, 0,
3813           InvokerSpecialized, TDInfo);
3814   assert(Result == Sema::TDK_Success &&
3815     "If the call operator succeeded so should the invoker!");
3816   // Set the result type to match the corresponding call operator
3817   // specialization's result type.
3818   if (GenericLambdaCallOperatorHasDeducedReturnType &&
3819       InvokerSpecialized->getReturnType()->isUndeducedType()) {
3820     // Be sure to get the type to replace 'auto' with and not
3821     // the full result type of the call op specialization
3822     // to substitute into the 'auto' of the invoker and conversion
3823     // function.
3824     // For e.g.
3825     //  int* (*fp)(int*) = [](auto* a) -> auto* { return a; };
3826     // We don't want to subst 'int*' into 'auto' to get int**.
3827 
3828     QualType TypeToReplaceAutoWith = CallOpSpecialized->getReturnType()
3829                                          ->getContainedAutoType()
3830                                          ->getDeducedType();
3831     SubstAutoWithinFunctionReturnType(InvokerSpecialized,
3832         TypeToReplaceAutoWith, S);
3833     SubstAutoWithinFunctionReturnType(ConversionSpecialized,
3834         TypeToReplaceAutoWith, S);
3835   }
3836 
3837   // Ensure that static invoker doesn't have a const qualifier.
3838   // FIXME: When creating the InvokerTemplate in SemaLambda.cpp
3839   // do not use the CallOperator's TypeSourceInfo which allows
3840   // the const qualifier to leak through.
3841   const FunctionProtoType *InvokerFPT = InvokerSpecialized->
3842                   getType().getTypePtr()->castAs<FunctionProtoType>();
3843   FunctionProtoType::ExtProtoInfo EPI = InvokerFPT->getExtProtoInfo();
3844   EPI.TypeQuals = 0;
3845   InvokerSpecialized->setType(S.Context.getFunctionType(
3846       InvokerFPT->getReturnType(), InvokerFPT->getParamTypes(), EPI));
3847   return Sema::TDK_Success;
3848 }
3849 /// \brief Deduce template arguments for a templated conversion
3850 /// function (C++ [temp.deduct.conv]) and, if successful, produce a
3851 /// conversion function template specialization.
3852 Sema::TemplateDeductionResult
3853 Sema::DeduceTemplateArguments(FunctionTemplateDecl *ConversionTemplate,
3854                               QualType ToType,
3855                               CXXConversionDecl *&Specialization,
3856                               TemplateDeductionInfo &Info) {
3857   if (ConversionTemplate->isInvalidDecl())
3858     return TDK_Invalid;
3859 
3860   CXXConversionDecl *ConversionGeneric
3861     = cast<CXXConversionDecl>(ConversionTemplate->getTemplatedDecl());
3862 
3863   QualType FromType = ConversionGeneric->getConversionType();
3864 
3865   // Canonicalize the types for deduction.
3866   QualType P = Context.getCanonicalType(FromType);
3867   QualType A = Context.getCanonicalType(ToType);
3868 
3869   // C++0x [temp.deduct.conv]p2:
3870   //   If P is a reference type, the type referred to by P is used for
3871   //   type deduction.
3872   if (const ReferenceType *PRef = P->getAs<ReferenceType>())
3873     P = PRef->getPointeeType();
3874 
3875   // C++0x [temp.deduct.conv]p4:
3876   //   [...] If A is a reference type, the type referred to by A is used
3877   //   for type deduction.
3878   if (const ReferenceType *ARef = A->getAs<ReferenceType>())
3879     A = ARef->getPointeeType().getUnqualifiedType();
3880   // C++ [temp.deduct.conv]p3:
3881   //
3882   //   If A is not a reference type:
3883   else {
3884     assert(!A->isReferenceType() && "Reference types were handled above");
3885 
3886     //   - If P is an array type, the pointer type produced by the
3887     //     array-to-pointer standard conversion (4.2) is used in place
3888     //     of P for type deduction; otherwise,
3889     if (P->isArrayType())
3890       P = Context.getArrayDecayedType(P);
3891     //   - If P is a function type, the pointer type produced by the
3892     //     function-to-pointer standard conversion (4.3) is used in
3893     //     place of P for type deduction; otherwise,
3894     else if (P->isFunctionType())
3895       P = Context.getPointerType(P);
3896     //   - If P is a cv-qualified type, the top level cv-qualifiers of
3897     //     P's type are ignored for type deduction.
3898     else
3899       P = P.getUnqualifiedType();
3900 
3901     // C++0x [temp.deduct.conv]p4:
3902     //   If A is a cv-qualified type, the top level cv-qualifiers of A's
3903     //   type are ignored for type deduction. If A is a reference type, the type
3904     //   referred to by A is used for type deduction.
3905     A = A.getUnqualifiedType();
3906   }
3907 
3908   // Unevaluated SFINAE context.
3909   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
3910   SFINAETrap Trap(*this);
3911 
3912   // C++ [temp.deduct.conv]p1:
3913   //   Template argument deduction is done by comparing the return
3914   //   type of the template conversion function (call it P) with the
3915   //   type that is required as the result of the conversion (call it
3916   //   A) as described in 14.8.2.4.
3917   TemplateParameterList *TemplateParams
3918     = ConversionTemplate->getTemplateParameters();
3919   SmallVector<DeducedTemplateArgument, 4> Deduced;
3920   Deduced.resize(TemplateParams->size());
3921 
3922   // C++0x [temp.deduct.conv]p4:
3923   //   In general, the deduction process attempts to find template
3924   //   argument values that will make the deduced A identical to
3925   //   A. However, there are two cases that allow a difference:
3926   unsigned TDF = 0;
3927   //     - If the original A is a reference type, A can be more
3928   //       cv-qualified than the deduced A (i.e., the type referred to
3929   //       by the reference)
3930   if (ToType->isReferenceType())
3931     TDF |= TDF_ParamWithReferenceType;
3932   //     - The deduced A can be another pointer or pointer to member
3933   //       type that can be converted to A via a qualification
3934   //       conversion.
3935   //
3936   // (C++0x [temp.deduct.conv]p6 clarifies that this only happens when
3937   // both P and A are pointers or member pointers. In this case, we
3938   // just ignore cv-qualifiers completely).
3939   if ((P->isPointerType() && A->isPointerType()) ||
3940       (P->isMemberPointerType() && A->isMemberPointerType()))
3941     TDF |= TDF_IgnoreQualifiers;
3942   if (TemplateDeductionResult Result
3943         = DeduceTemplateArgumentsByTypeMatch(*this, TemplateParams,
3944                                              P, A, Info, Deduced, TDF))
3945     return Result;
3946 
3947   // Create an Instantiation Scope for finalizing the operator.
3948   LocalInstantiationScope InstScope(*this);
3949   // Finish template argument deduction.
3950   FunctionDecl *ConversionSpecialized = nullptr;
3951   TemplateDeductionResult Result
3952       = FinishTemplateArgumentDeduction(ConversionTemplate, Deduced, 0,
3953                                         ConversionSpecialized, Info);
3954   Specialization = cast_or_null<CXXConversionDecl>(ConversionSpecialized);
3955 
3956   // If the conversion operator is being invoked on a lambda closure to convert
3957   // to a ptr-to-function, use the deduced arguments from the conversion
3958   // function to specialize the corresponding call operator.
3959   //   e.g., int (*fp)(int) = [](auto a) { return a; };
3960   if (Result == TDK_Success && isLambdaConversionOperator(ConversionGeneric)) {
3961 
3962     // Get the return type of the destination ptr-to-function we are converting
3963     // to.  This is necessary for matching the lambda call operator's return
3964     // type to that of the destination ptr-to-function's return type.
3965     assert(A->isPointerType() &&
3966         "Can only convert from lambda to ptr-to-function");
3967     const FunctionType *ToFunType =
3968         A->getPointeeType().getTypePtr()->getAs<FunctionType>();
3969     const QualType DestFunctionPtrReturnType = ToFunType->getReturnType();
3970 
3971     // Create the corresponding specializations of the call operator and
3972     // the static-invoker; and if the return type is auto,
3973     // deduce the return type and check if it matches the
3974     // DestFunctionPtrReturnType.
3975     // For instance:
3976     //   auto L = [](auto a) { return f(a); };
3977     //   int (*fp)(int) = L;
3978     //   char (*fp2)(int) = L; <-- Not OK.
3979 
3980     Result = SpecializeCorrespondingLambdaCallOperatorAndInvoker(
3981         Specialization, Deduced, DestFunctionPtrReturnType,
3982         Info, *this);
3983   }
3984   return Result;
3985 }
3986 
3987 /// \brief Deduce template arguments for a function template when there is
3988 /// nothing to deduce against (C++0x [temp.arg.explicit]p3).
3989 ///
3990 /// \param FunctionTemplate the function template for which we are performing
3991 /// template argument deduction.
3992 ///
3993 /// \param ExplicitTemplateArgs the explicitly-specified template
3994 /// arguments.
3995 ///
3996 /// \param Specialization if template argument deduction was successful,
3997 /// this will be set to the function template specialization produced by
3998 /// template argument deduction.
3999 ///
4000 /// \param Info the argument will be updated to provide additional information
4001 /// about template argument deduction.
4002 ///
4003 /// \param IsAddressOfFunction If \c true, we are deducing as part of taking
4004 /// the address of a function template in a context where we do not have a
4005 /// target type, per [over.over]. If \c false, we are looking up a function
4006 /// template specialization based on its signature, which only happens when
4007 /// deducing a function parameter type from an argument that is a template-id
4008 /// naming a function template specialization.
4009 ///
4010 /// \returns the result of template argument deduction.
4011 Sema::TemplateDeductionResult Sema::DeduceTemplateArguments(
4012     FunctionTemplateDecl *FunctionTemplate,
4013     TemplateArgumentListInfo *ExplicitTemplateArgs,
4014     FunctionDecl *&Specialization, TemplateDeductionInfo &Info,
4015     bool IsAddressOfFunction) {
4016   return DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
4017                                  QualType(), Specialization, Info,
4018                                  IsAddressOfFunction);
4019 }
4020 
4021 namespace {
4022   /// Substitute the 'auto' type specifier within a type for a given replacement
4023   /// type.
4024   class SubstituteAutoTransform :
4025     public TreeTransform<SubstituteAutoTransform> {
4026     QualType Replacement;
4027     bool UseAutoSugar;
4028   public:
4029     SubstituteAutoTransform(Sema &SemaRef, QualType Replacement,
4030                             bool UseAutoSugar = true)
4031         : TreeTransform<SubstituteAutoTransform>(SemaRef),
4032           Replacement(Replacement), UseAutoSugar(UseAutoSugar) {}
4033 
4034     QualType TransformAutoType(TypeLocBuilder &TLB, AutoTypeLoc TL) {
4035       // If we're building the type pattern to deduce against, don't wrap the
4036       // substituted type in an AutoType. Certain template deduction rules
4037       // apply only when a template type parameter appears directly (and not if
4038       // the parameter is found through desugaring). For instance:
4039       //   auto &&lref = lvalue;
4040       // must transform into "rvalue reference to T" not "rvalue reference to
4041       // auto type deduced as T" in order for [temp.deduct.call]p3 to apply.
4042       if (!UseAutoSugar) {
4043         assert(isa<TemplateTypeParmType>(Replacement) &&
4044                "unexpected unsugared replacement kind");
4045         QualType Result = Replacement;
4046         TemplateTypeParmTypeLoc NewTL =
4047           TLB.push<TemplateTypeParmTypeLoc>(Result);
4048         NewTL.setNameLoc(TL.getNameLoc());
4049         return Result;
4050       } else {
4051         QualType Result = SemaRef.Context.getAutoType(
4052             Replacement, TL.getTypePtr()->getKeyword(), Replacement.isNull());
4053         AutoTypeLoc NewTL = TLB.push<AutoTypeLoc>(Result);
4054         NewTL.setNameLoc(TL.getNameLoc());
4055         return Result;
4056       }
4057     }
4058 
4059     ExprResult TransformLambdaExpr(LambdaExpr *E) {
4060       // Lambdas never need to be transformed.
4061       return E;
4062     }
4063 
4064     QualType Apply(TypeLoc TL) {
4065       // Create some scratch storage for the transformed type locations.
4066       // FIXME: We're just going to throw this information away. Don't build it.
4067       TypeLocBuilder TLB;
4068       TLB.reserve(TL.getFullDataSize());
4069       return TransformType(TLB, TL);
4070     }
4071   };
4072 }
4073 
4074 Sema::DeduceAutoResult
4075 Sema::DeduceAutoType(TypeSourceInfo *Type, Expr *&Init, QualType &Result,
4076                      Optional<unsigned> DependentDeductionDepth) {
4077   return DeduceAutoType(Type->getTypeLoc(), Init, Result,
4078                         DependentDeductionDepth);
4079 }
4080 
4081 /// \brief Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)
4082 ///
4083 /// Note that this is done even if the initializer is dependent. (This is
4084 /// necessary to support partial ordering of templates using 'auto'.)
4085 /// A dependent type will be produced when deducing from a dependent type.
4086 ///
4087 /// \param Type the type pattern using the auto type-specifier.
4088 /// \param Init the initializer for the variable whose type is to be deduced.
4089 /// \param Result if type deduction was successful, this will be set to the
4090 ///        deduced type.
4091 /// \param DependentDeductionDepth Set if we should permit deduction in
4092 ///        dependent cases. This is necessary for template partial ordering with
4093 ///        'auto' template parameters. The value specified is the template
4094 ///        parameter depth at which we should perform 'auto' deduction.
4095 Sema::DeduceAutoResult
4096 Sema::DeduceAutoType(TypeLoc Type, Expr *&Init, QualType &Result,
4097                      Optional<unsigned> DependentDeductionDepth) {
4098   if (Init->getType()->isNonOverloadPlaceholderType()) {
4099     ExprResult NonPlaceholder = CheckPlaceholderExpr(Init);
4100     if (NonPlaceholder.isInvalid())
4101       return DAR_FailedAlreadyDiagnosed;
4102     Init = NonPlaceholder.get();
4103   }
4104 
4105   if (!DependentDeductionDepth &&
4106       (Type.getType()->isDependentType() || Init->isTypeDependent())) {
4107     Result = SubstituteAutoTransform(*this, QualType()).Apply(Type);
4108     assert(!Result.isNull() && "substituting DependentTy can't fail");
4109     return DAR_Succeeded;
4110   }
4111 
4112   // Find the depth of template parameter to synthesize.
4113   unsigned Depth = DependentDeductionDepth.getValueOr(0);
4114 
4115   // If this is a 'decltype(auto)' specifier, do the decltype dance.
4116   // Since 'decltype(auto)' can only occur at the top of the type, we
4117   // don't need to go digging for it.
4118   if (const AutoType *AT = Type.getType()->getAs<AutoType>()) {
4119     if (AT->isDecltypeAuto()) {
4120       if (isa<InitListExpr>(Init)) {
4121         Diag(Init->getLocStart(), diag::err_decltype_auto_initializer_list);
4122         return DAR_FailedAlreadyDiagnosed;
4123       }
4124 
4125       QualType Deduced = BuildDecltypeType(Init, Init->getLocStart(), false);
4126       if (Deduced.isNull())
4127         return DAR_FailedAlreadyDiagnosed;
4128       // FIXME: Support a non-canonical deduced type for 'auto'.
4129       Deduced = Context.getCanonicalType(Deduced);
4130       Result = SubstituteAutoTransform(*this, Deduced).Apply(Type);
4131       if (Result.isNull())
4132         return DAR_FailedAlreadyDiagnosed;
4133       return DAR_Succeeded;
4134     } else if (!getLangOpts().CPlusPlus) {
4135       if (isa<InitListExpr>(Init)) {
4136         Diag(Init->getLocStart(), diag::err_auto_init_list_from_c);
4137         return DAR_FailedAlreadyDiagnosed;
4138       }
4139     }
4140   }
4141 
4142   SourceLocation Loc = Init->getExprLoc();
4143 
4144   LocalInstantiationScope InstScope(*this);
4145 
4146   // Build template<class TemplParam> void Func(FuncParam);
4147   TemplateTypeParmDecl *TemplParam = TemplateTypeParmDecl::Create(
4148       Context, nullptr, SourceLocation(), Loc, Depth, 0, nullptr, false, false);
4149   QualType TemplArg = QualType(TemplParam->getTypeForDecl(), 0);
4150   NamedDecl *TemplParamPtr = TemplParam;
4151   FixedSizeTemplateParameterListStorage<1, false> TemplateParamsSt(
4152       Loc, Loc, TemplParamPtr, Loc, nullptr);
4153 
4154   QualType FuncParam =
4155       SubstituteAutoTransform(*this, TemplArg, /*UseAutoSugar*/false)
4156           .Apply(Type);
4157   assert(!FuncParam.isNull() &&
4158          "substituting template parameter for 'auto' failed");
4159 
4160   // Deduce type of TemplParam in Func(Init)
4161   SmallVector<DeducedTemplateArgument, 1> Deduced;
4162   Deduced.resize(1);
4163 
4164   TemplateDeductionInfo Info(Loc, Depth);
4165 
4166   // If deduction failed, don't diagnose if the initializer is dependent; it
4167   // might acquire a matching type in the instantiation.
4168   auto DeductionFailed = [&]() -> DeduceAutoResult {
4169     if (Init->isTypeDependent()) {
4170       Result = SubstituteAutoTransform(*this, QualType()).Apply(Type);
4171       assert(!Result.isNull() && "substituting DependentTy can't fail");
4172       return DAR_Succeeded;
4173     }
4174     return DAR_Failed;
4175   };
4176 
4177   SmallVector<OriginalCallArg, 4> OriginalCallArgs;
4178 
4179   InitListExpr *InitList = dyn_cast<InitListExpr>(Init);
4180   if (InitList) {
4181     // Notionally, we substitute std::initializer_list<T> for 'auto' and deduce
4182     // against that. Such deduction only succeeds if removing cv-qualifiers and
4183     // references results in std::initializer_list<T>.
4184     if (!Type.getType().getNonReferenceType()->getAs<AutoType>())
4185       return DAR_Failed;
4186 
4187     for (unsigned i = 0, e = InitList->getNumInits(); i < e; ++i) {
4188       if (DeduceTemplateArgumentsFromCallArgument(
4189               *this, TemplateParamsSt.get(), TemplArg, InitList->getInit(i),
4190               Info, Deduced, OriginalCallArgs, /*Decomposed*/ true,
4191               /*ArgIdx*/ 0, /*TDF*/ 0))
4192         return DeductionFailed();
4193     }
4194   } else {
4195     if (!getLangOpts().CPlusPlus && Init->refersToBitField()) {
4196       Diag(Loc, diag::err_auto_bitfield);
4197       return DAR_FailedAlreadyDiagnosed;
4198     }
4199 
4200     if (DeduceTemplateArgumentsFromCallArgument(
4201             *this, TemplateParamsSt.get(), FuncParam, Init, Info, Deduced,
4202             OriginalCallArgs, /*Decomposed*/ false, /*ArgIdx*/ 0, /*TDF*/ 0))
4203       return DeductionFailed();
4204   }
4205 
4206   // Could be null if somehow 'auto' appears in a non-deduced context.
4207   if (Deduced[0].getKind() != TemplateArgument::Type)
4208     return DeductionFailed();
4209 
4210   QualType DeducedType = Deduced[0].getAsType();
4211 
4212   if (InitList) {
4213     DeducedType = BuildStdInitializerList(DeducedType, Loc);
4214     if (DeducedType.isNull())
4215       return DAR_FailedAlreadyDiagnosed;
4216   }
4217 
4218   Result = SubstituteAutoTransform(*this, DeducedType).Apply(Type);
4219   if (Result.isNull())
4220     return DAR_FailedAlreadyDiagnosed;
4221 
4222   // Check that the deduced argument type is compatible with the original
4223   // argument type per C++ [temp.deduct.call]p4.
4224   QualType DeducedA = InitList ? Deduced[0].getAsType() : Result;
4225   for (const OriginalCallArg &OriginalArg : OriginalCallArgs) {
4226     assert((bool)InitList == OriginalArg.DecomposedParam &&
4227            "decomposed non-init-list in auto deduction?");
4228     if (CheckOriginalCallArgDeduction(*this, OriginalArg, DeducedA)) {
4229       Result = QualType();
4230       return DeductionFailed();
4231     }
4232   }
4233 
4234   return DAR_Succeeded;
4235 }
4236 
4237 QualType Sema::SubstAutoType(QualType TypeWithAuto,
4238                              QualType TypeToReplaceAuto) {
4239   if (TypeToReplaceAuto->isDependentType())
4240     TypeToReplaceAuto = QualType();
4241   return SubstituteAutoTransform(*this, TypeToReplaceAuto)
4242       .TransformType(TypeWithAuto);
4243 }
4244 
4245 TypeSourceInfo* Sema::SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
4246                              QualType TypeToReplaceAuto) {
4247   if (TypeToReplaceAuto->isDependentType())
4248     TypeToReplaceAuto = QualType();
4249   return SubstituteAutoTransform(*this, TypeToReplaceAuto)
4250       .TransformType(TypeWithAuto);
4251 }
4252 
4253 QualType Sema::ReplaceAutoType(QualType TypeWithAuto,
4254                                QualType TypeToReplaceAuto) {
4255   return SubstituteAutoTransform(*this, TypeToReplaceAuto,
4256                                  /*UseAutoSugar*/ false)
4257       .TransformType(TypeWithAuto);
4258 }
4259 
4260 void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {
4261   if (isa<InitListExpr>(Init))
4262     Diag(VDecl->getLocation(),
4263          VDecl->isInitCapture()
4264              ? diag::err_init_capture_deduction_failure_from_init_list
4265              : diag::err_auto_var_deduction_failure_from_init_list)
4266       << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();
4267   else
4268     Diag(VDecl->getLocation(),
4269          VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure
4270                                 : diag::err_auto_var_deduction_failure)
4271       << VDecl->getDeclName() << VDecl->getType() << Init->getType()
4272       << Init->getSourceRange();
4273 }
4274 
4275 bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc,
4276                             bool Diagnose) {
4277   assert(FD->getReturnType()->isUndeducedType());
4278 
4279   if (FD->getTemplateInstantiationPattern())
4280     InstantiateFunctionDefinition(Loc, FD);
4281 
4282   bool StillUndeduced = FD->getReturnType()->isUndeducedType();
4283   if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {
4284     Diag(Loc, diag::err_auto_fn_used_before_defined) << FD;
4285     Diag(FD->getLocation(), diag::note_callee_decl) << FD;
4286   }
4287 
4288   return StillUndeduced;
4289 }
4290 
4291 /// \brief If this is a non-static member function,
4292 static void
4293 AddImplicitObjectParameterType(ASTContext &Context,
4294                                CXXMethodDecl *Method,
4295                                SmallVectorImpl<QualType> &ArgTypes) {
4296   // C++11 [temp.func.order]p3:
4297   //   [...] The new parameter is of type "reference to cv A," where cv are
4298   //   the cv-qualifiers of the function template (if any) and A is
4299   //   the class of which the function template is a member.
4300   //
4301   // The standard doesn't say explicitly, but we pick the appropriate kind of
4302   // reference type based on [over.match.funcs]p4.
4303   QualType ArgTy = Context.getTypeDeclType(Method->getParent());
4304   ArgTy = Context.getQualifiedType(ArgTy,
4305                         Qualifiers::fromCVRMask(Method->getTypeQualifiers()));
4306   if (Method->getRefQualifier() == RQ_RValue)
4307     ArgTy = Context.getRValueReferenceType(ArgTy);
4308   else
4309     ArgTy = Context.getLValueReferenceType(ArgTy);
4310   ArgTypes.push_back(ArgTy);
4311 }
4312 
4313 /// \brief Determine whether the function template \p FT1 is at least as
4314 /// specialized as \p FT2.
4315 static bool isAtLeastAsSpecializedAs(Sema &S,
4316                                      SourceLocation Loc,
4317                                      FunctionTemplateDecl *FT1,
4318                                      FunctionTemplateDecl *FT2,
4319                                      TemplatePartialOrderingContext TPOC,
4320                                      unsigned NumCallArguments1) {
4321   FunctionDecl *FD1 = FT1->getTemplatedDecl();
4322   FunctionDecl *FD2 = FT2->getTemplatedDecl();
4323   const FunctionProtoType *Proto1 = FD1->getType()->getAs<FunctionProtoType>();
4324   const FunctionProtoType *Proto2 = FD2->getType()->getAs<FunctionProtoType>();
4325 
4326   assert(Proto1 && Proto2 && "Function templates must have prototypes");
4327   TemplateParameterList *TemplateParams = FT2->getTemplateParameters();
4328   SmallVector<DeducedTemplateArgument, 4> Deduced;
4329   Deduced.resize(TemplateParams->size());
4330 
4331   // C++0x [temp.deduct.partial]p3:
4332   //   The types used to determine the ordering depend on the context in which
4333   //   the partial ordering is done:
4334   TemplateDeductionInfo Info(Loc);
4335   SmallVector<QualType, 4> Args2;
4336   switch (TPOC) {
4337   case TPOC_Call: {
4338     //   - In the context of a function call, the function parameter types are
4339     //     used.
4340     CXXMethodDecl *Method1 = dyn_cast<CXXMethodDecl>(FD1);
4341     CXXMethodDecl *Method2 = dyn_cast<CXXMethodDecl>(FD2);
4342 
4343     // C++11 [temp.func.order]p3:
4344     //   [...] If only one of the function templates is a non-static
4345     //   member, that function template is considered to have a new
4346     //   first parameter inserted in its function parameter list. The
4347     //   new parameter is of type "reference to cv A," where cv are
4348     //   the cv-qualifiers of the function template (if any) and A is
4349     //   the class of which the function template is a member.
4350     //
4351     // Note that we interpret this to mean "if one of the function
4352     // templates is a non-static member and the other is a non-member";
4353     // otherwise, the ordering rules for static functions against non-static
4354     // functions don't make any sense.
4355     //
4356     // C++98/03 doesn't have this provision but we've extended DR532 to cover
4357     // it as wording was broken prior to it.
4358     SmallVector<QualType, 4> Args1;
4359 
4360     unsigned NumComparedArguments = NumCallArguments1;
4361 
4362     if (!Method2 && Method1 && !Method1->isStatic()) {
4363       // Compare 'this' from Method1 against first parameter from Method2.
4364       AddImplicitObjectParameterType(S.Context, Method1, Args1);
4365       ++NumComparedArguments;
4366     } else if (!Method1 && Method2 && !Method2->isStatic()) {
4367       // Compare 'this' from Method2 against first parameter from Method1.
4368       AddImplicitObjectParameterType(S.Context, Method2, Args2);
4369     }
4370 
4371     Args1.insert(Args1.end(), Proto1->param_type_begin(),
4372                  Proto1->param_type_end());
4373     Args2.insert(Args2.end(), Proto2->param_type_begin(),
4374                  Proto2->param_type_end());
4375 
4376     // C++ [temp.func.order]p5:
4377     //   The presence of unused ellipsis and default arguments has no effect on
4378     //   the partial ordering of function templates.
4379     if (Args1.size() > NumComparedArguments)
4380       Args1.resize(NumComparedArguments);
4381     if (Args2.size() > NumComparedArguments)
4382       Args2.resize(NumComparedArguments);
4383     if (DeduceTemplateArguments(S, TemplateParams, Args2.data(), Args2.size(),
4384                                 Args1.data(), Args1.size(), Info, Deduced,
4385                                 TDF_None, /*PartialOrdering=*/true))
4386       return false;
4387 
4388     break;
4389   }
4390 
4391   case TPOC_Conversion:
4392     //   - In the context of a call to a conversion operator, the return types
4393     //     of the conversion function templates are used.
4394     if (DeduceTemplateArgumentsByTypeMatch(
4395             S, TemplateParams, Proto2->getReturnType(), Proto1->getReturnType(),
4396             Info, Deduced, TDF_None,
4397             /*PartialOrdering=*/true))
4398       return false;
4399     break;
4400 
4401   case TPOC_Other:
4402     //   - In other contexts (14.6.6.2) the function template's function type
4403     //     is used.
4404     if (DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
4405                                            FD2->getType(), FD1->getType(),
4406                                            Info, Deduced, TDF_None,
4407                                            /*PartialOrdering=*/true))
4408       return false;
4409     break;
4410   }
4411 
4412   // C++0x [temp.deduct.partial]p11:
4413   //   In most cases, all template parameters must have values in order for
4414   //   deduction to succeed, but for partial ordering purposes a template
4415   //   parameter may remain without a value provided it is not used in the
4416   //   types being used for partial ordering. [ Note: a template parameter used
4417   //   in a non-deduced context is considered used. -end note]
4418   unsigned ArgIdx = 0, NumArgs = Deduced.size();
4419   for (; ArgIdx != NumArgs; ++ArgIdx)
4420     if (Deduced[ArgIdx].isNull())
4421       break;
4422 
4423   // FIXME: We fail to implement [temp.deduct.type]p1 along this path. We need
4424   // to substitute the deduced arguments back into the template and check that
4425   // we get the right type.
4426 
4427   if (ArgIdx == NumArgs) {
4428     // All template arguments were deduced. FT1 is at least as specialized
4429     // as FT2.
4430     return true;
4431   }
4432 
4433   // Figure out which template parameters were used.
4434   llvm::SmallBitVector UsedParameters(TemplateParams->size());
4435   switch (TPOC) {
4436   case TPOC_Call:
4437     for (unsigned I = 0, N = Args2.size(); I != N; ++I)
4438       ::MarkUsedTemplateParameters(S.Context, Args2[I], false,
4439                                    TemplateParams->getDepth(),
4440                                    UsedParameters);
4441     break;
4442 
4443   case TPOC_Conversion:
4444     ::MarkUsedTemplateParameters(S.Context, Proto2->getReturnType(), false,
4445                                  TemplateParams->getDepth(), UsedParameters);
4446     break;
4447 
4448   case TPOC_Other:
4449     ::MarkUsedTemplateParameters(S.Context, FD2->getType(), false,
4450                                  TemplateParams->getDepth(),
4451                                  UsedParameters);
4452     break;
4453   }
4454 
4455   for (; ArgIdx != NumArgs; ++ArgIdx)
4456     // If this argument had no value deduced but was used in one of the types
4457     // used for partial ordering, then deduction fails.
4458     if (Deduced[ArgIdx].isNull() && UsedParameters[ArgIdx])
4459       return false;
4460 
4461   return true;
4462 }
4463 
4464 /// \brief Determine whether this a function template whose parameter-type-list
4465 /// ends with a function parameter pack.
4466 static bool isVariadicFunctionTemplate(FunctionTemplateDecl *FunTmpl) {
4467   FunctionDecl *Function = FunTmpl->getTemplatedDecl();
4468   unsigned NumParams = Function->getNumParams();
4469   if (NumParams == 0)
4470     return false;
4471 
4472   ParmVarDecl *Last = Function->getParamDecl(NumParams - 1);
4473   if (!Last->isParameterPack())
4474     return false;
4475 
4476   // Make sure that no previous parameter is a parameter pack.
4477   while (--NumParams > 0) {
4478     if (Function->getParamDecl(NumParams - 1)->isParameterPack())
4479       return false;
4480   }
4481 
4482   return true;
4483 }
4484 
4485 /// \brief Returns the more specialized function template according
4486 /// to the rules of function template partial ordering (C++ [temp.func.order]).
4487 ///
4488 /// \param FT1 the first function template
4489 ///
4490 /// \param FT2 the second function template
4491 ///
4492 /// \param TPOC the context in which we are performing partial ordering of
4493 /// function templates.
4494 ///
4495 /// \param NumCallArguments1 The number of arguments in the call to FT1, used
4496 /// only when \c TPOC is \c TPOC_Call.
4497 ///
4498 /// \param NumCallArguments2 The number of arguments in the call to FT2, used
4499 /// only when \c TPOC is \c TPOC_Call.
4500 ///
4501 /// \returns the more specialized function template. If neither
4502 /// template is more specialized, returns NULL.
4503 FunctionTemplateDecl *
4504 Sema::getMoreSpecializedTemplate(FunctionTemplateDecl *FT1,
4505                                  FunctionTemplateDecl *FT2,
4506                                  SourceLocation Loc,
4507                                  TemplatePartialOrderingContext TPOC,
4508                                  unsigned NumCallArguments1,
4509                                  unsigned NumCallArguments2) {
4510   bool Better1 = isAtLeastAsSpecializedAs(*this, Loc, FT1, FT2, TPOC,
4511                                           NumCallArguments1);
4512   bool Better2 = isAtLeastAsSpecializedAs(*this, Loc, FT2, FT1, TPOC,
4513                                           NumCallArguments2);
4514 
4515   if (Better1 != Better2) // We have a clear winner
4516     return Better1 ? FT1 : FT2;
4517 
4518   if (!Better1 && !Better2) // Neither is better than the other
4519     return nullptr;
4520 
4521   // FIXME: This mimics what GCC implements, but doesn't match up with the
4522   // proposed resolution for core issue 692. This area needs to be sorted out,
4523   // but for now we attempt to maintain compatibility.
4524   bool Variadic1 = isVariadicFunctionTemplate(FT1);
4525   bool Variadic2 = isVariadicFunctionTemplate(FT2);
4526   if (Variadic1 != Variadic2)
4527     return Variadic1? FT2 : FT1;
4528 
4529   return nullptr;
4530 }
4531 
4532 /// \brief Determine if the two templates are equivalent.
4533 static bool isSameTemplate(TemplateDecl *T1, TemplateDecl *T2) {
4534   if (T1 == T2)
4535     return true;
4536 
4537   if (!T1 || !T2)
4538     return false;
4539 
4540   return T1->getCanonicalDecl() == T2->getCanonicalDecl();
4541 }
4542 
4543 /// \brief Retrieve the most specialized of the given function template
4544 /// specializations.
4545 ///
4546 /// \param SpecBegin the start iterator of the function template
4547 /// specializations that we will be comparing.
4548 ///
4549 /// \param SpecEnd the end iterator of the function template
4550 /// specializations, paired with \p SpecBegin.
4551 ///
4552 /// \param Loc the location where the ambiguity or no-specializations
4553 /// diagnostic should occur.
4554 ///
4555 /// \param NoneDiag partial diagnostic used to diagnose cases where there are
4556 /// no matching candidates.
4557 ///
4558 /// \param AmbigDiag partial diagnostic used to diagnose an ambiguity, if one
4559 /// occurs.
4560 ///
4561 /// \param CandidateDiag partial diagnostic used for each function template
4562 /// specialization that is a candidate in the ambiguous ordering. One parameter
4563 /// in this diagnostic should be unbound, which will correspond to the string
4564 /// describing the template arguments for the function template specialization.
4565 ///
4566 /// \returns the most specialized function template specialization, if
4567 /// found. Otherwise, returns SpecEnd.
4568 UnresolvedSetIterator Sema::getMostSpecialized(
4569     UnresolvedSetIterator SpecBegin, UnresolvedSetIterator SpecEnd,
4570     TemplateSpecCandidateSet &FailedCandidates,
4571     SourceLocation Loc, const PartialDiagnostic &NoneDiag,
4572     const PartialDiagnostic &AmbigDiag, const PartialDiagnostic &CandidateDiag,
4573     bool Complain, QualType TargetType) {
4574   if (SpecBegin == SpecEnd) {
4575     if (Complain) {
4576       Diag(Loc, NoneDiag);
4577       FailedCandidates.NoteCandidates(*this, Loc);
4578     }
4579     return SpecEnd;
4580   }
4581 
4582   if (SpecBegin + 1 == SpecEnd)
4583     return SpecBegin;
4584 
4585   // Find the function template that is better than all of the templates it
4586   // has been compared to.
4587   UnresolvedSetIterator Best = SpecBegin;
4588   FunctionTemplateDecl *BestTemplate
4589     = cast<FunctionDecl>(*Best)->getPrimaryTemplate();
4590   assert(BestTemplate && "Not a function template specialization?");
4591   for (UnresolvedSetIterator I = SpecBegin + 1; I != SpecEnd; ++I) {
4592     FunctionTemplateDecl *Challenger
4593       = cast<FunctionDecl>(*I)->getPrimaryTemplate();
4594     assert(Challenger && "Not a function template specialization?");
4595     if (isSameTemplate(getMoreSpecializedTemplate(BestTemplate, Challenger,
4596                                                   Loc, TPOC_Other, 0, 0),
4597                        Challenger)) {
4598       Best = I;
4599       BestTemplate = Challenger;
4600     }
4601   }
4602 
4603   // Make sure that the "best" function template is more specialized than all
4604   // of the others.
4605   bool Ambiguous = false;
4606   for (UnresolvedSetIterator I = SpecBegin; I != SpecEnd; ++I) {
4607     FunctionTemplateDecl *Challenger
4608       = cast<FunctionDecl>(*I)->getPrimaryTemplate();
4609     if (I != Best &&
4610         !isSameTemplate(getMoreSpecializedTemplate(BestTemplate, Challenger,
4611                                                    Loc, TPOC_Other, 0, 0),
4612                         BestTemplate)) {
4613       Ambiguous = true;
4614       break;
4615     }
4616   }
4617 
4618   if (!Ambiguous) {
4619     // We found an answer. Return it.
4620     return Best;
4621   }
4622 
4623   // Diagnose the ambiguity.
4624   if (Complain) {
4625     Diag(Loc, AmbigDiag);
4626 
4627     // FIXME: Can we order the candidates in some sane way?
4628     for (UnresolvedSetIterator I = SpecBegin; I != SpecEnd; ++I) {
4629       PartialDiagnostic PD = CandidateDiag;
4630       const auto *FD = cast<FunctionDecl>(*I);
4631       PD << FD << getTemplateArgumentBindingsText(
4632                       FD->getPrimaryTemplate()->getTemplateParameters(),
4633                       *FD->getTemplateSpecializationArgs());
4634       if (!TargetType.isNull())
4635         HandleFunctionTypeMismatch(PD, FD->getType(), TargetType);
4636       Diag((*I)->getLocation(), PD);
4637     }
4638   }
4639 
4640   return SpecEnd;
4641 }
4642 
4643 /// Determine whether one partial specialization, P1, is at least as
4644 /// specialized than another, P2.
4645 ///
4646 /// \tparam TemplateLikeDecl The kind of P2, which must be a
4647 /// TemplateDecl or {Class,Var}TemplatePartialSpecializationDecl.
4648 /// \param T1 The injected-class-name of P1 (faked for a variable template).
4649 /// \param T2 The injected-class-name of P2 (faked for a variable template).
4650 template<typename TemplateLikeDecl>
4651 static bool isAtLeastAsSpecializedAs(Sema &S, QualType T1, QualType T2,
4652                                      TemplateLikeDecl *P2,
4653                                      TemplateDeductionInfo &Info) {
4654   // C++ [temp.class.order]p1:
4655   //   For two class template partial specializations, the first is at least as
4656   //   specialized as the second if, given the following rewrite to two
4657   //   function templates, the first function template is at least as
4658   //   specialized as the second according to the ordering rules for function
4659   //   templates (14.6.6.2):
4660   //     - the first function template has the same template parameters as the
4661   //       first partial specialization and has a single function parameter
4662   //       whose type is a class template specialization with the template
4663   //       arguments of the first partial specialization, and
4664   //     - the second function template has the same template parameters as the
4665   //       second partial specialization and has a single function parameter
4666   //       whose type is a class template specialization with the template
4667   //       arguments of the second partial specialization.
4668   //
4669   // Rather than synthesize function templates, we merely perform the
4670   // equivalent partial ordering by performing deduction directly on
4671   // the template arguments of the class template partial
4672   // specializations. This computation is slightly simpler than the
4673   // general problem of function template partial ordering, because
4674   // class template partial specializations are more constrained. We
4675   // know that every template parameter is deducible from the class
4676   // template partial specialization's template arguments, for
4677   // example.
4678   SmallVector<DeducedTemplateArgument, 4> Deduced;
4679 
4680   // Determine whether P1 is at least as specialized as P2.
4681   Deduced.resize(P2->getTemplateParameters()->size());
4682   if (DeduceTemplateArgumentsByTypeMatch(S, P2->getTemplateParameters(),
4683                                          T2, T1, Info, Deduced, TDF_None,
4684                                          /*PartialOrdering=*/true))
4685     return false;
4686 
4687   SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(),
4688                                                Deduced.end());
4689   Sema::InstantiatingTemplate Inst(S, Info.getLocation(), P2, DeducedArgs,
4690                                    Info);
4691   auto *TST1 = T1->castAs<TemplateSpecializationType>();
4692   if (FinishTemplateArgumentDeduction(
4693           S, P2, /*PartialOrdering=*/true,
4694           TemplateArgumentList(TemplateArgumentList::OnStack,
4695                                TST1->template_arguments()),
4696           Deduced, Info))
4697     return false;
4698 
4699   return true;
4700 }
4701 
4702 /// \brief Returns the more specialized class template partial specialization
4703 /// according to the rules of partial ordering of class template partial
4704 /// specializations (C++ [temp.class.order]).
4705 ///
4706 /// \param PS1 the first class template partial specialization
4707 ///
4708 /// \param PS2 the second class template partial specialization
4709 ///
4710 /// \returns the more specialized class template partial specialization. If
4711 /// neither partial specialization is more specialized, returns NULL.
4712 ClassTemplatePartialSpecializationDecl *
4713 Sema::getMoreSpecializedPartialSpecialization(
4714                                   ClassTemplatePartialSpecializationDecl *PS1,
4715                                   ClassTemplatePartialSpecializationDecl *PS2,
4716                                               SourceLocation Loc) {
4717   QualType PT1 = PS1->getInjectedSpecializationType();
4718   QualType PT2 = PS2->getInjectedSpecializationType();
4719 
4720   TemplateDeductionInfo Info(Loc);
4721   bool Better1 = isAtLeastAsSpecializedAs(*this, PT1, PT2, PS2, Info);
4722   bool Better2 = isAtLeastAsSpecializedAs(*this, PT2, PT1, PS1, Info);
4723 
4724   if (Better1 == Better2)
4725     return nullptr;
4726 
4727   return Better1 ? PS1 : PS2;
4728 }
4729 
4730 bool Sema::isMoreSpecializedThanPrimary(
4731     ClassTemplatePartialSpecializationDecl *Spec, TemplateDeductionInfo &Info) {
4732   ClassTemplateDecl *Primary = Spec->getSpecializedTemplate();
4733   QualType PrimaryT = Primary->getInjectedClassNameSpecialization();
4734   QualType PartialT = Spec->getInjectedSpecializationType();
4735   if (!isAtLeastAsSpecializedAs(*this, PartialT, PrimaryT, Primary, Info))
4736     return false;
4737   if (isAtLeastAsSpecializedAs(*this, PrimaryT, PartialT, Spec, Info)) {
4738     Info.clearSFINAEDiagnostic();
4739     return false;
4740   }
4741   return true;
4742 }
4743 
4744 VarTemplatePartialSpecializationDecl *
4745 Sema::getMoreSpecializedPartialSpecialization(
4746     VarTemplatePartialSpecializationDecl *PS1,
4747     VarTemplatePartialSpecializationDecl *PS2, SourceLocation Loc) {
4748   // Pretend the variable template specializations are class template
4749   // specializations and form a fake injected class name type for comparison.
4750   assert(PS1->getSpecializedTemplate() == PS2->getSpecializedTemplate() &&
4751          "the partial specializations being compared should specialize"
4752          " the same template.");
4753   TemplateName Name(PS1->getSpecializedTemplate());
4754   TemplateName CanonTemplate = Context.getCanonicalTemplateName(Name);
4755   QualType PT1 = Context.getTemplateSpecializationType(
4756       CanonTemplate, PS1->getTemplateArgs().asArray());
4757   QualType PT2 = Context.getTemplateSpecializationType(
4758       CanonTemplate, PS2->getTemplateArgs().asArray());
4759 
4760   TemplateDeductionInfo Info(Loc);
4761   bool Better1 = isAtLeastAsSpecializedAs(*this, PT1, PT2, PS2, Info);
4762   bool Better2 = isAtLeastAsSpecializedAs(*this, PT2, PT1, PS1, Info);
4763 
4764   if (Better1 == Better2)
4765     return nullptr;
4766 
4767   return Better1 ? PS1 : PS2;
4768 }
4769 
4770 bool Sema::isMoreSpecializedThanPrimary(
4771     VarTemplatePartialSpecializationDecl *Spec, TemplateDeductionInfo &Info) {
4772   TemplateDecl *Primary = Spec->getSpecializedTemplate();
4773   // FIXME: Cache the injected template arguments rather than recomputing
4774   // them for each partial specialization.
4775   SmallVector<TemplateArgument, 8> PrimaryArgs;
4776   Context.getInjectedTemplateArgs(Primary->getTemplateParameters(),
4777                                   PrimaryArgs);
4778 
4779   TemplateName CanonTemplate =
4780       Context.getCanonicalTemplateName(TemplateName(Primary));
4781   QualType PrimaryT = Context.getTemplateSpecializationType(
4782       CanonTemplate, PrimaryArgs);
4783   QualType PartialT = Context.getTemplateSpecializationType(
4784       CanonTemplate, Spec->getTemplateArgs().asArray());
4785   if (!isAtLeastAsSpecializedAs(*this, PartialT, PrimaryT, Primary, Info))
4786     return false;
4787   if (isAtLeastAsSpecializedAs(*this, PrimaryT, PartialT, Spec, Info)) {
4788     Info.clearSFINAEDiagnostic();
4789     return false;
4790   }
4791   return true;
4792 }
4793 
4794 bool Sema::isTemplateTemplateParameterAtLeastAsSpecializedAs(
4795      TemplateParameterList *P, TemplateDecl *AArg, SourceLocation Loc) {
4796   // C++1z [temp.arg.template]p4: (DR 150)
4797   //   A template template-parameter P is at least as specialized as a
4798   //   template template-argument A if, given the following rewrite to two
4799   //   function templates...
4800 
4801   // Rather than synthesize function templates, we merely perform the
4802   // equivalent partial ordering by performing deduction directly on
4803   // the template parameter lists of the template template parameters.
4804   //
4805   //   Given an invented class template X with the template parameter list of
4806   //   A (including default arguments):
4807   TemplateName X = Context.getCanonicalTemplateName(TemplateName(AArg));
4808   TemplateParameterList *A = AArg->getTemplateParameters();
4809 
4810   //    - Each function template has a single function parameter whose type is
4811   //      a specialization of X with template arguments corresponding to the
4812   //      template parameters from the respective function template
4813   SmallVector<TemplateArgument, 8> AArgs;
4814   Context.getInjectedTemplateArgs(A, AArgs);
4815 
4816   // Check P's arguments against A's parameter list. This will fill in default
4817   // template arguments as needed. AArgs are already correct by construction.
4818   // We can't just use CheckTemplateIdType because that will expand alias
4819   // templates.
4820   SmallVector<TemplateArgument, 4> PArgs;
4821   {
4822     SFINAETrap Trap(*this);
4823 
4824     Context.getInjectedTemplateArgs(P, PArgs);
4825     TemplateArgumentListInfo PArgList(P->getLAngleLoc(), P->getRAngleLoc());
4826     for (unsigned I = 0, N = P->size(); I != N; ++I) {
4827       // Unwrap packs that getInjectedTemplateArgs wrapped around pack
4828       // expansions, to form an "as written" argument list.
4829       TemplateArgument Arg = PArgs[I];
4830       if (Arg.getKind() == TemplateArgument::Pack) {
4831         assert(Arg.pack_size() == 1 && Arg.pack_begin()->isPackExpansion());
4832         Arg = *Arg.pack_begin();
4833       }
4834       PArgList.addArgument(getTrivialTemplateArgumentLoc(
4835           Arg, QualType(), P->getParam(I)->getLocation()));
4836     }
4837     PArgs.clear();
4838 
4839     // C++1z [temp.arg.template]p3:
4840     //   If the rewrite produces an invalid type, then P is not at least as
4841     //   specialized as A.
4842     if (CheckTemplateArgumentList(AArg, Loc, PArgList, false, PArgs) ||
4843         Trap.hasErrorOccurred())
4844       return false;
4845   }
4846 
4847   QualType AType = Context.getTemplateSpecializationType(X, AArgs);
4848   QualType PType = Context.getTemplateSpecializationType(X, PArgs);
4849 
4850   //   ... the function template corresponding to P is at least as specialized
4851   //   as the function template corresponding to A according to the partial
4852   //   ordering rules for function templates.
4853   TemplateDeductionInfo Info(Loc, A->getDepth());
4854   return isAtLeastAsSpecializedAs(*this, PType, AType, AArg, Info);
4855 }
4856 
4857 static void
4858 MarkUsedTemplateParameters(ASTContext &Ctx,
4859                            const TemplateArgument &TemplateArg,
4860                            bool OnlyDeduced,
4861                            unsigned Depth,
4862                            llvm::SmallBitVector &Used);
4863 
4864 /// \brief Mark the template parameters that are used by the given
4865 /// expression.
4866 static void
4867 MarkUsedTemplateParameters(ASTContext &Ctx,
4868                            const Expr *E,
4869                            bool OnlyDeduced,
4870                            unsigned Depth,
4871                            llvm::SmallBitVector &Used) {
4872   // We can deduce from a pack expansion.
4873   if (const PackExpansionExpr *Expansion = dyn_cast<PackExpansionExpr>(E))
4874     E = Expansion->getPattern();
4875 
4876   // Skip through any implicit casts we added while type-checking, and any
4877   // substitutions performed by template alias expansion.
4878   while (1) {
4879     if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E))
4880       E = ICE->getSubExpr();
4881     else if (const SubstNonTypeTemplateParmExpr *Subst =
4882                dyn_cast<SubstNonTypeTemplateParmExpr>(E))
4883       E = Subst->getReplacement();
4884     else
4885       break;
4886   }
4887 
4888   // FIXME: if !OnlyDeduced, we have to walk the whole subexpression to
4889   // find other occurrences of template parameters.
4890   const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E);
4891   if (!DRE)
4892     return;
4893 
4894   const NonTypeTemplateParmDecl *NTTP
4895     = dyn_cast<NonTypeTemplateParmDecl>(DRE->getDecl());
4896   if (!NTTP)
4897     return;
4898 
4899   if (NTTP->getDepth() == Depth)
4900     Used[NTTP->getIndex()] = true;
4901 
4902   // In C++1z mode, additional arguments may be deduced from the type of a
4903   // non-type argument.
4904   if (Ctx.getLangOpts().CPlusPlus1z)
4905     MarkUsedTemplateParameters(Ctx, NTTP->getType(), OnlyDeduced, Depth, Used);
4906 }
4907 
4908 /// \brief Mark the template parameters that are used by the given
4909 /// nested name specifier.
4910 static void
4911 MarkUsedTemplateParameters(ASTContext &Ctx,
4912                            NestedNameSpecifier *NNS,
4913                            bool OnlyDeduced,
4914                            unsigned Depth,
4915                            llvm::SmallBitVector &Used) {
4916   if (!NNS)
4917     return;
4918 
4919   MarkUsedTemplateParameters(Ctx, NNS->getPrefix(), OnlyDeduced, Depth,
4920                              Used);
4921   MarkUsedTemplateParameters(Ctx, QualType(NNS->getAsType(), 0),
4922                              OnlyDeduced, Depth, Used);
4923 }
4924 
4925 /// \brief Mark the template parameters that are used by the given
4926 /// template name.
4927 static void
4928 MarkUsedTemplateParameters(ASTContext &Ctx,
4929                            TemplateName Name,
4930                            bool OnlyDeduced,
4931                            unsigned Depth,
4932                            llvm::SmallBitVector &Used) {
4933   if (TemplateDecl *Template = Name.getAsTemplateDecl()) {
4934     if (TemplateTemplateParmDecl *TTP
4935           = dyn_cast<TemplateTemplateParmDecl>(Template)) {
4936       if (TTP->getDepth() == Depth)
4937         Used[TTP->getIndex()] = true;
4938     }
4939     return;
4940   }
4941 
4942   if (QualifiedTemplateName *QTN = Name.getAsQualifiedTemplateName())
4943     MarkUsedTemplateParameters(Ctx, QTN->getQualifier(), OnlyDeduced,
4944                                Depth, Used);
4945   if (DependentTemplateName *DTN = Name.getAsDependentTemplateName())
4946     MarkUsedTemplateParameters(Ctx, DTN->getQualifier(), OnlyDeduced,
4947                                Depth, Used);
4948 }
4949 
4950 /// \brief Mark the template parameters that are used by the given
4951 /// type.
4952 static void
4953 MarkUsedTemplateParameters(ASTContext &Ctx, QualType T,
4954                            bool OnlyDeduced,
4955                            unsigned Depth,
4956                            llvm::SmallBitVector &Used) {
4957   if (T.isNull())
4958     return;
4959 
4960   // Non-dependent types have nothing deducible
4961   if (!T->isDependentType())
4962     return;
4963 
4964   T = Ctx.getCanonicalType(T);
4965   switch (T->getTypeClass()) {
4966   case Type::Pointer:
4967     MarkUsedTemplateParameters(Ctx,
4968                                cast<PointerType>(T)->getPointeeType(),
4969                                OnlyDeduced,
4970                                Depth,
4971                                Used);
4972     break;
4973 
4974   case Type::BlockPointer:
4975     MarkUsedTemplateParameters(Ctx,
4976                                cast<BlockPointerType>(T)->getPointeeType(),
4977                                OnlyDeduced,
4978                                Depth,
4979                                Used);
4980     break;
4981 
4982   case Type::LValueReference:
4983   case Type::RValueReference:
4984     MarkUsedTemplateParameters(Ctx,
4985                                cast<ReferenceType>(T)->getPointeeType(),
4986                                OnlyDeduced,
4987                                Depth,
4988                                Used);
4989     break;
4990 
4991   case Type::MemberPointer: {
4992     const MemberPointerType *MemPtr = cast<MemberPointerType>(T.getTypePtr());
4993     MarkUsedTemplateParameters(Ctx, MemPtr->getPointeeType(), OnlyDeduced,
4994                                Depth, Used);
4995     MarkUsedTemplateParameters(Ctx, QualType(MemPtr->getClass(), 0),
4996                                OnlyDeduced, Depth, Used);
4997     break;
4998   }
4999 
5000   case Type::DependentSizedArray:
5001     MarkUsedTemplateParameters(Ctx,
5002                                cast<DependentSizedArrayType>(T)->getSizeExpr(),
5003                                OnlyDeduced, Depth, Used);
5004     // Fall through to check the element type
5005 
5006   case Type::ConstantArray:
5007   case Type::IncompleteArray:
5008     MarkUsedTemplateParameters(Ctx,
5009                                cast<ArrayType>(T)->getElementType(),
5010                                OnlyDeduced, Depth, Used);
5011     break;
5012 
5013   case Type::Vector:
5014   case Type::ExtVector:
5015     MarkUsedTemplateParameters(Ctx,
5016                                cast<VectorType>(T)->getElementType(),
5017                                OnlyDeduced, Depth, Used);
5018     break;
5019 
5020   case Type::DependentSizedExtVector: {
5021     const DependentSizedExtVectorType *VecType
5022       = cast<DependentSizedExtVectorType>(T);
5023     MarkUsedTemplateParameters(Ctx, VecType->getElementType(), OnlyDeduced,
5024                                Depth, Used);
5025     MarkUsedTemplateParameters(Ctx, VecType->getSizeExpr(), OnlyDeduced,
5026                                Depth, Used);
5027     break;
5028   }
5029 
5030   case Type::FunctionProto: {
5031     const FunctionProtoType *Proto = cast<FunctionProtoType>(T);
5032     MarkUsedTemplateParameters(Ctx, Proto->getReturnType(), OnlyDeduced, Depth,
5033                                Used);
5034     for (unsigned I = 0, N = Proto->getNumParams(); I != N; ++I)
5035       MarkUsedTemplateParameters(Ctx, Proto->getParamType(I), OnlyDeduced,
5036                                  Depth, Used);
5037     break;
5038   }
5039 
5040   case Type::TemplateTypeParm: {
5041     const TemplateTypeParmType *TTP = cast<TemplateTypeParmType>(T);
5042     if (TTP->getDepth() == Depth)
5043       Used[TTP->getIndex()] = true;
5044     break;
5045   }
5046 
5047   case Type::SubstTemplateTypeParmPack: {
5048     const SubstTemplateTypeParmPackType *Subst
5049       = cast<SubstTemplateTypeParmPackType>(T);
5050     MarkUsedTemplateParameters(Ctx,
5051                                QualType(Subst->getReplacedParameter(), 0),
5052                                OnlyDeduced, Depth, Used);
5053     MarkUsedTemplateParameters(Ctx, Subst->getArgumentPack(),
5054                                OnlyDeduced, Depth, Used);
5055     break;
5056   }
5057 
5058   case Type::InjectedClassName:
5059     T = cast<InjectedClassNameType>(T)->getInjectedSpecializationType();
5060     // fall through
5061 
5062   case Type::TemplateSpecialization: {
5063     const TemplateSpecializationType *Spec
5064       = cast<TemplateSpecializationType>(T);
5065     MarkUsedTemplateParameters(Ctx, Spec->getTemplateName(), OnlyDeduced,
5066                                Depth, Used);
5067 
5068     // C++0x [temp.deduct.type]p9:
5069     //   If the template argument list of P contains a pack expansion that is
5070     //   not the last template argument, the entire template argument list is a
5071     //   non-deduced context.
5072     if (OnlyDeduced &&
5073         hasPackExpansionBeforeEnd(Spec->template_arguments()))
5074       break;
5075 
5076     for (unsigned I = 0, N = Spec->getNumArgs(); I != N; ++I)
5077       MarkUsedTemplateParameters(Ctx, Spec->getArg(I), OnlyDeduced, Depth,
5078                                  Used);
5079     break;
5080   }
5081 
5082   case Type::Complex:
5083     if (!OnlyDeduced)
5084       MarkUsedTemplateParameters(Ctx,
5085                                  cast<ComplexType>(T)->getElementType(),
5086                                  OnlyDeduced, Depth, Used);
5087     break;
5088 
5089   case Type::Atomic:
5090     if (!OnlyDeduced)
5091       MarkUsedTemplateParameters(Ctx,
5092                                  cast<AtomicType>(T)->getValueType(),
5093                                  OnlyDeduced, Depth, Used);
5094     break;
5095 
5096   case Type::DependentName:
5097     if (!OnlyDeduced)
5098       MarkUsedTemplateParameters(Ctx,
5099                                  cast<DependentNameType>(T)->getQualifier(),
5100                                  OnlyDeduced, Depth, Used);
5101     break;
5102 
5103   case Type::DependentTemplateSpecialization: {
5104     // C++14 [temp.deduct.type]p5:
5105     //   The non-deduced contexts are:
5106     //     -- The nested-name-specifier of a type that was specified using a
5107     //        qualified-id
5108     //
5109     // C++14 [temp.deduct.type]p6:
5110     //   When a type name is specified in a way that includes a non-deduced
5111     //   context, all of the types that comprise that type name are also
5112     //   non-deduced.
5113     if (OnlyDeduced)
5114       break;
5115 
5116     const DependentTemplateSpecializationType *Spec
5117       = cast<DependentTemplateSpecializationType>(T);
5118 
5119     MarkUsedTemplateParameters(Ctx, Spec->getQualifier(),
5120                                OnlyDeduced, Depth, Used);
5121 
5122     for (unsigned I = 0, N = Spec->getNumArgs(); I != N; ++I)
5123       MarkUsedTemplateParameters(Ctx, Spec->getArg(I), OnlyDeduced, Depth,
5124                                  Used);
5125     break;
5126   }
5127 
5128   case Type::TypeOf:
5129     if (!OnlyDeduced)
5130       MarkUsedTemplateParameters(Ctx,
5131                                  cast<TypeOfType>(T)->getUnderlyingType(),
5132                                  OnlyDeduced, Depth, Used);
5133     break;
5134 
5135   case Type::TypeOfExpr:
5136     if (!OnlyDeduced)
5137       MarkUsedTemplateParameters(Ctx,
5138                                  cast<TypeOfExprType>(T)->getUnderlyingExpr(),
5139                                  OnlyDeduced, Depth, Used);
5140     break;
5141 
5142   case Type::Decltype:
5143     if (!OnlyDeduced)
5144       MarkUsedTemplateParameters(Ctx,
5145                                  cast<DecltypeType>(T)->getUnderlyingExpr(),
5146                                  OnlyDeduced, Depth, Used);
5147     break;
5148 
5149   case Type::UnaryTransform:
5150     if (!OnlyDeduced)
5151       MarkUsedTemplateParameters(Ctx,
5152                                  cast<UnaryTransformType>(T)->getUnderlyingType(),
5153                                  OnlyDeduced, Depth, Used);
5154     break;
5155 
5156   case Type::PackExpansion:
5157     MarkUsedTemplateParameters(Ctx,
5158                                cast<PackExpansionType>(T)->getPattern(),
5159                                OnlyDeduced, Depth, Used);
5160     break;
5161 
5162   case Type::Auto:
5163   case Type::DeducedTemplateSpecialization:
5164     MarkUsedTemplateParameters(Ctx,
5165                                cast<DeducedType>(T)->getDeducedType(),
5166                                OnlyDeduced, Depth, Used);
5167 
5168   // None of these types have any template parameters in them.
5169   case Type::Builtin:
5170   case Type::VariableArray:
5171   case Type::FunctionNoProto:
5172   case Type::Record:
5173   case Type::Enum:
5174   case Type::ObjCInterface:
5175   case Type::ObjCObject:
5176   case Type::ObjCObjectPointer:
5177   case Type::UnresolvedUsing:
5178   case Type::Pipe:
5179 #define TYPE(Class, Base)
5180 #define ABSTRACT_TYPE(Class, Base)
5181 #define DEPENDENT_TYPE(Class, Base)
5182 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
5183 #include "clang/AST/TypeNodes.def"
5184     break;
5185   }
5186 }
5187 
5188 /// \brief Mark the template parameters that are used by this
5189 /// template argument.
5190 static void
5191 MarkUsedTemplateParameters(ASTContext &Ctx,
5192                            const TemplateArgument &TemplateArg,
5193                            bool OnlyDeduced,
5194                            unsigned Depth,
5195                            llvm::SmallBitVector &Used) {
5196   switch (TemplateArg.getKind()) {
5197   case TemplateArgument::Null:
5198   case TemplateArgument::Integral:
5199   case TemplateArgument::Declaration:
5200     break;
5201 
5202   case TemplateArgument::NullPtr:
5203     MarkUsedTemplateParameters(Ctx, TemplateArg.getNullPtrType(), OnlyDeduced,
5204                                Depth, Used);
5205     break;
5206 
5207   case TemplateArgument::Type:
5208     MarkUsedTemplateParameters(Ctx, TemplateArg.getAsType(), OnlyDeduced,
5209                                Depth, Used);
5210     break;
5211 
5212   case TemplateArgument::Template:
5213   case TemplateArgument::TemplateExpansion:
5214     MarkUsedTemplateParameters(Ctx,
5215                                TemplateArg.getAsTemplateOrTemplatePattern(),
5216                                OnlyDeduced, Depth, Used);
5217     break;
5218 
5219   case TemplateArgument::Expression:
5220     MarkUsedTemplateParameters(Ctx, TemplateArg.getAsExpr(), OnlyDeduced,
5221                                Depth, Used);
5222     break;
5223 
5224   case TemplateArgument::Pack:
5225     for (const auto &P : TemplateArg.pack_elements())
5226       MarkUsedTemplateParameters(Ctx, P, OnlyDeduced, Depth, Used);
5227     break;
5228   }
5229 }
5230 
5231 /// \brief Mark which template parameters can be deduced from a given
5232 /// template argument list.
5233 ///
5234 /// \param TemplateArgs the template argument list from which template
5235 /// parameters will be deduced.
5236 ///
5237 /// \param Used a bit vector whose elements will be set to \c true
5238 /// to indicate when the corresponding template parameter will be
5239 /// deduced.
5240 void
5241 Sema::MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs,
5242                                  bool OnlyDeduced, unsigned Depth,
5243                                  llvm::SmallBitVector &Used) {
5244   // C++0x [temp.deduct.type]p9:
5245   //   If the template argument list of P contains a pack expansion that is not
5246   //   the last template argument, the entire template argument list is a
5247   //   non-deduced context.
5248   if (OnlyDeduced &&
5249       hasPackExpansionBeforeEnd(TemplateArgs.asArray()))
5250     return;
5251 
5252   for (unsigned I = 0, N = TemplateArgs.size(); I != N; ++I)
5253     ::MarkUsedTemplateParameters(Context, TemplateArgs[I], OnlyDeduced,
5254                                  Depth, Used);
5255 }
5256 
5257 /// \brief Marks all of the template parameters that will be deduced by a
5258 /// call to the given function template.
5259 void Sema::MarkDeducedTemplateParameters(
5260     ASTContext &Ctx, const FunctionTemplateDecl *FunctionTemplate,
5261     llvm::SmallBitVector &Deduced) {
5262   TemplateParameterList *TemplateParams
5263     = FunctionTemplate->getTemplateParameters();
5264   Deduced.clear();
5265   Deduced.resize(TemplateParams->size());
5266 
5267   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
5268   for (unsigned I = 0, N = Function->getNumParams(); I != N; ++I)
5269     ::MarkUsedTemplateParameters(Ctx, Function->getParamDecl(I)->getType(),
5270                                  true, TemplateParams->getDepth(), Deduced);
5271 }
5272 
5273 bool hasDeducibleTemplateParameters(Sema &S,
5274                                     FunctionTemplateDecl *FunctionTemplate,
5275                                     QualType T) {
5276   if (!T->isDependentType())
5277     return false;
5278 
5279   TemplateParameterList *TemplateParams
5280     = FunctionTemplate->getTemplateParameters();
5281   llvm::SmallBitVector Deduced(TemplateParams->size());
5282   ::MarkUsedTemplateParameters(S.Context, T, true, TemplateParams->getDepth(),
5283                                Deduced);
5284 
5285   return Deduced.any();
5286 }
5287