1 //===--- SemaOverload.cpp - C++ Overloading -------------------------------===//
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 //
10 // This file provides Sema routines for C++ overloading.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/Sema/Overload.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/CXXInheritance.h"
17 #include "clang/AST/DeclObjC.h"
18 #include "clang/AST/Expr.h"
19 #include "clang/AST/ExprCXX.h"
20 #include "clang/AST/ExprObjC.h"
21 #include "clang/AST/TypeOrdering.h"
22 #include "clang/Basic/Diagnostic.h"
23 #include "clang/Basic/DiagnosticOptions.h"
24 #include "clang/Basic/PartialDiagnostic.h"
25 #include "clang/Basic/TargetInfo.h"
26 #include "clang/Sema/Initialization.h"
27 #include "clang/Sema/Lookup.h"
28 #include "clang/Sema/SemaInternal.h"
29 #include "clang/Sema/Template.h"
30 #include "clang/Sema/TemplateDeduction.h"
31 #include "llvm/ADT/DenseSet.h"
32 #include "llvm/ADT/STLExtras.h"
33 #include "llvm/ADT/SmallPtrSet.h"
34 #include "llvm/ADT/SmallString.h"
35 #include <algorithm>
36 #include <cstdlib>
37 
38 using namespace clang;
39 using namespace sema;
40 
41 static bool functionHasPassObjectSizeParams(const FunctionDecl *FD) {
42   return std::any_of(FD->param_begin(), FD->param_end(),
43                      std::mem_fn(&ParmVarDecl::hasAttr<PassObjectSizeAttr>));
44 }
45 
46 /// A convenience routine for creating a decayed reference to a function.
47 static ExprResult
48 CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl,
49                       bool HadMultipleCandidates,
50                       SourceLocation Loc = SourceLocation(),
51                       const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
52   if (S.DiagnoseUseOfDecl(FoundDecl, Loc))
53     return ExprError();
54   // If FoundDecl is different from Fn (such as if one is a template
55   // and the other a specialization), make sure DiagnoseUseOfDecl is
56   // called on both.
57   // FIXME: This would be more comprehensively addressed by modifying
58   // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
59   // being used.
60   if (FoundDecl != Fn && S.DiagnoseUseOfDecl(Fn, Loc))
61     return ExprError();
62   DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
63                                                  VK_LValue, Loc, LocInfo);
64   if (HadMultipleCandidates)
65     DRE->setHadMultipleCandidates(true);
66 
67   S.MarkDeclRefReferenced(DRE);
68   return S.ImpCastExprToType(DRE, S.Context.getPointerType(DRE->getType()),
69                              CK_FunctionToPointerDecay);
70 }
71 
72 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
73                                  bool InOverloadResolution,
74                                  StandardConversionSequence &SCS,
75                                  bool CStyle,
76                                  bool AllowObjCWritebackConversion);
77 
78 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
79                                                  QualType &ToType,
80                                                  bool InOverloadResolution,
81                                                  StandardConversionSequence &SCS,
82                                                  bool CStyle);
83 static OverloadingResult
84 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
85                         UserDefinedConversionSequence& User,
86                         OverloadCandidateSet& Conversions,
87                         bool AllowExplicit,
88                         bool AllowObjCConversionOnExplicit);
89 
90 
91 static ImplicitConversionSequence::CompareKind
92 CompareStandardConversionSequences(Sema &S, SourceLocation Loc,
93                                    const StandardConversionSequence& SCS1,
94                                    const StandardConversionSequence& SCS2);
95 
96 static ImplicitConversionSequence::CompareKind
97 CompareQualificationConversions(Sema &S,
98                                 const StandardConversionSequence& SCS1,
99                                 const StandardConversionSequence& SCS2);
100 
101 static ImplicitConversionSequence::CompareKind
102 CompareDerivedToBaseConversions(Sema &S, SourceLocation Loc,
103                                 const StandardConversionSequence& SCS1,
104                                 const StandardConversionSequence& SCS2);
105 
106 /// GetConversionRank - Retrieve the implicit conversion rank
107 /// corresponding to the given implicit conversion kind.
108 ImplicitConversionRank clang::GetConversionRank(ImplicitConversionKind Kind) {
109   static const ImplicitConversionRank
110     Rank[(int)ICK_Num_Conversion_Kinds] = {
111     ICR_Exact_Match,
112     ICR_Exact_Match,
113     ICR_Exact_Match,
114     ICR_Exact_Match,
115     ICR_Exact_Match,
116     ICR_Exact_Match,
117     ICR_Promotion,
118     ICR_Promotion,
119     ICR_Promotion,
120     ICR_Conversion,
121     ICR_Conversion,
122     ICR_Conversion,
123     ICR_Conversion,
124     ICR_Conversion,
125     ICR_Conversion,
126     ICR_Conversion,
127     ICR_Conversion,
128     ICR_Conversion,
129     ICR_Conversion,
130     ICR_Conversion,
131     ICR_Complex_Real_Conversion,
132     ICR_Conversion,
133     ICR_Conversion,
134     ICR_Writeback_Conversion,
135     ICR_Exact_Match, // NOTE(gbiv): This may not be completely right --
136                      // it was omitted by the patch that added
137                      // ICK_Zero_Event_Conversion
138     ICR_C_Conversion
139   };
140   return Rank[(int)Kind];
141 }
142 
143 /// GetImplicitConversionName - Return the name of this kind of
144 /// implicit conversion.
145 static const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
146   static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
147     "No conversion",
148     "Lvalue-to-rvalue",
149     "Array-to-pointer",
150     "Function-to-pointer",
151     "Noreturn adjustment",
152     "Qualification",
153     "Integral promotion",
154     "Floating point promotion",
155     "Complex promotion",
156     "Integral conversion",
157     "Floating conversion",
158     "Complex conversion",
159     "Floating-integral conversion",
160     "Pointer conversion",
161     "Pointer-to-member conversion",
162     "Boolean conversion",
163     "Compatible-types conversion",
164     "Derived-to-base conversion",
165     "Vector conversion",
166     "Vector splat",
167     "Complex-real conversion",
168     "Block Pointer conversion",
169     "Transparent Union Conversion",
170     "Writeback conversion",
171     "OpenCL Zero Event Conversion",
172     "C specific type conversion"
173   };
174   return Name[Kind];
175 }
176 
177 /// StandardConversionSequence - Set the standard conversion
178 /// sequence to the identity conversion.
179 void StandardConversionSequence::setAsIdentityConversion() {
180   First = ICK_Identity;
181   Second = ICK_Identity;
182   Third = ICK_Identity;
183   DeprecatedStringLiteralToCharPtr = false;
184   QualificationIncludesObjCLifetime = false;
185   ReferenceBinding = false;
186   DirectBinding = false;
187   IsLvalueReference = true;
188   BindsToFunctionLvalue = false;
189   BindsToRvalue = false;
190   BindsImplicitObjectArgumentWithoutRefQualifier = false;
191   ObjCLifetimeConversionBinding = false;
192   CopyConstructor = nullptr;
193 }
194 
195 /// getRank - Retrieve the rank of this standard conversion sequence
196 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
197 /// implicit conversions.
198 ImplicitConversionRank StandardConversionSequence::getRank() const {
199   ImplicitConversionRank Rank = ICR_Exact_Match;
200   if  (GetConversionRank(First) > Rank)
201     Rank = GetConversionRank(First);
202   if  (GetConversionRank(Second) > Rank)
203     Rank = GetConversionRank(Second);
204   if  (GetConversionRank(Third) > Rank)
205     Rank = GetConversionRank(Third);
206   return Rank;
207 }
208 
209 /// isPointerConversionToBool - Determines whether this conversion is
210 /// a conversion of a pointer or pointer-to-member to bool. This is
211 /// used as part of the ranking of standard conversion sequences
212 /// (C++ 13.3.3.2p4).
213 bool StandardConversionSequence::isPointerConversionToBool() const {
214   // Note that FromType has not necessarily been transformed by the
215   // array-to-pointer or function-to-pointer implicit conversions, so
216   // check for their presence as well as checking whether FromType is
217   // a pointer.
218   if (getToType(1)->isBooleanType() &&
219       (getFromType()->isPointerType() ||
220        getFromType()->isObjCObjectPointerType() ||
221        getFromType()->isBlockPointerType() ||
222        getFromType()->isNullPtrType() ||
223        First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
224     return true;
225 
226   return false;
227 }
228 
229 /// isPointerConversionToVoidPointer - Determines whether this
230 /// conversion is a conversion of a pointer to a void pointer. This is
231 /// used as part of the ranking of standard conversion sequences (C++
232 /// 13.3.3.2p4).
233 bool
234 StandardConversionSequence::
235 isPointerConversionToVoidPointer(ASTContext& Context) const {
236   QualType FromType = getFromType();
237   QualType ToType = getToType(1);
238 
239   // Note that FromType has not necessarily been transformed by the
240   // array-to-pointer implicit conversion, so check for its presence
241   // and redo the conversion to get a pointer.
242   if (First == ICK_Array_To_Pointer)
243     FromType = Context.getArrayDecayedType(FromType);
244 
245   if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
246     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
247       return ToPtrType->getPointeeType()->isVoidType();
248 
249   return false;
250 }
251 
252 /// Skip any implicit casts which could be either part of a narrowing conversion
253 /// or after one in an implicit conversion.
254 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
255   while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
256     switch (ICE->getCastKind()) {
257     case CK_NoOp:
258     case CK_IntegralCast:
259     case CK_IntegralToBoolean:
260     case CK_IntegralToFloating:
261     case CK_FloatingToIntegral:
262     case CK_FloatingToBoolean:
263     case CK_FloatingCast:
264       Converted = ICE->getSubExpr();
265       continue;
266 
267     default:
268       return Converted;
269     }
270   }
271 
272   return Converted;
273 }
274 
275 /// Check if this standard conversion sequence represents a narrowing
276 /// conversion, according to C++11 [dcl.init.list]p7.
277 ///
278 /// \param Ctx  The AST context.
279 /// \param Converted  The result of applying this standard conversion sequence.
280 /// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
281 ///        value of the expression prior to the narrowing conversion.
282 /// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
283 ///        type of the expression prior to the narrowing conversion.
284 NarrowingKind
285 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
286                                              const Expr *Converted,
287                                              APValue &ConstantValue,
288                                              QualType &ConstantType) const {
289   assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
290 
291   // C++11 [dcl.init.list]p7:
292   //   A narrowing conversion is an implicit conversion ...
293   QualType FromType = getToType(0);
294   QualType ToType = getToType(1);
295   switch (Second) {
296   // 'bool' is an integral type; dispatch to the right place to handle it.
297   case ICK_Boolean_Conversion:
298     if (FromType->isRealFloatingType())
299       goto FloatingIntegralConversion;
300     if (FromType->isIntegralOrUnscopedEnumerationType())
301       goto IntegralConversion;
302     // Boolean conversions can be from pointers and pointers to members
303     // [conv.bool], and those aren't considered narrowing conversions.
304     return NK_Not_Narrowing;
305 
306   // -- from a floating-point type to an integer type, or
307   //
308   // -- from an integer type or unscoped enumeration type to a floating-point
309   //    type, except where the source is a constant expression and the actual
310   //    value after conversion will fit into the target type and will produce
311   //    the original value when converted back to the original type, or
312   case ICK_Floating_Integral:
313   FloatingIntegralConversion:
314     if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
315       return NK_Type_Narrowing;
316     } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
317       llvm::APSInt IntConstantValue;
318       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
319       if (Initializer &&
320           Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
321         // Convert the integer to the floating type.
322         llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
323         Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
324                                 llvm::APFloat::rmNearestTiesToEven);
325         // And back.
326         llvm::APSInt ConvertedValue = IntConstantValue;
327         bool ignored;
328         Result.convertToInteger(ConvertedValue,
329                                 llvm::APFloat::rmTowardZero, &ignored);
330         // If the resulting value is different, this was a narrowing conversion.
331         if (IntConstantValue != ConvertedValue) {
332           ConstantValue = APValue(IntConstantValue);
333           ConstantType = Initializer->getType();
334           return NK_Constant_Narrowing;
335         }
336       } else {
337         // Variables are always narrowings.
338         return NK_Variable_Narrowing;
339       }
340     }
341     return NK_Not_Narrowing;
342 
343   // -- from long double to double or float, or from double to float, except
344   //    where the source is a constant expression and the actual value after
345   //    conversion is within the range of values that can be represented (even
346   //    if it cannot be represented exactly), or
347   case ICK_Floating_Conversion:
348     if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
349         Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
350       // FromType is larger than ToType.
351       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
352       if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
353         // Constant!
354         assert(ConstantValue.isFloat());
355         llvm::APFloat FloatVal = ConstantValue.getFloat();
356         // Convert the source value into the target type.
357         bool ignored;
358         llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
359           Ctx.getFloatTypeSemantics(ToType),
360           llvm::APFloat::rmNearestTiesToEven, &ignored);
361         // If there was no overflow, the source value is within the range of
362         // values that can be represented.
363         if (ConvertStatus & llvm::APFloat::opOverflow) {
364           ConstantType = Initializer->getType();
365           return NK_Constant_Narrowing;
366         }
367       } else {
368         return NK_Variable_Narrowing;
369       }
370     }
371     return NK_Not_Narrowing;
372 
373   // -- from an integer type or unscoped enumeration type to an integer type
374   //    that cannot represent all the values of the original type, except where
375   //    the source is a constant expression and the actual value after
376   //    conversion will fit into the target type and will produce the original
377   //    value when converted back to the original type.
378   case ICK_Integral_Conversion:
379   IntegralConversion: {
380     assert(FromType->isIntegralOrUnscopedEnumerationType());
381     assert(ToType->isIntegralOrUnscopedEnumerationType());
382     const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
383     const unsigned FromWidth = Ctx.getIntWidth(FromType);
384     const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
385     const unsigned ToWidth = Ctx.getIntWidth(ToType);
386 
387     if (FromWidth > ToWidth ||
388         (FromWidth == ToWidth && FromSigned != ToSigned) ||
389         (FromSigned && !ToSigned)) {
390       // Not all values of FromType can be represented in ToType.
391       llvm::APSInt InitializerValue;
392       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
393       if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
394         // Such conversions on variables are always narrowing.
395         return NK_Variable_Narrowing;
396       }
397       bool Narrowing = false;
398       if (FromWidth < ToWidth) {
399         // Negative -> unsigned is narrowing. Otherwise, more bits is never
400         // narrowing.
401         if (InitializerValue.isSigned() && InitializerValue.isNegative())
402           Narrowing = true;
403       } else {
404         // Add a bit to the InitializerValue so we don't have to worry about
405         // signed vs. unsigned comparisons.
406         InitializerValue = InitializerValue.extend(
407           InitializerValue.getBitWidth() + 1);
408         // Convert the initializer to and from the target width and signed-ness.
409         llvm::APSInt ConvertedValue = InitializerValue;
410         ConvertedValue = ConvertedValue.trunc(ToWidth);
411         ConvertedValue.setIsSigned(ToSigned);
412         ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
413         ConvertedValue.setIsSigned(InitializerValue.isSigned());
414         // If the result is different, this was a narrowing conversion.
415         if (ConvertedValue != InitializerValue)
416           Narrowing = true;
417       }
418       if (Narrowing) {
419         ConstantType = Initializer->getType();
420         ConstantValue = APValue(InitializerValue);
421         return NK_Constant_Narrowing;
422       }
423     }
424     return NK_Not_Narrowing;
425   }
426 
427   default:
428     // Other kinds of conversions are not narrowings.
429     return NK_Not_Narrowing;
430   }
431 }
432 
433 /// dump - Print this standard conversion sequence to standard
434 /// error. Useful for debugging overloading issues.
435 void StandardConversionSequence::dump() const {
436   raw_ostream &OS = llvm::errs();
437   bool PrintedSomething = false;
438   if (First != ICK_Identity) {
439     OS << GetImplicitConversionName(First);
440     PrintedSomething = true;
441   }
442 
443   if (Second != ICK_Identity) {
444     if (PrintedSomething) {
445       OS << " -> ";
446     }
447     OS << GetImplicitConversionName(Second);
448 
449     if (CopyConstructor) {
450       OS << " (by copy constructor)";
451     } else if (DirectBinding) {
452       OS << " (direct reference binding)";
453     } else if (ReferenceBinding) {
454       OS << " (reference binding)";
455     }
456     PrintedSomething = true;
457   }
458 
459   if (Third != ICK_Identity) {
460     if (PrintedSomething) {
461       OS << " -> ";
462     }
463     OS << GetImplicitConversionName(Third);
464     PrintedSomething = true;
465   }
466 
467   if (!PrintedSomething) {
468     OS << "No conversions required";
469   }
470 }
471 
472 /// dump - Print this user-defined conversion sequence to standard
473 /// error. Useful for debugging overloading issues.
474 void UserDefinedConversionSequence::dump() const {
475   raw_ostream &OS = llvm::errs();
476   if (Before.First || Before.Second || Before.Third) {
477     Before.dump();
478     OS << " -> ";
479   }
480   if (ConversionFunction)
481     OS << '\'' << *ConversionFunction << '\'';
482   else
483     OS << "aggregate initialization";
484   if (After.First || After.Second || After.Third) {
485     OS << " -> ";
486     After.dump();
487   }
488 }
489 
490 /// dump - Print this implicit conversion sequence to standard
491 /// error. Useful for debugging overloading issues.
492 void ImplicitConversionSequence::dump() const {
493   raw_ostream &OS = llvm::errs();
494   if (isStdInitializerListElement())
495     OS << "Worst std::initializer_list element conversion: ";
496   switch (ConversionKind) {
497   case StandardConversion:
498     OS << "Standard conversion: ";
499     Standard.dump();
500     break;
501   case UserDefinedConversion:
502     OS << "User-defined conversion: ";
503     UserDefined.dump();
504     break;
505   case EllipsisConversion:
506     OS << "Ellipsis conversion";
507     break;
508   case AmbiguousConversion:
509     OS << "Ambiguous conversion";
510     break;
511   case BadConversion:
512     OS << "Bad conversion";
513     break;
514   }
515 
516   OS << "\n";
517 }
518 
519 void AmbiguousConversionSequence::construct() {
520   new (&conversions()) ConversionSet();
521 }
522 
523 void AmbiguousConversionSequence::destruct() {
524   conversions().~ConversionSet();
525 }
526 
527 void
528 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
529   FromTypePtr = O.FromTypePtr;
530   ToTypePtr = O.ToTypePtr;
531   new (&conversions()) ConversionSet(O.conversions());
532 }
533 
534 namespace {
535   // Structure used by DeductionFailureInfo to store
536   // template argument information.
537   struct DFIArguments {
538     TemplateArgument FirstArg;
539     TemplateArgument SecondArg;
540   };
541   // Structure used by DeductionFailureInfo to store
542   // template parameter and template argument information.
543   struct DFIParamWithArguments : DFIArguments {
544     TemplateParameter Param;
545   };
546   // Structure used by DeductionFailureInfo to store template argument
547   // information and the index of the problematic call argument.
548   struct DFIDeducedMismatchArgs : DFIArguments {
549     TemplateArgumentList *TemplateArgs;
550     unsigned CallArgIndex;
551   };
552 }
553 
554 /// \brief Convert from Sema's representation of template deduction information
555 /// to the form used in overload-candidate information.
556 DeductionFailureInfo
557 clang::MakeDeductionFailureInfo(ASTContext &Context,
558                                 Sema::TemplateDeductionResult TDK,
559                                 TemplateDeductionInfo &Info) {
560   DeductionFailureInfo Result;
561   Result.Result = static_cast<unsigned>(TDK);
562   Result.HasDiagnostic = false;
563   switch (TDK) {
564   case Sema::TDK_Success:
565   case Sema::TDK_Invalid:
566   case Sema::TDK_InstantiationDepth:
567   case Sema::TDK_TooManyArguments:
568   case Sema::TDK_TooFewArguments:
569   case Sema::TDK_MiscellaneousDeductionFailure:
570     Result.Data = nullptr;
571     break;
572 
573   case Sema::TDK_Incomplete:
574   case Sema::TDK_InvalidExplicitArguments:
575     Result.Data = Info.Param.getOpaqueValue();
576     break;
577 
578   case Sema::TDK_DeducedMismatch: {
579     // FIXME: Should allocate from normal heap so that we can free this later.
580     auto *Saved = new (Context) DFIDeducedMismatchArgs;
581     Saved->FirstArg = Info.FirstArg;
582     Saved->SecondArg = Info.SecondArg;
583     Saved->TemplateArgs = Info.take();
584     Saved->CallArgIndex = Info.CallArgIndex;
585     Result.Data = Saved;
586     break;
587   }
588 
589   case Sema::TDK_NonDeducedMismatch: {
590     // FIXME: Should allocate from normal heap so that we can free this later.
591     DFIArguments *Saved = new (Context) DFIArguments;
592     Saved->FirstArg = Info.FirstArg;
593     Saved->SecondArg = Info.SecondArg;
594     Result.Data = Saved;
595     break;
596   }
597 
598   case Sema::TDK_Inconsistent:
599   case Sema::TDK_Underqualified: {
600     // FIXME: Should allocate from normal heap so that we can free this later.
601     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
602     Saved->Param = Info.Param;
603     Saved->FirstArg = Info.FirstArg;
604     Saved->SecondArg = Info.SecondArg;
605     Result.Data = Saved;
606     break;
607   }
608 
609   case Sema::TDK_SubstitutionFailure:
610     Result.Data = Info.take();
611     if (Info.hasSFINAEDiagnostic()) {
612       PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
613           SourceLocation(), PartialDiagnostic::NullDiagnostic());
614       Info.takeSFINAEDiagnostic(*Diag);
615       Result.HasDiagnostic = true;
616     }
617     break;
618 
619   case Sema::TDK_FailedOverloadResolution:
620     Result.Data = Info.Expression;
621     break;
622   }
623 
624   return Result;
625 }
626 
627 void DeductionFailureInfo::Destroy() {
628   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
629   case Sema::TDK_Success:
630   case Sema::TDK_Invalid:
631   case Sema::TDK_InstantiationDepth:
632   case Sema::TDK_Incomplete:
633   case Sema::TDK_TooManyArguments:
634   case Sema::TDK_TooFewArguments:
635   case Sema::TDK_InvalidExplicitArguments:
636   case Sema::TDK_FailedOverloadResolution:
637     break;
638 
639   case Sema::TDK_Inconsistent:
640   case Sema::TDK_Underqualified:
641   case Sema::TDK_DeducedMismatch:
642   case Sema::TDK_NonDeducedMismatch:
643     // FIXME: Destroy the data?
644     Data = nullptr;
645     break;
646 
647   case Sema::TDK_SubstitutionFailure:
648     // FIXME: Destroy the template argument list?
649     Data = nullptr;
650     if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
651       Diag->~PartialDiagnosticAt();
652       HasDiagnostic = false;
653     }
654     break;
655 
656   // Unhandled
657   case Sema::TDK_MiscellaneousDeductionFailure:
658     break;
659   }
660 }
661 
662 PartialDiagnosticAt *DeductionFailureInfo::getSFINAEDiagnostic() {
663   if (HasDiagnostic)
664     return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
665   return nullptr;
666 }
667 
668 TemplateParameter DeductionFailureInfo::getTemplateParameter() {
669   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
670   case Sema::TDK_Success:
671   case Sema::TDK_Invalid:
672   case Sema::TDK_InstantiationDepth:
673   case Sema::TDK_TooManyArguments:
674   case Sema::TDK_TooFewArguments:
675   case Sema::TDK_SubstitutionFailure:
676   case Sema::TDK_DeducedMismatch:
677   case Sema::TDK_NonDeducedMismatch:
678   case Sema::TDK_FailedOverloadResolution:
679     return TemplateParameter();
680 
681   case Sema::TDK_Incomplete:
682   case Sema::TDK_InvalidExplicitArguments:
683     return TemplateParameter::getFromOpaqueValue(Data);
684 
685   case Sema::TDK_Inconsistent:
686   case Sema::TDK_Underqualified:
687     return static_cast<DFIParamWithArguments*>(Data)->Param;
688 
689   // Unhandled
690   case Sema::TDK_MiscellaneousDeductionFailure:
691     break;
692   }
693 
694   return TemplateParameter();
695 }
696 
697 TemplateArgumentList *DeductionFailureInfo::getTemplateArgumentList() {
698   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
699   case Sema::TDK_Success:
700   case Sema::TDK_Invalid:
701   case Sema::TDK_InstantiationDepth:
702   case Sema::TDK_TooManyArguments:
703   case Sema::TDK_TooFewArguments:
704   case Sema::TDK_Incomplete:
705   case Sema::TDK_InvalidExplicitArguments:
706   case Sema::TDK_Inconsistent:
707   case Sema::TDK_Underqualified:
708   case Sema::TDK_NonDeducedMismatch:
709   case Sema::TDK_FailedOverloadResolution:
710     return nullptr;
711 
712   case Sema::TDK_DeducedMismatch:
713     return static_cast<DFIDeducedMismatchArgs*>(Data)->TemplateArgs;
714 
715   case Sema::TDK_SubstitutionFailure:
716     return static_cast<TemplateArgumentList*>(Data);
717 
718   // Unhandled
719   case Sema::TDK_MiscellaneousDeductionFailure:
720     break;
721   }
722 
723   return nullptr;
724 }
725 
726 const TemplateArgument *DeductionFailureInfo::getFirstArg() {
727   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
728   case Sema::TDK_Success:
729   case Sema::TDK_Invalid:
730   case Sema::TDK_InstantiationDepth:
731   case Sema::TDK_Incomplete:
732   case Sema::TDK_TooManyArguments:
733   case Sema::TDK_TooFewArguments:
734   case Sema::TDK_InvalidExplicitArguments:
735   case Sema::TDK_SubstitutionFailure:
736   case Sema::TDK_FailedOverloadResolution:
737     return nullptr;
738 
739   case Sema::TDK_Inconsistent:
740   case Sema::TDK_Underqualified:
741   case Sema::TDK_DeducedMismatch:
742   case Sema::TDK_NonDeducedMismatch:
743     return &static_cast<DFIArguments*>(Data)->FirstArg;
744 
745   // Unhandled
746   case Sema::TDK_MiscellaneousDeductionFailure:
747     break;
748   }
749 
750   return nullptr;
751 }
752 
753 const TemplateArgument *DeductionFailureInfo::getSecondArg() {
754   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
755   case Sema::TDK_Success:
756   case Sema::TDK_Invalid:
757   case Sema::TDK_InstantiationDepth:
758   case Sema::TDK_Incomplete:
759   case Sema::TDK_TooManyArguments:
760   case Sema::TDK_TooFewArguments:
761   case Sema::TDK_InvalidExplicitArguments:
762   case Sema::TDK_SubstitutionFailure:
763   case Sema::TDK_FailedOverloadResolution:
764     return nullptr;
765 
766   case Sema::TDK_Inconsistent:
767   case Sema::TDK_Underqualified:
768   case Sema::TDK_DeducedMismatch:
769   case Sema::TDK_NonDeducedMismatch:
770     return &static_cast<DFIArguments*>(Data)->SecondArg;
771 
772   // Unhandled
773   case Sema::TDK_MiscellaneousDeductionFailure:
774     break;
775   }
776 
777   return nullptr;
778 }
779 
780 Expr *DeductionFailureInfo::getExpr() {
781   if (static_cast<Sema::TemplateDeductionResult>(Result) ==
782         Sema::TDK_FailedOverloadResolution)
783     return static_cast<Expr*>(Data);
784 
785   return nullptr;
786 }
787 
788 llvm::Optional<unsigned> DeductionFailureInfo::getCallArgIndex() {
789   if (static_cast<Sema::TemplateDeductionResult>(Result) ==
790         Sema::TDK_DeducedMismatch)
791     return static_cast<DFIDeducedMismatchArgs*>(Data)->CallArgIndex;
792 
793   return llvm::None;
794 }
795 
796 void OverloadCandidateSet::destroyCandidates() {
797   for (iterator i = begin(), e = end(); i != e; ++i) {
798     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
799       i->Conversions[ii].~ImplicitConversionSequence();
800     if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
801       i->DeductionFailure.Destroy();
802   }
803 }
804 
805 void OverloadCandidateSet::clear() {
806   destroyCandidates();
807   NumInlineSequences = 0;
808   Candidates.clear();
809   Functions.clear();
810 }
811 
812 namespace {
813   class UnbridgedCastsSet {
814     struct Entry {
815       Expr **Addr;
816       Expr *Saved;
817     };
818     SmallVector<Entry, 2> Entries;
819 
820   public:
821     void save(Sema &S, Expr *&E) {
822       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
823       Entry entry = { &E, E };
824       Entries.push_back(entry);
825       E = S.stripARCUnbridgedCast(E);
826     }
827 
828     void restore() {
829       for (SmallVectorImpl<Entry>::iterator
830              i = Entries.begin(), e = Entries.end(); i != e; ++i)
831         *i->Addr = i->Saved;
832     }
833   };
834 }
835 
836 /// checkPlaceholderForOverload - Do any interesting placeholder-like
837 /// preprocessing on the given expression.
838 ///
839 /// \param unbridgedCasts a collection to which to add unbridged casts;
840 ///   without this, they will be immediately diagnosed as errors
841 ///
842 /// Return true on unrecoverable error.
843 static bool
844 checkPlaceholderForOverload(Sema &S, Expr *&E,
845                             UnbridgedCastsSet *unbridgedCasts = nullptr) {
846   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
847     // We can't handle overloaded expressions here because overload
848     // resolution might reasonably tweak them.
849     if (placeholder->getKind() == BuiltinType::Overload) return false;
850 
851     // If the context potentially accepts unbridged ARC casts, strip
852     // the unbridged cast and add it to the collection for later restoration.
853     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
854         unbridgedCasts) {
855       unbridgedCasts->save(S, E);
856       return false;
857     }
858 
859     // Go ahead and check everything else.
860     ExprResult result = S.CheckPlaceholderExpr(E);
861     if (result.isInvalid())
862       return true;
863 
864     E = result.get();
865     return false;
866   }
867 
868   // Nothing to do.
869   return false;
870 }
871 
872 /// checkArgPlaceholdersForOverload - Check a set of call operands for
873 /// placeholders.
874 static bool checkArgPlaceholdersForOverload(Sema &S,
875                                             MultiExprArg Args,
876                                             UnbridgedCastsSet &unbridged) {
877   for (unsigned i = 0, e = Args.size(); i != e; ++i)
878     if (checkPlaceholderForOverload(S, Args[i], &unbridged))
879       return true;
880 
881   return false;
882 }
883 
884 // IsOverload - Determine whether the given New declaration is an
885 // overload of the declarations in Old. This routine returns false if
886 // New and Old cannot be overloaded, e.g., if New has the same
887 // signature as some function in Old (C++ 1.3.10) or if the Old
888 // declarations aren't functions (or function templates) at all. When
889 // it does return false, MatchedDecl will point to the decl that New
890 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
891 // top of the underlying declaration.
892 //
893 // Example: Given the following input:
894 //
895 //   void f(int, float); // #1
896 //   void f(int, int); // #2
897 //   int f(int, int); // #3
898 //
899 // When we process #1, there is no previous declaration of "f",
900 // so IsOverload will not be used.
901 //
902 // When we process #2, Old contains only the FunctionDecl for #1.  By
903 // comparing the parameter types, we see that #1 and #2 are overloaded
904 // (since they have different signatures), so this routine returns
905 // false; MatchedDecl is unchanged.
906 //
907 // When we process #3, Old is an overload set containing #1 and #2. We
908 // compare the signatures of #3 to #1 (they're overloaded, so we do
909 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
910 // identical (return types of functions are not part of the
911 // signature), IsOverload returns false and MatchedDecl will be set to
912 // point to the FunctionDecl for #2.
913 //
914 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
915 // into a class by a using declaration.  The rules for whether to hide
916 // shadow declarations ignore some properties which otherwise figure
917 // into a function template's signature.
918 Sema::OverloadKind
919 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
920                     NamedDecl *&Match, bool NewIsUsingDecl) {
921   for (LookupResult::iterator I = Old.begin(), E = Old.end();
922          I != E; ++I) {
923     NamedDecl *OldD = *I;
924 
925     bool OldIsUsingDecl = false;
926     if (isa<UsingShadowDecl>(OldD)) {
927       OldIsUsingDecl = true;
928 
929       // We can always introduce two using declarations into the same
930       // context, even if they have identical signatures.
931       if (NewIsUsingDecl) continue;
932 
933       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
934     }
935 
936     // A using-declaration does not conflict with another declaration
937     // if one of them is hidden.
938     if ((OldIsUsingDecl || NewIsUsingDecl) && !isVisible(*I))
939       continue;
940 
941     // If either declaration was introduced by a using declaration,
942     // we'll need to use slightly different rules for matching.
943     // Essentially, these rules are the normal rules, except that
944     // function templates hide function templates with different
945     // return types or template parameter lists.
946     bool UseMemberUsingDeclRules =
947       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
948       !New->getFriendObjectKind();
949 
950     if (FunctionDecl *OldF = OldD->getAsFunction()) {
951       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
952         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
953           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
954           continue;
955         }
956 
957         if (!isa<FunctionTemplateDecl>(OldD) &&
958             !shouldLinkPossiblyHiddenDecl(*I, New))
959           continue;
960 
961         Match = *I;
962         return Ovl_Match;
963       }
964     } else if (isa<UsingDecl>(OldD)) {
965       // We can overload with these, which can show up when doing
966       // redeclaration checks for UsingDecls.
967       assert(Old.getLookupKind() == LookupUsingDeclName);
968     } else if (isa<TagDecl>(OldD)) {
969       // We can always overload with tags by hiding them.
970     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
971       // Optimistically assume that an unresolved using decl will
972       // overload; if it doesn't, we'll have to diagnose during
973       // template instantiation.
974     } else {
975       // (C++ 13p1):
976       //   Only function declarations can be overloaded; object and type
977       //   declarations cannot be overloaded.
978       Match = *I;
979       return Ovl_NonFunction;
980     }
981   }
982 
983   return Ovl_Overload;
984 }
985 
986 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
987                       bool UseUsingDeclRules) {
988   // C++ [basic.start.main]p2: This function shall not be overloaded.
989   if (New->isMain())
990     return false;
991 
992   // MSVCRT user defined entry points cannot be overloaded.
993   if (New->isMSVCRTEntryPoint())
994     return false;
995 
996   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
997   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
998 
999   // C++ [temp.fct]p2:
1000   //   A function template can be overloaded with other function templates
1001   //   and with normal (non-template) functions.
1002   if ((OldTemplate == nullptr) != (NewTemplate == nullptr))
1003     return true;
1004 
1005   // Is the function New an overload of the function Old?
1006   QualType OldQType = Context.getCanonicalType(Old->getType());
1007   QualType NewQType = Context.getCanonicalType(New->getType());
1008 
1009   // Compare the signatures (C++ 1.3.10) of the two functions to
1010   // determine whether they are overloads. If we find any mismatch
1011   // in the signature, they are overloads.
1012 
1013   // If either of these functions is a K&R-style function (no
1014   // prototype), then we consider them to have matching signatures.
1015   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
1016       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
1017     return false;
1018 
1019   const FunctionProtoType *OldType = cast<FunctionProtoType>(OldQType);
1020   const FunctionProtoType *NewType = cast<FunctionProtoType>(NewQType);
1021 
1022   // The signature of a function includes the types of its
1023   // parameters (C++ 1.3.10), which includes the presence or absence
1024   // of the ellipsis; see C++ DR 357).
1025   if (OldQType != NewQType &&
1026       (OldType->getNumParams() != NewType->getNumParams() ||
1027        OldType->isVariadic() != NewType->isVariadic() ||
1028        !FunctionParamTypesAreEqual(OldType, NewType)))
1029     return true;
1030 
1031   // C++ [temp.over.link]p4:
1032   //   The signature of a function template consists of its function
1033   //   signature, its return type and its template parameter list. The names
1034   //   of the template parameters are significant only for establishing the
1035   //   relationship between the template parameters and the rest of the
1036   //   signature.
1037   //
1038   // We check the return type and template parameter lists for function
1039   // templates first; the remaining checks follow.
1040   //
1041   // However, we don't consider either of these when deciding whether
1042   // a member introduced by a shadow declaration is hidden.
1043   if (!UseUsingDeclRules && NewTemplate &&
1044       (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
1045                                        OldTemplate->getTemplateParameters(),
1046                                        false, TPL_TemplateMatch) ||
1047        OldType->getReturnType() != NewType->getReturnType()))
1048     return true;
1049 
1050   // If the function is a class member, its signature includes the
1051   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
1052   //
1053   // As part of this, also check whether one of the member functions
1054   // is static, in which case they are not overloads (C++
1055   // 13.1p2). While not part of the definition of the signature,
1056   // this check is important to determine whether these functions
1057   // can be overloaded.
1058   CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
1059   CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
1060   if (OldMethod && NewMethod &&
1061       !OldMethod->isStatic() && !NewMethod->isStatic()) {
1062     if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
1063       if (!UseUsingDeclRules &&
1064           (OldMethod->getRefQualifier() == RQ_None ||
1065            NewMethod->getRefQualifier() == RQ_None)) {
1066         // C++0x [over.load]p2:
1067         //   - Member function declarations with the same name and the same
1068         //     parameter-type-list as well as member function template
1069         //     declarations with the same name, the same parameter-type-list, and
1070         //     the same template parameter lists cannot be overloaded if any of
1071         //     them, but not all, have a ref-qualifier (8.3.5).
1072         Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1073           << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1074         Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1075       }
1076       return true;
1077     }
1078 
1079     // We may not have applied the implicit const for a constexpr member
1080     // function yet (because we haven't yet resolved whether this is a static
1081     // or non-static member function). Add it now, on the assumption that this
1082     // is a redeclaration of OldMethod.
1083     unsigned OldQuals = OldMethod->getTypeQualifiers();
1084     unsigned NewQuals = NewMethod->getTypeQualifiers();
1085     if (!getLangOpts().CPlusPlus14 && NewMethod->isConstexpr() &&
1086         !isa<CXXConstructorDecl>(NewMethod))
1087       NewQuals |= Qualifiers::Const;
1088 
1089     // We do not allow overloading based off of '__restrict'.
1090     OldQuals &= ~Qualifiers::Restrict;
1091     NewQuals &= ~Qualifiers::Restrict;
1092     if (OldQuals != NewQuals)
1093       return true;
1094   }
1095 
1096   // Though pass_object_size is placed on parameters and takes an argument, we
1097   // consider it to be a function-level modifier for the sake of function
1098   // identity. Either the function has one or more parameters with
1099   // pass_object_size or it doesn't.
1100   if (functionHasPassObjectSizeParams(New) !=
1101       functionHasPassObjectSizeParams(Old))
1102     return true;
1103 
1104   // enable_if attributes are an order-sensitive part of the signature.
1105   for (specific_attr_iterator<EnableIfAttr>
1106          NewI = New->specific_attr_begin<EnableIfAttr>(),
1107          NewE = New->specific_attr_end<EnableIfAttr>(),
1108          OldI = Old->specific_attr_begin<EnableIfAttr>(),
1109          OldE = Old->specific_attr_end<EnableIfAttr>();
1110        NewI != NewE || OldI != OldE; ++NewI, ++OldI) {
1111     if (NewI == NewE || OldI == OldE)
1112       return true;
1113     llvm::FoldingSetNodeID NewID, OldID;
1114     NewI->getCond()->Profile(NewID, Context, true);
1115     OldI->getCond()->Profile(OldID, Context, true);
1116     if (NewID != OldID)
1117       return true;
1118   }
1119 
1120   if (getLangOpts().CUDA && getLangOpts().CUDATargetOverloads) {
1121     CUDAFunctionTarget NewTarget = IdentifyCUDATarget(New),
1122                        OldTarget = IdentifyCUDATarget(Old);
1123     if (NewTarget == CFT_InvalidTarget || NewTarget == CFT_Global)
1124       return false;
1125 
1126     assert((OldTarget != CFT_InvalidTarget) && "Unexpected invalid target.");
1127 
1128     // Don't allow mixing of HD with other kinds. This guarantees that
1129     // we have only one viable function with this signature on any
1130     // side of CUDA compilation .
1131     if ((NewTarget == CFT_HostDevice) || (OldTarget == CFT_HostDevice))
1132       return false;
1133 
1134     // Allow overloading of functions with same signature, but
1135     // different CUDA target attributes.
1136     return NewTarget != OldTarget;
1137   }
1138 
1139   // The signatures match; this is not an overload.
1140   return false;
1141 }
1142 
1143 /// \brief Checks availability of the function depending on the current
1144 /// function context. Inside an unavailable function, unavailability is ignored.
1145 ///
1146 /// \returns true if \arg FD is unavailable and current context is inside
1147 /// an available function, false otherwise.
1148 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1149   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1150 }
1151 
1152 /// \brief Tries a user-defined conversion from From to ToType.
1153 ///
1154 /// Produces an implicit conversion sequence for when a standard conversion
1155 /// is not an option. See TryImplicitConversion for more information.
1156 static ImplicitConversionSequence
1157 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1158                          bool SuppressUserConversions,
1159                          bool AllowExplicit,
1160                          bool InOverloadResolution,
1161                          bool CStyle,
1162                          bool AllowObjCWritebackConversion,
1163                          bool AllowObjCConversionOnExplicit) {
1164   ImplicitConversionSequence ICS;
1165 
1166   if (SuppressUserConversions) {
1167     // We're not in the case above, so there is no conversion that
1168     // we can perform.
1169     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1170     return ICS;
1171   }
1172 
1173   // Attempt user-defined conversion.
1174   OverloadCandidateSet Conversions(From->getExprLoc(),
1175                                    OverloadCandidateSet::CSK_Normal);
1176   switch (IsUserDefinedConversion(S, From, ToType, ICS.UserDefined,
1177                                   Conversions, AllowExplicit,
1178                                   AllowObjCConversionOnExplicit)) {
1179   case OR_Success:
1180   case OR_Deleted:
1181     ICS.setUserDefined();
1182     ICS.UserDefined.Before.setAsIdentityConversion();
1183     // C++ [over.ics.user]p4:
1184     //   A conversion of an expression of class type to the same class
1185     //   type is given Exact Match rank, and a conversion of an
1186     //   expression of class type to a base class of that type is
1187     //   given Conversion rank, in spite of the fact that a copy
1188     //   constructor (i.e., a user-defined conversion function) is
1189     //   called for those cases.
1190     if (CXXConstructorDecl *Constructor
1191           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1192       QualType FromCanon
1193         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1194       QualType ToCanon
1195         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1196       if (Constructor->isCopyConstructor() &&
1197           (FromCanon == ToCanon ||
1198            S.IsDerivedFrom(From->getLocStart(), FromCanon, ToCanon))) {
1199         // Turn this into a "standard" conversion sequence, so that it
1200         // gets ranked with standard conversion sequences.
1201         ICS.setStandard();
1202         ICS.Standard.setAsIdentityConversion();
1203         ICS.Standard.setFromType(From->getType());
1204         ICS.Standard.setAllToTypes(ToType);
1205         ICS.Standard.CopyConstructor = Constructor;
1206         if (ToCanon != FromCanon)
1207           ICS.Standard.Second = ICK_Derived_To_Base;
1208       }
1209     }
1210     break;
1211 
1212   case OR_Ambiguous:
1213     ICS.setAmbiguous();
1214     ICS.Ambiguous.setFromType(From->getType());
1215     ICS.Ambiguous.setToType(ToType);
1216     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1217          Cand != Conversions.end(); ++Cand)
1218       if (Cand->Viable)
1219         ICS.Ambiguous.addConversion(Cand->Function);
1220     break;
1221 
1222     // Fall through.
1223   case OR_No_Viable_Function:
1224     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1225     break;
1226   }
1227 
1228   return ICS;
1229 }
1230 
1231 /// TryImplicitConversion - Attempt to perform an implicit conversion
1232 /// from the given expression (Expr) to the given type (ToType). This
1233 /// function returns an implicit conversion sequence that can be used
1234 /// to perform the initialization. Given
1235 ///
1236 ///   void f(float f);
1237 ///   void g(int i) { f(i); }
1238 ///
1239 /// this routine would produce an implicit conversion sequence to
1240 /// describe the initialization of f from i, which will be a standard
1241 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1242 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1243 //
1244 /// Note that this routine only determines how the conversion can be
1245 /// performed; it does not actually perform the conversion. As such,
1246 /// it will not produce any diagnostics if no conversion is available,
1247 /// but will instead return an implicit conversion sequence of kind
1248 /// "BadConversion".
1249 ///
1250 /// If @p SuppressUserConversions, then user-defined conversions are
1251 /// not permitted.
1252 /// If @p AllowExplicit, then explicit user-defined conversions are
1253 /// permitted.
1254 ///
1255 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1256 /// writeback conversion, which allows __autoreleasing id* parameters to
1257 /// be initialized with __strong id* or __weak id* arguments.
1258 static ImplicitConversionSequence
1259 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1260                       bool SuppressUserConversions,
1261                       bool AllowExplicit,
1262                       bool InOverloadResolution,
1263                       bool CStyle,
1264                       bool AllowObjCWritebackConversion,
1265                       bool AllowObjCConversionOnExplicit) {
1266   ImplicitConversionSequence ICS;
1267   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1268                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1269     ICS.setStandard();
1270     return ICS;
1271   }
1272 
1273   if (!S.getLangOpts().CPlusPlus) {
1274     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1275     return ICS;
1276   }
1277 
1278   // C++ [over.ics.user]p4:
1279   //   A conversion of an expression of class type to the same class
1280   //   type is given Exact Match rank, and a conversion of an
1281   //   expression of class type to a base class of that type is
1282   //   given Conversion rank, in spite of the fact that a copy/move
1283   //   constructor (i.e., a user-defined conversion function) is
1284   //   called for those cases.
1285   QualType FromType = From->getType();
1286   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1287       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1288        S.IsDerivedFrom(From->getLocStart(), FromType, ToType))) {
1289     ICS.setStandard();
1290     ICS.Standard.setAsIdentityConversion();
1291     ICS.Standard.setFromType(FromType);
1292     ICS.Standard.setAllToTypes(ToType);
1293 
1294     // We don't actually check at this point whether there is a valid
1295     // copy/move constructor, since overloading just assumes that it
1296     // exists. When we actually perform initialization, we'll find the
1297     // appropriate constructor to copy the returned object, if needed.
1298     ICS.Standard.CopyConstructor = nullptr;
1299 
1300     // Determine whether this is considered a derived-to-base conversion.
1301     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1302       ICS.Standard.Second = ICK_Derived_To_Base;
1303 
1304     return ICS;
1305   }
1306 
1307   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1308                                   AllowExplicit, InOverloadResolution, CStyle,
1309                                   AllowObjCWritebackConversion,
1310                                   AllowObjCConversionOnExplicit);
1311 }
1312 
1313 ImplicitConversionSequence
1314 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1315                             bool SuppressUserConversions,
1316                             bool AllowExplicit,
1317                             bool InOverloadResolution,
1318                             bool CStyle,
1319                             bool AllowObjCWritebackConversion) {
1320   return ::TryImplicitConversion(*this, From, ToType,
1321                                  SuppressUserConversions, AllowExplicit,
1322                                  InOverloadResolution, CStyle,
1323                                  AllowObjCWritebackConversion,
1324                                  /*AllowObjCConversionOnExplicit=*/false);
1325 }
1326 
1327 /// PerformImplicitConversion - Perform an implicit conversion of the
1328 /// expression From to the type ToType. Returns the
1329 /// converted expression. Flavor is the kind of conversion we're
1330 /// performing, used in the error message. If @p AllowExplicit,
1331 /// explicit user-defined conversions are permitted.
1332 ExprResult
1333 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1334                                 AssignmentAction Action, bool AllowExplicit) {
1335   ImplicitConversionSequence ICS;
1336   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1337 }
1338 
1339 ExprResult
1340 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1341                                 AssignmentAction Action, bool AllowExplicit,
1342                                 ImplicitConversionSequence& ICS) {
1343   if (checkPlaceholderForOverload(*this, From))
1344     return ExprError();
1345 
1346   // Objective-C ARC: Determine whether we will allow the writeback conversion.
1347   bool AllowObjCWritebackConversion
1348     = getLangOpts().ObjCAutoRefCount &&
1349       (Action == AA_Passing || Action == AA_Sending);
1350   if (getLangOpts().ObjC1)
1351     CheckObjCBridgeRelatedConversions(From->getLocStart(),
1352                                       ToType, From->getType(), From);
1353   ICS = ::TryImplicitConversion(*this, From, ToType,
1354                                 /*SuppressUserConversions=*/false,
1355                                 AllowExplicit,
1356                                 /*InOverloadResolution=*/false,
1357                                 /*CStyle=*/false,
1358                                 AllowObjCWritebackConversion,
1359                                 /*AllowObjCConversionOnExplicit=*/false);
1360   return PerformImplicitConversion(From, ToType, ICS, Action);
1361 }
1362 
1363 /// \brief Determine whether the conversion from FromType to ToType is a valid
1364 /// conversion that strips "noreturn" off the nested function type.
1365 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1366                                 QualType &ResultTy) {
1367   if (Context.hasSameUnqualifiedType(FromType, ToType))
1368     return false;
1369 
1370   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1371   // where F adds one of the following at most once:
1372   //   - a pointer
1373   //   - a member pointer
1374   //   - a block pointer
1375   CanQualType CanTo = Context.getCanonicalType(ToType);
1376   CanQualType CanFrom = Context.getCanonicalType(FromType);
1377   Type::TypeClass TyClass = CanTo->getTypeClass();
1378   if (TyClass != CanFrom->getTypeClass()) return false;
1379   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1380     if (TyClass == Type::Pointer) {
1381       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1382       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1383     } else if (TyClass == Type::BlockPointer) {
1384       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1385       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1386     } else if (TyClass == Type::MemberPointer) {
1387       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1388       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1389     } else {
1390       return false;
1391     }
1392 
1393     TyClass = CanTo->getTypeClass();
1394     if (TyClass != CanFrom->getTypeClass()) return false;
1395     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1396       return false;
1397   }
1398 
1399   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1400   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1401   if (!EInfo.getNoReturn()) return false;
1402 
1403   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1404   assert(QualType(FromFn, 0).isCanonical());
1405   if (QualType(FromFn, 0) != CanTo) return false;
1406 
1407   ResultTy = ToType;
1408   return true;
1409 }
1410 
1411 /// \brief Determine whether the conversion from FromType to ToType is a valid
1412 /// vector conversion.
1413 ///
1414 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1415 /// conversion.
1416 static bool IsVectorConversion(Sema &S, QualType FromType,
1417                                QualType ToType, ImplicitConversionKind &ICK) {
1418   // We need at least one of these types to be a vector type to have a vector
1419   // conversion.
1420   if (!ToType->isVectorType() && !FromType->isVectorType())
1421     return false;
1422 
1423   // Identical types require no conversions.
1424   if (S.Context.hasSameUnqualifiedType(FromType, ToType))
1425     return false;
1426 
1427   // There are no conversions between extended vector types, only identity.
1428   if (ToType->isExtVectorType()) {
1429     // There are no conversions between extended vector types other than the
1430     // identity conversion.
1431     if (FromType->isExtVectorType())
1432       return false;
1433 
1434     // Vector splat from any arithmetic type to a vector.
1435     if (FromType->isArithmeticType()) {
1436       ICK = ICK_Vector_Splat;
1437       return true;
1438     }
1439   }
1440 
1441   // We can perform the conversion between vector types in the following cases:
1442   // 1)vector types are equivalent AltiVec and GCC vector types
1443   // 2)lax vector conversions are permitted and the vector types are of the
1444   //   same size
1445   if (ToType->isVectorType() && FromType->isVectorType()) {
1446     if (S.Context.areCompatibleVectorTypes(FromType, ToType) ||
1447         S.isLaxVectorConversion(FromType, ToType)) {
1448       ICK = ICK_Vector_Conversion;
1449       return true;
1450     }
1451   }
1452 
1453   return false;
1454 }
1455 
1456 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1457                                 bool InOverloadResolution,
1458                                 StandardConversionSequence &SCS,
1459                                 bool CStyle);
1460 
1461 /// IsStandardConversion - Determines whether there is a standard
1462 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1463 /// expression From to the type ToType. Standard conversion sequences
1464 /// only consider non-class types; for conversions that involve class
1465 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1466 /// contain the standard conversion sequence required to perform this
1467 /// conversion and this routine will return true. Otherwise, this
1468 /// routine will return false and the value of SCS is unspecified.
1469 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1470                                  bool InOverloadResolution,
1471                                  StandardConversionSequence &SCS,
1472                                  bool CStyle,
1473                                  bool AllowObjCWritebackConversion) {
1474   QualType FromType = From->getType();
1475 
1476   // Standard conversions (C++ [conv])
1477   SCS.setAsIdentityConversion();
1478   SCS.IncompatibleObjC = false;
1479   SCS.setFromType(FromType);
1480   SCS.CopyConstructor = nullptr;
1481 
1482   // There are no standard conversions for class types in C++, so
1483   // abort early. When overloading in C, however, we do permit them.
1484   if (S.getLangOpts().CPlusPlus &&
1485       (FromType->isRecordType() || ToType->isRecordType()))
1486     return false;
1487 
1488   // The first conversion can be an lvalue-to-rvalue conversion,
1489   // array-to-pointer conversion, or function-to-pointer conversion
1490   // (C++ 4p1).
1491 
1492   if (FromType == S.Context.OverloadTy) {
1493     DeclAccessPair AccessPair;
1494     if (FunctionDecl *Fn
1495           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1496                                                  AccessPair)) {
1497       // We were able to resolve the address of the overloaded function,
1498       // so we can convert to the type of that function.
1499       FromType = Fn->getType();
1500       SCS.setFromType(FromType);
1501 
1502       // we can sometimes resolve &foo<int> regardless of ToType, so check
1503       // if the type matches (identity) or we are converting to bool
1504       if (!S.Context.hasSameUnqualifiedType(
1505                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1506         QualType resultTy;
1507         // if the function type matches except for [[noreturn]], it's ok
1508         if (!S.IsNoReturnConversion(FromType,
1509               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1510           // otherwise, only a boolean conversion is standard
1511           if (!ToType->isBooleanType())
1512             return false;
1513       }
1514 
1515       // Check if the "from" expression is taking the address of an overloaded
1516       // function and recompute the FromType accordingly. Take advantage of the
1517       // fact that non-static member functions *must* have such an address-of
1518       // expression.
1519       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1520       if (Method && !Method->isStatic()) {
1521         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1522                "Non-unary operator on non-static member address");
1523         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1524                == UO_AddrOf &&
1525                "Non-address-of operator on non-static member address");
1526         const Type *ClassType
1527           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1528         FromType = S.Context.getMemberPointerType(FromType, ClassType);
1529       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1530         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1531                UO_AddrOf &&
1532                "Non-address-of operator for overloaded function expression");
1533         FromType = S.Context.getPointerType(FromType);
1534       }
1535 
1536       // Check that we've computed the proper type after overload resolution.
1537       assert(S.Context.hasSameType(
1538         FromType,
1539         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1540     } else {
1541       return false;
1542     }
1543   }
1544   // Lvalue-to-rvalue conversion (C++11 4.1):
1545   //   A glvalue (3.10) of a non-function, non-array type T can
1546   //   be converted to a prvalue.
1547   bool argIsLValue = From->isGLValue();
1548   if (argIsLValue &&
1549       !FromType->isFunctionType() && !FromType->isArrayType() &&
1550       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1551     SCS.First = ICK_Lvalue_To_Rvalue;
1552 
1553     // C11 6.3.2.1p2:
1554     //   ... if the lvalue has atomic type, the value has the non-atomic version
1555     //   of the type of the lvalue ...
1556     if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1557       FromType = Atomic->getValueType();
1558 
1559     // If T is a non-class type, the type of the rvalue is the
1560     // cv-unqualified version of T. Otherwise, the type of the rvalue
1561     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1562     // just strip the qualifiers because they don't matter.
1563     FromType = FromType.getUnqualifiedType();
1564   } else if (FromType->isArrayType()) {
1565     // Array-to-pointer conversion (C++ 4.2)
1566     SCS.First = ICK_Array_To_Pointer;
1567 
1568     // An lvalue or rvalue of type "array of N T" or "array of unknown
1569     // bound of T" can be converted to an rvalue of type "pointer to
1570     // T" (C++ 4.2p1).
1571     FromType = S.Context.getArrayDecayedType(FromType);
1572 
1573     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1574       // This conversion is deprecated in C++03 (D.4)
1575       SCS.DeprecatedStringLiteralToCharPtr = true;
1576 
1577       // For the purpose of ranking in overload resolution
1578       // (13.3.3.1.1), this conversion is considered an
1579       // array-to-pointer conversion followed by a qualification
1580       // conversion (4.4). (C++ 4.2p2)
1581       SCS.Second = ICK_Identity;
1582       SCS.Third = ICK_Qualification;
1583       SCS.QualificationIncludesObjCLifetime = false;
1584       SCS.setAllToTypes(FromType);
1585       return true;
1586     }
1587   } else if (FromType->isFunctionType() && argIsLValue) {
1588     // Function-to-pointer conversion (C++ 4.3).
1589     SCS.First = ICK_Function_To_Pointer;
1590 
1591     if (auto *DRE = dyn_cast<DeclRefExpr>(From->IgnoreParenCasts()))
1592       if (auto *FD = dyn_cast<FunctionDecl>(DRE->getDecl()))
1593         if (!S.checkAddressOfFunctionIsAvailable(FD))
1594           return false;
1595 
1596     // An lvalue of function type T can be converted to an rvalue of
1597     // type "pointer to T." The result is a pointer to the
1598     // function. (C++ 4.3p1).
1599     FromType = S.Context.getPointerType(FromType);
1600   } else {
1601     // We don't require any conversions for the first step.
1602     SCS.First = ICK_Identity;
1603   }
1604   SCS.setToType(0, FromType);
1605 
1606   // The second conversion can be an integral promotion, floating
1607   // point promotion, integral conversion, floating point conversion,
1608   // floating-integral conversion, pointer conversion,
1609   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1610   // For overloading in C, this can also be a "compatible-type"
1611   // conversion.
1612   bool IncompatibleObjC = false;
1613   ImplicitConversionKind SecondICK = ICK_Identity;
1614   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1615     // The unqualified versions of the types are the same: there's no
1616     // conversion to do.
1617     SCS.Second = ICK_Identity;
1618   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1619     // Integral promotion (C++ 4.5).
1620     SCS.Second = ICK_Integral_Promotion;
1621     FromType = ToType.getUnqualifiedType();
1622   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1623     // Floating point promotion (C++ 4.6).
1624     SCS.Second = ICK_Floating_Promotion;
1625     FromType = ToType.getUnqualifiedType();
1626   } else if (S.IsComplexPromotion(FromType, ToType)) {
1627     // Complex promotion (Clang extension)
1628     SCS.Second = ICK_Complex_Promotion;
1629     FromType = ToType.getUnqualifiedType();
1630   } else if (ToType->isBooleanType() &&
1631              (FromType->isArithmeticType() ||
1632               FromType->isAnyPointerType() ||
1633               FromType->isBlockPointerType() ||
1634               FromType->isMemberPointerType() ||
1635               FromType->isNullPtrType())) {
1636     // Boolean conversions (C++ 4.12).
1637     SCS.Second = ICK_Boolean_Conversion;
1638     FromType = S.Context.BoolTy;
1639   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1640              ToType->isIntegralType(S.Context)) {
1641     // Integral conversions (C++ 4.7).
1642     SCS.Second = ICK_Integral_Conversion;
1643     FromType = ToType.getUnqualifiedType();
1644   } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) {
1645     // Complex conversions (C99 6.3.1.6)
1646     SCS.Second = ICK_Complex_Conversion;
1647     FromType = ToType.getUnqualifiedType();
1648   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1649              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1650     // Complex-real conversions (C99 6.3.1.7)
1651     SCS.Second = ICK_Complex_Real;
1652     FromType = ToType.getUnqualifiedType();
1653   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1654     // Floating point conversions (C++ 4.8).
1655     SCS.Second = ICK_Floating_Conversion;
1656     FromType = ToType.getUnqualifiedType();
1657   } else if ((FromType->isRealFloatingType() &&
1658               ToType->isIntegralType(S.Context)) ||
1659              (FromType->isIntegralOrUnscopedEnumerationType() &&
1660               ToType->isRealFloatingType())) {
1661     // Floating-integral conversions (C++ 4.9).
1662     SCS.Second = ICK_Floating_Integral;
1663     FromType = ToType.getUnqualifiedType();
1664   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1665     SCS.Second = ICK_Block_Pointer_Conversion;
1666   } else if (AllowObjCWritebackConversion &&
1667              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1668     SCS.Second = ICK_Writeback_Conversion;
1669   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1670                                    FromType, IncompatibleObjC)) {
1671     // Pointer conversions (C++ 4.10).
1672     SCS.Second = ICK_Pointer_Conversion;
1673     SCS.IncompatibleObjC = IncompatibleObjC;
1674     FromType = FromType.getUnqualifiedType();
1675   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1676                                          InOverloadResolution, FromType)) {
1677     // Pointer to member conversions (4.11).
1678     SCS.Second = ICK_Pointer_Member;
1679   } else if (IsVectorConversion(S, FromType, ToType, SecondICK)) {
1680     SCS.Second = SecondICK;
1681     FromType = ToType.getUnqualifiedType();
1682   } else if (!S.getLangOpts().CPlusPlus &&
1683              S.Context.typesAreCompatible(ToType, FromType)) {
1684     // Compatible conversions (Clang extension for C function overloading)
1685     SCS.Second = ICK_Compatible_Conversion;
1686     FromType = ToType.getUnqualifiedType();
1687   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1688     // Treat a conversion that strips "noreturn" as an identity conversion.
1689     SCS.Second = ICK_NoReturn_Adjustment;
1690   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1691                                              InOverloadResolution,
1692                                              SCS, CStyle)) {
1693     SCS.Second = ICK_TransparentUnionConversion;
1694     FromType = ToType;
1695   } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1696                                  CStyle)) {
1697     // tryAtomicConversion has updated the standard conversion sequence
1698     // appropriately.
1699     return true;
1700   } else if (ToType->isEventT() &&
1701              From->isIntegerConstantExpr(S.getASTContext()) &&
1702              From->EvaluateKnownConstInt(S.getASTContext()) == 0) {
1703     SCS.Second = ICK_Zero_Event_Conversion;
1704     FromType = ToType;
1705   } else {
1706     // No second conversion required.
1707     SCS.Second = ICK_Identity;
1708   }
1709   SCS.setToType(1, FromType);
1710 
1711   QualType CanonFrom;
1712   QualType CanonTo;
1713   // The third conversion can be a qualification conversion (C++ 4p1).
1714   bool ObjCLifetimeConversion;
1715   if (S.IsQualificationConversion(FromType, ToType, CStyle,
1716                                   ObjCLifetimeConversion)) {
1717     SCS.Third = ICK_Qualification;
1718     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1719     FromType = ToType;
1720     CanonFrom = S.Context.getCanonicalType(FromType);
1721     CanonTo = S.Context.getCanonicalType(ToType);
1722   } else {
1723     // No conversion required
1724     SCS.Third = ICK_Identity;
1725 
1726     // C++ [over.best.ics]p6:
1727     //   [...] Any difference in top-level cv-qualification is
1728     //   subsumed by the initialization itself and does not constitute
1729     //   a conversion. [...]
1730     CanonFrom = S.Context.getCanonicalType(FromType);
1731     CanonTo = S.Context.getCanonicalType(ToType);
1732     if (CanonFrom.getLocalUnqualifiedType()
1733                                        == CanonTo.getLocalUnqualifiedType() &&
1734         CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
1735       FromType = ToType;
1736       CanonFrom = CanonTo;
1737     }
1738   }
1739   SCS.setToType(2, FromType);
1740 
1741   if (CanonFrom == CanonTo)
1742     return true;
1743 
1744   // If we have not converted the argument type to the parameter type,
1745   // this is a bad conversion sequence, unless we're resolving an overload in C.
1746   if (S.getLangOpts().CPlusPlus || !InOverloadResolution)
1747     return false;
1748 
1749   ExprResult ER = ExprResult{From};
1750   auto Conv = S.CheckSingleAssignmentConstraints(ToType, ER,
1751                                                  /*Diagnose=*/false,
1752                                                  /*DiagnoseCFAudited=*/false,
1753                                                  /*ConvertRHS=*/false);
1754   if (Conv != Sema::Compatible)
1755     return false;
1756 
1757   SCS.setAllToTypes(ToType);
1758   // We need to set all three because we want this conversion to rank terribly,
1759   // and we don't know what conversions it may overlap with.
1760   SCS.First = ICK_C_Only_Conversion;
1761   SCS.Second = ICK_C_Only_Conversion;
1762   SCS.Third = ICK_C_Only_Conversion;
1763   return true;
1764 }
1765 
1766 static bool
1767 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1768                                      QualType &ToType,
1769                                      bool InOverloadResolution,
1770                                      StandardConversionSequence &SCS,
1771                                      bool CStyle) {
1772 
1773   const RecordType *UT = ToType->getAsUnionType();
1774   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1775     return false;
1776   // The field to initialize within the transparent union.
1777   RecordDecl *UD = UT->getDecl();
1778   // It's compatible if the expression matches any of the fields.
1779   for (const auto *it : UD->fields()) {
1780     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1781                              CStyle, /*ObjCWritebackConversion=*/false)) {
1782       ToType = it->getType();
1783       return true;
1784     }
1785   }
1786   return false;
1787 }
1788 
1789 /// IsIntegralPromotion - Determines whether the conversion from the
1790 /// expression From (whose potentially-adjusted type is FromType) to
1791 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1792 /// sets PromotedType to the promoted type.
1793 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1794   const BuiltinType *To = ToType->getAs<BuiltinType>();
1795   // All integers are built-in.
1796   if (!To) {
1797     return false;
1798   }
1799 
1800   // An rvalue of type char, signed char, unsigned char, short int, or
1801   // unsigned short int can be converted to an rvalue of type int if
1802   // int can represent all the values of the source type; otherwise,
1803   // the source rvalue can be converted to an rvalue of type unsigned
1804   // int (C++ 4.5p1).
1805   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1806       !FromType->isEnumeralType()) {
1807     if (// We can promote any signed, promotable integer type to an int
1808         (FromType->isSignedIntegerType() ||
1809          // We can promote any unsigned integer type whose size is
1810          // less than int to an int.
1811          (!FromType->isSignedIntegerType() &&
1812           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1813       return To->getKind() == BuiltinType::Int;
1814     }
1815 
1816     return To->getKind() == BuiltinType::UInt;
1817   }
1818 
1819   // C++11 [conv.prom]p3:
1820   //   A prvalue of an unscoped enumeration type whose underlying type is not
1821   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1822   //   following types that can represent all the values of the enumeration
1823   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1824   //   unsigned int, long int, unsigned long int, long long int, or unsigned
1825   //   long long int. If none of the types in that list can represent all the
1826   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1827   //   type can be converted to an rvalue a prvalue of the extended integer type
1828   //   with lowest integer conversion rank (4.13) greater than the rank of long
1829   //   long in which all the values of the enumeration can be represented. If
1830   //   there are two such extended types, the signed one is chosen.
1831   // C++11 [conv.prom]p4:
1832   //   A prvalue of an unscoped enumeration type whose underlying type is fixed
1833   //   can be converted to a prvalue of its underlying type. Moreover, if
1834   //   integral promotion can be applied to its underlying type, a prvalue of an
1835   //   unscoped enumeration type whose underlying type is fixed can also be
1836   //   converted to a prvalue of the promoted underlying type.
1837   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1838     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1839     // provided for a scoped enumeration.
1840     if (FromEnumType->getDecl()->isScoped())
1841       return false;
1842 
1843     // We can perform an integral promotion to the underlying type of the enum,
1844     // even if that's not the promoted type. Note that the check for promoting
1845     // the underlying type is based on the type alone, and does not consider
1846     // the bitfield-ness of the actual source expression.
1847     if (FromEnumType->getDecl()->isFixed()) {
1848       QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1849       return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1850              IsIntegralPromotion(nullptr, Underlying, ToType);
1851     }
1852 
1853     // We have already pre-calculated the promotion type, so this is trivial.
1854     if (ToType->isIntegerType() &&
1855         isCompleteType(From->getLocStart(), FromType))
1856       return Context.hasSameUnqualifiedType(
1857           ToType, FromEnumType->getDecl()->getPromotionType());
1858   }
1859 
1860   // C++0x [conv.prom]p2:
1861   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1862   //   to an rvalue a prvalue of the first of the following types that can
1863   //   represent all the values of its underlying type: int, unsigned int,
1864   //   long int, unsigned long int, long long int, or unsigned long long int.
1865   //   If none of the types in that list can represent all the values of its
1866   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1867   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1868   //   type.
1869   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1870       ToType->isIntegerType()) {
1871     // Determine whether the type we're converting from is signed or
1872     // unsigned.
1873     bool FromIsSigned = FromType->isSignedIntegerType();
1874     uint64_t FromSize = Context.getTypeSize(FromType);
1875 
1876     // The types we'll try to promote to, in the appropriate
1877     // order. Try each of these types.
1878     QualType PromoteTypes[6] = {
1879       Context.IntTy, Context.UnsignedIntTy,
1880       Context.LongTy, Context.UnsignedLongTy ,
1881       Context.LongLongTy, Context.UnsignedLongLongTy
1882     };
1883     for (int Idx = 0; Idx < 6; ++Idx) {
1884       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1885       if (FromSize < ToSize ||
1886           (FromSize == ToSize &&
1887            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1888         // We found the type that we can promote to. If this is the
1889         // type we wanted, we have a promotion. Otherwise, no
1890         // promotion.
1891         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1892       }
1893     }
1894   }
1895 
1896   // An rvalue for an integral bit-field (9.6) can be converted to an
1897   // rvalue of type int if int can represent all the values of the
1898   // bit-field; otherwise, it can be converted to unsigned int if
1899   // unsigned int can represent all the values of the bit-field. If
1900   // the bit-field is larger yet, no integral promotion applies to
1901   // it. If the bit-field has an enumerated type, it is treated as any
1902   // other value of that type for promotion purposes (C++ 4.5p3).
1903   // FIXME: We should delay checking of bit-fields until we actually perform the
1904   // conversion.
1905   if (From) {
1906     if (FieldDecl *MemberDecl = From->getSourceBitField()) {
1907       llvm::APSInt BitWidth;
1908       if (FromType->isIntegralType(Context) &&
1909           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1910         llvm::APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1911         ToSize = Context.getTypeSize(ToType);
1912 
1913         // Are we promoting to an int from a bitfield that fits in an int?
1914         if (BitWidth < ToSize ||
1915             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1916           return To->getKind() == BuiltinType::Int;
1917         }
1918 
1919         // Are we promoting to an unsigned int from an unsigned bitfield
1920         // that fits into an unsigned int?
1921         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1922           return To->getKind() == BuiltinType::UInt;
1923         }
1924 
1925         return false;
1926       }
1927     }
1928   }
1929 
1930   // An rvalue of type bool can be converted to an rvalue of type int,
1931   // with false becoming zero and true becoming one (C++ 4.5p4).
1932   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1933     return true;
1934   }
1935 
1936   return false;
1937 }
1938 
1939 /// IsFloatingPointPromotion - Determines whether the conversion from
1940 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1941 /// returns true and sets PromotedType to the promoted type.
1942 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1943   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1944     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1945       /// An rvalue of type float can be converted to an rvalue of type
1946       /// double. (C++ 4.6p1).
1947       if (FromBuiltin->getKind() == BuiltinType::Float &&
1948           ToBuiltin->getKind() == BuiltinType::Double)
1949         return true;
1950 
1951       // C99 6.3.1.5p1:
1952       //   When a float is promoted to double or long double, or a
1953       //   double is promoted to long double [...].
1954       if (!getLangOpts().CPlusPlus &&
1955           (FromBuiltin->getKind() == BuiltinType::Float ||
1956            FromBuiltin->getKind() == BuiltinType::Double) &&
1957           (ToBuiltin->getKind() == BuiltinType::LongDouble))
1958         return true;
1959 
1960       // Half can be promoted to float.
1961       if (!getLangOpts().NativeHalfType &&
1962            FromBuiltin->getKind() == BuiltinType::Half &&
1963           ToBuiltin->getKind() == BuiltinType::Float)
1964         return true;
1965     }
1966 
1967   return false;
1968 }
1969 
1970 /// \brief Determine if a conversion is a complex promotion.
1971 ///
1972 /// A complex promotion is defined as a complex -> complex conversion
1973 /// where the conversion between the underlying real types is a
1974 /// floating-point or integral promotion.
1975 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1976   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1977   if (!FromComplex)
1978     return false;
1979 
1980   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1981   if (!ToComplex)
1982     return false;
1983 
1984   return IsFloatingPointPromotion(FromComplex->getElementType(),
1985                                   ToComplex->getElementType()) ||
1986     IsIntegralPromotion(nullptr, FromComplex->getElementType(),
1987                         ToComplex->getElementType());
1988 }
1989 
1990 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1991 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1992 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1993 /// if non-empty, will be a pointer to ToType that may or may not have
1994 /// the right set of qualifiers on its pointee.
1995 ///
1996 static QualType
1997 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1998                                    QualType ToPointee, QualType ToType,
1999                                    ASTContext &Context,
2000                                    bool StripObjCLifetime = false) {
2001   assert((FromPtr->getTypeClass() == Type::Pointer ||
2002           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
2003          "Invalid similarly-qualified pointer type");
2004 
2005   /// Conversions to 'id' subsume cv-qualifier conversions.
2006   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
2007     return ToType.getUnqualifiedType();
2008 
2009   QualType CanonFromPointee
2010     = Context.getCanonicalType(FromPtr->getPointeeType());
2011   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
2012   Qualifiers Quals = CanonFromPointee.getQualifiers();
2013 
2014   if (StripObjCLifetime)
2015     Quals.removeObjCLifetime();
2016 
2017   // Exact qualifier match -> return the pointer type we're converting to.
2018   if (CanonToPointee.getLocalQualifiers() == Quals) {
2019     // ToType is exactly what we need. Return it.
2020     if (!ToType.isNull())
2021       return ToType.getUnqualifiedType();
2022 
2023     // Build a pointer to ToPointee. It has the right qualifiers
2024     // already.
2025     if (isa<ObjCObjectPointerType>(ToType))
2026       return Context.getObjCObjectPointerType(ToPointee);
2027     return Context.getPointerType(ToPointee);
2028   }
2029 
2030   // Just build a canonical type that has the right qualifiers.
2031   QualType QualifiedCanonToPointee
2032     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
2033 
2034   if (isa<ObjCObjectPointerType>(ToType))
2035     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
2036   return Context.getPointerType(QualifiedCanonToPointee);
2037 }
2038 
2039 static bool isNullPointerConstantForConversion(Expr *Expr,
2040                                                bool InOverloadResolution,
2041                                                ASTContext &Context) {
2042   // Handle value-dependent integral null pointer constants correctly.
2043   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
2044   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
2045       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
2046     return !InOverloadResolution;
2047 
2048   return Expr->isNullPointerConstant(Context,
2049                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2050                                         : Expr::NPC_ValueDependentIsNull);
2051 }
2052 
2053 /// IsPointerConversion - Determines whether the conversion of the
2054 /// expression From, which has the (possibly adjusted) type FromType,
2055 /// can be converted to the type ToType via a pointer conversion (C++
2056 /// 4.10). If so, returns true and places the converted type (that
2057 /// might differ from ToType in its cv-qualifiers at some level) into
2058 /// ConvertedType.
2059 ///
2060 /// This routine also supports conversions to and from block pointers
2061 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
2062 /// pointers to interfaces. FIXME: Once we've determined the
2063 /// appropriate overloading rules for Objective-C, we may want to
2064 /// split the Objective-C checks into a different routine; however,
2065 /// GCC seems to consider all of these conversions to be pointer
2066 /// conversions, so for now they live here. IncompatibleObjC will be
2067 /// set if the conversion is an allowed Objective-C conversion that
2068 /// should result in a warning.
2069 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
2070                                bool InOverloadResolution,
2071                                QualType& ConvertedType,
2072                                bool &IncompatibleObjC) {
2073   IncompatibleObjC = false;
2074   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
2075                               IncompatibleObjC))
2076     return true;
2077 
2078   // Conversion from a null pointer constant to any Objective-C pointer type.
2079   if (ToType->isObjCObjectPointerType() &&
2080       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2081     ConvertedType = ToType;
2082     return true;
2083   }
2084 
2085   // Blocks: Block pointers can be converted to void*.
2086   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
2087       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
2088     ConvertedType = ToType;
2089     return true;
2090   }
2091   // Blocks: A null pointer constant can be converted to a block
2092   // pointer type.
2093   if (ToType->isBlockPointerType() &&
2094       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2095     ConvertedType = ToType;
2096     return true;
2097   }
2098 
2099   // If the left-hand-side is nullptr_t, the right side can be a null
2100   // pointer constant.
2101   if (ToType->isNullPtrType() &&
2102       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2103     ConvertedType = ToType;
2104     return true;
2105   }
2106 
2107   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
2108   if (!ToTypePtr)
2109     return false;
2110 
2111   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
2112   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2113     ConvertedType = ToType;
2114     return true;
2115   }
2116 
2117   // Beyond this point, both types need to be pointers
2118   // , including objective-c pointers.
2119   QualType ToPointeeType = ToTypePtr->getPointeeType();
2120   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
2121       !getLangOpts().ObjCAutoRefCount) {
2122     ConvertedType = BuildSimilarlyQualifiedPointerType(
2123                                       FromType->getAs<ObjCObjectPointerType>(),
2124                                                        ToPointeeType,
2125                                                        ToType, Context);
2126     return true;
2127   }
2128   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
2129   if (!FromTypePtr)
2130     return false;
2131 
2132   QualType FromPointeeType = FromTypePtr->getPointeeType();
2133 
2134   // If the unqualified pointee types are the same, this can't be a
2135   // pointer conversion, so don't do all of the work below.
2136   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
2137     return false;
2138 
2139   // An rvalue of type "pointer to cv T," where T is an object type,
2140   // can be converted to an rvalue of type "pointer to cv void" (C++
2141   // 4.10p2).
2142   if (FromPointeeType->isIncompleteOrObjectType() &&
2143       ToPointeeType->isVoidType()) {
2144     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2145                                                        ToPointeeType,
2146                                                        ToType, Context,
2147                                                    /*StripObjCLifetime=*/true);
2148     return true;
2149   }
2150 
2151   // MSVC allows implicit function to void* type conversion.
2152   if (getLangOpts().MSVCCompat && FromPointeeType->isFunctionType() &&
2153       ToPointeeType->isVoidType()) {
2154     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2155                                                        ToPointeeType,
2156                                                        ToType, Context);
2157     return true;
2158   }
2159 
2160   // When we're overloading in C, we allow a special kind of pointer
2161   // conversion for compatible-but-not-identical pointee types.
2162   if (!getLangOpts().CPlusPlus &&
2163       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2164     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2165                                                        ToPointeeType,
2166                                                        ToType, Context);
2167     return true;
2168   }
2169 
2170   // C++ [conv.ptr]p3:
2171   //
2172   //   An rvalue of type "pointer to cv D," where D is a class type,
2173   //   can be converted to an rvalue of type "pointer to cv B," where
2174   //   B is a base class (clause 10) of D. If B is an inaccessible
2175   //   (clause 11) or ambiguous (10.2) base class of D, a program that
2176   //   necessitates this conversion is ill-formed. The result of the
2177   //   conversion is a pointer to the base class sub-object of the
2178   //   derived class object. The null pointer value is converted to
2179   //   the null pointer value of the destination type.
2180   //
2181   // Note that we do not check for ambiguity or inaccessibility
2182   // here. That is handled by CheckPointerConversion.
2183   if (getLangOpts().CPlusPlus &&
2184       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2185       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2186       IsDerivedFrom(From->getLocStart(), FromPointeeType, ToPointeeType)) {
2187     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2188                                                        ToPointeeType,
2189                                                        ToType, Context);
2190     return true;
2191   }
2192 
2193   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2194       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2195     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2196                                                        ToPointeeType,
2197                                                        ToType, Context);
2198     return true;
2199   }
2200 
2201   return false;
2202 }
2203 
2204 /// \brief Adopt the given qualifiers for the given type.
2205 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2206   Qualifiers TQs = T.getQualifiers();
2207 
2208   // Check whether qualifiers already match.
2209   if (TQs == Qs)
2210     return T;
2211 
2212   if (Qs.compatiblyIncludes(TQs))
2213     return Context.getQualifiedType(T, Qs);
2214 
2215   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2216 }
2217 
2218 /// isObjCPointerConversion - Determines whether this is an
2219 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2220 /// with the same arguments and return values.
2221 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2222                                    QualType& ConvertedType,
2223                                    bool &IncompatibleObjC) {
2224   if (!getLangOpts().ObjC1)
2225     return false;
2226 
2227   // The set of qualifiers on the type we're converting from.
2228   Qualifiers FromQualifiers = FromType.getQualifiers();
2229 
2230   // First, we handle all conversions on ObjC object pointer types.
2231   const ObjCObjectPointerType* ToObjCPtr =
2232     ToType->getAs<ObjCObjectPointerType>();
2233   const ObjCObjectPointerType *FromObjCPtr =
2234     FromType->getAs<ObjCObjectPointerType>();
2235 
2236   if (ToObjCPtr && FromObjCPtr) {
2237     // If the pointee types are the same (ignoring qualifications),
2238     // then this is not a pointer conversion.
2239     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2240                                        FromObjCPtr->getPointeeType()))
2241       return false;
2242 
2243     // Conversion between Objective-C pointers.
2244     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2245       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2246       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2247       if (getLangOpts().CPlusPlus && LHS && RHS &&
2248           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2249                                                 FromObjCPtr->getPointeeType()))
2250         return false;
2251       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2252                                                    ToObjCPtr->getPointeeType(),
2253                                                          ToType, Context);
2254       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2255       return true;
2256     }
2257 
2258     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2259       // Okay: this is some kind of implicit downcast of Objective-C
2260       // interfaces, which is permitted. However, we're going to
2261       // complain about it.
2262       IncompatibleObjC = true;
2263       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2264                                                    ToObjCPtr->getPointeeType(),
2265                                                          ToType, Context);
2266       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2267       return true;
2268     }
2269   }
2270   // Beyond this point, both types need to be C pointers or block pointers.
2271   QualType ToPointeeType;
2272   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2273     ToPointeeType = ToCPtr->getPointeeType();
2274   else if (const BlockPointerType *ToBlockPtr =
2275             ToType->getAs<BlockPointerType>()) {
2276     // Objective C++: We're able to convert from a pointer to any object
2277     // to a block pointer type.
2278     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2279       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2280       return true;
2281     }
2282     ToPointeeType = ToBlockPtr->getPointeeType();
2283   }
2284   else if (FromType->getAs<BlockPointerType>() &&
2285            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2286     // Objective C++: We're able to convert from a block pointer type to a
2287     // pointer to any object.
2288     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2289     return true;
2290   }
2291   else
2292     return false;
2293 
2294   QualType FromPointeeType;
2295   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2296     FromPointeeType = FromCPtr->getPointeeType();
2297   else if (const BlockPointerType *FromBlockPtr =
2298            FromType->getAs<BlockPointerType>())
2299     FromPointeeType = FromBlockPtr->getPointeeType();
2300   else
2301     return false;
2302 
2303   // If we have pointers to pointers, recursively check whether this
2304   // is an Objective-C conversion.
2305   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2306       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2307                               IncompatibleObjC)) {
2308     // We always complain about this conversion.
2309     IncompatibleObjC = true;
2310     ConvertedType = Context.getPointerType(ConvertedType);
2311     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2312     return true;
2313   }
2314   // Allow conversion of pointee being objective-c pointer to another one;
2315   // as in I* to id.
2316   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2317       ToPointeeType->getAs<ObjCObjectPointerType>() &&
2318       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2319                               IncompatibleObjC)) {
2320 
2321     ConvertedType = Context.getPointerType(ConvertedType);
2322     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2323     return true;
2324   }
2325 
2326   // If we have pointers to functions or blocks, check whether the only
2327   // differences in the argument and result types are in Objective-C
2328   // pointer conversions. If so, we permit the conversion (but
2329   // complain about it).
2330   const FunctionProtoType *FromFunctionType
2331     = FromPointeeType->getAs<FunctionProtoType>();
2332   const FunctionProtoType *ToFunctionType
2333     = ToPointeeType->getAs<FunctionProtoType>();
2334   if (FromFunctionType && ToFunctionType) {
2335     // If the function types are exactly the same, this isn't an
2336     // Objective-C pointer conversion.
2337     if (Context.getCanonicalType(FromPointeeType)
2338           == Context.getCanonicalType(ToPointeeType))
2339       return false;
2340 
2341     // Perform the quick checks that will tell us whether these
2342     // function types are obviously different.
2343     if (FromFunctionType->getNumParams() != ToFunctionType->getNumParams() ||
2344         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2345         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2346       return false;
2347 
2348     bool HasObjCConversion = false;
2349     if (Context.getCanonicalType(FromFunctionType->getReturnType()) ==
2350         Context.getCanonicalType(ToFunctionType->getReturnType())) {
2351       // Okay, the types match exactly. Nothing to do.
2352     } else if (isObjCPointerConversion(FromFunctionType->getReturnType(),
2353                                        ToFunctionType->getReturnType(),
2354                                        ConvertedType, IncompatibleObjC)) {
2355       // Okay, we have an Objective-C pointer conversion.
2356       HasObjCConversion = true;
2357     } else {
2358       // Function types are too different. Abort.
2359       return false;
2360     }
2361 
2362     // Check argument types.
2363     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumParams();
2364          ArgIdx != NumArgs; ++ArgIdx) {
2365       QualType FromArgType = FromFunctionType->getParamType(ArgIdx);
2366       QualType ToArgType = ToFunctionType->getParamType(ArgIdx);
2367       if (Context.getCanonicalType(FromArgType)
2368             == Context.getCanonicalType(ToArgType)) {
2369         // Okay, the types match exactly. Nothing to do.
2370       } else if (isObjCPointerConversion(FromArgType, ToArgType,
2371                                          ConvertedType, IncompatibleObjC)) {
2372         // Okay, we have an Objective-C pointer conversion.
2373         HasObjCConversion = true;
2374       } else {
2375         // Argument types are too different. Abort.
2376         return false;
2377       }
2378     }
2379 
2380     if (HasObjCConversion) {
2381       // We had an Objective-C conversion. Allow this pointer
2382       // conversion, but complain about it.
2383       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2384       IncompatibleObjC = true;
2385       return true;
2386     }
2387   }
2388 
2389   return false;
2390 }
2391 
2392 /// \brief Determine whether this is an Objective-C writeback conversion,
2393 /// used for parameter passing when performing automatic reference counting.
2394 ///
2395 /// \param FromType The type we're converting form.
2396 ///
2397 /// \param ToType The type we're converting to.
2398 ///
2399 /// \param ConvertedType The type that will be produced after applying
2400 /// this conversion.
2401 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2402                                      QualType &ConvertedType) {
2403   if (!getLangOpts().ObjCAutoRefCount ||
2404       Context.hasSameUnqualifiedType(FromType, ToType))
2405     return false;
2406 
2407   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2408   QualType ToPointee;
2409   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2410     ToPointee = ToPointer->getPointeeType();
2411   else
2412     return false;
2413 
2414   Qualifiers ToQuals = ToPointee.getQualifiers();
2415   if (!ToPointee->isObjCLifetimeType() ||
2416       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2417       !ToQuals.withoutObjCLifetime().empty())
2418     return false;
2419 
2420   // Argument must be a pointer to __strong to __weak.
2421   QualType FromPointee;
2422   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2423     FromPointee = FromPointer->getPointeeType();
2424   else
2425     return false;
2426 
2427   Qualifiers FromQuals = FromPointee.getQualifiers();
2428   if (!FromPointee->isObjCLifetimeType() ||
2429       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2430        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2431     return false;
2432 
2433   // Make sure that we have compatible qualifiers.
2434   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2435   if (!ToQuals.compatiblyIncludes(FromQuals))
2436     return false;
2437 
2438   // Remove qualifiers from the pointee type we're converting from; they
2439   // aren't used in the compatibility check belong, and we'll be adding back
2440   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2441   FromPointee = FromPointee.getUnqualifiedType();
2442 
2443   // The unqualified form of the pointee types must be compatible.
2444   ToPointee = ToPointee.getUnqualifiedType();
2445   bool IncompatibleObjC;
2446   if (Context.typesAreCompatible(FromPointee, ToPointee))
2447     FromPointee = ToPointee;
2448   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2449                                     IncompatibleObjC))
2450     return false;
2451 
2452   /// \brief Construct the type we're converting to, which is a pointer to
2453   /// __autoreleasing pointee.
2454   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2455   ConvertedType = Context.getPointerType(FromPointee);
2456   return true;
2457 }
2458 
2459 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2460                                     QualType& ConvertedType) {
2461   QualType ToPointeeType;
2462   if (const BlockPointerType *ToBlockPtr =
2463         ToType->getAs<BlockPointerType>())
2464     ToPointeeType = ToBlockPtr->getPointeeType();
2465   else
2466     return false;
2467 
2468   QualType FromPointeeType;
2469   if (const BlockPointerType *FromBlockPtr =
2470       FromType->getAs<BlockPointerType>())
2471     FromPointeeType = FromBlockPtr->getPointeeType();
2472   else
2473     return false;
2474   // We have pointer to blocks, check whether the only
2475   // differences in the argument and result types are in Objective-C
2476   // pointer conversions. If so, we permit the conversion.
2477 
2478   const FunctionProtoType *FromFunctionType
2479     = FromPointeeType->getAs<FunctionProtoType>();
2480   const FunctionProtoType *ToFunctionType
2481     = ToPointeeType->getAs<FunctionProtoType>();
2482 
2483   if (!FromFunctionType || !ToFunctionType)
2484     return false;
2485 
2486   if (Context.hasSameType(FromPointeeType, ToPointeeType))
2487     return true;
2488 
2489   // Perform the quick checks that will tell us whether these
2490   // function types are obviously different.
2491   if (FromFunctionType->getNumParams() != ToFunctionType->getNumParams() ||
2492       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2493     return false;
2494 
2495   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2496   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2497   if (FromEInfo != ToEInfo)
2498     return false;
2499 
2500   bool IncompatibleObjC = false;
2501   if (Context.hasSameType(FromFunctionType->getReturnType(),
2502                           ToFunctionType->getReturnType())) {
2503     // Okay, the types match exactly. Nothing to do.
2504   } else {
2505     QualType RHS = FromFunctionType->getReturnType();
2506     QualType LHS = ToFunctionType->getReturnType();
2507     if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2508         !RHS.hasQualifiers() && LHS.hasQualifiers())
2509        LHS = LHS.getUnqualifiedType();
2510 
2511      if (Context.hasSameType(RHS,LHS)) {
2512        // OK exact match.
2513      } else if (isObjCPointerConversion(RHS, LHS,
2514                                         ConvertedType, IncompatibleObjC)) {
2515      if (IncompatibleObjC)
2516        return false;
2517      // Okay, we have an Objective-C pointer conversion.
2518      }
2519      else
2520        return false;
2521    }
2522 
2523    // Check argument types.
2524    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumParams();
2525         ArgIdx != NumArgs; ++ArgIdx) {
2526      IncompatibleObjC = false;
2527      QualType FromArgType = FromFunctionType->getParamType(ArgIdx);
2528      QualType ToArgType = ToFunctionType->getParamType(ArgIdx);
2529      if (Context.hasSameType(FromArgType, ToArgType)) {
2530        // Okay, the types match exactly. Nothing to do.
2531      } else if (isObjCPointerConversion(ToArgType, FromArgType,
2532                                         ConvertedType, IncompatibleObjC)) {
2533        if (IncompatibleObjC)
2534          return false;
2535        // Okay, we have an Objective-C pointer conversion.
2536      } else
2537        // Argument types are too different. Abort.
2538        return false;
2539    }
2540    if (LangOpts.ObjCAutoRefCount &&
2541        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2542                                                     ToFunctionType))
2543      return false;
2544 
2545    ConvertedType = ToType;
2546    return true;
2547 }
2548 
2549 enum {
2550   ft_default,
2551   ft_different_class,
2552   ft_parameter_arity,
2553   ft_parameter_mismatch,
2554   ft_return_type,
2555   ft_qualifer_mismatch
2556 };
2557 
2558 /// Attempts to get the FunctionProtoType from a Type. Handles
2559 /// MemberFunctionPointers properly.
2560 static const FunctionProtoType *tryGetFunctionProtoType(QualType FromType) {
2561   if (auto *FPT = FromType->getAs<FunctionProtoType>())
2562     return FPT;
2563 
2564   if (auto *MPT = FromType->getAs<MemberPointerType>())
2565     return MPT->getPointeeType()->getAs<FunctionProtoType>();
2566 
2567   return nullptr;
2568 }
2569 
2570 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2571 /// function types.  Catches different number of parameter, mismatch in
2572 /// parameter types, and different return types.
2573 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2574                                       QualType FromType, QualType ToType) {
2575   // If either type is not valid, include no extra info.
2576   if (FromType.isNull() || ToType.isNull()) {
2577     PDiag << ft_default;
2578     return;
2579   }
2580 
2581   // Get the function type from the pointers.
2582   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2583     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2584                             *ToMember = ToType->getAs<MemberPointerType>();
2585     if (!Context.hasSameType(FromMember->getClass(), ToMember->getClass())) {
2586       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2587             << QualType(FromMember->getClass(), 0);
2588       return;
2589     }
2590     FromType = FromMember->getPointeeType();
2591     ToType = ToMember->getPointeeType();
2592   }
2593 
2594   if (FromType->isPointerType())
2595     FromType = FromType->getPointeeType();
2596   if (ToType->isPointerType())
2597     ToType = ToType->getPointeeType();
2598 
2599   // Remove references.
2600   FromType = FromType.getNonReferenceType();
2601   ToType = ToType.getNonReferenceType();
2602 
2603   // Don't print extra info for non-specialized template functions.
2604   if (FromType->isInstantiationDependentType() &&
2605       !FromType->getAs<TemplateSpecializationType>()) {
2606     PDiag << ft_default;
2607     return;
2608   }
2609 
2610   // No extra info for same types.
2611   if (Context.hasSameType(FromType, ToType)) {
2612     PDiag << ft_default;
2613     return;
2614   }
2615 
2616   const FunctionProtoType *FromFunction = tryGetFunctionProtoType(FromType),
2617                           *ToFunction = tryGetFunctionProtoType(ToType);
2618 
2619   // Both types need to be function types.
2620   if (!FromFunction || !ToFunction) {
2621     PDiag << ft_default;
2622     return;
2623   }
2624 
2625   if (FromFunction->getNumParams() != ToFunction->getNumParams()) {
2626     PDiag << ft_parameter_arity << ToFunction->getNumParams()
2627           << FromFunction->getNumParams();
2628     return;
2629   }
2630 
2631   // Handle different parameter types.
2632   unsigned ArgPos;
2633   if (!FunctionParamTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2634     PDiag << ft_parameter_mismatch << ArgPos + 1
2635           << ToFunction->getParamType(ArgPos)
2636           << FromFunction->getParamType(ArgPos);
2637     return;
2638   }
2639 
2640   // Handle different return type.
2641   if (!Context.hasSameType(FromFunction->getReturnType(),
2642                            ToFunction->getReturnType())) {
2643     PDiag << ft_return_type << ToFunction->getReturnType()
2644           << FromFunction->getReturnType();
2645     return;
2646   }
2647 
2648   unsigned FromQuals = FromFunction->getTypeQuals(),
2649            ToQuals = ToFunction->getTypeQuals();
2650   if (FromQuals != ToQuals) {
2651     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2652     return;
2653   }
2654 
2655   // Unable to find a difference, so add no extra info.
2656   PDiag << ft_default;
2657 }
2658 
2659 /// FunctionParamTypesAreEqual - This routine checks two function proto types
2660 /// for equality of their argument types. Caller has already checked that
2661 /// they have same number of arguments.  If the parameters are different,
2662 /// ArgPos will have the parameter index of the first different parameter.
2663 bool Sema::FunctionParamTypesAreEqual(const FunctionProtoType *OldType,
2664                                       const FunctionProtoType *NewType,
2665                                       unsigned *ArgPos) {
2666   for (FunctionProtoType::param_type_iterator O = OldType->param_type_begin(),
2667                                               N = NewType->param_type_begin(),
2668                                               E = OldType->param_type_end();
2669        O && (O != E); ++O, ++N) {
2670     if (!Context.hasSameType(O->getUnqualifiedType(),
2671                              N->getUnqualifiedType())) {
2672       if (ArgPos)
2673         *ArgPos = O - OldType->param_type_begin();
2674       return false;
2675     }
2676   }
2677   return true;
2678 }
2679 
2680 /// CheckPointerConversion - Check the pointer conversion from the
2681 /// expression From to the type ToType. This routine checks for
2682 /// ambiguous or inaccessible derived-to-base pointer
2683 /// conversions for which IsPointerConversion has already returned
2684 /// true. It returns true and produces a diagnostic if there was an
2685 /// error, or returns false otherwise.
2686 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2687                                   CastKind &Kind,
2688                                   CXXCastPath& BasePath,
2689                                   bool IgnoreBaseAccess) {
2690   QualType FromType = From->getType();
2691   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2692 
2693   Kind = CK_BitCast;
2694 
2695   if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2696       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2697       Expr::NPCK_ZeroExpression) {
2698     if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2699       DiagRuntimeBehavior(From->getExprLoc(), From,
2700                           PDiag(diag::warn_impcast_bool_to_null_pointer)
2701                             << ToType << From->getSourceRange());
2702     else if (!isUnevaluatedContext())
2703       Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2704         << ToType << From->getSourceRange();
2705   }
2706   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2707     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2708       QualType FromPointeeType = FromPtrType->getPointeeType(),
2709                ToPointeeType   = ToPtrType->getPointeeType();
2710 
2711       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2712           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2713         // We must have a derived-to-base conversion. Check an
2714         // ambiguous or inaccessible conversion.
2715         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2716                                          From->getExprLoc(),
2717                                          From->getSourceRange(), &BasePath,
2718                                          IgnoreBaseAccess))
2719           return true;
2720 
2721         // The conversion was successful.
2722         Kind = CK_DerivedToBase;
2723       }
2724 
2725       if (!IsCStyleOrFunctionalCast && FromPointeeType->isFunctionType() &&
2726           ToPointeeType->isVoidType()) {
2727         assert(getLangOpts().MSVCCompat &&
2728                "this should only be possible with MSVCCompat!");
2729         Diag(From->getExprLoc(), diag::ext_ms_impcast_fn_obj)
2730             << From->getSourceRange();
2731       }
2732     }
2733   } else if (const ObjCObjectPointerType *ToPtrType =
2734                ToType->getAs<ObjCObjectPointerType>()) {
2735     if (const ObjCObjectPointerType *FromPtrType =
2736           FromType->getAs<ObjCObjectPointerType>()) {
2737       // Objective-C++ conversions are always okay.
2738       // FIXME: We should have a different class of conversions for the
2739       // Objective-C++ implicit conversions.
2740       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2741         return false;
2742     } else if (FromType->isBlockPointerType()) {
2743       Kind = CK_BlockPointerToObjCPointerCast;
2744     } else {
2745       Kind = CK_CPointerToObjCPointerCast;
2746     }
2747   } else if (ToType->isBlockPointerType()) {
2748     if (!FromType->isBlockPointerType())
2749       Kind = CK_AnyPointerToBlockPointerCast;
2750   }
2751 
2752   // We shouldn't fall into this case unless it's valid for other
2753   // reasons.
2754   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2755     Kind = CK_NullToPointer;
2756 
2757   return false;
2758 }
2759 
2760 /// IsMemberPointerConversion - Determines whether the conversion of the
2761 /// expression From, which has the (possibly adjusted) type FromType, can be
2762 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2763 /// If so, returns true and places the converted type (that might differ from
2764 /// ToType in its cv-qualifiers at some level) into ConvertedType.
2765 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2766                                      QualType ToType,
2767                                      bool InOverloadResolution,
2768                                      QualType &ConvertedType) {
2769   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2770   if (!ToTypePtr)
2771     return false;
2772 
2773   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2774   if (From->isNullPointerConstant(Context,
2775                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2776                                         : Expr::NPC_ValueDependentIsNull)) {
2777     ConvertedType = ToType;
2778     return true;
2779   }
2780 
2781   // Otherwise, both types have to be member pointers.
2782   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2783   if (!FromTypePtr)
2784     return false;
2785 
2786   // A pointer to member of B can be converted to a pointer to member of D,
2787   // where D is derived from B (C++ 4.11p2).
2788   QualType FromClass(FromTypePtr->getClass(), 0);
2789   QualType ToClass(ToTypePtr->getClass(), 0);
2790 
2791   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2792       IsDerivedFrom(From->getLocStart(), ToClass, FromClass)) {
2793     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2794                                                  ToClass.getTypePtr());
2795     return true;
2796   }
2797 
2798   return false;
2799 }
2800 
2801 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2802 /// expression From to the type ToType. This routine checks for ambiguous or
2803 /// virtual or inaccessible base-to-derived member pointer conversions
2804 /// for which IsMemberPointerConversion has already returned true. It returns
2805 /// true and produces a diagnostic if there was an error, or returns false
2806 /// otherwise.
2807 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2808                                         CastKind &Kind,
2809                                         CXXCastPath &BasePath,
2810                                         bool IgnoreBaseAccess) {
2811   QualType FromType = From->getType();
2812   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2813   if (!FromPtrType) {
2814     // This must be a null pointer to member pointer conversion
2815     assert(From->isNullPointerConstant(Context,
2816                                        Expr::NPC_ValueDependentIsNull) &&
2817            "Expr must be null pointer constant!");
2818     Kind = CK_NullToMemberPointer;
2819     return false;
2820   }
2821 
2822   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2823   assert(ToPtrType && "No member pointer cast has a target type "
2824                       "that is not a member pointer.");
2825 
2826   QualType FromClass = QualType(FromPtrType->getClass(), 0);
2827   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2828 
2829   // FIXME: What about dependent types?
2830   assert(FromClass->isRecordType() && "Pointer into non-class.");
2831   assert(ToClass->isRecordType() && "Pointer into non-class.");
2832 
2833   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2834                      /*DetectVirtual=*/true);
2835   bool DerivationOkay =
2836       IsDerivedFrom(From->getLocStart(), ToClass, FromClass, Paths);
2837   assert(DerivationOkay &&
2838          "Should not have been called if derivation isn't OK.");
2839   (void)DerivationOkay;
2840 
2841   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2842                                   getUnqualifiedType())) {
2843     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2844     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2845       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2846     return true;
2847   }
2848 
2849   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2850     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2851       << FromClass << ToClass << QualType(VBase, 0)
2852       << From->getSourceRange();
2853     return true;
2854   }
2855 
2856   if (!IgnoreBaseAccess)
2857     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2858                          Paths.front(),
2859                          diag::err_downcast_from_inaccessible_base);
2860 
2861   // Must be a base to derived member conversion.
2862   BuildBasePathArray(Paths, BasePath);
2863   Kind = CK_BaseToDerivedMemberPointer;
2864   return false;
2865 }
2866 
2867 /// Determine whether the lifetime conversion between the two given
2868 /// qualifiers sets is nontrivial.
2869 static bool isNonTrivialObjCLifetimeConversion(Qualifiers FromQuals,
2870                                                Qualifiers ToQuals) {
2871   // Converting anything to const __unsafe_unretained is trivial.
2872   if (ToQuals.hasConst() &&
2873       ToQuals.getObjCLifetime() == Qualifiers::OCL_ExplicitNone)
2874     return false;
2875 
2876   return true;
2877 }
2878 
2879 /// IsQualificationConversion - Determines whether the conversion from
2880 /// an rvalue of type FromType to ToType is a qualification conversion
2881 /// (C++ 4.4).
2882 ///
2883 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2884 /// when the qualification conversion involves a change in the Objective-C
2885 /// object lifetime.
2886 bool
2887 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2888                                 bool CStyle, bool &ObjCLifetimeConversion) {
2889   FromType = Context.getCanonicalType(FromType);
2890   ToType = Context.getCanonicalType(ToType);
2891   ObjCLifetimeConversion = false;
2892 
2893   // If FromType and ToType are the same type, this is not a
2894   // qualification conversion.
2895   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2896     return false;
2897 
2898   // (C++ 4.4p4):
2899   //   A conversion can add cv-qualifiers at levels other than the first
2900   //   in multi-level pointers, subject to the following rules: [...]
2901   bool PreviousToQualsIncludeConst = true;
2902   bool UnwrappedAnyPointer = false;
2903   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2904     // Within each iteration of the loop, we check the qualifiers to
2905     // determine if this still looks like a qualification
2906     // conversion. Then, if all is well, we unwrap one more level of
2907     // pointers or pointers-to-members and do it all again
2908     // until there are no more pointers or pointers-to-members left to
2909     // unwrap.
2910     UnwrappedAnyPointer = true;
2911 
2912     Qualifiers FromQuals = FromType.getQualifiers();
2913     Qualifiers ToQuals = ToType.getQualifiers();
2914 
2915     // Objective-C ARC:
2916     //   Check Objective-C lifetime conversions.
2917     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2918         UnwrappedAnyPointer) {
2919       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2920         if (isNonTrivialObjCLifetimeConversion(FromQuals, ToQuals))
2921           ObjCLifetimeConversion = true;
2922         FromQuals.removeObjCLifetime();
2923         ToQuals.removeObjCLifetime();
2924       } else {
2925         // Qualification conversions cannot cast between different
2926         // Objective-C lifetime qualifiers.
2927         return false;
2928       }
2929     }
2930 
2931     // Allow addition/removal of GC attributes but not changing GC attributes.
2932     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2933         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2934       FromQuals.removeObjCGCAttr();
2935       ToQuals.removeObjCGCAttr();
2936     }
2937 
2938     //   -- for every j > 0, if const is in cv 1,j then const is in cv
2939     //      2,j, and similarly for volatile.
2940     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2941       return false;
2942 
2943     //   -- if the cv 1,j and cv 2,j are different, then const is in
2944     //      every cv for 0 < k < j.
2945     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2946         && !PreviousToQualsIncludeConst)
2947       return false;
2948 
2949     // Keep track of whether all prior cv-qualifiers in the "to" type
2950     // include const.
2951     PreviousToQualsIncludeConst
2952       = PreviousToQualsIncludeConst && ToQuals.hasConst();
2953   }
2954 
2955   // We are left with FromType and ToType being the pointee types
2956   // after unwrapping the original FromType and ToType the same number
2957   // of types. If we unwrapped any pointers, and if FromType and
2958   // ToType have the same unqualified type (since we checked
2959   // qualifiers above), then this is a qualification conversion.
2960   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2961 }
2962 
2963 /// \brief - Determine whether this is a conversion from a scalar type to an
2964 /// atomic type.
2965 ///
2966 /// If successful, updates \c SCS's second and third steps in the conversion
2967 /// sequence to finish the conversion.
2968 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2969                                 bool InOverloadResolution,
2970                                 StandardConversionSequence &SCS,
2971                                 bool CStyle) {
2972   const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2973   if (!ToAtomic)
2974     return false;
2975 
2976   StandardConversionSequence InnerSCS;
2977   if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2978                             InOverloadResolution, InnerSCS,
2979                             CStyle, /*AllowObjCWritebackConversion=*/false))
2980     return false;
2981 
2982   SCS.Second = InnerSCS.Second;
2983   SCS.setToType(1, InnerSCS.getToType(1));
2984   SCS.Third = InnerSCS.Third;
2985   SCS.QualificationIncludesObjCLifetime
2986     = InnerSCS.QualificationIncludesObjCLifetime;
2987   SCS.setToType(2, InnerSCS.getToType(2));
2988   return true;
2989 }
2990 
2991 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2992                                               CXXConstructorDecl *Constructor,
2993                                               QualType Type) {
2994   const FunctionProtoType *CtorType =
2995       Constructor->getType()->getAs<FunctionProtoType>();
2996   if (CtorType->getNumParams() > 0) {
2997     QualType FirstArg = CtorType->getParamType(0);
2998     if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2999       return true;
3000   }
3001   return false;
3002 }
3003 
3004 static OverloadingResult
3005 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
3006                                        CXXRecordDecl *To,
3007                                        UserDefinedConversionSequence &User,
3008                                        OverloadCandidateSet &CandidateSet,
3009                                        bool AllowExplicit) {
3010   DeclContext::lookup_result R = S.LookupConstructors(To);
3011   for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3012        Con != ConEnd; ++Con) {
3013     NamedDecl *D = *Con;
3014     DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3015 
3016     // Find the constructor (which may be a template).
3017     CXXConstructorDecl *Constructor = nullptr;
3018     FunctionTemplateDecl *ConstructorTmpl
3019       = dyn_cast<FunctionTemplateDecl>(D);
3020     if (ConstructorTmpl)
3021       Constructor
3022         = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3023     else
3024       Constructor = cast<CXXConstructorDecl>(D);
3025 
3026     bool Usable = !Constructor->isInvalidDecl() &&
3027                   S.isInitListConstructor(Constructor) &&
3028                   (AllowExplicit || !Constructor->isExplicit());
3029     if (Usable) {
3030       // If the first argument is (a reference to) the target type,
3031       // suppress conversions.
3032       bool SuppressUserConversions =
3033           isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
3034       if (ConstructorTmpl)
3035         S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3036                                        /*ExplicitArgs*/ nullptr,
3037                                        From, CandidateSet,
3038                                        SuppressUserConversions);
3039       else
3040         S.AddOverloadCandidate(Constructor, FoundDecl,
3041                                From, CandidateSet,
3042                                SuppressUserConversions);
3043     }
3044   }
3045 
3046   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3047 
3048   OverloadCandidateSet::iterator Best;
3049   switch (auto Result =
3050             CandidateSet.BestViableFunction(S, From->getLocStart(),
3051                                             Best, true)) {
3052   case OR_Deleted:
3053   case OR_Success: {
3054     // Record the standard conversion we used and the conversion function.
3055     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
3056     QualType ThisType = Constructor->getThisType(S.Context);
3057     // Initializer lists don't have conversions as such.
3058     User.Before.setAsIdentityConversion();
3059     User.HadMultipleCandidates = HadMultipleCandidates;
3060     User.ConversionFunction = Constructor;
3061     User.FoundConversionFunction = Best->FoundDecl;
3062     User.After.setAsIdentityConversion();
3063     User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3064     User.After.setAllToTypes(ToType);
3065     return Result;
3066   }
3067 
3068   case OR_No_Viable_Function:
3069     return OR_No_Viable_Function;
3070   case OR_Ambiguous:
3071     return OR_Ambiguous;
3072   }
3073 
3074   llvm_unreachable("Invalid OverloadResult!");
3075 }
3076 
3077 /// Determines whether there is a user-defined conversion sequence
3078 /// (C++ [over.ics.user]) that converts expression From to the type
3079 /// ToType. If such a conversion exists, User will contain the
3080 /// user-defined conversion sequence that performs such a conversion
3081 /// and this routine will return true. Otherwise, this routine returns
3082 /// false and User is unspecified.
3083 ///
3084 /// \param AllowExplicit  true if the conversion should consider C++0x
3085 /// "explicit" conversion functions as well as non-explicit conversion
3086 /// functions (C++0x [class.conv.fct]p2).
3087 ///
3088 /// \param AllowObjCConversionOnExplicit true if the conversion should
3089 /// allow an extra Objective-C pointer conversion on uses of explicit
3090 /// constructors. Requires \c AllowExplicit to also be set.
3091 static OverloadingResult
3092 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
3093                         UserDefinedConversionSequence &User,
3094                         OverloadCandidateSet &CandidateSet,
3095                         bool AllowExplicit,
3096                         bool AllowObjCConversionOnExplicit) {
3097   assert(AllowExplicit || !AllowObjCConversionOnExplicit);
3098 
3099   // Whether we will only visit constructors.
3100   bool ConstructorsOnly = false;
3101 
3102   // If the type we are conversion to is a class type, enumerate its
3103   // constructors.
3104   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
3105     // C++ [over.match.ctor]p1:
3106     //   When objects of class type are direct-initialized (8.5), or
3107     //   copy-initialized from an expression of the same or a
3108     //   derived class type (8.5), overload resolution selects the
3109     //   constructor. [...] For copy-initialization, the candidate
3110     //   functions are all the converting constructors (12.3.1) of
3111     //   that class. The argument list is the expression-list within
3112     //   the parentheses of the initializer.
3113     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
3114         (From->getType()->getAs<RecordType>() &&
3115          S.IsDerivedFrom(From->getLocStart(), From->getType(), ToType)))
3116       ConstructorsOnly = true;
3117 
3118     if (!S.isCompleteType(From->getExprLoc(), ToType)) {
3119       // We're not going to find any constructors.
3120     } else if (CXXRecordDecl *ToRecordDecl
3121                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
3122 
3123       Expr **Args = &From;
3124       unsigned NumArgs = 1;
3125       bool ListInitializing = false;
3126       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
3127         // But first, see if there is an init-list-constructor that will work.
3128         OverloadingResult Result = IsInitializerListConstructorConversion(
3129             S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3130         if (Result != OR_No_Viable_Function)
3131           return Result;
3132         // Never mind.
3133         CandidateSet.clear();
3134 
3135         // If we're list-initializing, we pass the individual elements as
3136         // arguments, not the entire list.
3137         Args = InitList->getInits();
3138         NumArgs = InitList->getNumInits();
3139         ListInitializing = true;
3140       }
3141 
3142       DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
3143       for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3144            Con != ConEnd; ++Con) {
3145         NamedDecl *D = *Con;
3146         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3147 
3148         // Find the constructor (which may be a template).
3149         CXXConstructorDecl *Constructor = nullptr;
3150         FunctionTemplateDecl *ConstructorTmpl
3151           = dyn_cast<FunctionTemplateDecl>(D);
3152         if (ConstructorTmpl)
3153           Constructor
3154             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3155         else
3156           Constructor = cast<CXXConstructorDecl>(D);
3157 
3158         bool Usable = !Constructor->isInvalidDecl();
3159         if (ListInitializing)
3160           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3161         else
3162           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3163         if (Usable) {
3164           bool SuppressUserConversions = !ConstructorsOnly;
3165           if (SuppressUserConversions && ListInitializing) {
3166             SuppressUserConversions = false;
3167             if (NumArgs == 1) {
3168               // If the first argument is (a reference to) the target type,
3169               // suppress conversions.
3170               SuppressUserConversions = isFirstArgumentCompatibleWithType(
3171                                                 S.Context, Constructor, ToType);
3172             }
3173           }
3174           if (ConstructorTmpl)
3175             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3176                                            /*ExplicitArgs*/ nullptr,
3177                                            llvm::makeArrayRef(Args, NumArgs),
3178                                            CandidateSet, SuppressUserConversions);
3179           else
3180             // Allow one user-defined conversion when user specifies a
3181             // From->ToType conversion via an static cast (c-style, etc).
3182             S.AddOverloadCandidate(Constructor, FoundDecl,
3183                                    llvm::makeArrayRef(Args, NumArgs),
3184                                    CandidateSet, SuppressUserConversions);
3185         }
3186       }
3187     }
3188   }
3189 
3190   // Enumerate conversion functions, if we're allowed to.
3191   if (ConstructorsOnly || isa<InitListExpr>(From)) {
3192   } else if (!S.isCompleteType(From->getLocStart(), From->getType())) {
3193     // No conversion functions from incomplete types.
3194   } else if (const RecordType *FromRecordType
3195                                    = From->getType()->getAs<RecordType>()) {
3196     if (CXXRecordDecl *FromRecordDecl
3197          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3198       // Add all of the conversion functions as candidates.
3199       const auto &Conversions = FromRecordDecl->getVisibleConversionFunctions();
3200       for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) {
3201         DeclAccessPair FoundDecl = I.getPair();
3202         NamedDecl *D = FoundDecl.getDecl();
3203         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3204         if (isa<UsingShadowDecl>(D))
3205           D = cast<UsingShadowDecl>(D)->getTargetDecl();
3206 
3207         CXXConversionDecl *Conv;
3208         FunctionTemplateDecl *ConvTemplate;
3209         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3210           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3211         else
3212           Conv = cast<CXXConversionDecl>(D);
3213 
3214         if (AllowExplicit || !Conv->isExplicit()) {
3215           if (ConvTemplate)
3216             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3217                                              ActingContext, From, ToType,
3218                                              CandidateSet,
3219                                              AllowObjCConversionOnExplicit);
3220           else
3221             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3222                                      From, ToType, CandidateSet,
3223                                      AllowObjCConversionOnExplicit);
3224         }
3225       }
3226     }
3227   }
3228 
3229   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3230 
3231   OverloadCandidateSet::iterator Best;
3232   switch (auto Result = CandidateSet.BestViableFunction(S, From->getLocStart(),
3233                                                         Best, true)) {
3234   case OR_Success:
3235   case OR_Deleted:
3236     // Record the standard conversion we used and the conversion function.
3237     if (CXXConstructorDecl *Constructor
3238           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3239       // C++ [over.ics.user]p1:
3240       //   If the user-defined conversion is specified by a
3241       //   constructor (12.3.1), the initial standard conversion
3242       //   sequence converts the source type to the type required by
3243       //   the argument of the constructor.
3244       //
3245       QualType ThisType = Constructor->getThisType(S.Context);
3246       if (isa<InitListExpr>(From)) {
3247         // Initializer lists don't have conversions as such.
3248         User.Before.setAsIdentityConversion();
3249       } else {
3250         if (Best->Conversions[0].isEllipsis())
3251           User.EllipsisConversion = true;
3252         else {
3253           User.Before = Best->Conversions[0].Standard;
3254           User.EllipsisConversion = false;
3255         }
3256       }
3257       User.HadMultipleCandidates = HadMultipleCandidates;
3258       User.ConversionFunction = Constructor;
3259       User.FoundConversionFunction = Best->FoundDecl;
3260       User.After.setAsIdentityConversion();
3261       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3262       User.After.setAllToTypes(ToType);
3263       return Result;
3264     }
3265     if (CXXConversionDecl *Conversion
3266                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
3267       // C++ [over.ics.user]p1:
3268       //
3269       //   [...] If the user-defined conversion is specified by a
3270       //   conversion function (12.3.2), the initial standard
3271       //   conversion sequence converts the source type to the
3272       //   implicit object parameter of the conversion function.
3273       User.Before = Best->Conversions[0].Standard;
3274       User.HadMultipleCandidates = HadMultipleCandidates;
3275       User.ConversionFunction = Conversion;
3276       User.FoundConversionFunction = Best->FoundDecl;
3277       User.EllipsisConversion = false;
3278 
3279       // C++ [over.ics.user]p2:
3280       //   The second standard conversion sequence converts the
3281       //   result of the user-defined conversion to the target type
3282       //   for the sequence. Since an implicit conversion sequence
3283       //   is an initialization, the special rules for
3284       //   initialization by user-defined conversion apply when
3285       //   selecting the best user-defined conversion for a
3286       //   user-defined conversion sequence (see 13.3.3 and
3287       //   13.3.3.1).
3288       User.After = Best->FinalConversion;
3289       return Result;
3290     }
3291     llvm_unreachable("Not a constructor or conversion function?");
3292 
3293   case OR_No_Viable_Function:
3294     return OR_No_Viable_Function;
3295 
3296   case OR_Ambiguous:
3297     return OR_Ambiguous;
3298   }
3299 
3300   llvm_unreachable("Invalid OverloadResult!");
3301 }
3302 
3303 bool
3304 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3305   ImplicitConversionSequence ICS;
3306   OverloadCandidateSet CandidateSet(From->getExprLoc(),
3307                                     OverloadCandidateSet::CSK_Normal);
3308   OverloadingResult OvResult =
3309     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3310                             CandidateSet, false, false);
3311   if (OvResult == OR_Ambiguous)
3312     Diag(From->getLocStart(), diag::err_typecheck_ambiguous_condition)
3313         << From->getType() << ToType << From->getSourceRange();
3314   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty()) {
3315     if (!RequireCompleteType(From->getLocStart(), ToType,
3316                              diag::err_typecheck_nonviable_condition_incomplete,
3317                              From->getType(), From->getSourceRange()))
3318       Diag(From->getLocStart(), diag::err_typecheck_nonviable_condition)
3319           << false << From->getType() << From->getSourceRange() << ToType;
3320   } else
3321     return false;
3322   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3323   return true;
3324 }
3325 
3326 /// \brief Compare the user-defined conversion functions or constructors
3327 /// of two user-defined conversion sequences to determine whether any ordering
3328 /// is possible.
3329 static ImplicitConversionSequence::CompareKind
3330 compareConversionFunctions(Sema &S, FunctionDecl *Function1,
3331                            FunctionDecl *Function2) {
3332   if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
3333     return ImplicitConversionSequence::Indistinguishable;
3334 
3335   // Objective-C++:
3336   //   If both conversion functions are implicitly-declared conversions from
3337   //   a lambda closure type to a function pointer and a block pointer,
3338   //   respectively, always prefer the conversion to a function pointer,
3339   //   because the function pointer is more lightweight and is more likely
3340   //   to keep code working.
3341   CXXConversionDecl *Conv1 = dyn_cast_or_null<CXXConversionDecl>(Function1);
3342   if (!Conv1)
3343     return ImplicitConversionSequence::Indistinguishable;
3344 
3345   CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3346   if (!Conv2)
3347     return ImplicitConversionSequence::Indistinguishable;
3348 
3349   if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3350     bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3351     bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3352     if (Block1 != Block2)
3353       return Block1 ? ImplicitConversionSequence::Worse
3354                     : ImplicitConversionSequence::Better;
3355   }
3356 
3357   return ImplicitConversionSequence::Indistinguishable;
3358 }
3359 
3360 static bool hasDeprecatedStringLiteralToCharPtrConversion(
3361     const ImplicitConversionSequence &ICS) {
3362   return (ICS.isStandard() && ICS.Standard.DeprecatedStringLiteralToCharPtr) ||
3363          (ICS.isUserDefined() &&
3364           ICS.UserDefined.Before.DeprecatedStringLiteralToCharPtr);
3365 }
3366 
3367 /// CompareImplicitConversionSequences - Compare two implicit
3368 /// conversion sequences to determine whether one is better than the
3369 /// other or if they are indistinguishable (C++ 13.3.3.2).
3370 static ImplicitConversionSequence::CompareKind
3371 CompareImplicitConversionSequences(Sema &S, SourceLocation Loc,
3372                                    const ImplicitConversionSequence& ICS1,
3373                                    const ImplicitConversionSequence& ICS2)
3374 {
3375   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3376   // conversion sequences (as defined in 13.3.3.1)
3377   //   -- a standard conversion sequence (13.3.3.1.1) is a better
3378   //      conversion sequence than a user-defined conversion sequence or
3379   //      an ellipsis conversion sequence, and
3380   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3381   //      conversion sequence than an ellipsis conversion sequence
3382   //      (13.3.3.1.3).
3383   //
3384   // C++0x [over.best.ics]p10:
3385   //   For the purpose of ranking implicit conversion sequences as
3386   //   described in 13.3.3.2, the ambiguous conversion sequence is
3387   //   treated as a user-defined sequence that is indistinguishable
3388   //   from any other user-defined conversion sequence.
3389 
3390   // String literal to 'char *' conversion has been deprecated in C++03. It has
3391   // been removed from C++11. We still accept this conversion, if it happens at
3392   // the best viable function. Otherwise, this conversion is considered worse
3393   // than ellipsis conversion. Consider this as an extension; this is not in the
3394   // standard. For example:
3395   //
3396   // int &f(...);    // #1
3397   // void f(char*);  // #2
3398   // void g() { int &r = f("foo"); }
3399   //
3400   // In C++03, we pick #2 as the best viable function.
3401   // In C++11, we pick #1 as the best viable function, because ellipsis
3402   // conversion is better than string-literal to char* conversion (since there
3403   // is no such conversion in C++11). If there was no #1 at all or #1 couldn't
3404   // convert arguments, #2 would be the best viable function in C++11.
3405   // If the best viable function has this conversion, a warning will be issued
3406   // in C++03, or an ExtWarn (+SFINAE failure) will be issued in C++11.
3407 
3408   if (S.getLangOpts().CPlusPlus11 && !S.getLangOpts().WritableStrings &&
3409       hasDeprecatedStringLiteralToCharPtrConversion(ICS1) !=
3410       hasDeprecatedStringLiteralToCharPtrConversion(ICS2))
3411     return hasDeprecatedStringLiteralToCharPtrConversion(ICS1)
3412                ? ImplicitConversionSequence::Worse
3413                : ImplicitConversionSequence::Better;
3414 
3415   if (ICS1.getKindRank() < ICS2.getKindRank())
3416     return ImplicitConversionSequence::Better;
3417   if (ICS2.getKindRank() < ICS1.getKindRank())
3418     return ImplicitConversionSequence::Worse;
3419 
3420   // The following checks require both conversion sequences to be of
3421   // the same kind.
3422   if (ICS1.getKind() != ICS2.getKind())
3423     return ImplicitConversionSequence::Indistinguishable;
3424 
3425   ImplicitConversionSequence::CompareKind Result =
3426       ImplicitConversionSequence::Indistinguishable;
3427 
3428   // Two implicit conversion sequences of the same form are
3429   // indistinguishable conversion sequences unless one of the
3430   // following rules apply: (C++ 13.3.3.2p3):
3431 
3432   // List-initialization sequence L1 is a better conversion sequence than
3433   // list-initialization sequence L2 if:
3434   // - L1 converts to std::initializer_list<X> for some X and L2 does not, or,
3435   //   if not that,
3436   // - L1 converts to type "array of N1 T", L2 converts to type "array of N2 T",
3437   //   and N1 is smaller than N2.,
3438   // even if one of the other rules in this paragraph would otherwise apply.
3439   if (!ICS1.isBad()) {
3440     if (ICS1.isStdInitializerListElement() &&
3441         !ICS2.isStdInitializerListElement())
3442       return ImplicitConversionSequence::Better;
3443     if (!ICS1.isStdInitializerListElement() &&
3444         ICS2.isStdInitializerListElement())
3445       return ImplicitConversionSequence::Worse;
3446   }
3447 
3448   if (ICS1.isStandard())
3449     // Standard conversion sequence S1 is a better conversion sequence than
3450     // standard conversion sequence S2 if [...]
3451     Result = CompareStandardConversionSequences(S, Loc,
3452                                                 ICS1.Standard, ICS2.Standard);
3453   else if (ICS1.isUserDefined()) {
3454     // User-defined conversion sequence U1 is a better conversion
3455     // sequence than another user-defined conversion sequence U2 if
3456     // they contain the same user-defined conversion function or
3457     // constructor and if the second standard conversion sequence of
3458     // U1 is better than the second standard conversion sequence of
3459     // U2 (C++ 13.3.3.2p3).
3460     if (ICS1.UserDefined.ConversionFunction ==
3461           ICS2.UserDefined.ConversionFunction)
3462       Result = CompareStandardConversionSequences(S, Loc,
3463                                                   ICS1.UserDefined.After,
3464                                                   ICS2.UserDefined.After);
3465     else
3466       Result = compareConversionFunctions(S,
3467                                           ICS1.UserDefined.ConversionFunction,
3468                                           ICS2.UserDefined.ConversionFunction);
3469   }
3470 
3471   return Result;
3472 }
3473 
3474 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3475   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3476     Qualifiers Quals;
3477     T1 = Context.getUnqualifiedArrayType(T1, Quals);
3478     T2 = Context.getUnqualifiedArrayType(T2, Quals);
3479   }
3480 
3481   return Context.hasSameUnqualifiedType(T1, T2);
3482 }
3483 
3484 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3485 // determine if one is a proper subset of the other.
3486 static ImplicitConversionSequence::CompareKind
3487 compareStandardConversionSubsets(ASTContext &Context,
3488                                  const StandardConversionSequence& SCS1,
3489                                  const StandardConversionSequence& SCS2) {
3490   ImplicitConversionSequence::CompareKind Result
3491     = ImplicitConversionSequence::Indistinguishable;
3492 
3493   // the identity conversion sequence is considered to be a subsequence of
3494   // any non-identity conversion sequence
3495   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3496     return ImplicitConversionSequence::Better;
3497   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3498     return ImplicitConversionSequence::Worse;
3499 
3500   if (SCS1.Second != SCS2.Second) {
3501     if (SCS1.Second == ICK_Identity)
3502       Result = ImplicitConversionSequence::Better;
3503     else if (SCS2.Second == ICK_Identity)
3504       Result = ImplicitConversionSequence::Worse;
3505     else
3506       return ImplicitConversionSequence::Indistinguishable;
3507   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3508     return ImplicitConversionSequence::Indistinguishable;
3509 
3510   if (SCS1.Third == SCS2.Third) {
3511     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3512                              : ImplicitConversionSequence::Indistinguishable;
3513   }
3514 
3515   if (SCS1.Third == ICK_Identity)
3516     return Result == ImplicitConversionSequence::Worse
3517              ? ImplicitConversionSequence::Indistinguishable
3518              : ImplicitConversionSequence::Better;
3519 
3520   if (SCS2.Third == ICK_Identity)
3521     return Result == ImplicitConversionSequence::Better
3522              ? ImplicitConversionSequence::Indistinguishable
3523              : ImplicitConversionSequence::Worse;
3524 
3525   return ImplicitConversionSequence::Indistinguishable;
3526 }
3527 
3528 /// \brief Determine whether one of the given reference bindings is better
3529 /// than the other based on what kind of bindings they are.
3530 static bool
3531 isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3532                              const StandardConversionSequence &SCS2) {
3533   // C++0x [over.ics.rank]p3b4:
3534   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3535   //      implicit object parameter of a non-static member function declared
3536   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3537   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3538   //      lvalue reference to a function lvalue and S2 binds an rvalue
3539   //      reference*.
3540   //
3541   // FIXME: Rvalue references. We're going rogue with the above edits,
3542   // because the semantics in the current C++0x working paper (N3225 at the
3543   // time of this writing) break the standard definition of std::forward
3544   // and std::reference_wrapper when dealing with references to functions.
3545   // Proposed wording changes submitted to CWG for consideration.
3546   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3547       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3548     return false;
3549 
3550   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3551           SCS2.IsLvalueReference) ||
3552          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3553           !SCS2.IsLvalueReference && SCS2.BindsToFunctionLvalue);
3554 }
3555 
3556 /// CompareStandardConversionSequences - Compare two standard
3557 /// conversion sequences to determine whether one is better than the
3558 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3559 static ImplicitConversionSequence::CompareKind
3560 CompareStandardConversionSequences(Sema &S, SourceLocation Loc,
3561                                    const StandardConversionSequence& SCS1,
3562                                    const StandardConversionSequence& SCS2)
3563 {
3564   // Standard conversion sequence S1 is a better conversion sequence
3565   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3566 
3567   //  -- S1 is a proper subsequence of S2 (comparing the conversion
3568   //     sequences in the canonical form defined by 13.3.3.1.1,
3569   //     excluding any Lvalue Transformation; the identity conversion
3570   //     sequence is considered to be a subsequence of any
3571   //     non-identity conversion sequence) or, if not that,
3572   if (ImplicitConversionSequence::CompareKind CK
3573         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3574     return CK;
3575 
3576   //  -- the rank of S1 is better than the rank of S2 (by the rules
3577   //     defined below), or, if not that,
3578   ImplicitConversionRank Rank1 = SCS1.getRank();
3579   ImplicitConversionRank Rank2 = SCS2.getRank();
3580   if (Rank1 < Rank2)
3581     return ImplicitConversionSequence::Better;
3582   else if (Rank2 < Rank1)
3583     return ImplicitConversionSequence::Worse;
3584 
3585   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3586   // are indistinguishable unless one of the following rules
3587   // applies:
3588 
3589   //   A conversion that is not a conversion of a pointer, or
3590   //   pointer to member, to bool is better than another conversion
3591   //   that is such a conversion.
3592   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3593     return SCS2.isPointerConversionToBool()
3594              ? ImplicitConversionSequence::Better
3595              : ImplicitConversionSequence::Worse;
3596 
3597   // C++ [over.ics.rank]p4b2:
3598   //
3599   //   If class B is derived directly or indirectly from class A,
3600   //   conversion of B* to A* is better than conversion of B* to
3601   //   void*, and conversion of A* to void* is better than conversion
3602   //   of B* to void*.
3603   bool SCS1ConvertsToVoid
3604     = SCS1.isPointerConversionToVoidPointer(S.Context);
3605   bool SCS2ConvertsToVoid
3606     = SCS2.isPointerConversionToVoidPointer(S.Context);
3607   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3608     // Exactly one of the conversion sequences is a conversion to
3609     // a void pointer; it's the worse conversion.
3610     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3611                               : ImplicitConversionSequence::Worse;
3612   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3613     // Neither conversion sequence converts to a void pointer; compare
3614     // their derived-to-base conversions.
3615     if (ImplicitConversionSequence::CompareKind DerivedCK
3616           = CompareDerivedToBaseConversions(S, Loc, SCS1, SCS2))
3617       return DerivedCK;
3618   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3619              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3620     // Both conversion sequences are conversions to void
3621     // pointers. Compare the source types to determine if there's an
3622     // inheritance relationship in their sources.
3623     QualType FromType1 = SCS1.getFromType();
3624     QualType FromType2 = SCS2.getFromType();
3625 
3626     // Adjust the types we're converting from via the array-to-pointer
3627     // conversion, if we need to.
3628     if (SCS1.First == ICK_Array_To_Pointer)
3629       FromType1 = S.Context.getArrayDecayedType(FromType1);
3630     if (SCS2.First == ICK_Array_To_Pointer)
3631       FromType2 = S.Context.getArrayDecayedType(FromType2);
3632 
3633     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3634     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3635 
3636     if (S.IsDerivedFrom(Loc, FromPointee2, FromPointee1))
3637       return ImplicitConversionSequence::Better;
3638     else if (S.IsDerivedFrom(Loc, FromPointee1, FromPointee2))
3639       return ImplicitConversionSequence::Worse;
3640 
3641     // Objective-C++: If one interface is more specific than the
3642     // other, it is the better one.
3643     const ObjCObjectPointerType* FromObjCPtr1
3644       = FromType1->getAs<ObjCObjectPointerType>();
3645     const ObjCObjectPointerType* FromObjCPtr2
3646       = FromType2->getAs<ObjCObjectPointerType>();
3647     if (FromObjCPtr1 && FromObjCPtr2) {
3648       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3649                                                           FromObjCPtr2);
3650       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3651                                                            FromObjCPtr1);
3652       if (AssignLeft != AssignRight) {
3653         return AssignLeft? ImplicitConversionSequence::Better
3654                          : ImplicitConversionSequence::Worse;
3655       }
3656     }
3657   }
3658 
3659   // Compare based on qualification conversions (C++ 13.3.3.2p3,
3660   // bullet 3).
3661   if (ImplicitConversionSequence::CompareKind QualCK
3662         = CompareQualificationConversions(S, SCS1, SCS2))
3663     return QualCK;
3664 
3665   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3666     // Check for a better reference binding based on the kind of bindings.
3667     if (isBetterReferenceBindingKind(SCS1, SCS2))
3668       return ImplicitConversionSequence::Better;
3669     else if (isBetterReferenceBindingKind(SCS2, SCS1))
3670       return ImplicitConversionSequence::Worse;
3671 
3672     // C++ [over.ics.rank]p3b4:
3673     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3674     //      which the references refer are the same type except for
3675     //      top-level cv-qualifiers, and the type to which the reference
3676     //      initialized by S2 refers is more cv-qualified than the type
3677     //      to which the reference initialized by S1 refers.
3678     QualType T1 = SCS1.getToType(2);
3679     QualType T2 = SCS2.getToType(2);
3680     T1 = S.Context.getCanonicalType(T1);
3681     T2 = S.Context.getCanonicalType(T2);
3682     Qualifiers T1Quals, T2Quals;
3683     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3684     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3685     if (UnqualT1 == UnqualT2) {
3686       // Objective-C++ ARC: If the references refer to objects with different
3687       // lifetimes, prefer bindings that don't change lifetime.
3688       if (SCS1.ObjCLifetimeConversionBinding !=
3689                                           SCS2.ObjCLifetimeConversionBinding) {
3690         return SCS1.ObjCLifetimeConversionBinding
3691                                            ? ImplicitConversionSequence::Worse
3692                                            : ImplicitConversionSequence::Better;
3693       }
3694 
3695       // If the type is an array type, promote the element qualifiers to the
3696       // type for comparison.
3697       if (isa<ArrayType>(T1) && T1Quals)
3698         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3699       if (isa<ArrayType>(T2) && T2Quals)
3700         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3701       if (T2.isMoreQualifiedThan(T1))
3702         return ImplicitConversionSequence::Better;
3703       else if (T1.isMoreQualifiedThan(T2))
3704         return ImplicitConversionSequence::Worse;
3705     }
3706   }
3707 
3708   // In Microsoft mode, prefer an integral conversion to a
3709   // floating-to-integral conversion if the integral conversion
3710   // is between types of the same size.
3711   // For example:
3712   // void f(float);
3713   // void f(int);
3714   // int main {
3715   //    long a;
3716   //    f(a);
3717   // }
3718   // Here, MSVC will call f(int) instead of generating a compile error
3719   // as clang will do in standard mode.
3720   if (S.getLangOpts().MSVCCompat && SCS1.Second == ICK_Integral_Conversion &&
3721       SCS2.Second == ICK_Floating_Integral &&
3722       S.Context.getTypeSize(SCS1.getFromType()) ==
3723           S.Context.getTypeSize(SCS1.getToType(2)))
3724     return ImplicitConversionSequence::Better;
3725 
3726   return ImplicitConversionSequence::Indistinguishable;
3727 }
3728 
3729 /// CompareQualificationConversions - Compares two standard conversion
3730 /// sequences to determine whether they can be ranked based on their
3731 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3732 static ImplicitConversionSequence::CompareKind
3733 CompareQualificationConversions(Sema &S,
3734                                 const StandardConversionSequence& SCS1,
3735                                 const StandardConversionSequence& SCS2) {
3736   // C++ 13.3.3.2p3:
3737   //  -- S1 and S2 differ only in their qualification conversion and
3738   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3739   //     cv-qualification signature of type T1 is a proper subset of
3740   //     the cv-qualification signature of type T2, and S1 is not the
3741   //     deprecated string literal array-to-pointer conversion (4.2).
3742   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3743       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3744     return ImplicitConversionSequence::Indistinguishable;
3745 
3746   // FIXME: the example in the standard doesn't use a qualification
3747   // conversion (!)
3748   QualType T1 = SCS1.getToType(2);
3749   QualType T2 = SCS2.getToType(2);
3750   T1 = S.Context.getCanonicalType(T1);
3751   T2 = S.Context.getCanonicalType(T2);
3752   Qualifiers T1Quals, T2Quals;
3753   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3754   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3755 
3756   // If the types are the same, we won't learn anything by unwrapped
3757   // them.
3758   if (UnqualT1 == UnqualT2)
3759     return ImplicitConversionSequence::Indistinguishable;
3760 
3761   // If the type is an array type, promote the element qualifiers to the type
3762   // for comparison.
3763   if (isa<ArrayType>(T1) && T1Quals)
3764     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3765   if (isa<ArrayType>(T2) && T2Quals)
3766     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3767 
3768   ImplicitConversionSequence::CompareKind Result
3769     = ImplicitConversionSequence::Indistinguishable;
3770 
3771   // Objective-C++ ARC:
3772   //   Prefer qualification conversions not involving a change in lifetime
3773   //   to qualification conversions that do not change lifetime.
3774   if (SCS1.QualificationIncludesObjCLifetime !=
3775                                       SCS2.QualificationIncludesObjCLifetime) {
3776     Result = SCS1.QualificationIncludesObjCLifetime
3777                ? ImplicitConversionSequence::Worse
3778                : ImplicitConversionSequence::Better;
3779   }
3780 
3781   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3782     // Within each iteration of the loop, we check the qualifiers to
3783     // determine if this still looks like a qualification
3784     // conversion. Then, if all is well, we unwrap one more level of
3785     // pointers or pointers-to-members and do it all again
3786     // until there are no more pointers or pointers-to-members left
3787     // to unwrap. This essentially mimics what
3788     // IsQualificationConversion does, but here we're checking for a
3789     // strict subset of qualifiers.
3790     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3791       // The qualifiers are the same, so this doesn't tell us anything
3792       // about how the sequences rank.
3793       ;
3794     else if (T2.isMoreQualifiedThan(T1)) {
3795       // T1 has fewer qualifiers, so it could be the better sequence.
3796       if (Result == ImplicitConversionSequence::Worse)
3797         // Neither has qualifiers that are a subset of the other's
3798         // qualifiers.
3799         return ImplicitConversionSequence::Indistinguishable;
3800 
3801       Result = ImplicitConversionSequence::Better;
3802     } else if (T1.isMoreQualifiedThan(T2)) {
3803       // T2 has fewer qualifiers, so it could be the better sequence.
3804       if (Result == ImplicitConversionSequence::Better)
3805         // Neither has qualifiers that are a subset of the other's
3806         // qualifiers.
3807         return ImplicitConversionSequence::Indistinguishable;
3808 
3809       Result = ImplicitConversionSequence::Worse;
3810     } else {
3811       // Qualifiers are disjoint.
3812       return ImplicitConversionSequence::Indistinguishable;
3813     }
3814 
3815     // If the types after this point are equivalent, we're done.
3816     if (S.Context.hasSameUnqualifiedType(T1, T2))
3817       break;
3818   }
3819 
3820   // Check that the winning standard conversion sequence isn't using
3821   // the deprecated string literal array to pointer conversion.
3822   switch (Result) {
3823   case ImplicitConversionSequence::Better:
3824     if (SCS1.DeprecatedStringLiteralToCharPtr)
3825       Result = ImplicitConversionSequence::Indistinguishable;
3826     break;
3827 
3828   case ImplicitConversionSequence::Indistinguishable:
3829     break;
3830 
3831   case ImplicitConversionSequence::Worse:
3832     if (SCS2.DeprecatedStringLiteralToCharPtr)
3833       Result = ImplicitConversionSequence::Indistinguishable;
3834     break;
3835   }
3836 
3837   return Result;
3838 }
3839 
3840 /// CompareDerivedToBaseConversions - Compares two standard conversion
3841 /// sequences to determine whether they can be ranked based on their
3842 /// various kinds of derived-to-base conversions (C++
3843 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
3844 /// conversions between Objective-C interface types.
3845 static ImplicitConversionSequence::CompareKind
3846 CompareDerivedToBaseConversions(Sema &S, SourceLocation Loc,
3847                                 const StandardConversionSequence& SCS1,
3848                                 const StandardConversionSequence& SCS2) {
3849   QualType FromType1 = SCS1.getFromType();
3850   QualType ToType1 = SCS1.getToType(1);
3851   QualType FromType2 = SCS2.getFromType();
3852   QualType ToType2 = SCS2.getToType(1);
3853 
3854   // Adjust the types we're converting from via the array-to-pointer
3855   // conversion, if we need to.
3856   if (SCS1.First == ICK_Array_To_Pointer)
3857     FromType1 = S.Context.getArrayDecayedType(FromType1);
3858   if (SCS2.First == ICK_Array_To_Pointer)
3859     FromType2 = S.Context.getArrayDecayedType(FromType2);
3860 
3861   // Canonicalize all of the types.
3862   FromType1 = S.Context.getCanonicalType(FromType1);
3863   ToType1 = S.Context.getCanonicalType(ToType1);
3864   FromType2 = S.Context.getCanonicalType(FromType2);
3865   ToType2 = S.Context.getCanonicalType(ToType2);
3866 
3867   // C++ [over.ics.rank]p4b3:
3868   //
3869   //   If class B is derived directly or indirectly from class A and
3870   //   class C is derived directly or indirectly from B,
3871   //
3872   // Compare based on pointer conversions.
3873   if (SCS1.Second == ICK_Pointer_Conversion &&
3874       SCS2.Second == ICK_Pointer_Conversion &&
3875       /*FIXME: Remove if Objective-C id conversions get their own rank*/
3876       FromType1->isPointerType() && FromType2->isPointerType() &&
3877       ToType1->isPointerType() && ToType2->isPointerType()) {
3878     QualType FromPointee1
3879       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3880     QualType ToPointee1
3881       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3882     QualType FromPointee2
3883       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3884     QualType ToPointee2
3885       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3886 
3887     //   -- conversion of C* to B* is better than conversion of C* to A*,
3888     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3889       if (S.IsDerivedFrom(Loc, ToPointee1, ToPointee2))
3890         return ImplicitConversionSequence::Better;
3891       else if (S.IsDerivedFrom(Loc, ToPointee2, ToPointee1))
3892         return ImplicitConversionSequence::Worse;
3893     }
3894 
3895     //   -- conversion of B* to A* is better than conversion of C* to A*,
3896     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3897       if (S.IsDerivedFrom(Loc, FromPointee2, FromPointee1))
3898         return ImplicitConversionSequence::Better;
3899       else if (S.IsDerivedFrom(Loc, FromPointee1, FromPointee2))
3900         return ImplicitConversionSequence::Worse;
3901     }
3902   } else if (SCS1.Second == ICK_Pointer_Conversion &&
3903              SCS2.Second == ICK_Pointer_Conversion) {
3904     const ObjCObjectPointerType *FromPtr1
3905       = FromType1->getAs<ObjCObjectPointerType>();
3906     const ObjCObjectPointerType *FromPtr2
3907       = FromType2->getAs<ObjCObjectPointerType>();
3908     const ObjCObjectPointerType *ToPtr1
3909       = ToType1->getAs<ObjCObjectPointerType>();
3910     const ObjCObjectPointerType *ToPtr2
3911       = ToType2->getAs<ObjCObjectPointerType>();
3912 
3913     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3914       // Apply the same conversion ranking rules for Objective-C pointer types
3915       // that we do for C++ pointers to class types. However, we employ the
3916       // Objective-C pseudo-subtyping relationship used for assignment of
3917       // Objective-C pointer types.
3918       bool FromAssignLeft
3919         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3920       bool FromAssignRight
3921         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3922       bool ToAssignLeft
3923         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3924       bool ToAssignRight
3925         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3926 
3927       // A conversion to an a non-id object pointer type or qualified 'id'
3928       // type is better than a conversion to 'id'.
3929       if (ToPtr1->isObjCIdType() &&
3930           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3931         return ImplicitConversionSequence::Worse;
3932       if (ToPtr2->isObjCIdType() &&
3933           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3934         return ImplicitConversionSequence::Better;
3935 
3936       // A conversion to a non-id object pointer type is better than a
3937       // conversion to a qualified 'id' type
3938       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3939         return ImplicitConversionSequence::Worse;
3940       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3941         return ImplicitConversionSequence::Better;
3942 
3943       // A conversion to an a non-Class object pointer type or qualified 'Class'
3944       // type is better than a conversion to 'Class'.
3945       if (ToPtr1->isObjCClassType() &&
3946           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3947         return ImplicitConversionSequence::Worse;
3948       if (ToPtr2->isObjCClassType() &&
3949           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3950         return ImplicitConversionSequence::Better;
3951 
3952       // A conversion to a non-Class object pointer type is better than a
3953       // conversion to a qualified 'Class' type.
3954       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3955         return ImplicitConversionSequence::Worse;
3956       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3957         return ImplicitConversionSequence::Better;
3958 
3959       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3960       if (S.Context.hasSameType(FromType1, FromType2) &&
3961           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3962           (ToAssignLeft != ToAssignRight))
3963         return ToAssignLeft? ImplicitConversionSequence::Worse
3964                            : ImplicitConversionSequence::Better;
3965 
3966       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3967       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3968           (FromAssignLeft != FromAssignRight))
3969         return FromAssignLeft? ImplicitConversionSequence::Better
3970         : ImplicitConversionSequence::Worse;
3971     }
3972   }
3973 
3974   // Ranking of member-pointer types.
3975   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3976       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3977       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3978     const MemberPointerType * FromMemPointer1 =
3979                                         FromType1->getAs<MemberPointerType>();
3980     const MemberPointerType * ToMemPointer1 =
3981                                           ToType1->getAs<MemberPointerType>();
3982     const MemberPointerType * FromMemPointer2 =
3983                                           FromType2->getAs<MemberPointerType>();
3984     const MemberPointerType * ToMemPointer2 =
3985                                           ToType2->getAs<MemberPointerType>();
3986     const Type *FromPointeeType1 = FromMemPointer1->getClass();
3987     const Type *ToPointeeType1 = ToMemPointer1->getClass();
3988     const Type *FromPointeeType2 = FromMemPointer2->getClass();
3989     const Type *ToPointeeType2 = ToMemPointer2->getClass();
3990     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3991     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3992     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3993     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3994     // conversion of A::* to B::* is better than conversion of A::* to C::*,
3995     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3996       if (S.IsDerivedFrom(Loc, ToPointee1, ToPointee2))
3997         return ImplicitConversionSequence::Worse;
3998       else if (S.IsDerivedFrom(Loc, ToPointee2, ToPointee1))
3999         return ImplicitConversionSequence::Better;
4000     }
4001     // conversion of B::* to C::* is better than conversion of A::* to C::*
4002     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
4003       if (S.IsDerivedFrom(Loc, FromPointee1, FromPointee2))
4004         return ImplicitConversionSequence::Better;
4005       else if (S.IsDerivedFrom(Loc, FromPointee2, FromPointee1))
4006         return ImplicitConversionSequence::Worse;
4007     }
4008   }
4009 
4010   if (SCS1.Second == ICK_Derived_To_Base) {
4011     //   -- conversion of C to B is better than conversion of C to A,
4012     //   -- binding of an expression of type C to a reference of type
4013     //      B& is better than binding an expression of type C to a
4014     //      reference of type A&,
4015     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
4016         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
4017       if (S.IsDerivedFrom(Loc, ToType1, ToType2))
4018         return ImplicitConversionSequence::Better;
4019       else if (S.IsDerivedFrom(Loc, ToType2, ToType1))
4020         return ImplicitConversionSequence::Worse;
4021     }
4022 
4023     //   -- conversion of B to A is better than conversion of C to A.
4024     //   -- binding of an expression of type B to a reference of type
4025     //      A& is better than binding an expression of type C to a
4026     //      reference of type A&,
4027     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
4028         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
4029       if (S.IsDerivedFrom(Loc, FromType2, FromType1))
4030         return ImplicitConversionSequence::Better;
4031       else if (S.IsDerivedFrom(Loc, FromType1, FromType2))
4032         return ImplicitConversionSequence::Worse;
4033     }
4034   }
4035 
4036   return ImplicitConversionSequence::Indistinguishable;
4037 }
4038 
4039 /// \brief Determine whether the given type is valid, e.g., it is not an invalid
4040 /// C++ class.
4041 static bool isTypeValid(QualType T) {
4042   if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
4043     return !Record->isInvalidDecl();
4044 
4045   return true;
4046 }
4047 
4048 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
4049 /// determine whether they are reference-related,
4050 /// reference-compatible, reference-compatible with added
4051 /// qualification, or incompatible, for use in C++ initialization by
4052 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
4053 /// type, and the first type (T1) is the pointee type of the reference
4054 /// type being initialized.
4055 Sema::ReferenceCompareResult
4056 Sema::CompareReferenceRelationship(SourceLocation Loc,
4057                                    QualType OrigT1, QualType OrigT2,
4058                                    bool &DerivedToBase,
4059                                    bool &ObjCConversion,
4060                                    bool &ObjCLifetimeConversion) {
4061   assert(!OrigT1->isReferenceType() &&
4062     "T1 must be the pointee type of the reference type");
4063   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
4064 
4065   QualType T1 = Context.getCanonicalType(OrigT1);
4066   QualType T2 = Context.getCanonicalType(OrigT2);
4067   Qualifiers T1Quals, T2Quals;
4068   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
4069   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
4070 
4071   // C++ [dcl.init.ref]p4:
4072   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
4073   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
4074   //   T1 is a base class of T2.
4075   DerivedToBase = false;
4076   ObjCConversion = false;
4077   ObjCLifetimeConversion = false;
4078   if (UnqualT1 == UnqualT2) {
4079     // Nothing to do.
4080   } else if (isCompleteType(Loc, OrigT2) &&
4081              isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
4082              IsDerivedFrom(Loc, UnqualT2, UnqualT1))
4083     DerivedToBase = true;
4084   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
4085            UnqualT2->isObjCObjectOrInterfaceType() &&
4086            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
4087     ObjCConversion = true;
4088   else
4089     return Ref_Incompatible;
4090 
4091   // At this point, we know that T1 and T2 are reference-related (at
4092   // least).
4093 
4094   // If the type is an array type, promote the element qualifiers to the type
4095   // for comparison.
4096   if (isa<ArrayType>(T1) && T1Quals)
4097     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
4098   if (isa<ArrayType>(T2) && T2Quals)
4099     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
4100 
4101   // C++ [dcl.init.ref]p4:
4102   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
4103   //   reference-related to T2 and cv1 is the same cv-qualification
4104   //   as, or greater cv-qualification than, cv2. For purposes of
4105   //   overload resolution, cases for which cv1 is greater
4106   //   cv-qualification than cv2 are identified as
4107   //   reference-compatible with added qualification (see 13.3.3.2).
4108   //
4109   // Note that we also require equivalence of Objective-C GC and address-space
4110   // qualifiers when performing these computations, so that e.g., an int in
4111   // address space 1 is not reference-compatible with an int in address
4112   // space 2.
4113   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
4114       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
4115     if (isNonTrivialObjCLifetimeConversion(T2Quals, T1Quals))
4116       ObjCLifetimeConversion = true;
4117 
4118     T1Quals.removeObjCLifetime();
4119     T2Quals.removeObjCLifetime();
4120   }
4121 
4122   if (T1Quals == T2Quals)
4123     return Ref_Compatible;
4124   else if (T1Quals.compatiblyIncludes(T2Quals))
4125     return Ref_Compatible_With_Added_Qualification;
4126   else
4127     return Ref_Related;
4128 }
4129 
4130 /// \brief Look for a user-defined conversion to an value reference-compatible
4131 ///        with DeclType. Return true if something definite is found.
4132 static bool
4133 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
4134                          QualType DeclType, SourceLocation DeclLoc,
4135                          Expr *Init, QualType T2, bool AllowRvalues,
4136                          bool AllowExplicit) {
4137   assert(T2->isRecordType() && "Can only find conversions of record types.");
4138   CXXRecordDecl *T2RecordDecl
4139     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
4140 
4141   OverloadCandidateSet CandidateSet(DeclLoc, OverloadCandidateSet::CSK_Normal);
4142   const auto &Conversions = T2RecordDecl->getVisibleConversionFunctions();
4143   for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) {
4144     NamedDecl *D = *I;
4145     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
4146     if (isa<UsingShadowDecl>(D))
4147       D = cast<UsingShadowDecl>(D)->getTargetDecl();
4148 
4149     FunctionTemplateDecl *ConvTemplate
4150       = dyn_cast<FunctionTemplateDecl>(D);
4151     CXXConversionDecl *Conv;
4152     if (ConvTemplate)
4153       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
4154     else
4155       Conv = cast<CXXConversionDecl>(D);
4156 
4157     // If this is an explicit conversion, and we're not allowed to consider
4158     // explicit conversions, skip it.
4159     if (!AllowExplicit && Conv->isExplicit())
4160       continue;
4161 
4162     if (AllowRvalues) {
4163       bool DerivedToBase = false;
4164       bool ObjCConversion = false;
4165       bool ObjCLifetimeConversion = false;
4166 
4167       // If we are initializing an rvalue reference, don't permit conversion
4168       // functions that return lvalues.
4169       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
4170         const ReferenceType *RefType
4171           = Conv->getConversionType()->getAs<LValueReferenceType>();
4172         if (RefType && !RefType->getPointeeType()->isFunctionType())
4173           continue;
4174       }
4175 
4176       if (!ConvTemplate &&
4177           S.CompareReferenceRelationship(
4178             DeclLoc,
4179             Conv->getConversionType().getNonReferenceType()
4180               .getUnqualifiedType(),
4181             DeclType.getNonReferenceType().getUnqualifiedType(),
4182             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4183           Sema::Ref_Incompatible)
4184         continue;
4185     } else {
4186       // If the conversion function doesn't return a reference type,
4187       // it can't be considered for this conversion. An rvalue reference
4188       // is only acceptable if its referencee is a function type.
4189 
4190       const ReferenceType *RefType =
4191         Conv->getConversionType()->getAs<ReferenceType>();
4192       if (!RefType ||
4193           (!RefType->isLValueReferenceType() &&
4194            !RefType->getPointeeType()->isFunctionType()))
4195         continue;
4196     }
4197 
4198     if (ConvTemplate)
4199       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4200                                        Init, DeclType, CandidateSet,
4201                                        /*AllowObjCConversionOnExplicit=*/false);
4202     else
4203       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4204                                DeclType, CandidateSet,
4205                                /*AllowObjCConversionOnExplicit=*/false);
4206   }
4207 
4208   bool HadMultipleCandidates = (CandidateSet.size() > 1);
4209 
4210   OverloadCandidateSet::iterator Best;
4211   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4212   case OR_Success:
4213     // C++ [over.ics.ref]p1:
4214     //
4215     //   [...] If the parameter binds directly to the result of
4216     //   applying a conversion function to the argument
4217     //   expression, the implicit conversion sequence is a
4218     //   user-defined conversion sequence (13.3.3.1.2), with the
4219     //   second standard conversion sequence either an identity
4220     //   conversion or, if the conversion function returns an
4221     //   entity of a type that is a derived class of the parameter
4222     //   type, a derived-to-base Conversion.
4223     if (!Best->FinalConversion.DirectBinding)
4224       return false;
4225 
4226     ICS.setUserDefined();
4227     ICS.UserDefined.Before = Best->Conversions[0].Standard;
4228     ICS.UserDefined.After = Best->FinalConversion;
4229     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4230     ICS.UserDefined.ConversionFunction = Best->Function;
4231     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4232     ICS.UserDefined.EllipsisConversion = false;
4233     assert(ICS.UserDefined.After.ReferenceBinding &&
4234            ICS.UserDefined.After.DirectBinding &&
4235            "Expected a direct reference binding!");
4236     return true;
4237 
4238   case OR_Ambiguous:
4239     ICS.setAmbiguous();
4240     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4241          Cand != CandidateSet.end(); ++Cand)
4242       if (Cand->Viable)
4243         ICS.Ambiguous.addConversion(Cand->Function);
4244     return true;
4245 
4246   case OR_No_Viable_Function:
4247   case OR_Deleted:
4248     // There was no suitable conversion, or we found a deleted
4249     // conversion; continue with other checks.
4250     return false;
4251   }
4252 
4253   llvm_unreachable("Invalid OverloadResult!");
4254 }
4255 
4256 /// \brief Compute an implicit conversion sequence for reference
4257 /// initialization.
4258 static ImplicitConversionSequence
4259 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4260                  SourceLocation DeclLoc,
4261                  bool SuppressUserConversions,
4262                  bool AllowExplicit) {
4263   assert(DeclType->isReferenceType() && "Reference init needs a reference");
4264 
4265   // Most paths end in a failed conversion.
4266   ImplicitConversionSequence ICS;
4267   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4268 
4269   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4270   QualType T2 = Init->getType();
4271 
4272   // If the initializer is the address of an overloaded function, try
4273   // to resolve the overloaded function. If all goes well, T2 is the
4274   // type of the resulting function.
4275   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4276     DeclAccessPair Found;
4277     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4278                                                                 false, Found))
4279       T2 = Fn->getType();
4280   }
4281 
4282   // Compute some basic properties of the types and the initializer.
4283   bool isRValRef = DeclType->isRValueReferenceType();
4284   bool DerivedToBase = false;
4285   bool ObjCConversion = false;
4286   bool ObjCLifetimeConversion = false;
4287   Expr::Classification InitCategory = Init->Classify(S.Context);
4288   Sema::ReferenceCompareResult RefRelationship
4289     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4290                                      ObjCConversion, ObjCLifetimeConversion);
4291 
4292 
4293   // C++0x [dcl.init.ref]p5:
4294   //   A reference to type "cv1 T1" is initialized by an expression
4295   //   of type "cv2 T2" as follows:
4296 
4297   //     -- If reference is an lvalue reference and the initializer expression
4298   if (!isRValRef) {
4299     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4300     //        reference-compatible with "cv2 T2," or
4301     //
4302     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4303     if (InitCategory.isLValue() &&
4304         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4305       // C++ [over.ics.ref]p1:
4306       //   When a parameter of reference type binds directly (8.5.3)
4307       //   to an argument expression, the implicit conversion sequence
4308       //   is the identity conversion, unless the argument expression
4309       //   has a type that is a derived class of the parameter type,
4310       //   in which case the implicit conversion sequence is a
4311       //   derived-to-base Conversion (13.3.3.1).
4312       ICS.setStandard();
4313       ICS.Standard.First = ICK_Identity;
4314       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4315                          : ObjCConversion? ICK_Compatible_Conversion
4316                          : ICK_Identity;
4317       ICS.Standard.Third = ICK_Identity;
4318       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4319       ICS.Standard.setToType(0, T2);
4320       ICS.Standard.setToType(1, T1);
4321       ICS.Standard.setToType(2, T1);
4322       ICS.Standard.ReferenceBinding = true;
4323       ICS.Standard.DirectBinding = true;
4324       ICS.Standard.IsLvalueReference = !isRValRef;
4325       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4326       ICS.Standard.BindsToRvalue = false;
4327       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4328       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4329       ICS.Standard.CopyConstructor = nullptr;
4330       ICS.Standard.DeprecatedStringLiteralToCharPtr = false;
4331 
4332       // Nothing more to do: the inaccessibility/ambiguity check for
4333       // derived-to-base conversions is suppressed when we're
4334       // computing the implicit conversion sequence (C++
4335       // [over.best.ics]p2).
4336       return ICS;
4337     }
4338 
4339     //       -- has a class type (i.e., T2 is a class type), where T1 is
4340     //          not reference-related to T2, and can be implicitly
4341     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4342     //          is reference-compatible with "cv3 T3" 92) (this
4343     //          conversion is selected by enumerating the applicable
4344     //          conversion functions (13.3.1.6) and choosing the best
4345     //          one through overload resolution (13.3)),
4346     if (!SuppressUserConversions && T2->isRecordType() &&
4347         S.isCompleteType(DeclLoc, T2) &&
4348         RefRelationship == Sema::Ref_Incompatible) {
4349       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4350                                    Init, T2, /*AllowRvalues=*/false,
4351                                    AllowExplicit))
4352         return ICS;
4353     }
4354   }
4355 
4356   //     -- Otherwise, the reference shall be an lvalue reference to a
4357   //        non-volatile const type (i.e., cv1 shall be const), or the reference
4358   //        shall be an rvalue reference.
4359   if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4360     return ICS;
4361 
4362   //       -- If the initializer expression
4363   //
4364   //            -- is an xvalue, class prvalue, array prvalue or function
4365   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4366   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4367       (InitCategory.isXValue() ||
4368       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4369       (InitCategory.isLValue() && T2->isFunctionType()))) {
4370     ICS.setStandard();
4371     ICS.Standard.First = ICK_Identity;
4372     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4373                       : ObjCConversion? ICK_Compatible_Conversion
4374                       : ICK_Identity;
4375     ICS.Standard.Third = ICK_Identity;
4376     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4377     ICS.Standard.setToType(0, T2);
4378     ICS.Standard.setToType(1, T1);
4379     ICS.Standard.setToType(2, T1);
4380     ICS.Standard.ReferenceBinding = true;
4381     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4382     // binding unless we're binding to a class prvalue.
4383     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4384     // allow the use of rvalue references in C++98/03 for the benefit of
4385     // standard library implementors; therefore, we need the xvalue check here.
4386     ICS.Standard.DirectBinding =
4387       S.getLangOpts().CPlusPlus11 ||
4388       !(InitCategory.isPRValue() || T2->isRecordType());
4389     ICS.Standard.IsLvalueReference = !isRValRef;
4390     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4391     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4392     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4393     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4394     ICS.Standard.CopyConstructor = nullptr;
4395     ICS.Standard.DeprecatedStringLiteralToCharPtr = false;
4396     return ICS;
4397   }
4398 
4399   //            -- has a class type (i.e., T2 is a class type), where T1 is not
4400   //               reference-related to T2, and can be implicitly converted to
4401   //               an xvalue, class prvalue, or function lvalue of type
4402   //               "cv3 T3", where "cv1 T1" is reference-compatible with
4403   //               "cv3 T3",
4404   //
4405   //          then the reference is bound to the value of the initializer
4406   //          expression in the first case and to the result of the conversion
4407   //          in the second case (or, in either case, to an appropriate base
4408   //          class subobject).
4409   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4410       T2->isRecordType() && S.isCompleteType(DeclLoc, T2) &&
4411       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4412                                Init, T2, /*AllowRvalues=*/true,
4413                                AllowExplicit)) {
4414     // In the second case, if the reference is an rvalue reference
4415     // and the second standard conversion sequence of the
4416     // user-defined conversion sequence includes an lvalue-to-rvalue
4417     // conversion, the program is ill-formed.
4418     if (ICS.isUserDefined() && isRValRef &&
4419         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4420       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4421 
4422     return ICS;
4423   }
4424 
4425   // A temporary of function type cannot be created; don't even try.
4426   if (T1->isFunctionType())
4427     return ICS;
4428 
4429   //       -- Otherwise, a temporary of type "cv1 T1" is created and
4430   //          initialized from the initializer expression using the
4431   //          rules for a non-reference copy initialization (8.5). The
4432   //          reference is then bound to the temporary. If T1 is
4433   //          reference-related to T2, cv1 must be the same
4434   //          cv-qualification as, or greater cv-qualification than,
4435   //          cv2; otherwise, the program is ill-formed.
4436   if (RefRelationship == Sema::Ref_Related) {
4437     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4438     // we would be reference-compatible or reference-compatible with
4439     // added qualification. But that wasn't the case, so the reference
4440     // initialization fails.
4441     //
4442     // Note that we only want to check address spaces and cvr-qualifiers here.
4443     // ObjC GC and lifetime qualifiers aren't important.
4444     Qualifiers T1Quals = T1.getQualifiers();
4445     Qualifiers T2Quals = T2.getQualifiers();
4446     T1Quals.removeObjCGCAttr();
4447     T1Quals.removeObjCLifetime();
4448     T2Quals.removeObjCGCAttr();
4449     T2Quals.removeObjCLifetime();
4450     if (!T1Quals.compatiblyIncludes(T2Quals))
4451       return ICS;
4452   }
4453 
4454   // If at least one of the types is a class type, the types are not
4455   // related, and we aren't allowed any user conversions, the
4456   // reference binding fails. This case is important for breaking
4457   // recursion, since TryImplicitConversion below will attempt to
4458   // create a temporary through the use of a copy constructor.
4459   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4460       (T1->isRecordType() || T2->isRecordType()))
4461     return ICS;
4462 
4463   // If T1 is reference-related to T2 and the reference is an rvalue
4464   // reference, the initializer expression shall not be an lvalue.
4465   if (RefRelationship >= Sema::Ref_Related &&
4466       isRValRef && Init->Classify(S.Context).isLValue())
4467     return ICS;
4468 
4469   // C++ [over.ics.ref]p2:
4470   //   When a parameter of reference type is not bound directly to
4471   //   an argument expression, the conversion sequence is the one
4472   //   required to convert the argument expression to the
4473   //   underlying type of the reference according to
4474   //   13.3.3.1. Conceptually, this conversion sequence corresponds
4475   //   to copy-initializing a temporary of the underlying type with
4476   //   the argument expression. Any difference in top-level
4477   //   cv-qualification is subsumed by the initialization itself
4478   //   and does not constitute a conversion.
4479   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4480                               /*AllowExplicit=*/false,
4481                               /*InOverloadResolution=*/false,
4482                               /*CStyle=*/false,
4483                               /*AllowObjCWritebackConversion=*/false,
4484                               /*AllowObjCConversionOnExplicit=*/false);
4485 
4486   // Of course, that's still a reference binding.
4487   if (ICS.isStandard()) {
4488     ICS.Standard.ReferenceBinding = true;
4489     ICS.Standard.IsLvalueReference = !isRValRef;
4490     ICS.Standard.BindsToFunctionLvalue = false;
4491     ICS.Standard.BindsToRvalue = true;
4492     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4493     ICS.Standard.ObjCLifetimeConversionBinding = false;
4494   } else if (ICS.isUserDefined()) {
4495     const ReferenceType *LValRefType =
4496         ICS.UserDefined.ConversionFunction->getReturnType()
4497             ->getAs<LValueReferenceType>();
4498 
4499     // C++ [over.ics.ref]p3:
4500     //   Except for an implicit object parameter, for which see 13.3.1, a
4501     //   standard conversion sequence cannot be formed if it requires [...]
4502     //   binding an rvalue reference to an lvalue other than a function
4503     //   lvalue.
4504     // Note that the function case is not possible here.
4505     if (DeclType->isRValueReferenceType() && LValRefType) {
4506       // FIXME: This is the wrong BadConversionSequence. The problem is binding
4507       // an rvalue reference to a (non-function) lvalue, not binding an lvalue
4508       // reference to an rvalue!
4509       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init, DeclType);
4510       return ICS;
4511     }
4512 
4513     ICS.UserDefined.Before.setAsIdentityConversion();
4514     ICS.UserDefined.After.ReferenceBinding = true;
4515     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4516     ICS.UserDefined.After.BindsToFunctionLvalue = false;
4517     ICS.UserDefined.After.BindsToRvalue = !LValRefType;
4518     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4519     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4520   }
4521 
4522   return ICS;
4523 }
4524 
4525 static ImplicitConversionSequence
4526 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4527                       bool SuppressUserConversions,
4528                       bool InOverloadResolution,
4529                       bool AllowObjCWritebackConversion,
4530                       bool AllowExplicit = false);
4531 
4532 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4533 /// initializer list From.
4534 static ImplicitConversionSequence
4535 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4536                   bool SuppressUserConversions,
4537                   bool InOverloadResolution,
4538                   bool AllowObjCWritebackConversion) {
4539   // C++11 [over.ics.list]p1:
4540   //   When an argument is an initializer list, it is not an expression and
4541   //   special rules apply for converting it to a parameter type.
4542 
4543   ImplicitConversionSequence Result;
4544   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4545 
4546   // We need a complete type for what follows. Incomplete types can never be
4547   // initialized from init lists.
4548   if (!S.isCompleteType(From->getLocStart(), ToType))
4549     return Result;
4550 
4551   // Per DR1467:
4552   //   If the parameter type is a class X and the initializer list has a single
4553   //   element of type cv U, where U is X or a class derived from X, the
4554   //   implicit conversion sequence is the one required to convert the element
4555   //   to the parameter type.
4556   //
4557   //   Otherwise, if the parameter type is a character array [... ]
4558   //   and the initializer list has a single element that is an
4559   //   appropriately-typed string literal (8.5.2 [dcl.init.string]), the
4560   //   implicit conversion sequence is the identity conversion.
4561   if (From->getNumInits() == 1) {
4562     if (ToType->isRecordType()) {
4563       QualType InitType = From->getInit(0)->getType();
4564       if (S.Context.hasSameUnqualifiedType(InitType, ToType) ||
4565           S.IsDerivedFrom(From->getLocStart(), InitType, ToType))
4566         return TryCopyInitialization(S, From->getInit(0), ToType,
4567                                      SuppressUserConversions,
4568                                      InOverloadResolution,
4569                                      AllowObjCWritebackConversion);
4570     }
4571     // FIXME: Check the other conditions here: array of character type,
4572     // initializer is a string literal.
4573     if (ToType->isArrayType()) {
4574       InitializedEntity Entity =
4575         InitializedEntity::InitializeParameter(S.Context, ToType,
4576                                                /*Consumed=*/false);
4577       if (S.CanPerformCopyInitialization(Entity, From)) {
4578         Result.setStandard();
4579         Result.Standard.setAsIdentityConversion();
4580         Result.Standard.setFromType(ToType);
4581         Result.Standard.setAllToTypes(ToType);
4582         return Result;
4583       }
4584     }
4585   }
4586 
4587   // C++14 [over.ics.list]p2: Otherwise, if the parameter type [...] (below).
4588   // C++11 [over.ics.list]p2:
4589   //   If the parameter type is std::initializer_list<X> or "array of X" and
4590   //   all the elements can be implicitly converted to X, the implicit
4591   //   conversion sequence is the worst conversion necessary to convert an
4592   //   element of the list to X.
4593   //
4594   // C++14 [over.ics.list]p3:
4595   //   Otherwise, if the parameter type is "array of N X", if the initializer
4596   //   list has exactly N elements or if it has fewer than N elements and X is
4597   //   default-constructible, and if all the elements of the initializer list
4598   //   can be implicitly converted to X, the implicit conversion sequence is
4599   //   the worst conversion necessary to convert an element of the list to X.
4600   //
4601   // FIXME: We're missing a lot of these checks.
4602   bool toStdInitializerList = false;
4603   QualType X;
4604   if (ToType->isArrayType())
4605     X = S.Context.getAsArrayType(ToType)->getElementType();
4606   else
4607     toStdInitializerList = S.isStdInitializerList(ToType, &X);
4608   if (!X.isNull()) {
4609     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4610       Expr *Init = From->getInit(i);
4611       ImplicitConversionSequence ICS =
4612           TryCopyInitialization(S, Init, X, SuppressUserConversions,
4613                                 InOverloadResolution,
4614                                 AllowObjCWritebackConversion);
4615       // If a single element isn't convertible, fail.
4616       if (ICS.isBad()) {
4617         Result = ICS;
4618         break;
4619       }
4620       // Otherwise, look for the worst conversion.
4621       if (Result.isBad() ||
4622           CompareImplicitConversionSequences(S, From->getLocStart(), ICS,
4623                                              Result) ==
4624               ImplicitConversionSequence::Worse)
4625         Result = ICS;
4626     }
4627 
4628     // For an empty list, we won't have computed any conversion sequence.
4629     // Introduce the identity conversion sequence.
4630     if (From->getNumInits() == 0) {
4631       Result.setStandard();
4632       Result.Standard.setAsIdentityConversion();
4633       Result.Standard.setFromType(ToType);
4634       Result.Standard.setAllToTypes(ToType);
4635     }
4636 
4637     Result.setStdInitializerListElement(toStdInitializerList);
4638     return Result;
4639   }
4640 
4641   // C++14 [over.ics.list]p4:
4642   // C++11 [over.ics.list]p3:
4643   //   Otherwise, if the parameter is a non-aggregate class X and overload
4644   //   resolution chooses a single best constructor [...] the implicit
4645   //   conversion sequence is a user-defined conversion sequence. If multiple
4646   //   constructors are viable but none is better than the others, the
4647   //   implicit conversion sequence is a user-defined conversion sequence.
4648   if (ToType->isRecordType() && !ToType->isAggregateType()) {
4649     // This function can deal with initializer lists.
4650     return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4651                                     /*AllowExplicit=*/false,
4652                                     InOverloadResolution, /*CStyle=*/false,
4653                                     AllowObjCWritebackConversion,
4654                                     /*AllowObjCConversionOnExplicit=*/false);
4655   }
4656 
4657   // C++14 [over.ics.list]p5:
4658   // C++11 [over.ics.list]p4:
4659   //   Otherwise, if the parameter has an aggregate type which can be
4660   //   initialized from the initializer list [...] the implicit conversion
4661   //   sequence is a user-defined conversion sequence.
4662   if (ToType->isAggregateType()) {
4663     // Type is an aggregate, argument is an init list. At this point it comes
4664     // down to checking whether the initialization works.
4665     // FIXME: Find out whether this parameter is consumed or not.
4666     InitializedEntity Entity =
4667         InitializedEntity::InitializeParameter(S.Context, ToType,
4668                                                /*Consumed=*/false);
4669     if (S.CanPerformCopyInitialization(Entity, From)) {
4670       Result.setUserDefined();
4671       Result.UserDefined.Before.setAsIdentityConversion();
4672       // Initializer lists don't have a type.
4673       Result.UserDefined.Before.setFromType(QualType());
4674       Result.UserDefined.Before.setAllToTypes(QualType());
4675 
4676       Result.UserDefined.After.setAsIdentityConversion();
4677       Result.UserDefined.After.setFromType(ToType);
4678       Result.UserDefined.After.setAllToTypes(ToType);
4679       Result.UserDefined.ConversionFunction = nullptr;
4680     }
4681     return Result;
4682   }
4683 
4684   // C++14 [over.ics.list]p6:
4685   // C++11 [over.ics.list]p5:
4686   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4687   if (ToType->isReferenceType()) {
4688     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4689     // mention initializer lists in any way. So we go by what list-
4690     // initialization would do and try to extrapolate from that.
4691 
4692     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4693 
4694     // If the initializer list has a single element that is reference-related
4695     // to the parameter type, we initialize the reference from that.
4696     if (From->getNumInits() == 1) {
4697       Expr *Init = From->getInit(0);
4698 
4699       QualType T2 = Init->getType();
4700 
4701       // If the initializer is the address of an overloaded function, try
4702       // to resolve the overloaded function. If all goes well, T2 is the
4703       // type of the resulting function.
4704       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4705         DeclAccessPair Found;
4706         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4707                                    Init, ToType, false, Found))
4708           T2 = Fn->getType();
4709       }
4710 
4711       // Compute some basic properties of the types and the initializer.
4712       bool dummy1 = false;
4713       bool dummy2 = false;
4714       bool dummy3 = false;
4715       Sema::ReferenceCompareResult RefRelationship
4716         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4717                                          dummy2, dummy3);
4718 
4719       if (RefRelationship >= Sema::Ref_Related) {
4720         return TryReferenceInit(S, Init, ToType, /*FIXME*/From->getLocStart(),
4721                                 SuppressUserConversions,
4722                                 /*AllowExplicit=*/false);
4723       }
4724     }
4725 
4726     // Otherwise, we bind the reference to a temporary created from the
4727     // initializer list.
4728     Result = TryListConversion(S, From, T1, SuppressUserConversions,
4729                                InOverloadResolution,
4730                                AllowObjCWritebackConversion);
4731     if (Result.isFailure())
4732       return Result;
4733     assert(!Result.isEllipsis() &&
4734            "Sub-initialization cannot result in ellipsis conversion.");
4735 
4736     // Can we even bind to a temporary?
4737     if (ToType->isRValueReferenceType() ||
4738         (T1.isConstQualified() && !T1.isVolatileQualified())) {
4739       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4740                                             Result.UserDefined.After;
4741       SCS.ReferenceBinding = true;
4742       SCS.IsLvalueReference = ToType->isLValueReferenceType();
4743       SCS.BindsToRvalue = true;
4744       SCS.BindsToFunctionLvalue = false;
4745       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4746       SCS.ObjCLifetimeConversionBinding = false;
4747     } else
4748       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4749                     From, ToType);
4750     return Result;
4751   }
4752 
4753   // C++14 [over.ics.list]p7:
4754   // C++11 [over.ics.list]p6:
4755   //   Otherwise, if the parameter type is not a class:
4756   if (!ToType->isRecordType()) {
4757     //    - if the initializer list has one element that is not itself an
4758     //      initializer list, the implicit conversion sequence is the one
4759     //      required to convert the element to the parameter type.
4760     unsigned NumInits = From->getNumInits();
4761     if (NumInits == 1 && !isa<InitListExpr>(From->getInit(0)))
4762       Result = TryCopyInitialization(S, From->getInit(0), ToType,
4763                                      SuppressUserConversions,
4764                                      InOverloadResolution,
4765                                      AllowObjCWritebackConversion);
4766     //    - if the initializer list has no elements, the implicit conversion
4767     //      sequence is the identity conversion.
4768     else if (NumInits == 0) {
4769       Result.setStandard();
4770       Result.Standard.setAsIdentityConversion();
4771       Result.Standard.setFromType(ToType);
4772       Result.Standard.setAllToTypes(ToType);
4773     }
4774     return Result;
4775   }
4776 
4777   // C++14 [over.ics.list]p8:
4778   // C++11 [over.ics.list]p7:
4779   //   In all cases other than those enumerated above, no conversion is possible
4780   return Result;
4781 }
4782 
4783 /// TryCopyInitialization - Try to copy-initialize a value of type
4784 /// ToType from the expression From. Return the implicit conversion
4785 /// sequence required to pass this argument, which may be a bad
4786 /// conversion sequence (meaning that the argument cannot be passed to
4787 /// a parameter of this type). If @p SuppressUserConversions, then we
4788 /// do not permit any user-defined conversion sequences.
4789 static ImplicitConversionSequence
4790 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4791                       bool SuppressUserConversions,
4792                       bool InOverloadResolution,
4793                       bool AllowObjCWritebackConversion,
4794                       bool AllowExplicit) {
4795   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4796     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4797                              InOverloadResolution,AllowObjCWritebackConversion);
4798 
4799   if (ToType->isReferenceType())
4800     return TryReferenceInit(S, From, ToType,
4801                             /*FIXME:*/From->getLocStart(),
4802                             SuppressUserConversions,
4803                             AllowExplicit);
4804 
4805   return TryImplicitConversion(S, From, ToType,
4806                                SuppressUserConversions,
4807                                /*AllowExplicit=*/false,
4808                                InOverloadResolution,
4809                                /*CStyle=*/false,
4810                                AllowObjCWritebackConversion,
4811                                /*AllowObjCConversionOnExplicit=*/false);
4812 }
4813 
4814 static bool TryCopyInitialization(const CanQualType FromQTy,
4815                                   const CanQualType ToQTy,
4816                                   Sema &S,
4817                                   SourceLocation Loc,
4818                                   ExprValueKind FromVK) {
4819   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4820   ImplicitConversionSequence ICS =
4821     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4822 
4823   return !ICS.isBad();
4824 }
4825 
4826 /// TryObjectArgumentInitialization - Try to initialize the object
4827 /// parameter of the given member function (@c Method) from the
4828 /// expression @p From.
4829 static ImplicitConversionSequence
4830 TryObjectArgumentInitialization(Sema &S, SourceLocation Loc, QualType FromType,
4831                                 Expr::Classification FromClassification,
4832                                 CXXMethodDecl *Method,
4833                                 CXXRecordDecl *ActingContext) {
4834   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4835   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4836   //                 const volatile object.
4837   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4838     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4839   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4840 
4841   // Set up the conversion sequence as a "bad" conversion, to allow us
4842   // to exit early.
4843   ImplicitConversionSequence ICS;
4844 
4845   // We need to have an object of class type.
4846   if (const PointerType *PT = FromType->getAs<PointerType>()) {
4847     FromType = PT->getPointeeType();
4848 
4849     // When we had a pointer, it's implicitly dereferenced, so we
4850     // better have an lvalue.
4851     assert(FromClassification.isLValue());
4852   }
4853 
4854   assert(FromType->isRecordType());
4855 
4856   // C++0x [over.match.funcs]p4:
4857   //   For non-static member functions, the type of the implicit object
4858   //   parameter is
4859   //
4860   //     - "lvalue reference to cv X" for functions declared without a
4861   //        ref-qualifier or with the & ref-qualifier
4862   //     - "rvalue reference to cv X" for functions declared with the &&
4863   //        ref-qualifier
4864   //
4865   // where X is the class of which the function is a member and cv is the
4866   // cv-qualification on the member function declaration.
4867   //
4868   // However, when finding an implicit conversion sequence for the argument, we
4869   // are not allowed to create temporaries or perform user-defined conversions
4870   // (C++ [over.match.funcs]p5). We perform a simplified version of
4871   // reference binding here, that allows class rvalues to bind to
4872   // non-constant references.
4873 
4874   // First check the qualifiers.
4875   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4876   if (ImplicitParamType.getCVRQualifiers()
4877                                     != FromTypeCanon.getLocalCVRQualifiers() &&
4878       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4879     ICS.setBad(BadConversionSequence::bad_qualifiers,
4880                FromType, ImplicitParamType);
4881     return ICS;
4882   }
4883 
4884   // Check that we have either the same type or a derived type. It
4885   // affects the conversion rank.
4886   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4887   ImplicitConversionKind SecondKind;
4888   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4889     SecondKind = ICK_Identity;
4890   } else if (S.IsDerivedFrom(Loc, FromType, ClassType))
4891     SecondKind = ICK_Derived_To_Base;
4892   else {
4893     ICS.setBad(BadConversionSequence::unrelated_class,
4894                FromType, ImplicitParamType);
4895     return ICS;
4896   }
4897 
4898   // Check the ref-qualifier.
4899   switch (Method->getRefQualifier()) {
4900   case RQ_None:
4901     // Do nothing; we don't care about lvalueness or rvalueness.
4902     break;
4903 
4904   case RQ_LValue:
4905     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4906       // non-const lvalue reference cannot bind to an rvalue
4907       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4908                  ImplicitParamType);
4909       return ICS;
4910     }
4911     break;
4912 
4913   case RQ_RValue:
4914     if (!FromClassification.isRValue()) {
4915       // rvalue reference cannot bind to an lvalue
4916       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4917                  ImplicitParamType);
4918       return ICS;
4919     }
4920     break;
4921   }
4922 
4923   // Success. Mark this as a reference binding.
4924   ICS.setStandard();
4925   ICS.Standard.setAsIdentityConversion();
4926   ICS.Standard.Second = SecondKind;
4927   ICS.Standard.setFromType(FromType);
4928   ICS.Standard.setAllToTypes(ImplicitParamType);
4929   ICS.Standard.ReferenceBinding = true;
4930   ICS.Standard.DirectBinding = true;
4931   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4932   ICS.Standard.BindsToFunctionLvalue = false;
4933   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4934   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4935     = (Method->getRefQualifier() == RQ_None);
4936   return ICS;
4937 }
4938 
4939 /// PerformObjectArgumentInitialization - Perform initialization of
4940 /// the implicit object parameter for the given Method with the given
4941 /// expression.
4942 ExprResult
4943 Sema::PerformObjectArgumentInitialization(Expr *From,
4944                                           NestedNameSpecifier *Qualifier,
4945                                           NamedDecl *FoundDecl,
4946                                           CXXMethodDecl *Method) {
4947   QualType FromRecordType, DestType;
4948   QualType ImplicitParamRecordType  =
4949     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4950 
4951   Expr::Classification FromClassification;
4952   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4953     FromRecordType = PT->getPointeeType();
4954     DestType = Method->getThisType(Context);
4955     FromClassification = Expr::Classification::makeSimpleLValue();
4956   } else {
4957     FromRecordType = From->getType();
4958     DestType = ImplicitParamRecordType;
4959     FromClassification = From->Classify(Context);
4960   }
4961 
4962   // Note that we always use the true parent context when performing
4963   // the actual argument initialization.
4964   ImplicitConversionSequence ICS = TryObjectArgumentInitialization(
4965       *this, From->getLocStart(), From->getType(), FromClassification, Method,
4966       Method->getParent());
4967   if (ICS.isBad()) {
4968     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4969       Qualifiers FromQs = FromRecordType.getQualifiers();
4970       Qualifiers ToQs = DestType.getQualifiers();
4971       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4972       if (CVR) {
4973         Diag(From->getLocStart(),
4974              diag::err_member_function_call_bad_cvr)
4975           << Method->getDeclName() << FromRecordType << (CVR - 1)
4976           << From->getSourceRange();
4977         Diag(Method->getLocation(), diag::note_previous_decl)
4978           << Method->getDeclName();
4979         return ExprError();
4980       }
4981     }
4982 
4983     return Diag(From->getLocStart(),
4984                 diag::err_implicit_object_parameter_init)
4985        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4986   }
4987 
4988   if (ICS.Standard.Second == ICK_Derived_To_Base) {
4989     ExprResult FromRes =
4990       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4991     if (FromRes.isInvalid())
4992       return ExprError();
4993     From = FromRes.get();
4994   }
4995 
4996   if (!Context.hasSameType(From->getType(), DestType))
4997     From = ImpCastExprToType(From, DestType, CK_NoOp,
4998                              From->getValueKind()).get();
4999   return From;
5000 }
5001 
5002 /// TryContextuallyConvertToBool - Attempt to contextually convert the
5003 /// expression From to bool (C++0x [conv]p3).
5004 static ImplicitConversionSequence
5005 TryContextuallyConvertToBool(Sema &S, Expr *From) {
5006   return TryImplicitConversion(S, From, S.Context.BoolTy,
5007                                /*SuppressUserConversions=*/false,
5008                                /*AllowExplicit=*/true,
5009                                /*InOverloadResolution=*/false,
5010                                /*CStyle=*/false,
5011                                /*AllowObjCWritebackConversion=*/false,
5012                                /*AllowObjCConversionOnExplicit=*/false);
5013 }
5014 
5015 /// PerformContextuallyConvertToBool - Perform a contextual conversion
5016 /// of the expression From to bool (C++0x [conv]p3).
5017 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
5018   if (checkPlaceholderForOverload(*this, From))
5019     return ExprError();
5020 
5021   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
5022   if (!ICS.isBad())
5023     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
5024 
5025   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
5026     return Diag(From->getLocStart(),
5027                 diag::err_typecheck_bool_condition)
5028                   << From->getType() << From->getSourceRange();
5029   return ExprError();
5030 }
5031 
5032 /// Check that the specified conversion is permitted in a converted constant
5033 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
5034 /// is acceptable.
5035 static bool CheckConvertedConstantConversions(Sema &S,
5036                                               StandardConversionSequence &SCS) {
5037   // Since we know that the target type is an integral or unscoped enumeration
5038   // type, most conversion kinds are impossible. All possible First and Third
5039   // conversions are fine.
5040   switch (SCS.Second) {
5041   case ICK_Identity:
5042   case ICK_NoReturn_Adjustment:
5043   case ICK_Integral_Promotion:
5044   case ICK_Integral_Conversion: // Narrowing conversions are checked elsewhere.
5045     return true;
5046 
5047   case ICK_Boolean_Conversion:
5048     // Conversion from an integral or unscoped enumeration type to bool is
5049     // classified as ICK_Boolean_Conversion, but it's also arguably an integral
5050     // conversion, so we allow it in a converted constant expression.
5051     //
5052     // FIXME: Per core issue 1407, we should not allow this, but that breaks
5053     // a lot of popular code. We should at least add a warning for this
5054     // (non-conforming) extension.
5055     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
5056            SCS.getToType(2)->isBooleanType();
5057 
5058   case ICK_Pointer_Conversion:
5059   case ICK_Pointer_Member:
5060     // C++1z: null pointer conversions and null member pointer conversions are
5061     // only permitted if the source type is std::nullptr_t.
5062     return SCS.getFromType()->isNullPtrType();
5063 
5064   case ICK_Floating_Promotion:
5065   case ICK_Complex_Promotion:
5066   case ICK_Floating_Conversion:
5067   case ICK_Complex_Conversion:
5068   case ICK_Floating_Integral:
5069   case ICK_Compatible_Conversion:
5070   case ICK_Derived_To_Base:
5071   case ICK_Vector_Conversion:
5072   case ICK_Vector_Splat:
5073   case ICK_Complex_Real:
5074   case ICK_Block_Pointer_Conversion:
5075   case ICK_TransparentUnionConversion:
5076   case ICK_Writeback_Conversion:
5077   case ICK_Zero_Event_Conversion:
5078   case ICK_C_Only_Conversion:
5079     return false;
5080 
5081   case ICK_Lvalue_To_Rvalue:
5082   case ICK_Array_To_Pointer:
5083   case ICK_Function_To_Pointer:
5084     llvm_unreachable("found a first conversion kind in Second");
5085 
5086   case ICK_Qualification:
5087     llvm_unreachable("found a third conversion kind in Second");
5088 
5089   case ICK_Num_Conversion_Kinds:
5090     break;
5091   }
5092 
5093   llvm_unreachable("unknown conversion kind");
5094 }
5095 
5096 /// CheckConvertedConstantExpression - Check that the expression From is a
5097 /// converted constant expression of type T, perform the conversion and produce
5098 /// the converted expression, per C++11 [expr.const]p3.
5099 static ExprResult CheckConvertedConstantExpression(Sema &S, Expr *From,
5100                                                    QualType T, APValue &Value,
5101                                                    Sema::CCEKind CCE,
5102                                                    bool RequireInt) {
5103   assert(S.getLangOpts().CPlusPlus11 &&
5104          "converted constant expression outside C++11");
5105 
5106   if (checkPlaceholderForOverload(S, From))
5107     return ExprError();
5108 
5109   // C++1z [expr.const]p3:
5110   //  A converted constant expression of type T is an expression,
5111   //  implicitly converted to type T, where the converted
5112   //  expression is a constant expression and the implicit conversion
5113   //  sequence contains only [... list of conversions ...].
5114   ImplicitConversionSequence ICS =
5115     TryCopyInitialization(S, From, T,
5116                           /*SuppressUserConversions=*/false,
5117                           /*InOverloadResolution=*/false,
5118                           /*AllowObjcWritebackConversion=*/false,
5119                           /*AllowExplicit=*/false);
5120   StandardConversionSequence *SCS = nullptr;
5121   switch (ICS.getKind()) {
5122   case ImplicitConversionSequence::StandardConversion:
5123     SCS = &ICS.Standard;
5124     break;
5125   case ImplicitConversionSequence::UserDefinedConversion:
5126     // We are converting to a non-class type, so the Before sequence
5127     // must be trivial.
5128     SCS = &ICS.UserDefined.After;
5129     break;
5130   case ImplicitConversionSequence::AmbiguousConversion:
5131   case ImplicitConversionSequence::BadConversion:
5132     if (!S.DiagnoseMultipleUserDefinedConversion(From, T))
5133       return S.Diag(From->getLocStart(),
5134                     diag::err_typecheck_converted_constant_expression)
5135                 << From->getType() << From->getSourceRange() << T;
5136     return ExprError();
5137 
5138   case ImplicitConversionSequence::EllipsisConversion:
5139     llvm_unreachable("ellipsis conversion in converted constant expression");
5140   }
5141 
5142   // Check that we would only use permitted conversions.
5143   if (!CheckConvertedConstantConversions(S, *SCS)) {
5144     return S.Diag(From->getLocStart(),
5145                   diag::err_typecheck_converted_constant_expression_disallowed)
5146              << From->getType() << From->getSourceRange() << T;
5147   }
5148   // [...] and where the reference binding (if any) binds directly.
5149   if (SCS->ReferenceBinding && !SCS->DirectBinding) {
5150     return S.Diag(From->getLocStart(),
5151                   diag::err_typecheck_converted_constant_expression_indirect)
5152              << From->getType() << From->getSourceRange() << T;
5153   }
5154 
5155   ExprResult Result =
5156       S.PerformImplicitConversion(From, T, ICS, Sema::AA_Converting);
5157   if (Result.isInvalid())
5158     return Result;
5159 
5160   // Check for a narrowing implicit conversion.
5161   APValue PreNarrowingValue;
5162   QualType PreNarrowingType;
5163   switch (SCS->getNarrowingKind(S.Context, Result.get(), PreNarrowingValue,
5164                                 PreNarrowingType)) {
5165   case NK_Variable_Narrowing:
5166     // Implicit conversion to a narrower type, and the value is not a constant
5167     // expression. We'll diagnose this in a moment.
5168   case NK_Not_Narrowing:
5169     break;
5170 
5171   case NK_Constant_Narrowing:
5172     S.Diag(From->getLocStart(), diag::ext_cce_narrowing)
5173       << CCE << /*Constant*/1
5174       << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << T;
5175     break;
5176 
5177   case NK_Type_Narrowing:
5178     S.Diag(From->getLocStart(), diag::ext_cce_narrowing)
5179       << CCE << /*Constant*/0 << From->getType() << T;
5180     break;
5181   }
5182 
5183   // Check the expression is a constant expression.
5184   SmallVector<PartialDiagnosticAt, 8> Notes;
5185   Expr::EvalResult Eval;
5186   Eval.Diag = &Notes;
5187 
5188   if ((T->isReferenceType()
5189            ? !Result.get()->EvaluateAsLValue(Eval, S.Context)
5190            : !Result.get()->EvaluateAsRValue(Eval, S.Context)) ||
5191       (RequireInt && !Eval.Val.isInt())) {
5192     // The expression can't be folded, so we can't keep it at this position in
5193     // the AST.
5194     Result = ExprError();
5195   } else {
5196     Value = Eval.Val;
5197 
5198     if (Notes.empty()) {
5199       // It's a constant expression.
5200       return Result;
5201     }
5202   }
5203 
5204   // It's not a constant expression. Produce an appropriate diagnostic.
5205   if (Notes.size() == 1 &&
5206       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
5207     S.Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
5208   else {
5209     S.Diag(From->getLocStart(), diag::err_expr_not_cce)
5210       << CCE << From->getSourceRange();
5211     for (unsigned I = 0; I < Notes.size(); ++I)
5212       S.Diag(Notes[I].first, Notes[I].second);
5213   }
5214   return ExprError();
5215 }
5216 
5217 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
5218                                                   APValue &Value, CCEKind CCE) {
5219   return ::CheckConvertedConstantExpression(*this, From, T, Value, CCE, false);
5220 }
5221 
5222 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
5223                                                   llvm::APSInt &Value,
5224                                                   CCEKind CCE) {
5225   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
5226 
5227   APValue V;
5228   auto R = ::CheckConvertedConstantExpression(*this, From, T, V, CCE, true);
5229   if (!R.isInvalid())
5230     Value = V.getInt();
5231   return R;
5232 }
5233 
5234 
5235 /// dropPointerConversions - If the given standard conversion sequence
5236 /// involves any pointer conversions, remove them.  This may change
5237 /// the result type of the conversion sequence.
5238 static void dropPointerConversion(StandardConversionSequence &SCS) {
5239   if (SCS.Second == ICK_Pointer_Conversion) {
5240     SCS.Second = ICK_Identity;
5241     SCS.Third = ICK_Identity;
5242     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
5243   }
5244 }
5245 
5246 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
5247 /// convert the expression From to an Objective-C pointer type.
5248 static ImplicitConversionSequence
5249 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
5250   // Do an implicit conversion to 'id'.
5251   QualType Ty = S.Context.getObjCIdType();
5252   ImplicitConversionSequence ICS
5253     = TryImplicitConversion(S, From, Ty,
5254                             // FIXME: Are these flags correct?
5255                             /*SuppressUserConversions=*/false,
5256                             /*AllowExplicit=*/true,
5257                             /*InOverloadResolution=*/false,
5258                             /*CStyle=*/false,
5259                             /*AllowObjCWritebackConversion=*/false,
5260                             /*AllowObjCConversionOnExplicit=*/true);
5261 
5262   // Strip off any final conversions to 'id'.
5263   switch (ICS.getKind()) {
5264   case ImplicitConversionSequence::BadConversion:
5265   case ImplicitConversionSequence::AmbiguousConversion:
5266   case ImplicitConversionSequence::EllipsisConversion:
5267     break;
5268 
5269   case ImplicitConversionSequence::UserDefinedConversion:
5270     dropPointerConversion(ICS.UserDefined.After);
5271     break;
5272 
5273   case ImplicitConversionSequence::StandardConversion:
5274     dropPointerConversion(ICS.Standard);
5275     break;
5276   }
5277 
5278   return ICS;
5279 }
5280 
5281 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
5282 /// conversion of the expression From to an Objective-C pointer type.
5283 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5284   if (checkPlaceholderForOverload(*this, From))
5285     return ExprError();
5286 
5287   QualType Ty = Context.getObjCIdType();
5288   ImplicitConversionSequence ICS =
5289     TryContextuallyConvertToObjCPointer(*this, From);
5290   if (!ICS.isBad())
5291     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5292   return ExprError();
5293 }
5294 
5295 /// Determine whether the provided type is an integral type, or an enumeration
5296 /// type of a permitted flavor.
5297 bool Sema::ICEConvertDiagnoser::match(QualType T) {
5298   return AllowScopedEnumerations ? T->isIntegralOrEnumerationType()
5299                                  : T->isIntegralOrUnscopedEnumerationType();
5300 }
5301 
5302 static ExprResult
5303 diagnoseAmbiguousConversion(Sema &SemaRef, SourceLocation Loc, Expr *From,
5304                             Sema::ContextualImplicitConverter &Converter,
5305                             QualType T, UnresolvedSetImpl &ViableConversions) {
5306 
5307   if (Converter.Suppress)
5308     return ExprError();
5309 
5310   Converter.diagnoseAmbiguous(SemaRef, Loc, T) << From->getSourceRange();
5311   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5312     CXXConversionDecl *Conv =
5313         cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5314     QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5315     Converter.noteAmbiguous(SemaRef, Conv, ConvTy);
5316   }
5317   return From;
5318 }
5319 
5320 static bool
5321 diagnoseNoViableConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5322                            Sema::ContextualImplicitConverter &Converter,
5323                            QualType T, bool HadMultipleCandidates,
5324                            UnresolvedSetImpl &ExplicitConversions) {
5325   if (ExplicitConversions.size() == 1 && !Converter.Suppress) {
5326     DeclAccessPair Found = ExplicitConversions[0];
5327     CXXConversionDecl *Conversion =
5328         cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5329 
5330     // The user probably meant to invoke the given explicit
5331     // conversion; use it.
5332     QualType ConvTy = Conversion->getConversionType().getNonReferenceType();
5333     std::string TypeStr;
5334     ConvTy.getAsStringInternal(TypeStr, SemaRef.getPrintingPolicy());
5335 
5336     Converter.diagnoseExplicitConv(SemaRef, Loc, T, ConvTy)
5337         << FixItHint::CreateInsertion(From->getLocStart(),
5338                                       "static_cast<" + TypeStr + ">(")
5339         << FixItHint::CreateInsertion(
5340                SemaRef.getLocForEndOfToken(From->getLocEnd()), ")");
5341     Converter.noteExplicitConv(SemaRef, Conversion, ConvTy);
5342 
5343     // If we aren't in a SFINAE context, build a call to the
5344     // explicit conversion function.
5345     if (SemaRef.isSFINAEContext())
5346       return true;
5347 
5348     SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, nullptr, Found);
5349     ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5350                                                        HadMultipleCandidates);
5351     if (Result.isInvalid())
5352       return true;
5353     // Record usage of conversion in an implicit cast.
5354     From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5355                                     CK_UserDefinedConversion, Result.get(),
5356                                     nullptr, Result.get()->getValueKind());
5357   }
5358   return false;
5359 }
5360 
5361 static bool recordConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5362                              Sema::ContextualImplicitConverter &Converter,
5363                              QualType T, bool HadMultipleCandidates,
5364                              DeclAccessPair &Found) {
5365   CXXConversionDecl *Conversion =
5366       cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5367   SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, nullptr, Found);
5368 
5369   QualType ToType = Conversion->getConversionType().getNonReferenceType();
5370   if (!Converter.SuppressConversion) {
5371     if (SemaRef.isSFINAEContext())
5372       return true;
5373 
5374     Converter.diagnoseConversion(SemaRef, Loc, T, ToType)
5375         << From->getSourceRange();
5376   }
5377 
5378   ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5379                                                      HadMultipleCandidates);
5380   if (Result.isInvalid())
5381     return true;
5382   // Record usage of conversion in an implicit cast.
5383   From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5384                                   CK_UserDefinedConversion, Result.get(),
5385                                   nullptr, Result.get()->getValueKind());
5386   return false;
5387 }
5388 
5389 static ExprResult finishContextualImplicitConversion(
5390     Sema &SemaRef, SourceLocation Loc, Expr *From,
5391     Sema::ContextualImplicitConverter &Converter) {
5392   if (!Converter.match(From->getType()) && !Converter.Suppress)
5393     Converter.diagnoseNoMatch(SemaRef, Loc, From->getType())
5394         << From->getSourceRange();
5395 
5396   return SemaRef.DefaultLvalueConversion(From);
5397 }
5398 
5399 static void
5400 collectViableConversionCandidates(Sema &SemaRef, Expr *From, QualType ToType,
5401                                   UnresolvedSetImpl &ViableConversions,
5402                                   OverloadCandidateSet &CandidateSet) {
5403   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5404     DeclAccessPair FoundDecl = ViableConversions[I];
5405     NamedDecl *D = FoundDecl.getDecl();
5406     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
5407     if (isa<UsingShadowDecl>(D))
5408       D = cast<UsingShadowDecl>(D)->getTargetDecl();
5409 
5410     CXXConversionDecl *Conv;
5411     FunctionTemplateDecl *ConvTemplate;
5412     if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
5413       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5414     else
5415       Conv = cast<CXXConversionDecl>(D);
5416 
5417     if (ConvTemplate)
5418       SemaRef.AddTemplateConversionCandidate(
5419         ConvTemplate, FoundDecl, ActingContext, From, ToType, CandidateSet,
5420         /*AllowObjCConversionOnExplicit=*/false);
5421     else
5422       SemaRef.AddConversionCandidate(Conv, FoundDecl, ActingContext, From,
5423                                      ToType, CandidateSet,
5424                                      /*AllowObjCConversionOnExplicit=*/false);
5425   }
5426 }
5427 
5428 /// \brief Attempt to convert the given expression to a type which is accepted
5429 /// by the given converter.
5430 ///
5431 /// This routine will attempt to convert an expression of class type to a
5432 /// type accepted by the specified converter. In C++11 and before, the class
5433 /// must have a single non-explicit conversion function converting to a matching
5434 /// type. In C++1y, there can be multiple such conversion functions, but only
5435 /// one target type.
5436 ///
5437 /// \param Loc The source location of the construct that requires the
5438 /// conversion.
5439 ///
5440 /// \param From The expression we're converting from.
5441 ///
5442 /// \param Converter Used to control and diagnose the conversion process.
5443 ///
5444 /// \returns The expression, converted to an integral or enumeration type if
5445 /// successful.
5446 ExprResult Sema::PerformContextualImplicitConversion(
5447     SourceLocation Loc, Expr *From, ContextualImplicitConverter &Converter) {
5448   // We can't perform any more checking for type-dependent expressions.
5449   if (From->isTypeDependent())
5450     return From;
5451 
5452   // Process placeholders immediately.
5453   if (From->hasPlaceholderType()) {
5454     ExprResult result = CheckPlaceholderExpr(From);
5455     if (result.isInvalid())
5456       return result;
5457     From = result.get();
5458   }
5459 
5460   // If the expression already has a matching type, we're golden.
5461   QualType T = From->getType();
5462   if (Converter.match(T))
5463     return DefaultLvalueConversion(From);
5464 
5465   // FIXME: Check for missing '()' if T is a function type?
5466 
5467   // We can only perform contextual implicit conversions on objects of class
5468   // type.
5469   const RecordType *RecordTy = T->getAs<RecordType>();
5470   if (!RecordTy || !getLangOpts().CPlusPlus) {
5471     if (!Converter.Suppress)
5472       Converter.diagnoseNoMatch(*this, Loc, T) << From->getSourceRange();
5473     return From;
5474   }
5475 
5476   // We must have a complete class type.
5477   struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5478     ContextualImplicitConverter &Converter;
5479     Expr *From;
5480 
5481     TypeDiagnoserPartialDiag(ContextualImplicitConverter &Converter, Expr *From)
5482         : Converter(Converter), From(From) {}
5483 
5484     void diagnose(Sema &S, SourceLocation Loc, QualType T) override {
5485       Converter.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5486     }
5487   } IncompleteDiagnoser(Converter, From);
5488 
5489   if (Converter.Suppress ? !isCompleteType(Loc, T)
5490                          : RequireCompleteType(Loc, T, IncompleteDiagnoser))
5491     return From;
5492 
5493   // Look for a conversion to an integral or enumeration type.
5494   UnresolvedSet<4>
5495       ViableConversions; // These are *potentially* viable in C++1y.
5496   UnresolvedSet<4> ExplicitConversions;
5497   const auto &Conversions =
5498       cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5499 
5500   bool HadMultipleCandidates =
5501       (std::distance(Conversions.begin(), Conversions.end()) > 1);
5502 
5503   // To check that there is only one target type, in C++1y:
5504   QualType ToType;
5505   bool HasUniqueTargetType = true;
5506 
5507   // Collect explicit or viable (potentially in C++1y) conversions.
5508   for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) {
5509     NamedDecl *D = (*I)->getUnderlyingDecl();
5510     CXXConversionDecl *Conversion;
5511     FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D);
5512     if (ConvTemplate) {
5513       if (getLangOpts().CPlusPlus14)
5514         Conversion = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5515       else
5516         continue; // C++11 does not consider conversion operator templates(?).
5517     } else
5518       Conversion = cast<CXXConversionDecl>(D);
5519 
5520     assert((!ConvTemplate || getLangOpts().CPlusPlus14) &&
5521            "Conversion operator templates are considered potentially "
5522            "viable in C++1y");
5523 
5524     QualType CurToType = Conversion->getConversionType().getNonReferenceType();
5525     if (Converter.match(CurToType) || ConvTemplate) {
5526 
5527       if (Conversion->isExplicit()) {
5528         // FIXME: For C++1y, do we need this restriction?
5529         // cf. diagnoseNoViableConversion()
5530         if (!ConvTemplate)
5531           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5532       } else {
5533         if (!ConvTemplate && getLangOpts().CPlusPlus14) {
5534           if (ToType.isNull())
5535             ToType = CurToType.getUnqualifiedType();
5536           else if (HasUniqueTargetType &&
5537                    (CurToType.getUnqualifiedType() != ToType))
5538             HasUniqueTargetType = false;
5539         }
5540         ViableConversions.addDecl(I.getDecl(), I.getAccess());
5541       }
5542     }
5543   }
5544 
5545   if (getLangOpts().CPlusPlus14) {
5546     // C++1y [conv]p6:
5547     // ... An expression e of class type E appearing in such a context
5548     // is said to be contextually implicitly converted to a specified
5549     // type T and is well-formed if and only if e can be implicitly
5550     // converted to a type T that is determined as follows: E is searched
5551     // for conversion functions whose return type is cv T or reference to
5552     // cv T such that T is allowed by the context. There shall be
5553     // exactly one such T.
5554 
5555     // If no unique T is found:
5556     if (ToType.isNull()) {
5557       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5558                                      HadMultipleCandidates,
5559                                      ExplicitConversions))
5560         return ExprError();
5561       return finishContextualImplicitConversion(*this, Loc, From, Converter);
5562     }
5563 
5564     // If more than one unique Ts are found:
5565     if (!HasUniqueTargetType)
5566       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5567                                          ViableConversions);
5568 
5569     // If one unique T is found:
5570     // First, build a candidate set from the previously recorded
5571     // potentially viable conversions.
5572     OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal);
5573     collectViableConversionCandidates(*this, From, ToType, ViableConversions,
5574                                       CandidateSet);
5575 
5576     // Then, perform overload resolution over the candidate set.
5577     OverloadCandidateSet::iterator Best;
5578     switch (CandidateSet.BestViableFunction(*this, Loc, Best)) {
5579     case OR_Success: {
5580       // Apply this conversion.
5581       DeclAccessPair Found =
5582           DeclAccessPair::make(Best->Function, Best->FoundDecl.getAccess());
5583       if (recordConversion(*this, Loc, From, Converter, T,
5584                            HadMultipleCandidates, Found))
5585         return ExprError();
5586       break;
5587     }
5588     case OR_Ambiguous:
5589       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5590                                          ViableConversions);
5591     case OR_No_Viable_Function:
5592       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5593                                      HadMultipleCandidates,
5594                                      ExplicitConversions))
5595         return ExprError();
5596     // fall through 'OR_Deleted' case.
5597     case OR_Deleted:
5598       // We'll complain below about a non-integral condition type.
5599       break;
5600     }
5601   } else {
5602     switch (ViableConversions.size()) {
5603     case 0: {
5604       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5605                                      HadMultipleCandidates,
5606                                      ExplicitConversions))
5607         return ExprError();
5608 
5609       // We'll complain below about a non-integral condition type.
5610       break;
5611     }
5612     case 1: {
5613       // Apply this conversion.
5614       DeclAccessPair Found = ViableConversions[0];
5615       if (recordConversion(*this, Loc, From, Converter, T,
5616                            HadMultipleCandidates, Found))
5617         return ExprError();
5618       break;
5619     }
5620     default:
5621       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5622                                          ViableConversions);
5623     }
5624   }
5625 
5626   return finishContextualImplicitConversion(*this, Loc, From, Converter);
5627 }
5628 
5629 /// IsAcceptableNonMemberOperatorCandidate - Determine whether Fn is
5630 /// an acceptable non-member overloaded operator for a call whose
5631 /// arguments have types T1 (and, if non-empty, T2). This routine
5632 /// implements the check in C++ [over.match.oper]p3b2 concerning
5633 /// enumeration types.
5634 static bool IsAcceptableNonMemberOperatorCandidate(ASTContext &Context,
5635                                                    FunctionDecl *Fn,
5636                                                    ArrayRef<Expr *> Args) {
5637   QualType T1 = Args[0]->getType();
5638   QualType T2 = Args.size() > 1 ? Args[1]->getType() : QualType();
5639 
5640   if (T1->isDependentType() || (!T2.isNull() && T2->isDependentType()))
5641     return true;
5642 
5643   if (T1->isRecordType() || (!T2.isNull() && T2->isRecordType()))
5644     return true;
5645 
5646   const FunctionProtoType *Proto = Fn->getType()->getAs<FunctionProtoType>();
5647   if (Proto->getNumParams() < 1)
5648     return false;
5649 
5650   if (T1->isEnumeralType()) {
5651     QualType ArgType = Proto->getParamType(0).getNonReferenceType();
5652     if (Context.hasSameUnqualifiedType(T1, ArgType))
5653       return true;
5654   }
5655 
5656   if (Proto->getNumParams() < 2)
5657     return false;
5658 
5659   if (!T2.isNull() && T2->isEnumeralType()) {
5660     QualType ArgType = Proto->getParamType(1).getNonReferenceType();
5661     if (Context.hasSameUnqualifiedType(T2, ArgType))
5662       return true;
5663   }
5664 
5665   return false;
5666 }
5667 
5668 /// AddOverloadCandidate - Adds the given function to the set of
5669 /// candidate functions, using the given function call arguments.  If
5670 /// @p SuppressUserConversions, then don't allow user-defined
5671 /// conversions via constructors or conversion operators.
5672 ///
5673 /// \param PartialOverloading true if we are performing "partial" overloading
5674 /// based on an incomplete set of function arguments. This feature is used by
5675 /// code completion.
5676 void
5677 Sema::AddOverloadCandidate(FunctionDecl *Function,
5678                            DeclAccessPair FoundDecl,
5679                            ArrayRef<Expr *> Args,
5680                            OverloadCandidateSet &CandidateSet,
5681                            bool SuppressUserConversions,
5682                            bool PartialOverloading,
5683                            bool AllowExplicit) {
5684   const FunctionProtoType *Proto
5685     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5686   assert(Proto && "Functions without a prototype cannot be overloaded");
5687   assert(!Function->getDescribedFunctionTemplate() &&
5688          "Use AddTemplateOverloadCandidate for function templates");
5689 
5690   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5691     if (!isa<CXXConstructorDecl>(Method)) {
5692       // If we get here, it's because we're calling a member function
5693       // that is named without a member access expression (e.g.,
5694       // "this->f") that was either written explicitly or created
5695       // implicitly. This can happen with a qualified call to a member
5696       // function, e.g., X::f(). We use an empty type for the implied
5697       // object argument (C++ [over.call.func]p3), and the acting context
5698       // is irrelevant.
5699       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5700                          QualType(), Expr::Classification::makeSimpleLValue(),
5701                          Args, CandidateSet, SuppressUserConversions,
5702                          PartialOverloading);
5703       return;
5704     }
5705     // We treat a constructor like a non-member function, since its object
5706     // argument doesn't participate in overload resolution.
5707   }
5708 
5709   if (!CandidateSet.isNewCandidate(Function))
5710     return;
5711 
5712   // C++ [over.match.oper]p3:
5713   //   if no operand has a class type, only those non-member functions in the
5714   //   lookup set that have a first parameter of type T1 or "reference to
5715   //   (possibly cv-qualified) T1", when T1 is an enumeration type, or (if there
5716   //   is a right operand) a second parameter of type T2 or "reference to
5717   //   (possibly cv-qualified) T2", when T2 is an enumeration type, are
5718   //   candidate functions.
5719   if (CandidateSet.getKind() == OverloadCandidateSet::CSK_Operator &&
5720       !IsAcceptableNonMemberOperatorCandidate(Context, Function, Args))
5721     return;
5722 
5723   // C++11 [class.copy]p11: [DR1402]
5724   //   A defaulted move constructor that is defined as deleted is ignored by
5725   //   overload resolution.
5726   CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function);
5727   if (Constructor && Constructor->isDefaulted() && Constructor->isDeleted() &&
5728       Constructor->isMoveConstructor())
5729     return;
5730 
5731   // Overload resolution is always an unevaluated context.
5732   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5733 
5734   // Add this candidate
5735   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5736   Candidate.FoundDecl = FoundDecl;
5737   Candidate.Function = Function;
5738   Candidate.Viable = true;
5739   Candidate.IsSurrogate = false;
5740   Candidate.IgnoreObjectArgument = false;
5741   Candidate.ExplicitCallArguments = Args.size();
5742 
5743   if (Constructor) {
5744     // C++ [class.copy]p3:
5745     //   A member function template is never instantiated to perform the copy
5746     //   of a class object to an object of its class type.
5747     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5748     if (Args.size() == 1 && Constructor->isSpecializationCopyingObject() &&
5749         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5750          IsDerivedFrom(Args[0]->getLocStart(), Args[0]->getType(),
5751                        ClassType))) {
5752       Candidate.Viable = false;
5753       Candidate.FailureKind = ovl_fail_illegal_constructor;
5754       return;
5755     }
5756   }
5757 
5758   unsigned NumParams = Proto->getNumParams();
5759 
5760   // (C++ 13.3.2p2): A candidate function having fewer than m
5761   // parameters is viable only if it has an ellipsis in its parameter
5762   // list (8.3.5).
5763   if (TooManyArguments(NumParams, Args.size(), PartialOverloading) &&
5764       !Proto->isVariadic()) {
5765     Candidate.Viable = false;
5766     Candidate.FailureKind = ovl_fail_too_many_arguments;
5767     return;
5768   }
5769 
5770   // (C++ 13.3.2p2): A candidate function having more than m parameters
5771   // is viable only if the (m+1)st parameter has a default argument
5772   // (8.3.6). For the purposes of overload resolution, the
5773   // parameter list is truncated on the right, so that there are
5774   // exactly m parameters.
5775   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5776   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5777     // Not enough arguments.
5778     Candidate.Viable = false;
5779     Candidate.FailureKind = ovl_fail_too_few_arguments;
5780     return;
5781   }
5782 
5783   // (CUDA B.1): Check for invalid calls between targets.
5784   if (getLangOpts().CUDA)
5785     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5786       // Skip the check for callers that are implicit members, because in this
5787       // case we may not yet know what the member's target is; the target is
5788       // inferred for the member automatically, based on the bases and fields of
5789       // the class.
5790       if (!Caller->isImplicit() && CheckCUDATarget(Caller, Function)) {
5791         Candidate.Viable = false;
5792         Candidate.FailureKind = ovl_fail_bad_target;
5793         return;
5794       }
5795 
5796   // Determine the implicit conversion sequences for each of the
5797   // arguments.
5798   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5799     if (ArgIdx < NumParams) {
5800       // (C++ 13.3.2p3): for F to be a viable function, there shall
5801       // exist for each argument an implicit conversion sequence
5802       // (13.3.3.1) that converts that argument to the corresponding
5803       // parameter of F.
5804       QualType ParamType = Proto->getParamType(ArgIdx);
5805       Candidate.Conversions[ArgIdx]
5806         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5807                                 SuppressUserConversions,
5808                                 /*InOverloadResolution=*/true,
5809                                 /*AllowObjCWritebackConversion=*/
5810                                   getLangOpts().ObjCAutoRefCount,
5811                                 AllowExplicit);
5812       if (Candidate.Conversions[ArgIdx].isBad()) {
5813         Candidate.Viable = false;
5814         Candidate.FailureKind = ovl_fail_bad_conversion;
5815         return;
5816       }
5817     } else {
5818       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5819       // argument for which there is no corresponding parameter is
5820       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5821       Candidate.Conversions[ArgIdx].setEllipsis();
5822     }
5823   }
5824 
5825   if (EnableIfAttr *FailedAttr = CheckEnableIf(Function, Args)) {
5826     Candidate.Viable = false;
5827     Candidate.FailureKind = ovl_fail_enable_if;
5828     Candidate.DeductionFailure.Data = FailedAttr;
5829     return;
5830   }
5831 }
5832 
5833 ObjCMethodDecl *Sema::SelectBestMethod(Selector Sel, MultiExprArg Args,
5834                                        bool IsInstance) {
5835   SmallVector<ObjCMethodDecl*, 4> Methods;
5836   if (!CollectMultipleMethodsInGlobalPool(Sel, Methods, IsInstance))
5837     return nullptr;
5838 
5839   for (unsigned b = 0, e = Methods.size(); b < e; b++) {
5840     bool Match = true;
5841     ObjCMethodDecl *Method = Methods[b];
5842     unsigned NumNamedArgs = Sel.getNumArgs();
5843     // Method might have more arguments than selector indicates. This is due
5844     // to addition of c-style arguments in method.
5845     if (Method->param_size() > NumNamedArgs)
5846       NumNamedArgs = Method->param_size();
5847     if (Args.size() < NumNamedArgs)
5848       continue;
5849 
5850     for (unsigned i = 0; i < NumNamedArgs; i++) {
5851       // We can't do any type-checking on a type-dependent argument.
5852       if (Args[i]->isTypeDependent()) {
5853         Match = false;
5854         break;
5855       }
5856 
5857       ParmVarDecl *param = Method->parameters()[i];
5858       Expr *argExpr = Args[i];
5859       assert(argExpr && "SelectBestMethod(): missing expression");
5860 
5861       // Strip the unbridged-cast placeholder expression off unless it's
5862       // a consumed argument.
5863       if (argExpr->hasPlaceholderType(BuiltinType::ARCUnbridgedCast) &&
5864           !param->hasAttr<CFConsumedAttr>())
5865         argExpr = stripARCUnbridgedCast(argExpr);
5866 
5867       // If the parameter is __unknown_anytype, move on to the next method.
5868       if (param->getType() == Context.UnknownAnyTy) {
5869         Match = false;
5870         break;
5871       }
5872 
5873       ImplicitConversionSequence ConversionState
5874         = TryCopyInitialization(*this, argExpr, param->getType(),
5875                                 /*SuppressUserConversions*/false,
5876                                 /*InOverloadResolution=*/true,
5877                                 /*AllowObjCWritebackConversion=*/
5878                                 getLangOpts().ObjCAutoRefCount,
5879                                 /*AllowExplicit*/false);
5880         if (ConversionState.isBad()) {
5881           Match = false;
5882           break;
5883         }
5884     }
5885     // Promote additional arguments to variadic methods.
5886     if (Match && Method->isVariadic()) {
5887       for (unsigned i = NumNamedArgs, e = Args.size(); i < e; ++i) {
5888         if (Args[i]->isTypeDependent()) {
5889           Match = false;
5890           break;
5891         }
5892         ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod,
5893                                                           nullptr);
5894         if (Arg.isInvalid()) {
5895           Match = false;
5896           break;
5897         }
5898       }
5899     } else {
5900       // Check for extra arguments to non-variadic methods.
5901       if (Args.size() != NumNamedArgs)
5902         Match = false;
5903       else if (Match && NumNamedArgs == 0 && Methods.size() > 1) {
5904         // Special case when selectors have no argument. In this case, select
5905         // one with the most general result type of 'id'.
5906         for (unsigned b = 0, e = Methods.size(); b < e; b++) {
5907           QualType ReturnT = Methods[b]->getReturnType();
5908           if (ReturnT->isObjCIdType())
5909             return Methods[b];
5910         }
5911       }
5912     }
5913 
5914     if (Match)
5915       return Method;
5916   }
5917   return nullptr;
5918 }
5919 
5920 // specific_attr_iterator iterates over enable_if attributes in reverse, and
5921 // enable_if is order-sensitive. As a result, we need to reverse things
5922 // sometimes. Size of 4 elements is arbitrary.
5923 static SmallVector<EnableIfAttr *, 4>
5924 getOrderedEnableIfAttrs(const FunctionDecl *Function) {
5925   SmallVector<EnableIfAttr *, 4> Result;
5926   if (!Function->hasAttrs())
5927     return Result;
5928 
5929   const auto &FuncAttrs = Function->getAttrs();
5930   for (Attr *Attr : FuncAttrs)
5931     if (auto *EnableIf = dyn_cast<EnableIfAttr>(Attr))
5932       Result.push_back(EnableIf);
5933 
5934   std::reverse(Result.begin(), Result.end());
5935   return Result;
5936 }
5937 
5938 EnableIfAttr *Sema::CheckEnableIf(FunctionDecl *Function, ArrayRef<Expr *> Args,
5939                                   bool MissingImplicitThis) {
5940   auto EnableIfAttrs = getOrderedEnableIfAttrs(Function);
5941   if (EnableIfAttrs.empty())
5942     return nullptr;
5943 
5944   SFINAETrap Trap(*this);
5945   SmallVector<Expr *, 16> ConvertedArgs;
5946   bool InitializationFailed = false;
5947   bool ContainsValueDependentExpr = false;
5948 
5949   // Convert the arguments.
5950   for (unsigned i = 0, e = Args.size(); i != e; ++i) {
5951     if (i == 0 && !MissingImplicitThis && isa<CXXMethodDecl>(Function) &&
5952         !cast<CXXMethodDecl>(Function)->isStatic() &&
5953         !isa<CXXConstructorDecl>(Function)) {
5954       CXXMethodDecl *Method = cast<CXXMethodDecl>(Function);
5955       ExprResult R =
5956         PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/nullptr,
5957                                             Method, Method);
5958       if (R.isInvalid()) {
5959         InitializationFailed = true;
5960         break;
5961       }
5962       ContainsValueDependentExpr |= R.get()->isValueDependent();
5963       ConvertedArgs.push_back(R.get());
5964     } else {
5965       ExprResult R =
5966         PerformCopyInitialization(InitializedEntity::InitializeParameter(
5967                                                 Context,
5968                                                 Function->getParamDecl(i)),
5969                                   SourceLocation(),
5970                                   Args[i]);
5971       if (R.isInvalid()) {
5972         InitializationFailed = true;
5973         break;
5974       }
5975       ContainsValueDependentExpr |= R.get()->isValueDependent();
5976       ConvertedArgs.push_back(R.get());
5977     }
5978   }
5979 
5980   if (InitializationFailed || Trap.hasErrorOccurred())
5981     return EnableIfAttrs[0];
5982 
5983   // Push default arguments if needed.
5984   if (!Function->isVariadic() && Args.size() < Function->getNumParams()) {
5985     for (unsigned i = Args.size(), e = Function->getNumParams(); i != e; ++i) {
5986       ParmVarDecl *P = Function->getParamDecl(i);
5987       ExprResult R = PerformCopyInitialization(
5988           InitializedEntity::InitializeParameter(Context,
5989                                                  Function->getParamDecl(i)),
5990           SourceLocation(),
5991           P->hasUninstantiatedDefaultArg() ? P->getUninstantiatedDefaultArg()
5992                                            : P->getDefaultArg());
5993       if (R.isInvalid()) {
5994         InitializationFailed = true;
5995         break;
5996       }
5997       ContainsValueDependentExpr |= R.get()->isValueDependent();
5998       ConvertedArgs.push_back(R.get());
5999     }
6000 
6001     if (InitializationFailed || Trap.hasErrorOccurred())
6002       return EnableIfAttrs[0];
6003   }
6004 
6005   for (auto *EIA : EnableIfAttrs) {
6006     APValue Result;
6007     if (EIA->getCond()->isValueDependent()) {
6008       // Don't even try now, we'll examine it after instantiation.
6009       continue;
6010     }
6011 
6012     if (!EIA->getCond()->EvaluateWithSubstitution(
6013             Result, Context, Function, llvm::makeArrayRef(ConvertedArgs))) {
6014       if (!ContainsValueDependentExpr)
6015         return EIA;
6016     } else if (!Result.isInt() || !Result.getInt().getBoolValue()) {
6017       return EIA;
6018     }
6019   }
6020   return nullptr;
6021 }
6022 
6023 /// \brief Add all of the function declarations in the given function set to
6024 /// the overload candidate set.
6025 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
6026                                  ArrayRef<Expr *> Args,
6027                                  OverloadCandidateSet& CandidateSet,
6028                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
6029                                  bool SuppressUserConversions,
6030                                  bool PartialOverloading) {
6031   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
6032     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
6033     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
6034       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
6035         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
6036                            cast<CXXMethodDecl>(FD)->getParent(),
6037                            Args[0]->getType(), Args[0]->Classify(Context),
6038                            Args.slice(1), CandidateSet,
6039                            SuppressUserConversions, PartialOverloading);
6040       else
6041         AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
6042                              SuppressUserConversions, PartialOverloading);
6043     } else {
6044       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
6045       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
6046           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
6047         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
6048                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
6049                                    ExplicitTemplateArgs,
6050                                    Args[0]->getType(),
6051                                    Args[0]->Classify(Context), Args.slice(1),
6052                                    CandidateSet, SuppressUserConversions,
6053                                    PartialOverloading);
6054       else
6055         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
6056                                      ExplicitTemplateArgs, Args,
6057                                      CandidateSet, SuppressUserConversions,
6058                                      PartialOverloading);
6059     }
6060   }
6061 }
6062 
6063 /// AddMethodCandidate - Adds a named decl (which is some kind of
6064 /// method) as a method candidate to the given overload set.
6065 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
6066                               QualType ObjectType,
6067                               Expr::Classification ObjectClassification,
6068                               ArrayRef<Expr *> Args,
6069                               OverloadCandidateSet& CandidateSet,
6070                               bool SuppressUserConversions) {
6071   NamedDecl *Decl = FoundDecl.getDecl();
6072   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
6073 
6074   if (isa<UsingShadowDecl>(Decl))
6075     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
6076 
6077   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
6078     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
6079            "Expected a member function template");
6080     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
6081                                /*ExplicitArgs*/ nullptr,
6082                                ObjectType, ObjectClassification,
6083                                Args, CandidateSet,
6084                                SuppressUserConversions);
6085   } else {
6086     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
6087                        ObjectType, ObjectClassification,
6088                        Args,
6089                        CandidateSet, SuppressUserConversions);
6090   }
6091 }
6092 
6093 /// AddMethodCandidate - Adds the given C++ member function to the set
6094 /// of candidate functions, using the given function call arguments
6095 /// and the object argument (@c Object). For example, in a call
6096 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
6097 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
6098 /// allow user-defined conversions via constructors or conversion
6099 /// operators.
6100 void
6101 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
6102                          CXXRecordDecl *ActingContext, QualType ObjectType,
6103                          Expr::Classification ObjectClassification,
6104                          ArrayRef<Expr *> Args,
6105                          OverloadCandidateSet &CandidateSet,
6106                          bool SuppressUserConversions,
6107                          bool PartialOverloading) {
6108   const FunctionProtoType *Proto
6109     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
6110   assert(Proto && "Methods without a prototype cannot be overloaded");
6111   assert(!isa<CXXConstructorDecl>(Method) &&
6112          "Use AddOverloadCandidate for constructors");
6113 
6114   if (!CandidateSet.isNewCandidate(Method))
6115     return;
6116 
6117   // C++11 [class.copy]p23: [DR1402]
6118   //   A defaulted move assignment operator that is defined as deleted is
6119   //   ignored by overload resolution.
6120   if (Method->isDefaulted() && Method->isDeleted() &&
6121       Method->isMoveAssignmentOperator())
6122     return;
6123 
6124   // Overload resolution is always an unevaluated context.
6125   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6126 
6127   // Add this candidate
6128   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
6129   Candidate.FoundDecl = FoundDecl;
6130   Candidate.Function = Method;
6131   Candidate.IsSurrogate = false;
6132   Candidate.IgnoreObjectArgument = false;
6133   Candidate.ExplicitCallArguments = Args.size();
6134 
6135   unsigned NumParams = Proto->getNumParams();
6136 
6137   // (C++ 13.3.2p2): A candidate function having fewer than m
6138   // parameters is viable only if it has an ellipsis in its parameter
6139   // list (8.3.5).
6140   if (TooManyArguments(NumParams, Args.size(), PartialOverloading) &&
6141       !Proto->isVariadic()) {
6142     Candidate.Viable = false;
6143     Candidate.FailureKind = ovl_fail_too_many_arguments;
6144     return;
6145   }
6146 
6147   // (C++ 13.3.2p2): A candidate function having more than m parameters
6148   // is viable only if the (m+1)st parameter has a default argument
6149   // (8.3.6). For the purposes of overload resolution, the
6150   // parameter list is truncated on the right, so that there are
6151   // exactly m parameters.
6152   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
6153   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
6154     // Not enough arguments.
6155     Candidate.Viable = false;
6156     Candidate.FailureKind = ovl_fail_too_few_arguments;
6157     return;
6158   }
6159 
6160   Candidate.Viable = true;
6161 
6162   if (Method->isStatic() || ObjectType.isNull())
6163     // The implicit object argument is ignored.
6164     Candidate.IgnoreObjectArgument = true;
6165   else {
6166     // Determine the implicit conversion sequence for the object
6167     // parameter.
6168     Candidate.Conversions[0] = TryObjectArgumentInitialization(
6169         *this, CandidateSet.getLocation(), ObjectType, ObjectClassification,
6170         Method, ActingContext);
6171     if (Candidate.Conversions[0].isBad()) {
6172       Candidate.Viable = false;
6173       Candidate.FailureKind = ovl_fail_bad_conversion;
6174       return;
6175     }
6176   }
6177 
6178   // (CUDA B.1): Check for invalid calls between targets.
6179   if (getLangOpts().CUDA)
6180     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
6181       if (CheckCUDATarget(Caller, Method)) {
6182         Candidate.Viable = false;
6183         Candidate.FailureKind = ovl_fail_bad_target;
6184         return;
6185       }
6186 
6187   // Determine the implicit conversion sequences for each of the
6188   // arguments.
6189   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
6190     if (ArgIdx < NumParams) {
6191       // (C++ 13.3.2p3): for F to be a viable function, there shall
6192       // exist for each argument an implicit conversion sequence
6193       // (13.3.3.1) that converts that argument to the corresponding
6194       // parameter of F.
6195       QualType ParamType = Proto->getParamType(ArgIdx);
6196       Candidate.Conversions[ArgIdx + 1]
6197         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
6198                                 SuppressUserConversions,
6199                                 /*InOverloadResolution=*/true,
6200                                 /*AllowObjCWritebackConversion=*/
6201                                   getLangOpts().ObjCAutoRefCount);
6202       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
6203         Candidate.Viable = false;
6204         Candidate.FailureKind = ovl_fail_bad_conversion;
6205         return;
6206       }
6207     } else {
6208       // (C++ 13.3.2p2): For the purposes of overload resolution, any
6209       // argument for which there is no corresponding parameter is
6210       // considered to "match the ellipsis" (C+ 13.3.3.1.3).
6211       Candidate.Conversions[ArgIdx + 1].setEllipsis();
6212     }
6213   }
6214 
6215   if (EnableIfAttr *FailedAttr = CheckEnableIf(Method, Args, true)) {
6216     Candidate.Viable = false;
6217     Candidate.FailureKind = ovl_fail_enable_if;
6218     Candidate.DeductionFailure.Data = FailedAttr;
6219     return;
6220   }
6221 }
6222 
6223 /// \brief Add a C++ member function template as a candidate to the candidate
6224 /// set, using template argument deduction to produce an appropriate member
6225 /// function template specialization.
6226 void
6227 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
6228                                  DeclAccessPair FoundDecl,
6229                                  CXXRecordDecl *ActingContext,
6230                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
6231                                  QualType ObjectType,
6232                                  Expr::Classification ObjectClassification,
6233                                  ArrayRef<Expr *> Args,
6234                                  OverloadCandidateSet& CandidateSet,
6235                                  bool SuppressUserConversions,
6236                                  bool PartialOverloading) {
6237   if (!CandidateSet.isNewCandidate(MethodTmpl))
6238     return;
6239 
6240   // C++ [over.match.funcs]p7:
6241   //   In each case where a candidate is a function template, candidate
6242   //   function template specializations are generated using template argument
6243   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
6244   //   candidate functions in the usual way.113) A given name can refer to one
6245   //   or more function templates and also to a set of overloaded non-template
6246   //   functions. In such a case, the candidate functions generated from each
6247   //   function template are combined with the set of non-template candidate
6248   //   functions.
6249   TemplateDeductionInfo Info(CandidateSet.getLocation());
6250   FunctionDecl *Specialization = nullptr;
6251   if (TemplateDeductionResult Result
6252       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
6253                                 Specialization, Info, PartialOverloading)) {
6254     OverloadCandidate &Candidate = CandidateSet.addCandidate();
6255     Candidate.FoundDecl = FoundDecl;
6256     Candidate.Function = MethodTmpl->getTemplatedDecl();
6257     Candidate.Viable = false;
6258     Candidate.FailureKind = ovl_fail_bad_deduction;
6259     Candidate.IsSurrogate = false;
6260     Candidate.IgnoreObjectArgument = false;
6261     Candidate.ExplicitCallArguments = Args.size();
6262     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
6263                                                           Info);
6264     return;
6265   }
6266 
6267   // Add the function template specialization produced by template argument
6268   // deduction as a candidate.
6269   assert(Specialization && "Missing member function template specialization?");
6270   assert(isa<CXXMethodDecl>(Specialization) &&
6271          "Specialization is not a member function?");
6272   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
6273                      ActingContext, ObjectType, ObjectClassification, Args,
6274                      CandidateSet, SuppressUserConversions, PartialOverloading);
6275 }
6276 
6277 /// \brief Add a C++ function template specialization as a candidate
6278 /// in the candidate set, using template argument deduction to produce
6279 /// an appropriate function template specialization.
6280 void
6281 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
6282                                    DeclAccessPair FoundDecl,
6283                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
6284                                    ArrayRef<Expr *> Args,
6285                                    OverloadCandidateSet& CandidateSet,
6286                                    bool SuppressUserConversions,
6287                                    bool PartialOverloading) {
6288   if (!CandidateSet.isNewCandidate(FunctionTemplate))
6289     return;
6290 
6291   // C++ [over.match.funcs]p7:
6292   //   In each case where a candidate is a function template, candidate
6293   //   function template specializations are generated using template argument
6294   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
6295   //   candidate functions in the usual way.113) A given name can refer to one
6296   //   or more function templates and also to a set of overloaded non-template
6297   //   functions. In such a case, the candidate functions generated from each
6298   //   function template are combined with the set of non-template candidate
6299   //   functions.
6300   TemplateDeductionInfo Info(CandidateSet.getLocation());
6301   FunctionDecl *Specialization = nullptr;
6302   if (TemplateDeductionResult Result
6303         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
6304                                   Specialization, Info, PartialOverloading)) {
6305     OverloadCandidate &Candidate = CandidateSet.addCandidate();
6306     Candidate.FoundDecl = FoundDecl;
6307     Candidate.Function = FunctionTemplate->getTemplatedDecl();
6308     Candidate.Viable = false;
6309     Candidate.FailureKind = ovl_fail_bad_deduction;
6310     Candidate.IsSurrogate = false;
6311     Candidate.IgnoreObjectArgument = false;
6312     Candidate.ExplicitCallArguments = Args.size();
6313     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
6314                                                           Info);
6315     return;
6316   }
6317 
6318   // Add the function template specialization produced by template argument
6319   // deduction as a candidate.
6320   assert(Specialization && "Missing function template specialization?");
6321   AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
6322                        SuppressUserConversions, PartialOverloading);
6323 }
6324 
6325 /// Determine whether this is an allowable conversion from the result
6326 /// of an explicit conversion operator to the expected type, per C++
6327 /// [over.match.conv]p1 and [over.match.ref]p1.
6328 ///
6329 /// \param ConvType The return type of the conversion function.
6330 ///
6331 /// \param ToType The type we are converting to.
6332 ///
6333 /// \param AllowObjCPointerConversion Allow a conversion from one
6334 /// Objective-C pointer to another.
6335 ///
6336 /// \returns true if the conversion is allowable, false otherwise.
6337 static bool isAllowableExplicitConversion(Sema &S,
6338                                           QualType ConvType, QualType ToType,
6339                                           bool AllowObjCPointerConversion) {
6340   QualType ToNonRefType = ToType.getNonReferenceType();
6341 
6342   // Easy case: the types are the same.
6343   if (S.Context.hasSameUnqualifiedType(ConvType, ToNonRefType))
6344     return true;
6345 
6346   // Allow qualification conversions.
6347   bool ObjCLifetimeConversion;
6348   if (S.IsQualificationConversion(ConvType, ToNonRefType, /*CStyle*/false,
6349                                   ObjCLifetimeConversion))
6350     return true;
6351 
6352   // If we're not allowed to consider Objective-C pointer conversions,
6353   // we're done.
6354   if (!AllowObjCPointerConversion)
6355     return false;
6356 
6357   // Is this an Objective-C pointer conversion?
6358   bool IncompatibleObjC = false;
6359   QualType ConvertedType;
6360   return S.isObjCPointerConversion(ConvType, ToNonRefType, ConvertedType,
6361                                    IncompatibleObjC);
6362 }
6363 
6364 /// AddConversionCandidate - Add a C++ conversion function as a
6365 /// candidate in the candidate set (C++ [over.match.conv],
6366 /// C++ [over.match.copy]). From is the expression we're converting from,
6367 /// and ToType is the type that we're eventually trying to convert to
6368 /// (which may or may not be the same type as the type that the
6369 /// conversion function produces).
6370 void
6371 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
6372                              DeclAccessPair FoundDecl,
6373                              CXXRecordDecl *ActingContext,
6374                              Expr *From, QualType ToType,
6375                              OverloadCandidateSet& CandidateSet,
6376                              bool AllowObjCConversionOnExplicit) {
6377   assert(!Conversion->getDescribedFunctionTemplate() &&
6378          "Conversion function templates use AddTemplateConversionCandidate");
6379   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
6380   if (!CandidateSet.isNewCandidate(Conversion))
6381     return;
6382 
6383   // If the conversion function has an undeduced return type, trigger its
6384   // deduction now.
6385   if (getLangOpts().CPlusPlus14 && ConvType->isUndeducedType()) {
6386     if (DeduceReturnType(Conversion, From->getExprLoc()))
6387       return;
6388     ConvType = Conversion->getConversionType().getNonReferenceType();
6389   }
6390 
6391   // Per C++ [over.match.conv]p1, [over.match.ref]p1, an explicit conversion
6392   // operator is only a candidate if its return type is the target type or
6393   // can be converted to the target type with a qualification conversion.
6394   if (Conversion->isExplicit() &&
6395       !isAllowableExplicitConversion(*this, ConvType, ToType,
6396                                      AllowObjCConversionOnExplicit))
6397     return;
6398 
6399   // Overload resolution is always an unevaluated context.
6400   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6401 
6402   // Add this candidate
6403   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
6404   Candidate.FoundDecl = FoundDecl;
6405   Candidate.Function = Conversion;
6406   Candidate.IsSurrogate = false;
6407   Candidate.IgnoreObjectArgument = false;
6408   Candidate.FinalConversion.setAsIdentityConversion();
6409   Candidate.FinalConversion.setFromType(ConvType);
6410   Candidate.FinalConversion.setAllToTypes(ToType);
6411   Candidate.Viable = true;
6412   Candidate.ExplicitCallArguments = 1;
6413 
6414   // C++ [over.match.funcs]p4:
6415   //   For conversion functions, the function is considered to be a member of
6416   //   the class of the implicit implied object argument for the purpose of
6417   //   defining the type of the implicit object parameter.
6418   //
6419   // Determine the implicit conversion sequence for the implicit
6420   // object parameter.
6421   QualType ImplicitParamType = From->getType();
6422   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
6423     ImplicitParamType = FromPtrType->getPointeeType();
6424   CXXRecordDecl *ConversionContext
6425     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
6426 
6427   Candidate.Conversions[0] = TryObjectArgumentInitialization(
6428       *this, CandidateSet.getLocation(), From->getType(),
6429       From->Classify(Context), Conversion, ConversionContext);
6430 
6431   if (Candidate.Conversions[0].isBad()) {
6432     Candidate.Viable = false;
6433     Candidate.FailureKind = ovl_fail_bad_conversion;
6434     return;
6435   }
6436 
6437   // We won't go through a user-defined type conversion function to convert a
6438   // derived to base as such conversions are given Conversion Rank. They only
6439   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
6440   QualType FromCanon
6441     = Context.getCanonicalType(From->getType().getUnqualifiedType());
6442   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
6443   if (FromCanon == ToCanon ||
6444       IsDerivedFrom(CandidateSet.getLocation(), FromCanon, ToCanon)) {
6445     Candidate.Viable = false;
6446     Candidate.FailureKind = ovl_fail_trivial_conversion;
6447     return;
6448   }
6449 
6450   // To determine what the conversion from the result of calling the
6451   // conversion function to the type we're eventually trying to
6452   // convert to (ToType), we need to synthesize a call to the
6453   // conversion function and attempt copy initialization from it. This
6454   // makes sure that we get the right semantics with respect to
6455   // lvalues/rvalues and the type. Fortunately, we can allocate this
6456   // call on the stack and we don't need its arguments to be
6457   // well-formed.
6458   DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
6459                             VK_LValue, From->getLocStart());
6460   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
6461                                 Context.getPointerType(Conversion->getType()),
6462                                 CK_FunctionToPointerDecay,
6463                                 &ConversionRef, VK_RValue);
6464 
6465   QualType ConversionType = Conversion->getConversionType();
6466   if (!isCompleteType(From->getLocStart(), ConversionType)) {
6467     Candidate.Viable = false;
6468     Candidate.FailureKind = ovl_fail_bad_final_conversion;
6469     return;
6470   }
6471 
6472   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
6473 
6474   // Note that it is safe to allocate CallExpr on the stack here because
6475   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
6476   // allocator).
6477   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
6478   CallExpr Call(Context, &ConversionFn, None, CallResultType, VK,
6479                 From->getLocStart());
6480   ImplicitConversionSequence ICS =
6481     TryCopyInitialization(*this, &Call, ToType,
6482                           /*SuppressUserConversions=*/true,
6483                           /*InOverloadResolution=*/false,
6484                           /*AllowObjCWritebackConversion=*/false);
6485 
6486   switch (ICS.getKind()) {
6487   case ImplicitConversionSequence::StandardConversion:
6488     Candidate.FinalConversion = ICS.Standard;
6489 
6490     // C++ [over.ics.user]p3:
6491     //   If the user-defined conversion is specified by a specialization of a
6492     //   conversion function template, the second standard conversion sequence
6493     //   shall have exact match rank.
6494     if (Conversion->getPrimaryTemplate() &&
6495         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
6496       Candidate.Viable = false;
6497       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
6498       return;
6499     }
6500 
6501     // C++0x [dcl.init.ref]p5:
6502     //    In the second case, if the reference is an rvalue reference and
6503     //    the second standard conversion sequence of the user-defined
6504     //    conversion sequence includes an lvalue-to-rvalue conversion, the
6505     //    program is ill-formed.
6506     if (ToType->isRValueReferenceType() &&
6507         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
6508       Candidate.Viable = false;
6509       Candidate.FailureKind = ovl_fail_bad_final_conversion;
6510       return;
6511     }
6512     break;
6513 
6514   case ImplicitConversionSequence::BadConversion:
6515     Candidate.Viable = false;
6516     Candidate.FailureKind = ovl_fail_bad_final_conversion;
6517     return;
6518 
6519   default:
6520     llvm_unreachable(
6521            "Can only end up with a standard conversion sequence or failure");
6522   }
6523 
6524   if (EnableIfAttr *FailedAttr = CheckEnableIf(Conversion, None)) {
6525     Candidate.Viable = false;
6526     Candidate.FailureKind = ovl_fail_enable_if;
6527     Candidate.DeductionFailure.Data = FailedAttr;
6528     return;
6529   }
6530 }
6531 
6532 /// \brief Adds a conversion function template specialization
6533 /// candidate to the overload set, using template argument deduction
6534 /// to deduce the template arguments of the conversion function
6535 /// template from the type that we are converting to (C++
6536 /// [temp.deduct.conv]).
6537 void
6538 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
6539                                      DeclAccessPair FoundDecl,
6540                                      CXXRecordDecl *ActingDC,
6541                                      Expr *From, QualType ToType,
6542                                      OverloadCandidateSet &CandidateSet,
6543                                      bool AllowObjCConversionOnExplicit) {
6544   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
6545          "Only conversion function templates permitted here");
6546 
6547   if (!CandidateSet.isNewCandidate(FunctionTemplate))
6548     return;
6549 
6550   TemplateDeductionInfo Info(CandidateSet.getLocation());
6551   CXXConversionDecl *Specialization = nullptr;
6552   if (TemplateDeductionResult Result
6553         = DeduceTemplateArguments(FunctionTemplate, ToType,
6554                                   Specialization, Info)) {
6555     OverloadCandidate &Candidate = CandidateSet.addCandidate();
6556     Candidate.FoundDecl = FoundDecl;
6557     Candidate.Function = FunctionTemplate->getTemplatedDecl();
6558     Candidate.Viable = false;
6559     Candidate.FailureKind = ovl_fail_bad_deduction;
6560     Candidate.IsSurrogate = false;
6561     Candidate.IgnoreObjectArgument = false;
6562     Candidate.ExplicitCallArguments = 1;
6563     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
6564                                                           Info);
6565     return;
6566   }
6567 
6568   // Add the conversion function template specialization produced by
6569   // template argument deduction as a candidate.
6570   assert(Specialization && "Missing function template specialization?");
6571   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
6572                          CandidateSet, AllowObjCConversionOnExplicit);
6573 }
6574 
6575 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
6576 /// converts the given @c Object to a function pointer via the
6577 /// conversion function @c Conversion, and then attempts to call it
6578 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
6579 /// the type of function that we'll eventually be calling.
6580 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
6581                                  DeclAccessPair FoundDecl,
6582                                  CXXRecordDecl *ActingContext,
6583                                  const FunctionProtoType *Proto,
6584                                  Expr *Object,
6585                                  ArrayRef<Expr *> Args,
6586                                  OverloadCandidateSet& CandidateSet) {
6587   if (!CandidateSet.isNewCandidate(Conversion))
6588     return;
6589 
6590   // Overload resolution is always an unevaluated context.
6591   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6592 
6593   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
6594   Candidate.FoundDecl = FoundDecl;
6595   Candidate.Function = nullptr;
6596   Candidate.Surrogate = Conversion;
6597   Candidate.Viable = true;
6598   Candidate.IsSurrogate = true;
6599   Candidate.IgnoreObjectArgument = false;
6600   Candidate.ExplicitCallArguments = Args.size();
6601 
6602   // Determine the implicit conversion sequence for the implicit
6603   // object parameter.
6604   ImplicitConversionSequence ObjectInit = TryObjectArgumentInitialization(
6605       *this, CandidateSet.getLocation(), Object->getType(),
6606       Object->Classify(Context), Conversion, ActingContext);
6607   if (ObjectInit.isBad()) {
6608     Candidate.Viable = false;
6609     Candidate.FailureKind = ovl_fail_bad_conversion;
6610     Candidate.Conversions[0] = ObjectInit;
6611     return;
6612   }
6613 
6614   // The first conversion is actually a user-defined conversion whose
6615   // first conversion is ObjectInit's standard conversion (which is
6616   // effectively a reference binding). Record it as such.
6617   Candidate.Conversions[0].setUserDefined();
6618   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
6619   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
6620   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
6621   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
6622   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
6623   Candidate.Conversions[0].UserDefined.After
6624     = Candidate.Conversions[0].UserDefined.Before;
6625   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
6626 
6627   // Find the
6628   unsigned NumParams = Proto->getNumParams();
6629 
6630   // (C++ 13.3.2p2): A candidate function having fewer than m
6631   // parameters is viable only if it has an ellipsis in its parameter
6632   // list (8.3.5).
6633   if (Args.size() > NumParams && !Proto->isVariadic()) {
6634     Candidate.Viable = false;
6635     Candidate.FailureKind = ovl_fail_too_many_arguments;
6636     return;
6637   }
6638 
6639   // Function types don't have any default arguments, so just check if
6640   // we have enough arguments.
6641   if (Args.size() < NumParams) {
6642     // Not enough arguments.
6643     Candidate.Viable = false;
6644     Candidate.FailureKind = ovl_fail_too_few_arguments;
6645     return;
6646   }
6647 
6648   // Determine the implicit conversion sequences for each of the
6649   // arguments.
6650   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6651     if (ArgIdx < NumParams) {
6652       // (C++ 13.3.2p3): for F to be a viable function, there shall
6653       // exist for each argument an implicit conversion sequence
6654       // (13.3.3.1) that converts that argument to the corresponding
6655       // parameter of F.
6656       QualType ParamType = Proto->getParamType(ArgIdx);
6657       Candidate.Conversions[ArgIdx + 1]
6658         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
6659                                 /*SuppressUserConversions=*/false,
6660                                 /*InOverloadResolution=*/false,
6661                                 /*AllowObjCWritebackConversion=*/
6662                                   getLangOpts().ObjCAutoRefCount);
6663       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
6664         Candidate.Viable = false;
6665         Candidate.FailureKind = ovl_fail_bad_conversion;
6666         return;
6667       }
6668     } else {
6669       // (C++ 13.3.2p2): For the purposes of overload resolution, any
6670       // argument for which there is no corresponding parameter is
6671       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
6672       Candidate.Conversions[ArgIdx + 1].setEllipsis();
6673     }
6674   }
6675 
6676   if (EnableIfAttr *FailedAttr = CheckEnableIf(Conversion, None)) {
6677     Candidate.Viable = false;
6678     Candidate.FailureKind = ovl_fail_enable_if;
6679     Candidate.DeductionFailure.Data = FailedAttr;
6680     return;
6681   }
6682 }
6683 
6684 /// \brief Add overload candidates for overloaded operators that are
6685 /// member functions.
6686 ///
6687 /// Add the overloaded operator candidates that are member functions
6688 /// for the operator Op that was used in an operator expression such
6689 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
6690 /// CandidateSet will store the added overload candidates. (C++
6691 /// [over.match.oper]).
6692 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
6693                                        SourceLocation OpLoc,
6694                                        ArrayRef<Expr *> Args,
6695                                        OverloadCandidateSet& CandidateSet,
6696                                        SourceRange OpRange) {
6697   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6698 
6699   // C++ [over.match.oper]p3:
6700   //   For a unary operator @ with an operand of a type whose
6701   //   cv-unqualified version is T1, and for a binary operator @ with
6702   //   a left operand of a type whose cv-unqualified version is T1 and
6703   //   a right operand of a type whose cv-unqualified version is T2,
6704   //   three sets of candidate functions, designated member
6705   //   candidates, non-member candidates and built-in candidates, are
6706   //   constructed as follows:
6707   QualType T1 = Args[0]->getType();
6708 
6709   //     -- If T1 is a complete class type or a class currently being
6710   //        defined, the set of member candidates is the result of the
6711   //        qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
6712   //        the set of member candidates is empty.
6713   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
6714     // Complete the type if it can be completed.
6715     if (!isCompleteType(OpLoc, T1) && !T1Rec->isBeingDefined())
6716       return;
6717     // If the type is neither complete nor being defined, bail out now.
6718     if (!T1Rec->getDecl()->getDefinition())
6719       return;
6720 
6721     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
6722     LookupQualifiedName(Operators, T1Rec->getDecl());
6723     Operators.suppressDiagnostics();
6724 
6725     for (LookupResult::iterator Oper = Operators.begin(),
6726                              OperEnd = Operators.end();
6727          Oper != OperEnd;
6728          ++Oper)
6729       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
6730                          Args[0]->Classify(Context),
6731                          Args.slice(1),
6732                          CandidateSet,
6733                          /* SuppressUserConversions = */ false);
6734   }
6735 }
6736 
6737 /// AddBuiltinCandidate - Add a candidate for a built-in
6738 /// operator. ResultTy and ParamTys are the result and parameter types
6739 /// of the built-in candidate, respectively. Args and NumArgs are the
6740 /// arguments being passed to the candidate. IsAssignmentOperator
6741 /// should be true when this built-in candidate is an assignment
6742 /// operator. NumContextualBoolArguments is the number of arguments
6743 /// (at the beginning of the argument list) that will be contextually
6744 /// converted to bool.
6745 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
6746                                ArrayRef<Expr *> Args,
6747                                OverloadCandidateSet& CandidateSet,
6748                                bool IsAssignmentOperator,
6749                                unsigned NumContextualBoolArguments) {
6750   // Overload resolution is always an unevaluated context.
6751   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6752 
6753   // Add this candidate
6754   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
6755   Candidate.FoundDecl = DeclAccessPair::make(nullptr, AS_none);
6756   Candidate.Function = nullptr;
6757   Candidate.IsSurrogate = false;
6758   Candidate.IgnoreObjectArgument = false;
6759   Candidate.BuiltinTypes.ResultTy = ResultTy;
6760   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
6761     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
6762 
6763   // Determine the implicit conversion sequences for each of the
6764   // arguments.
6765   Candidate.Viable = true;
6766   Candidate.ExplicitCallArguments = Args.size();
6767   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6768     // C++ [over.match.oper]p4:
6769     //   For the built-in assignment operators, conversions of the
6770     //   left operand are restricted as follows:
6771     //     -- no temporaries are introduced to hold the left operand, and
6772     //     -- no user-defined conversions are applied to the left
6773     //        operand to achieve a type match with the left-most
6774     //        parameter of a built-in candidate.
6775     //
6776     // We block these conversions by turning off user-defined
6777     // conversions, since that is the only way that initialization of
6778     // a reference to a non-class type can occur from something that
6779     // is not of the same type.
6780     if (ArgIdx < NumContextualBoolArguments) {
6781       assert(ParamTys[ArgIdx] == Context.BoolTy &&
6782              "Contextual conversion to bool requires bool type");
6783       Candidate.Conversions[ArgIdx]
6784         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6785     } else {
6786       Candidate.Conversions[ArgIdx]
6787         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6788                                 ArgIdx == 0 && IsAssignmentOperator,
6789                                 /*InOverloadResolution=*/false,
6790                                 /*AllowObjCWritebackConversion=*/
6791                                   getLangOpts().ObjCAutoRefCount);
6792     }
6793     if (Candidate.Conversions[ArgIdx].isBad()) {
6794       Candidate.Viable = false;
6795       Candidate.FailureKind = ovl_fail_bad_conversion;
6796       break;
6797     }
6798   }
6799 }
6800 
6801 namespace {
6802 
6803 /// BuiltinCandidateTypeSet - A set of types that will be used for the
6804 /// candidate operator functions for built-in operators (C++
6805 /// [over.built]). The types are separated into pointer types and
6806 /// enumeration types.
6807 class BuiltinCandidateTypeSet  {
6808   /// TypeSet - A set of types.
6809   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6810 
6811   /// PointerTypes - The set of pointer types that will be used in the
6812   /// built-in candidates.
6813   TypeSet PointerTypes;
6814 
6815   /// MemberPointerTypes - The set of member pointer types that will be
6816   /// used in the built-in candidates.
6817   TypeSet MemberPointerTypes;
6818 
6819   /// EnumerationTypes - The set of enumeration types that will be
6820   /// used in the built-in candidates.
6821   TypeSet EnumerationTypes;
6822 
6823   /// \brief The set of vector types that will be used in the built-in
6824   /// candidates.
6825   TypeSet VectorTypes;
6826 
6827   /// \brief A flag indicating non-record types are viable candidates
6828   bool HasNonRecordTypes;
6829 
6830   /// \brief A flag indicating whether either arithmetic or enumeration types
6831   /// were present in the candidate set.
6832   bool HasArithmeticOrEnumeralTypes;
6833 
6834   /// \brief A flag indicating whether the nullptr type was present in the
6835   /// candidate set.
6836   bool HasNullPtrType;
6837 
6838   /// Sema - The semantic analysis instance where we are building the
6839   /// candidate type set.
6840   Sema &SemaRef;
6841 
6842   /// Context - The AST context in which we will build the type sets.
6843   ASTContext &Context;
6844 
6845   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6846                                                const Qualifiers &VisibleQuals);
6847   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6848 
6849 public:
6850   /// iterator - Iterates through the types that are part of the set.
6851   typedef TypeSet::iterator iterator;
6852 
6853   BuiltinCandidateTypeSet(Sema &SemaRef)
6854     : HasNonRecordTypes(false),
6855       HasArithmeticOrEnumeralTypes(false),
6856       HasNullPtrType(false),
6857       SemaRef(SemaRef),
6858       Context(SemaRef.Context) { }
6859 
6860   void AddTypesConvertedFrom(QualType Ty,
6861                              SourceLocation Loc,
6862                              bool AllowUserConversions,
6863                              bool AllowExplicitConversions,
6864                              const Qualifiers &VisibleTypeConversionsQuals);
6865 
6866   /// pointer_begin - First pointer type found;
6867   iterator pointer_begin() { return PointerTypes.begin(); }
6868 
6869   /// pointer_end - Past the last pointer type found;
6870   iterator pointer_end() { return PointerTypes.end(); }
6871 
6872   /// member_pointer_begin - First member pointer type found;
6873   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6874 
6875   /// member_pointer_end - Past the last member pointer type found;
6876   iterator member_pointer_end() { return MemberPointerTypes.end(); }
6877 
6878   /// enumeration_begin - First enumeration type found;
6879   iterator enumeration_begin() { return EnumerationTypes.begin(); }
6880 
6881   /// enumeration_end - Past the last enumeration type found;
6882   iterator enumeration_end() { return EnumerationTypes.end(); }
6883 
6884   iterator vector_begin() { return VectorTypes.begin(); }
6885   iterator vector_end() { return VectorTypes.end(); }
6886 
6887   bool hasNonRecordTypes() { return HasNonRecordTypes; }
6888   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6889   bool hasNullPtrType() const { return HasNullPtrType; }
6890 };
6891 
6892 } // end anonymous namespace
6893 
6894 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6895 /// the set of pointer types along with any more-qualified variants of
6896 /// that type. For example, if @p Ty is "int const *", this routine
6897 /// will add "int const *", "int const volatile *", "int const
6898 /// restrict *", and "int const volatile restrict *" to the set of
6899 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6900 /// false otherwise.
6901 ///
6902 /// FIXME: what to do about extended qualifiers?
6903 bool
6904 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6905                                              const Qualifiers &VisibleQuals) {
6906 
6907   // Insert this type.
6908   if (!PointerTypes.insert(Ty).second)
6909     return false;
6910 
6911   QualType PointeeTy;
6912   const PointerType *PointerTy = Ty->getAs<PointerType>();
6913   bool buildObjCPtr = false;
6914   if (!PointerTy) {
6915     const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6916     PointeeTy = PTy->getPointeeType();
6917     buildObjCPtr = true;
6918   } else {
6919     PointeeTy = PointerTy->getPointeeType();
6920   }
6921 
6922   // Don't add qualified variants of arrays. For one, they're not allowed
6923   // (the qualifier would sink to the element type), and for another, the
6924   // only overload situation where it matters is subscript or pointer +- int,
6925   // and those shouldn't have qualifier variants anyway.
6926   if (PointeeTy->isArrayType())
6927     return true;
6928 
6929   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6930   bool hasVolatile = VisibleQuals.hasVolatile();
6931   bool hasRestrict = VisibleQuals.hasRestrict();
6932 
6933   // Iterate through all strict supersets of BaseCVR.
6934   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6935     if ((CVR | BaseCVR) != CVR) continue;
6936     // Skip over volatile if no volatile found anywhere in the types.
6937     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6938 
6939     // Skip over restrict if no restrict found anywhere in the types, or if
6940     // the type cannot be restrict-qualified.
6941     if ((CVR & Qualifiers::Restrict) &&
6942         (!hasRestrict ||
6943          (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6944       continue;
6945 
6946     // Build qualified pointee type.
6947     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6948 
6949     // Build qualified pointer type.
6950     QualType QPointerTy;
6951     if (!buildObjCPtr)
6952       QPointerTy = Context.getPointerType(QPointeeTy);
6953     else
6954       QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6955 
6956     // Insert qualified pointer type.
6957     PointerTypes.insert(QPointerTy);
6958   }
6959 
6960   return true;
6961 }
6962 
6963 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6964 /// to the set of pointer types along with any more-qualified variants of
6965 /// that type. For example, if @p Ty is "int const *", this routine
6966 /// will add "int const *", "int const volatile *", "int const
6967 /// restrict *", and "int const volatile restrict *" to the set of
6968 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6969 /// false otherwise.
6970 ///
6971 /// FIXME: what to do about extended qualifiers?
6972 bool
6973 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6974     QualType Ty) {
6975   // Insert this type.
6976   if (!MemberPointerTypes.insert(Ty).second)
6977     return false;
6978 
6979   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6980   assert(PointerTy && "type was not a member pointer type!");
6981 
6982   QualType PointeeTy = PointerTy->getPointeeType();
6983   // Don't add qualified variants of arrays. For one, they're not allowed
6984   // (the qualifier would sink to the element type), and for another, the
6985   // only overload situation where it matters is subscript or pointer +- int,
6986   // and those shouldn't have qualifier variants anyway.
6987   if (PointeeTy->isArrayType())
6988     return true;
6989   const Type *ClassTy = PointerTy->getClass();
6990 
6991   // Iterate through all strict supersets of the pointee type's CVR
6992   // qualifiers.
6993   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6994   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6995     if ((CVR | BaseCVR) != CVR) continue;
6996 
6997     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6998     MemberPointerTypes.insert(
6999       Context.getMemberPointerType(QPointeeTy, ClassTy));
7000   }
7001 
7002   return true;
7003 }
7004 
7005 /// AddTypesConvertedFrom - Add each of the types to which the type @p
7006 /// Ty can be implicit converted to the given set of @p Types. We're
7007 /// primarily interested in pointer types and enumeration types. We also
7008 /// take member pointer types, for the conditional operator.
7009 /// AllowUserConversions is true if we should look at the conversion
7010 /// functions of a class type, and AllowExplicitConversions if we
7011 /// should also include the explicit conversion functions of a class
7012 /// type.
7013 void
7014 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
7015                                                SourceLocation Loc,
7016                                                bool AllowUserConversions,
7017                                                bool AllowExplicitConversions,
7018                                                const Qualifiers &VisibleQuals) {
7019   // Only deal with canonical types.
7020   Ty = Context.getCanonicalType(Ty);
7021 
7022   // Look through reference types; they aren't part of the type of an
7023   // expression for the purposes of conversions.
7024   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
7025     Ty = RefTy->getPointeeType();
7026 
7027   // If we're dealing with an array type, decay to the pointer.
7028   if (Ty->isArrayType())
7029     Ty = SemaRef.Context.getArrayDecayedType(Ty);
7030 
7031   // Otherwise, we don't care about qualifiers on the type.
7032   Ty = Ty.getLocalUnqualifiedType();
7033 
7034   // Flag if we ever add a non-record type.
7035   const RecordType *TyRec = Ty->getAs<RecordType>();
7036   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
7037 
7038   // Flag if we encounter an arithmetic type.
7039   HasArithmeticOrEnumeralTypes =
7040     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
7041 
7042   if (Ty->isObjCIdType() || Ty->isObjCClassType())
7043     PointerTypes.insert(Ty);
7044   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
7045     // Insert our type, and its more-qualified variants, into the set
7046     // of types.
7047     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
7048       return;
7049   } else if (Ty->isMemberPointerType()) {
7050     // Member pointers are far easier, since the pointee can't be converted.
7051     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
7052       return;
7053   } else if (Ty->isEnumeralType()) {
7054     HasArithmeticOrEnumeralTypes = true;
7055     EnumerationTypes.insert(Ty);
7056   } else if (Ty->isVectorType()) {
7057     // We treat vector types as arithmetic types in many contexts as an
7058     // extension.
7059     HasArithmeticOrEnumeralTypes = true;
7060     VectorTypes.insert(Ty);
7061   } else if (Ty->isNullPtrType()) {
7062     HasNullPtrType = true;
7063   } else if (AllowUserConversions && TyRec) {
7064     // No conversion functions in incomplete types.
7065     if (!SemaRef.isCompleteType(Loc, Ty))
7066       return;
7067 
7068     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
7069     for (NamedDecl *D : ClassDecl->getVisibleConversionFunctions()) {
7070       if (isa<UsingShadowDecl>(D))
7071         D = cast<UsingShadowDecl>(D)->getTargetDecl();
7072 
7073       // Skip conversion function templates; they don't tell us anything
7074       // about which builtin types we can convert to.
7075       if (isa<FunctionTemplateDecl>(D))
7076         continue;
7077 
7078       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
7079       if (AllowExplicitConversions || !Conv->isExplicit()) {
7080         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
7081                               VisibleQuals);
7082       }
7083     }
7084   }
7085 }
7086 
7087 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
7088 /// the volatile- and non-volatile-qualified assignment operators for the
7089 /// given type to the candidate set.
7090 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
7091                                                    QualType T,
7092                                                    ArrayRef<Expr *> Args,
7093                                     OverloadCandidateSet &CandidateSet) {
7094   QualType ParamTypes[2];
7095 
7096   // T& operator=(T&, T)
7097   ParamTypes[0] = S.Context.getLValueReferenceType(T);
7098   ParamTypes[1] = T;
7099   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7100                         /*IsAssignmentOperator=*/true);
7101 
7102   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
7103     // volatile T& operator=(volatile T&, T)
7104     ParamTypes[0]
7105       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
7106     ParamTypes[1] = T;
7107     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7108                           /*IsAssignmentOperator=*/true);
7109   }
7110 }
7111 
7112 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
7113 /// if any, found in visible type conversion functions found in ArgExpr's type.
7114 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
7115     Qualifiers VRQuals;
7116     const RecordType *TyRec;
7117     if (const MemberPointerType *RHSMPType =
7118         ArgExpr->getType()->getAs<MemberPointerType>())
7119       TyRec = RHSMPType->getClass()->getAs<RecordType>();
7120     else
7121       TyRec = ArgExpr->getType()->getAs<RecordType>();
7122     if (!TyRec) {
7123       // Just to be safe, assume the worst case.
7124       VRQuals.addVolatile();
7125       VRQuals.addRestrict();
7126       return VRQuals;
7127     }
7128 
7129     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
7130     if (!ClassDecl->hasDefinition())
7131       return VRQuals;
7132 
7133     for (NamedDecl *D : ClassDecl->getVisibleConversionFunctions()) {
7134       if (isa<UsingShadowDecl>(D))
7135         D = cast<UsingShadowDecl>(D)->getTargetDecl();
7136       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
7137         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
7138         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
7139           CanTy = ResTypeRef->getPointeeType();
7140         // Need to go down the pointer/mempointer chain and add qualifiers
7141         // as see them.
7142         bool done = false;
7143         while (!done) {
7144           if (CanTy.isRestrictQualified())
7145             VRQuals.addRestrict();
7146           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
7147             CanTy = ResTypePtr->getPointeeType();
7148           else if (const MemberPointerType *ResTypeMPtr =
7149                 CanTy->getAs<MemberPointerType>())
7150             CanTy = ResTypeMPtr->getPointeeType();
7151           else
7152             done = true;
7153           if (CanTy.isVolatileQualified())
7154             VRQuals.addVolatile();
7155           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
7156             return VRQuals;
7157         }
7158       }
7159     }
7160     return VRQuals;
7161 }
7162 
7163 namespace {
7164 
7165 /// \brief Helper class to manage the addition of builtin operator overload
7166 /// candidates. It provides shared state and utility methods used throughout
7167 /// the process, as well as a helper method to add each group of builtin
7168 /// operator overloads from the standard to a candidate set.
7169 class BuiltinOperatorOverloadBuilder {
7170   // Common instance state available to all overload candidate addition methods.
7171   Sema &S;
7172   ArrayRef<Expr *> Args;
7173   Qualifiers VisibleTypeConversionsQuals;
7174   bool HasArithmeticOrEnumeralCandidateType;
7175   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
7176   OverloadCandidateSet &CandidateSet;
7177 
7178   // Define some constants used to index and iterate over the arithemetic types
7179   // provided via the getArithmeticType() method below.
7180   // The "promoted arithmetic types" are the arithmetic
7181   // types are that preserved by promotion (C++ [over.built]p2).
7182   static const unsigned FirstIntegralType = 3;
7183   static const unsigned LastIntegralType = 20;
7184   static const unsigned FirstPromotedIntegralType = 3,
7185                         LastPromotedIntegralType = 11;
7186   static const unsigned FirstPromotedArithmeticType = 0,
7187                         LastPromotedArithmeticType = 11;
7188   static const unsigned NumArithmeticTypes = 20;
7189 
7190   /// \brief Get the canonical type for a given arithmetic type index.
7191   CanQualType getArithmeticType(unsigned index) {
7192     assert(index < NumArithmeticTypes);
7193     static CanQualType ASTContext::* const
7194       ArithmeticTypes[NumArithmeticTypes] = {
7195       // Start of promoted types.
7196       &ASTContext::FloatTy,
7197       &ASTContext::DoubleTy,
7198       &ASTContext::LongDoubleTy,
7199 
7200       // Start of integral types.
7201       &ASTContext::IntTy,
7202       &ASTContext::LongTy,
7203       &ASTContext::LongLongTy,
7204       &ASTContext::Int128Ty,
7205       &ASTContext::UnsignedIntTy,
7206       &ASTContext::UnsignedLongTy,
7207       &ASTContext::UnsignedLongLongTy,
7208       &ASTContext::UnsignedInt128Ty,
7209       // End of promoted types.
7210 
7211       &ASTContext::BoolTy,
7212       &ASTContext::CharTy,
7213       &ASTContext::WCharTy,
7214       &ASTContext::Char16Ty,
7215       &ASTContext::Char32Ty,
7216       &ASTContext::SignedCharTy,
7217       &ASTContext::ShortTy,
7218       &ASTContext::UnsignedCharTy,
7219       &ASTContext::UnsignedShortTy,
7220       // End of integral types.
7221       // FIXME: What about complex? What about half?
7222     };
7223     return S.Context.*ArithmeticTypes[index];
7224   }
7225 
7226   /// \brief Gets the canonical type resulting from the usual arithemetic
7227   /// converions for the given arithmetic types.
7228   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
7229     // Accelerator table for performing the usual arithmetic conversions.
7230     // The rules are basically:
7231     //   - if either is floating-point, use the wider floating-point
7232     //   - if same signedness, use the higher rank
7233     //   - if same size, use unsigned of the higher rank
7234     //   - use the larger type
7235     // These rules, together with the axiom that higher ranks are
7236     // never smaller, are sufficient to precompute all of these results
7237     // *except* when dealing with signed types of higher rank.
7238     // (we could precompute SLL x UI for all known platforms, but it's
7239     // better not to make any assumptions).
7240     // We assume that int128 has a higher rank than long long on all platforms.
7241     enum PromotedType {
7242             Dep=-1,
7243             Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
7244     };
7245     static const PromotedType ConversionsTable[LastPromotedArithmeticType]
7246                                         [LastPromotedArithmeticType] = {
7247 /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
7248 /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
7249 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
7250 /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
7251 /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
7252 /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
7253 /*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
7254 /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
7255 /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
7256 /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
7257 /*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
7258     };
7259 
7260     assert(L < LastPromotedArithmeticType);
7261     assert(R < LastPromotedArithmeticType);
7262     int Idx = ConversionsTable[L][R];
7263 
7264     // Fast path: the table gives us a concrete answer.
7265     if (Idx != Dep) return getArithmeticType(Idx);
7266 
7267     // Slow path: we need to compare widths.
7268     // An invariant is that the signed type has higher rank.
7269     CanQualType LT = getArithmeticType(L),
7270                 RT = getArithmeticType(R);
7271     unsigned LW = S.Context.getIntWidth(LT),
7272              RW = S.Context.getIntWidth(RT);
7273 
7274     // If they're different widths, use the signed type.
7275     if (LW > RW) return LT;
7276     else if (LW < RW) return RT;
7277 
7278     // Otherwise, use the unsigned type of the signed type's rank.
7279     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
7280     assert(L == SLL || R == SLL);
7281     return S.Context.UnsignedLongLongTy;
7282   }
7283 
7284   /// \brief Helper method to factor out the common pattern of adding overloads
7285   /// for '++' and '--' builtin operators.
7286   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
7287                                            bool HasVolatile,
7288                                            bool HasRestrict) {
7289     QualType ParamTypes[2] = {
7290       S.Context.getLValueReferenceType(CandidateTy),
7291       S.Context.IntTy
7292     };
7293 
7294     // Non-volatile version.
7295     if (Args.size() == 1)
7296       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7297     else
7298       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
7299 
7300     // Use a heuristic to reduce number of builtin candidates in the set:
7301     // add volatile version only if there are conversions to a volatile type.
7302     if (HasVolatile) {
7303       ParamTypes[0] =
7304         S.Context.getLValueReferenceType(
7305           S.Context.getVolatileType(CandidateTy));
7306       if (Args.size() == 1)
7307         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7308       else
7309         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
7310     }
7311 
7312     // Add restrict version only if there are conversions to a restrict type
7313     // and our candidate type is a non-restrict-qualified pointer.
7314     if (HasRestrict && CandidateTy->isAnyPointerType() &&
7315         !CandidateTy.isRestrictQualified()) {
7316       ParamTypes[0]
7317         = S.Context.getLValueReferenceType(
7318             S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
7319       if (Args.size() == 1)
7320         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7321       else
7322         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
7323 
7324       if (HasVolatile) {
7325         ParamTypes[0]
7326           = S.Context.getLValueReferenceType(
7327               S.Context.getCVRQualifiedType(CandidateTy,
7328                                             (Qualifiers::Volatile |
7329                                              Qualifiers::Restrict)));
7330         if (Args.size() == 1)
7331           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7332         else
7333           S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
7334       }
7335     }
7336 
7337   }
7338 
7339 public:
7340   BuiltinOperatorOverloadBuilder(
7341     Sema &S, ArrayRef<Expr *> Args,
7342     Qualifiers VisibleTypeConversionsQuals,
7343     bool HasArithmeticOrEnumeralCandidateType,
7344     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
7345     OverloadCandidateSet &CandidateSet)
7346     : S(S), Args(Args),
7347       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
7348       HasArithmeticOrEnumeralCandidateType(
7349         HasArithmeticOrEnumeralCandidateType),
7350       CandidateTypes(CandidateTypes),
7351       CandidateSet(CandidateSet) {
7352     // Validate some of our static helper constants in debug builds.
7353     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
7354            "Invalid first promoted integral type");
7355     assert(getArithmeticType(LastPromotedIntegralType - 1)
7356              == S.Context.UnsignedInt128Ty &&
7357            "Invalid last promoted integral type");
7358     assert(getArithmeticType(FirstPromotedArithmeticType)
7359              == S.Context.FloatTy &&
7360            "Invalid first promoted arithmetic type");
7361     assert(getArithmeticType(LastPromotedArithmeticType - 1)
7362              == S.Context.UnsignedInt128Ty &&
7363            "Invalid last promoted arithmetic type");
7364   }
7365 
7366   // C++ [over.built]p3:
7367   //
7368   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
7369   //   is either volatile or empty, there exist candidate operator
7370   //   functions of the form
7371   //
7372   //       VQ T&      operator++(VQ T&);
7373   //       T          operator++(VQ T&, int);
7374   //
7375   // C++ [over.built]p4:
7376   //
7377   //   For every pair (T, VQ), where T is an arithmetic type other
7378   //   than bool, and VQ is either volatile or empty, there exist
7379   //   candidate operator functions of the form
7380   //
7381   //       VQ T&      operator--(VQ T&);
7382   //       T          operator--(VQ T&, int);
7383   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
7384     if (!HasArithmeticOrEnumeralCandidateType)
7385       return;
7386 
7387     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
7388          Arith < NumArithmeticTypes; ++Arith) {
7389       addPlusPlusMinusMinusStyleOverloads(
7390         getArithmeticType(Arith),
7391         VisibleTypeConversionsQuals.hasVolatile(),
7392         VisibleTypeConversionsQuals.hasRestrict());
7393     }
7394   }
7395 
7396   // C++ [over.built]p5:
7397   //
7398   //   For every pair (T, VQ), where T is a cv-qualified or
7399   //   cv-unqualified object type, and VQ is either volatile or
7400   //   empty, there exist candidate operator functions of the form
7401   //
7402   //       T*VQ&      operator++(T*VQ&);
7403   //       T*VQ&      operator--(T*VQ&);
7404   //       T*         operator++(T*VQ&, int);
7405   //       T*         operator--(T*VQ&, int);
7406   void addPlusPlusMinusMinusPointerOverloads() {
7407     for (BuiltinCandidateTypeSet::iterator
7408               Ptr = CandidateTypes[0].pointer_begin(),
7409            PtrEnd = CandidateTypes[0].pointer_end();
7410          Ptr != PtrEnd; ++Ptr) {
7411       // Skip pointer types that aren't pointers to object types.
7412       if (!(*Ptr)->getPointeeType()->isObjectType())
7413         continue;
7414 
7415       addPlusPlusMinusMinusStyleOverloads(*Ptr,
7416         (!(*Ptr).isVolatileQualified() &&
7417          VisibleTypeConversionsQuals.hasVolatile()),
7418         (!(*Ptr).isRestrictQualified() &&
7419          VisibleTypeConversionsQuals.hasRestrict()));
7420     }
7421   }
7422 
7423   // C++ [over.built]p6:
7424   //   For every cv-qualified or cv-unqualified object type T, there
7425   //   exist candidate operator functions of the form
7426   //
7427   //       T&         operator*(T*);
7428   //
7429   // C++ [over.built]p7:
7430   //   For every function type T that does not have cv-qualifiers or a
7431   //   ref-qualifier, there exist candidate operator functions of the form
7432   //       T&         operator*(T*);
7433   void addUnaryStarPointerOverloads() {
7434     for (BuiltinCandidateTypeSet::iterator
7435               Ptr = CandidateTypes[0].pointer_begin(),
7436            PtrEnd = CandidateTypes[0].pointer_end();
7437          Ptr != PtrEnd; ++Ptr) {
7438       QualType ParamTy = *Ptr;
7439       QualType PointeeTy = ParamTy->getPointeeType();
7440       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
7441         continue;
7442 
7443       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
7444         if (Proto->getTypeQuals() || Proto->getRefQualifier())
7445           continue;
7446 
7447       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
7448                             &ParamTy, Args, CandidateSet);
7449     }
7450   }
7451 
7452   // C++ [over.built]p9:
7453   //  For every promoted arithmetic type T, there exist candidate
7454   //  operator functions of the form
7455   //
7456   //       T         operator+(T);
7457   //       T         operator-(T);
7458   void addUnaryPlusOrMinusArithmeticOverloads() {
7459     if (!HasArithmeticOrEnumeralCandidateType)
7460       return;
7461 
7462     for (unsigned Arith = FirstPromotedArithmeticType;
7463          Arith < LastPromotedArithmeticType; ++Arith) {
7464       QualType ArithTy = getArithmeticType(Arith);
7465       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, CandidateSet);
7466     }
7467 
7468     // Extension: We also add these operators for vector types.
7469     for (BuiltinCandidateTypeSet::iterator
7470               Vec = CandidateTypes[0].vector_begin(),
7471            VecEnd = CandidateTypes[0].vector_end();
7472          Vec != VecEnd; ++Vec) {
7473       QualType VecTy = *Vec;
7474       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
7475     }
7476   }
7477 
7478   // C++ [over.built]p8:
7479   //   For every type T, there exist candidate operator functions of
7480   //   the form
7481   //
7482   //       T*         operator+(T*);
7483   void addUnaryPlusPointerOverloads() {
7484     for (BuiltinCandidateTypeSet::iterator
7485               Ptr = CandidateTypes[0].pointer_begin(),
7486            PtrEnd = CandidateTypes[0].pointer_end();
7487          Ptr != PtrEnd; ++Ptr) {
7488       QualType ParamTy = *Ptr;
7489       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet);
7490     }
7491   }
7492 
7493   // C++ [over.built]p10:
7494   //   For every promoted integral type T, there exist candidate
7495   //   operator functions of the form
7496   //
7497   //        T         operator~(T);
7498   void addUnaryTildePromotedIntegralOverloads() {
7499     if (!HasArithmeticOrEnumeralCandidateType)
7500       return;
7501 
7502     for (unsigned Int = FirstPromotedIntegralType;
7503          Int < LastPromotedIntegralType; ++Int) {
7504       QualType IntTy = getArithmeticType(Int);
7505       S.AddBuiltinCandidate(IntTy, &IntTy, Args, CandidateSet);
7506     }
7507 
7508     // Extension: We also add this operator for vector types.
7509     for (BuiltinCandidateTypeSet::iterator
7510               Vec = CandidateTypes[0].vector_begin(),
7511            VecEnd = CandidateTypes[0].vector_end();
7512          Vec != VecEnd; ++Vec) {
7513       QualType VecTy = *Vec;
7514       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
7515     }
7516   }
7517 
7518   // C++ [over.match.oper]p16:
7519   //   For every pointer to member type T, there exist candidate operator
7520   //   functions of the form
7521   //
7522   //        bool operator==(T,T);
7523   //        bool operator!=(T,T);
7524   void addEqualEqualOrNotEqualMemberPointerOverloads() {
7525     /// Set of (canonical) types that we've already handled.
7526     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7527 
7528     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7529       for (BuiltinCandidateTypeSet::iterator
7530                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7531              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7532            MemPtr != MemPtrEnd;
7533            ++MemPtr) {
7534         // Don't add the same builtin candidate twice.
7535         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)).second)
7536           continue;
7537 
7538         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7539         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7540       }
7541     }
7542   }
7543 
7544   // C++ [over.built]p15:
7545   //
7546   //   For every T, where T is an enumeration type, a pointer type, or
7547   //   std::nullptr_t, there exist candidate operator functions of the form
7548   //
7549   //        bool       operator<(T, T);
7550   //        bool       operator>(T, T);
7551   //        bool       operator<=(T, T);
7552   //        bool       operator>=(T, T);
7553   //        bool       operator==(T, T);
7554   //        bool       operator!=(T, T);
7555   void addRelationalPointerOrEnumeralOverloads() {
7556     // C++ [over.match.oper]p3:
7557     //   [...]the built-in candidates include all of the candidate operator
7558     //   functions defined in 13.6 that, compared to the given operator, [...]
7559     //   do not have the same parameter-type-list as any non-template non-member
7560     //   candidate.
7561     //
7562     // Note that in practice, this only affects enumeration types because there
7563     // aren't any built-in candidates of record type, and a user-defined operator
7564     // must have an operand of record or enumeration type. Also, the only other
7565     // overloaded operator with enumeration arguments, operator=,
7566     // cannot be overloaded for enumeration types, so this is the only place
7567     // where we must suppress candidates like this.
7568     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
7569       UserDefinedBinaryOperators;
7570 
7571     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7572       if (CandidateTypes[ArgIdx].enumeration_begin() !=
7573           CandidateTypes[ArgIdx].enumeration_end()) {
7574         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
7575                                          CEnd = CandidateSet.end();
7576              C != CEnd; ++C) {
7577           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
7578             continue;
7579 
7580           if (C->Function->isFunctionTemplateSpecialization())
7581             continue;
7582 
7583           QualType FirstParamType =
7584             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
7585           QualType SecondParamType =
7586             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
7587 
7588           // Skip if either parameter isn't of enumeral type.
7589           if (!FirstParamType->isEnumeralType() ||
7590               !SecondParamType->isEnumeralType())
7591             continue;
7592 
7593           // Add this operator to the set of known user-defined operators.
7594           UserDefinedBinaryOperators.insert(
7595             std::make_pair(S.Context.getCanonicalType(FirstParamType),
7596                            S.Context.getCanonicalType(SecondParamType)));
7597         }
7598       }
7599     }
7600 
7601     /// Set of (canonical) types that we've already handled.
7602     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7603 
7604     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7605       for (BuiltinCandidateTypeSet::iterator
7606                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7607              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7608            Ptr != PtrEnd; ++Ptr) {
7609         // Don't add the same builtin candidate twice.
7610         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)).second)
7611           continue;
7612 
7613         QualType ParamTypes[2] = { *Ptr, *Ptr };
7614         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7615       }
7616       for (BuiltinCandidateTypeSet::iterator
7617                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7618              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7619            Enum != EnumEnd; ++Enum) {
7620         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
7621 
7622         // Don't add the same builtin candidate twice, or if a user defined
7623         // candidate exists.
7624         if (!AddedTypes.insert(CanonType).second ||
7625             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
7626                                                             CanonType)))
7627           continue;
7628 
7629         QualType ParamTypes[2] = { *Enum, *Enum };
7630         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7631       }
7632 
7633       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
7634         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
7635         if (AddedTypes.insert(NullPtrTy).second &&
7636             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
7637                                                              NullPtrTy))) {
7638           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
7639           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args,
7640                                 CandidateSet);
7641         }
7642       }
7643     }
7644   }
7645 
7646   // C++ [over.built]p13:
7647   //
7648   //   For every cv-qualified or cv-unqualified object type T
7649   //   there exist candidate operator functions of the form
7650   //
7651   //      T*         operator+(T*, ptrdiff_t);
7652   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
7653   //      T*         operator-(T*, ptrdiff_t);
7654   //      T*         operator+(ptrdiff_t, T*);
7655   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
7656   //
7657   // C++ [over.built]p14:
7658   //
7659   //   For every T, where T is a pointer to object type, there
7660   //   exist candidate operator functions of the form
7661   //
7662   //      ptrdiff_t  operator-(T, T);
7663   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
7664     /// Set of (canonical) types that we've already handled.
7665     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7666 
7667     for (int Arg = 0; Arg < 2; ++Arg) {
7668       QualType AsymmetricParamTypes[2] = {
7669         S.Context.getPointerDiffType(),
7670         S.Context.getPointerDiffType(),
7671       };
7672       for (BuiltinCandidateTypeSet::iterator
7673                 Ptr = CandidateTypes[Arg].pointer_begin(),
7674              PtrEnd = CandidateTypes[Arg].pointer_end();
7675            Ptr != PtrEnd; ++Ptr) {
7676         QualType PointeeTy = (*Ptr)->getPointeeType();
7677         if (!PointeeTy->isObjectType())
7678           continue;
7679 
7680         AsymmetricParamTypes[Arg] = *Ptr;
7681         if (Arg == 0 || Op == OO_Plus) {
7682           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
7683           // T* operator+(ptrdiff_t, T*);
7684           S.AddBuiltinCandidate(*Ptr, AsymmetricParamTypes, Args, CandidateSet);
7685         }
7686         if (Op == OO_Minus) {
7687           // ptrdiff_t operator-(T, T);
7688           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)).second)
7689             continue;
7690 
7691           QualType ParamTypes[2] = { *Ptr, *Ptr };
7692           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
7693                                 Args, CandidateSet);
7694         }
7695       }
7696     }
7697   }
7698 
7699   // C++ [over.built]p12:
7700   //
7701   //   For every pair of promoted arithmetic types L and R, there
7702   //   exist candidate operator functions of the form
7703   //
7704   //        LR         operator*(L, R);
7705   //        LR         operator/(L, R);
7706   //        LR         operator+(L, R);
7707   //        LR         operator-(L, R);
7708   //        bool       operator<(L, R);
7709   //        bool       operator>(L, R);
7710   //        bool       operator<=(L, R);
7711   //        bool       operator>=(L, R);
7712   //        bool       operator==(L, R);
7713   //        bool       operator!=(L, R);
7714   //
7715   //   where LR is the result of the usual arithmetic conversions
7716   //   between types L and R.
7717   //
7718   // C++ [over.built]p24:
7719   //
7720   //   For every pair of promoted arithmetic types L and R, there exist
7721   //   candidate operator functions of the form
7722   //
7723   //        LR       operator?(bool, L, R);
7724   //
7725   //   where LR is the result of the usual arithmetic conversions
7726   //   between types L and R.
7727   // Our candidates ignore the first parameter.
7728   void addGenericBinaryArithmeticOverloads(bool isComparison) {
7729     if (!HasArithmeticOrEnumeralCandidateType)
7730       return;
7731 
7732     for (unsigned Left = FirstPromotedArithmeticType;
7733          Left < LastPromotedArithmeticType; ++Left) {
7734       for (unsigned Right = FirstPromotedArithmeticType;
7735            Right < LastPromotedArithmeticType; ++Right) {
7736         QualType LandR[2] = { getArithmeticType(Left),
7737                               getArithmeticType(Right) };
7738         QualType Result =
7739           isComparison ? S.Context.BoolTy
7740                        : getUsualArithmeticConversions(Left, Right);
7741         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7742       }
7743     }
7744 
7745     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
7746     // conditional operator for vector types.
7747     for (BuiltinCandidateTypeSet::iterator
7748               Vec1 = CandidateTypes[0].vector_begin(),
7749            Vec1End = CandidateTypes[0].vector_end();
7750          Vec1 != Vec1End; ++Vec1) {
7751       for (BuiltinCandidateTypeSet::iterator
7752                 Vec2 = CandidateTypes[1].vector_begin(),
7753              Vec2End = CandidateTypes[1].vector_end();
7754            Vec2 != Vec2End; ++Vec2) {
7755         QualType LandR[2] = { *Vec1, *Vec2 };
7756         QualType Result = S.Context.BoolTy;
7757         if (!isComparison) {
7758           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7759             Result = *Vec1;
7760           else
7761             Result = *Vec2;
7762         }
7763 
7764         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7765       }
7766     }
7767   }
7768 
7769   // C++ [over.built]p17:
7770   //
7771   //   For every pair of promoted integral types L and R, there
7772   //   exist candidate operator functions of the form
7773   //
7774   //      LR         operator%(L, R);
7775   //      LR         operator&(L, R);
7776   //      LR         operator^(L, R);
7777   //      LR         operator|(L, R);
7778   //      L          operator<<(L, R);
7779   //      L          operator>>(L, R);
7780   //
7781   //   where LR is the result of the usual arithmetic conversions
7782   //   between types L and R.
7783   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7784     if (!HasArithmeticOrEnumeralCandidateType)
7785       return;
7786 
7787     for (unsigned Left = FirstPromotedIntegralType;
7788          Left < LastPromotedIntegralType; ++Left) {
7789       for (unsigned Right = FirstPromotedIntegralType;
7790            Right < LastPromotedIntegralType; ++Right) {
7791         QualType LandR[2] = { getArithmeticType(Left),
7792                               getArithmeticType(Right) };
7793         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7794             ? LandR[0]
7795             : getUsualArithmeticConversions(Left, Right);
7796         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7797       }
7798     }
7799   }
7800 
7801   // C++ [over.built]p20:
7802   //
7803   //   For every pair (T, VQ), where T is an enumeration or
7804   //   pointer to member type and VQ is either volatile or
7805   //   empty, there exist candidate operator functions of the form
7806   //
7807   //        VQ T&      operator=(VQ T&, T);
7808   void addAssignmentMemberPointerOrEnumeralOverloads() {
7809     /// Set of (canonical) types that we've already handled.
7810     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7811 
7812     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7813       for (BuiltinCandidateTypeSet::iterator
7814                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7815              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7816            Enum != EnumEnd; ++Enum) {
7817         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)).second)
7818           continue;
7819 
7820         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, CandidateSet);
7821       }
7822 
7823       for (BuiltinCandidateTypeSet::iterator
7824                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7825              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7826            MemPtr != MemPtrEnd; ++MemPtr) {
7827         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)).second)
7828           continue;
7829 
7830         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, CandidateSet);
7831       }
7832     }
7833   }
7834 
7835   // C++ [over.built]p19:
7836   //
7837   //   For every pair (T, VQ), where T is any type and VQ is either
7838   //   volatile or empty, there exist candidate operator functions
7839   //   of the form
7840   //
7841   //        T*VQ&      operator=(T*VQ&, T*);
7842   //
7843   // C++ [over.built]p21:
7844   //
7845   //   For every pair (T, VQ), where T is a cv-qualified or
7846   //   cv-unqualified object type and VQ is either volatile or
7847   //   empty, there exist candidate operator functions of the form
7848   //
7849   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7850   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7851   void addAssignmentPointerOverloads(bool isEqualOp) {
7852     /// Set of (canonical) types that we've already handled.
7853     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7854 
7855     for (BuiltinCandidateTypeSet::iterator
7856               Ptr = CandidateTypes[0].pointer_begin(),
7857            PtrEnd = CandidateTypes[0].pointer_end();
7858          Ptr != PtrEnd; ++Ptr) {
7859       // If this is operator=, keep track of the builtin candidates we added.
7860       if (isEqualOp)
7861         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7862       else if (!(*Ptr)->getPointeeType()->isObjectType())
7863         continue;
7864 
7865       // non-volatile version
7866       QualType ParamTypes[2] = {
7867         S.Context.getLValueReferenceType(*Ptr),
7868         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7869       };
7870       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7871                             /*IsAssigmentOperator=*/ isEqualOp);
7872 
7873       bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7874                           VisibleTypeConversionsQuals.hasVolatile();
7875       if (NeedVolatile) {
7876         // volatile version
7877         ParamTypes[0] =
7878           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7879         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7880                               /*IsAssigmentOperator=*/isEqualOp);
7881       }
7882 
7883       if (!(*Ptr).isRestrictQualified() &&
7884           VisibleTypeConversionsQuals.hasRestrict()) {
7885         // restrict version
7886         ParamTypes[0]
7887           = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7888         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7889                               /*IsAssigmentOperator=*/isEqualOp);
7890 
7891         if (NeedVolatile) {
7892           // volatile restrict version
7893           ParamTypes[0]
7894             = S.Context.getLValueReferenceType(
7895                 S.Context.getCVRQualifiedType(*Ptr,
7896                                               (Qualifiers::Volatile |
7897                                                Qualifiers::Restrict)));
7898           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7899                                 /*IsAssigmentOperator=*/isEqualOp);
7900         }
7901       }
7902     }
7903 
7904     if (isEqualOp) {
7905       for (BuiltinCandidateTypeSet::iterator
7906                 Ptr = CandidateTypes[1].pointer_begin(),
7907              PtrEnd = CandidateTypes[1].pointer_end();
7908            Ptr != PtrEnd; ++Ptr) {
7909         // Make sure we don't add the same candidate twice.
7910         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)).second)
7911           continue;
7912 
7913         QualType ParamTypes[2] = {
7914           S.Context.getLValueReferenceType(*Ptr),
7915           *Ptr,
7916         };
7917 
7918         // non-volatile version
7919         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7920                               /*IsAssigmentOperator=*/true);
7921 
7922         bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7923                            VisibleTypeConversionsQuals.hasVolatile();
7924         if (NeedVolatile) {
7925           // volatile version
7926           ParamTypes[0] =
7927             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7928           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7929                                 /*IsAssigmentOperator=*/true);
7930         }
7931 
7932         if (!(*Ptr).isRestrictQualified() &&
7933             VisibleTypeConversionsQuals.hasRestrict()) {
7934           // restrict version
7935           ParamTypes[0]
7936             = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7937           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7938                                 /*IsAssigmentOperator=*/true);
7939 
7940           if (NeedVolatile) {
7941             // volatile restrict version
7942             ParamTypes[0]
7943               = S.Context.getLValueReferenceType(
7944                   S.Context.getCVRQualifiedType(*Ptr,
7945                                                 (Qualifiers::Volatile |
7946                                                  Qualifiers::Restrict)));
7947             S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7948                                   /*IsAssigmentOperator=*/true);
7949           }
7950         }
7951       }
7952     }
7953   }
7954 
7955   // C++ [over.built]p18:
7956   //
7957   //   For every triple (L, VQ, R), where L is an arithmetic type,
7958   //   VQ is either volatile or empty, and R is a promoted
7959   //   arithmetic type, there exist candidate operator functions of
7960   //   the form
7961   //
7962   //        VQ L&      operator=(VQ L&, R);
7963   //        VQ L&      operator*=(VQ L&, R);
7964   //        VQ L&      operator/=(VQ L&, R);
7965   //        VQ L&      operator+=(VQ L&, R);
7966   //        VQ L&      operator-=(VQ L&, R);
7967   void addAssignmentArithmeticOverloads(bool isEqualOp) {
7968     if (!HasArithmeticOrEnumeralCandidateType)
7969       return;
7970 
7971     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7972       for (unsigned Right = FirstPromotedArithmeticType;
7973            Right < LastPromotedArithmeticType; ++Right) {
7974         QualType ParamTypes[2];
7975         ParamTypes[1] = getArithmeticType(Right);
7976 
7977         // Add this built-in operator as a candidate (VQ is empty).
7978         ParamTypes[0] =
7979           S.Context.getLValueReferenceType(getArithmeticType(Left));
7980         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7981                               /*IsAssigmentOperator=*/isEqualOp);
7982 
7983         // Add this built-in operator as a candidate (VQ is 'volatile').
7984         if (VisibleTypeConversionsQuals.hasVolatile()) {
7985           ParamTypes[0] =
7986             S.Context.getVolatileType(getArithmeticType(Left));
7987           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7988           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7989                                 /*IsAssigmentOperator=*/isEqualOp);
7990         }
7991       }
7992     }
7993 
7994     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7995     for (BuiltinCandidateTypeSet::iterator
7996               Vec1 = CandidateTypes[0].vector_begin(),
7997            Vec1End = CandidateTypes[0].vector_end();
7998          Vec1 != Vec1End; ++Vec1) {
7999       for (BuiltinCandidateTypeSet::iterator
8000                 Vec2 = CandidateTypes[1].vector_begin(),
8001              Vec2End = CandidateTypes[1].vector_end();
8002            Vec2 != Vec2End; ++Vec2) {
8003         QualType ParamTypes[2];
8004         ParamTypes[1] = *Vec2;
8005         // Add this built-in operator as a candidate (VQ is empty).
8006         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
8007         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
8008                               /*IsAssigmentOperator=*/isEqualOp);
8009 
8010         // Add this built-in operator as a candidate (VQ is 'volatile').
8011         if (VisibleTypeConversionsQuals.hasVolatile()) {
8012           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
8013           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
8014           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
8015                                 /*IsAssigmentOperator=*/isEqualOp);
8016         }
8017       }
8018     }
8019   }
8020 
8021   // C++ [over.built]p22:
8022   //
8023   //   For every triple (L, VQ, R), where L is an integral type, VQ
8024   //   is either volatile or empty, and R is a promoted integral
8025   //   type, there exist candidate operator functions of the form
8026   //
8027   //        VQ L&       operator%=(VQ L&, R);
8028   //        VQ L&       operator<<=(VQ L&, R);
8029   //        VQ L&       operator>>=(VQ L&, R);
8030   //        VQ L&       operator&=(VQ L&, R);
8031   //        VQ L&       operator^=(VQ L&, R);
8032   //        VQ L&       operator|=(VQ L&, R);
8033   void addAssignmentIntegralOverloads() {
8034     if (!HasArithmeticOrEnumeralCandidateType)
8035       return;
8036 
8037     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
8038       for (unsigned Right = FirstPromotedIntegralType;
8039            Right < LastPromotedIntegralType; ++Right) {
8040         QualType ParamTypes[2];
8041         ParamTypes[1] = getArithmeticType(Right);
8042 
8043         // Add this built-in operator as a candidate (VQ is empty).
8044         ParamTypes[0] =
8045           S.Context.getLValueReferenceType(getArithmeticType(Left));
8046         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
8047         if (VisibleTypeConversionsQuals.hasVolatile()) {
8048           // Add this built-in operator as a candidate (VQ is 'volatile').
8049           ParamTypes[0] = getArithmeticType(Left);
8050           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
8051           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
8052           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
8053         }
8054       }
8055     }
8056   }
8057 
8058   // C++ [over.operator]p23:
8059   //
8060   //   There also exist candidate operator functions of the form
8061   //
8062   //        bool        operator!(bool);
8063   //        bool        operator&&(bool, bool);
8064   //        bool        operator||(bool, bool);
8065   void addExclaimOverload() {
8066     QualType ParamTy = S.Context.BoolTy;
8067     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet,
8068                           /*IsAssignmentOperator=*/false,
8069                           /*NumContextualBoolArguments=*/1);
8070   }
8071   void addAmpAmpOrPipePipeOverload() {
8072     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
8073     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet,
8074                           /*IsAssignmentOperator=*/false,
8075                           /*NumContextualBoolArguments=*/2);
8076   }
8077 
8078   // C++ [over.built]p13:
8079   //
8080   //   For every cv-qualified or cv-unqualified object type T there
8081   //   exist candidate operator functions of the form
8082   //
8083   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
8084   //        T&         operator[](T*, ptrdiff_t);
8085   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
8086   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
8087   //        T&         operator[](ptrdiff_t, T*);
8088   void addSubscriptOverloads() {
8089     for (BuiltinCandidateTypeSet::iterator
8090               Ptr = CandidateTypes[0].pointer_begin(),
8091            PtrEnd = CandidateTypes[0].pointer_end();
8092          Ptr != PtrEnd; ++Ptr) {
8093       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
8094       QualType PointeeType = (*Ptr)->getPointeeType();
8095       if (!PointeeType->isObjectType())
8096         continue;
8097 
8098       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
8099 
8100       // T& operator[](T*, ptrdiff_t)
8101       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
8102     }
8103 
8104     for (BuiltinCandidateTypeSet::iterator
8105               Ptr = CandidateTypes[1].pointer_begin(),
8106            PtrEnd = CandidateTypes[1].pointer_end();
8107          Ptr != PtrEnd; ++Ptr) {
8108       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
8109       QualType PointeeType = (*Ptr)->getPointeeType();
8110       if (!PointeeType->isObjectType())
8111         continue;
8112 
8113       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
8114 
8115       // T& operator[](ptrdiff_t, T*)
8116       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
8117     }
8118   }
8119 
8120   // C++ [over.built]p11:
8121   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
8122   //    C1 is the same type as C2 or is a derived class of C2, T is an object
8123   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
8124   //    there exist candidate operator functions of the form
8125   //
8126   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
8127   //
8128   //    where CV12 is the union of CV1 and CV2.
8129   void addArrowStarOverloads() {
8130     for (BuiltinCandidateTypeSet::iterator
8131              Ptr = CandidateTypes[0].pointer_begin(),
8132            PtrEnd = CandidateTypes[0].pointer_end();
8133          Ptr != PtrEnd; ++Ptr) {
8134       QualType C1Ty = (*Ptr);
8135       QualType C1;
8136       QualifierCollector Q1;
8137       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
8138       if (!isa<RecordType>(C1))
8139         continue;
8140       // heuristic to reduce number of builtin candidates in the set.
8141       // Add volatile/restrict version only if there are conversions to a
8142       // volatile/restrict type.
8143       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
8144         continue;
8145       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
8146         continue;
8147       for (BuiltinCandidateTypeSet::iterator
8148                 MemPtr = CandidateTypes[1].member_pointer_begin(),
8149              MemPtrEnd = CandidateTypes[1].member_pointer_end();
8150            MemPtr != MemPtrEnd; ++MemPtr) {
8151         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
8152         QualType C2 = QualType(mptr->getClass(), 0);
8153         C2 = C2.getUnqualifiedType();
8154         if (C1 != C2 && !S.IsDerivedFrom(CandidateSet.getLocation(), C1, C2))
8155           break;
8156         QualType ParamTypes[2] = { *Ptr, *MemPtr };
8157         // build CV12 T&
8158         QualType T = mptr->getPointeeType();
8159         if (!VisibleTypeConversionsQuals.hasVolatile() &&
8160             T.isVolatileQualified())
8161           continue;
8162         if (!VisibleTypeConversionsQuals.hasRestrict() &&
8163             T.isRestrictQualified())
8164           continue;
8165         T = Q1.apply(S.Context, T);
8166         QualType ResultTy = S.Context.getLValueReferenceType(T);
8167         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
8168       }
8169     }
8170   }
8171 
8172   // Note that we don't consider the first argument, since it has been
8173   // contextually converted to bool long ago. The candidates below are
8174   // therefore added as binary.
8175   //
8176   // C++ [over.built]p25:
8177   //   For every type T, where T is a pointer, pointer-to-member, or scoped
8178   //   enumeration type, there exist candidate operator functions of the form
8179   //
8180   //        T        operator?(bool, T, T);
8181   //
8182   void addConditionalOperatorOverloads() {
8183     /// Set of (canonical) types that we've already handled.
8184     llvm::SmallPtrSet<QualType, 8> AddedTypes;
8185 
8186     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
8187       for (BuiltinCandidateTypeSet::iterator
8188                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
8189              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
8190            Ptr != PtrEnd; ++Ptr) {
8191         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)).second)
8192           continue;
8193 
8194         QualType ParamTypes[2] = { *Ptr, *Ptr };
8195         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, CandidateSet);
8196       }
8197 
8198       for (BuiltinCandidateTypeSet::iterator
8199                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
8200              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
8201            MemPtr != MemPtrEnd; ++MemPtr) {
8202         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)).second)
8203           continue;
8204 
8205         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
8206         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, CandidateSet);
8207       }
8208 
8209       if (S.getLangOpts().CPlusPlus11) {
8210         for (BuiltinCandidateTypeSet::iterator
8211                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
8212                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
8213              Enum != EnumEnd; ++Enum) {
8214           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
8215             continue;
8216 
8217           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)).second)
8218             continue;
8219 
8220           QualType ParamTypes[2] = { *Enum, *Enum };
8221           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, CandidateSet);
8222         }
8223       }
8224     }
8225   }
8226 };
8227 
8228 } // end anonymous namespace
8229 
8230 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
8231 /// operator overloads to the candidate set (C++ [over.built]), based
8232 /// on the operator @p Op and the arguments given. For example, if the
8233 /// operator is a binary '+', this routine might add "int
8234 /// operator+(int, int)" to cover integer addition.
8235 void Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
8236                                         SourceLocation OpLoc,
8237                                         ArrayRef<Expr *> Args,
8238                                         OverloadCandidateSet &CandidateSet) {
8239   // Find all of the types that the arguments can convert to, but only
8240   // if the operator we're looking at has built-in operator candidates
8241   // that make use of these types. Also record whether we encounter non-record
8242   // candidate types or either arithmetic or enumeral candidate types.
8243   Qualifiers VisibleTypeConversionsQuals;
8244   VisibleTypeConversionsQuals.addConst();
8245   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
8246     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
8247 
8248   bool HasNonRecordCandidateType = false;
8249   bool HasArithmeticOrEnumeralCandidateType = false;
8250   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
8251   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
8252     CandidateTypes.emplace_back(*this);
8253     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
8254                                                  OpLoc,
8255                                                  true,
8256                                                  (Op == OO_Exclaim ||
8257                                                   Op == OO_AmpAmp ||
8258                                                   Op == OO_PipePipe),
8259                                                  VisibleTypeConversionsQuals);
8260     HasNonRecordCandidateType = HasNonRecordCandidateType ||
8261         CandidateTypes[ArgIdx].hasNonRecordTypes();
8262     HasArithmeticOrEnumeralCandidateType =
8263         HasArithmeticOrEnumeralCandidateType ||
8264         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
8265   }
8266 
8267   // Exit early when no non-record types have been added to the candidate set
8268   // for any of the arguments to the operator.
8269   //
8270   // We can't exit early for !, ||, or &&, since there we have always have
8271   // 'bool' overloads.
8272   if (!HasNonRecordCandidateType &&
8273       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
8274     return;
8275 
8276   // Setup an object to manage the common state for building overloads.
8277   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args,
8278                                            VisibleTypeConversionsQuals,
8279                                            HasArithmeticOrEnumeralCandidateType,
8280                                            CandidateTypes, CandidateSet);
8281 
8282   // Dispatch over the operation to add in only those overloads which apply.
8283   switch (Op) {
8284   case OO_None:
8285   case NUM_OVERLOADED_OPERATORS:
8286     llvm_unreachable("Expected an overloaded operator");
8287 
8288   case OO_New:
8289   case OO_Delete:
8290   case OO_Array_New:
8291   case OO_Array_Delete:
8292   case OO_Call:
8293     llvm_unreachable(
8294                     "Special operators don't use AddBuiltinOperatorCandidates");
8295 
8296   case OO_Comma:
8297   case OO_Arrow:
8298   case OO_Coawait:
8299     // C++ [over.match.oper]p3:
8300     //   -- For the operator ',', the unary operator '&', the
8301     //      operator '->', or the operator 'co_await', the
8302     //      built-in candidates set is empty.
8303     break;
8304 
8305   case OO_Plus: // '+' is either unary or binary
8306     if (Args.size() == 1)
8307       OpBuilder.addUnaryPlusPointerOverloads();
8308     // Fall through.
8309 
8310   case OO_Minus: // '-' is either unary or binary
8311     if (Args.size() == 1) {
8312       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
8313     } else {
8314       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
8315       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
8316     }
8317     break;
8318 
8319   case OO_Star: // '*' is either unary or binary
8320     if (Args.size() == 1)
8321       OpBuilder.addUnaryStarPointerOverloads();
8322     else
8323       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
8324     break;
8325 
8326   case OO_Slash:
8327     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
8328     break;
8329 
8330   case OO_PlusPlus:
8331   case OO_MinusMinus:
8332     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
8333     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
8334     break;
8335 
8336   case OO_EqualEqual:
8337   case OO_ExclaimEqual:
8338     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
8339     // Fall through.
8340 
8341   case OO_Less:
8342   case OO_Greater:
8343   case OO_LessEqual:
8344   case OO_GreaterEqual:
8345     OpBuilder.addRelationalPointerOrEnumeralOverloads();
8346     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
8347     break;
8348 
8349   case OO_Percent:
8350   case OO_Caret:
8351   case OO_Pipe:
8352   case OO_LessLess:
8353   case OO_GreaterGreater:
8354     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
8355     break;
8356 
8357   case OO_Amp: // '&' is either unary or binary
8358     if (Args.size() == 1)
8359       // C++ [over.match.oper]p3:
8360       //   -- For the operator ',', the unary operator '&', or the
8361       //      operator '->', the built-in candidates set is empty.
8362       break;
8363 
8364     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
8365     break;
8366 
8367   case OO_Tilde:
8368     OpBuilder.addUnaryTildePromotedIntegralOverloads();
8369     break;
8370 
8371   case OO_Equal:
8372     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
8373     // Fall through.
8374 
8375   case OO_PlusEqual:
8376   case OO_MinusEqual:
8377     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
8378     // Fall through.
8379 
8380   case OO_StarEqual:
8381   case OO_SlashEqual:
8382     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
8383     break;
8384 
8385   case OO_PercentEqual:
8386   case OO_LessLessEqual:
8387   case OO_GreaterGreaterEqual:
8388   case OO_AmpEqual:
8389   case OO_CaretEqual:
8390   case OO_PipeEqual:
8391     OpBuilder.addAssignmentIntegralOverloads();
8392     break;
8393 
8394   case OO_Exclaim:
8395     OpBuilder.addExclaimOverload();
8396     break;
8397 
8398   case OO_AmpAmp:
8399   case OO_PipePipe:
8400     OpBuilder.addAmpAmpOrPipePipeOverload();
8401     break;
8402 
8403   case OO_Subscript:
8404     OpBuilder.addSubscriptOverloads();
8405     break;
8406 
8407   case OO_ArrowStar:
8408     OpBuilder.addArrowStarOverloads();
8409     break;
8410 
8411   case OO_Conditional:
8412     OpBuilder.addConditionalOperatorOverloads();
8413     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
8414     break;
8415   }
8416 }
8417 
8418 /// \brief Add function candidates found via argument-dependent lookup
8419 /// to the set of overloading candidates.
8420 ///
8421 /// This routine performs argument-dependent name lookup based on the
8422 /// given function name (which may also be an operator name) and adds
8423 /// all of the overload candidates found by ADL to the overload
8424 /// candidate set (C++ [basic.lookup.argdep]).
8425 void
8426 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
8427                                            SourceLocation Loc,
8428                                            ArrayRef<Expr *> Args,
8429                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
8430                                            OverloadCandidateSet& CandidateSet,
8431                                            bool PartialOverloading) {
8432   ADLResult Fns;
8433 
8434   // FIXME: This approach for uniquing ADL results (and removing
8435   // redundant candidates from the set) relies on pointer-equality,
8436   // which means we need to key off the canonical decl.  However,
8437   // always going back to the canonical decl might not get us the
8438   // right set of default arguments.  What default arguments are
8439   // we supposed to consider on ADL candidates, anyway?
8440 
8441   // FIXME: Pass in the explicit template arguments?
8442   ArgumentDependentLookup(Name, Loc, Args, Fns);
8443 
8444   // Erase all of the candidates we already knew about.
8445   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
8446                                    CandEnd = CandidateSet.end();
8447        Cand != CandEnd; ++Cand)
8448     if (Cand->Function) {
8449       Fns.erase(Cand->Function);
8450       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
8451         Fns.erase(FunTmpl);
8452     }
8453 
8454   // For each of the ADL candidates we found, add it to the overload
8455   // set.
8456   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
8457     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
8458     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
8459       if (ExplicitTemplateArgs)
8460         continue;
8461 
8462       AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
8463                            PartialOverloading);
8464     } else
8465       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
8466                                    FoundDecl, ExplicitTemplateArgs,
8467                                    Args, CandidateSet, PartialOverloading);
8468   }
8469 }
8470 
8471 // Determines whether Cand1 is "better" in terms of its enable_if attrs than
8472 // Cand2 for overloading. This function assumes that all of the enable_if attrs
8473 // on Cand1 and Cand2 have conditions that evaluate to true.
8474 //
8475 // Cand1's set of enable_if attributes are said to be "better" than Cand2's iff
8476 // Cand1's first N enable_if attributes have precisely the same conditions as
8477 // Cand2's first N enable_if attributes (where N = the number of enable_if
8478 // attributes on Cand2), and Cand1 has more than N enable_if attributes.
8479 static bool hasBetterEnableIfAttrs(Sema &S, const FunctionDecl *Cand1,
8480                                    const FunctionDecl *Cand2) {
8481 
8482   // FIXME: The next several lines are just
8483   // specific_attr_iterator<EnableIfAttr> but going in declaration order,
8484   // instead of reverse order which is how they're stored in the AST.
8485   auto Cand1Attrs = getOrderedEnableIfAttrs(Cand1);
8486   auto Cand2Attrs = getOrderedEnableIfAttrs(Cand2);
8487 
8488   // Candidate 1 is better if it has strictly more attributes and
8489   // the common sequence is identical.
8490   if (Cand1Attrs.size() <= Cand2Attrs.size())
8491     return false;
8492 
8493   auto Cand1I = Cand1Attrs.begin();
8494   llvm::FoldingSetNodeID Cand1ID, Cand2ID;
8495   for (auto &Cand2A : Cand2Attrs) {
8496     Cand1ID.clear();
8497     Cand2ID.clear();
8498 
8499     auto &Cand1A = *Cand1I++;
8500     Cand1A->getCond()->Profile(Cand1ID, S.getASTContext(), true);
8501     Cand2A->getCond()->Profile(Cand2ID, S.getASTContext(), true);
8502     if (Cand1ID != Cand2ID)
8503       return false;
8504   }
8505 
8506   return true;
8507 }
8508 
8509 /// isBetterOverloadCandidate - Determines whether the first overload
8510 /// candidate is a better candidate than the second (C++ 13.3.3p1).
8511 bool clang::isBetterOverloadCandidate(Sema &S, const OverloadCandidate &Cand1,
8512                                       const OverloadCandidate &Cand2,
8513                                       SourceLocation Loc,
8514                                       bool UserDefinedConversion) {
8515   // Define viable functions to be better candidates than non-viable
8516   // functions.
8517   if (!Cand2.Viable)
8518     return Cand1.Viable;
8519   else if (!Cand1.Viable)
8520     return false;
8521 
8522   // C++ [over.match.best]p1:
8523   //
8524   //   -- if F is a static member function, ICS1(F) is defined such
8525   //      that ICS1(F) is neither better nor worse than ICS1(G) for
8526   //      any function G, and, symmetrically, ICS1(G) is neither
8527   //      better nor worse than ICS1(F).
8528   unsigned StartArg = 0;
8529   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
8530     StartArg = 1;
8531 
8532   // C++ [over.match.best]p1:
8533   //   A viable function F1 is defined to be a better function than another
8534   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
8535   //   conversion sequence than ICSi(F2), and then...
8536   unsigned NumArgs = Cand1.NumConversions;
8537   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
8538   bool HasBetterConversion = false;
8539   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
8540     switch (CompareImplicitConversionSequences(S, Loc,
8541                                                Cand1.Conversions[ArgIdx],
8542                                                Cand2.Conversions[ArgIdx])) {
8543     case ImplicitConversionSequence::Better:
8544       // Cand1 has a better conversion sequence.
8545       HasBetterConversion = true;
8546       break;
8547 
8548     case ImplicitConversionSequence::Worse:
8549       // Cand1 can't be better than Cand2.
8550       return false;
8551 
8552     case ImplicitConversionSequence::Indistinguishable:
8553       // Do nothing.
8554       break;
8555     }
8556   }
8557 
8558   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
8559   //       ICSj(F2), or, if not that,
8560   if (HasBetterConversion)
8561     return true;
8562 
8563   //   -- the context is an initialization by user-defined conversion
8564   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
8565   //      from the return type of F1 to the destination type (i.e.,
8566   //      the type of the entity being initialized) is a better
8567   //      conversion sequence than the standard conversion sequence
8568   //      from the return type of F2 to the destination type.
8569   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
8570       isa<CXXConversionDecl>(Cand1.Function) &&
8571       isa<CXXConversionDecl>(Cand2.Function)) {
8572     // First check whether we prefer one of the conversion functions over the
8573     // other. This only distinguishes the results in non-standard, extension
8574     // cases such as the conversion from a lambda closure type to a function
8575     // pointer or block.
8576     ImplicitConversionSequence::CompareKind Result =
8577         compareConversionFunctions(S, Cand1.Function, Cand2.Function);
8578     if (Result == ImplicitConversionSequence::Indistinguishable)
8579       Result = CompareStandardConversionSequences(S, Loc,
8580                                                   Cand1.FinalConversion,
8581                                                   Cand2.FinalConversion);
8582 
8583     if (Result != ImplicitConversionSequence::Indistinguishable)
8584       return Result == ImplicitConversionSequence::Better;
8585 
8586     // FIXME: Compare kind of reference binding if conversion functions
8587     // convert to a reference type used in direct reference binding, per
8588     // C++14 [over.match.best]p1 section 2 bullet 3.
8589   }
8590 
8591   //    -- F1 is a non-template function and F2 is a function template
8592   //       specialization, or, if not that,
8593   bool Cand1IsSpecialization = Cand1.Function &&
8594                                Cand1.Function->getPrimaryTemplate();
8595   bool Cand2IsSpecialization = Cand2.Function &&
8596                                Cand2.Function->getPrimaryTemplate();
8597   if (Cand1IsSpecialization != Cand2IsSpecialization)
8598     return Cand2IsSpecialization;
8599 
8600   //   -- F1 and F2 are function template specializations, and the function
8601   //      template for F1 is more specialized than the template for F2
8602   //      according to the partial ordering rules described in 14.5.5.2, or,
8603   //      if not that,
8604   if (Cand1IsSpecialization && Cand2IsSpecialization) {
8605     if (FunctionTemplateDecl *BetterTemplate
8606           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
8607                                          Cand2.Function->getPrimaryTemplate(),
8608                                          Loc,
8609                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
8610                                                              : TPOC_Call,
8611                                          Cand1.ExplicitCallArguments,
8612                                          Cand2.ExplicitCallArguments))
8613       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
8614   }
8615 
8616   // Check for enable_if value-based overload resolution.
8617   if (Cand1.Function && Cand2.Function &&
8618       (Cand1.Function->hasAttr<EnableIfAttr>() ||
8619        Cand2.Function->hasAttr<EnableIfAttr>()))
8620     return hasBetterEnableIfAttrs(S, Cand1.Function, Cand2.Function);
8621 
8622   if (S.getLangOpts().CUDA && S.getLangOpts().CUDATargetOverloads &&
8623       Cand1.Function && Cand2.Function) {
8624     FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext);
8625     return S.IdentifyCUDAPreference(Caller, Cand1.Function) >
8626            S.IdentifyCUDAPreference(Caller, Cand2.Function);
8627   }
8628 
8629   bool HasPS1 = Cand1.Function != nullptr &&
8630                 functionHasPassObjectSizeParams(Cand1.Function);
8631   bool HasPS2 = Cand2.Function != nullptr &&
8632                 functionHasPassObjectSizeParams(Cand2.Function);
8633   return HasPS1 != HasPS2 && HasPS1;
8634 }
8635 
8636 /// Determine whether two declarations are "equivalent" for the purposes of
8637 /// name lookup and overload resolution. This applies when the same internal/no
8638 /// linkage entity is defined by two modules (probably by textually including
8639 /// the same header). In such a case, we don't consider the declarations to
8640 /// declare the same entity, but we also don't want lookups with both
8641 /// declarations visible to be ambiguous in some cases (this happens when using
8642 /// a modularized libstdc++).
8643 bool Sema::isEquivalentInternalLinkageDeclaration(const NamedDecl *A,
8644                                                   const NamedDecl *B) {
8645   auto *VA = dyn_cast_or_null<ValueDecl>(A);
8646   auto *VB = dyn_cast_or_null<ValueDecl>(B);
8647   if (!VA || !VB)
8648     return false;
8649 
8650   // The declarations must be declaring the same name as an internal linkage
8651   // entity in different modules.
8652   if (!VA->getDeclContext()->getRedeclContext()->Equals(
8653           VB->getDeclContext()->getRedeclContext()) ||
8654       getOwningModule(const_cast<ValueDecl *>(VA)) ==
8655           getOwningModule(const_cast<ValueDecl *>(VB)) ||
8656       VA->isExternallyVisible() || VB->isExternallyVisible())
8657     return false;
8658 
8659   // Check that the declarations appear to be equivalent.
8660   //
8661   // FIXME: Checking the type isn't really enough to resolve the ambiguity.
8662   // For constants and functions, we should check the initializer or body is
8663   // the same. For non-constant variables, we shouldn't allow it at all.
8664   if (Context.hasSameType(VA->getType(), VB->getType()))
8665     return true;
8666 
8667   // Enum constants within unnamed enumerations will have different types, but
8668   // may still be similar enough to be interchangeable for our purposes.
8669   if (auto *EA = dyn_cast<EnumConstantDecl>(VA)) {
8670     if (auto *EB = dyn_cast<EnumConstantDecl>(VB)) {
8671       // Only handle anonymous enums. If the enumerations were named and
8672       // equivalent, they would have been merged to the same type.
8673       auto *EnumA = cast<EnumDecl>(EA->getDeclContext());
8674       auto *EnumB = cast<EnumDecl>(EB->getDeclContext());
8675       if (EnumA->hasNameForLinkage() || EnumB->hasNameForLinkage() ||
8676           !Context.hasSameType(EnumA->getIntegerType(),
8677                                EnumB->getIntegerType()))
8678         return false;
8679       // Allow this only if the value is the same for both enumerators.
8680       return llvm::APSInt::isSameValue(EA->getInitVal(), EB->getInitVal());
8681     }
8682   }
8683 
8684   // Nothing else is sufficiently similar.
8685   return false;
8686 }
8687 
8688 void Sema::diagnoseEquivalentInternalLinkageDeclarations(
8689     SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {
8690   Diag(Loc, diag::ext_equivalent_internal_linkage_decl_in_modules) << D;
8691 
8692   Module *M = getOwningModule(const_cast<NamedDecl*>(D));
8693   Diag(D->getLocation(), diag::note_equivalent_internal_linkage_decl)
8694       << !M << (M ? M->getFullModuleName() : "");
8695 
8696   for (auto *E : Equiv) {
8697     Module *M = getOwningModule(const_cast<NamedDecl*>(E));
8698     Diag(E->getLocation(), diag::note_equivalent_internal_linkage_decl)
8699         << !M << (M ? M->getFullModuleName() : "");
8700   }
8701 }
8702 
8703 /// \brief Computes the best viable function (C++ 13.3.3)
8704 /// within an overload candidate set.
8705 ///
8706 /// \param Loc The location of the function name (or operator symbol) for
8707 /// which overload resolution occurs.
8708 ///
8709 /// \param Best If overload resolution was successful or found a deleted
8710 /// function, \p Best points to the candidate function found.
8711 ///
8712 /// \returns The result of overload resolution.
8713 OverloadingResult
8714 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
8715                                          iterator &Best,
8716                                          bool UserDefinedConversion) {
8717   // Find the best viable function.
8718   Best = end();
8719   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8720     if (Cand->Viable)
8721       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
8722                                                      UserDefinedConversion))
8723         Best = Cand;
8724   }
8725 
8726   // If we didn't find any viable functions, abort.
8727   if (Best == end())
8728     return OR_No_Viable_Function;
8729 
8730   llvm::SmallVector<const NamedDecl *, 4> EquivalentCands;
8731 
8732   // Make sure that this function is better than every other viable
8733   // function. If not, we have an ambiguity.
8734   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8735     if (Cand->Viable &&
8736         Cand != Best &&
8737         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
8738                                    UserDefinedConversion)) {
8739       if (S.isEquivalentInternalLinkageDeclaration(Best->Function,
8740                                                    Cand->Function)) {
8741         EquivalentCands.push_back(Cand->Function);
8742         continue;
8743       }
8744 
8745       Best = end();
8746       return OR_Ambiguous;
8747     }
8748   }
8749 
8750   // Best is the best viable function.
8751   if (Best->Function &&
8752       (Best->Function->isDeleted() ||
8753        S.isFunctionConsideredUnavailable(Best->Function)))
8754     return OR_Deleted;
8755 
8756   if (!EquivalentCands.empty())
8757     S.diagnoseEquivalentInternalLinkageDeclarations(Loc, Best->Function,
8758                                                     EquivalentCands);
8759 
8760   return OR_Success;
8761 }
8762 
8763 namespace {
8764 
8765 enum OverloadCandidateKind {
8766   oc_function,
8767   oc_method,
8768   oc_constructor,
8769   oc_function_template,
8770   oc_method_template,
8771   oc_constructor_template,
8772   oc_implicit_default_constructor,
8773   oc_implicit_copy_constructor,
8774   oc_implicit_move_constructor,
8775   oc_implicit_copy_assignment,
8776   oc_implicit_move_assignment,
8777   oc_implicit_inherited_constructor
8778 };
8779 
8780 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
8781                                                 FunctionDecl *Fn,
8782                                                 std::string &Description) {
8783   bool isTemplate = false;
8784 
8785   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
8786     isTemplate = true;
8787     Description = S.getTemplateArgumentBindingsText(
8788       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
8789   }
8790 
8791   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
8792     if (!Ctor->isImplicit())
8793       return isTemplate ? oc_constructor_template : oc_constructor;
8794 
8795     if (Ctor->getInheritedConstructor())
8796       return oc_implicit_inherited_constructor;
8797 
8798     if (Ctor->isDefaultConstructor())
8799       return oc_implicit_default_constructor;
8800 
8801     if (Ctor->isMoveConstructor())
8802       return oc_implicit_move_constructor;
8803 
8804     assert(Ctor->isCopyConstructor() &&
8805            "unexpected sort of implicit constructor");
8806     return oc_implicit_copy_constructor;
8807   }
8808 
8809   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
8810     // This actually gets spelled 'candidate function' for now, but
8811     // it doesn't hurt to split it out.
8812     if (!Meth->isImplicit())
8813       return isTemplate ? oc_method_template : oc_method;
8814 
8815     if (Meth->isMoveAssignmentOperator())
8816       return oc_implicit_move_assignment;
8817 
8818     if (Meth->isCopyAssignmentOperator())
8819       return oc_implicit_copy_assignment;
8820 
8821     assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
8822     return oc_method;
8823   }
8824 
8825   return isTemplate ? oc_function_template : oc_function;
8826 }
8827 
8828 void MaybeEmitInheritedConstructorNote(Sema &S, Decl *Fn) {
8829   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
8830   if (!Ctor) return;
8831 
8832   Ctor = Ctor->getInheritedConstructor();
8833   if (!Ctor) return;
8834 
8835   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
8836 }
8837 
8838 } // end anonymous namespace
8839 
8840 static bool isFunctionAlwaysEnabled(const ASTContext &Ctx,
8841                                     const FunctionDecl *FD) {
8842   for (auto *EnableIf : FD->specific_attrs<EnableIfAttr>()) {
8843     bool AlwaysTrue;
8844     if (!EnableIf->getCond()->EvaluateAsBooleanCondition(AlwaysTrue, Ctx))
8845       return false;
8846     if (!AlwaysTrue)
8847       return false;
8848   }
8849   return true;
8850 }
8851 
8852 /// \brief Returns true if we can take the address of the function.
8853 ///
8854 /// \param Complain - If true, we'll emit a diagnostic
8855 /// \param InOverloadResolution - For the purposes of emitting a diagnostic, are
8856 ///   we in overload resolution?
8857 /// \param Loc - The location of the statement we're complaining about. Ignored
8858 ///   if we're not complaining, or if we're in overload resolution.
8859 static bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD,
8860                                               bool Complain,
8861                                               bool InOverloadResolution,
8862                                               SourceLocation Loc) {
8863   if (!isFunctionAlwaysEnabled(S.Context, FD)) {
8864     if (Complain) {
8865       if (InOverloadResolution)
8866         S.Diag(FD->getLocStart(),
8867                diag::note_addrof_ovl_candidate_disabled_by_enable_if_attr);
8868       else
8869         S.Diag(Loc, diag::err_addrof_function_disabled_by_enable_if_attr) << FD;
8870     }
8871     return false;
8872   }
8873 
8874   auto I = std::find_if(FD->param_begin(), FD->param_end(),
8875                         std::mem_fn(&ParmVarDecl::hasAttr<PassObjectSizeAttr>));
8876   if (I == FD->param_end())
8877     return true;
8878 
8879   if (Complain) {
8880     // Add one to ParamNo because it's user-facing
8881     unsigned ParamNo = std::distance(FD->param_begin(), I) + 1;
8882     if (InOverloadResolution)
8883       S.Diag(FD->getLocation(),
8884              diag::note_ovl_candidate_has_pass_object_size_params)
8885           << ParamNo;
8886     else
8887       S.Diag(Loc, diag::err_address_of_function_with_pass_object_size_params)
8888           << FD << ParamNo;
8889   }
8890   return false;
8891 }
8892 
8893 static bool checkAddressOfCandidateIsAvailable(Sema &S,
8894                                                const FunctionDecl *FD) {
8895   return checkAddressOfFunctionIsAvailable(S, FD, /*Complain=*/true,
8896                                            /*InOverloadResolution=*/true,
8897                                            /*Loc=*/SourceLocation());
8898 }
8899 
8900 bool Sema::checkAddressOfFunctionIsAvailable(const FunctionDecl *Function,
8901                                              bool Complain,
8902                                              SourceLocation Loc) {
8903   return ::checkAddressOfFunctionIsAvailable(*this, Function, Complain,
8904                                              /*InOverloadResolution=*/false,
8905                                              Loc);
8906 }
8907 
8908 // Notes the location of an overload candidate.
8909 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType,
8910                                  bool TakingAddress) {
8911   if (TakingAddress && !checkAddressOfCandidateIsAvailable(*this, Fn))
8912     return;
8913 
8914   std::string FnDesc;
8915   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
8916   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
8917                              << (unsigned) K << FnDesc;
8918 
8919   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
8920   Diag(Fn->getLocation(), PD);
8921   MaybeEmitInheritedConstructorNote(*this, Fn);
8922 }
8923 
8924 // Notes the location of all overload candidates designated through
8925 // OverloadedExpr
8926 void Sema::NoteAllOverloadCandidates(Expr *OverloadedExpr, QualType DestType,
8927                                      bool TakingAddress) {
8928   assert(OverloadedExpr->getType() == Context.OverloadTy);
8929 
8930   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
8931   OverloadExpr *OvlExpr = Ovl.Expression;
8932 
8933   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8934                             IEnd = OvlExpr->decls_end();
8935        I != IEnd; ++I) {
8936     if (FunctionTemplateDecl *FunTmpl =
8937                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
8938       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType,
8939                             TakingAddress);
8940     } else if (FunctionDecl *Fun
8941                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
8942       NoteOverloadCandidate(Fun, DestType, TakingAddress);
8943     }
8944   }
8945 }
8946 
8947 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
8948 /// "lead" diagnostic; it will be given two arguments, the source and
8949 /// target types of the conversion.
8950 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8951                                  Sema &S,
8952                                  SourceLocation CaretLoc,
8953                                  const PartialDiagnostic &PDiag) const {
8954   S.Diag(CaretLoc, PDiag)
8955     << Ambiguous.getFromType() << Ambiguous.getToType();
8956   // FIXME: The note limiting machinery is borrowed from
8957   // OverloadCandidateSet::NoteCandidates; there's an opportunity for
8958   // refactoring here.
8959   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8960   unsigned CandsShown = 0;
8961   AmbiguousConversionSequence::const_iterator I, E;
8962   for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8963     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
8964       break;
8965     ++CandsShown;
8966     S.NoteOverloadCandidate(*I);
8967   }
8968   if (I != E)
8969     S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
8970 }
8971 
8972 static void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand,
8973                                   unsigned I, bool TakingCandidateAddress) {
8974   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8975   assert(Conv.isBad());
8976   assert(Cand->Function && "for now, candidate must be a function");
8977   FunctionDecl *Fn = Cand->Function;
8978 
8979   // There's a conversion slot for the object argument if this is a
8980   // non-constructor method.  Note that 'I' corresponds the
8981   // conversion-slot index.
8982   bool isObjectArgument = false;
8983   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8984     if (I == 0)
8985       isObjectArgument = true;
8986     else
8987       I--;
8988   }
8989 
8990   std::string FnDesc;
8991   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8992 
8993   Expr *FromExpr = Conv.Bad.FromExpr;
8994   QualType FromTy = Conv.Bad.getFromType();
8995   QualType ToTy = Conv.Bad.getToType();
8996 
8997   if (FromTy == S.Context.OverloadTy) {
8998     assert(FromExpr && "overload set argument came from implicit argument?");
8999     Expr *E = FromExpr->IgnoreParens();
9000     if (isa<UnaryOperator>(E))
9001       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
9002     DeclarationName Name = cast<OverloadExpr>(E)->getName();
9003 
9004     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
9005       << (unsigned) FnKind << FnDesc
9006       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9007       << ToTy << Name << I+1;
9008     MaybeEmitInheritedConstructorNote(S, Fn);
9009     return;
9010   }
9011 
9012   // Do some hand-waving analysis to see if the non-viability is due
9013   // to a qualifier mismatch.
9014   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
9015   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
9016   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
9017     CToTy = RT->getPointeeType();
9018   else {
9019     // TODO: detect and diagnose the full richness of const mismatches.
9020     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
9021       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
9022         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
9023   }
9024 
9025   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
9026       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
9027     Qualifiers FromQs = CFromTy.getQualifiers();
9028     Qualifiers ToQs = CToTy.getQualifiers();
9029 
9030     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
9031       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
9032         << (unsigned) FnKind << FnDesc
9033         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9034         << FromTy
9035         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
9036         << (unsigned) isObjectArgument << I+1;
9037       MaybeEmitInheritedConstructorNote(S, Fn);
9038       return;
9039     }
9040 
9041     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
9042       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
9043         << (unsigned) FnKind << FnDesc
9044         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9045         << FromTy
9046         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
9047         << (unsigned) isObjectArgument << I+1;
9048       MaybeEmitInheritedConstructorNote(S, Fn);
9049       return;
9050     }
9051 
9052     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
9053       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
9054       << (unsigned) FnKind << FnDesc
9055       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9056       << FromTy
9057       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
9058       << (unsigned) isObjectArgument << I+1;
9059       MaybeEmitInheritedConstructorNote(S, Fn);
9060       return;
9061     }
9062 
9063     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
9064     assert(CVR && "unexpected qualifiers mismatch");
9065 
9066     if (isObjectArgument) {
9067       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
9068         << (unsigned) FnKind << FnDesc
9069         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9070         << FromTy << (CVR - 1);
9071     } else {
9072       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
9073         << (unsigned) FnKind << FnDesc
9074         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9075         << FromTy << (CVR - 1) << I+1;
9076     }
9077     MaybeEmitInheritedConstructorNote(S, Fn);
9078     return;
9079   }
9080 
9081   // Special diagnostic for failure to convert an initializer list, since
9082   // telling the user that it has type void is not useful.
9083   if (FromExpr && isa<InitListExpr>(FromExpr)) {
9084     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
9085       << (unsigned) FnKind << FnDesc
9086       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9087       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
9088     MaybeEmitInheritedConstructorNote(S, Fn);
9089     return;
9090   }
9091 
9092   // Diagnose references or pointers to incomplete types differently,
9093   // since it's far from impossible that the incompleteness triggered
9094   // the failure.
9095   QualType TempFromTy = FromTy.getNonReferenceType();
9096   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
9097     TempFromTy = PTy->getPointeeType();
9098   if (TempFromTy->isIncompleteType()) {
9099     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
9100       << (unsigned) FnKind << FnDesc
9101       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9102       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
9103     MaybeEmitInheritedConstructorNote(S, Fn);
9104     return;
9105   }
9106 
9107   // Diagnose base -> derived pointer conversions.
9108   unsigned BaseToDerivedConversion = 0;
9109   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
9110     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
9111       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
9112                                                FromPtrTy->getPointeeType()) &&
9113           !FromPtrTy->getPointeeType()->isIncompleteType() &&
9114           !ToPtrTy->getPointeeType()->isIncompleteType() &&
9115           S.IsDerivedFrom(SourceLocation(), ToPtrTy->getPointeeType(),
9116                           FromPtrTy->getPointeeType()))
9117         BaseToDerivedConversion = 1;
9118     }
9119   } else if (const ObjCObjectPointerType *FromPtrTy
9120                                     = FromTy->getAs<ObjCObjectPointerType>()) {
9121     if (const ObjCObjectPointerType *ToPtrTy
9122                                         = ToTy->getAs<ObjCObjectPointerType>())
9123       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
9124         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
9125           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
9126                                                 FromPtrTy->getPointeeType()) &&
9127               FromIface->isSuperClassOf(ToIface))
9128             BaseToDerivedConversion = 2;
9129   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
9130     if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
9131         !FromTy->isIncompleteType() &&
9132         !ToRefTy->getPointeeType()->isIncompleteType() &&
9133         S.IsDerivedFrom(SourceLocation(), ToRefTy->getPointeeType(), FromTy)) {
9134       BaseToDerivedConversion = 3;
9135     } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
9136                ToTy.getNonReferenceType().getCanonicalType() ==
9137                FromTy.getNonReferenceType().getCanonicalType()) {
9138       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
9139         << (unsigned) FnKind << FnDesc
9140         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9141         << (unsigned) isObjectArgument << I + 1;
9142       MaybeEmitInheritedConstructorNote(S, Fn);
9143       return;
9144     }
9145   }
9146 
9147   if (BaseToDerivedConversion) {
9148     S.Diag(Fn->getLocation(),
9149            diag::note_ovl_candidate_bad_base_to_derived_conv)
9150       << (unsigned) FnKind << FnDesc
9151       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9152       << (BaseToDerivedConversion - 1)
9153       << FromTy << ToTy << I+1;
9154     MaybeEmitInheritedConstructorNote(S, Fn);
9155     return;
9156   }
9157 
9158   if (isa<ObjCObjectPointerType>(CFromTy) &&
9159       isa<PointerType>(CToTy)) {
9160       Qualifiers FromQs = CFromTy.getQualifiers();
9161       Qualifiers ToQs = CToTy.getQualifiers();
9162       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
9163         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
9164         << (unsigned) FnKind << FnDesc
9165         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9166         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
9167         MaybeEmitInheritedConstructorNote(S, Fn);
9168         return;
9169       }
9170   }
9171 
9172   if (TakingCandidateAddress &&
9173       !checkAddressOfCandidateIsAvailable(S, Cand->Function))
9174     return;
9175 
9176   // Emit the generic diagnostic and, optionally, add the hints to it.
9177   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
9178   FDiag << (unsigned) FnKind << FnDesc
9179     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
9180     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
9181     << (unsigned) (Cand->Fix.Kind);
9182 
9183   // If we can fix the conversion, suggest the FixIts.
9184   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
9185        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
9186     FDiag << *HI;
9187   S.Diag(Fn->getLocation(), FDiag);
9188 
9189   MaybeEmitInheritedConstructorNote(S, Fn);
9190 }
9191 
9192 /// Additional arity mismatch diagnosis specific to a function overload
9193 /// candidates. This is not covered by the more general DiagnoseArityMismatch()
9194 /// over a candidate in any candidate set.
9195 static bool CheckArityMismatch(Sema &S, OverloadCandidate *Cand,
9196                                unsigned NumArgs) {
9197   FunctionDecl *Fn = Cand->Function;
9198   unsigned MinParams = Fn->getMinRequiredArguments();
9199 
9200   // With invalid overloaded operators, it's possible that we think we
9201   // have an arity mismatch when in fact it looks like we have the
9202   // right number of arguments, because only overloaded operators have
9203   // the weird behavior of overloading member and non-member functions.
9204   // Just don't report anything.
9205   if (Fn->isInvalidDecl() &&
9206       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
9207     return true;
9208 
9209   if (NumArgs < MinParams) {
9210     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
9211            (Cand->FailureKind == ovl_fail_bad_deduction &&
9212             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
9213   } else {
9214     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
9215            (Cand->FailureKind == ovl_fail_bad_deduction &&
9216             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
9217   }
9218 
9219   return false;
9220 }
9221 
9222 /// General arity mismatch diagnosis over a candidate in a candidate set.
9223 static void DiagnoseArityMismatch(Sema &S, Decl *D, unsigned NumFormalArgs) {
9224   assert(isa<FunctionDecl>(D) &&
9225       "The templated declaration should at least be a function"
9226       " when diagnosing bad template argument deduction due to too many"
9227       " or too few arguments");
9228 
9229   FunctionDecl *Fn = cast<FunctionDecl>(D);
9230 
9231   // TODO: treat calls to a missing default constructor as a special case
9232   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
9233   unsigned MinParams = Fn->getMinRequiredArguments();
9234 
9235   // at least / at most / exactly
9236   unsigned mode, modeCount;
9237   if (NumFormalArgs < MinParams) {
9238     if (MinParams != FnTy->getNumParams() || FnTy->isVariadic() ||
9239         FnTy->isTemplateVariadic())
9240       mode = 0; // "at least"
9241     else
9242       mode = 2; // "exactly"
9243     modeCount = MinParams;
9244   } else {
9245     if (MinParams != FnTy->getNumParams())
9246       mode = 1; // "at most"
9247     else
9248       mode = 2; // "exactly"
9249     modeCount = FnTy->getNumParams();
9250   }
9251 
9252   std::string Description;
9253   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
9254 
9255   if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
9256     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
9257       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != nullptr)
9258       << mode << Fn->getParamDecl(0) << NumFormalArgs;
9259   else
9260     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
9261       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != nullptr)
9262       << mode << modeCount << NumFormalArgs;
9263   MaybeEmitInheritedConstructorNote(S, Fn);
9264 }
9265 
9266 /// Arity mismatch diagnosis specific to a function overload candidate.
9267 static void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
9268                                   unsigned NumFormalArgs) {
9269   if (!CheckArityMismatch(S, Cand, NumFormalArgs))
9270     DiagnoseArityMismatch(S, Cand->Function, NumFormalArgs);
9271 }
9272 
9273 static TemplateDecl *getDescribedTemplate(Decl *Templated) {
9274   if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Templated))
9275     return FD->getDescribedFunctionTemplate();
9276   else if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Templated))
9277     return RD->getDescribedClassTemplate();
9278 
9279   llvm_unreachable("Unsupported: Getting the described template declaration"
9280                    " for bad deduction diagnosis");
9281 }
9282 
9283 /// Diagnose a failed template-argument deduction.
9284 static void DiagnoseBadDeduction(Sema &S, Decl *Templated,
9285                                  DeductionFailureInfo &DeductionFailure,
9286                                  unsigned NumArgs,
9287                                  bool TakingCandidateAddress) {
9288   TemplateParameter Param = DeductionFailure.getTemplateParameter();
9289   NamedDecl *ParamD;
9290   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
9291   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
9292   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
9293   switch (DeductionFailure.Result) {
9294   case Sema::TDK_Success:
9295     llvm_unreachable("TDK_success while diagnosing bad deduction");
9296 
9297   case Sema::TDK_Incomplete: {
9298     assert(ParamD && "no parameter found for incomplete deduction result");
9299     S.Diag(Templated->getLocation(),
9300            diag::note_ovl_candidate_incomplete_deduction)
9301         << ParamD->getDeclName();
9302     MaybeEmitInheritedConstructorNote(S, Templated);
9303     return;
9304   }
9305 
9306   case Sema::TDK_Underqualified: {
9307     assert(ParamD && "no parameter found for bad qualifiers deduction result");
9308     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
9309 
9310     QualType Param = DeductionFailure.getFirstArg()->getAsType();
9311 
9312     // Param will have been canonicalized, but it should just be a
9313     // qualified version of ParamD, so move the qualifiers to that.
9314     QualifierCollector Qs;
9315     Qs.strip(Param);
9316     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
9317     assert(S.Context.hasSameType(Param, NonCanonParam));
9318 
9319     // Arg has also been canonicalized, but there's nothing we can do
9320     // about that.  It also doesn't matter as much, because it won't
9321     // have any template parameters in it (because deduction isn't
9322     // done on dependent types).
9323     QualType Arg = DeductionFailure.getSecondArg()->getAsType();
9324 
9325     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified)
9326         << ParamD->getDeclName() << Arg << NonCanonParam;
9327     MaybeEmitInheritedConstructorNote(S, Templated);
9328     return;
9329   }
9330 
9331   case Sema::TDK_Inconsistent: {
9332     assert(ParamD && "no parameter found for inconsistent deduction result");
9333     int which = 0;
9334     if (isa<TemplateTypeParmDecl>(ParamD))
9335       which = 0;
9336     else if (isa<NonTypeTemplateParmDecl>(ParamD))
9337       which = 1;
9338     else {
9339       which = 2;
9340     }
9341 
9342     S.Diag(Templated->getLocation(),
9343            diag::note_ovl_candidate_inconsistent_deduction)
9344         << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg()
9345         << *DeductionFailure.getSecondArg();
9346     MaybeEmitInheritedConstructorNote(S, Templated);
9347     return;
9348   }
9349 
9350   case Sema::TDK_InvalidExplicitArguments:
9351     assert(ParamD && "no parameter found for invalid explicit arguments");
9352     if (ParamD->getDeclName())
9353       S.Diag(Templated->getLocation(),
9354              diag::note_ovl_candidate_explicit_arg_mismatch_named)
9355           << ParamD->getDeclName();
9356     else {
9357       int index = 0;
9358       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
9359         index = TTP->getIndex();
9360       else if (NonTypeTemplateParmDecl *NTTP
9361                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
9362         index = NTTP->getIndex();
9363       else
9364         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
9365       S.Diag(Templated->getLocation(),
9366              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
9367           << (index + 1);
9368     }
9369     MaybeEmitInheritedConstructorNote(S, Templated);
9370     return;
9371 
9372   case Sema::TDK_TooManyArguments:
9373   case Sema::TDK_TooFewArguments:
9374     DiagnoseArityMismatch(S, Templated, NumArgs);
9375     return;
9376 
9377   case Sema::TDK_InstantiationDepth:
9378     S.Diag(Templated->getLocation(),
9379            diag::note_ovl_candidate_instantiation_depth);
9380     MaybeEmitInheritedConstructorNote(S, Templated);
9381     return;
9382 
9383   case Sema::TDK_SubstitutionFailure: {
9384     // Format the template argument list into the argument string.
9385     SmallString<128> TemplateArgString;
9386     if (TemplateArgumentList *Args =
9387             DeductionFailure.getTemplateArgumentList()) {
9388       TemplateArgString = " ";
9389       TemplateArgString += S.getTemplateArgumentBindingsText(
9390           getDescribedTemplate(Templated)->getTemplateParameters(), *Args);
9391     }
9392 
9393     // If this candidate was disabled by enable_if, say so.
9394     PartialDiagnosticAt *PDiag = DeductionFailure.getSFINAEDiagnostic();
9395     if (PDiag && PDiag->second.getDiagID() ==
9396           diag::err_typename_nested_not_found_enable_if) {
9397       // FIXME: Use the source range of the condition, and the fully-qualified
9398       //        name of the enable_if template. These are both present in PDiag.
9399       S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
9400         << "'enable_if'" << TemplateArgString;
9401       return;
9402     }
9403 
9404     // Format the SFINAE diagnostic into the argument string.
9405     // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
9406     //        formatted message in another diagnostic.
9407     SmallString<128> SFINAEArgString;
9408     SourceRange R;
9409     if (PDiag) {
9410       SFINAEArgString = ": ";
9411       R = SourceRange(PDiag->first, PDiag->first);
9412       PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
9413     }
9414 
9415     S.Diag(Templated->getLocation(),
9416            diag::note_ovl_candidate_substitution_failure)
9417         << TemplateArgString << SFINAEArgString << R;
9418     MaybeEmitInheritedConstructorNote(S, Templated);
9419     return;
9420   }
9421 
9422   case Sema::TDK_FailedOverloadResolution: {
9423     OverloadExpr::FindResult R = OverloadExpr::find(DeductionFailure.getExpr());
9424     S.Diag(Templated->getLocation(),
9425            diag::note_ovl_candidate_failed_overload_resolution)
9426         << R.Expression->getName();
9427     return;
9428   }
9429 
9430   case Sema::TDK_DeducedMismatch: {
9431     // Format the template argument list into the argument string.
9432     SmallString<128> TemplateArgString;
9433     if (TemplateArgumentList *Args =
9434             DeductionFailure.getTemplateArgumentList()) {
9435       TemplateArgString = " ";
9436       TemplateArgString += S.getTemplateArgumentBindingsText(
9437           getDescribedTemplate(Templated)->getTemplateParameters(), *Args);
9438     }
9439 
9440     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_deduced_mismatch)
9441         << (*DeductionFailure.getCallArgIndex() + 1)
9442         << *DeductionFailure.getFirstArg() << *DeductionFailure.getSecondArg()
9443         << TemplateArgString;
9444     break;
9445   }
9446 
9447   case Sema::TDK_NonDeducedMismatch: {
9448     // FIXME: Provide a source location to indicate what we couldn't match.
9449     TemplateArgument FirstTA = *DeductionFailure.getFirstArg();
9450     TemplateArgument SecondTA = *DeductionFailure.getSecondArg();
9451     if (FirstTA.getKind() == TemplateArgument::Template &&
9452         SecondTA.getKind() == TemplateArgument::Template) {
9453       TemplateName FirstTN = FirstTA.getAsTemplate();
9454       TemplateName SecondTN = SecondTA.getAsTemplate();
9455       if (FirstTN.getKind() == TemplateName::Template &&
9456           SecondTN.getKind() == TemplateName::Template) {
9457         if (FirstTN.getAsTemplateDecl()->getName() ==
9458             SecondTN.getAsTemplateDecl()->getName()) {
9459           // FIXME: This fixes a bad diagnostic where both templates are named
9460           // the same.  This particular case is a bit difficult since:
9461           // 1) It is passed as a string to the diagnostic printer.
9462           // 2) The diagnostic printer only attempts to find a better
9463           //    name for types, not decls.
9464           // Ideally, this should folded into the diagnostic printer.
9465           S.Diag(Templated->getLocation(),
9466                  diag::note_ovl_candidate_non_deduced_mismatch_qualified)
9467               << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
9468           return;
9469         }
9470       }
9471     }
9472 
9473     if (TakingCandidateAddress && isa<FunctionDecl>(Templated) &&
9474         !checkAddressOfCandidateIsAvailable(S, cast<FunctionDecl>(Templated)))
9475       return;
9476 
9477     // FIXME: For generic lambda parameters, check if the function is a lambda
9478     // call operator, and if so, emit a prettier and more informative
9479     // diagnostic that mentions 'auto' and lambda in addition to
9480     // (or instead of?) the canonical template type parameters.
9481     S.Diag(Templated->getLocation(),
9482            diag::note_ovl_candidate_non_deduced_mismatch)
9483         << FirstTA << SecondTA;
9484     return;
9485   }
9486   // TODO: diagnose these individually, then kill off
9487   // note_ovl_candidate_bad_deduction, which is uselessly vague.
9488   case Sema::TDK_MiscellaneousDeductionFailure:
9489     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);
9490     MaybeEmitInheritedConstructorNote(S, Templated);
9491     return;
9492   }
9493 }
9494 
9495 /// Diagnose a failed template-argument deduction, for function calls.
9496 static void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
9497                                  unsigned NumArgs,
9498                                  bool TakingCandidateAddress) {
9499   unsigned TDK = Cand->DeductionFailure.Result;
9500   if (TDK == Sema::TDK_TooFewArguments || TDK == Sema::TDK_TooManyArguments) {
9501     if (CheckArityMismatch(S, Cand, NumArgs))
9502       return;
9503   }
9504   DiagnoseBadDeduction(S, Cand->Function, // pattern
9505                        Cand->DeductionFailure, NumArgs, TakingCandidateAddress);
9506 }
9507 
9508 /// CUDA: diagnose an invalid call across targets.
9509 static void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
9510   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
9511   FunctionDecl *Callee = Cand->Function;
9512 
9513   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
9514                            CalleeTarget = S.IdentifyCUDATarget(Callee);
9515 
9516   std::string FnDesc;
9517   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
9518 
9519   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
9520       << (unsigned)FnKind << CalleeTarget << CallerTarget;
9521 
9522   // This could be an implicit constructor for which we could not infer the
9523   // target due to a collsion. Diagnose that case.
9524   CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Callee);
9525   if (Meth != nullptr && Meth->isImplicit()) {
9526     CXXRecordDecl *ParentClass = Meth->getParent();
9527     Sema::CXXSpecialMember CSM;
9528 
9529     switch (FnKind) {
9530     default:
9531       return;
9532     case oc_implicit_default_constructor:
9533       CSM = Sema::CXXDefaultConstructor;
9534       break;
9535     case oc_implicit_copy_constructor:
9536       CSM = Sema::CXXCopyConstructor;
9537       break;
9538     case oc_implicit_move_constructor:
9539       CSM = Sema::CXXMoveConstructor;
9540       break;
9541     case oc_implicit_copy_assignment:
9542       CSM = Sema::CXXCopyAssignment;
9543       break;
9544     case oc_implicit_move_assignment:
9545       CSM = Sema::CXXMoveAssignment;
9546       break;
9547     };
9548 
9549     bool ConstRHS = false;
9550     if (Meth->getNumParams()) {
9551       if (const ReferenceType *RT =
9552               Meth->getParamDecl(0)->getType()->getAs<ReferenceType>()) {
9553         ConstRHS = RT->getPointeeType().isConstQualified();
9554       }
9555     }
9556 
9557     S.inferCUDATargetForImplicitSpecialMember(ParentClass, CSM, Meth,
9558                                               /* ConstRHS */ ConstRHS,
9559                                               /* Diagnose */ true);
9560   }
9561 }
9562 
9563 static void DiagnoseFailedEnableIfAttr(Sema &S, OverloadCandidate *Cand) {
9564   FunctionDecl *Callee = Cand->Function;
9565   EnableIfAttr *Attr = static_cast<EnableIfAttr*>(Cand->DeductionFailure.Data);
9566 
9567   S.Diag(Callee->getLocation(),
9568          diag::note_ovl_candidate_disabled_by_enable_if_attr)
9569       << Attr->getCond()->getSourceRange() << Attr->getMessage();
9570 }
9571 
9572 /// Generates a 'note' diagnostic for an overload candidate.  We've
9573 /// already generated a primary error at the call site.
9574 ///
9575 /// It really does need to be a single diagnostic with its caret
9576 /// pointed at the candidate declaration.  Yes, this creates some
9577 /// major challenges of technical writing.  Yes, this makes pointing
9578 /// out problems with specific arguments quite awkward.  It's still
9579 /// better than generating twenty screens of text for every failed
9580 /// overload.
9581 ///
9582 /// It would be great to be able to express per-candidate problems
9583 /// more richly for those diagnostic clients that cared, but we'd
9584 /// still have to be just as careful with the default diagnostics.
9585 static void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
9586                                   unsigned NumArgs,
9587                                   bool TakingCandidateAddress) {
9588   FunctionDecl *Fn = Cand->Function;
9589 
9590   // Note deleted candidates, but only if they're viable.
9591   if (Cand->Viable && (Fn->isDeleted() ||
9592       S.isFunctionConsideredUnavailable(Fn))) {
9593     std::string FnDesc;
9594     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
9595 
9596     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
9597       << FnKind << FnDesc
9598       << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
9599     MaybeEmitInheritedConstructorNote(S, Fn);
9600     return;
9601   }
9602 
9603   // We don't really have anything else to say about viable candidates.
9604   if (Cand->Viable) {
9605     S.NoteOverloadCandidate(Fn);
9606     return;
9607   }
9608 
9609   switch (Cand->FailureKind) {
9610   case ovl_fail_too_many_arguments:
9611   case ovl_fail_too_few_arguments:
9612     return DiagnoseArityMismatch(S, Cand, NumArgs);
9613 
9614   case ovl_fail_bad_deduction:
9615     return DiagnoseBadDeduction(S, Cand, NumArgs, TakingCandidateAddress);
9616 
9617   case ovl_fail_illegal_constructor: {
9618     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_illegal_constructor)
9619       << (Fn->getPrimaryTemplate() ? 1 : 0);
9620     MaybeEmitInheritedConstructorNote(S, Fn);
9621     return;
9622   }
9623 
9624   case ovl_fail_trivial_conversion:
9625   case ovl_fail_bad_final_conversion:
9626   case ovl_fail_final_conversion_not_exact:
9627     return S.NoteOverloadCandidate(Fn);
9628 
9629   case ovl_fail_bad_conversion: {
9630     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
9631     for (unsigned N = Cand->NumConversions; I != N; ++I)
9632       if (Cand->Conversions[I].isBad())
9633         return DiagnoseBadConversion(S, Cand, I, TakingCandidateAddress);
9634 
9635     // FIXME: this currently happens when we're called from SemaInit
9636     // when user-conversion overload fails.  Figure out how to handle
9637     // those conditions and diagnose them well.
9638     return S.NoteOverloadCandidate(Fn);
9639   }
9640 
9641   case ovl_fail_bad_target:
9642     return DiagnoseBadTarget(S, Cand);
9643 
9644   case ovl_fail_enable_if:
9645     return DiagnoseFailedEnableIfAttr(S, Cand);
9646 
9647   case ovl_fail_addr_not_available: {
9648     bool Available = checkAddressOfCandidateIsAvailable(S, Cand->Function);
9649     (void)Available;
9650     assert(!Available);
9651     break;
9652   }
9653   }
9654 }
9655 
9656 static void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
9657   // Desugar the type of the surrogate down to a function type,
9658   // retaining as many typedefs as possible while still showing
9659   // the function type (and, therefore, its parameter types).
9660   QualType FnType = Cand->Surrogate->getConversionType();
9661   bool isLValueReference = false;
9662   bool isRValueReference = false;
9663   bool isPointer = false;
9664   if (const LValueReferenceType *FnTypeRef =
9665         FnType->getAs<LValueReferenceType>()) {
9666     FnType = FnTypeRef->getPointeeType();
9667     isLValueReference = true;
9668   } else if (const RValueReferenceType *FnTypeRef =
9669                FnType->getAs<RValueReferenceType>()) {
9670     FnType = FnTypeRef->getPointeeType();
9671     isRValueReference = true;
9672   }
9673   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
9674     FnType = FnTypePtr->getPointeeType();
9675     isPointer = true;
9676   }
9677   // Desugar down to a function type.
9678   FnType = QualType(FnType->getAs<FunctionType>(), 0);
9679   // Reconstruct the pointer/reference as appropriate.
9680   if (isPointer) FnType = S.Context.getPointerType(FnType);
9681   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
9682   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
9683 
9684   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
9685     << FnType;
9686   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
9687 }
9688 
9689 static void NoteBuiltinOperatorCandidate(Sema &S, StringRef Opc,
9690                                          SourceLocation OpLoc,
9691                                          OverloadCandidate *Cand) {
9692   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
9693   std::string TypeStr("operator");
9694   TypeStr += Opc;
9695   TypeStr += "(";
9696   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
9697   if (Cand->NumConversions == 1) {
9698     TypeStr += ")";
9699     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
9700   } else {
9701     TypeStr += ", ";
9702     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
9703     TypeStr += ")";
9704     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
9705   }
9706 }
9707 
9708 static void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
9709                                          OverloadCandidate *Cand) {
9710   unsigned NoOperands = Cand->NumConversions;
9711   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
9712     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
9713     if (ICS.isBad()) break; // all meaningless after first invalid
9714     if (!ICS.isAmbiguous()) continue;
9715 
9716     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
9717                               S.PDiag(diag::note_ambiguous_type_conversion));
9718   }
9719 }
9720 
9721 static SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
9722   if (Cand->Function)
9723     return Cand->Function->getLocation();
9724   if (Cand->IsSurrogate)
9725     return Cand->Surrogate->getLocation();
9726   return SourceLocation();
9727 }
9728 
9729 static unsigned RankDeductionFailure(const DeductionFailureInfo &DFI) {
9730   switch ((Sema::TemplateDeductionResult)DFI.Result) {
9731   case Sema::TDK_Success:
9732     llvm_unreachable("TDK_success while diagnosing bad deduction");
9733 
9734   case Sema::TDK_Invalid:
9735   case Sema::TDK_Incomplete:
9736     return 1;
9737 
9738   case Sema::TDK_Underqualified:
9739   case Sema::TDK_Inconsistent:
9740     return 2;
9741 
9742   case Sema::TDK_SubstitutionFailure:
9743   case Sema::TDK_DeducedMismatch:
9744   case Sema::TDK_NonDeducedMismatch:
9745   case Sema::TDK_MiscellaneousDeductionFailure:
9746     return 3;
9747 
9748   case Sema::TDK_InstantiationDepth:
9749   case Sema::TDK_FailedOverloadResolution:
9750     return 4;
9751 
9752   case Sema::TDK_InvalidExplicitArguments:
9753     return 5;
9754 
9755   case Sema::TDK_TooManyArguments:
9756   case Sema::TDK_TooFewArguments:
9757     return 6;
9758   }
9759   llvm_unreachable("Unhandled deduction result");
9760 }
9761 
9762 namespace {
9763 struct CompareOverloadCandidatesForDisplay {
9764   Sema &S;
9765   SourceLocation Loc;
9766   size_t NumArgs;
9767 
9768   CompareOverloadCandidatesForDisplay(Sema &S, SourceLocation Loc, size_t nArgs)
9769       : S(S), NumArgs(nArgs) {}
9770 
9771   bool operator()(const OverloadCandidate *L,
9772                   const OverloadCandidate *R) {
9773     // Fast-path this check.
9774     if (L == R) return false;
9775 
9776     // Order first by viability.
9777     if (L->Viable) {
9778       if (!R->Viable) return true;
9779 
9780       // TODO: introduce a tri-valued comparison for overload
9781       // candidates.  Would be more worthwhile if we had a sort
9782       // that could exploit it.
9783       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
9784       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
9785     } else if (R->Viable)
9786       return false;
9787 
9788     assert(L->Viable == R->Viable);
9789 
9790     // Criteria by which we can sort non-viable candidates:
9791     if (!L->Viable) {
9792       // 1. Arity mismatches come after other candidates.
9793       if (L->FailureKind == ovl_fail_too_many_arguments ||
9794           L->FailureKind == ovl_fail_too_few_arguments) {
9795         if (R->FailureKind == ovl_fail_too_many_arguments ||
9796             R->FailureKind == ovl_fail_too_few_arguments) {
9797           int LDist = std::abs((int)L->getNumParams() - (int)NumArgs);
9798           int RDist = std::abs((int)R->getNumParams() - (int)NumArgs);
9799           if (LDist == RDist) {
9800             if (L->FailureKind == R->FailureKind)
9801               // Sort non-surrogates before surrogates.
9802               return !L->IsSurrogate && R->IsSurrogate;
9803             // Sort candidates requiring fewer parameters than there were
9804             // arguments given after candidates requiring more parameters
9805             // than there were arguments given.
9806             return L->FailureKind == ovl_fail_too_many_arguments;
9807           }
9808           return LDist < RDist;
9809         }
9810         return false;
9811       }
9812       if (R->FailureKind == ovl_fail_too_many_arguments ||
9813           R->FailureKind == ovl_fail_too_few_arguments)
9814         return true;
9815 
9816       // 2. Bad conversions come first and are ordered by the number
9817       // of bad conversions and quality of good conversions.
9818       if (L->FailureKind == ovl_fail_bad_conversion) {
9819         if (R->FailureKind != ovl_fail_bad_conversion)
9820           return true;
9821 
9822         // The conversion that can be fixed with a smaller number of changes,
9823         // comes first.
9824         unsigned numLFixes = L->Fix.NumConversionsFixed;
9825         unsigned numRFixes = R->Fix.NumConversionsFixed;
9826         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
9827         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
9828         if (numLFixes != numRFixes) {
9829           return numLFixes < numRFixes;
9830         }
9831 
9832         // If there's any ordering between the defined conversions...
9833         // FIXME: this might not be transitive.
9834         assert(L->NumConversions == R->NumConversions);
9835 
9836         int leftBetter = 0;
9837         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
9838         for (unsigned E = L->NumConversions; I != E; ++I) {
9839           switch (CompareImplicitConversionSequences(S, Loc,
9840                                                      L->Conversions[I],
9841                                                      R->Conversions[I])) {
9842           case ImplicitConversionSequence::Better:
9843             leftBetter++;
9844             break;
9845 
9846           case ImplicitConversionSequence::Worse:
9847             leftBetter--;
9848             break;
9849 
9850           case ImplicitConversionSequence::Indistinguishable:
9851             break;
9852           }
9853         }
9854         if (leftBetter > 0) return true;
9855         if (leftBetter < 0) return false;
9856 
9857       } else if (R->FailureKind == ovl_fail_bad_conversion)
9858         return false;
9859 
9860       if (L->FailureKind == ovl_fail_bad_deduction) {
9861         if (R->FailureKind != ovl_fail_bad_deduction)
9862           return true;
9863 
9864         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
9865           return RankDeductionFailure(L->DeductionFailure)
9866                < RankDeductionFailure(R->DeductionFailure);
9867       } else if (R->FailureKind == ovl_fail_bad_deduction)
9868         return false;
9869 
9870       // TODO: others?
9871     }
9872 
9873     // Sort everything else by location.
9874     SourceLocation LLoc = GetLocationForCandidate(L);
9875     SourceLocation RLoc = GetLocationForCandidate(R);
9876 
9877     // Put candidates without locations (e.g. builtins) at the end.
9878     if (LLoc.isInvalid()) return false;
9879     if (RLoc.isInvalid()) return true;
9880 
9881     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
9882   }
9883 };
9884 }
9885 
9886 /// CompleteNonViableCandidate - Normally, overload resolution only
9887 /// computes up to the first. Produces the FixIt set if possible.
9888 static void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
9889                                        ArrayRef<Expr *> Args) {
9890   assert(!Cand->Viable);
9891 
9892   // Don't do anything on failures other than bad conversion.
9893   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
9894 
9895   // We only want the FixIts if all the arguments can be corrected.
9896   bool Unfixable = false;
9897   // Use a implicit copy initialization to check conversion fixes.
9898   Cand->Fix.setConversionChecker(TryCopyInitialization);
9899 
9900   // Skip forward to the first bad conversion.
9901   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
9902   unsigned ConvCount = Cand->NumConversions;
9903   while (true) {
9904     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
9905     ConvIdx++;
9906     if (Cand->Conversions[ConvIdx - 1].isBad()) {
9907       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
9908       break;
9909     }
9910   }
9911 
9912   if (ConvIdx == ConvCount)
9913     return;
9914 
9915   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
9916          "remaining conversion is initialized?");
9917 
9918   // FIXME: this should probably be preserved from the overload
9919   // operation somehow.
9920   bool SuppressUserConversions = false;
9921 
9922   const FunctionProtoType* Proto;
9923   unsigned ArgIdx = ConvIdx;
9924 
9925   if (Cand->IsSurrogate) {
9926     QualType ConvType
9927       = Cand->Surrogate->getConversionType().getNonReferenceType();
9928     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
9929       ConvType = ConvPtrType->getPointeeType();
9930     Proto = ConvType->getAs<FunctionProtoType>();
9931     ArgIdx--;
9932   } else if (Cand->Function) {
9933     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
9934     if (isa<CXXMethodDecl>(Cand->Function) &&
9935         !isa<CXXConstructorDecl>(Cand->Function))
9936       ArgIdx--;
9937   } else {
9938     // Builtin binary operator with a bad first conversion.
9939     assert(ConvCount <= 3);
9940     for (; ConvIdx != ConvCount; ++ConvIdx)
9941       Cand->Conversions[ConvIdx]
9942         = TryCopyInitialization(S, Args[ConvIdx],
9943                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
9944                                 SuppressUserConversions,
9945                                 /*InOverloadResolution*/ true,
9946                                 /*AllowObjCWritebackConversion=*/
9947                                   S.getLangOpts().ObjCAutoRefCount);
9948     return;
9949   }
9950 
9951   // Fill in the rest of the conversions.
9952   unsigned NumParams = Proto->getNumParams();
9953   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
9954     if (ArgIdx < NumParams) {
9955       Cand->Conversions[ConvIdx] = TryCopyInitialization(
9956           S, Args[ArgIdx], Proto->getParamType(ArgIdx), SuppressUserConversions,
9957           /*InOverloadResolution=*/true,
9958           /*AllowObjCWritebackConversion=*/
9959           S.getLangOpts().ObjCAutoRefCount);
9960       // Store the FixIt in the candidate if it exists.
9961       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
9962         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
9963     }
9964     else
9965       Cand->Conversions[ConvIdx].setEllipsis();
9966   }
9967 }
9968 
9969 /// PrintOverloadCandidates - When overload resolution fails, prints
9970 /// diagnostic messages containing the candidates in the candidate
9971 /// set.
9972 void OverloadCandidateSet::NoteCandidates(Sema &S,
9973                                           OverloadCandidateDisplayKind OCD,
9974                                           ArrayRef<Expr *> Args,
9975                                           StringRef Opc,
9976                                           SourceLocation OpLoc) {
9977   // Sort the candidates by viability and position.  Sorting directly would
9978   // be prohibitive, so we make a set of pointers and sort those.
9979   SmallVector<OverloadCandidate*, 32> Cands;
9980   if (OCD == OCD_AllCandidates) Cands.reserve(size());
9981   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9982     if (Cand->Viable)
9983       Cands.push_back(Cand);
9984     else if (OCD == OCD_AllCandidates) {
9985       CompleteNonViableCandidate(S, Cand, Args);
9986       if (Cand->Function || Cand->IsSurrogate)
9987         Cands.push_back(Cand);
9988       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
9989       // want to list every possible builtin candidate.
9990     }
9991   }
9992 
9993   std::sort(Cands.begin(), Cands.end(),
9994             CompareOverloadCandidatesForDisplay(S, OpLoc, Args.size()));
9995 
9996   bool ReportedAmbiguousConversions = false;
9997 
9998   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
9999   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
10000   unsigned CandsShown = 0;
10001   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
10002     OverloadCandidate *Cand = *I;
10003 
10004     // Set an arbitrary limit on the number of candidate functions we'll spam
10005     // the user with.  FIXME: This limit should depend on details of the
10006     // candidate list.
10007     if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
10008       break;
10009     }
10010     ++CandsShown;
10011 
10012     if (Cand->Function)
10013       NoteFunctionCandidate(S, Cand, Args.size(),
10014                             /*TakingCandidateAddress=*/false);
10015     else if (Cand->IsSurrogate)
10016       NoteSurrogateCandidate(S, Cand);
10017     else {
10018       assert(Cand->Viable &&
10019              "Non-viable built-in candidates are not added to Cands.");
10020       // Generally we only see ambiguities including viable builtin
10021       // operators if overload resolution got screwed up by an
10022       // ambiguous user-defined conversion.
10023       //
10024       // FIXME: It's quite possible for different conversions to see
10025       // different ambiguities, though.
10026       if (!ReportedAmbiguousConversions) {
10027         NoteAmbiguousUserConversions(S, OpLoc, Cand);
10028         ReportedAmbiguousConversions = true;
10029       }
10030 
10031       // If this is a viable builtin, print it.
10032       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
10033     }
10034   }
10035 
10036   if (I != E)
10037     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
10038 }
10039 
10040 static SourceLocation
10041 GetLocationForCandidate(const TemplateSpecCandidate *Cand) {
10042   return Cand->Specialization ? Cand->Specialization->getLocation()
10043                               : SourceLocation();
10044 }
10045 
10046 namespace {
10047 struct CompareTemplateSpecCandidatesForDisplay {
10048   Sema &S;
10049   CompareTemplateSpecCandidatesForDisplay(Sema &S) : S(S) {}
10050 
10051   bool operator()(const TemplateSpecCandidate *L,
10052                   const TemplateSpecCandidate *R) {
10053     // Fast-path this check.
10054     if (L == R)
10055       return false;
10056 
10057     // Assuming that both candidates are not matches...
10058 
10059     // Sort by the ranking of deduction failures.
10060     if (L->DeductionFailure.Result != R->DeductionFailure.Result)
10061       return RankDeductionFailure(L->DeductionFailure) <
10062              RankDeductionFailure(R->DeductionFailure);
10063 
10064     // Sort everything else by location.
10065     SourceLocation LLoc = GetLocationForCandidate(L);
10066     SourceLocation RLoc = GetLocationForCandidate(R);
10067 
10068     // Put candidates without locations (e.g. builtins) at the end.
10069     if (LLoc.isInvalid())
10070       return false;
10071     if (RLoc.isInvalid())
10072       return true;
10073 
10074     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
10075   }
10076 };
10077 }
10078 
10079 /// Diagnose a template argument deduction failure.
10080 /// We are treating these failures as overload failures due to bad
10081 /// deductions.
10082 void TemplateSpecCandidate::NoteDeductionFailure(Sema &S,
10083                                                  bool ForTakingAddress) {
10084   DiagnoseBadDeduction(S, Specialization, // pattern
10085                        DeductionFailure, /*NumArgs=*/0, ForTakingAddress);
10086 }
10087 
10088 void TemplateSpecCandidateSet::destroyCandidates() {
10089   for (iterator i = begin(), e = end(); i != e; ++i) {
10090     i->DeductionFailure.Destroy();
10091   }
10092 }
10093 
10094 void TemplateSpecCandidateSet::clear() {
10095   destroyCandidates();
10096   Candidates.clear();
10097 }
10098 
10099 /// NoteCandidates - When no template specialization match is found, prints
10100 /// diagnostic messages containing the non-matching specializations that form
10101 /// the candidate set.
10102 /// This is analoguous to OverloadCandidateSet::NoteCandidates() with
10103 /// OCD == OCD_AllCandidates and Cand->Viable == false.
10104 void TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {
10105   // Sort the candidates by position (assuming no candidate is a match).
10106   // Sorting directly would be prohibitive, so we make a set of pointers
10107   // and sort those.
10108   SmallVector<TemplateSpecCandidate *, 32> Cands;
10109   Cands.reserve(size());
10110   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
10111     if (Cand->Specialization)
10112       Cands.push_back(Cand);
10113     // Otherwise, this is a non-matching builtin candidate.  We do not,
10114     // in general, want to list every possible builtin candidate.
10115   }
10116 
10117   std::sort(Cands.begin(), Cands.end(),
10118             CompareTemplateSpecCandidatesForDisplay(S));
10119 
10120   // FIXME: Perhaps rename OverloadsShown and getShowOverloads()
10121   // for generalization purposes (?).
10122   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
10123 
10124   SmallVectorImpl<TemplateSpecCandidate *>::iterator I, E;
10125   unsigned CandsShown = 0;
10126   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
10127     TemplateSpecCandidate *Cand = *I;
10128 
10129     // Set an arbitrary limit on the number of candidates we'll spam
10130     // the user with.  FIXME: This limit should depend on details of the
10131     // candidate list.
10132     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
10133       break;
10134     ++CandsShown;
10135 
10136     assert(Cand->Specialization &&
10137            "Non-matching built-in candidates are not added to Cands.");
10138     Cand->NoteDeductionFailure(S, ForTakingAddress);
10139   }
10140 
10141   if (I != E)
10142     S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);
10143 }
10144 
10145 // [PossiblyAFunctionType]  -->   [Return]
10146 // NonFunctionType --> NonFunctionType
10147 // R (A) --> R(A)
10148 // R (*)(A) --> R (A)
10149 // R (&)(A) --> R (A)
10150 // R (S::*)(A) --> R (A)
10151 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
10152   QualType Ret = PossiblyAFunctionType;
10153   if (const PointerType *ToTypePtr =
10154     PossiblyAFunctionType->getAs<PointerType>())
10155     Ret = ToTypePtr->getPointeeType();
10156   else if (const ReferenceType *ToTypeRef =
10157     PossiblyAFunctionType->getAs<ReferenceType>())
10158     Ret = ToTypeRef->getPointeeType();
10159   else if (const MemberPointerType *MemTypePtr =
10160     PossiblyAFunctionType->getAs<MemberPointerType>())
10161     Ret = MemTypePtr->getPointeeType();
10162   Ret =
10163     Context.getCanonicalType(Ret).getUnqualifiedType();
10164   return Ret;
10165 }
10166 
10167 namespace {
10168 // A helper class to help with address of function resolution
10169 // - allows us to avoid passing around all those ugly parameters
10170 class AddressOfFunctionResolver {
10171   Sema& S;
10172   Expr* SourceExpr;
10173   const QualType& TargetType;
10174   QualType TargetFunctionType; // Extracted function type from target type
10175 
10176   bool Complain;
10177   //DeclAccessPair& ResultFunctionAccessPair;
10178   ASTContext& Context;
10179 
10180   bool TargetTypeIsNonStaticMemberFunction;
10181   bool FoundNonTemplateFunction;
10182   bool StaticMemberFunctionFromBoundPointer;
10183   bool HasComplained;
10184 
10185   OverloadExpr::FindResult OvlExprInfo;
10186   OverloadExpr *OvlExpr;
10187   TemplateArgumentListInfo OvlExplicitTemplateArgs;
10188   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
10189   TemplateSpecCandidateSet FailedCandidates;
10190 
10191 public:
10192   AddressOfFunctionResolver(Sema &S, Expr *SourceExpr,
10193                             const QualType &TargetType, bool Complain)
10194       : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
10195         Complain(Complain), Context(S.getASTContext()),
10196         TargetTypeIsNonStaticMemberFunction(
10197             !!TargetType->getAs<MemberPointerType>()),
10198         FoundNonTemplateFunction(false),
10199         StaticMemberFunctionFromBoundPointer(false),
10200         HasComplained(false),
10201         OvlExprInfo(OverloadExpr::find(SourceExpr)),
10202         OvlExpr(OvlExprInfo.Expression),
10203         FailedCandidates(OvlExpr->getNameLoc(), /*ForTakingAddress=*/true) {
10204     ExtractUnqualifiedFunctionTypeFromTargetType();
10205 
10206     if (TargetFunctionType->isFunctionType()) {
10207       if (UnresolvedMemberExpr *UME = dyn_cast<UnresolvedMemberExpr>(OvlExpr))
10208         if (!UME->isImplicitAccess() &&
10209             !S.ResolveSingleFunctionTemplateSpecialization(UME))
10210           StaticMemberFunctionFromBoundPointer = true;
10211     } else if (OvlExpr->hasExplicitTemplateArgs()) {
10212       DeclAccessPair dap;
10213       if (FunctionDecl *Fn = S.ResolveSingleFunctionTemplateSpecialization(
10214               OvlExpr, false, &dap)) {
10215         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn))
10216           if (!Method->isStatic()) {
10217             // If the target type is a non-function type and the function found
10218             // is a non-static member function, pretend as if that was the
10219             // target, it's the only possible type to end up with.
10220             TargetTypeIsNonStaticMemberFunction = true;
10221 
10222             // And skip adding the function if its not in the proper form.
10223             // We'll diagnose this due to an empty set of functions.
10224             if (!OvlExprInfo.HasFormOfMemberPointer)
10225               return;
10226           }
10227 
10228         Matches.push_back(std::make_pair(dap, Fn));
10229       }
10230       return;
10231     }
10232 
10233     if (OvlExpr->hasExplicitTemplateArgs())
10234       OvlExpr->copyTemplateArgumentsInto(OvlExplicitTemplateArgs);
10235 
10236     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
10237       // C++ [over.over]p4:
10238       //   If more than one function is selected, [...]
10239       if (Matches.size() > 1 && !eliminiateSuboptimalOverloadCandidates()) {
10240         if (FoundNonTemplateFunction)
10241           EliminateAllTemplateMatches();
10242         else
10243           EliminateAllExceptMostSpecializedTemplate();
10244       }
10245     }
10246 
10247     if (S.getLangOpts().CUDA && S.getLangOpts().CUDATargetOverloads &&
10248         Matches.size() > 1)
10249       EliminateSuboptimalCudaMatches();
10250   }
10251 
10252   bool hasComplained() const { return HasComplained; }
10253 
10254 private:
10255   // Is A considered a better overload candidate for the desired type than B?
10256   bool isBetterCandidate(const FunctionDecl *A, const FunctionDecl *B) {
10257     return hasBetterEnableIfAttrs(S, A, B);
10258   }
10259 
10260   // Returns true if we've eliminated any (read: all but one) candidates, false
10261   // otherwise.
10262   bool eliminiateSuboptimalOverloadCandidates() {
10263     // Same algorithm as overload resolution -- one pass to pick the "best",
10264     // another pass to be sure that nothing is better than the best.
10265     auto Best = Matches.begin();
10266     for (auto I = Matches.begin()+1, E = Matches.end(); I != E; ++I)
10267       if (isBetterCandidate(I->second, Best->second))
10268         Best = I;
10269 
10270     const FunctionDecl *BestFn = Best->second;
10271     auto IsBestOrInferiorToBest = [this, BestFn](
10272         const std::pair<DeclAccessPair, FunctionDecl *> &Pair) {
10273       return BestFn == Pair.second || isBetterCandidate(BestFn, Pair.second);
10274     };
10275 
10276     // Note: We explicitly leave Matches unmodified if there isn't a clear best
10277     // option, so we can potentially give the user a better error
10278     if (!std::all_of(Matches.begin(), Matches.end(), IsBestOrInferiorToBest))
10279       return false;
10280     Matches[0] = *Best;
10281     Matches.resize(1);
10282     return true;
10283   }
10284 
10285   bool isTargetTypeAFunction() const {
10286     return TargetFunctionType->isFunctionType();
10287   }
10288 
10289   // [ToType]     [Return]
10290 
10291   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
10292   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
10293   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
10294   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
10295     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
10296   }
10297 
10298   // return true if any matching specializations were found
10299   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
10300                                    const DeclAccessPair& CurAccessFunPair) {
10301     if (CXXMethodDecl *Method
10302               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
10303       // Skip non-static function templates when converting to pointer, and
10304       // static when converting to member pointer.
10305       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
10306         return false;
10307     }
10308     else if (TargetTypeIsNonStaticMemberFunction)
10309       return false;
10310 
10311     // C++ [over.over]p2:
10312     //   If the name is a function template, template argument deduction is
10313     //   done (14.8.2.2), and if the argument deduction succeeds, the
10314     //   resulting template argument list is used to generate a single
10315     //   function template specialization, which is added to the set of
10316     //   overloaded functions considered.
10317     FunctionDecl *Specialization = nullptr;
10318     TemplateDeductionInfo Info(FailedCandidates.getLocation());
10319     if (Sema::TemplateDeductionResult Result
10320           = S.DeduceTemplateArguments(FunctionTemplate,
10321                                       &OvlExplicitTemplateArgs,
10322                                       TargetFunctionType, Specialization,
10323                                       Info, /*InOverloadResolution=*/true)) {
10324       // Make a note of the failed deduction for diagnostics.
10325       FailedCandidates.addCandidate()
10326           .set(FunctionTemplate->getTemplatedDecl(),
10327                MakeDeductionFailureInfo(Context, Result, Info));
10328       return false;
10329     }
10330 
10331     // Template argument deduction ensures that we have an exact match or
10332     // compatible pointer-to-function arguments that would be adjusted by ICS.
10333     // This function template specicalization works.
10334     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
10335     assert(S.isSameOrCompatibleFunctionType(
10336               Context.getCanonicalType(Specialization->getType()),
10337               Context.getCanonicalType(TargetFunctionType)));
10338 
10339     if (!S.checkAddressOfFunctionIsAvailable(Specialization))
10340       return false;
10341 
10342     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
10343     return true;
10344   }
10345 
10346   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
10347                                       const DeclAccessPair& CurAccessFunPair) {
10348     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
10349       // Skip non-static functions when converting to pointer, and static
10350       // when converting to member pointer.
10351       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
10352         return false;
10353     }
10354     else if (TargetTypeIsNonStaticMemberFunction)
10355       return false;
10356 
10357     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
10358       if (S.getLangOpts().CUDA)
10359         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
10360           if (!Caller->isImplicit() && S.CheckCUDATarget(Caller, FunDecl))
10361             return false;
10362 
10363       // If any candidate has a placeholder return type, trigger its deduction
10364       // now.
10365       if (S.getLangOpts().CPlusPlus14 &&
10366           FunDecl->getReturnType()->isUndeducedType() &&
10367           S.DeduceReturnType(FunDecl, SourceExpr->getLocStart(), Complain)) {
10368         HasComplained |= Complain;
10369         return false;
10370       }
10371 
10372       if (!S.checkAddressOfFunctionIsAvailable(FunDecl))
10373         return false;
10374 
10375       QualType ResultTy;
10376       if (Context.hasSameUnqualifiedType(TargetFunctionType,
10377                                          FunDecl->getType()) ||
10378           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
10379                                  ResultTy) ||
10380           (!S.getLangOpts().CPlusPlus && TargetType->isVoidPointerType())) {
10381         Matches.push_back(std::make_pair(
10382             CurAccessFunPair, cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
10383         FoundNonTemplateFunction = true;
10384         return true;
10385       }
10386     }
10387 
10388     return false;
10389   }
10390 
10391   bool FindAllFunctionsThatMatchTargetTypeExactly() {
10392     bool Ret = false;
10393 
10394     // If the overload expression doesn't have the form of a pointer to
10395     // member, don't try to convert it to a pointer-to-member type.
10396     if (IsInvalidFormOfPointerToMemberFunction())
10397       return false;
10398 
10399     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
10400                                E = OvlExpr->decls_end();
10401          I != E; ++I) {
10402       // Look through any using declarations to find the underlying function.
10403       NamedDecl *Fn = (*I)->getUnderlyingDecl();
10404 
10405       // C++ [over.over]p3:
10406       //   Non-member functions and static member functions match
10407       //   targets of type "pointer-to-function" or "reference-to-function."
10408       //   Nonstatic member functions match targets of
10409       //   type "pointer-to-member-function."
10410       // Note that according to DR 247, the containing class does not matter.
10411       if (FunctionTemplateDecl *FunctionTemplate
10412                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
10413         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
10414           Ret = true;
10415       }
10416       // If we have explicit template arguments supplied, skip non-templates.
10417       else if (!OvlExpr->hasExplicitTemplateArgs() &&
10418                AddMatchingNonTemplateFunction(Fn, I.getPair()))
10419         Ret = true;
10420     }
10421     assert(Ret || Matches.empty());
10422     return Ret;
10423   }
10424 
10425   void EliminateAllExceptMostSpecializedTemplate() {
10426     //   [...] and any given function template specialization F1 is
10427     //   eliminated if the set contains a second function template
10428     //   specialization whose function template is more specialized
10429     //   than the function template of F1 according to the partial
10430     //   ordering rules of 14.5.5.2.
10431 
10432     // The algorithm specified above is quadratic. We instead use a
10433     // two-pass algorithm (similar to the one used to identify the
10434     // best viable function in an overload set) that identifies the
10435     // best function template (if it exists).
10436 
10437     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
10438     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
10439       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
10440 
10441     // TODO: It looks like FailedCandidates does not serve much purpose
10442     // here, since the no_viable diagnostic has index 0.
10443     UnresolvedSetIterator Result = S.getMostSpecialized(
10444         MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates,
10445         SourceExpr->getLocStart(), S.PDiag(),
10446         S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0]
10447                                                      .second->getDeclName(),
10448         S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function_template,
10449         Complain, TargetFunctionType);
10450 
10451     if (Result != MatchesCopy.end()) {
10452       // Make it the first and only element
10453       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
10454       Matches[0].second = cast<FunctionDecl>(*Result);
10455       Matches.resize(1);
10456     } else
10457       HasComplained |= Complain;
10458   }
10459 
10460   void EliminateAllTemplateMatches() {
10461     //   [...] any function template specializations in the set are
10462     //   eliminated if the set also contains a non-template function, [...]
10463     for (unsigned I = 0, N = Matches.size(); I != N; ) {
10464       if (Matches[I].second->getPrimaryTemplate() == nullptr)
10465         ++I;
10466       else {
10467         Matches[I] = Matches[--N];
10468         Matches.resize(N);
10469       }
10470     }
10471   }
10472 
10473   void EliminateSuboptimalCudaMatches() {
10474     S.EraseUnwantedCUDAMatches(dyn_cast<FunctionDecl>(S.CurContext), Matches);
10475   }
10476 
10477 public:
10478   void ComplainNoMatchesFound() const {
10479     assert(Matches.empty());
10480     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
10481         << OvlExpr->getName() << TargetFunctionType
10482         << OvlExpr->getSourceRange();
10483     if (FailedCandidates.empty())
10484       S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType,
10485                                   /*TakingAddress=*/true);
10486     else {
10487       // We have some deduction failure messages. Use them to diagnose
10488       // the function templates, and diagnose the non-template candidates
10489       // normally.
10490       for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
10491                                  IEnd = OvlExpr->decls_end();
10492            I != IEnd; ++I)
10493         if (FunctionDecl *Fun =
10494                 dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()))
10495           if (!functionHasPassObjectSizeParams(Fun))
10496             S.NoteOverloadCandidate(Fun, TargetFunctionType,
10497                                     /*TakingAddress=*/true);
10498       FailedCandidates.NoteCandidates(S, OvlExpr->getLocStart());
10499     }
10500   }
10501 
10502   bool IsInvalidFormOfPointerToMemberFunction() const {
10503     return TargetTypeIsNonStaticMemberFunction &&
10504       !OvlExprInfo.HasFormOfMemberPointer;
10505   }
10506 
10507   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
10508       // TODO: Should we condition this on whether any functions might
10509       // have matched, or is it more appropriate to do that in callers?
10510       // TODO: a fixit wouldn't hurt.
10511       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
10512         << TargetType << OvlExpr->getSourceRange();
10513   }
10514 
10515   bool IsStaticMemberFunctionFromBoundPointer() const {
10516     return StaticMemberFunctionFromBoundPointer;
10517   }
10518 
10519   void ComplainIsStaticMemberFunctionFromBoundPointer() const {
10520     S.Diag(OvlExpr->getLocStart(),
10521            diag::err_invalid_form_pointer_member_function)
10522       << OvlExpr->getSourceRange();
10523   }
10524 
10525   void ComplainOfInvalidConversion() const {
10526     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
10527       << OvlExpr->getName() << TargetType;
10528   }
10529 
10530   void ComplainMultipleMatchesFound() const {
10531     assert(Matches.size() > 1);
10532     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
10533       << OvlExpr->getName()
10534       << OvlExpr->getSourceRange();
10535     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType,
10536                                 /*TakingAddress=*/true);
10537   }
10538 
10539   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
10540 
10541   int getNumMatches() const { return Matches.size(); }
10542 
10543   FunctionDecl* getMatchingFunctionDecl() const {
10544     if (Matches.size() != 1) return nullptr;
10545     return Matches[0].second;
10546   }
10547 
10548   const DeclAccessPair* getMatchingFunctionAccessPair() const {
10549     if (Matches.size() != 1) return nullptr;
10550     return &Matches[0].first;
10551   }
10552 };
10553 }
10554 
10555 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
10556 /// an overloaded function (C++ [over.over]), where @p From is an
10557 /// expression with overloaded function type and @p ToType is the type
10558 /// we're trying to resolve to. For example:
10559 ///
10560 /// @code
10561 /// int f(double);
10562 /// int f(int);
10563 ///
10564 /// int (*pfd)(double) = f; // selects f(double)
10565 /// @endcode
10566 ///
10567 /// This routine returns the resulting FunctionDecl if it could be
10568 /// resolved, and NULL otherwise. When @p Complain is true, this
10569 /// routine will emit diagnostics if there is an error.
10570 FunctionDecl *
10571 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
10572                                          QualType TargetType,
10573                                          bool Complain,
10574                                          DeclAccessPair &FoundResult,
10575                                          bool *pHadMultipleCandidates) {
10576   assert(AddressOfExpr->getType() == Context.OverloadTy);
10577 
10578   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
10579                                      Complain);
10580   int NumMatches = Resolver.getNumMatches();
10581   FunctionDecl *Fn = nullptr;
10582   bool ShouldComplain = Complain && !Resolver.hasComplained();
10583   if (NumMatches == 0 && ShouldComplain) {
10584     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
10585       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
10586     else
10587       Resolver.ComplainNoMatchesFound();
10588   }
10589   else if (NumMatches > 1 && ShouldComplain)
10590     Resolver.ComplainMultipleMatchesFound();
10591   else if (NumMatches == 1) {
10592     Fn = Resolver.getMatchingFunctionDecl();
10593     assert(Fn);
10594     FoundResult = *Resolver.getMatchingFunctionAccessPair();
10595     if (Complain) {
10596       if (Resolver.IsStaticMemberFunctionFromBoundPointer())
10597         Resolver.ComplainIsStaticMemberFunctionFromBoundPointer();
10598       else
10599         CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
10600     }
10601   }
10602 
10603   if (pHadMultipleCandidates)
10604     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
10605   return Fn;
10606 }
10607 
10608 /// \brief Given an expression that refers to an overloaded function, try to
10609 /// resolve that overloaded function expression down to a single function.
10610 ///
10611 /// This routine can only resolve template-ids that refer to a single function
10612 /// template, where that template-id refers to a single template whose template
10613 /// arguments are either provided by the template-id or have defaults,
10614 /// as described in C++0x [temp.arg.explicit]p3.
10615 ///
10616 /// If no template-ids are found, no diagnostics are emitted and NULL is
10617 /// returned.
10618 FunctionDecl *
10619 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
10620                                                   bool Complain,
10621                                                   DeclAccessPair *FoundResult) {
10622   // C++ [over.over]p1:
10623   //   [...] [Note: any redundant set of parentheses surrounding the
10624   //   overloaded function name is ignored (5.1). ]
10625   // C++ [over.over]p1:
10626   //   [...] The overloaded function name can be preceded by the &
10627   //   operator.
10628 
10629   // If we didn't actually find any template-ids, we're done.
10630   if (!ovl->hasExplicitTemplateArgs())
10631     return nullptr;
10632 
10633   TemplateArgumentListInfo ExplicitTemplateArgs;
10634   ovl->copyTemplateArgumentsInto(ExplicitTemplateArgs);
10635   TemplateSpecCandidateSet FailedCandidates(ovl->getNameLoc());
10636 
10637   // Look through all of the overloaded functions, searching for one
10638   // whose type matches exactly.
10639   FunctionDecl *Matched = nullptr;
10640   for (UnresolvedSetIterator I = ovl->decls_begin(),
10641          E = ovl->decls_end(); I != E; ++I) {
10642     // C++0x [temp.arg.explicit]p3:
10643     //   [...] In contexts where deduction is done and fails, or in contexts
10644     //   where deduction is not done, if a template argument list is
10645     //   specified and it, along with any default template arguments,
10646     //   identifies a single function template specialization, then the
10647     //   template-id is an lvalue for the function template specialization.
10648     FunctionTemplateDecl *FunctionTemplate
10649       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
10650 
10651     // C++ [over.over]p2:
10652     //   If the name is a function template, template argument deduction is
10653     //   done (14.8.2.2), and if the argument deduction succeeds, the
10654     //   resulting template argument list is used to generate a single
10655     //   function template specialization, which is added to the set of
10656     //   overloaded functions considered.
10657     FunctionDecl *Specialization = nullptr;
10658     TemplateDeductionInfo Info(FailedCandidates.getLocation());
10659     if (TemplateDeductionResult Result
10660           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
10661                                     Specialization, Info,
10662                                     /*InOverloadResolution=*/true)) {
10663       // Make a note of the failed deduction for diagnostics.
10664       // TODO: Actually use the failed-deduction info?
10665       FailedCandidates.addCandidate()
10666           .set(FunctionTemplate->getTemplatedDecl(),
10667                MakeDeductionFailureInfo(Context, Result, Info));
10668       continue;
10669     }
10670 
10671     assert(Specialization && "no specialization and no error?");
10672 
10673     // Multiple matches; we can't resolve to a single declaration.
10674     if (Matched) {
10675       if (Complain) {
10676         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
10677           << ovl->getName();
10678         NoteAllOverloadCandidates(ovl);
10679       }
10680       return nullptr;
10681     }
10682 
10683     Matched = Specialization;
10684     if (FoundResult) *FoundResult = I.getPair();
10685   }
10686 
10687   if (Matched && getLangOpts().CPlusPlus14 &&
10688       Matched->getReturnType()->isUndeducedType() &&
10689       DeduceReturnType(Matched, ovl->getExprLoc(), Complain))
10690     return nullptr;
10691 
10692   return Matched;
10693 }
10694 
10695 
10696 
10697 
10698 // Resolve and fix an overloaded expression that can be resolved
10699 // because it identifies a single function template specialization.
10700 //
10701 // Last three arguments should only be supplied if Complain = true
10702 //
10703 // Return true if it was logically possible to so resolve the
10704 // expression, regardless of whether or not it succeeded.  Always
10705 // returns true if 'complain' is set.
10706 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
10707                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
10708                       bool complain, SourceRange OpRangeForComplaining,
10709                                            QualType DestTypeForComplaining,
10710                                             unsigned DiagIDForComplaining) {
10711   assert(SrcExpr.get()->getType() == Context.OverloadTy);
10712 
10713   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
10714 
10715   DeclAccessPair found;
10716   ExprResult SingleFunctionExpression;
10717   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
10718                            ovl.Expression, /*complain*/ false, &found)) {
10719     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
10720       SrcExpr = ExprError();
10721       return true;
10722     }
10723 
10724     // It is only correct to resolve to an instance method if we're
10725     // resolving a form that's permitted to be a pointer to member.
10726     // Otherwise we'll end up making a bound member expression, which
10727     // is illegal in all the contexts we resolve like this.
10728     if (!ovl.HasFormOfMemberPointer &&
10729         isa<CXXMethodDecl>(fn) &&
10730         cast<CXXMethodDecl>(fn)->isInstance()) {
10731       if (!complain) return false;
10732 
10733       Diag(ovl.Expression->getExprLoc(),
10734            diag::err_bound_member_function)
10735         << 0 << ovl.Expression->getSourceRange();
10736 
10737       // TODO: I believe we only end up here if there's a mix of
10738       // static and non-static candidates (otherwise the expression
10739       // would have 'bound member' type, not 'overload' type).
10740       // Ideally we would note which candidate was chosen and why
10741       // the static candidates were rejected.
10742       SrcExpr = ExprError();
10743       return true;
10744     }
10745 
10746     // Fix the expression to refer to 'fn'.
10747     SingleFunctionExpression =
10748         FixOverloadedFunctionReference(SrcExpr.get(), found, fn);
10749 
10750     // If desired, do function-to-pointer decay.
10751     if (doFunctionPointerConverion) {
10752       SingleFunctionExpression =
10753         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.get());
10754       if (SingleFunctionExpression.isInvalid()) {
10755         SrcExpr = ExprError();
10756         return true;
10757       }
10758     }
10759   }
10760 
10761   if (!SingleFunctionExpression.isUsable()) {
10762     if (complain) {
10763       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
10764         << ovl.Expression->getName()
10765         << DestTypeForComplaining
10766         << OpRangeForComplaining
10767         << ovl.Expression->getQualifierLoc().getSourceRange();
10768       NoteAllOverloadCandidates(SrcExpr.get());
10769 
10770       SrcExpr = ExprError();
10771       return true;
10772     }
10773 
10774     return false;
10775   }
10776 
10777   SrcExpr = SingleFunctionExpression;
10778   return true;
10779 }
10780 
10781 /// \brief Add a single candidate to the overload set.
10782 static void AddOverloadedCallCandidate(Sema &S,
10783                                        DeclAccessPair FoundDecl,
10784                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
10785                                        ArrayRef<Expr *> Args,
10786                                        OverloadCandidateSet &CandidateSet,
10787                                        bool PartialOverloading,
10788                                        bool KnownValid) {
10789   NamedDecl *Callee = FoundDecl.getDecl();
10790   if (isa<UsingShadowDecl>(Callee))
10791     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
10792 
10793   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
10794     if (ExplicitTemplateArgs) {
10795       assert(!KnownValid && "Explicit template arguments?");
10796       return;
10797     }
10798     S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet,
10799                            /*SuppressUsedConversions=*/false,
10800                            PartialOverloading);
10801     return;
10802   }
10803 
10804   if (FunctionTemplateDecl *FuncTemplate
10805       = dyn_cast<FunctionTemplateDecl>(Callee)) {
10806     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
10807                                    ExplicitTemplateArgs, Args, CandidateSet,
10808                                    /*SuppressUsedConversions=*/false,
10809                                    PartialOverloading);
10810     return;
10811   }
10812 
10813   assert(!KnownValid && "unhandled case in overloaded call candidate");
10814 }
10815 
10816 /// \brief Add the overload candidates named by callee and/or found by argument
10817 /// dependent lookup to the given overload set.
10818 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
10819                                        ArrayRef<Expr *> Args,
10820                                        OverloadCandidateSet &CandidateSet,
10821                                        bool PartialOverloading) {
10822 
10823 #ifndef NDEBUG
10824   // Verify that ArgumentDependentLookup is consistent with the rules
10825   // in C++0x [basic.lookup.argdep]p3:
10826   //
10827   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
10828   //   and let Y be the lookup set produced by argument dependent
10829   //   lookup (defined as follows). If X contains
10830   //
10831   //     -- a declaration of a class member, or
10832   //
10833   //     -- a block-scope function declaration that is not a
10834   //        using-declaration, or
10835   //
10836   //     -- a declaration that is neither a function or a function
10837   //        template
10838   //
10839   //   then Y is empty.
10840 
10841   if (ULE->requiresADL()) {
10842     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
10843            E = ULE->decls_end(); I != E; ++I) {
10844       assert(!(*I)->getDeclContext()->isRecord());
10845       assert(isa<UsingShadowDecl>(*I) ||
10846              !(*I)->getDeclContext()->isFunctionOrMethod());
10847       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
10848     }
10849   }
10850 #endif
10851 
10852   // It would be nice to avoid this copy.
10853   TemplateArgumentListInfo TABuffer;
10854   TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr;
10855   if (ULE->hasExplicitTemplateArgs()) {
10856     ULE->copyTemplateArgumentsInto(TABuffer);
10857     ExplicitTemplateArgs = &TABuffer;
10858   }
10859 
10860   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
10861          E = ULE->decls_end(); I != E; ++I)
10862     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
10863                                CandidateSet, PartialOverloading,
10864                                /*KnownValid*/ true);
10865 
10866   if (ULE->requiresADL())
10867     AddArgumentDependentLookupCandidates(ULE->getName(), ULE->getExprLoc(),
10868                                          Args, ExplicitTemplateArgs,
10869                                          CandidateSet, PartialOverloading);
10870 }
10871 
10872 /// Determine whether a declaration with the specified name could be moved into
10873 /// a different namespace.
10874 static bool canBeDeclaredInNamespace(const DeclarationName &Name) {
10875   switch (Name.getCXXOverloadedOperator()) {
10876   case OO_New: case OO_Array_New:
10877   case OO_Delete: case OO_Array_Delete:
10878     return false;
10879 
10880   default:
10881     return true;
10882   }
10883 }
10884 
10885 /// Attempt to recover from an ill-formed use of a non-dependent name in a
10886 /// template, where the non-dependent name was declared after the template
10887 /// was defined. This is common in code written for a compilers which do not
10888 /// correctly implement two-stage name lookup.
10889 ///
10890 /// Returns true if a viable candidate was found and a diagnostic was issued.
10891 static bool
10892 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
10893                        const CXXScopeSpec &SS, LookupResult &R,
10894                        OverloadCandidateSet::CandidateSetKind CSK,
10895                        TemplateArgumentListInfo *ExplicitTemplateArgs,
10896                        ArrayRef<Expr *> Args,
10897                        bool *DoDiagnoseEmptyLookup = nullptr) {
10898   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
10899     return false;
10900 
10901   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
10902     if (DC->isTransparentContext())
10903       continue;
10904 
10905     SemaRef.LookupQualifiedName(R, DC);
10906 
10907     if (!R.empty()) {
10908       R.suppressDiagnostics();
10909 
10910       if (isa<CXXRecordDecl>(DC)) {
10911         // Don't diagnose names we find in classes; we get much better
10912         // diagnostics for these from DiagnoseEmptyLookup.
10913         R.clear();
10914         if (DoDiagnoseEmptyLookup)
10915           *DoDiagnoseEmptyLookup = true;
10916         return false;
10917       }
10918 
10919       OverloadCandidateSet Candidates(FnLoc, CSK);
10920       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
10921         AddOverloadedCallCandidate(SemaRef, I.getPair(),
10922                                    ExplicitTemplateArgs, Args,
10923                                    Candidates, false, /*KnownValid*/ false);
10924 
10925       OverloadCandidateSet::iterator Best;
10926       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
10927         // No viable functions. Don't bother the user with notes for functions
10928         // which don't work and shouldn't be found anyway.
10929         R.clear();
10930         return false;
10931       }
10932 
10933       // Find the namespaces where ADL would have looked, and suggest
10934       // declaring the function there instead.
10935       Sema::AssociatedNamespaceSet AssociatedNamespaces;
10936       Sema::AssociatedClassSet AssociatedClasses;
10937       SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
10938                                                  AssociatedNamespaces,
10939                                                  AssociatedClasses);
10940       Sema::AssociatedNamespaceSet SuggestedNamespaces;
10941       if (canBeDeclaredInNamespace(R.getLookupName())) {
10942         DeclContext *Std = SemaRef.getStdNamespace();
10943         for (Sema::AssociatedNamespaceSet::iterator
10944                it = AssociatedNamespaces.begin(),
10945                end = AssociatedNamespaces.end(); it != end; ++it) {
10946           // Never suggest declaring a function within namespace 'std'.
10947           if (Std && Std->Encloses(*it))
10948             continue;
10949 
10950           // Never suggest declaring a function within a namespace with a
10951           // reserved name, like __gnu_cxx.
10952           NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
10953           if (NS &&
10954               NS->getQualifiedNameAsString().find("__") != std::string::npos)
10955             continue;
10956 
10957           SuggestedNamespaces.insert(*it);
10958         }
10959       }
10960 
10961       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
10962         << R.getLookupName();
10963       if (SuggestedNamespaces.empty()) {
10964         SemaRef.Diag(Best->Function->getLocation(),
10965                      diag::note_not_found_by_two_phase_lookup)
10966           << R.getLookupName() << 0;
10967       } else if (SuggestedNamespaces.size() == 1) {
10968         SemaRef.Diag(Best->Function->getLocation(),
10969                      diag::note_not_found_by_two_phase_lookup)
10970           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
10971       } else {
10972         // FIXME: It would be useful to list the associated namespaces here,
10973         // but the diagnostics infrastructure doesn't provide a way to produce
10974         // a localized representation of a list of items.
10975         SemaRef.Diag(Best->Function->getLocation(),
10976                      diag::note_not_found_by_two_phase_lookup)
10977           << R.getLookupName() << 2;
10978       }
10979 
10980       // Try to recover by calling this function.
10981       return true;
10982     }
10983 
10984     R.clear();
10985   }
10986 
10987   return false;
10988 }
10989 
10990 /// Attempt to recover from ill-formed use of a non-dependent operator in a
10991 /// template, where the non-dependent operator was declared after the template
10992 /// was defined.
10993 ///
10994 /// Returns true if a viable candidate was found and a diagnostic was issued.
10995 static bool
10996 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
10997                                SourceLocation OpLoc,
10998                                ArrayRef<Expr *> Args) {
10999   DeclarationName OpName =
11000     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
11001   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
11002   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
11003                                 OverloadCandidateSet::CSK_Operator,
11004                                 /*ExplicitTemplateArgs=*/nullptr, Args);
11005 }
11006 
11007 namespace {
11008 class BuildRecoveryCallExprRAII {
11009   Sema &SemaRef;
11010 public:
11011   BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
11012     assert(SemaRef.IsBuildingRecoveryCallExpr == false);
11013     SemaRef.IsBuildingRecoveryCallExpr = true;
11014   }
11015 
11016   ~BuildRecoveryCallExprRAII() {
11017     SemaRef.IsBuildingRecoveryCallExpr = false;
11018   }
11019 };
11020 
11021 }
11022 
11023 static std::unique_ptr<CorrectionCandidateCallback>
11024 MakeValidator(Sema &SemaRef, MemberExpr *ME, size_t NumArgs,
11025               bool HasTemplateArgs, bool AllowTypoCorrection) {
11026   if (!AllowTypoCorrection)
11027     return llvm::make_unique<NoTypoCorrectionCCC>();
11028   return llvm::make_unique<FunctionCallFilterCCC>(SemaRef, NumArgs,
11029                                                   HasTemplateArgs, ME);
11030 }
11031 
11032 /// Attempts to recover from a call where no functions were found.
11033 ///
11034 /// Returns true if new candidates were found.
11035 static ExprResult
11036 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
11037                       UnresolvedLookupExpr *ULE,
11038                       SourceLocation LParenLoc,
11039                       MutableArrayRef<Expr *> Args,
11040                       SourceLocation RParenLoc,
11041                       bool EmptyLookup, bool AllowTypoCorrection) {
11042   // Do not try to recover if it is already building a recovery call.
11043   // This stops infinite loops for template instantiations like
11044   //
11045   // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
11046   // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
11047   //
11048   if (SemaRef.IsBuildingRecoveryCallExpr)
11049     return ExprError();
11050   BuildRecoveryCallExprRAII RCE(SemaRef);
11051 
11052   CXXScopeSpec SS;
11053   SS.Adopt(ULE->getQualifierLoc());
11054   SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
11055 
11056   TemplateArgumentListInfo TABuffer;
11057   TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr;
11058   if (ULE->hasExplicitTemplateArgs()) {
11059     ULE->copyTemplateArgumentsInto(TABuffer);
11060     ExplicitTemplateArgs = &TABuffer;
11061   }
11062 
11063   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
11064                  Sema::LookupOrdinaryName);
11065   bool DoDiagnoseEmptyLookup = EmptyLookup;
11066   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
11067                               OverloadCandidateSet::CSK_Normal,
11068                               ExplicitTemplateArgs, Args,
11069                               &DoDiagnoseEmptyLookup) &&
11070     (!DoDiagnoseEmptyLookup || SemaRef.DiagnoseEmptyLookup(
11071         S, SS, R,
11072         MakeValidator(SemaRef, dyn_cast<MemberExpr>(Fn), Args.size(),
11073                       ExplicitTemplateArgs != nullptr, AllowTypoCorrection),
11074         ExplicitTemplateArgs, Args)))
11075     return ExprError();
11076 
11077   assert(!R.empty() && "lookup results empty despite recovery");
11078 
11079   // Build an implicit member call if appropriate.  Just drop the
11080   // casts and such from the call, we don't really care.
11081   ExprResult NewFn = ExprError();
11082   if ((*R.begin())->isCXXClassMember())
11083     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc, R,
11084                                                     ExplicitTemplateArgs, S);
11085   else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
11086     NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
11087                                         ExplicitTemplateArgs);
11088   else
11089     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
11090 
11091   if (NewFn.isInvalid())
11092     return ExprError();
11093 
11094   // This shouldn't cause an infinite loop because we're giving it
11095   // an expression with viable lookup results, which should never
11096   // end up here.
11097   return SemaRef.ActOnCallExpr(/*Scope*/ nullptr, NewFn.get(), LParenLoc,
11098                                MultiExprArg(Args.data(), Args.size()),
11099                                RParenLoc);
11100 }
11101 
11102 /// \brief Constructs and populates an OverloadedCandidateSet from
11103 /// the given function.
11104 /// \returns true when an the ExprResult output parameter has been set.
11105 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
11106                                   UnresolvedLookupExpr *ULE,
11107                                   MultiExprArg Args,
11108                                   SourceLocation RParenLoc,
11109                                   OverloadCandidateSet *CandidateSet,
11110                                   ExprResult *Result) {
11111 #ifndef NDEBUG
11112   if (ULE->requiresADL()) {
11113     // To do ADL, we must have found an unqualified name.
11114     assert(!ULE->getQualifier() && "qualified name with ADL");
11115 
11116     // We don't perform ADL for implicit declarations of builtins.
11117     // Verify that this was correctly set up.
11118     FunctionDecl *F;
11119     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
11120         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
11121         F->getBuiltinID() && F->isImplicit())
11122       llvm_unreachable("performing ADL for builtin");
11123 
11124     // We don't perform ADL in C.
11125     assert(getLangOpts().CPlusPlus && "ADL enabled in C");
11126   }
11127 #endif
11128 
11129   UnbridgedCastsSet UnbridgedCasts;
11130   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) {
11131     *Result = ExprError();
11132     return true;
11133   }
11134 
11135   // Add the functions denoted by the callee to the set of candidate
11136   // functions, including those from argument-dependent lookup.
11137   AddOverloadedCallCandidates(ULE, Args, *CandidateSet);
11138 
11139   if (getLangOpts().MSVCCompat &&
11140       CurContext->isDependentContext() && !isSFINAEContext() &&
11141       (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
11142 
11143     OverloadCandidateSet::iterator Best;
11144     if (CandidateSet->empty() ||
11145         CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best) ==
11146             OR_No_Viable_Function) {
11147       // In Microsoft mode, if we are inside a template class member function then
11148       // create a type dependent CallExpr. The goal is to postpone name lookup
11149       // to instantiation time to be able to search into type dependent base
11150       // classes.
11151       CallExpr *CE = new (Context) CallExpr(
11152           Context, Fn, Args, Context.DependentTy, VK_RValue, RParenLoc);
11153       CE->setTypeDependent(true);
11154       CE->setValueDependent(true);
11155       CE->setInstantiationDependent(true);
11156       *Result = CE;
11157       return true;
11158     }
11159   }
11160 
11161   if (CandidateSet->empty())
11162     return false;
11163 
11164   UnbridgedCasts.restore();
11165   return false;
11166 }
11167 
11168 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
11169 /// the completed call expression. If overload resolution fails, emits
11170 /// diagnostics and returns ExprError()
11171 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
11172                                            UnresolvedLookupExpr *ULE,
11173                                            SourceLocation LParenLoc,
11174                                            MultiExprArg Args,
11175                                            SourceLocation RParenLoc,
11176                                            Expr *ExecConfig,
11177                                            OverloadCandidateSet *CandidateSet,
11178                                            OverloadCandidateSet::iterator *Best,
11179                                            OverloadingResult OverloadResult,
11180                                            bool AllowTypoCorrection) {
11181   if (CandidateSet->empty())
11182     return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, Args,
11183                                  RParenLoc, /*EmptyLookup=*/true,
11184                                  AllowTypoCorrection);
11185 
11186   switch (OverloadResult) {
11187   case OR_Success: {
11188     FunctionDecl *FDecl = (*Best)->Function;
11189     SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
11190     if (SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()))
11191       return ExprError();
11192     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
11193     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
11194                                          ExecConfig);
11195   }
11196 
11197   case OR_No_Viable_Function: {
11198     // Try to recover by looking for viable functions which the user might
11199     // have meant to call.
11200     ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
11201                                                 Args, RParenLoc,
11202                                                 /*EmptyLookup=*/false,
11203                                                 AllowTypoCorrection);
11204     if (!Recovery.isInvalid())
11205       return Recovery;
11206 
11207     // If the user passes in a function that we can't take the address of, we
11208     // generally end up emitting really bad error messages. Here, we attempt to
11209     // emit better ones.
11210     for (const Expr *Arg : Args) {
11211       if (!Arg->getType()->isFunctionType())
11212         continue;
11213       if (auto *DRE = dyn_cast<DeclRefExpr>(Arg->IgnoreParenImpCasts())) {
11214         auto *FD = dyn_cast<FunctionDecl>(DRE->getDecl());
11215         if (FD &&
11216             !SemaRef.checkAddressOfFunctionIsAvailable(FD, /*Complain=*/true,
11217                                                        Arg->getExprLoc()))
11218           return ExprError();
11219       }
11220     }
11221 
11222     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_no_viable_function_in_call)
11223         << ULE->getName() << Fn->getSourceRange();
11224     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
11225     break;
11226   }
11227 
11228   case OR_Ambiguous:
11229     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
11230       << ULE->getName() << Fn->getSourceRange();
11231     CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates, Args);
11232     break;
11233 
11234   case OR_Deleted: {
11235     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
11236       << (*Best)->Function->isDeleted()
11237       << ULE->getName()
11238       << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
11239       << Fn->getSourceRange();
11240     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
11241 
11242     // We emitted an error for the unvailable/deleted function call but keep
11243     // the call in the AST.
11244     FunctionDecl *FDecl = (*Best)->Function;
11245     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
11246     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
11247                                          ExecConfig);
11248   }
11249   }
11250 
11251   // Overload resolution failed.
11252   return ExprError();
11253 }
11254 
11255 static void markUnaddressableCandidatesUnviable(Sema &S,
11256                                                 OverloadCandidateSet &CS) {
11257   for (auto I = CS.begin(), E = CS.end(); I != E; ++I) {
11258     if (I->Viable &&
11259         !S.checkAddressOfFunctionIsAvailable(I->Function, /*Complain=*/false)) {
11260       I->Viable = false;
11261       I->FailureKind = ovl_fail_addr_not_available;
11262     }
11263   }
11264 }
11265 
11266 /// BuildOverloadedCallExpr - Given the call expression that calls Fn
11267 /// (which eventually refers to the declaration Func) and the call
11268 /// arguments Args/NumArgs, attempt to resolve the function call down
11269 /// to a specific function. If overload resolution succeeds, returns
11270 /// the call expression produced by overload resolution.
11271 /// Otherwise, emits diagnostics and returns ExprError.
11272 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
11273                                          UnresolvedLookupExpr *ULE,
11274                                          SourceLocation LParenLoc,
11275                                          MultiExprArg Args,
11276                                          SourceLocation RParenLoc,
11277                                          Expr *ExecConfig,
11278                                          bool AllowTypoCorrection,
11279                                          bool CalleesAddressIsTaken) {
11280   OverloadCandidateSet CandidateSet(Fn->getExprLoc(),
11281                                     OverloadCandidateSet::CSK_Normal);
11282   ExprResult result;
11283 
11284   if (buildOverloadedCallSet(S, Fn, ULE, Args, LParenLoc, &CandidateSet,
11285                              &result))
11286     return result;
11287 
11288   // If the user handed us something like `(&Foo)(Bar)`, we need to ensure that
11289   // functions that aren't addressible are considered unviable.
11290   if (CalleesAddressIsTaken)
11291     markUnaddressableCandidatesUnviable(*this, CandidateSet);
11292 
11293   OverloadCandidateSet::iterator Best;
11294   OverloadingResult OverloadResult =
11295       CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
11296 
11297   return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args,
11298                                   RParenLoc, ExecConfig, &CandidateSet,
11299                                   &Best, OverloadResult,
11300                                   AllowTypoCorrection);
11301 }
11302 
11303 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
11304   return Functions.size() > 1 ||
11305     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
11306 }
11307 
11308 /// \brief Create a unary operation that may resolve to an overloaded
11309 /// operator.
11310 ///
11311 /// \param OpLoc The location of the operator itself (e.g., '*').
11312 ///
11313 /// \param Opc The UnaryOperatorKind that describes this operator.
11314 ///
11315 /// \param Fns The set of non-member functions that will be
11316 /// considered by overload resolution. The caller needs to build this
11317 /// set based on the context using, e.g.,
11318 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
11319 /// set should not contain any member functions; those will be added
11320 /// by CreateOverloadedUnaryOp().
11321 ///
11322 /// \param Input The input argument.
11323 ExprResult
11324 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
11325                               const UnresolvedSetImpl &Fns,
11326                               Expr *Input) {
11327   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
11328   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
11329   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
11330   // TODO: provide better source location info.
11331   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
11332 
11333   if (checkPlaceholderForOverload(*this, Input))
11334     return ExprError();
11335 
11336   Expr *Args[2] = { Input, nullptr };
11337   unsigned NumArgs = 1;
11338 
11339   // For post-increment and post-decrement, add the implicit '0' as
11340   // the second argument, so that we know this is a post-increment or
11341   // post-decrement.
11342   if (Opc == UO_PostInc || Opc == UO_PostDec) {
11343     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
11344     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
11345                                      SourceLocation());
11346     NumArgs = 2;
11347   }
11348 
11349   ArrayRef<Expr *> ArgsArray(Args, NumArgs);
11350 
11351   if (Input->isTypeDependent()) {
11352     if (Fns.empty())
11353       return new (Context) UnaryOperator(Input, Opc, Context.DependentTy,
11354                                          VK_RValue, OK_Ordinary, OpLoc);
11355 
11356     CXXRecordDecl *NamingClass = nullptr; // lookup ignores member operators
11357     UnresolvedLookupExpr *Fn
11358       = UnresolvedLookupExpr::Create(Context, NamingClass,
11359                                      NestedNameSpecifierLoc(), OpNameInfo,
11360                                      /*ADL*/ true, IsOverloaded(Fns),
11361                                      Fns.begin(), Fns.end());
11362     return new (Context)
11363         CXXOperatorCallExpr(Context, Op, Fn, ArgsArray, Context.DependentTy,
11364                             VK_RValue, OpLoc, false);
11365   }
11366 
11367   // Build an empty overload set.
11368   OverloadCandidateSet CandidateSet(OpLoc, OverloadCandidateSet::CSK_Operator);
11369 
11370   // Add the candidates from the given function set.
11371   AddFunctionCandidates(Fns, ArgsArray, CandidateSet);
11372 
11373   // Add operator candidates that are member functions.
11374   AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
11375 
11376   // Add candidates from ADL.
11377   AddArgumentDependentLookupCandidates(OpName, OpLoc, ArgsArray,
11378                                        /*ExplicitTemplateArgs*/nullptr,
11379                                        CandidateSet);
11380 
11381   // Add builtin operator candidates.
11382   AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
11383 
11384   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11385 
11386   // Perform overload resolution.
11387   OverloadCandidateSet::iterator Best;
11388   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11389   case OR_Success: {
11390     // We found a built-in operator or an overloaded operator.
11391     FunctionDecl *FnDecl = Best->Function;
11392 
11393     if (FnDecl) {
11394       // We matched an overloaded operator. Build a call to that
11395       // operator.
11396 
11397       // Convert the arguments.
11398       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
11399         CheckMemberOperatorAccess(OpLoc, Args[0], nullptr, Best->FoundDecl);
11400 
11401         ExprResult InputRes =
11402           PerformObjectArgumentInitialization(Input, /*Qualifier=*/nullptr,
11403                                               Best->FoundDecl, Method);
11404         if (InputRes.isInvalid())
11405           return ExprError();
11406         Input = InputRes.get();
11407       } else {
11408         // Convert the arguments.
11409         ExprResult InputInit
11410           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11411                                                       Context,
11412                                                       FnDecl->getParamDecl(0)),
11413                                       SourceLocation(),
11414                                       Input);
11415         if (InputInit.isInvalid())
11416           return ExprError();
11417         Input = InputInit.get();
11418       }
11419 
11420       // Build the actual expression node.
11421       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
11422                                                 HadMultipleCandidates, OpLoc);
11423       if (FnExpr.isInvalid())
11424         return ExprError();
11425 
11426       // Determine the result type.
11427       QualType ResultTy = FnDecl->getReturnType();
11428       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11429       ResultTy = ResultTy.getNonLValueExprType(Context);
11430 
11431       Args[0] = Input;
11432       CallExpr *TheCall =
11433         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.get(), ArgsArray,
11434                                           ResultTy, VK, OpLoc, false);
11435 
11436       if (CheckCallReturnType(FnDecl->getReturnType(), OpLoc, TheCall, FnDecl))
11437         return ExprError();
11438 
11439       return MaybeBindToTemporary(TheCall);
11440     } else {
11441       // We matched a built-in operator. Convert the arguments, then
11442       // break out so that we will build the appropriate built-in
11443       // operator node.
11444       ExprResult InputRes =
11445         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
11446                                   Best->Conversions[0], AA_Passing);
11447       if (InputRes.isInvalid())
11448         return ExprError();
11449       Input = InputRes.get();
11450       break;
11451     }
11452   }
11453 
11454   case OR_No_Viable_Function:
11455     // This is an erroneous use of an operator which can be overloaded by
11456     // a non-member function. Check for non-member operators which were
11457     // defined too late to be candidates.
11458     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, ArgsArray))
11459       // FIXME: Recover by calling the found function.
11460       return ExprError();
11461 
11462     // No viable function; fall through to handling this as a
11463     // built-in operator, which will produce an error message for us.
11464     break;
11465 
11466   case OR_Ambiguous:
11467     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11468         << UnaryOperator::getOpcodeStr(Opc)
11469         << Input->getType()
11470         << Input->getSourceRange();
11471     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, ArgsArray,
11472                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
11473     return ExprError();
11474 
11475   case OR_Deleted:
11476     Diag(OpLoc, diag::err_ovl_deleted_oper)
11477       << Best->Function->isDeleted()
11478       << UnaryOperator::getOpcodeStr(Opc)
11479       << getDeletedOrUnavailableSuffix(Best->Function)
11480       << Input->getSourceRange();
11481     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, ArgsArray,
11482                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
11483     return ExprError();
11484   }
11485 
11486   // Either we found no viable overloaded operator or we matched a
11487   // built-in operator. In either case, fall through to trying to
11488   // build a built-in operation.
11489   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
11490 }
11491 
11492 /// \brief Create a binary operation that may resolve to an overloaded
11493 /// operator.
11494 ///
11495 /// \param OpLoc The location of the operator itself (e.g., '+').
11496 ///
11497 /// \param Opc The BinaryOperatorKind that describes this operator.
11498 ///
11499 /// \param Fns The set of non-member functions that will be
11500 /// considered by overload resolution. The caller needs to build this
11501 /// set based on the context using, e.g.,
11502 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
11503 /// set should not contain any member functions; those will be added
11504 /// by CreateOverloadedBinOp().
11505 ///
11506 /// \param LHS Left-hand argument.
11507 /// \param RHS Right-hand argument.
11508 ExprResult
11509 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
11510                             BinaryOperatorKind Opc,
11511                             const UnresolvedSetImpl &Fns,
11512                             Expr *LHS, Expr *RHS) {
11513   Expr *Args[2] = { LHS, RHS };
11514   LHS=RHS=nullptr; // Please use only Args instead of LHS/RHS couple
11515 
11516   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
11517   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
11518 
11519   // If either side is type-dependent, create an appropriate dependent
11520   // expression.
11521   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
11522     if (Fns.empty()) {
11523       // If there are no functions to store, just build a dependent
11524       // BinaryOperator or CompoundAssignment.
11525       if (Opc <= BO_Assign || Opc > BO_OrAssign)
11526         return new (Context) BinaryOperator(
11527             Args[0], Args[1], Opc, Context.DependentTy, VK_RValue, OK_Ordinary,
11528             OpLoc, FPFeatures.fp_contract);
11529 
11530       return new (Context) CompoundAssignOperator(
11531           Args[0], Args[1], Opc, Context.DependentTy, VK_LValue, OK_Ordinary,
11532           Context.DependentTy, Context.DependentTy, OpLoc,
11533           FPFeatures.fp_contract);
11534     }
11535 
11536     // FIXME: save results of ADL from here?
11537     CXXRecordDecl *NamingClass = nullptr; // lookup ignores member operators
11538     // TODO: provide better source location info in DNLoc component.
11539     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
11540     UnresolvedLookupExpr *Fn
11541       = UnresolvedLookupExpr::Create(Context, NamingClass,
11542                                      NestedNameSpecifierLoc(), OpNameInfo,
11543                                      /*ADL*/ true, IsOverloaded(Fns),
11544                                      Fns.begin(), Fns.end());
11545     return new (Context)
11546         CXXOperatorCallExpr(Context, Op, Fn, Args, Context.DependentTy,
11547                             VK_RValue, OpLoc, FPFeatures.fp_contract);
11548   }
11549 
11550   // Always do placeholder-like conversions on the RHS.
11551   if (checkPlaceholderForOverload(*this, Args[1]))
11552     return ExprError();
11553 
11554   // Do placeholder-like conversion on the LHS; note that we should
11555   // not get here with a PseudoObject LHS.
11556   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
11557   if (checkPlaceholderForOverload(*this, Args[0]))
11558     return ExprError();
11559 
11560   // If this is the assignment operator, we only perform overload resolution
11561   // if the left-hand side is a class or enumeration type. This is actually
11562   // a hack. The standard requires that we do overload resolution between the
11563   // various built-in candidates, but as DR507 points out, this can lead to
11564   // problems. So we do it this way, which pretty much follows what GCC does.
11565   // Note that we go the traditional code path for compound assignment forms.
11566   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
11567     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
11568 
11569   // If this is the .* operator, which is not overloadable, just
11570   // create a built-in binary operator.
11571   if (Opc == BO_PtrMemD)
11572     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
11573 
11574   // Build an empty overload set.
11575   OverloadCandidateSet CandidateSet(OpLoc, OverloadCandidateSet::CSK_Operator);
11576 
11577   // Add the candidates from the given function set.
11578   AddFunctionCandidates(Fns, Args, CandidateSet);
11579 
11580   // Add operator candidates that are member functions.
11581   AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet);
11582 
11583   // Add candidates from ADL. Per [over.match.oper]p2, this lookup is not
11584   // performed for an assignment operator (nor for operator[] nor operator->,
11585   // which don't get here).
11586   if (Opc != BO_Assign)
11587     AddArgumentDependentLookupCandidates(OpName, OpLoc, Args,
11588                                          /*ExplicitTemplateArgs*/ nullptr,
11589                                          CandidateSet);
11590 
11591   // Add builtin operator candidates.
11592   AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet);
11593 
11594   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11595 
11596   // Perform overload resolution.
11597   OverloadCandidateSet::iterator Best;
11598   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11599     case OR_Success: {
11600       // We found a built-in operator or an overloaded operator.
11601       FunctionDecl *FnDecl = Best->Function;
11602 
11603       if (FnDecl) {
11604         // We matched an overloaded operator. Build a call to that
11605         // operator.
11606 
11607         // Convert the arguments.
11608         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
11609           // Best->Access is only meaningful for class members.
11610           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
11611 
11612           ExprResult Arg1 =
11613             PerformCopyInitialization(
11614               InitializedEntity::InitializeParameter(Context,
11615                                                      FnDecl->getParamDecl(0)),
11616               SourceLocation(), Args[1]);
11617           if (Arg1.isInvalid())
11618             return ExprError();
11619 
11620           ExprResult Arg0 =
11621             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/nullptr,
11622                                                 Best->FoundDecl, Method);
11623           if (Arg0.isInvalid())
11624             return ExprError();
11625           Args[0] = Arg0.getAs<Expr>();
11626           Args[1] = RHS = Arg1.getAs<Expr>();
11627         } else {
11628           // Convert the arguments.
11629           ExprResult Arg0 = PerformCopyInitialization(
11630             InitializedEntity::InitializeParameter(Context,
11631                                                    FnDecl->getParamDecl(0)),
11632             SourceLocation(), Args[0]);
11633           if (Arg0.isInvalid())
11634             return ExprError();
11635 
11636           ExprResult Arg1 =
11637             PerformCopyInitialization(
11638               InitializedEntity::InitializeParameter(Context,
11639                                                      FnDecl->getParamDecl(1)),
11640               SourceLocation(), Args[1]);
11641           if (Arg1.isInvalid())
11642             return ExprError();
11643           Args[0] = LHS = Arg0.getAs<Expr>();
11644           Args[1] = RHS = Arg1.getAs<Expr>();
11645         }
11646 
11647         // Build the actual expression node.
11648         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
11649                                                   Best->FoundDecl,
11650                                                   HadMultipleCandidates, OpLoc);
11651         if (FnExpr.isInvalid())
11652           return ExprError();
11653 
11654         // Determine the result type.
11655         QualType ResultTy = FnDecl->getReturnType();
11656         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11657         ResultTy = ResultTy.getNonLValueExprType(Context);
11658 
11659         CXXOperatorCallExpr *TheCall =
11660           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.get(),
11661                                             Args, ResultTy, VK, OpLoc,
11662                                             FPFeatures.fp_contract);
11663 
11664         if (CheckCallReturnType(FnDecl->getReturnType(), OpLoc, TheCall,
11665                                 FnDecl))
11666           return ExprError();
11667 
11668         ArrayRef<const Expr *> ArgsArray(Args, 2);
11669         // Cut off the implicit 'this'.
11670         if (isa<CXXMethodDecl>(FnDecl))
11671           ArgsArray = ArgsArray.slice(1);
11672 
11673         // Check for a self move.
11674         if (Op == OO_Equal)
11675           DiagnoseSelfMove(Args[0], Args[1], OpLoc);
11676 
11677         checkCall(FnDecl, nullptr, ArgsArray, isa<CXXMethodDecl>(FnDecl), OpLoc,
11678                   TheCall->getSourceRange(), VariadicDoesNotApply);
11679 
11680         return MaybeBindToTemporary(TheCall);
11681       } else {
11682         // We matched a built-in operator. Convert the arguments, then
11683         // break out so that we will build the appropriate built-in
11684         // operator node.
11685         ExprResult ArgsRes0 =
11686           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
11687                                     Best->Conversions[0], AA_Passing);
11688         if (ArgsRes0.isInvalid())
11689           return ExprError();
11690         Args[0] = ArgsRes0.get();
11691 
11692         ExprResult ArgsRes1 =
11693           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
11694                                     Best->Conversions[1], AA_Passing);
11695         if (ArgsRes1.isInvalid())
11696           return ExprError();
11697         Args[1] = ArgsRes1.get();
11698         break;
11699       }
11700     }
11701 
11702     case OR_No_Viable_Function: {
11703       // C++ [over.match.oper]p9:
11704       //   If the operator is the operator , [...] and there are no
11705       //   viable functions, then the operator is assumed to be the
11706       //   built-in operator and interpreted according to clause 5.
11707       if (Opc == BO_Comma)
11708         break;
11709 
11710       // For class as left operand for assignment or compound assigment
11711       // operator do not fall through to handling in built-in, but report that
11712       // no overloaded assignment operator found
11713       ExprResult Result = ExprError();
11714       if (Args[0]->getType()->isRecordType() &&
11715           Opc >= BO_Assign && Opc <= BO_OrAssign) {
11716         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
11717              << BinaryOperator::getOpcodeStr(Opc)
11718              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11719         if (Args[0]->getType()->isIncompleteType()) {
11720           Diag(OpLoc, diag::note_assign_lhs_incomplete)
11721             << Args[0]->getType()
11722             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11723         }
11724       } else {
11725         // This is an erroneous use of an operator which can be overloaded by
11726         // a non-member function. Check for non-member operators which were
11727         // defined too late to be candidates.
11728         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
11729           // FIXME: Recover by calling the found function.
11730           return ExprError();
11731 
11732         // No viable function; try to create a built-in operation, which will
11733         // produce an error. Then, show the non-viable candidates.
11734         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
11735       }
11736       assert(Result.isInvalid() &&
11737              "C++ binary operator overloading is missing candidates!");
11738       if (Result.isInvalid())
11739         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
11740                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
11741       return Result;
11742     }
11743 
11744     case OR_Ambiguous:
11745       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
11746           << BinaryOperator::getOpcodeStr(Opc)
11747           << Args[0]->getType() << Args[1]->getType()
11748           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11749       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
11750                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
11751       return ExprError();
11752 
11753     case OR_Deleted:
11754       if (isImplicitlyDeleted(Best->Function)) {
11755         CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11756         Diag(OpLoc, diag::err_ovl_deleted_special_oper)
11757           << Context.getRecordType(Method->getParent())
11758           << getSpecialMember(Method);
11759 
11760         // The user probably meant to call this special member. Just
11761         // explain why it's deleted.
11762         NoteDeletedFunction(Method);
11763         return ExprError();
11764       } else {
11765         Diag(OpLoc, diag::err_ovl_deleted_oper)
11766           << Best->Function->isDeleted()
11767           << BinaryOperator::getOpcodeStr(Opc)
11768           << getDeletedOrUnavailableSuffix(Best->Function)
11769           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11770       }
11771       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
11772                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
11773       return ExprError();
11774   }
11775 
11776   // We matched a built-in operator; build it.
11777   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
11778 }
11779 
11780 ExprResult
11781 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
11782                                          SourceLocation RLoc,
11783                                          Expr *Base, Expr *Idx) {
11784   Expr *Args[2] = { Base, Idx };
11785   DeclarationName OpName =
11786       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
11787 
11788   // If either side is type-dependent, create an appropriate dependent
11789   // expression.
11790   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
11791 
11792     CXXRecordDecl *NamingClass = nullptr; // lookup ignores member operators
11793     // CHECKME: no 'operator' keyword?
11794     DeclarationNameInfo OpNameInfo(OpName, LLoc);
11795     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
11796     UnresolvedLookupExpr *Fn
11797       = UnresolvedLookupExpr::Create(Context, NamingClass,
11798                                      NestedNameSpecifierLoc(), OpNameInfo,
11799                                      /*ADL*/ true, /*Overloaded*/ false,
11800                                      UnresolvedSetIterator(),
11801                                      UnresolvedSetIterator());
11802     // Can't add any actual overloads yet
11803 
11804     return new (Context)
11805         CXXOperatorCallExpr(Context, OO_Subscript, Fn, Args,
11806                             Context.DependentTy, VK_RValue, RLoc, false);
11807   }
11808 
11809   // Handle placeholders on both operands.
11810   if (checkPlaceholderForOverload(*this, Args[0]))
11811     return ExprError();
11812   if (checkPlaceholderForOverload(*this, Args[1]))
11813     return ExprError();
11814 
11815   // Build an empty overload set.
11816   OverloadCandidateSet CandidateSet(LLoc, OverloadCandidateSet::CSK_Operator);
11817 
11818   // Subscript can only be overloaded as a member function.
11819 
11820   // Add operator candidates that are member functions.
11821   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
11822 
11823   // Add builtin operator candidates.
11824   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
11825 
11826   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11827 
11828   // Perform overload resolution.
11829   OverloadCandidateSet::iterator Best;
11830   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
11831     case OR_Success: {
11832       // We found a built-in operator or an overloaded operator.
11833       FunctionDecl *FnDecl = Best->Function;
11834 
11835       if (FnDecl) {
11836         // We matched an overloaded operator. Build a call to that
11837         // operator.
11838 
11839         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
11840 
11841         // Convert the arguments.
11842         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
11843         ExprResult Arg0 =
11844           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/nullptr,
11845                                               Best->FoundDecl, Method);
11846         if (Arg0.isInvalid())
11847           return ExprError();
11848         Args[0] = Arg0.get();
11849 
11850         // Convert the arguments.
11851         ExprResult InputInit
11852           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11853                                                       Context,
11854                                                       FnDecl->getParamDecl(0)),
11855                                       SourceLocation(),
11856                                       Args[1]);
11857         if (InputInit.isInvalid())
11858           return ExprError();
11859 
11860         Args[1] = InputInit.getAs<Expr>();
11861 
11862         // Build the actual expression node.
11863         DeclarationNameInfo OpLocInfo(OpName, LLoc);
11864         OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
11865         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
11866                                                   Best->FoundDecl,
11867                                                   HadMultipleCandidates,
11868                                                   OpLocInfo.getLoc(),
11869                                                   OpLocInfo.getInfo());
11870         if (FnExpr.isInvalid())
11871           return ExprError();
11872 
11873         // Determine the result type
11874         QualType ResultTy = FnDecl->getReturnType();
11875         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11876         ResultTy = ResultTy.getNonLValueExprType(Context);
11877 
11878         CXXOperatorCallExpr *TheCall =
11879           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
11880                                             FnExpr.get(), Args,
11881                                             ResultTy, VK, RLoc,
11882                                             false);
11883 
11884         if (CheckCallReturnType(FnDecl->getReturnType(), LLoc, TheCall, FnDecl))
11885           return ExprError();
11886 
11887         return MaybeBindToTemporary(TheCall);
11888       } else {
11889         // We matched a built-in operator. Convert the arguments, then
11890         // break out so that we will build the appropriate built-in
11891         // operator node.
11892         ExprResult ArgsRes0 =
11893           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
11894                                     Best->Conversions[0], AA_Passing);
11895         if (ArgsRes0.isInvalid())
11896           return ExprError();
11897         Args[0] = ArgsRes0.get();
11898 
11899         ExprResult ArgsRes1 =
11900           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
11901                                     Best->Conversions[1], AA_Passing);
11902         if (ArgsRes1.isInvalid())
11903           return ExprError();
11904         Args[1] = ArgsRes1.get();
11905 
11906         break;
11907       }
11908     }
11909 
11910     case OR_No_Viable_Function: {
11911       if (CandidateSet.empty())
11912         Diag(LLoc, diag::err_ovl_no_oper)
11913           << Args[0]->getType() << /*subscript*/ 0
11914           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11915       else
11916         Diag(LLoc, diag::err_ovl_no_viable_subscript)
11917           << Args[0]->getType()
11918           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11919       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
11920                                   "[]", LLoc);
11921       return ExprError();
11922     }
11923 
11924     case OR_Ambiguous:
11925       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
11926           << "[]"
11927           << Args[0]->getType() << Args[1]->getType()
11928           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11929       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
11930                                   "[]", LLoc);
11931       return ExprError();
11932 
11933     case OR_Deleted:
11934       Diag(LLoc, diag::err_ovl_deleted_oper)
11935         << Best->Function->isDeleted() << "[]"
11936         << getDeletedOrUnavailableSuffix(Best->Function)
11937         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
11938       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
11939                                   "[]", LLoc);
11940       return ExprError();
11941     }
11942 
11943   // We matched a built-in operator; build it.
11944   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
11945 }
11946 
11947 /// BuildCallToMemberFunction - Build a call to a member
11948 /// function. MemExpr is the expression that refers to the member
11949 /// function (and includes the object parameter), Args/NumArgs are the
11950 /// arguments to the function call (not including the object
11951 /// parameter). The caller needs to validate that the member
11952 /// expression refers to a non-static member function or an overloaded
11953 /// member function.
11954 ExprResult
11955 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
11956                                 SourceLocation LParenLoc,
11957                                 MultiExprArg Args,
11958                                 SourceLocation RParenLoc) {
11959   assert(MemExprE->getType() == Context.BoundMemberTy ||
11960          MemExprE->getType() == Context.OverloadTy);
11961 
11962   // Dig out the member expression. This holds both the object
11963   // argument and the member function we're referring to.
11964   Expr *NakedMemExpr = MemExprE->IgnoreParens();
11965 
11966   // Determine whether this is a call to a pointer-to-member function.
11967   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
11968     assert(op->getType() == Context.BoundMemberTy);
11969     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
11970 
11971     QualType fnType =
11972       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
11973 
11974     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
11975     QualType resultType = proto->getCallResultType(Context);
11976     ExprValueKind valueKind = Expr::getValueKindForType(proto->getReturnType());
11977 
11978     // Check that the object type isn't more qualified than the
11979     // member function we're calling.
11980     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
11981 
11982     QualType objectType = op->getLHS()->getType();
11983     if (op->getOpcode() == BO_PtrMemI)
11984       objectType = objectType->castAs<PointerType>()->getPointeeType();
11985     Qualifiers objectQuals = objectType.getQualifiers();
11986 
11987     Qualifiers difference = objectQuals - funcQuals;
11988     difference.removeObjCGCAttr();
11989     difference.removeAddressSpace();
11990     if (difference) {
11991       std::string qualsString = difference.getAsString();
11992       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
11993         << fnType.getUnqualifiedType()
11994         << qualsString
11995         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
11996     }
11997 
11998     CXXMemberCallExpr *call
11999       = new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
12000                                         resultType, valueKind, RParenLoc);
12001 
12002     if (CheckCallReturnType(proto->getReturnType(), op->getRHS()->getLocStart(),
12003                             call, nullptr))
12004       return ExprError();
12005 
12006     if (ConvertArgumentsForCall(call, op, nullptr, proto, Args, RParenLoc))
12007       return ExprError();
12008 
12009     if (CheckOtherCall(call, proto))
12010       return ExprError();
12011 
12012     return MaybeBindToTemporary(call);
12013   }
12014 
12015   if (isa<CXXPseudoDestructorExpr>(NakedMemExpr))
12016     return new (Context)
12017         CallExpr(Context, MemExprE, Args, Context.VoidTy, VK_RValue, RParenLoc);
12018 
12019   UnbridgedCastsSet UnbridgedCasts;
12020   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
12021     return ExprError();
12022 
12023   MemberExpr *MemExpr;
12024   CXXMethodDecl *Method = nullptr;
12025   DeclAccessPair FoundDecl = DeclAccessPair::make(nullptr, AS_public);
12026   NestedNameSpecifier *Qualifier = nullptr;
12027   if (isa<MemberExpr>(NakedMemExpr)) {
12028     MemExpr = cast<MemberExpr>(NakedMemExpr);
12029     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
12030     FoundDecl = MemExpr->getFoundDecl();
12031     Qualifier = MemExpr->getQualifier();
12032     UnbridgedCasts.restore();
12033   } else {
12034     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
12035     Qualifier = UnresExpr->getQualifier();
12036 
12037     QualType ObjectType = UnresExpr->getBaseType();
12038     Expr::Classification ObjectClassification
12039       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
12040                             : UnresExpr->getBase()->Classify(Context);
12041 
12042     // Add overload candidates
12043     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc(),
12044                                       OverloadCandidateSet::CSK_Normal);
12045 
12046     // FIXME: avoid copy.
12047     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr;
12048     if (UnresExpr->hasExplicitTemplateArgs()) {
12049       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
12050       TemplateArgs = &TemplateArgsBuffer;
12051     }
12052 
12053     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
12054            E = UnresExpr->decls_end(); I != E; ++I) {
12055 
12056       NamedDecl *Func = *I;
12057       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
12058       if (isa<UsingShadowDecl>(Func))
12059         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
12060 
12061 
12062       // Microsoft supports direct constructor calls.
12063       if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
12064         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
12065                              Args, CandidateSet);
12066       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
12067         // If explicit template arguments were provided, we can't call a
12068         // non-template member function.
12069         if (TemplateArgs)
12070           continue;
12071 
12072         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
12073                            ObjectClassification, Args, CandidateSet,
12074                            /*SuppressUserConversions=*/false);
12075       } else {
12076         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
12077                                    I.getPair(), ActingDC, TemplateArgs,
12078                                    ObjectType,  ObjectClassification,
12079                                    Args, CandidateSet,
12080                                    /*SuppressUsedConversions=*/false);
12081       }
12082     }
12083 
12084     DeclarationName DeclName = UnresExpr->getMemberName();
12085 
12086     UnbridgedCasts.restore();
12087 
12088     OverloadCandidateSet::iterator Best;
12089     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
12090                                             Best)) {
12091     case OR_Success:
12092       Method = cast<CXXMethodDecl>(Best->Function);
12093       FoundDecl = Best->FoundDecl;
12094       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
12095       if (DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()))
12096         return ExprError();
12097       // If FoundDecl is different from Method (such as if one is a template
12098       // and the other a specialization), make sure DiagnoseUseOfDecl is
12099       // called on both.
12100       // FIXME: This would be more comprehensively addressed by modifying
12101       // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
12102       // being used.
12103       if (Method != FoundDecl.getDecl() &&
12104                       DiagnoseUseOfDecl(Method, UnresExpr->getNameLoc()))
12105         return ExprError();
12106       break;
12107 
12108     case OR_No_Viable_Function:
12109       Diag(UnresExpr->getMemberLoc(),
12110            diag::err_ovl_no_viable_member_function_in_call)
12111         << DeclName << MemExprE->getSourceRange();
12112       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
12113       // FIXME: Leaking incoming expressions!
12114       return ExprError();
12115 
12116     case OR_Ambiguous:
12117       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
12118         << DeclName << MemExprE->getSourceRange();
12119       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
12120       // FIXME: Leaking incoming expressions!
12121       return ExprError();
12122 
12123     case OR_Deleted:
12124       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
12125         << Best->Function->isDeleted()
12126         << DeclName
12127         << getDeletedOrUnavailableSuffix(Best->Function)
12128         << MemExprE->getSourceRange();
12129       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
12130       // FIXME: Leaking incoming expressions!
12131       return ExprError();
12132     }
12133 
12134     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
12135 
12136     // If overload resolution picked a static member, build a
12137     // non-member call based on that function.
12138     if (Method->isStatic()) {
12139       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, Args,
12140                                    RParenLoc);
12141     }
12142 
12143     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
12144   }
12145 
12146   QualType ResultType = Method->getReturnType();
12147   ExprValueKind VK = Expr::getValueKindForType(ResultType);
12148   ResultType = ResultType.getNonLValueExprType(Context);
12149 
12150   assert(Method && "Member call to something that isn't a method?");
12151   CXXMemberCallExpr *TheCall =
12152     new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
12153                                     ResultType, VK, RParenLoc);
12154 
12155   // (CUDA B.1): Check for invalid calls between targets.
12156   if (getLangOpts().CUDA) {
12157     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext)) {
12158       if (CheckCUDATarget(Caller, Method)) {
12159         Diag(MemExpr->getMemberLoc(), diag::err_ref_bad_target)
12160             << IdentifyCUDATarget(Method) << Method->getIdentifier()
12161             << IdentifyCUDATarget(Caller);
12162         return ExprError();
12163       }
12164     }
12165   }
12166 
12167   // Check for a valid return type.
12168   if (CheckCallReturnType(Method->getReturnType(), MemExpr->getMemberLoc(),
12169                           TheCall, Method))
12170     return ExprError();
12171 
12172   // Convert the object argument (for a non-static member function call).
12173   // We only need to do this if there was actually an overload; otherwise
12174   // it was done at lookup.
12175   if (!Method->isStatic()) {
12176     ExprResult ObjectArg =
12177       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
12178                                           FoundDecl, Method);
12179     if (ObjectArg.isInvalid())
12180       return ExprError();
12181     MemExpr->setBase(ObjectArg.get());
12182   }
12183 
12184   // Convert the rest of the arguments
12185   const FunctionProtoType *Proto =
12186     Method->getType()->getAs<FunctionProtoType>();
12187   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args,
12188                               RParenLoc))
12189     return ExprError();
12190 
12191   DiagnoseSentinelCalls(Method, LParenLoc, Args);
12192 
12193   if (CheckFunctionCall(Method, TheCall, Proto))
12194     return ExprError();
12195 
12196   // In the case the method to call was not selected by the overloading
12197   // resolution process, we still need to handle the enable_if attribute. Do
12198   // that here, so it will not hide previous -- and more relevant -- errors
12199   if (isa<MemberExpr>(NakedMemExpr)) {
12200     if (const EnableIfAttr *Attr = CheckEnableIf(Method, Args, true)) {
12201       Diag(MemExprE->getLocStart(),
12202            diag::err_ovl_no_viable_member_function_in_call)
12203           << Method << Method->getSourceRange();
12204       Diag(Method->getLocation(),
12205            diag::note_ovl_candidate_disabled_by_enable_if_attr)
12206           << Attr->getCond()->getSourceRange() << Attr->getMessage();
12207       return ExprError();
12208     }
12209   }
12210 
12211   if ((isa<CXXConstructorDecl>(CurContext) ||
12212        isa<CXXDestructorDecl>(CurContext)) &&
12213       TheCall->getMethodDecl()->isPure()) {
12214     const CXXMethodDecl *MD = TheCall->getMethodDecl();
12215 
12216     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts()) &&
12217         MemExpr->performsVirtualDispatch(getLangOpts())) {
12218       Diag(MemExpr->getLocStart(),
12219            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
12220         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
12221         << MD->getParent()->getDeclName();
12222 
12223       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
12224       if (getLangOpts().AppleKext)
12225         Diag(MemExpr->getLocStart(),
12226              diag::note_pure_qualified_call_kext)
12227              << MD->getParent()->getDeclName()
12228              << MD->getDeclName();
12229     }
12230   }
12231   return MaybeBindToTemporary(TheCall);
12232 }
12233 
12234 /// BuildCallToObjectOfClassType - Build a call to an object of class
12235 /// type (C++ [over.call.object]), which can end up invoking an
12236 /// overloaded function call operator (@c operator()) or performing a
12237 /// user-defined conversion on the object argument.
12238 ExprResult
12239 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
12240                                    SourceLocation LParenLoc,
12241                                    MultiExprArg Args,
12242                                    SourceLocation RParenLoc) {
12243   if (checkPlaceholderForOverload(*this, Obj))
12244     return ExprError();
12245   ExprResult Object = Obj;
12246 
12247   UnbridgedCastsSet UnbridgedCasts;
12248   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
12249     return ExprError();
12250 
12251   assert(Object.get()->getType()->isRecordType() &&
12252          "Requires object type argument");
12253   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
12254 
12255   // C++ [over.call.object]p1:
12256   //  If the primary-expression E in the function call syntax
12257   //  evaluates to a class object of type "cv T", then the set of
12258   //  candidate functions includes at least the function call
12259   //  operators of T. The function call operators of T are obtained by
12260   //  ordinary lookup of the name operator() in the context of
12261   //  (E).operator().
12262   OverloadCandidateSet CandidateSet(LParenLoc,
12263                                     OverloadCandidateSet::CSK_Operator);
12264   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
12265 
12266   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
12267                           diag::err_incomplete_object_call, Object.get()))
12268     return true;
12269 
12270   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
12271   LookupQualifiedName(R, Record->getDecl());
12272   R.suppressDiagnostics();
12273 
12274   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
12275        Oper != OperEnd; ++Oper) {
12276     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
12277                        Object.get()->Classify(Context),
12278                        Args, CandidateSet,
12279                        /*SuppressUserConversions=*/ false);
12280   }
12281 
12282   // C++ [over.call.object]p2:
12283   //   In addition, for each (non-explicit in C++0x) conversion function
12284   //   declared in T of the form
12285   //
12286   //        operator conversion-type-id () cv-qualifier;
12287   //
12288   //   where cv-qualifier is the same cv-qualification as, or a
12289   //   greater cv-qualification than, cv, and where conversion-type-id
12290   //   denotes the type "pointer to function of (P1,...,Pn) returning
12291   //   R", or the type "reference to pointer to function of
12292   //   (P1,...,Pn) returning R", or the type "reference to function
12293   //   of (P1,...,Pn) returning R", a surrogate call function [...]
12294   //   is also considered as a candidate function. Similarly,
12295   //   surrogate call functions are added to the set of candidate
12296   //   functions for each conversion function declared in an
12297   //   accessible base class provided the function is not hidden
12298   //   within T by another intervening declaration.
12299   const auto &Conversions =
12300       cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
12301   for (auto I = Conversions.begin(), E = Conversions.end(); I != E; ++I) {
12302     NamedDecl *D = *I;
12303     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
12304     if (isa<UsingShadowDecl>(D))
12305       D = cast<UsingShadowDecl>(D)->getTargetDecl();
12306 
12307     // Skip over templated conversion functions; they aren't
12308     // surrogates.
12309     if (isa<FunctionTemplateDecl>(D))
12310       continue;
12311 
12312     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
12313     if (!Conv->isExplicit()) {
12314       // Strip the reference type (if any) and then the pointer type (if
12315       // any) to get down to what might be a function type.
12316       QualType ConvType = Conv->getConversionType().getNonReferenceType();
12317       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
12318         ConvType = ConvPtrType->getPointeeType();
12319 
12320       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
12321       {
12322         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
12323                               Object.get(), Args, CandidateSet);
12324       }
12325     }
12326   }
12327 
12328   bool HadMultipleCandidates = (CandidateSet.size() > 1);
12329 
12330   // Perform overload resolution.
12331   OverloadCandidateSet::iterator Best;
12332   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
12333                              Best)) {
12334   case OR_Success:
12335     // Overload resolution succeeded; we'll build the appropriate call
12336     // below.
12337     break;
12338 
12339   case OR_No_Viable_Function:
12340     if (CandidateSet.empty())
12341       Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
12342         << Object.get()->getType() << /*call*/ 1
12343         << Object.get()->getSourceRange();
12344     else
12345       Diag(Object.get()->getLocStart(),
12346            diag::err_ovl_no_viable_object_call)
12347         << Object.get()->getType() << Object.get()->getSourceRange();
12348     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
12349     break;
12350 
12351   case OR_Ambiguous:
12352     Diag(Object.get()->getLocStart(),
12353          diag::err_ovl_ambiguous_object_call)
12354       << Object.get()->getType() << Object.get()->getSourceRange();
12355     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
12356     break;
12357 
12358   case OR_Deleted:
12359     Diag(Object.get()->getLocStart(),
12360          diag::err_ovl_deleted_object_call)
12361       << Best->Function->isDeleted()
12362       << Object.get()->getType()
12363       << getDeletedOrUnavailableSuffix(Best->Function)
12364       << Object.get()->getSourceRange();
12365     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
12366     break;
12367   }
12368 
12369   if (Best == CandidateSet.end())
12370     return true;
12371 
12372   UnbridgedCasts.restore();
12373 
12374   if (Best->Function == nullptr) {
12375     // Since there is no function declaration, this is one of the
12376     // surrogate candidates. Dig out the conversion function.
12377     CXXConversionDecl *Conv
12378       = cast<CXXConversionDecl>(
12379                          Best->Conversions[0].UserDefined.ConversionFunction);
12380 
12381     CheckMemberOperatorAccess(LParenLoc, Object.get(), nullptr,
12382                               Best->FoundDecl);
12383     if (DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc))
12384       return ExprError();
12385     assert(Conv == Best->FoundDecl.getDecl() &&
12386              "Found Decl & conversion-to-functionptr should be same, right?!");
12387     // We selected one of the surrogate functions that converts the
12388     // object parameter to a function pointer. Perform the conversion
12389     // on the object argument, then let ActOnCallExpr finish the job.
12390 
12391     // Create an implicit member expr to refer to the conversion operator.
12392     // and then call it.
12393     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
12394                                              Conv, HadMultipleCandidates);
12395     if (Call.isInvalid())
12396       return ExprError();
12397     // Record usage of conversion in an implicit cast.
12398     Call = ImplicitCastExpr::Create(Context, Call.get()->getType(),
12399                                     CK_UserDefinedConversion, Call.get(),
12400                                     nullptr, VK_RValue);
12401 
12402     return ActOnCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc);
12403   }
12404 
12405   CheckMemberOperatorAccess(LParenLoc, Object.get(), nullptr, Best->FoundDecl);
12406 
12407   // We found an overloaded operator(). Build a CXXOperatorCallExpr
12408   // that calls this method, using Object for the implicit object
12409   // parameter and passing along the remaining arguments.
12410   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
12411 
12412   // An error diagnostic has already been printed when parsing the declaration.
12413   if (Method->isInvalidDecl())
12414     return ExprError();
12415 
12416   const FunctionProtoType *Proto =
12417     Method->getType()->getAs<FunctionProtoType>();
12418 
12419   unsigned NumParams = Proto->getNumParams();
12420 
12421   DeclarationNameInfo OpLocInfo(
12422                Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
12423   OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
12424   ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
12425                                            HadMultipleCandidates,
12426                                            OpLocInfo.getLoc(),
12427                                            OpLocInfo.getInfo());
12428   if (NewFn.isInvalid())
12429     return true;
12430 
12431   // Build the full argument list for the method call (the implicit object
12432   // parameter is placed at the beginning of the list).
12433   std::unique_ptr<Expr * []> MethodArgs(new Expr *[Args.size() + 1]);
12434   MethodArgs[0] = Object.get();
12435   std::copy(Args.begin(), Args.end(), &MethodArgs[1]);
12436 
12437   // Once we've built TheCall, all of the expressions are properly
12438   // owned.
12439   QualType ResultTy = Method->getReturnType();
12440   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
12441   ResultTy = ResultTy.getNonLValueExprType(Context);
12442 
12443   CXXOperatorCallExpr *TheCall = new (Context)
12444       CXXOperatorCallExpr(Context, OO_Call, NewFn.get(),
12445                           llvm::makeArrayRef(MethodArgs.get(), Args.size() + 1),
12446                           ResultTy, VK, RParenLoc, false);
12447   MethodArgs.reset();
12448 
12449   if (CheckCallReturnType(Method->getReturnType(), LParenLoc, TheCall, Method))
12450     return true;
12451 
12452   // We may have default arguments. If so, we need to allocate more
12453   // slots in the call for them.
12454   if (Args.size() < NumParams)
12455     TheCall->setNumArgs(Context, NumParams + 1);
12456 
12457   bool IsError = false;
12458 
12459   // Initialize the implicit object parameter.
12460   ExprResult ObjRes =
12461     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/nullptr,
12462                                         Best->FoundDecl, Method);
12463   if (ObjRes.isInvalid())
12464     IsError = true;
12465   else
12466     Object = ObjRes;
12467   TheCall->setArg(0, Object.get());
12468 
12469   // Check the argument types.
12470   for (unsigned i = 0; i != NumParams; i++) {
12471     Expr *Arg;
12472     if (i < Args.size()) {
12473       Arg = Args[i];
12474 
12475       // Pass the argument.
12476 
12477       ExprResult InputInit
12478         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
12479                                                     Context,
12480                                                     Method->getParamDecl(i)),
12481                                     SourceLocation(), Arg);
12482 
12483       IsError |= InputInit.isInvalid();
12484       Arg = InputInit.getAs<Expr>();
12485     } else {
12486       ExprResult DefArg
12487         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
12488       if (DefArg.isInvalid()) {
12489         IsError = true;
12490         break;
12491       }
12492 
12493       Arg = DefArg.getAs<Expr>();
12494     }
12495 
12496     TheCall->setArg(i + 1, Arg);
12497   }
12498 
12499   // If this is a variadic call, handle args passed through "...".
12500   if (Proto->isVariadic()) {
12501     // Promote the arguments (C99 6.5.2.2p7).
12502     for (unsigned i = NumParams, e = Args.size(); i < e; i++) {
12503       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod,
12504                                                         nullptr);
12505       IsError |= Arg.isInvalid();
12506       TheCall->setArg(i + 1, Arg.get());
12507     }
12508   }
12509 
12510   if (IsError) return true;
12511 
12512   DiagnoseSentinelCalls(Method, LParenLoc, Args);
12513 
12514   if (CheckFunctionCall(Method, TheCall, Proto))
12515     return true;
12516 
12517   return MaybeBindToTemporary(TheCall);
12518 }
12519 
12520 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
12521 ///  (if one exists), where @c Base is an expression of class type and
12522 /// @c Member is the name of the member we're trying to find.
12523 ExprResult
12524 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
12525                                bool *NoArrowOperatorFound) {
12526   assert(Base->getType()->isRecordType() &&
12527          "left-hand side must have class type");
12528 
12529   if (checkPlaceholderForOverload(*this, Base))
12530     return ExprError();
12531 
12532   SourceLocation Loc = Base->getExprLoc();
12533 
12534   // C++ [over.ref]p1:
12535   //
12536   //   [...] An expression x->m is interpreted as (x.operator->())->m
12537   //   for a class object x of type T if T::operator->() exists and if
12538   //   the operator is selected as the best match function by the
12539   //   overload resolution mechanism (13.3).
12540   DeclarationName OpName =
12541     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
12542   OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Operator);
12543   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
12544 
12545   if (RequireCompleteType(Loc, Base->getType(),
12546                           diag::err_typecheck_incomplete_tag, Base))
12547     return ExprError();
12548 
12549   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
12550   LookupQualifiedName(R, BaseRecord->getDecl());
12551   R.suppressDiagnostics();
12552 
12553   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
12554        Oper != OperEnd; ++Oper) {
12555     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
12556                        None, CandidateSet, /*SuppressUserConversions=*/false);
12557   }
12558 
12559   bool HadMultipleCandidates = (CandidateSet.size() > 1);
12560 
12561   // Perform overload resolution.
12562   OverloadCandidateSet::iterator Best;
12563   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
12564   case OR_Success:
12565     // Overload resolution succeeded; we'll build the call below.
12566     break;
12567 
12568   case OR_No_Viable_Function:
12569     if (CandidateSet.empty()) {
12570       QualType BaseType = Base->getType();
12571       if (NoArrowOperatorFound) {
12572         // Report this specific error to the caller instead of emitting a
12573         // diagnostic, as requested.
12574         *NoArrowOperatorFound = true;
12575         return ExprError();
12576       }
12577       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
12578         << BaseType << Base->getSourceRange();
12579       if (BaseType->isRecordType() && !BaseType->isPointerType()) {
12580         Diag(OpLoc, diag::note_typecheck_member_reference_suggestion)
12581           << FixItHint::CreateReplacement(OpLoc, ".");
12582       }
12583     } else
12584       Diag(OpLoc, diag::err_ovl_no_viable_oper)
12585         << "operator->" << Base->getSourceRange();
12586     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
12587     return ExprError();
12588 
12589   case OR_Ambiguous:
12590     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
12591       << "->" << Base->getType() << Base->getSourceRange();
12592     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
12593     return ExprError();
12594 
12595   case OR_Deleted:
12596     Diag(OpLoc,  diag::err_ovl_deleted_oper)
12597       << Best->Function->isDeleted()
12598       << "->"
12599       << getDeletedOrUnavailableSuffix(Best->Function)
12600       << Base->getSourceRange();
12601     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
12602     return ExprError();
12603   }
12604 
12605   CheckMemberOperatorAccess(OpLoc, Base, nullptr, Best->FoundDecl);
12606 
12607   // Convert the object parameter.
12608   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
12609   ExprResult BaseResult =
12610     PerformObjectArgumentInitialization(Base, /*Qualifier=*/nullptr,
12611                                         Best->FoundDecl, Method);
12612   if (BaseResult.isInvalid())
12613     return ExprError();
12614   Base = BaseResult.get();
12615 
12616   // Build the operator call.
12617   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
12618                                             HadMultipleCandidates, OpLoc);
12619   if (FnExpr.isInvalid())
12620     return ExprError();
12621 
12622   QualType ResultTy = Method->getReturnType();
12623   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
12624   ResultTy = ResultTy.getNonLValueExprType(Context);
12625   CXXOperatorCallExpr *TheCall =
12626     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.get(),
12627                                       Base, ResultTy, VK, OpLoc, false);
12628 
12629   if (CheckCallReturnType(Method->getReturnType(), OpLoc, TheCall, Method))
12630           return ExprError();
12631 
12632   return MaybeBindToTemporary(TheCall);
12633 }
12634 
12635 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
12636 /// a literal operator described by the provided lookup results.
12637 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
12638                                           DeclarationNameInfo &SuffixInfo,
12639                                           ArrayRef<Expr*> Args,
12640                                           SourceLocation LitEndLoc,
12641                                        TemplateArgumentListInfo *TemplateArgs) {
12642   SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
12643 
12644   OverloadCandidateSet CandidateSet(UDSuffixLoc,
12645                                     OverloadCandidateSet::CSK_Normal);
12646   AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, TemplateArgs,
12647                         /*SuppressUserConversions=*/true);
12648 
12649   bool HadMultipleCandidates = (CandidateSet.size() > 1);
12650 
12651   // Perform overload resolution. This will usually be trivial, but might need
12652   // to perform substitutions for a literal operator template.
12653   OverloadCandidateSet::iterator Best;
12654   switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
12655   case OR_Success:
12656   case OR_Deleted:
12657     break;
12658 
12659   case OR_No_Viable_Function:
12660     Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
12661       << R.getLookupName();
12662     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
12663     return ExprError();
12664 
12665   case OR_Ambiguous:
12666     Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
12667     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
12668     return ExprError();
12669   }
12670 
12671   FunctionDecl *FD = Best->Function;
12672   ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
12673                                         HadMultipleCandidates,
12674                                         SuffixInfo.getLoc(),
12675                                         SuffixInfo.getInfo());
12676   if (Fn.isInvalid())
12677     return true;
12678 
12679   // Check the argument types. This should almost always be a no-op, except
12680   // that array-to-pointer decay is applied to string literals.
12681   Expr *ConvArgs[2];
12682   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
12683     ExprResult InputInit = PerformCopyInitialization(
12684       InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
12685       SourceLocation(), Args[ArgIdx]);
12686     if (InputInit.isInvalid())
12687       return true;
12688     ConvArgs[ArgIdx] = InputInit.get();
12689   }
12690 
12691   QualType ResultTy = FD->getReturnType();
12692   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
12693   ResultTy = ResultTy.getNonLValueExprType(Context);
12694 
12695   UserDefinedLiteral *UDL =
12696     new (Context) UserDefinedLiteral(Context, Fn.get(),
12697                                      llvm::makeArrayRef(ConvArgs, Args.size()),
12698                                      ResultTy, VK, LitEndLoc, UDSuffixLoc);
12699 
12700   if (CheckCallReturnType(FD->getReturnType(), UDSuffixLoc, UDL, FD))
12701     return ExprError();
12702 
12703   if (CheckFunctionCall(FD, UDL, nullptr))
12704     return ExprError();
12705 
12706   return MaybeBindToTemporary(UDL);
12707 }
12708 
12709 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
12710 /// given LookupResult is non-empty, it is assumed to describe a member which
12711 /// will be invoked. Otherwise, the function will be found via argument
12712 /// dependent lookup.
12713 /// CallExpr is set to a valid expression and FRS_Success returned on success,
12714 /// otherwise CallExpr is set to ExprError() and some non-success value
12715 /// is returned.
12716 Sema::ForRangeStatus
12717 Sema::BuildForRangeBeginEndCall(SourceLocation Loc,
12718                                 SourceLocation RangeLoc,
12719                                 const DeclarationNameInfo &NameInfo,
12720                                 LookupResult &MemberLookup,
12721                                 OverloadCandidateSet *CandidateSet,
12722                                 Expr *Range, ExprResult *CallExpr) {
12723   Scope *S = nullptr;
12724 
12725   CandidateSet->clear();
12726   if (!MemberLookup.empty()) {
12727     ExprResult MemberRef =
12728         BuildMemberReferenceExpr(Range, Range->getType(), Loc,
12729                                  /*IsPtr=*/false, CXXScopeSpec(),
12730                                  /*TemplateKWLoc=*/SourceLocation(),
12731                                  /*FirstQualifierInScope=*/nullptr,
12732                                  MemberLookup,
12733                                  /*TemplateArgs=*/nullptr, S);
12734     if (MemberRef.isInvalid()) {
12735       *CallExpr = ExprError();
12736       return FRS_DiagnosticIssued;
12737     }
12738     *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, None, Loc, nullptr);
12739     if (CallExpr->isInvalid()) {
12740       *CallExpr = ExprError();
12741       return FRS_DiagnosticIssued;
12742     }
12743   } else {
12744     UnresolvedSet<0> FoundNames;
12745     UnresolvedLookupExpr *Fn =
12746       UnresolvedLookupExpr::Create(Context, /*NamingClass=*/nullptr,
12747                                    NestedNameSpecifierLoc(), NameInfo,
12748                                    /*NeedsADL=*/true, /*Overloaded=*/false,
12749                                    FoundNames.begin(), FoundNames.end());
12750 
12751     bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, Range, Loc,
12752                                                     CandidateSet, CallExpr);
12753     if (CandidateSet->empty() || CandidateSetError) {
12754       *CallExpr = ExprError();
12755       return FRS_NoViableFunction;
12756     }
12757     OverloadCandidateSet::iterator Best;
12758     OverloadingResult OverloadResult =
12759         CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
12760 
12761     if (OverloadResult == OR_No_Viable_Function) {
12762       *CallExpr = ExprError();
12763       return FRS_NoViableFunction;
12764     }
12765     *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, Range,
12766                                          Loc, nullptr, CandidateSet, &Best,
12767                                          OverloadResult,
12768                                          /*AllowTypoCorrection=*/false);
12769     if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
12770       *CallExpr = ExprError();
12771       return FRS_DiagnosticIssued;
12772     }
12773   }
12774   return FRS_Success;
12775 }
12776 
12777 
12778 /// FixOverloadedFunctionReference - E is an expression that refers to
12779 /// a C++ overloaded function (possibly with some parentheses and
12780 /// perhaps a '&' around it). We have resolved the overloaded function
12781 /// to the function declaration Fn, so patch up the expression E to
12782 /// refer (possibly indirectly) to Fn. Returns the new expr.
12783 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
12784                                            FunctionDecl *Fn) {
12785   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
12786     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
12787                                                    Found, Fn);
12788     if (SubExpr == PE->getSubExpr())
12789       return PE;
12790 
12791     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
12792   }
12793 
12794   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
12795     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
12796                                                    Found, Fn);
12797     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
12798                                SubExpr->getType()) &&
12799            "Implicit cast type cannot be determined from overload");
12800     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
12801     if (SubExpr == ICE->getSubExpr())
12802       return ICE;
12803 
12804     return ImplicitCastExpr::Create(Context, ICE->getType(),
12805                                     ICE->getCastKind(),
12806                                     SubExpr, nullptr,
12807                                     ICE->getValueKind());
12808   }
12809 
12810   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
12811     assert(UnOp->getOpcode() == UO_AddrOf &&
12812            "Can only take the address of an overloaded function");
12813     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
12814       if (Method->isStatic()) {
12815         // Do nothing: static member functions aren't any different
12816         // from non-member functions.
12817       } else {
12818         // Fix the subexpression, which really has to be an
12819         // UnresolvedLookupExpr holding an overloaded member function
12820         // or template.
12821         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
12822                                                        Found, Fn);
12823         if (SubExpr == UnOp->getSubExpr())
12824           return UnOp;
12825 
12826         assert(isa<DeclRefExpr>(SubExpr)
12827                && "fixed to something other than a decl ref");
12828         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
12829                && "fixed to a member ref with no nested name qualifier");
12830 
12831         // We have taken the address of a pointer to member
12832         // function. Perform the computation here so that we get the
12833         // appropriate pointer to member type.
12834         QualType ClassType
12835           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
12836         QualType MemPtrType
12837           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
12838 
12839         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
12840                                            VK_RValue, OK_Ordinary,
12841                                            UnOp->getOperatorLoc());
12842       }
12843     }
12844     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
12845                                                    Found, Fn);
12846     if (SubExpr == UnOp->getSubExpr())
12847       return UnOp;
12848 
12849     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
12850                                      Context.getPointerType(SubExpr->getType()),
12851                                        VK_RValue, OK_Ordinary,
12852                                        UnOp->getOperatorLoc());
12853   }
12854 
12855   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
12856     // FIXME: avoid copy.
12857     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr;
12858     if (ULE->hasExplicitTemplateArgs()) {
12859       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
12860       TemplateArgs = &TemplateArgsBuffer;
12861     }
12862 
12863     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
12864                                            ULE->getQualifierLoc(),
12865                                            ULE->getTemplateKeywordLoc(),
12866                                            Fn,
12867                                            /*enclosing*/ false, // FIXME?
12868                                            ULE->getNameLoc(),
12869                                            Fn->getType(),
12870                                            VK_LValue,
12871                                            Found.getDecl(),
12872                                            TemplateArgs);
12873     MarkDeclRefReferenced(DRE);
12874     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
12875     return DRE;
12876   }
12877 
12878   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
12879     // FIXME: avoid copy.
12880     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr;
12881     if (MemExpr->hasExplicitTemplateArgs()) {
12882       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
12883       TemplateArgs = &TemplateArgsBuffer;
12884     }
12885 
12886     Expr *Base;
12887 
12888     // If we're filling in a static method where we used to have an
12889     // implicit member access, rewrite to a simple decl ref.
12890     if (MemExpr->isImplicitAccess()) {
12891       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
12892         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
12893                                                MemExpr->getQualifierLoc(),
12894                                                MemExpr->getTemplateKeywordLoc(),
12895                                                Fn,
12896                                                /*enclosing*/ false,
12897                                                MemExpr->getMemberLoc(),
12898                                                Fn->getType(),
12899                                                VK_LValue,
12900                                                Found.getDecl(),
12901                                                TemplateArgs);
12902         MarkDeclRefReferenced(DRE);
12903         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
12904         return DRE;
12905       } else {
12906         SourceLocation Loc = MemExpr->getMemberLoc();
12907         if (MemExpr->getQualifier())
12908           Loc = MemExpr->getQualifierLoc().getBeginLoc();
12909         CheckCXXThisCapture(Loc);
12910         Base = new (Context) CXXThisExpr(Loc,
12911                                          MemExpr->getBaseType(),
12912                                          /*isImplicit=*/true);
12913       }
12914     } else
12915       Base = MemExpr->getBase();
12916 
12917     ExprValueKind valueKind;
12918     QualType type;
12919     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
12920       valueKind = VK_LValue;
12921       type = Fn->getType();
12922     } else {
12923       valueKind = VK_RValue;
12924       type = Context.BoundMemberTy;
12925     }
12926 
12927     MemberExpr *ME = MemberExpr::Create(
12928         Context, Base, MemExpr->isArrow(), MemExpr->getOperatorLoc(),
12929         MemExpr->getQualifierLoc(), MemExpr->getTemplateKeywordLoc(), Fn, Found,
12930         MemExpr->getMemberNameInfo(), TemplateArgs, type, valueKind,
12931         OK_Ordinary);
12932     ME->setHadMultipleCandidates(true);
12933     MarkMemberReferenced(ME);
12934     return ME;
12935   }
12936 
12937   llvm_unreachable("Invalid reference to overloaded function");
12938 }
12939 
12940 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
12941                                                 DeclAccessPair Found,
12942                                                 FunctionDecl *Fn) {
12943   return FixOverloadedFunctionReference(E.get(), Found, Fn);
12944 }
12945