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/PartialDiagnostic.h"
24 #include "clang/Lex/Preprocessor.h"
25 #include "clang/Sema/Initialization.h"
26 #include "clang/Sema/Lookup.h"
27 #include "clang/Sema/SemaInternal.h"
28 #include "clang/Sema/Template.h"
29 #include "clang/Sema/TemplateDeduction.h"
30 #include "llvm/ADT/DenseSet.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include "llvm/ADT/SmallPtrSet.h"
33 #include "llvm/ADT/SmallString.h"
34 #include <algorithm>
35 
36 namespace clang {
37 using namespace sema;
38 
39 /// A convenience routine for creating a decayed reference to a function.
40 static ExprResult
41 CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl,
42                       bool HadMultipleCandidates,
43                       SourceLocation Loc = SourceLocation(),
44                       const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
45   if (S.DiagnoseUseOfDecl(FoundDecl, Loc))
46     return ExprError();
47   // If FoundDecl is different from Fn (such as if one is a template
48   // and the other a specialization), make sure DiagnoseUseOfDecl is
49   // called on both.
50   // FIXME: This would be more comprehensively addressed by modifying
51   // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
52   // being used.
53   if (FoundDecl != Fn && S.DiagnoseUseOfDecl(Fn, Loc))
54     return ExprError();
55   DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
56                                                  VK_LValue, Loc, LocInfo);
57   if (HadMultipleCandidates)
58     DRE->setHadMultipleCandidates(true);
59 
60   S.MarkDeclRefReferenced(DRE);
61 
62   ExprResult E = S.Owned(DRE);
63   E = S.DefaultFunctionArrayConversion(E.take());
64   if (E.isInvalid())
65     return ExprError();
66   return E;
67 }
68 
69 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
70                                  bool InOverloadResolution,
71                                  StandardConversionSequence &SCS,
72                                  bool CStyle,
73                                  bool AllowObjCWritebackConversion);
74 
75 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
76                                                  QualType &ToType,
77                                                  bool InOverloadResolution,
78                                                  StandardConversionSequence &SCS,
79                                                  bool CStyle);
80 static OverloadingResult
81 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
82                         UserDefinedConversionSequence& User,
83                         OverloadCandidateSet& Conversions,
84                         bool AllowExplicit);
85 
86 
87 static ImplicitConversionSequence::CompareKind
88 CompareStandardConversionSequences(Sema &S,
89                                    const StandardConversionSequence& SCS1,
90                                    const StandardConversionSequence& SCS2);
91 
92 static ImplicitConversionSequence::CompareKind
93 CompareQualificationConversions(Sema &S,
94                                 const StandardConversionSequence& SCS1,
95                                 const StandardConversionSequence& SCS2);
96 
97 static ImplicitConversionSequence::CompareKind
98 CompareDerivedToBaseConversions(Sema &S,
99                                 const StandardConversionSequence& SCS1,
100                                 const StandardConversionSequence& SCS2);
101 
102 
103 
104 /// GetConversionCategory - Retrieve the implicit conversion
105 /// category corresponding to the given implicit conversion kind.
106 ImplicitConversionCategory
107 GetConversionCategory(ImplicitConversionKind Kind) {
108   static const ImplicitConversionCategory
109     Category[(int)ICK_Num_Conversion_Kinds] = {
110     ICC_Identity,
111     ICC_Lvalue_Transformation,
112     ICC_Lvalue_Transformation,
113     ICC_Lvalue_Transformation,
114     ICC_Identity,
115     ICC_Qualification_Adjustment,
116     ICC_Promotion,
117     ICC_Promotion,
118     ICC_Promotion,
119     ICC_Conversion,
120     ICC_Conversion,
121     ICC_Conversion,
122     ICC_Conversion,
123     ICC_Conversion,
124     ICC_Conversion,
125     ICC_Conversion,
126     ICC_Conversion,
127     ICC_Conversion,
128     ICC_Conversion,
129     ICC_Conversion,
130     ICC_Conversion,
131     ICC_Conversion
132   };
133   return Category[(int)Kind];
134 }
135 
136 /// GetConversionRank - Retrieve the implicit conversion rank
137 /// corresponding to the given implicit conversion kind.
138 ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
139   static const ImplicitConversionRank
140     Rank[(int)ICK_Num_Conversion_Kinds] = {
141     ICR_Exact_Match,
142     ICR_Exact_Match,
143     ICR_Exact_Match,
144     ICR_Exact_Match,
145     ICR_Exact_Match,
146     ICR_Exact_Match,
147     ICR_Promotion,
148     ICR_Promotion,
149     ICR_Promotion,
150     ICR_Conversion,
151     ICR_Conversion,
152     ICR_Conversion,
153     ICR_Conversion,
154     ICR_Conversion,
155     ICR_Conversion,
156     ICR_Conversion,
157     ICR_Conversion,
158     ICR_Conversion,
159     ICR_Conversion,
160     ICR_Conversion,
161     ICR_Complex_Real_Conversion,
162     ICR_Conversion,
163     ICR_Conversion,
164     ICR_Writeback_Conversion
165   };
166   return Rank[(int)Kind];
167 }
168 
169 /// GetImplicitConversionName - Return the name of this kind of
170 /// implicit conversion.
171 const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
172   static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
173     "No conversion",
174     "Lvalue-to-rvalue",
175     "Array-to-pointer",
176     "Function-to-pointer",
177     "Noreturn adjustment",
178     "Qualification",
179     "Integral promotion",
180     "Floating point promotion",
181     "Complex promotion",
182     "Integral conversion",
183     "Floating conversion",
184     "Complex conversion",
185     "Floating-integral conversion",
186     "Pointer conversion",
187     "Pointer-to-member conversion",
188     "Boolean conversion",
189     "Compatible-types conversion",
190     "Derived-to-base conversion",
191     "Vector conversion",
192     "Vector splat",
193     "Complex-real conversion",
194     "Block Pointer conversion",
195     "Transparent Union Conversion"
196     "Writeback conversion"
197   };
198   return Name[Kind];
199 }
200 
201 /// StandardConversionSequence - Set the standard conversion
202 /// sequence to the identity conversion.
203 void StandardConversionSequence::setAsIdentityConversion() {
204   First = ICK_Identity;
205   Second = ICK_Identity;
206   Third = ICK_Identity;
207   DeprecatedStringLiteralToCharPtr = false;
208   QualificationIncludesObjCLifetime = false;
209   ReferenceBinding = false;
210   DirectBinding = false;
211   IsLvalueReference = true;
212   BindsToFunctionLvalue = false;
213   BindsToRvalue = false;
214   BindsImplicitObjectArgumentWithoutRefQualifier = false;
215   ObjCLifetimeConversionBinding = false;
216   CopyConstructor = 0;
217 }
218 
219 /// getRank - Retrieve the rank of this standard conversion sequence
220 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
221 /// implicit conversions.
222 ImplicitConversionRank StandardConversionSequence::getRank() const {
223   ImplicitConversionRank Rank = ICR_Exact_Match;
224   if  (GetConversionRank(First) > Rank)
225     Rank = GetConversionRank(First);
226   if  (GetConversionRank(Second) > Rank)
227     Rank = GetConversionRank(Second);
228   if  (GetConversionRank(Third) > Rank)
229     Rank = GetConversionRank(Third);
230   return Rank;
231 }
232 
233 /// isPointerConversionToBool - Determines whether this conversion is
234 /// a conversion of a pointer or pointer-to-member to bool. This is
235 /// used as part of the ranking of standard conversion sequences
236 /// (C++ 13.3.3.2p4).
237 bool StandardConversionSequence::isPointerConversionToBool() const {
238   // Note that FromType has not necessarily been transformed by the
239   // array-to-pointer or function-to-pointer implicit conversions, so
240   // check for their presence as well as checking whether FromType is
241   // a pointer.
242   if (getToType(1)->isBooleanType() &&
243       (getFromType()->isPointerType() ||
244        getFromType()->isObjCObjectPointerType() ||
245        getFromType()->isBlockPointerType() ||
246        getFromType()->isNullPtrType() ||
247        First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
248     return true;
249 
250   return false;
251 }
252 
253 /// isPointerConversionToVoidPointer - Determines whether this
254 /// conversion is a conversion of a pointer to a void pointer. This is
255 /// used as part of the ranking of standard conversion sequences (C++
256 /// 13.3.3.2p4).
257 bool
258 StandardConversionSequence::
259 isPointerConversionToVoidPointer(ASTContext& Context) const {
260   QualType FromType = getFromType();
261   QualType ToType = getToType(1);
262 
263   // Note that FromType has not necessarily been transformed by the
264   // array-to-pointer implicit conversion, so check for its presence
265   // and redo the conversion to get a pointer.
266   if (First == ICK_Array_To_Pointer)
267     FromType = Context.getArrayDecayedType(FromType);
268 
269   if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
270     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
271       return ToPtrType->getPointeeType()->isVoidType();
272 
273   return false;
274 }
275 
276 /// Skip any implicit casts which could be either part of a narrowing conversion
277 /// or after one in an implicit conversion.
278 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
279   while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
280     switch (ICE->getCastKind()) {
281     case CK_NoOp:
282     case CK_IntegralCast:
283     case CK_IntegralToBoolean:
284     case CK_IntegralToFloating:
285     case CK_FloatingToIntegral:
286     case CK_FloatingToBoolean:
287     case CK_FloatingCast:
288       Converted = ICE->getSubExpr();
289       continue;
290 
291     default:
292       return Converted;
293     }
294   }
295 
296   return Converted;
297 }
298 
299 /// Check if this standard conversion sequence represents a narrowing
300 /// conversion, according to C++11 [dcl.init.list]p7.
301 ///
302 /// \param Ctx  The AST context.
303 /// \param Converted  The result of applying this standard conversion sequence.
304 /// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
305 ///        value of the expression prior to the narrowing conversion.
306 /// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
307 ///        type of the expression prior to the narrowing conversion.
308 NarrowingKind
309 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
310                                              const Expr *Converted,
311                                              APValue &ConstantValue,
312                                              QualType &ConstantType) const {
313   assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
314 
315   // C++11 [dcl.init.list]p7:
316   //   A narrowing conversion is an implicit conversion ...
317   QualType FromType = getToType(0);
318   QualType ToType = getToType(1);
319   switch (Second) {
320   // -- from a floating-point type to an integer type, or
321   //
322   // -- from an integer type or unscoped enumeration type to a floating-point
323   //    type, except where the source is a constant expression and the actual
324   //    value after conversion will fit into the target type and will produce
325   //    the original value when converted back to the original type, or
326   case ICK_Floating_Integral:
327     if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
328       return NK_Type_Narrowing;
329     } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
330       llvm::APSInt IntConstantValue;
331       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
332       if (Initializer &&
333           Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
334         // Convert the integer to the floating type.
335         llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
336         Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
337                                 llvm::APFloat::rmNearestTiesToEven);
338         // And back.
339         llvm::APSInt ConvertedValue = IntConstantValue;
340         bool ignored;
341         Result.convertToInteger(ConvertedValue,
342                                 llvm::APFloat::rmTowardZero, &ignored);
343         // If the resulting value is different, this was a narrowing conversion.
344         if (IntConstantValue != ConvertedValue) {
345           ConstantValue = APValue(IntConstantValue);
346           ConstantType = Initializer->getType();
347           return NK_Constant_Narrowing;
348         }
349       } else {
350         // Variables are always narrowings.
351         return NK_Variable_Narrowing;
352       }
353     }
354     return NK_Not_Narrowing;
355 
356   // -- from long double to double or float, or from double to float, except
357   //    where the source is a constant expression and the actual value after
358   //    conversion is within the range of values that can be represented (even
359   //    if it cannot be represented exactly), or
360   case ICK_Floating_Conversion:
361     if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
362         Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
363       // FromType is larger than ToType.
364       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
365       if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
366         // Constant!
367         assert(ConstantValue.isFloat());
368         llvm::APFloat FloatVal = ConstantValue.getFloat();
369         // Convert the source value into the target type.
370         bool ignored;
371         llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
372           Ctx.getFloatTypeSemantics(ToType),
373           llvm::APFloat::rmNearestTiesToEven, &ignored);
374         // If there was no overflow, the source value is within the range of
375         // values that can be represented.
376         if (ConvertStatus & llvm::APFloat::opOverflow) {
377           ConstantType = Initializer->getType();
378           return NK_Constant_Narrowing;
379         }
380       } else {
381         return NK_Variable_Narrowing;
382       }
383     }
384     return NK_Not_Narrowing;
385 
386   // -- from an integer type or unscoped enumeration type to an integer type
387   //    that cannot represent all the values of the original type, except where
388   //    the source is a constant expression and the actual value after
389   //    conversion will fit into the target type and will produce the original
390   //    value when converted back to the original type.
391   case ICK_Boolean_Conversion:  // Bools are integers too.
392     if (!FromType->isIntegralOrUnscopedEnumerationType()) {
393       // Boolean conversions can be from pointers and pointers to members
394       // [conv.bool], and those aren't considered narrowing conversions.
395       return NK_Not_Narrowing;
396     }  // Otherwise, fall through to the integral case.
397   case ICK_Integral_Conversion: {
398     assert(FromType->isIntegralOrUnscopedEnumerationType());
399     assert(ToType->isIntegralOrUnscopedEnumerationType());
400     const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
401     const unsigned FromWidth = Ctx.getIntWidth(FromType);
402     const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
403     const unsigned ToWidth = Ctx.getIntWidth(ToType);
404 
405     if (FromWidth > ToWidth ||
406         (FromWidth == ToWidth && FromSigned != ToSigned) ||
407         (FromSigned && !ToSigned)) {
408       // Not all values of FromType can be represented in ToType.
409       llvm::APSInt InitializerValue;
410       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
411       if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
412         // Such conversions on variables are always narrowing.
413         return NK_Variable_Narrowing;
414       }
415       bool Narrowing = false;
416       if (FromWidth < ToWidth) {
417         // Negative -> unsigned is narrowing. Otherwise, more bits is never
418         // narrowing.
419         if (InitializerValue.isSigned() && InitializerValue.isNegative())
420           Narrowing = true;
421       } else {
422         // Add a bit to the InitializerValue so we don't have to worry about
423         // signed vs. unsigned comparisons.
424         InitializerValue = InitializerValue.extend(
425           InitializerValue.getBitWidth() + 1);
426         // Convert the initializer to and from the target width and signed-ness.
427         llvm::APSInt ConvertedValue = InitializerValue;
428         ConvertedValue = ConvertedValue.trunc(ToWidth);
429         ConvertedValue.setIsSigned(ToSigned);
430         ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
431         ConvertedValue.setIsSigned(InitializerValue.isSigned());
432         // If the result is different, this was a narrowing conversion.
433         if (ConvertedValue != InitializerValue)
434           Narrowing = true;
435       }
436       if (Narrowing) {
437         ConstantType = Initializer->getType();
438         ConstantValue = APValue(InitializerValue);
439         return NK_Constant_Narrowing;
440       }
441     }
442     return NK_Not_Narrowing;
443   }
444 
445   default:
446     // Other kinds of conversions are not narrowings.
447     return NK_Not_Narrowing;
448   }
449 }
450 
451 /// DebugPrint - Print this standard conversion sequence to standard
452 /// error. Useful for debugging overloading issues.
453 void StandardConversionSequence::DebugPrint() const {
454   raw_ostream &OS = llvm::errs();
455   bool PrintedSomething = false;
456   if (First != ICK_Identity) {
457     OS << GetImplicitConversionName(First);
458     PrintedSomething = true;
459   }
460 
461   if (Second != ICK_Identity) {
462     if (PrintedSomething) {
463       OS << " -> ";
464     }
465     OS << GetImplicitConversionName(Second);
466 
467     if (CopyConstructor) {
468       OS << " (by copy constructor)";
469     } else if (DirectBinding) {
470       OS << " (direct reference binding)";
471     } else if (ReferenceBinding) {
472       OS << " (reference binding)";
473     }
474     PrintedSomething = true;
475   }
476 
477   if (Third != ICK_Identity) {
478     if (PrintedSomething) {
479       OS << " -> ";
480     }
481     OS << GetImplicitConversionName(Third);
482     PrintedSomething = true;
483   }
484 
485   if (!PrintedSomething) {
486     OS << "No conversions required";
487   }
488 }
489 
490 /// DebugPrint - Print this user-defined conversion sequence to standard
491 /// error. Useful for debugging overloading issues.
492 void UserDefinedConversionSequence::DebugPrint() const {
493   raw_ostream &OS = llvm::errs();
494   if (Before.First || Before.Second || Before.Third) {
495     Before.DebugPrint();
496     OS << " -> ";
497   }
498   if (ConversionFunction)
499     OS << '\'' << *ConversionFunction << '\'';
500   else
501     OS << "aggregate initialization";
502   if (After.First || After.Second || After.Third) {
503     OS << " -> ";
504     After.DebugPrint();
505   }
506 }
507 
508 /// DebugPrint - Print this implicit conversion sequence to standard
509 /// error. Useful for debugging overloading issues.
510 void ImplicitConversionSequence::DebugPrint() const {
511   raw_ostream &OS = llvm::errs();
512   switch (ConversionKind) {
513   case StandardConversion:
514     OS << "Standard conversion: ";
515     Standard.DebugPrint();
516     break;
517   case UserDefinedConversion:
518     OS << "User-defined conversion: ";
519     UserDefined.DebugPrint();
520     break;
521   case EllipsisConversion:
522     OS << "Ellipsis conversion";
523     break;
524   case AmbiguousConversion:
525     OS << "Ambiguous conversion";
526     break;
527   case BadConversion:
528     OS << "Bad conversion";
529     break;
530   }
531 
532   OS << "\n";
533 }
534 
535 void AmbiguousConversionSequence::construct() {
536   new (&conversions()) ConversionSet();
537 }
538 
539 void AmbiguousConversionSequence::destruct() {
540   conversions().~ConversionSet();
541 }
542 
543 void
544 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
545   FromTypePtr = O.FromTypePtr;
546   ToTypePtr = O.ToTypePtr;
547   new (&conversions()) ConversionSet(O.conversions());
548 }
549 
550 namespace {
551   // Structure used by DeductionFailureInfo to store
552   // template argument information.
553   struct DFIArguments {
554     TemplateArgument FirstArg;
555     TemplateArgument SecondArg;
556   };
557   // Structure used by DeductionFailureInfo to store
558   // template parameter and template argument information.
559   struct DFIParamWithArguments : DFIArguments {
560     TemplateParameter Param;
561   };
562 }
563 
564 /// \brief Convert from Sema's representation of template deduction information
565 /// to the form used in overload-candidate information.
566 DeductionFailureInfo MakeDeductionFailureInfo(ASTContext &Context,
567                                               Sema::TemplateDeductionResult TDK,
568                                               TemplateDeductionInfo &Info) {
569   DeductionFailureInfo Result;
570   Result.Result = static_cast<unsigned>(TDK);
571   Result.HasDiagnostic = false;
572   Result.Data = 0;
573   switch (TDK) {
574   case Sema::TDK_Success:
575   case Sema::TDK_Invalid:
576   case Sema::TDK_InstantiationDepth:
577   case Sema::TDK_TooManyArguments:
578   case Sema::TDK_TooFewArguments:
579     break;
580 
581   case Sema::TDK_Incomplete:
582   case Sema::TDK_InvalidExplicitArguments:
583     Result.Data = Info.Param.getOpaqueValue();
584     break;
585 
586   case Sema::TDK_NonDeducedMismatch: {
587     // FIXME: Should allocate from normal heap so that we can free this later.
588     DFIArguments *Saved = new (Context) DFIArguments;
589     Saved->FirstArg = Info.FirstArg;
590     Saved->SecondArg = Info.SecondArg;
591     Result.Data = Saved;
592     break;
593   }
594 
595   case Sema::TDK_Inconsistent:
596   case Sema::TDK_Underqualified: {
597     // FIXME: Should allocate from normal heap so that we can free this later.
598     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
599     Saved->Param = Info.Param;
600     Saved->FirstArg = Info.FirstArg;
601     Saved->SecondArg = Info.SecondArg;
602     Result.Data = Saved;
603     break;
604   }
605 
606   case Sema::TDK_SubstitutionFailure:
607     Result.Data = Info.take();
608     if (Info.hasSFINAEDiagnostic()) {
609       PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
610           SourceLocation(), PartialDiagnostic::NullDiagnostic());
611       Info.takeSFINAEDiagnostic(*Diag);
612       Result.HasDiagnostic = true;
613     }
614     break;
615 
616   case Sema::TDK_FailedOverloadResolution:
617     Result.Data = Info.Expression;
618     break;
619 
620   case Sema::TDK_MiscellaneousDeductionFailure:
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_NonDeducedMismatch:
642     // FIXME: Destroy the data?
643     Data = 0;
644     break;
645 
646   case Sema::TDK_SubstitutionFailure:
647     // FIXME: Destroy the template argument list?
648     Data = 0;
649     if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
650       Diag->~PartialDiagnosticAt();
651       HasDiagnostic = false;
652     }
653     break;
654 
655   // Unhandled
656   case Sema::TDK_MiscellaneousDeductionFailure:
657     break;
658   }
659 }
660 
661 PartialDiagnosticAt *DeductionFailureInfo::getSFINAEDiagnostic() {
662   if (HasDiagnostic)
663     return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
664   return 0;
665 }
666 
667 TemplateParameter DeductionFailureInfo::getTemplateParameter() {
668   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
669   case Sema::TDK_Success:
670   case Sema::TDK_Invalid:
671   case Sema::TDK_InstantiationDepth:
672   case Sema::TDK_TooManyArguments:
673   case Sema::TDK_TooFewArguments:
674   case Sema::TDK_SubstitutionFailure:
675   case Sema::TDK_NonDeducedMismatch:
676   case Sema::TDK_FailedOverloadResolution:
677     return TemplateParameter();
678 
679   case Sema::TDK_Incomplete:
680   case Sema::TDK_InvalidExplicitArguments:
681     return TemplateParameter::getFromOpaqueValue(Data);
682 
683   case Sema::TDK_Inconsistent:
684   case Sema::TDK_Underqualified:
685     return static_cast<DFIParamWithArguments*>(Data)->Param;
686 
687   // Unhandled
688   case Sema::TDK_MiscellaneousDeductionFailure:
689     break;
690   }
691 
692   return TemplateParameter();
693 }
694 
695 TemplateArgumentList *DeductionFailureInfo::getTemplateArgumentList() {
696   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
697   case Sema::TDK_Success:
698   case Sema::TDK_Invalid:
699   case Sema::TDK_InstantiationDepth:
700   case Sema::TDK_TooManyArguments:
701   case Sema::TDK_TooFewArguments:
702   case Sema::TDK_Incomplete:
703   case Sema::TDK_InvalidExplicitArguments:
704   case Sema::TDK_Inconsistent:
705   case Sema::TDK_Underqualified:
706   case Sema::TDK_NonDeducedMismatch:
707   case Sema::TDK_FailedOverloadResolution:
708     return 0;
709 
710   case Sema::TDK_SubstitutionFailure:
711     return static_cast<TemplateArgumentList*>(Data);
712 
713   // Unhandled
714   case Sema::TDK_MiscellaneousDeductionFailure:
715     break;
716   }
717 
718   return 0;
719 }
720 
721 const TemplateArgument *DeductionFailureInfo::getFirstArg() {
722   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
723   case Sema::TDK_Success:
724   case Sema::TDK_Invalid:
725   case Sema::TDK_InstantiationDepth:
726   case Sema::TDK_Incomplete:
727   case Sema::TDK_TooManyArguments:
728   case Sema::TDK_TooFewArguments:
729   case Sema::TDK_InvalidExplicitArguments:
730   case Sema::TDK_SubstitutionFailure:
731   case Sema::TDK_FailedOverloadResolution:
732     return 0;
733 
734   case Sema::TDK_Inconsistent:
735   case Sema::TDK_Underqualified:
736   case Sema::TDK_NonDeducedMismatch:
737     return &static_cast<DFIArguments*>(Data)->FirstArg;
738 
739   // Unhandled
740   case Sema::TDK_MiscellaneousDeductionFailure:
741     break;
742   }
743 
744   return 0;
745 }
746 
747 const TemplateArgument *DeductionFailureInfo::getSecondArg() {
748   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
749   case Sema::TDK_Success:
750   case Sema::TDK_Invalid:
751   case Sema::TDK_InstantiationDepth:
752   case Sema::TDK_Incomplete:
753   case Sema::TDK_TooManyArguments:
754   case Sema::TDK_TooFewArguments:
755   case Sema::TDK_InvalidExplicitArguments:
756   case Sema::TDK_SubstitutionFailure:
757   case Sema::TDK_FailedOverloadResolution:
758     return 0;
759 
760   case Sema::TDK_Inconsistent:
761   case Sema::TDK_Underqualified:
762   case Sema::TDK_NonDeducedMismatch:
763     return &static_cast<DFIArguments*>(Data)->SecondArg;
764 
765   // Unhandled
766   case Sema::TDK_MiscellaneousDeductionFailure:
767     break;
768   }
769 
770   return 0;
771 }
772 
773 Expr *DeductionFailureInfo::getExpr() {
774   if (static_cast<Sema::TemplateDeductionResult>(Result) ==
775         Sema::TDK_FailedOverloadResolution)
776     return static_cast<Expr*>(Data);
777 
778   return 0;
779 }
780 
781 void OverloadCandidateSet::destroyCandidates() {
782   for (iterator i = begin(), e = end(); i != e; ++i) {
783     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
784       i->Conversions[ii].~ImplicitConversionSequence();
785     if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
786       i->DeductionFailure.Destroy();
787   }
788 }
789 
790 void OverloadCandidateSet::clear() {
791   destroyCandidates();
792   NumInlineSequences = 0;
793   Candidates.clear();
794   Functions.clear();
795 }
796 
797 namespace {
798   class UnbridgedCastsSet {
799     struct Entry {
800       Expr **Addr;
801       Expr *Saved;
802     };
803     SmallVector<Entry, 2> Entries;
804 
805   public:
806     void save(Sema &S, Expr *&E) {
807       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
808       Entry entry = { &E, E };
809       Entries.push_back(entry);
810       E = S.stripARCUnbridgedCast(E);
811     }
812 
813     void restore() {
814       for (SmallVectorImpl<Entry>::iterator
815              i = Entries.begin(), e = Entries.end(); i != e; ++i)
816         *i->Addr = i->Saved;
817     }
818   };
819 }
820 
821 /// checkPlaceholderForOverload - Do any interesting placeholder-like
822 /// preprocessing on the given expression.
823 ///
824 /// \param unbridgedCasts a collection to which to add unbridged casts;
825 ///   without this, they will be immediately diagnosed as errors
826 ///
827 /// Return true on unrecoverable error.
828 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
829                                         UnbridgedCastsSet *unbridgedCasts = 0) {
830   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
831     // We can't handle overloaded expressions here because overload
832     // resolution might reasonably tweak them.
833     if (placeholder->getKind() == BuiltinType::Overload) return false;
834 
835     // If the context potentially accepts unbridged ARC casts, strip
836     // the unbridged cast and add it to the collection for later restoration.
837     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
838         unbridgedCasts) {
839       unbridgedCasts->save(S, E);
840       return false;
841     }
842 
843     // Go ahead and check everything else.
844     ExprResult result = S.CheckPlaceholderExpr(E);
845     if (result.isInvalid())
846       return true;
847 
848     E = result.take();
849     return false;
850   }
851 
852   // Nothing to do.
853   return false;
854 }
855 
856 /// checkArgPlaceholdersForOverload - Check a set of call operands for
857 /// placeholders.
858 static bool checkArgPlaceholdersForOverload(Sema &S,
859                                             MultiExprArg Args,
860                                             UnbridgedCastsSet &unbridged) {
861   for (unsigned i = 0, e = Args.size(); i != e; ++i)
862     if (checkPlaceholderForOverload(S, Args[i], &unbridged))
863       return true;
864 
865   return false;
866 }
867 
868 // IsOverload - Determine whether the given New declaration is an
869 // overload of the declarations in Old. This routine returns false if
870 // New and Old cannot be overloaded, e.g., if New has the same
871 // signature as some function in Old (C++ 1.3.10) or if the Old
872 // declarations aren't functions (or function templates) at all. When
873 // it does return false, MatchedDecl will point to the decl that New
874 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
875 // top of the underlying declaration.
876 //
877 // Example: Given the following input:
878 //
879 //   void f(int, float); // #1
880 //   void f(int, int); // #2
881 //   int f(int, int); // #3
882 //
883 // When we process #1, there is no previous declaration of "f",
884 // so IsOverload will not be used.
885 //
886 // When we process #2, Old contains only the FunctionDecl for #1.  By
887 // comparing the parameter types, we see that #1 and #2 are overloaded
888 // (since they have different signatures), so this routine returns
889 // false; MatchedDecl is unchanged.
890 //
891 // When we process #3, Old is an overload set containing #1 and #2. We
892 // compare the signatures of #3 to #1 (they're overloaded, so we do
893 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
894 // identical (return types of functions are not part of the
895 // signature), IsOverload returns false and MatchedDecl will be set to
896 // point to the FunctionDecl for #2.
897 //
898 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
899 // into a class by a using declaration.  The rules for whether to hide
900 // shadow declarations ignore some properties which otherwise figure
901 // into a function template's signature.
902 Sema::OverloadKind
903 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
904                     NamedDecl *&Match, bool NewIsUsingDecl) {
905   for (LookupResult::iterator I = Old.begin(), E = Old.end();
906          I != E; ++I) {
907     NamedDecl *OldD = *I;
908 
909     bool OldIsUsingDecl = false;
910     if (isa<UsingShadowDecl>(OldD)) {
911       OldIsUsingDecl = true;
912 
913       // We can always introduce two using declarations into the same
914       // context, even if they have identical signatures.
915       if (NewIsUsingDecl) continue;
916 
917       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
918     }
919 
920     // If either declaration was introduced by a using declaration,
921     // we'll need to use slightly different rules for matching.
922     // Essentially, these rules are the normal rules, except that
923     // function templates hide function templates with different
924     // return types or template parameter lists.
925     bool UseMemberUsingDeclRules =
926       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
927       !New->getFriendObjectKind();
928 
929     if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
930       if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
931         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
932           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
933           continue;
934         }
935 
936         Match = *I;
937         return Ovl_Match;
938       }
939     } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
940       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
941         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
942           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
943           continue;
944         }
945 
946         if (!shouldLinkPossiblyHiddenDecl(*I, New))
947           continue;
948 
949         Match = *I;
950         return Ovl_Match;
951       }
952     } else if (isa<UsingDecl>(OldD)) {
953       // We can overload with these, which can show up when doing
954       // redeclaration checks for UsingDecls.
955       assert(Old.getLookupKind() == LookupUsingDeclName);
956     } else if (isa<TagDecl>(OldD)) {
957       // We can always overload with tags by hiding them.
958     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
959       // Optimistically assume that an unresolved using decl will
960       // overload; if it doesn't, we'll have to diagnose during
961       // template instantiation.
962     } else {
963       // (C++ 13p1):
964       //   Only function declarations can be overloaded; object and type
965       //   declarations cannot be overloaded.
966       Match = *I;
967       return Ovl_NonFunction;
968     }
969   }
970 
971   return Ovl_Overload;
972 }
973 
974 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
975                       bool UseUsingDeclRules) {
976   // C++ [basic.start.main]p2: This function shall not be overloaded.
977   if (New->isMain())
978     return false;
979 
980   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
981   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
982 
983   // C++ [temp.fct]p2:
984   //   A function template can be overloaded with other function templates
985   //   and with normal (non-template) functions.
986   if ((OldTemplate == 0) != (NewTemplate == 0))
987     return true;
988 
989   // Is the function New an overload of the function Old?
990   QualType OldQType = Context.getCanonicalType(Old->getType());
991   QualType NewQType = Context.getCanonicalType(New->getType());
992 
993   // Compare the signatures (C++ 1.3.10) of the two functions to
994   // determine whether they are overloads. If we find any mismatch
995   // in the signature, they are overloads.
996 
997   // If either of these functions is a K&R-style function (no
998   // prototype), then we consider them to have matching signatures.
999   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
1000       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
1001     return false;
1002 
1003   const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
1004   const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
1005 
1006   // The signature of a function includes the types of its
1007   // parameters (C++ 1.3.10), which includes the presence or absence
1008   // of the ellipsis; see C++ DR 357).
1009   if (OldQType != NewQType &&
1010       (OldType->getNumArgs() != NewType->getNumArgs() ||
1011        OldType->isVariadic() != NewType->isVariadic() ||
1012        !FunctionArgTypesAreEqual(OldType, NewType)))
1013     return true;
1014 
1015   // C++ [temp.over.link]p4:
1016   //   The signature of a function template consists of its function
1017   //   signature, its return type and its template parameter list. The names
1018   //   of the template parameters are significant only for establishing the
1019   //   relationship between the template parameters and the rest of the
1020   //   signature.
1021   //
1022   // We check the return type and template parameter lists for function
1023   // templates first; the remaining checks follow.
1024   //
1025   // However, we don't consider either of these when deciding whether
1026   // a member introduced by a shadow declaration is hidden.
1027   if (!UseUsingDeclRules && NewTemplate &&
1028       (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
1029                                        OldTemplate->getTemplateParameters(),
1030                                        false, TPL_TemplateMatch) ||
1031        OldType->getResultType() != NewType->getResultType()))
1032     return true;
1033 
1034   // If the function is a class member, its signature includes the
1035   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
1036   //
1037   // As part of this, also check whether one of the member functions
1038   // is static, in which case they are not overloads (C++
1039   // 13.1p2). While not part of the definition of the signature,
1040   // this check is important to determine whether these functions
1041   // can be overloaded.
1042   CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
1043   CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
1044   if (OldMethod && NewMethod &&
1045       !OldMethod->isStatic() && !NewMethod->isStatic()) {
1046     if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
1047       if (!UseUsingDeclRules &&
1048           (OldMethod->getRefQualifier() == RQ_None ||
1049            NewMethod->getRefQualifier() == RQ_None)) {
1050         // C++0x [over.load]p2:
1051         //   - Member function declarations with the same name and the same
1052         //     parameter-type-list as well as member function template
1053         //     declarations with the same name, the same parameter-type-list, and
1054         //     the same template parameter lists cannot be overloaded if any of
1055         //     them, but not all, have a ref-qualifier (8.3.5).
1056         Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1057           << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1058         Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1059       }
1060       return true;
1061     }
1062 
1063     // We may not have applied the implicit const for a constexpr member
1064     // function yet (because we haven't yet resolved whether this is a static
1065     // or non-static member function). Add it now, on the assumption that this
1066     // is a redeclaration of OldMethod.
1067     unsigned NewQuals = NewMethod->getTypeQualifiers();
1068     if (!getLangOpts().CPlusPlus1y && NewMethod->isConstexpr() &&
1069         !isa<CXXConstructorDecl>(NewMethod))
1070       NewQuals |= Qualifiers::Const;
1071     if (OldMethod->getTypeQualifiers() != NewQuals)
1072       return true;
1073   }
1074 
1075   // The signatures match; this is not an overload.
1076   return false;
1077 }
1078 
1079 /// \brief Checks availability of the function depending on the current
1080 /// function context. Inside an unavailable function, unavailability is ignored.
1081 ///
1082 /// \returns true if \arg FD is unavailable and current context is inside
1083 /// an available function, false otherwise.
1084 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1085   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1086 }
1087 
1088 /// \brief Tries a user-defined conversion from From to ToType.
1089 ///
1090 /// Produces an implicit conversion sequence for when a standard conversion
1091 /// is not an option. See TryImplicitConversion for more information.
1092 static ImplicitConversionSequence
1093 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1094                          bool SuppressUserConversions,
1095                          bool AllowExplicit,
1096                          bool InOverloadResolution,
1097                          bool CStyle,
1098                          bool AllowObjCWritebackConversion) {
1099   ImplicitConversionSequence ICS;
1100 
1101   if (SuppressUserConversions) {
1102     // We're not in the case above, so there is no conversion that
1103     // we can perform.
1104     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1105     return ICS;
1106   }
1107 
1108   // Attempt user-defined conversion.
1109   OverloadCandidateSet Conversions(From->getExprLoc());
1110   OverloadingResult UserDefResult
1111     = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1112                               AllowExplicit);
1113 
1114   if (UserDefResult == OR_Success) {
1115     ICS.setUserDefined();
1116     // C++ [over.ics.user]p4:
1117     //   A conversion of an expression of class type to the same class
1118     //   type is given Exact Match rank, and a conversion of an
1119     //   expression of class type to a base class of that type is
1120     //   given Conversion rank, in spite of the fact that a copy
1121     //   constructor (i.e., a user-defined conversion function) is
1122     //   called for those cases.
1123     if (CXXConstructorDecl *Constructor
1124           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1125       QualType FromCanon
1126         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1127       QualType ToCanon
1128         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1129       if (Constructor->isCopyConstructor() &&
1130           (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1131         // Turn this into a "standard" conversion sequence, so that it
1132         // gets ranked with standard conversion sequences.
1133         ICS.setStandard();
1134         ICS.Standard.setAsIdentityConversion();
1135         ICS.Standard.setFromType(From->getType());
1136         ICS.Standard.setAllToTypes(ToType);
1137         ICS.Standard.CopyConstructor = Constructor;
1138         if (ToCanon != FromCanon)
1139           ICS.Standard.Second = ICK_Derived_To_Base;
1140       }
1141     }
1142 
1143     // C++ [over.best.ics]p4:
1144     //   However, when considering the argument of a user-defined
1145     //   conversion function that is a candidate by 13.3.1.3 when
1146     //   invoked for the copying of the temporary in the second step
1147     //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1148     //   13.3.1.6 in all cases, only standard conversion sequences and
1149     //   ellipsis conversion sequences are allowed.
1150     if (SuppressUserConversions && ICS.isUserDefined()) {
1151       ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1152     }
1153   } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1154     ICS.setAmbiguous();
1155     ICS.Ambiguous.setFromType(From->getType());
1156     ICS.Ambiguous.setToType(ToType);
1157     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1158          Cand != Conversions.end(); ++Cand)
1159       if (Cand->Viable)
1160         ICS.Ambiguous.addConversion(Cand->Function);
1161   } else {
1162     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1163   }
1164 
1165   return ICS;
1166 }
1167 
1168 /// TryImplicitConversion - Attempt to perform an implicit conversion
1169 /// from the given expression (Expr) to the given type (ToType). This
1170 /// function returns an implicit conversion sequence that can be used
1171 /// to perform the initialization. Given
1172 ///
1173 ///   void f(float f);
1174 ///   void g(int i) { f(i); }
1175 ///
1176 /// this routine would produce an implicit conversion sequence to
1177 /// describe the initialization of f from i, which will be a standard
1178 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1179 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1180 //
1181 /// Note that this routine only determines how the conversion can be
1182 /// performed; it does not actually perform the conversion. As such,
1183 /// it will not produce any diagnostics if no conversion is available,
1184 /// but will instead return an implicit conversion sequence of kind
1185 /// "BadConversion".
1186 ///
1187 /// If @p SuppressUserConversions, then user-defined conversions are
1188 /// not permitted.
1189 /// If @p AllowExplicit, then explicit user-defined conversions are
1190 /// permitted.
1191 ///
1192 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1193 /// writeback conversion, which allows __autoreleasing id* parameters to
1194 /// be initialized with __strong id* or __weak id* arguments.
1195 static ImplicitConversionSequence
1196 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1197                       bool SuppressUserConversions,
1198                       bool AllowExplicit,
1199                       bool InOverloadResolution,
1200                       bool CStyle,
1201                       bool AllowObjCWritebackConversion) {
1202   ImplicitConversionSequence ICS;
1203   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1204                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1205     ICS.setStandard();
1206     return ICS;
1207   }
1208 
1209   if (!S.getLangOpts().CPlusPlus) {
1210     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1211     return ICS;
1212   }
1213 
1214   // C++ [over.ics.user]p4:
1215   //   A conversion of an expression of class type to the same class
1216   //   type is given Exact Match rank, and a conversion of an
1217   //   expression of class type to a base class of that type is
1218   //   given Conversion rank, in spite of the fact that a copy/move
1219   //   constructor (i.e., a user-defined conversion function) is
1220   //   called for those cases.
1221   QualType FromType = From->getType();
1222   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1223       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1224        S.IsDerivedFrom(FromType, ToType))) {
1225     ICS.setStandard();
1226     ICS.Standard.setAsIdentityConversion();
1227     ICS.Standard.setFromType(FromType);
1228     ICS.Standard.setAllToTypes(ToType);
1229 
1230     // We don't actually check at this point whether there is a valid
1231     // copy/move constructor, since overloading just assumes that it
1232     // exists. When we actually perform initialization, we'll find the
1233     // appropriate constructor to copy the returned object, if needed.
1234     ICS.Standard.CopyConstructor = 0;
1235 
1236     // Determine whether this is considered a derived-to-base conversion.
1237     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1238       ICS.Standard.Second = ICK_Derived_To_Base;
1239 
1240     return ICS;
1241   }
1242 
1243   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1244                                   AllowExplicit, InOverloadResolution, CStyle,
1245                                   AllowObjCWritebackConversion);
1246 }
1247 
1248 ImplicitConversionSequence
1249 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1250                             bool SuppressUserConversions,
1251                             bool AllowExplicit,
1252                             bool InOverloadResolution,
1253                             bool CStyle,
1254                             bool AllowObjCWritebackConversion) {
1255   return clang::TryImplicitConversion(*this, From, ToType,
1256                                       SuppressUserConversions, AllowExplicit,
1257                                       InOverloadResolution, CStyle,
1258                                       AllowObjCWritebackConversion);
1259 }
1260 
1261 /// PerformImplicitConversion - Perform an implicit conversion of the
1262 /// expression From to the type ToType. Returns the
1263 /// converted expression. Flavor is the kind of conversion we're
1264 /// performing, used in the error message. If @p AllowExplicit,
1265 /// explicit user-defined conversions are permitted.
1266 ExprResult
1267 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1268                                 AssignmentAction Action, bool AllowExplicit) {
1269   ImplicitConversionSequence ICS;
1270   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1271 }
1272 
1273 ExprResult
1274 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1275                                 AssignmentAction Action, bool AllowExplicit,
1276                                 ImplicitConversionSequence& ICS) {
1277   if (checkPlaceholderForOverload(*this, From))
1278     return ExprError();
1279 
1280   // Objective-C ARC: Determine whether we will allow the writeback conversion.
1281   bool AllowObjCWritebackConversion
1282     = getLangOpts().ObjCAutoRefCount &&
1283       (Action == AA_Passing || Action == AA_Sending);
1284 
1285   ICS = clang::TryImplicitConversion(*this, From, ToType,
1286                                      /*SuppressUserConversions=*/false,
1287                                      AllowExplicit,
1288                                      /*InOverloadResolution=*/false,
1289                                      /*CStyle=*/false,
1290                                      AllowObjCWritebackConversion);
1291   return PerformImplicitConversion(From, ToType, ICS, Action);
1292 }
1293 
1294 /// \brief Determine whether the conversion from FromType to ToType is a valid
1295 /// conversion that strips "noreturn" off the nested function type.
1296 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1297                                 QualType &ResultTy) {
1298   if (Context.hasSameUnqualifiedType(FromType, ToType))
1299     return false;
1300 
1301   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1302   // where F adds one of the following at most once:
1303   //   - a pointer
1304   //   - a member pointer
1305   //   - a block pointer
1306   CanQualType CanTo = Context.getCanonicalType(ToType);
1307   CanQualType CanFrom = Context.getCanonicalType(FromType);
1308   Type::TypeClass TyClass = CanTo->getTypeClass();
1309   if (TyClass != CanFrom->getTypeClass()) return false;
1310   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1311     if (TyClass == Type::Pointer) {
1312       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1313       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1314     } else if (TyClass == Type::BlockPointer) {
1315       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1316       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1317     } else if (TyClass == Type::MemberPointer) {
1318       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1319       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1320     } else {
1321       return false;
1322     }
1323 
1324     TyClass = CanTo->getTypeClass();
1325     if (TyClass != CanFrom->getTypeClass()) return false;
1326     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1327       return false;
1328   }
1329 
1330   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1331   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1332   if (!EInfo.getNoReturn()) return false;
1333 
1334   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1335   assert(QualType(FromFn, 0).isCanonical());
1336   if (QualType(FromFn, 0) != CanTo) return false;
1337 
1338   ResultTy = ToType;
1339   return true;
1340 }
1341 
1342 /// \brief Determine whether the conversion from FromType to ToType is a valid
1343 /// vector conversion.
1344 ///
1345 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1346 /// conversion.
1347 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1348                                QualType ToType, ImplicitConversionKind &ICK) {
1349   // We need at least one of these types to be a vector type to have a vector
1350   // conversion.
1351   if (!ToType->isVectorType() && !FromType->isVectorType())
1352     return false;
1353 
1354   // Identical types require no conversions.
1355   if (Context.hasSameUnqualifiedType(FromType, ToType))
1356     return false;
1357 
1358   // There are no conversions between extended vector types, only identity.
1359   if (ToType->isExtVectorType()) {
1360     // There are no conversions between extended vector types other than the
1361     // identity conversion.
1362     if (FromType->isExtVectorType())
1363       return false;
1364 
1365     // Vector splat from any arithmetic type to a vector.
1366     if (FromType->isArithmeticType()) {
1367       ICK = ICK_Vector_Splat;
1368       return true;
1369     }
1370   }
1371 
1372   // We can perform the conversion between vector types in the following cases:
1373   // 1)vector types are equivalent AltiVec and GCC vector types
1374   // 2)lax vector conversions are permitted and the vector types are of the
1375   //   same size
1376   if (ToType->isVectorType() && FromType->isVectorType()) {
1377     if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1378         (Context.getLangOpts().LaxVectorConversions &&
1379          (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1380       ICK = ICK_Vector_Conversion;
1381       return true;
1382     }
1383   }
1384 
1385   return false;
1386 }
1387 
1388 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1389                                 bool InOverloadResolution,
1390                                 StandardConversionSequence &SCS,
1391                                 bool CStyle);
1392 
1393 /// IsStandardConversion - Determines whether there is a standard
1394 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1395 /// expression From to the type ToType. Standard conversion sequences
1396 /// only consider non-class types; for conversions that involve class
1397 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1398 /// contain the standard conversion sequence required to perform this
1399 /// conversion and this routine will return true. Otherwise, this
1400 /// routine will return false and the value of SCS is unspecified.
1401 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1402                                  bool InOverloadResolution,
1403                                  StandardConversionSequence &SCS,
1404                                  bool CStyle,
1405                                  bool AllowObjCWritebackConversion) {
1406   QualType FromType = From->getType();
1407 
1408   // Standard conversions (C++ [conv])
1409   SCS.setAsIdentityConversion();
1410   SCS.DeprecatedStringLiteralToCharPtr = false;
1411   SCS.IncompatibleObjC = false;
1412   SCS.setFromType(FromType);
1413   SCS.CopyConstructor = 0;
1414 
1415   // There are no standard conversions for class types in C++, so
1416   // abort early. When overloading in C, however, we do permit
1417   if (FromType->isRecordType() || ToType->isRecordType()) {
1418     if (S.getLangOpts().CPlusPlus)
1419       return false;
1420 
1421     // When we're overloading in C, we allow, as standard conversions,
1422   }
1423 
1424   // The first conversion can be an lvalue-to-rvalue conversion,
1425   // array-to-pointer conversion, or function-to-pointer conversion
1426   // (C++ 4p1).
1427 
1428   if (FromType == S.Context.OverloadTy) {
1429     DeclAccessPair AccessPair;
1430     if (FunctionDecl *Fn
1431           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1432                                                  AccessPair)) {
1433       // We were able to resolve the address of the overloaded function,
1434       // so we can convert to the type of that function.
1435       FromType = Fn->getType();
1436 
1437       // we can sometimes resolve &foo<int> regardless of ToType, so check
1438       // if the type matches (identity) or we are converting to bool
1439       if (!S.Context.hasSameUnqualifiedType(
1440                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1441         QualType resultTy;
1442         // if the function type matches except for [[noreturn]], it's ok
1443         if (!S.IsNoReturnConversion(FromType,
1444               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1445           // otherwise, only a boolean conversion is standard
1446           if (!ToType->isBooleanType())
1447             return false;
1448       }
1449 
1450       // Check if the "from" expression is taking the address of an overloaded
1451       // function and recompute the FromType accordingly. Take advantage of the
1452       // fact that non-static member functions *must* have such an address-of
1453       // expression.
1454       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1455       if (Method && !Method->isStatic()) {
1456         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1457                "Non-unary operator on non-static member address");
1458         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1459                == UO_AddrOf &&
1460                "Non-address-of operator on non-static member address");
1461         const Type *ClassType
1462           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1463         FromType = S.Context.getMemberPointerType(FromType, ClassType);
1464       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1465         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1466                UO_AddrOf &&
1467                "Non-address-of operator for overloaded function expression");
1468         FromType = S.Context.getPointerType(FromType);
1469       }
1470 
1471       // Check that we've computed the proper type after overload resolution.
1472       assert(S.Context.hasSameType(
1473         FromType,
1474         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1475     } else {
1476       return false;
1477     }
1478   }
1479   // Lvalue-to-rvalue conversion (C++11 4.1):
1480   //   A glvalue (3.10) of a non-function, non-array type T can
1481   //   be converted to a prvalue.
1482   bool argIsLValue = From->isGLValue();
1483   if (argIsLValue &&
1484       !FromType->isFunctionType() && !FromType->isArrayType() &&
1485       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1486     SCS.First = ICK_Lvalue_To_Rvalue;
1487 
1488     // C11 6.3.2.1p2:
1489     //   ... if the lvalue has atomic type, the value has the non-atomic version
1490     //   of the type of the lvalue ...
1491     if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1492       FromType = Atomic->getValueType();
1493 
1494     // If T is a non-class type, the type of the rvalue is the
1495     // cv-unqualified version of T. Otherwise, the type of the rvalue
1496     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1497     // just strip the qualifiers because they don't matter.
1498     FromType = FromType.getUnqualifiedType();
1499   } else if (FromType->isArrayType()) {
1500     // Array-to-pointer conversion (C++ 4.2)
1501     SCS.First = ICK_Array_To_Pointer;
1502 
1503     // An lvalue or rvalue of type "array of N T" or "array of unknown
1504     // bound of T" can be converted to an rvalue of type "pointer to
1505     // T" (C++ 4.2p1).
1506     FromType = S.Context.getArrayDecayedType(FromType);
1507 
1508     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1509       // This conversion is deprecated. (C++ D.4).
1510       SCS.DeprecatedStringLiteralToCharPtr = true;
1511 
1512       // For the purpose of ranking in overload resolution
1513       // (13.3.3.1.1), this conversion is considered an
1514       // array-to-pointer conversion followed by a qualification
1515       // conversion (4.4). (C++ 4.2p2)
1516       SCS.Second = ICK_Identity;
1517       SCS.Third = ICK_Qualification;
1518       SCS.QualificationIncludesObjCLifetime = false;
1519       SCS.setAllToTypes(FromType);
1520       return true;
1521     }
1522   } else if (FromType->isFunctionType() && argIsLValue) {
1523     // Function-to-pointer conversion (C++ 4.3).
1524     SCS.First = ICK_Function_To_Pointer;
1525 
1526     // An lvalue of function type T can be converted to an rvalue of
1527     // type "pointer to T." The result is a pointer to the
1528     // function. (C++ 4.3p1).
1529     FromType = S.Context.getPointerType(FromType);
1530   } else {
1531     // We don't require any conversions for the first step.
1532     SCS.First = ICK_Identity;
1533   }
1534   SCS.setToType(0, FromType);
1535 
1536   // The second conversion can be an integral promotion, floating
1537   // point promotion, integral conversion, floating point conversion,
1538   // floating-integral conversion, pointer conversion,
1539   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1540   // For overloading in C, this can also be a "compatible-type"
1541   // conversion.
1542   bool IncompatibleObjC = false;
1543   ImplicitConversionKind SecondICK = ICK_Identity;
1544   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1545     // The unqualified versions of the types are the same: there's no
1546     // conversion to do.
1547     SCS.Second = ICK_Identity;
1548   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1549     // Integral promotion (C++ 4.5).
1550     SCS.Second = ICK_Integral_Promotion;
1551     FromType = ToType.getUnqualifiedType();
1552   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1553     // Floating point promotion (C++ 4.6).
1554     SCS.Second = ICK_Floating_Promotion;
1555     FromType = ToType.getUnqualifiedType();
1556   } else if (S.IsComplexPromotion(FromType, ToType)) {
1557     // Complex promotion (Clang extension)
1558     SCS.Second = ICK_Complex_Promotion;
1559     FromType = ToType.getUnqualifiedType();
1560   } else if (ToType->isBooleanType() &&
1561              (FromType->isArithmeticType() ||
1562               FromType->isAnyPointerType() ||
1563               FromType->isBlockPointerType() ||
1564               FromType->isMemberPointerType() ||
1565               FromType->isNullPtrType())) {
1566     // Boolean conversions (C++ 4.12).
1567     SCS.Second = ICK_Boolean_Conversion;
1568     FromType = S.Context.BoolTy;
1569   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1570              ToType->isIntegralType(S.Context)) {
1571     // Integral conversions (C++ 4.7).
1572     SCS.Second = ICK_Integral_Conversion;
1573     FromType = ToType.getUnqualifiedType();
1574   } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) {
1575     // Complex conversions (C99 6.3.1.6)
1576     SCS.Second = ICK_Complex_Conversion;
1577     FromType = ToType.getUnqualifiedType();
1578   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1579              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1580     // Complex-real conversions (C99 6.3.1.7)
1581     SCS.Second = ICK_Complex_Real;
1582     FromType = ToType.getUnqualifiedType();
1583   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1584     // Floating point conversions (C++ 4.8).
1585     SCS.Second = ICK_Floating_Conversion;
1586     FromType = ToType.getUnqualifiedType();
1587   } else if ((FromType->isRealFloatingType() &&
1588               ToType->isIntegralType(S.Context)) ||
1589              (FromType->isIntegralOrUnscopedEnumerationType() &&
1590               ToType->isRealFloatingType())) {
1591     // Floating-integral conversions (C++ 4.9).
1592     SCS.Second = ICK_Floating_Integral;
1593     FromType = ToType.getUnqualifiedType();
1594   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1595     SCS.Second = ICK_Block_Pointer_Conversion;
1596   } else if (AllowObjCWritebackConversion &&
1597              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1598     SCS.Second = ICK_Writeback_Conversion;
1599   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1600                                    FromType, IncompatibleObjC)) {
1601     // Pointer conversions (C++ 4.10).
1602     SCS.Second = ICK_Pointer_Conversion;
1603     SCS.IncompatibleObjC = IncompatibleObjC;
1604     FromType = FromType.getUnqualifiedType();
1605   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1606                                          InOverloadResolution, FromType)) {
1607     // Pointer to member conversions (4.11).
1608     SCS.Second = ICK_Pointer_Member;
1609   } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1610     SCS.Second = SecondICK;
1611     FromType = ToType.getUnqualifiedType();
1612   } else if (!S.getLangOpts().CPlusPlus &&
1613              S.Context.typesAreCompatible(ToType, FromType)) {
1614     // Compatible conversions (Clang extension for C function overloading)
1615     SCS.Second = ICK_Compatible_Conversion;
1616     FromType = ToType.getUnqualifiedType();
1617   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1618     // Treat a conversion that strips "noreturn" as an identity conversion.
1619     SCS.Second = ICK_NoReturn_Adjustment;
1620   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1621                                              InOverloadResolution,
1622                                              SCS, CStyle)) {
1623     SCS.Second = ICK_TransparentUnionConversion;
1624     FromType = ToType;
1625   } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1626                                  CStyle)) {
1627     // tryAtomicConversion has updated the standard conversion sequence
1628     // appropriately.
1629     return true;
1630   } else if (ToType->isEventT() &&
1631              From->isIntegerConstantExpr(S.getASTContext()) &&
1632              (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
1633     SCS.Second = ICK_Zero_Event_Conversion;
1634     FromType = ToType;
1635   } else {
1636     // No second conversion required.
1637     SCS.Second = ICK_Identity;
1638   }
1639   SCS.setToType(1, FromType);
1640 
1641   QualType CanonFrom;
1642   QualType CanonTo;
1643   // The third conversion can be a qualification conversion (C++ 4p1).
1644   bool ObjCLifetimeConversion;
1645   if (S.IsQualificationConversion(FromType, ToType, CStyle,
1646                                   ObjCLifetimeConversion)) {
1647     SCS.Third = ICK_Qualification;
1648     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1649     FromType = ToType;
1650     CanonFrom = S.Context.getCanonicalType(FromType);
1651     CanonTo = S.Context.getCanonicalType(ToType);
1652   } else {
1653     // No conversion required
1654     SCS.Third = ICK_Identity;
1655 
1656     // C++ [over.best.ics]p6:
1657     //   [...] Any difference in top-level cv-qualification is
1658     //   subsumed by the initialization itself and does not constitute
1659     //   a conversion. [...]
1660     CanonFrom = S.Context.getCanonicalType(FromType);
1661     CanonTo = S.Context.getCanonicalType(ToType);
1662     if (CanonFrom.getLocalUnqualifiedType()
1663                                        == CanonTo.getLocalUnqualifiedType() &&
1664         CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
1665       FromType = ToType;
1666       CanonFrom = CanonTo;
1667     }
1668   }
1669   SCS.setToType(2, FromType);
1670 
1671   // If we have not converted the argument type to the parameter type,
1672   // this is a bad conversion sequence.
1673   if (CanonFrom != CanonTo)
1674     return false;
1675 
1676   return true;
1677 }
1678 
1679 static bool
1680 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1681                                      QualType &ToType,
1682                                      bool InOverloadResolution,
1683                                      StandardConversionSequence &SCS,
1684                                      bool CStyle) {
1685 
1686   const RecordType *UT = ToType->getAsUnionType();
1687   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1688     return false;
1689   // The field to initialize within the transparent union.
1690   RecordDecl *UD = UT->getDecl();
1691   // It's compatible if the expression matches any of the fields.
1692   for (RecordDecl::field_iterator it = UD->field_begin(),
1693        itend = UD->field_end();
1694        it != itend; ++it) {
1695     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1696                              CStyle, /*ObjCWritebackConversion=*/false)) {
1697       ToType = it->getType();
1698       return true;
1699     }
1700   }
1701   return false;
1702 }
1703 
1704 /// IsIntegralPromotion - Determines whether the conversion from the
1705 /// expression From (whose potentially-adjusted type is FromType) to
1706 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1707 /// sets PromotedType to the promoted type.
1708 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1709   const BuiltinType *To = ToType->getAs<BuiltinType>();
1710   // All integers are built-in.
1711   if (!To) {
1712     return false;
1713   }
1714 
1715   // An rvalue of type char, signed char, unsigned char, short int, or
1716   // unsigned short int can be converted to an rvalue of type int if
1717   // int can represent all the values of the source type; otherwise,
1718   // the source rvalue can be converted to an rvalue of type unsigned
1719   // int (C++ 4.5p1).
1720   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1721       !FromType->isEnumeralType()) {
1722     if (// We can promote any signed, promotable integer type to an int
1723         (FromType->isSignedIntegerType() ||
1724          // We can promote any unsigned integer type whose size is
1725          // less than int to an int.
1726          (!FromType->isSignedIntegerType() &&
1727           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1728       return To->getKind() == BuiltinType::Int;
1729     }
1730 
1731     return To->getKind() == BuiltinType::UInt;
1732   }
1733 
1734   // C++11 [conv.prom]p3:
1735   //   A prvalue of an unscoped enumeration type whose underlying type is not
1736   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1737   //   following types that can represent all the values of the enumeration
1738   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1739   //   unsigned int, long int, unsigned long int, long long int, or unsigned
1740   //   long long int. If none of the types in that list can represent all the
1741   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1742   //   type can be converted to an rvalue a prvalue of the extended integer type
1743   //   with lowest integer conversion rank (4.13) greater than the rank of long
1744   //   long in which all the values of the enumeration can be represented. If
1745   //   there are two such extended types, the signed one is chosen.
1746   // C++11 [conv.prom]p4:
1747   //   A prvalue of an unscoped enumeration type whose underlying type is fixed
1748   //   can be converted to a prvalue of its underlying type. Moreover, if
1749   //   integral promotion can be applied to its underlying type, a prvalue of an
1750   //   unscoped enumeration type whose underlying type is fixed can also be
1751   //   converted to a prvalue of the promoted underlying type.
1752   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1753     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1754     // provided for a scoped enumeration.
1755     if (FromEnumType->getDecl()->isScoped())
1756       return false;
1757 
1758     // We can perform an integral promotion to the underlying type of the enum,
1759     // even if that's not the promoted type.
1760     if (FromEnumType->getDecl()->isFixed()) {
1761       QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1762       return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1763              IsIntegralPromotion(From, Underlying, ToType);
1764     }
1765 
1766     // We have already pre-calculated the promotion type, so this is trivial.
1767     if (ToType->isIntegerType() &&
1768         !RequireCompleteType(From->getLocStart(), FromType, 0))
1769       return Context.hasSameUnqualifiedType(ToType,
1770                                 FromEnumType->getDecl()->getPromotionType());
1771   }
1772 
1773   // C++0x [conv.prom]p2:
1774   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1775   //   to an rvalue a prvalue of the first of the following types that can
1776   //   represent all the values of its underlying type: int, unsigned int,
1777   //   long int, unsigned long int, long long int, or unsigned long long int.
1778   //   If none of the types in that list can represent all the values of its
1779   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1780   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1781   //   type.
1782   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1783       ToType->isIntegerType()) {
1784     // Determine whether the type we're converting from is signed or
1785     // unsigned.
1786     bool FromIsSigned = FromType->isSignedIntegerType();
1787     uint64_t FromSize = Context.getTypeSize(FromType);
1788 
1789     // The types we'll try to promote to, in the appropriate
1790     // order. Try each of these types.
1791     QualType PromoteTypes[6] = {
1792       Context.IntTy, Context.UnsignedIntTy,
1793       Context.LongTy, Context.UnsignedLongTy ,
1794       Context.LongLongTy, Context.UnsignedLongLongTy
1795     };
1796     for (int Idx = 0; Idx < 6; ++Idx) {
1797       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1798       if (FromSize < ToSize ||
1799           (FromSize == ToSize &&
1800            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1801         // We found the type that we can promote to. If this is the
1802         // type we wanted, we have a promotion. Otherwise, no
1803         // promotion.
1804         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1805       }
1806     }
1807   }
1808 
1809   // An rvalue for an integral bit-field (9.6) can be converted to an
1810   // rvalue of type int if int can represent all the values of the
1811   // bit-field; otherwise, it can be converted to unsigned int if
1812   // unsigned int can represent all the values of the bit-field. If
1813   // the bit-field is larger yet, no integral promotion applies to
1814   // it. If the bit-field has an enumerated type, it is treated as any
1815   // other value of that type for promotion purposes (C++ 4.5p3).
1816   // FIXME: We should delay checking of bit-fields until we actually perform the
1817   // conversion.
1818   using llvm::APSInt;
1819   if (From)
1820     if (FieldDecl *MemberDecl = From->getSourceBitField()) {
1821       APSInt BitWidth;
1822       if (FromType->isIntegralType(Context) &&
1823           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1824         APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1825         ToSize = Context.getTypeSize(ToType);
1826 
1827         // Are we promoting to an int from a bitfield that fits in an int?
1828         if (BitWidth < ToSize ||
1829             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1830           return To->getKind() == BuiltinType::Int;
1831         }
1832 
1833         // Are we promoting to an unsigned int from an unsigned bitfield
1834         // that fits into an unsigned int?
1835         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1836           return To->getKind() == BuiltinType::UInt;
1837         }
1838 
1839         return false;
1840       }
1841     }
1842 
1843   // An rvalue of type bool can be converted to an rvalue of type int,
1844   // with false becoming zero and true becoming one (C++ 4.5p4).
1845   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1846     return true;
1847   }
1848 
1849   return false;
1850 }
1851 
1852 /// IsFloatingPointPromotion - Determines whether the conversion from
1853 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1854 /// returns true and sets PromotedType to the promoted type.
1855 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1856   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1857     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1858       /// An rvalue of type float can be converted to an rvalue of type
1859       /// double. (C++ 4.6p1).
1860       if (FromBuiltin->getKind() == BuiltinType::Float &&
1861           ToBuiltin->getKind() == BuiltinType::Double)
1862         return true;
1863 
1864       // C99 6.3.1.5p1:
1865       //   When a float is promoted to double or long double, or a
1866       //   double is promoted to long double [...].
1867       if (!getLangOpts().CPlusPlus &&
1868           (FromBuiltin->getKind() == BuiltinType::Float ||
1869            FromBuiltin->getKind() == BuiltinType::Double) &&
1870           (ToBuiltin->getKind() == BuiltinType::LongDouble))
1871         return true;
1872 
1873       // Half can be promoted to float.
1874       if (!getLangOpts().NativeHalfType &&
1875            FromBuiltin->getKind() == BuiltinType::Half &&
1876           ToBuiltin->getKind() == BuiltinType::Float)
1877         return true;
1878     }
1879 
1880   return false;
1881 }
1882 
1883 /// \brief Determine if a conversion is a complex promotion.
1884 ///
1885 /// A complex promotion is defined as a complex -> complex conversion
1886 /// where the conversion between the underlying real types is a
1887 /// floating-point or integral promotion.
1888 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1889   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1890   if (!FromComplex)
1891     return false;
1892 
1893   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1894   if (!ToComplex)
1895     return false;
1896 
1897   return IsFloatingPointPromotion(FromComplex->getElementType(),
1898                                   ToComplex->getElementType()) ||
1899     IsIntegralPromotion(0, FromComplex->getElementType(),
1900                         ToComplex->getElementType());
1901 }
1902 
1903 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1904 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1905 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1906 /// if non-empty, will be a pointer to ToType that may or may not have
1907 /// the right set of qualifiers on its pointee.
1908 ///
1909 static QualType
1910 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1911                                    QualType ToPointee, QualType ToType,
1912                                    ASTContext &Context,
1913                                    bool StripObjCLifetime = false) {
1914   assert((FromPtr->getTypeClass() == Type::Pointer ||
1915           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1916          "Invalid similarly-qualified pointer type");
1917 
1918   /// Conversions to 'id' subsume cv-qualifier conversions.
1919   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1920     return ToType.getUnqualifiedType();
1921 
1922   QualType CanonFromPointee
1923     = Context.getCanonicalType(FromPtr->getPointeeType());
1924   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1925   Qualifiers Quals = CanonFromPointee.getQualifiers();
1926 
1927   if (StripObjCLifetime)
1928     Quals.removeObjCLifetime();
1929 
1930   // Exact qualifier match -> return the pointer type we're converting to.
1931   if (CanonToPointee.getLocalQualifiers() == Quals) {
1932     // ToType is exactly what we need. Return it.
1933     if (!ToType.isNull())
1934       return ToType.getUnqualifiedType();
1935 
1936     // Build a pointer to ToPointee. It has the right qualifiers
1937     // already.
1938     if (isa<ObjCObjectPointerType>(ToType))
1939       return Context.getObjCObjectPointerType(ToPointee);
1940     return Context.getPointerType(ToPointee);
1941   }
1942 
1943   // Just build a canonical type that has the right qualifiers.
1944   QualType QualifiedCanonToPointee
1945     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1946 
1947   if (isa<ObjCObjectPointerType>(ToType))
1948     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1949   return Context.getPointerType(QualifiedCanonToPointee);
1950 }
1951 
1952 static bool isNullPointerConstantForConversion(Expr *Expr,
1953                                                bool InOverloadResolution,
1954                                                ASTContext &Context) {
1955   // Handle value-dependent integral null pointer constants correctly.
1956   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1957   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1958       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1959     return !InOverloadResolution;
1960 
1961   return Expr->isNullPointerConstant(Context,
1962                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1963                                         : Expr::NPC_ValueDependentIsNull);
1964 }
1965 
1966 /// IsPointerConversion - Determines whether the conversion of the
1967 /// expression From, which has the (possibly adjusted) type FromType,
1968 /// can be converted to the type ToType via a pointer conversion (C++
1969 /// 4.10). If so, returns true and places the converted type (that
1970 /// might differ from ToType in its cv-qualifiers at some level) into
1971 /// ConvertedType.
1972 ///
1973 /// This routine also supports conversions to and from block pointers
1974 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
1975 /// pointers to interfaces. FIXME: Once we've determined the
1976 /// appropriate overloading rules for Objective-C, we may want to
1977 /// split the Objective-C checks into a different routine; however,
1978 /// GCC seems to consider all of these conversions to be pointer
1979 /// conversions, so for now they live here. IncompatibleObjC will be
1980 /// set if the conversion is an allowed Objective-C conversion that
1981 /// should result in a warning.
1982 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
1983                                bool InOverloadResolution,
1984                                QualType& ConvertedType,
1985                                bool &IncompatibleObjC) {
1986   IncompatibleObjC = false;
1987   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
1988                               IncompatibleObjC))
1989     return true;
1990 
1991   // Conversion from a null pointer constant to any Objective-C pointer type.
1992   if (ToType->isObjCObjectPointerType() &&
1993       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1994     ConvertedType = ToType;
1995     return true;
1996   }
1997 
1998   // Blocks: Block pointers can be converted to void*.
1999   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
2000       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
2001     ConvertedType = ToType;
2002     return true;
2003   }
2004   // Blocks: A null pointer constant can be converted to a block
2005   // pointer type.
2006   if (ToType->isBlockPointerType() &&
2007       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2008     ConvertedType = ToType;
2009     return true;
2010   }
2011 
2012   // If the left-hand-side is nullptr_t, the right side can be a null
2013   // pointer constant.
2014   if (ToType->isNullPtrType() &&
2015       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2016     ConvertedType = ToType;
2017     return true;
2018   }
2019 
2020   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
2021   if (!ToTypePtr)
2022     return false;
2023 
2024   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
2025   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2026     ConvertedType = ToType;
2027     return true;
2028   }
2029 
2030   // Beyond this point, both types need to be pointers
2031   // , including objective-c pointers.
2032   QualType ToPointeeType = ToTypePtr->getPointeeType();
2033   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
2034       !getLangOpts().ObjCAutoRefCount) {
2035     ConvertedType = BuildSimilarlyQualifiedPointerType(
2036                                       FromType->getAs<ObjCObjectPointerType>(),
2037                                                        ToPointeeType,
2038                                                        ToType, Context);
2039     return true;
2040   }
2041   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
2042   if (!FromTypePtr)
2043     return false;
2044 
2045   QualType FromPointeeType = FromTypePtr->getPointeeType();
2046 
2047   // If the unqualified pointee types are the same, this can't be a
2048   // pointer conversion, so don't do all of the work below.
2049   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
2050     return false;
2051 
2052   // An rvalue of type "pointer to cv T," where T is an object type,
2053   // can be converted to an rvalue of type "pointer to cv void" (C++
2054   // 4.10p2).
2055   if (FromPointeeType->isIncompleteOrObjectType() &&
2056       ToPointeeType->isVoidType()) {
2057     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2058                                                        ToPointeeType,
2059                                                        ToType, Context,
2060                                                    /*StripObjCLifetime=*/true);
2061     return true;
2062   }
2063 
2064   // MSVC allows implicit function to void* type conversion.
2065   if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
2066       ToPointeeType->isVoidType()) {
2067     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2068                                                        ToPointeeType,
2069                                                        ToType, Context);
2070     return true;
2071   }
2072 
2073   // When we're overloading in C, we allow a special kind of pointer
2074   // conversion for compatible-but-not-identical pointee types.
2075   if (!getLangOpts().CPlusPlus &&
2076       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2077     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2078                                                        ToPointeeType,
2079                                                        ToType, Context);
2080     return true;
2081   }
2082 
2083   // C++ [conv.ptr]p3:
2084   //
2085   //   An rvalue of type "pointer to cv D," where D is a class type,
2086   //   can be converted to an rvalue of type "pointer to cv B," where
2087   //   B is a base class (clause 10) of D. If B is an inaccessible
2088   //   (clause 11) or ambiguous (10.2) base class of D, a program that
2089   //   necessitates this conversion is ill-formed. The result of the
2090   //   conversion is a pointer to the base class sub-object of the
2091   //   derived class object. The null pointer value is converted to
2092   //   the null pointer value of the destination type.
2093   //
2094   // Note that we do not check for ambiguity or inaccessibility
2095   // here. That is handled by CheckPointerConversion.
2096   if (getLangOpts().CPlusPlus &&
2097       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2098       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2099       !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2100       IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2101     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2102                                                        ToPointeeType,
2103                                                        ToType, Context);
2104     return true;
2105   }
2106 
2107   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2108       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2109     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2110                                                        ToPointeeType,
2111                                                        ToType, Context);
2112     return true;
2113   }
2114 
2115   return false;
2116 }
2117 
2118 /// \brief Adopt the given qualifiers for the given type.
2119 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2120   Qualifiers TQs = T.getQualifiers();
2121 
2122   // Check whether qualifiers already match.
2123   if (TQs == Qs)
2124     return T;
2125 
2126   if (Qs.compatiblyIncludes(TQs))
2127     return Context.getQualifiedType(T, Qs);
2128 
2129   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2130 }
2131 
2132 /// isObjCPointerConversion - Determines whether this is an
2133 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2134 /// with the same arguments and return values.
2135 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2136                                    QualType& ConvertedType,
2137                                    bool &IncompatibleObjC) {
2138   if (!getLangOpts().ObjC1)
2139     return false;
2140 
2141   // The set of qualifiers on the type we're converting from.
2142   Qualifiers FromQualifiers = FromType.getQualifiers();
2143 
2144   // First, we handle all conversions on ObjC object pointer types.
2145   const ObjCObjectPointerType* ToObjCPtr =
2146     ToType->getAs<ObjCObjectPointerType>();
2147   const ObjCObjectPointerType *FromObjCPtr =
2148     FromType->getAs<ObjCObjectPointerType>();
2149 
2150   if (ToObjCPtr && FromObjCPtr) {
2151     // If the pointee types are the same (ignoring qualifications),
2152     // then this is not a pointer conversion.
2153     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2154                                        FromObjCPtr->getPointeeType()))
2155       return false;
2156 
2157     // Check for compatible
2158     // Objective C++: We're able to convert between "id" or "Class" and a
2159     // pointer to any interface (in both directions).
2160     if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2161       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2162       return true;
2163     }
2164     // Conversions with Objective-C's id<...>.
2165     if ((FromObjCPtr->isObjCQualifiedIdType() ||
2166          ToObjCPtr->isObjCQualifiedIdType()) &&
2167         Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2168                                                   /*compare=*/false)) {
2169       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2170       return true;
2171     }
2172     // Objective C++: We're able to convert from a pointer to an
2173     // interface to a pointer to a different interface.
2174     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2175       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2176       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2177       if (getLangOpts().CPlusPlus && LHS && RHS &&
2178           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2179                                                 FromObjCPtr->getPointeeType()))
2180         return false;
2181       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2182                                                    ToObjCPtr->getPointeeType(),
2183                                                          ToType, Context);
2184       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2185       return true;
2186     }
2187 
2188     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2189       // Okay: this is some kind of implicit downcast of Objective-C
2190       // interfaces, which is permitted. However, we're going to
2191       // complain about it.
2192       IncompatibleObjC = true;
2193       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2194                                                    ToObjCPtr->getPointeeType(),
2195                                                          ToType, Context);
2196       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2197       return true;
2198     }
2199   }
2200   // Beyond this point, both types need to be C pointers or block pointers.
2201   QualType ToPointeeType;
2202   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2203     ToPointeeType = ToCPtr->getPointeeType();
2204   else if (const BlockPointerType *ToBlockPtr =
2205             ToType->getAs<BlockPointerType>()) {
2206     // Objective C++: We're able to convert from a pointer to any object
2207     // to a block pointer type.
2208     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2209       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2210       return true;
2211     }
2212     ToPointeeType = ToBlockPtr->getPointeeType();
2213   }
2214   else if (FromType->getAs<BlockPointerType>() &&
2215            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2216     // Objective C++: We're able to convert from a block pointer type to a
2217     // pointer to any object.
2218     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2219     return true;
2220   }
2221   else
2222     return false;
2223 
2224   QualType FromPointeeType;
2225   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2226     FromPointeeType = FromCPtr->getPointeeType();
2227   else if (const BlockPointerType *FromBlockPtr =
2228            FromType->getAs<BlockPointerType>())
2229     FromPointeeType = FromBlockPtr->getPointeeType();
2230   else
2231     return false;
2232 
2233   // If we have pointers to pointers, recursively check whether this
2234   // is an Objective-C conversion.
2235   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2236       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2237                               IncompatibleObjC)) {
2238     // We always complain about this conversion.
2239     IncompatibleObjC = true;
2240     ConvertedType = Context.getPointerType(ConvertedType);
2241     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2242     return true;
2243   }
2244   // Allow conversion of pointee being objective-c pointer to another one;
2245   // as in I* to id.
2246   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2247       ToPointeeType->getAs<ObjCObjectPointerType>() &&
2248       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2249                               IncompatibleObjC)) {
2250 
2251     ConvertedType = Context.getPointerType(ConvertedType);
2252     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2253     return true;
2254   }
2255 
2256   // If we have pointers to functions or blocks, check whether the only
2257   // differences in the argument and result types are in Objective-C
2258   // pointer conversions. If so, we permit the conversion (but
2259   // complain about it).
2260   const FunctionProtoType *FromFunctionType
2261     = FromPointeeType->getAs<FunctionProtoType>();
2262   const FunctionProtoType *ToFunctionType
2263     = ToPointeeType->getAs<FunctionProtoType>();
2264   if (FromFunctionType && ToFunctionType) {
2265     // If the function types are exactly the same, this isn't an
2266     // Objective-C pointer conversion.
2267     if (Context.getCanonicalType(FromPointeeType)
2268           == Context.getCanonicalType(ToPointeeType))
2269       return false;
2270 
2271     // Perform the quick checks that will tell us whether these
2272     // function types are obviously different.
2273     if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2274         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2275         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2276       return false;
2277 
2278     bool HasObjCConversion = false;
2279     if (Context.getCanonicalType(FromFunctionType->getResultType())
2280           == Context.getCanonicalType(ToFunctionType->getResultType())) {
2281       // Okay, the types match exactly. Nothing to do.
2282     } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2283                                        ToFunctionType->getResultType(),
2284                                        ConvertedType, IncompatibleObjC)) {
2285       // Okay, we have an Objective-C pointer conversion.
2286       HasObjCConversion = true;
2287     } else {
2288       // Function types are too different. Abort.
2289       return false;
2290     }
2291 
2292     // Check argument types.
2293     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2294          ArgIdx != NumArgs; ++ArgIdx) {
2295       QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2296       QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2297       if (Context.getCanonicalType(FromArgType)
2298             == Context.getCanonicalType(ToArgType)) {
2299         // Okay, the types match exactly. Nothing to do.
2300       } else if (isObjCPointerConversion(FromArgType, ToArgType,
2301                                          ConvertedType, IncompatibleObjC)) {
2302         // Okay, we have an Objective-C pointer conversion.
2303         HasObjCConversion = true;
2304       } else {
2305         // Argument types are too different. Abort.
2306         return false;
2307       }
2308     }
2309 
2310     if (HasObjCConversion) {
2311       // We had an Objective-C conversion. Allow this pointer
2312       // conversion, but complain about it.
2313       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2314       IncompatibleObjC = true;
2315       return true;
2316     }
2317   }
2318 
2319   return false;
2320 }
2321 
2322 /// \brief Determine whether this is an Objective-C writeback conversion,
2323 /// used for parameter passing when performing automatic reference counting.
2324 ///
2325 /// \param FromType The type we're converting form.
2326 ///
2327 /// \param ToType The type we're converting to.
2328 ///
2329 /// \param ConvertedType The type that will be produced after applying
2330 /// this conversion.
2331 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2332                                      QualType &ConvertedType) {
2333   if (!getLangOpts().ObjCAutoRefCount ||
2334       Context.hasSameUnqualifiedType(FromType, ToType))
2335     return false;
2336 
2337   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2338   QualType ToPointee;
2339   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2340     ToPointee = ToPointer->getPointeeType();
2341   else
2342     return false;
2343 
2344   Qualifiers ToQuals = ToPointee.getQualifiers();
2345   if (!ToPointee->isObjCLifetimeType() ||
2346       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2347       !ToQuals.withoutObjCLifetime().empty())
2348     return false;
2349 
2350   // Argument must be a pointer to __strong to __weak.
2351   QualType FromPointee;
2352   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2353     FromPointee = FromPointer->getPointeeType();
2354   else
2355     return false;
2356 
2357   Qualifiers FromQuals = FromPointee.getQualifiers();
2358   if (!FromPointee->isObjCLifetimeType() ||
2359       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2360        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2361     return false;
2362 
2363   // Make sure that we have compatible qualifiers.
2364   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2365   if (!ToQuals.compatiblyIncludes(FromQuals))
2366     return false;
2367 
2368   // Remove qualifiers from the pointee type we're converting from; they
2369   // aren't used in the compatibility check belong, and we'll be adding back
2370   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2371   FromPointee = FromPointee.getUnqualifiedType();
2372 
2373   // The unqualified form of the pointee types must be compatible.
2374   ToPointee = ToPointee.getUnqualifiedType();
2375   bool IncompatibleObjC;
2376   if (Context.typesAreCompatible(FromPointee, ToPointee))
2377     FromPointee = ToPointee;
2378   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2379                                     IncompatibleObjC))
2380     return false;
2381 
2382   /// \brief Construct the type we're converting to, which is a pointer to
2383   /// __autoreleasing pointee.
2384   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2385   ConvertedType = Context.getPointerType(FromPointee);
2386   return true;
2387 }
2388 
2389 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2390                                     QualType& ConvertedType) {
2391   QualType ToPointeeType;
2392   if (const BlockPointerType *ToBlockPtr =
2393         ToType->getAs<BlockPointerType>())
2394     ToPointeeType = ToBlockPtr->getPointeeType();
2395   else
2396     return false;
2397 
2398   QualType FromPointeeType;
2399   if (const BlockPointerType *FromBlockPtr =
2400       FromType->getAs<BlockPointerType>())
2401     FromPointeeType = FromBlockPtr->getPointeeType();
2402   else
2403     return false;
2404   // We have pointer to blocks, check whether the only
2405   // differences in the argument and result types are in Objective-C
2406   // pointer conversions. If so, we permit the conversion.
2407 
2408   const FunctionProtoType *FromFunctionType
2409     = FromPointeeType->getAs<FunctionProtoType>();
2410   const FunctionProtoType *ToFunctionType
2411     = ToPointeeType->getAs<FunctionProtoType>();
2412 
2413   if (!FromFunctionType || !ToFunctionType)
2414     return false;
2415 
2416   if (Context.hasSameType(FromPointeeType, ToPointeeType))
2417     return true;
2418 
2419   // Perform the quick checks that will tell us whether these
2420   // function types are obviously different.
2421   if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2422       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2423     return false;
2424 
2425   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2426   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2427   if (FromEInfo != ToEInfo)
2428     return false;
2429 
2430   bool IncompatibleObjC = false;
2431   if (Context.hasSameType(FromFunctionType->getResultType(),
2432                           ToFunctionType->getResultType())) {
2433     // Okay, the types match exactly. Nothing to do.
2434   } else {
2435     QualType RHS = FromFunctionType->getResultType();
2436     QualType LHS = ToFunctionType->getResultType();
2437     if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2438         !RHS.hasQualifiers() && LHS.hasQualifiers())
2439        LHS = LHS.getUnqualifiedType();
2440 
2441      if (Context.hasSameType(RHS,LHS)) {
2442        // OK exact match.
2443      } else if (isObjCPointerConversion(RHS, LHS,
2444                                         ConvertedType, IncompatibleObjC)) {
2445      if (IncompatibleObjC)
2446        return false;
2447      // Okay, we have an Objective-C pointer conversion.
2448      }
2449      else
2450        return false;
2451    }
2452 
2453    // Check argument types.
2454    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2455         ArgIdx != NumArgs; ++ArgIdx) {
2456      IncompatibleObjC = false;
2457      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2458      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2459      if (Context.hasSameType(FromArgType, ToArgType)) {
2460        // Okay, the types match exactly. Nothing to do.
2461      } else if (isObjCPointerConversion(ToArgType, FromArgType,
2462                                         ConvertedType, IncompatibleObjC)) {
2463        if (IncompatibleObjC)
2464          return false;
2465        // Okay, we have an Objective-C pointer conversion.
2466      } else
2467        // Argument types are too different. Abort.
2468        return false;
2469    }
2470    if (LangOpts.ObjCAutoRefCount &&
2471        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2472                                                     ToFunctionType))
2473      return false;
2474 
2475    ConvertedType = ToType;
2476    return true;
2477 }
2478 
2479 enum {
2480   ft_default,
2481   ft_different_class,
2482   ft_parameter_arity,
2483   ft_parameter_mismatch,
2484   ft_return_type,
2485   ft_qualifer_mismatch
2486 };
2487 
2488 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2489 /// function types.  Catches different number of parameter, mismatch in
2490 /// parameter types, and different return types.
2491 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2492                                       QualType FromType, QualType ToType) {
2493   // If either type is not valid, include no extra info.
2494   if (FromType.isNull() || ToType.isNull()) {
2495     PDiag << ft_default;
2496     return;
2497   }
2498 
2499   // Get the function type from the pointers.
2500   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2501     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2502                             *ToMember = ToType->getAs<MemberPointerType>();
2503     if (FromMember->getClass() != ToMember->getClass()) {
2504       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2505             << QualType(FromMember->getClass(), 0);
2506       return;
2507     }
2508     FromType = FromMember->getPointeeType();
2509     ToType = ToMember->getPointeeType();
2510   }
2511 
2512   if (FromType->isPointerType())
2513     FromType = FromType->getPointeeType();
2514   if (ToType->isPointerType())
2515     ToType = ToType->getPointeeType();
2516 
2517   // Remove references.
2518   FromType = FromType.getNonReferenceType();
2519   ToType = ToType.getNonReferenceType();
2520 
2521   // Don't print extra info for non-specialized template functions.
2522   if (FromType->isInstantiationDependentType() &&
2523       !FromType->getAs<TemplateSpecializationType>()) {
2524     PDiag << ft_default;
2525     return;
2526   }
2527 
2528   // No extra info for same types.
2529   if (Context.hasSameType(FromType, ToType)) {
2530     PDiag << ft_default;
2531     return;
2532   }
2533 
2534   const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2535                           *ToFunction = ToType->getAs<FunctionProtoType>();
2536 
2537   // Both types need to be function types.
2538   if (!FromFunction || !ToFunction) {
2539     PDiag << ft_default;
2540     return;
2541   }
2542 
2543   if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2544     PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2545           << FromFunction->getNumArgs();
2546     return;
2547   }
2548 
2549   // Handle different parameter types.
2550   unsigned ArgPos;
2551   if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2552     PDiag << ft_parameter_mismatch << ArgPos + 1
2553           << ToFunction->getArgType(ArgPos)
2554           << FromFunction->getArgType(ArgPos);
2555     return;
2556   }
2557 
2558   // Handle different return type.
2559   if (!Context.hasSameType(FromFunction->getResultType(),
2560                            ToFunction->getResultType())) {
2561     PDiag << ft_return_type << ToFunction->getResultType()
2562           << FromFunction->getResultType();
2563     return;
2564   }
2565 
2566   unsigned FromQuals = FromFunction->getTypeQuals(),
2567            ToQuals = ToFunction->getTypeQuals();
2568   if (FromQuals != ToQuals) {
2569     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2570     return;
2571   }
2572 
2573   // Unable to find a difference, so add no extra info.
2574   PDiag << ft_default;
2575 }
2576 
2577 /// FunctionArgTypesAreEqual - This routine checks two function proto types
2578 /// for equality of their argument types. Caller has already checked that
2579 /// they have same number of arguments.  If the parameters are different,
2580 /// ArgPos will have the parameter index of the first different parameter.
2581 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2582                                     const FunctionProtoType *NewType,
2583                                     unsigned *ArgPos) {
2584   for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2585        N = NewType->arg_type_begin(),
2586        E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2587     if (!Context.hasSameType(O->getUnqualifiedType(),
2588                              N->getUnqualifiedType())) {
2589       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2590       return false;
2591     }
2592   }
2593   return true;
2594 }
2595 
2596 /// CheckPointerConversion - Check the pointer conversion from the
2597 /// expression From to the type ToType. This routine checks for
2598 /// ambiguous or inaccessible derived-to-base pointer
2599 /// conversions for which IsPointerConversion has already returned
2600 /// true. It returns true and produces a diagnostic if there was an
2601 /// error, or returns false otherwise.
2602 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2603                                   CastKind &Kind,
2604                                   CXXCastPath& BasePath,
2605                                   bool IgnoreBaseAccess) {
2606   QualType FromType = From->getType();
2607   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2608 
2609   Kind = CK_BitCast;
2610 
2611   if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2612       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2613       Expr::NPCK_ZeroExpression) {
2614     if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2615       DiagRuntimeBehavior(From->getExprLoc(), From,
2616                           PDiag(diag::warn_impcast_bool_to_null_pointer)
2617                             << ToType << From->getSourceRange());
2618     else if (!isUnevaluatedContext())
2619       Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2620         << ToType << From->getSourceRange();
2621   }
2622   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2623     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2624       QualType FromPointeeType = FromPtrType->getPointeeType(),
2625                ToPointeeType   = ToPtrType->getPointeeType();
2626 
2627       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2628           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2629         // We must have a derived-to-base conversion. Check an
2630         // ambiguous or inaccessible conversion.
2631         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2632                                          From->getExprLoc(),
2633                                          From->getSourceRange(), &BasePath,
2634                                          IgnoreBaseAccess))
2635           return true;
2636 
2637         // The conversion was successful.
2638         Kind = CK_DerivedToBase;
2639       }
2640     }
2641   } else if (const ObjCObjectPointerType *ToPtrType =
2642                ToType->getAs<ObjCObjectPointerType>()) {
2643     if (const ObjCObjectPointerType *FromPtrType =
2644           FromType->getAs<ObjCObjectPointerType>()) {
2645       // Objective-C++ conversions are always okay.
2646       // FIXME: We should have a different class of conversions for the
2647       // Objective-C++ implicit conversions.
2648       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2649         return false;
2650     } else if (FromType->isBlockPointerType()) {
2651       Kind = CK_BlockPointerToObjCPointerCast;
2652     } else {
2653       Kind = CK_CPointerToObjCPointerCast;
2654     }
2655   } else if (ToType->isBlockPointerType()) {
2656     if (!FromType->isBlockPointerType())
2657       Kind = CK_AnyPointerToBlockPointerCast;
2658   }
2659 
2660   // We shouldn't fall into this case unless it's valid for other
2661   // reasons.
2662   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2663     Kind = CK_NullToPointer;
2664 
2665   return false;
2666 }
2667 
2668 /// IsMemberPointerConversion - Determines whether the conversion of the
2669 /// expression From, which has the (possibly adjusted) type FromType, can be
2670 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2671 /// If so, returns true and places the converted type (that might differ from
2672 /// ToType in its cv-qualifiers at some level) into ConvertedType.
2673 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2674                                      QualType ToType,
2675                                      bool InOverloadResolution,
2676                                      QualType &ConvertedType) {
2677   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2678   if (!ToTypePtr)
2679     return false;
2680 
2681   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2682   if (From->isNullPointerConstant(Context,
2683                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2684                                         : Expr::NPC_ValueDependentIsNull)) {
2685     ConvertedType = ToType;
2686     return true;
2687   }
2688 
2689   // Otherwise, both types have to be member pointers.
2690   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2691   if (!FromTypePtr)
2692     return false;
2693 
2694   // A pointer to member of B can be converted to a pointer to member of D,
2695   // where D is derived from B (C++ 4.11p2).
2696   QualType FromClass(FromTypePtr->getClass(), 0);
2697   QualType ToClass(ToTypePtr->getClass(), 0);
2698 
2699   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2700       !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2701       IsDerivedFrom(ToClass, FromClass)) {
2702     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2703                                                  ToClass.getTypePtr());
2704     return true;
2705   }
2706 
2707   return false;
2708 }
2709 
2710 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2711 /// expression From to the type ToType. This routine checks for ambiguous or
2712 /// virtual or inaccessible base-to-derived member pointer conversions
2713 /// for which IsMemberPointerConversion has already returned true. It returns
2714 /// true and produces a diagnostic if there was an error, or returns false
2715 /// otherwise.
2716 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2717                                         CastKind &Kind,
2718                                         CXXCastPath &BasePath,
2719                                         bool IgnoreBaseAccess) {
2720   QualType FromType = From->getType();
2721   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2722   if (!FromPtrType) {
2723     // This must be a null pointer to member pointer conversion
2724     assert(From->isNullPointerConstant(Context,
2725                                        Expr::NPC_ValueDependentIsNull) &&
2726            "Expr must be null pointer constant!");
2727     Kind = CK_NullToMemberPointer;
2728     return false;
2729   }
2730 
2731   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2732   assert(ToPtrType && "No member pointer cast has a target type "
2733                       "that is not a member pointer.");
2734 
2735   QualType FromClass = QualType(FromPtrType->getClass(), 0);
2736   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2737 
2738   // FIXME: What about dependent types?
2739   assert(FromClass->isRecordType() && "Pointer into non-class.");
2740   assert(ToClass->isRecordType() && "Pointer into non-class.");
2741 
2742   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2743                      /*DetectVirtual=*/true);
2744   bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2745   assert(DerivationOkay &&
2746          "Should not have been called if derivation isn't OK.");
2747   (void)DerivationOkay;
2748 
2749   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2750                                   getUnqualifiedType())) {
2751     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2752     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2753       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2754     return true;
2755   }
2756 
2757   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2758     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2759       << FromClass << ToClass << QualType(VBase, 0)
2760       << From->getSourceRange();
2761     return true;
2762   }
2763 
2764   if (!IgnoreBaseAccess)
2765     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2766                          Paths.front(),
2767                          diag::err_downcast_from_inaccessible_base);
2768 
2769   // Must be a base to derived member conversion.
2770   BuildBasePathArray(Paths, BasePath);
2771   Kind = CK_BaseToDerivedMemberPointer;
2772   return false;
2773 }
2774 
2775 /// IsQualificationConversion - Determines whether the conversion from
2776 /// an rvalue of type FromType to ToType is a qualification conversion
2777 /// (C++ 4.4).
2778 ///
2779 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2780 /// when the qualification conversion involves a change in the Objective-C
2781 /// object lifetime.
2782 bool
2783 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2784                                 bool CStyle, bool &ObjCLifetimeConversion) {
2785   FromType = Context.getCanonicalType(FromType);
2786   ToType = Context.getCanonicalType(ToType);
2787   ObjCLifetimeConversion = false;
2788 
2789   // If FromType and ToType are the same type, this is not a
2790   // qualification conversion.
2791   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2792     return false;
2793 
2794   // (C++ 4.4p4):
2795   //   A conversion can add cv-qualifiers at levels other than the first
2796   //   in multi-level pointers, subject to the following rules: [...]
2797   bool PreviousToQualsIncludeConst = true;
2798   bool UnwrappedAnyPointer = false;
2799   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2800     // Within each iteration of the loop, we check the qualifiers to
2801     // determine if this still looks like a qualification
2802     // conversion. Then, if all is well, we unwrap one more level of
2803     // pointers or pointers-to-members and do it all again
2804     // until there are no more pointers or pointers-to-members left to
2805     // unwrap.
2806     UnwrappedAnyPointer = true;
2807 
2808     Qualifiers FromQuals = FromType.getQualifiers();
2809     Qualifiers ToQuals = ToType.getQualifiers();
2810 
2811     // Objective-C ARC:
2812     //   Check Objective-C lifetime conversions.
2813     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2814         UnwrappedAnyPointer) {
2815       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2816         ObjCLifetimeConversion = true;
2817         FromQuals.removeObjCLifetime();
2818         ToQuals.removeObjCLifetime();
2819       } else {
2820         // Qualification conversions cannot cast between different
2821         // Objective-C lifetime qualifiers.
2822         return false;
2823       }
2824     }
2825 
2826     // Allow addition/removal of GC attributes but not changing GC attributes.
2827     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2828         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2829       FromQuals.removeObjCGCAttr();
2830       ToQuals.removeObjCGCAttr();
2831     }
2832 
2833     //   -- for every j > 0, if const is in cv 1,j then const is in cv
2834     //      2,j, and similarly for volatile.
2835     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2836       return false;
2837 
2838     //   -- if the cv 1,j and cv 2,j are different, then const is in
2839     //      every cv for 0 < k < j.
2840     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2841         && !PreviousToQualsIncludeConst)
2842       return false;
2843 
2844     // Keep track of whether all prior cv-qualifiers in the "to" type
2845     // include const.
2846     PreviousToQualsIncludeConst
2847       = PreviousToQualsIncludeConst && ToQuals.hasConst();
2848   }
2849 
2850   // We are left with FromType and ToType being the pointee types
2851   // after unwrapping the original FromType and ToType the same number
2852   // of types. If we unwrapped any pointers, and if FromType and
2853   // ToType have the same unqualified type (since we checked
2854   // qualifiers above), then this is a qualification conversion.
2855   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2856 }
2857 
2858 /// \brief - Determine whether this is a conversion from a scalar type to an
2859 /// atomic type.
2860 ///
2861 /// If successful, updates \c SCS's second and third steps in the conversion
2862 /// sequence to finish the conversion.
2863 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2864                                 bool InOverloadResolution,
2865                                 StandardConversionSequence &SCS,
2866                                 bool CStyle) {
2867   const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2868   if (!ToAtomic)
2869     return false;
2870 
2871   StandardConversionSequence InnerSCS;
2872   if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2873                             InOverloadResolution, InnerSCS,
2874                             CStyle, /*AllowObjCWritebackConversion=*/false))
2875     return false;
2876 
2877   SCS.Second = InnerSCS.Second;
2878   SCS.setToType(1, InnerSCS.getToType(1));
2879   SCS.Third = InnerSCS.Third;
2880   SCS.QualificationIncludesObjCLifetime
2881     = InnerSCS.QualificationIncludesObjCLifetime;
2882   SCS.setToType(2, InnerSCS.getToType(2));
2883   return true;
2884 }
2885 
2886 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2887                                               CXXConstructorDecl *Constructor,
2888                                               QualType Type) {
2889   const FunctionProtoType *CtorType =
2890       Constructor->getType()->getAs<FunctionProtoType>();
2891   if (CtorType->getNumArgs() > 0) {
2892     QualType FirstArg = CtorType->getArgType(0);
2893     if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2894       return true;
2895   }
2896   return false;
2897 }
2898 
2899 static OverloadingResult
2900 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2901                                        CXXRecordDecl *To,
2902                                        UserDefinedConversionSequence &User,
2903                                        OverloadCandidateSet &CandidateSet,
2904                                        bool AllowExplicit) {
2905   DeclContext::lookup_result R = S.LookupConstructors(To);
2906   for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
2907        Con != ConEnd; ++Con) {
2908     NamedDecl *D = *Con;
2909     DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2910 
2911     // Find the constructor (which may be a template).
2912     CXXConstructorDecl *Constructor = 0;
2913     FunctionTemplateDecl *ConstructorTmpl
2914       = dyn_cast<FunctionTemplateDecl>(D);
2915     if (ConstructorTmpl)
2916       Constructor
2917         = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2918     else
2919       Constructor = cast<CXXConstructorDecl>(D);
2920 
2921     bool Usable = !Constructor->isInvalidDecl() &&
2922                   S.isInitListConstructor(Constructor) &&
2923                   (AllowExplicit || !Constructor->isExplicit());
2924     if (Usable) {
2925       // If the first argument is (a reference to) the target type,
2926       // suppress conversions.
2927       bool SuppressUserConversions =
2928           isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2929       if (ConstructorTmpl)
2930         S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2931                                        /*ExplicitArgs*/ 0,
2932                                        From, CandidateSet,
2933                                        SuppressUserConversions);
2934       else
2935         S.AddOverloadCandidate(Constructor, FoundDecl,
2936                                From, CandidateSet,
2937                                SuppressUserConversions);
2938     }
2939   }
2940 
2941   bool HadMultipleCandidates = (CandidateSet.size() > 1);
2942 
2943   OverloadCandidateSet::iterator Best;
2944   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2945   case OR_Success: {
2946     // Record the standard conversion we used and the conversion function.
2947     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2948     QualType ThisType = Constructor->getThisType(S.Context);
2949     // Initializer lists don't have conversions as such.
2950     User.Before.setAsIdentityConversion();
2951     User.HadMultipleCandidates = HadMultipleCandidates;
2952     User.ConversionFunction = Constructor;
2953     User.FoundConversionFunction = Best->FoundDecl;
2954     User.After.setAsIdentityConversion();
2955     User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
2956     User.After.setAllToTypes(ToType);
2957     return OR_Success;
2958   }
2959 
2960   case OR_No_Viable_Function:
2961     return OR_No_Viable_Function;
2962   case OR_Deleted:
2963     return OR_Deleted;
2964   case OR_Ambiguous:
2965     return OR_Ambiguous;
2966   }
2967 
2968   llvm_unreachable("Invalid OverloadResult!");
2969 }
2970 
2971 /// Determines whether there is a user-defined conversion sequence
2972 /// (C++ [over.ics.user]) that converts expression From to the type
2973 /// ToType. If such a conversion exists, User will contain the
2974 /// user-defined conversion sequence that performs such a conversion
2975 /// and this routine will return true. Otherwise, this routine returns
2976 /// false and User is unspecified.
2977 ///
2978 /// \param AllowExplicit  true if the conversion should consider C++0x
2979 /// "explicit" conversion functions as well as non-explicit conversion
2980 /// functions (C++0x [class.conv.fct]p2).
2981 static OverloadingResult
2982 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
2983                         UserDefinedConversionSequence &User,
2984                         OverloadCandidateSet &CandidateSet,
2985                         bool AllowExplicit) {
2986   // Whether we will only visit constructors.
2987   bool ConstructorsOnly = false;
2988 
2989   // If the type we are conversion to is a class type, enumerate its
2990   // constructors.
2991   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
2992     // C++ [over.match.ctor]p1:
2993     //   When objects of class type are direct-initialized (8.5), or
2994     //   copy-initialized from an expression of the same or a
2995     //   derived class type (8.5), overload resolution selects the
2996     //   constructor. [...] For copy-initialization, the candidate
2997     //   functions are all the converting constructors (12.3.1) of
2998     //   that class. The argument list is the expression-list within
2999     //   the parentheses of the initializer.
3000     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
3001         (From->getType()->getAs<RecordType>() &&
3002          S.IsDerivedFrom(From->getType(), ToType)))
3003       ConstructorsOnly = true;
3004 
3005     S.RequireCompleteType(From->getExprLoc(), ToType, 0);
3006     // RequireCompleteType may have returned true due to some invalid decl
3007     // during template instantiation, but ToType may be complete enough now
3008     // to try to recover.
3009     if (ToType->isIncompleteType()) {
3010       // We're not going to find any constructors.
3011     } else if (CXXRecordDecl *ToRecordDecl
3012                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
3013 
3014       Expr **Args = &From;
3015       unsigned NumArgs = 1;
3016       bool ListInitializing = false;
3017       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
3018         // But first, see if there is an init-list-contructor that will work.
3019         OverloadingResult Result = IsInitializerListConstructorConversion(
3020             S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3021         if (Result != OR_No_Viable_Function)
3022           return Result;
3023         // Never mind.
3024         CandidateSet.clear();
3025 
3026         // If we're list-initializing, we pass the individual elements as
3027         // arguments, not the entire list.
3028         Args = InitList->getInits();
3029         NumArgs = InitList->getNumInits();
3030         ListInitializing = true;
3031       }
3032 
3033       DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
3034       for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3035            Con != ConEnd; ++Con) {
3036         NamedDecl *D = *Con;
3037         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3038 
3039         // Find the constructor (which may be a template).
3040         CXXConstructorDecl *Constructor = 0;
3041         FunctionTemplateDecl *ConstructorTmpl
3042           = dyn_cast<FunctionTemplateDecl>(D);
3043         if (ConstructorTmpl)
3044           Constructor
3045             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3046         else
3047           Constructor = cast<CXXConstructorDecl>(D);
3048 
3049         bool Usable = !Constructor->isInvalidDecl();
3050         if (ListInitializing)
3051           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3052         else
3053           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3054         if (Usable) {
3055           bool SuppressUserConversions = !ConstructorsOnly;
3056           if (SuppressUserConversions && ListInitializing) {
3057             SuppressUserConversions = false;
3058             if (NumArgs == 1) {
3059               // If the first argument is (a reference to) the target type,
3060               // suppress conversions.
3061               SuppressUserConversions = isFirstArgumentCompatibleWithType(
3062                                                 S.Context, Constructor, ToType);
3063             }
3064           }
3065           if (ConstructorTmpl)
3066             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3067                                            /*ExplicitArgs*/ 0,
3068                                            llvm::makeArrayRef(Args, NumArgs),
3069                                            CandidateSet, SuppressUserConversions);
3070           else
3071             // Allow one user-defined conversion when user specifies a
3072             // From->ToType conversion via an static cast (c-style, etc).
3073             S.AddOverloadCandidate(Constructor, FoundDecl,
3074                                    llvm::makeArrayRef(Args, NumArgs),
3075                                    CandidateSet, SuppressUserConversions);
3076         }
3077       }
3078     }
3079   }
3080 
3081   // Enumerate conversion functions, if we're allowed to.
3082   if (ConstructorsOnly || isa<InitListExpr>(From)) {
3083   } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3084     // No conversion functions from incomplete types.
3085   } else if (const RecordType *FromRecordType
3086                                    = From->getType()->getAs<RecordType>()) {
3087     if (CXXRecordDecl *FromRecordDecl
3088          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3089       // Add all of the conversion functions as candidates.
3090       std::pair<CXXRecordDecl::conversion_iterator,
3091                 CXXRecordDecl::conversion_iterator>
3092         Conversions = FromRecordDecl->getVisibleConversionFunctions();
3093       for (CXXRecordDecl::conversion_iterator
3094              I = Conversions.first, E = Conversions.second; I != E; ++I) {
3095         DeclAccessPair FoundDecl = I.getPair();
3096         NamedDecl *D = FoundDecl.getDecl();
3097         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3098         if (isa<UsingShadowDecl>(D))
3099           D = cast<UsingShadowDecl>(D)->getTargetDecl();
3100 
3101         CXXConversionDecl *Conv;
3102         FunctionTemplateDecl *ConvTemplate;
3103         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3104           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3105         else
3106           Conv = cast<CXXConversionDecl>(D);
3107 
3108         if (AllowExplicit || !Conv->isExplicit()) {
3109           if (ConvTemplate)
3110             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3111                                              ActingContext, From, ToType,
3112                                              CandidateSet);
3113           else
3114             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3115                                      From, ToType, CandidateSet);
3116         }
3117       }
3118     }
3119   }
3120 
3121   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3122 
3123   OverloadCandidateSet::iterator Best;
3124   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3125   case OR_Success:
3126     // Record the standard conversion we used and the conversion function.
3127     if (CXXConstructorDecl *Constructor
3128           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3129       // C++ [over.ics.user]p1:
3130       //   If the user-defined conversion is specified by a
3131       //   constructor (12.3.1), the initial standard conversion
3132       //   sequence converts the source type to the type required by
3133       //   the argument of the constructor.
3134       //
3135       QualType ThisType = Constructor->getThisType(S.Context);
3136       if (isa<InitListExpr>(From)) {
3137         // Initializer lists don't have conversions as such.
3138         User.Before.setAsIdentityConversion();
3139       } else {
3140         if (Best->Conversions[0].isEllipsis())
3141           User.EllipsisConversion = true;
3142         else {
3143           User.Before = Best->Conversions[0].Standard;
3144           User.EllipsisConversion = false;
3145         }
3146       }
3147       User.HadMultipleCandidates = HadMultipleCandidates;
3148       User.ConversionFunction = Constructor;
3149       User.FoundConversionFunction = Best->FoundDecl;
3150       User.After.setAsIdentityConversion();
3151       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3152       User.After.setAllToTypes(ToType);
3153       return OR_Success;
3154     }
3155     if (CXXConversionDecl *Conversion
3156                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
3157       // C++ [over.ics.user]p1:
3158       //
3159       //   [...] If the user-defined conversion is specified by a
3160       //   conversion function (12.3.2), the initial standard
3161       //   conversion sequence converts the source type to the
3162       //   implicit object parameter of the conversion function.
3163       User.Before = Best->Conversions[0].Standard;
3164       User.HadMultipleCandidates = HadMultipleCandidates;
3165       User.ConversionFunction = Conversion;
3166       User.FoundConversionFunction = Best->FoundDecl;
3167       User.EllipsisConversion = false;
3168 
3169       // C++ [over.ics.user]p2:
3170       //   The second standard conversion sequence converts the
3171       //   result of the user-defined conversion to the target type
3172       //   for the sequence. Since an implicit conversion sequence
3173       //   is an initialization, the special rules for
3174       //   initialization by user-defined conversion apply when
3175       //   selecting the best user-defined conversion for a
3176       //   user-defined conversion sequence (see 13.3.3 and
3177       //   13.3.3.1).
3178       User.After = Best->FinalConversion;
3179       return OR_Success;
3180     }
3181     llvm_unreachable("Not a constructor or conversion function?");
3182 
3183   case OR_No_Viable_Function:
3184     return OR_No_Viable_Function;
3185   case OR_Deleted:
3186     // No conversion here! We're done.
3187     return OR_Deleted;
3188 
3189   case OR_Ambiguous:
3190     return OR_Ambiguous;
3191   }
3192 
3193   llvm_unreachable("Invalid OverloadResult!");
3194 }
3195 
3196 bool
3197 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3198   ImplicitConversionSequence ICS;
3199   OverloadCandidateSet CandidateSet(From->getExprLoc());
3200   OverloadingResult OvResult =
3201     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3202                             CandidateSet, false);
3203   if (OvResult == OR_Ambiguous)
3204     Diag(From->getLocStart(),
3205          diag::err_typecheck_ambiguous_condition)
3206           << From->getType() << ToType << From->getSourceRange();
3207   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty()) {
3208     if (!RequireCompleteType(From->getLocStart(), ToType,
3209                           diag::err_typecheck_nonviable_condition_incomplete,
3210                              From->getType(), From->getSourceRange()))
3211       Diag(From->getLocStart(),
3212            diag::err_typecheck_nonviable_condition)
3213            << From->getType() << From->getSourceRange() << ToType;
3214   }
3215   else
3216     return false;
3217   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3218   return true;
3219 }
3220 
3221 /// \brief Compare the user-defined conversion functions or constructors
3222 /// of two user-defined conversion sequences to determine whether any ordering
3223 /// is possible.
3224 static ImplicitConversionSequence::CompareKind
3225 compareConversionFunctions(Sema &S,
3226                            FunctionDecl *Function1,
3227                            FunctionDecl *Function2) {
3228   if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
3229     return ImplicitConversionSequence::Indistinguishable;
3230 
3231   // Objective-C++:
3232   //   If both conversion functions are implicitly-declared conversions from
3233   //   a lambda closure type to a function pointer and a block pointer,
3234   //   respectively, always prefer the conversion to a function pointer,
3235   //   because the function pointer is more lightweight and is more likely
3236   //   to keep code working.
3237   CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3238   if (!Conv1)
3239     return ImplicitConversionSequence::Indistinguishable;
3240 
3241   CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3242   if (!Conv2)
3243     return ImplicitConversionSequence::Indistinguishable;
3244 
3245   if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3246     bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3247     bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3248     if (Block1 != Block2)
3249       return Block1? ImplicitConversionSequence::Worse
3250                    : ImplicitConversionSequence::Better;
3251   }
3252 
3253   return ImplicitConversionSequence::Indistinguishable;
3254 }
3255 
3256 /// CompareImplicitConversionSequences - Compare two implicit
3257 /// conversion sequences to determine whether one is better than the
3258 /// other or if they are indistinguishable (C++ 13.3.3.2).
3259 static ImplicitConversionSequence::CompareKind
3260 CompareImplicitConversionSequences(Sema &S,
3261                                    const ImplicitConversionSequence& ICS1,
3262                                    const ImplicitConversionSequence& ICS2)
3263 {
3264   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3265   // conversion sequences (as defined in 13.3.3.1)
3266   //   -- a standard conversion sequence (13.3.3.1.1) is a better
3267   //      conversion sequence than a user-defined conversion sequence or
3268   //      an ellipsis conversion sequence, and
3269   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3270   //      conversion sequence than an ellipsis conversion sequence
3271   //      (13.3.3.1.3).
3272   //
3273   // C++0x [over.best.ics]p10:
3274   //   For the purpose of ranking implicit conversion sequences as
3275   //   described in 13.3.3.2, the ambiguous conversion sequence is
3276   //   treated as a user-defined sequence that is indistinguishable
3277   //   from any other user-defined conversion sequence.
3278   if (ICS1.getKindRank() < ICS2.getKindRank())
3279     return ImplicitConversionSequence::Better;
3280   if (ICS2.getKindRank() < ICS1.getKindRank())
3281     return ImplicitConversionSequence::Worse;
3282 
3283   // The following checks require both conversion sequences to be of
3284   // the same kind.
3285   if (ICS1.getKind() != ICS2.getKind())
3286     return ImplicitConversionSequence::Indistinguishable;
3287 
3288   ImplicitConversionSequence::CompareKind Result =
3289       ImplicitConversionSequence::Indistinguishable;
3290 
3291   // Two implicit conversion sequences of the same form are
3292   // indistinguishable conversion sequences unless one of the
3293   // following rules apply: (C++ 13.3.3.2p3):
3294   if (ICS1.isStandard())
3295     Result = CompareStandardConversionSequences(S,
3296                                                 ICS1.Standard, ICS2.Standard);
3297   else if (ICS1.isUserDefined()) {
3298     // User-defined conversion sequence U1 is a better conversion
3299     // sequence than another user-defined conversion sequence U2 if
3300     // they contain the same user-defined conversion function or
3301     // constructor and if the second standard conversion sequence of
3302     // U1 is better than the second standard conversion sequence of
3303     // U2 (C++ 13.3.3.2p3).
3304     if (ICS1.UserDefined.ConversionFunction ==
3305           ICS2.UserDefined.ConversionFunction)
3306       Result = CompareStandardConversionSequences(S,
3307                                                   ICS1.UserDefined.After,
3308                                                   ICS2.UserDefined.After);
3309     else
3310       Result = compareConversionFunctions(S,
3311                                           ICS1.UserDefined.ConversionFunction,
3312                                           ICS2.UserDefined.ConversionFunction);
3313   }
3314 
3315   // List-initialization sequence L1 is a better conversion sequence than
3316   // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3317   // for some X and L2 does not.
3318   if (Result == ImplicitConversionSequence::Indistinguishable &&
3319       !ICS1.isBad() &&
3320       ICS1.isListInitializationSequence() &&
3321       ICS2.isListInitializationSequence()) {
3322     if (ICS1.isStdInitializerListElement() &&
3323         !ICS2.isStdInitializerListElement())
3324       return ImplicitConversionSequence::Better;
3325     if (!ICS1.isStdInitializerListElement() &&
3326         ICS2.isStdInitializerListElement())
3327       return ImplicitConversionSequence::Worse;
3328   }
3329 
3330   return Result;
3331 }
3332 
3333 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3334   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3335     Qualifiers Quals;
3336     T1 = Context.getUnqualifiedArrayType(T1, Quals);
3337     T2 = Context.getUnqualifiedArrayType(T2, Quals);
3338   }
3339 
3340   return Context.hasSameUnqualifiedType(T1, T2);
3341 }
3342 
3343 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3344 // determine if one is a proper subset of the other.
3345 static ImplicitConversionSequence::CompareKind
3346 compareStandardConversionSubsets(ASTContext &Context,
3347                                  const StandardConversionSequence& SCS1,
3348                                  const StandardConversionSequence& SCS2) {
3349   ImplicitConversionSequence::CompareKind Result
3350     = ImplicitConversionSequence::Indistinguishable;
3351 
3352   // the identity conversion sequence is considered to be a subsequence of
3353   // any non-identity conversion sequence
3354   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3355     return ImplicitConversionSequence::Better;
3356   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3357     return ImplicitConversionSequence::Worse;
3358 
3359   if (SCS1.Second != SCS2.Second) {
3360     if (SCS1.Second == ICK_Identity)
3361       Result = ImplicitConversionSequence::Better;
3362     else if (SCS2.Second == ICK_Identity)
3363       Result = ImplicitConversionSequence::Worse;
3364     else
3365       return ImplicitConversionSequence::Indistinguishable;
3366   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3367     return ImplicitConversionSequence::Indistinguishable;
3368 
3369   if (SCS1.Third == SCS2.Third) {
3370     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3371                              : ImplicitConversionSequence::Indistinguishable;
3372   }
3373 
3374   if (SCS1.Third == ICK_Identity)
3375     return Result == ImplicitConversionSequence::Worse
3376              ? ImplicitConversionSequence::Indistinguishable
3377              : ImplicitConversionSequence::Better;
3378 
3379   if (SCS2.Third == ICK_Identity)
3380     return Result == ImplicitConversionSequence::Better
3381              ? ImplicitConversionSequence::Indistinguishable
3382              : ImplicitConversionSequence::Worse;
3383 
3384   return ImplicitConversionSequence::Indistinguishable;
3385 }
3386 
3387 /// \brief Determine whether one of the given reference bindings is better
3388 /// than the other based on what kind of bindings they are.
3389 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3390                                        const StandardConversionSequence &SCS2) {
3391   // C++0x [over.ics.rank]p3b4:
3392   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3393   //      implicit object parameter of a non-static member function declared
3394   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3395   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3396   //      lvalue reference to a function lvalue and S2 binds an rvalue
3397   //      reference*.
3398   //
3399   // FIXME: Rvalue references. We're going rogue with the above edits,
3400   // because the semantics in the current C++0x working paper (N3225 at the
3401   // time of this writing) break the standard definition of std::forward
3402   // and std::reference_wrapper when dealing with references to functions.
3403   // Proposed wording changes submitted to CWG for consideration.
3404   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3405       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3406     return false;
3407 
3408   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3409           SCS2.IsLvalueReference) ||
3410          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3411           !SCS2.IsLvalueReference);
3412 }
3413 
3414 /// CompareStandardConversionSequences - Compare two standard
3415 /// conversion sequences to determine whether one is better than the
3416 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3417 static ImplicitConversionSequence::CompareKind
3418 CompareStandardConversionSequences(Sema &S,
3419                                    const StandardConversionSequence& SCS1,
3420                                    const StandardConversionSequence& SCS2)
3421 {
3422   // Standard conversion sequence S1 is a better conversion sequence
3423   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3424 
3425   //  -- S1 is a proper subsequence of S2 (comparing the conversion
3426   //     sequences in the canonical form defined by 13.3.3.1.1,
3427   //     excluding any Lvalue Transformation; the identity conversion
3428   //     sequence is considered to be a subsequence of any
3429   //     non-identity conversion sequence) or, if not that,
3430   if (ImplicitConversionSequence::CompareKind CK
3431         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3432     return CK;
3433 
3434   //  -- the rank of S1 is better than the rank of S2 (by the rules
3435   //     defined below), or, if not that,
3436   ImplicitConversionRank Rank1 = SCS1.getRank();
3437   ImplicitConversionRank Rank2 = SCS2.getRank();
3438   if (Rank1 < Rank2)
3439     return ImplicitConversionSequence::Better;
3440   else if (Rank2 < Rank1)
3441     return ImplicitConversionSequence::Worse;
3442 
3443   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3444   // are indistinguishable unless one of the following rules
3445   // applies:
3446 
3447   //   A conversion that is not a conversion of a pointer, or
3448   //   pointer to member, to bool is better than another conversion
3449   //   that is such a conversion.
3450   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3451     return SCS2.isPointerConversionToBool()
3452              ? ImplicitConversionSequence::Better
3453              : ImplicitConversionSequence::Worse;
3454 
3455   // C++ [over.ics.rank]p4b2:
3456   //
3457   //   If class B is derived directly or indirectly from class A,
3458   //   conversion of B* to A* is better than conversion of B* to
3459   //   void*, and conversion of A* to void* is better than conversion
3460   //   of B* to void*.
3461   bool SCS1ConvertsToVoid
3462     = SCS1.isPointerConversionToVoidPointer(S.Context);
3463   bool SCS2ConvertsToVoid
3464     = SCS2.isPointerConversionToVoidPointer(S.Context);
3465   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3466     // Exactly one of the conversion sequences is a conversion to
3467     // a void pointer; it's the worse conversion.
3468     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3469                               : ImplicitConversionSequence::Worse;
3470   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3471     // Neither conversion sequence converts to a void pointer; compare
3472     // their derived-to-base conversions.
3473     if (ImplicitConversionSequence::CompareKind DerivedCK
3474           = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3475       return DerivedCK;
3476   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3477              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3478     // Both conversion sequences are conversions to void
3479     // pointers. Compare the source types to determine if there's an
3480     // inheritance relationship in their sources.
3481     QualType FromType1 = SCS1.getFromType();
3482     QualType FromType2 = SCS2.getFromType();
3483 
3484     // Adjust the types we're converting from via the array-to-pointer
3485     // conversion, if we need to.
3486     if (SCS1.First == ICK_Array_To_Pointer)
3487       FromType1 = S.Context.getArrayDecayedType(FromType1);
3488     if (SCS2.First == ICK_Array_To_Pointer)
3489       FromType2 = S.Context.getArrayDecayedType(FromType2);
3490 
3491     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3492     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3493 
3494     if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3495       return ImplicitConversionSequence::Better;
3496     else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3497       return ImplicitConversionSequence::Worse;
3498 
3499     // Objective-C++: If one interface is more specific than the
3500     // other, it is the better one.
3501     const ObjCObjectPointerType* FromObjCPtr1
3502       = FromType1->getAs<ObjCObjectPointerType>();
3503     const ObjCObjectPointerType* FromObjCPtr2
3504       = FromType2->getAs<ObjCObjectPointerType>();
3505     if (FromObjCPtr1 && FromObjCPtr2) {
3506       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3507                                                           FromObjCPtr2);
3508       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3509                                                            FromObjCPtr1);
3510       if (AssignLeft != AssignRight) {
3511         return AssignLeft? ImplicitConversionSequence::Better
3512                          : ImplicitConversionSequence::Worse;
3513       }
3514     }
3515   }
3516 
3517   // Compare based on qualification conversions (C++ 13.3.3.2p3,
3518   // bullet 3).
3519   if (ImplicitConversionSequence::CompareKind QualCK
3520         = CompareQualificationConversions(S, SCS1, SCS2))
3521     return QualCK;
3522 
3523   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3524     // Check for a better reference binding based on the kind of bindings.
3525     if (isBetterReferenceBindingKind(SCS1, SCS2))
3526       return ImplicitConversionSequence::Better;
3527     else if (isBetterReferenceBindingKind(SCS2, SCS1))
3528       return ImplicitConversionSequence::Worse;
3529 
3530     // C++ [over.ics.rank]p3b4:
3531     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3532     //      which the references refer are the same type except for
3533     //      top-level cv-qualifiers, and the type to which the reference
3534     //      initialized by S2 refers is more cv-qualified than the type
3535     //      to which the reference initialized by S1 refers.
3536     QualType T1 = SCS1.getToType(2);
3537     QualType T2 = SCS2.getToType(2);
3538     T1 = S.Context.getCanonicalType(T1);
3539     T2 = S.Context.getCanonicalType(T2);
3540     Qualifiers T1Quals, T2Quals;
3541     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3542     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3543     if (UnqualT1 == UnqualT2) {
3544       // Objective-C++ ARC: If the references refer to objects with different
3545       // lifetimes, prefer bindings that don't change lifetime.
3546       if (SCS1.ObjCLifetimeConversionBinding !=
3547                                           SCS2.ObjCLifetimeConversionBinding) {
3548         return SCS1.ObjCLifetimeConversionBinding
3549                                            ? ImplicitConversionSequence::Worse
3550                                            : ImplicitConversionSequence::Better;
3551       }
3552 
3553       // If the type is an array type, promote the element qualifiers to the
3554       // type for comparison.
3555       if (isa<ArrayType>(T1) && T1Quals)
3556         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3557       if (isa<ArrayType>(T2) && T2Quals)
3558         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3559       if (T2.isMoreQualifiedThan(T1))
3560         return ImplicitConversionSequence::Better;
3561       else if (T1.isMoreQualifiedThan(T2))
3562         return ImplicitConversionSequence::Worse;
3563     }
3564   }
3565 
3566   // In Microsoft mode, prefer an integral conversion to a
3567   // floating-to-integral conversion if the integral conversion
3568   // is between types of the same size.
3569   // For example:
3570   // void f(float);
3571   // void f(int);
3572   // int main {
3573   //    long a;
3574   //    f(a);
3575   // }
3576   // Here, MSVC will call f(int) instead of generating a compile error
3577   // as clang will do in standard mode.
3578   if (S.getLangOpts().MicrosoftMode &&
3579       SCS1.Second == ICK_Integral_Conversion &&
3580       SCS2.Second == ICK_Floating_Integral &&
3581       S.Context.getTypeSize(SCS1.getFromType()) ==
3582       S.Context.getTypeSize(SCS1.getToType(2)))
3583     return ImplicitConversionSequence::Better;
3584 
3585   return ImplicitConversionSequence::Indistinguishable;
3586 }
3587 
3588 /// CompareQualificationConversions - Compares two standard conversion
3589 /// sequences to determine whether they can be ranked based on their
3590 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3591 ImplicitConversionSequence::CompareKind
3592 CompareQualificationConversions(Sema &S,
3593                                 const StandardConversionSequence& SCS1,
3594                                 const StandardConversionSequence& SCS2) {
3595   // C++ 13.3.3.2p3:
3596   //  -- S1 and S2 differ only in their qualification conversion and
3597   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3598   //     cv-qualification signature of type T1 is a proper subset of
3599   //     the cv-qualification signature of type T2, and S1 is not the
3600   //     deprecated string literal array-to-pointer conversion (4.2).
3601   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3602       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3603     return ImplicitConversionSequence::Indistinguishable;
3604 
3605   // FIXME: the example in the standard doesn't use a qualification
3606   // conversion (!)
3607   QualType T1 = SCS1.getToType(2);
3608   QualType T2 = SCS2.getToType(2);
3609   T1 = S.Context.getCanonicalType(T1);
3610   T2 = S.Context.getCanonicalType(T2);
3611   Qualifiers T1Quals, T2Quals;
3612   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3613   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3614 
3615   // If the types are the same, we won't learn anything by unwrapped
3616   // them.
3617   if (UnqualT1 == UnqualT2)
3618     return ImplicitConversionSequence::Indistinguishable;
3619 
3620   // If the type is an array type, promote the element qualifiers to the type
3621   // for comparison.
3622   if (isa<ArrayType>(T1) && T1Quals)
3623     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3624   if (isa<ArrayType>(T2) && T2Quals)
3625     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3626 
3627   ImplicitConversionSequence::CompareKind Result
3628     = ImplicitConversionSequence::Indistinguishable;
3629 
3630   // Objective-C++ ARC:
3631   //   Prefer qualification conversions not involving a change in lifetime
3632   //   to qualification conversions that do not change lifetime.
3633   if (SCS1.QualificationIncludesObjCLifetime !=
3634                                       SCS2.QualificationIncludesObjCLifetime) {
3635     Result = SCS1.QualificationIncludesObjCLifetime
3636                ? ImplicitConversionSequence::Worse
3637                : ImplicitConversionSequence::Better;
3638   }
3639 
3640   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3641     // Within each iteration of the loop, we check the qualifiers to
3642     // determine if this still looks like a qualification
3643     // conversion. Then, if all is well, we unwrap one more level of
3644     // pointers or pointers-to-members and do it all again
3645     // until there are no more pointers or pointers-to-members left
3646     // to unwrap. This essentially mimics what
3647     // IsQualificationConversion does, but here we're checking for a
3648     // strict subset of qualifiers.
3649     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3650       // The qualifiers are the same, so this doesn't tell us anything
3651       // about how the sequences rank.
3652       ;
3653     else if (T2.isMoreQualifiedThan(T1)) {
3654       // T1 has fewer qualifiers, so it could be the better sequence.
3655       if (Result == ImplicitConversionSequence::Worse)
3656         // Neither has qualifiers that are a subset of the other's
3657         // qualifiers.
3658         return ImplicitConversionSequence::Indistinguishable;
3659 
3660       Result = ImplicitConversionSequence::Better;
3661     } else if (T1.isMoreQualifiedThan(T2)) {
3662       // T2 has fewer qualifiers, so it could be the better sequence.
3663       if (Result == ImplicitConversionSequence::Better)
3664         // Neither has qualifiers that are a subset of the other's
3665         // qualifiers.
3666         return ImplicitConversionSequence::Indistinguishable;
3667 
3668       Result = ImplicitConversionSequence::Worse;
3669     } else {
3670       // Qualifiers are disjoint.
3671       return ImplicitConversionSequence::Indistinguishable;
3672     }
3673 
3674     // If the types after this point are equivalent, we're done.
3675     if (S.Context.hasSameUnqualifiedType(T1, T2))
3676       break;
3677   }
3678 
3679   // Check that the winning standard conversion sequence isn't using
3680   // the deprecated string literal array to pointer conversion.
3681   switch (Result) {
3682   case ImplicitConversionSequence::Better:
3683     if (SCS1.DeprecatedStringLiteralToCharPtr)
3684       Result = ImplicitConversionSequence::Indistinguishable;
3685     break;
3686 
3687   case ImplicitConversionSequence::Indistinguishable:
3688     break;
3689 
3690   case ImplicitConversionSequence::Worse:
3691     if (SCS2.DeprecatedStringLiteralToCharPtr)
3692       Result = ImplicitConversionSequence::Indistinguishable;
3693     break;
3694   }
3695 
3696   return Result;
3697 }
3698 
3699 /// CompareDerivedToBaseConversions - Compares two standard conversion
3700 /// sequences to determine whether they can be ranked based on their
3701 /// various kinds of derived-to-base conversions (C++
3702 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
3703 /// conversions between Objective-C interface types.
3704 ImplicitConversionSequence::CompareKind
3705 CompareDerivedToBaseConversions(Sema &S,
3706                                 const StandardConversionSequence& SCS1,
3707                                 const StandardConversionSequence& SCS2) {
3708   QualType FromType1 = SCS1.getFromType();
3709   QualType ToType1 = SCS1.getToType(1);
3710   QualType FromType2 = SCS2.getFromType();
3711   QualType ToType2 = SCS2.getToType(1);
3712 
3713   // Adjust the types we're converting from via the array-to-pointer
3714   // conversion, if we need to.
3715   if (SCS1.First == ICK_Array_To_Pointer)
3716     FromType1 = S.Context.getArrayDecayedType(FromType1);
3717   if (SCS2.First == ICK_Array_To_Pointer)
3718     FromType2 = S.Context.getArrayDecayedType(FromType2);
3719 
3720   // Canonicalize all of the types.
3721   FromType1 = S.Context.getCanonicalType(FromType1);
3722   ToType1 = S.Context.getCanonicalType(ToType1);
3723   FromType2 = S.Context.getCanonicalType(FromType2);
3724   ToType2 = S.Context.getCanonicalType(ToType2);
3725 
3726   // C++ [over.ics.rank]p4b3:
3727   //
3728   //   If class B is derived directly or indirectly from class A and
3729   //   class C is derived directly or indirectly from B,
3730   //
3731   // Compare based on pointer conversions.
3732   if (SCS1.Second == ICK_Pointer_Conversion &&
3733       SCS2.Second == ICK_Pointer_Conversion &&
3734       /*FIXME: Remove if Objective-C id conversions get their own rank*/
3735       FromType1->isPointerType() && FromType2->isPointerType() &&
3736       ToType1->isPointerType() && ToType2->isPointerType()) {
3737     QualType FromPointee1
3738       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3739     QualType ToPointee1
3740       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3741     QualType FromPointee2
3742       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3743     QualType ToPointee2
3744       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3745 
3746     //   -- conversion of C* to B* is better than conversion of C* to A*,
3747     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3748       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3749         return ImplicitConversionSequence::Better;
3750       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3751         return ImplicitConversionSequence::Worse;
3752     }
3753 
3754     //   -- conversion of B* to A* is better than conversion of C* to A*,
3755     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3756       if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3757         return ImplicitConversionSequence::Better;
3758       else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3759         return ImplicitConversionSequence::Worse;
3760     }
3761   } else if (SCS1.Second == ICK_Pointer_Conversion &&
3762              SCS2.Second == ICK_Pointer_Conversion) {
3763     const ObjCObjectPointerType *FromPtr1
3764       = FromType1->getAs<ObjCObjectPointerType>();
3765     const ObjCObjectPointerType *FromPtr2
3766       = FromType2->getAs<ObjCObjectPointerType>();
3767     const ObjCObjectPointerType *ToPtr1
3768       = ToType1->getAs<ObjCObjectPointerType>();
3769     const ObjCObjectPointerType *ToPtr2
3770       = ToType2->getAs<ObjCObjectPointerType>();
3771 
3772     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3773       // Apply the same conversion ranking rules for Objective-C pointer types
3774       // that we do for C++ pointers to class types. However, we employ the
3775       // Objective-C pseudo-subtyping relationship used for assignment of
3776       // Objective-C pointer types.
3777       bool FromAssignLeft
3778         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3779       bool FromAssignRight
3780         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3781       bool ToAssignLeft
3782         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3783       bool ToAssignRight
3784         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3785 
3786       // A conversion to an a non-id object pointer type or qualified 'id'
3787       // type is better than a conversion to 'id'.
3788       if (ToPtr1->isObjCIdType() &&
3789           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3790         return ImplicitConversionSequence::Worse;
3791       if (ToPtr2->isObjCIdType() &&
3792           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3793         return ImplicitConversionSequence::Better;
3794 
3795       // A conversion to a non-id object pointer type is better than a
3796       // conversion to a qualified 'id' type
3797       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3798         return ImplicitConversionSequence::Worse;
3799       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3800         return ImplicitConversionSequence::Better;
3801 
3802       // A conversion to an a non-Class object pointer type or qualified 'Class'
3803       // type is better than a conversion to 'Class'.
3804       if (ToPtr1->isObjCClassType() &&
3805           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3806         return ImplicitConversionSequence::Worse;
3807       if (ToPtr2->isObjCClassType() &&
3808           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3809         return ImplicitConversionSequence::Better;
3810 
3811       // A conversion to a non-Class object pointer type is better than a
3812       // conversion to a qualified 'Class' type.
3813       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3814         return ImplicitConversionSequence::Worse;
3815       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3816         return ImplicitConversionSequence::Better;
3817 
3818       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3819       if (S.Context.hasSameType(FromType1, FromType2) &&
3820           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3821           (ToAssignLeft != ToAssignRight))
3822         return ToAssignLeft? ImplicitConversionSequence::Worse
3823                            : ImplicitConversionSequence::Better;
3824 
3825       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3826       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3827           (FromAssignLeft != FromAssignRight))
3828         return FromAssignLeft? ImplicitConversionSequence::Better
3829         : ImplicitConversionSequence::Worse;
3830     }
3831   }
3832 
3833   // Ranking of member-pointer types.
3834   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3835       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3836       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3837     const MemberPointerType * FromMemPointer1 =
3838                                         FromType1->getAs<MemberPointerType>();
3839     const MemberPointerType * ToMemPointer1 =
3840                                           ToType1->getAs<MemberPointerType>();
3841     const MemberPointerType * FromMemPointer2 =
3842                                           FromType2->getAs<MemberPointerType>();
3843     const MemberPointerType * ToMemPointer2 =
3844                                           ToType2->getAs<MemberPointerType>();
3845     const Type *FromPointeeType1 = FromMemPointer1->getClass();
3846     const Type *ToPointeeType1 = ToMemPointer1->getClass();
3847     const Type *FromPointeeType2 = FromMemPointer2->getClass();
3848     const Type *ToPointeeType2 = ToMemPointer2->getClass();
3849     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3850     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3851     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3852     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3853     // conversion of A::* to B::* is better than conversion of A::* to C::*,
3854     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3855       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3856         return ImplicitConversionSequence::Worse;
3857       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3858         return ImplicitConversionSequence::Better;
3859     }
3860     // conversion of B::* to C::* is better than conversion of A::* to C::*
3861     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3862       if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3863         return ImplicitConversionSequence::Better;
3864       else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3865         return ImplicitConversionSequence::Worse;
3866     }
3867   }
3868 
3869   if (SCS1.Second == ICK_Derived_To_Base) {
3870     //   -- conversion of C to B is better than conversion of C to A,
3871     //   -- binding of an expression of type C to a reference of type
3872     //      B& is better than binding an expression of type C to a
3873     //      reference of type A&,
3874     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3875         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3876       if (S.IsDerivedFrom(ToType1, ToType2))
3877         return ImplicitConversionSequence::Better;
3878       else if (S.IsDerivedFrom(ToType2, ToType1))
3879         return ImplicitConversionSequence::Worse;
3880     }
3881 
3882     //   -- conversion of B to A is better than conversion of C to A.
3883     //   -- binding of an expression of type B to a reference of type
3884     //      A& is better than binding an expression of type C to a
3885     //      reference of type A&,
3886     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3887         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3888       if (S.IsDerivedFrom(FromType2, FromType1))
3889         return ImplicitConversionSequence::Better;
3890       else if (S.IsDerivedFrom(FromType1, FromType2))
3891         return ImplicitConversionSequence::Worse;
3892     }
3893   }
3894 
3895   return ImplicitConversionSequence::Indistinguishable;
3896 }
3897 
3898 /// \brief Determine whether the given type is valid, e.g., it is not an invalid
3899 /// C++ class.
3900 static bool isTypeValid(QualType T) {
3901   if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
3902     return !Record->isInvalidDecl();
3903 
3904   return true;
3905 }
3906 
3907 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
3908 /// determine whether they are reference-related,
3909 /// reference-compatible, reference-compatible with added
3910 /// qualification, or incompatible, for use in C++ initialization by
3911 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3912 /// type, and the first type (T1) is the pointee type of the reference
3913 /// type being initialized.
3914 Sema::ReferenceCompareResult
3915 Sema::CompareReferenceRelationship(SourceLocation Loc,
3916                                    QualType OrigT1, QualType OrigT2,
3917                                    bool &DerivedToBase,
3918                                    bool &ObjCConversion,
3919                                    bool &ObjCLifetimeConversion) {
3920   assert(!OrigT1->isReferenceType() &&
3921     "T1 must be the pointee type of the reference type");
3922   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3923 
3924   QualType T1 = Context.getCanonicalType(OrigT1);
3925   QualType T2 = Context.getCanonicalType(OrigT2);
3926   Qualifiers T1Quals, T2Quals;
3927   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3928   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3929 
3930   // C++ [dcl.init.ref]p4:
3931   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3932   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3933   //   T1 is a base class of T2.
3934   DerivedToBase = false;
3935   ObjCConversion = false;
3936   ObjCLifetimeConversion = false;
3937   if (UnqualT1 == UnqualT2) {
3938     // Nothing to do.
3939   } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3940              isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
3941              IsDerivedFrom(UnqualT2, UnqualT1))
3942     DerivedToBase = true;
3943   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3944            UnqualT2->isObjCObjectOrInterfaceType() &&
3945            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3946     ObjCConversion = true;
3947   else
3948     return Ref_Incompatible;
3949 
3950   // At this point, we know that T1 and T2 are reference-related (at
3951   // least).
3952 
3953   // If the type is an array type, promote the element qualifiers to the type
3954   // for comparison.
3955   if (isa<ArrayType>(T1) && T1Quals)
3956     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
3957   if (isa<ArrayType>(T2) && T2Quals)
3958     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
3959 
3960   // C++ [dcl.init.ref]p4:
3961   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
3962   //   reference-related to T2 and cv1 is the same cv-qualification
3963   //   as, or greater cv-qualification than, cv2. For purposes of
3964   //   overload resolution, cases for which cv1 is greater
3965   //   cv-qualification than cv2 are identified as
3966   //   reference-compatible with added qualification (see 13.3.3.2).
3967   //
3968   // Note that we also require equivalence of Objective-C GC and address-space
3969   // qualifiers when performing these computations, so that e.g., an int in
3970   // address space 1 is not reference-compatible with an int in address
3971   // space 2.
3972   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
3973       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
3974     T1Quals.removeObjCLifetime();
3975     T2Quals.removeObjCLifetime();
3976     ObjCLifetimeConversion = true;
3977   }
3978 
3979   if (T1Quals == T2Quals)
3980     return Ref_Compatible;
3981   else if (T1Quals.compatiblyIncludes(T2Quals))
3982     return Ref_Compatible_With_Added_Qualification;
3983   else
3984     return Ref_Related;
3985 }
3986 
3987 /// \brief Look for a user-defined conversion to an value reference-compatible
3988 ///        with DeclType. Return true if something definite is found.
3989 static bool
3990 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
3991                          QualType DeclType, SourceLocation DeclLoc,
3992                          Expr *Init, QualType T2, bool AllowRvalues,
3993                          bool AllowExplicit) {
3994   assert(T2->isRecordType() && "Can only find conversions of record types.");
3995   CXXRecordDecl *T2RecordDecl
3996     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
3997 
3998   OverloadCandidateSet CandidateSet(DeclLoc);
3999   std::pair<CXXRecordDecl::conversion_iterator,
4000             CXXRecordDecl::conversion_iterator>
4001     Conversions = T2RecordDecl->getVisibleConversionFunctions();
4002   for (CXXRecordDecl::conversion_iterator
4003          I = Conversions.first, E = Conversions.second; I != E; ++I) {
4004     NamedDecl *D = *I;
4005     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
4006     if (isa<UsingShadowDecl>(D))
4007       D = cast<UsingShadowDecl>(D)->getTargetDecl();
4008 
4009     FunctionTemplateDecl *ConvTemplate
4010       = dyn_cast<FunctionTemplateDecl>(D);
4011     CXXConversionDecl *Conv;
4012     if (ConvTemplate)
4013       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
4014     else
4015       Conv = cast<CXXConversionDecl>(D);
4016 
4017     // If this is an explicit conversion, and we're not allowed to consider
4018     // explicit conversions, skip it.
4019     if (!AllowExplicit && Conv->isExplicit())
4020       continue;
4021 
4022     if (AllowRvalues) {
4023       bool DerivedToBase = false;
4024       bool ObjCConversion = false;
4025       bool ObjCLifetimeConversion = false;
4026 
4027       // If we are initializing an rvalue reference, don't permit conversion
4028       // functions that return lvalues.
4029       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
4030         const ReferenceType *RefType
4031           = Conv->getConversionType()->getAs<LValueReferenceType>();
4032         if (RefType && !RefType->getPointeeType()->isFunctionType())
4033           continue;
4034       }
4035 
4036       if (!ConvTemplate &&
4037           S.CompareReferenceRelationship(
4038             DeclLoc,
4039             Conv->getConversionType().getNonReferenceType()
4040               .getUnqualifiedType(),
4041             DeclType.getNonReferenceType().getUnqualifiedType(),
4042             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4043           Sema::Ref_Incompatible)
4044         continue;
4045     } else {
4046       // If the conversion function doesn't return a reference type,
4047       // it can't be considered for this conversion. An rvalue reference
4048       // is only acceptable if its referencee is a function type.
4049 
4050       const ReferenceType *RefType =
4051         Conv->getConversionType()->getAs<ReferenceType>();
4052       if (!RefType ||
4053           (!RefType->isLValueReferenceType() &&
4054            !RefType->getPointeeType()->isFunctionType()))
4055         continue;
4056     }
4057 
4058     if (ConvTemplate)
4059       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4060                                        Init, DeclType, CandidateSet);
4061     else
4062       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4063                                DeclType, CandidateSet);
4064   }
4065 
4066   bool HadMultipleCandidates = (CandidateSet.size() > 1);
4067 
4068   OverloadCandidateSet::iterator Best;
4069   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4070   case OR_Success:
4071     // C++ [over.ics.ref]p1:
4072     //
4073     //   [...] If the parameter binds directly to the result of
4074     //   applying a conversion function to the argument
4075     //   expression, the implicit conversion sequence is a
4076     //   user-defined conversion sequence (13.3.3.1.2), with the
4077     //   second standard conversion sequence either an identity
4078     //   conversion or, if the conversion function returns an
4079     //   entity of a type that is a derived class of the parameter
4080     //   type, a derived-to-base Conversion.
4081     if (!Best->FinalConversion.DirectBinding)
4082       return false;
4083 
4084     ICS.setUserDefined();
4085     ICS.UserDefined.Before = Best->Conversions[0].Standard;
4086     ICS.UserDefined.After = Best->FinalConversion;
4087     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4088     ICS.UserDefined.ConversionFunction = Best->Function;
4089     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4090     ICS.UserDefined.EllipsisConversion = false;
4091     assert(ICS.UserDefined.After.ReferenceBinding &&
4092            ICS.UserDefined.After.DirectBinding &&
4093            "Expected a direct reference binding!");
4094     return true;
4095 
4096   case OR_Ambiguous:
4097     ICS.setAmbiguous();
4098     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4099          Cand != CandidateSet.end(); ++Cand)
4100       if (Cand->Viable)
4101         ICS.Ambiguous.addConversion(Cand->Function);
4102     return true;
4103 
4104   case OR_No_Viable_Function:
4105   case OR_Deleted:
4106     // There was no suitable conversion, or we found a deleted
4107     // conversion; continue with other checks.
4108     return false;
4109   }
4110 
4111   llvm_unreachable("Invalid OverloadResult!");
4112 }
4113 
4114 /// \brief Compute an implicit conversion sequence for reference
4115 /// initialization.
4116 static ImplicitConversionSequence
4117 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4118                  SourceLocation DeclLoc,
4119                  bool SuppressUserConversions,
4120                  bool AllowExplicit) {
4121   assert(DeclType->isReferenceType() && "Reference init needs a reference");
4122 
4123   // Most paths end in a failed conversion.
4124   ImplicitConversionSequence ICS;
4125   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4126 
4127   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4128   QualType T2 = Init->getType();
4129 
4130   // If the initializer is the address of an overloaded function, try
4131   // to resolve the overloaded function. If all goes well, T2 is the
4132   // type of the resulting function.
4133   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4134     DeclAccessPair Found;
4135     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4136                                                                 false, Found))
4137       T2 = Fn->getType();
4138   }
4139 
4140   // Compute some basic properties of the types and the initializer.
4141   bool isRValRef = DeclType->isRValueReferenceType();
4142   bool DerivedToBase = false;
4143   bool ObjCConversion = false;
4144   bool ObjCLifetimeConversion = false;
4145   Expr::Classification InitCategory = Init->Classify(S.Context);
4146   Sema::ReferenceCompareResult RefRelationship
4147     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4148                                      ObjCConversion, ObjCLifetimeConversion);
4149 
4150 
4151   // C++0x [dcl.init.ref]p5:
4152   //   A reference to type "cv1 T1" is initialized by an expression
4153   //   of type "cv2 T2" as follows:
4154 
4155   //     -- If reference is an lvalue reference and the initializer expression
4156   if (!isRValRef) {
4157     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4158     //        reference-compatible with "cv2 T2," or
4159     //
4160     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4161     if (InitCategory.isLValue() &&
4162         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4163       // C++ [over.ics.ref]p1:
4164       //   When a parameter of reference type binds directly (8.5.3)
4165       //   to an argument expression, the implicit conversion sequence
4166       //   is the identity conversion, unless the argument expression
4167       //   has a type that is a derived class of the parameter type,
4168       //   in which case the implicit conversion sequence is a
4169       //   derived-to-base Conversion (13.3.3.1).
4170       ICS.setStandard();
4171       ICS.Standard.First = ICK_Identity;
4172       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4173                          : ObjCConversion? ICK_Compatible_Conversion
4174                          : ICK_Identity;
4175       ICS.Standard.Third = ICK_Identity;
4176       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4177       ICS.Standard.setToType(0, T2);
4178       ICS.Standard.setToType(1, T1);
4179       ICS.Standard.setToType(2, T1);
4180       ICS.Standard.ReferenceBinding = true;
4181       ICS.Standard.DirectBinding = true;
4182       ICS.Standard.IsLvalueReference = !isRValRef;
4183       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4184       ICS.Standard.BindsToRvalue = false;
4185       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4186       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4187       ICS.Standard.CopyConstructor = 0;
4188 
4189       // Nothing more to do: the inaccessibility/ambiguity check for
4190       // derived-to-base conversions is suppressed when we're
4191       // computing the implicit conversion sequence (C++
4192       // [over.best.ics]p2).
4193       return ICS;
4194     }
4195 
4196     //       -- has a class type (i.e., T2 is a class type), where T1 is
4197     //          not reference-related to T2, and can be implicitly
4198     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4199     //          is reference-compatible with "cv3 T3" 92) (this
4200     //          conversion is selected by enumerating the applicable
4201     //          conversion functions (13.3.1.6) and choosing the best
4202     //          one through overload resolution (13.3)),
4203     if (!SuppressUserConversions && T2->isRecordType() &&
4204         !S.RequireCompleteType(DeclLoc, T2, 0) &&
4205         RefRelationship == Sema::Ref_Incompatible) {
4206       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4207                                    Init, T2, /*AllowRvalues=*/false,
4208                                    AllowExplicit))
4209         return ICS;
4210     }
4211   }
4212 
4213   //     -- Otherwise, the reference shall be an lvalue reference to a
4214   //        non-volatile const type (i.e., cv1 shall be const), or the reference
4215   //        shall be an rvalue reference.
4216   //
4217   // We actually handle one oddity of C++ [over.ics.ref] at this
4218   // point, which is that, due to p2 (which short-circuits reference
4219   // binding by only attempting a simple conversion for non-direct
4220   // bindings) and p3's strange wording, we allow a const volatile
4221   // reference to bind to an rvalue. Hence the check for the presence
4222   // of "const" rather than checking for "const" being the only
4223   // qualifier.
4224   // This is also the point where rvalue references and lvalue inits no longer
4225   // go together.
4226   if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4227     return ICS;
4228 
4229   //       -- If the initializer expression
4230   //
4231   //            -- is an xvalue, class prvalue, array prvalue or function
4232   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4233   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4234       (InitCategory.isXValue() ||
4235       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4236       (InitCategory.isLValue() && T2->isFunctionType()))) {
4237     ICS.setStandard();
4238     ICS.Standard.First = ICK_Identity;
4239     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4240                       : ObjCConversion? ICK_Compatible_Conversion
4241                       : ICK_Identity;
4242     ICS.Standard.Third = ICK_Identity;
4243     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4244     ICS.Standard.setToType(0, T2);
4245     ICS.Standard.setToType(1, T1);
4246     ICS.Standard.setToType(2, T1);
4247     ICS.Standard.ReferenceBinding = true;
4248     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4249     // binding unless we're binding to a class prvalue.
4250     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4251     // allow the use of rvalue references in C++98/03 for the benefit of
4252     // standard library implementors; therefore, we need the xvalue check here.
4253     ICS.Standard.DirectBinding =
4254       S.getLangOpts().CPlusPlus11 ||
4255       (InitCategory.isPRValue() && !T2->isRecordType());
4256     ICS.Standard.IsLvalueReference = !isRValRef;
4257     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4258     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4259     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4260     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4261     ICS.Standard.CopyConstructor = 0;
4262     return ICS;
4263   }
4264 
4265   //            -- has a class type (i.e., T2 is a class type), where T1 is not
4266   //               reference-related to T2, and can be implicitly converted to
4267   //               an xvalue, class prvalue, or function lvalue of type
4268   //               "cv3 T3", where "cv1 T1" is reference-compatible with
4269   //               "cv3 T3",
4270   //
4271   //          then the reference is bound to the value of the initializer
4272   //          expression in the first case and to the result of the conversion
4273   //          in the second case (or, in either case, to an appropriate base
4274   //          class subobject).
4275   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4276       T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4277       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4278                                Init, T2, /*AllowRvalues=*/true,
4279                                AllowExplicit)) {
4280     // In the second case, if the reference is an rvalue reference
4281     // and the second standard conversion sequence of the
4282     // user-defined conversion sequence includes an lvalue-to-rvalue
4283     // conversion, the program is ill-formed.
4284     if (ICS.isUserDefined() && isRValRef &&
4285         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4286       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4287 
4288     return ICS;
4289   }
4290 
4291   //       -- Otherwise, a temporary of type "cv1 T1" is created and
4292   //          initialized from the initializer expression using the
4293   //          rules for a non-reference copy initialization (8.5). The
4294   //          reference is then bound to the temporary. If T1 is
4295   //          reference-related to T2, cv1 must be the same
4296   //          cv-qualification as, or greater cv-qualification than,
4297   //          cv2; otherwise, the program is ill-formed.
4298   if (RefRelationship == Sema::Ref_Related) {
4299     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4300     // we would be reference-compatible or reference-compatible with
4301     // added qualification. But that wasn't the case, so the reference
4302     // initialization fails.
4303     //
4304     // Note that we only want to check address spaces and cvr-qualifiers here.
4305     // ObjC GC and lifetime qualifiers aren't important.
4306     Qualifiers T1Quals = T1.getQualifiers();
4307     Qualifiers T2Quals = T2.getQualifiers();
4308     T1Quals.removeObjCGCAttr();
4309     T1Quals.removeObjCLifetime();
4310     T2Quals.removeObjCGCAttr();
4311     T2Quals.removeObjCLifetime();
4312     if (!T1Quals.compatiblyIncludes(T2Quals))
4313       return ICS;
4314   }
4315 
4316   // If at least one of the types is a class type, the types are not
4317   // related, and we aren't allowed any user conversions, the
4318   // reference binding fails. This case is important for breaking
4319   // recursion, since TryImplicitConversion below will attempt to
4320   // create a temporary through the use of a copy constructor.
4321   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4322       (T1->isRecordType() || T2->isRecordType()))
4323     return ICS;
4324 
4325   // If T1 is reference-related to T2 and the reference is an rvalue
4326   // reference, the initializer expression shall not be an lvalue.
4327   if (RefRelationship >= Sema::Ref_Related &&
4328       isRValRef && Init->Classify(S.Context).isLValue())
4329     return ICS;
4330 
4331   // C++ [over.ics.ref]p2:
4332   //   When a parameter of reference type is not bound directly to
4333   //   an argument expression, the conversion sequence is the one
4334   //   required to convert the argument expression to the
4335   //   underlying type of the reference according to
4336   //   13.3.3.1. Conceptually, this conversion sequence corresponds
4337   //   to copy-initializing a temporary of the underlying type with
4338   //   the argument expression. Any difference in top-level
4339   //   cv-qualification is subsumed by the initialization itself
4340   //   and does not constitute a conversion.
4341   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4342                               /*AllowExplicit=*/false,
4343                               /*InOverloadResolution=*/false,
4344                               /*CStyle=*/false,
4345                               /*AllowObjCWritebackConversion=*/false);
4346 
4347   // Of course, that's still a reference binding.
4348   if (ICS.isStandard()) {
4349     ICS.Standard.ReferenceBinding = true;
4350     ICS.Standard.IsLvalueReference = !isRValRef;
4351     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4352     ICS.Standard.BindsToRvalue = true;
4353     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4354     ICS.Standard.ObjCLifetimeConversionBinding = false;
4355   } else if (ICS.isUserDefined()) {
4356     // Don't allow rvalue references to bind to lvalues.
4357     if (DeclType->isRValueReferenceType()) {
4358       if (const ReferenceType *RefType
4359             = ICS.UserDefined.ConversionFunction->getResultType()
4360                 ->getAs<LValueReferenceType>()) {
4361         if (!RefType->getPointeeType()->isFunctionType()) {
4362           ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4363                      DeclType);
4364           return ICS;
4365         }
4366       }
4367     }
4368 
4369     ICS.UserDefined.After.ReferenceBinding = true;
4370     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4371     ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4372     ICS.UserDefined.After.BindsToRvalue = true;
4373     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4374     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4375   }
4376 
4377   return ICS;
4378 }
4379 
4380 static ImplicitConversionSequence
4381 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4382                       bool SuppressUserConversions,
4383                       bool InOverloadResolution,
4384                       bool AllowObjCWritebackConversion,
4385                       bool AllowExplicit = false);
4386 
4387 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4388 /// initializer list From.
4389 static ImplicitConversionSequence
4390 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4391                   bool SuppressUserConversions,
4392                   bool InOverloadResolution,
4393                   bool AllowObjCWritebackConversion) {
4394   // C++11 [over.ics.list]p1:
4395   //   When an argument is an initializer list, it is not an expression and
4396   //   special rules apply for converting it to a parameter type.
4397 
4398   ImplicitConversionSequence Result;
4399   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4400   Result.setListInitializationSequence();
4401 
4402   // We need a complete type for what follows. Incomplete types can never be
4403   // initialized from init lists.
4404   if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4405     return Result;
4406 
4407   // C++11 [over.ics.list]p2:
4408   //   If the parameter type is std::initializer_list<X> or "array of X" and
4409   //   all the elements can be implicitly converted to X, the implicit
4410   //   conversion sequence is the worst conversion necessary to convert an
4411   //   element of the list to X.
4412   bool toStdInitializerList = false;
4413   QualType X;
4414   if (ToType->isArrayType())
4415     X = S.Context.getAsArrayType(ToType)->getElementType();
4416   else
4417     toStdInitializerList = S.isStdInitializerList(ToType, &X);
4418   if (!X.isNull()) {
4419     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4420       Expr *Init = From->getInit(i);
4421       ImplicitConversionSequence ICS =
4422           TryCopyInitialization(S, Init, X, SuppressUserConversions,
4423                                 InOverloadResolution,
4424                                 AllowObjCWritebackConversion);
4425       // If a single element isn't convertible, fail.
4426       if (ICS.isBad()) {
4427         Result = ICS;
4428         break;
4429       }
4430       // Otherwise, look for the worst conversion.
4431       if (Result.isBad() ||
4432           CompareImplicitConversionSequences(S, ICS, Result) ==
4433               ImplicitConversionSequence::Worse)
4434         Result = ICS;
4435     }
4436 
4437     // For an empty list, we won't have computed any conversion sequence.
4438     // Introduce the identity conversion sequence.
4439     if (From->getNumInits() == 0) {
4440       Result.setStandard();
4441       Result.Standard.setAsIdentityConversion();
4442       Result.Standard.setFromType(ToType);
4443       Result.Standard.setAllToTypes(ToType);
4444     }
4445 
4446     Result.setListInitializationSequence();
4447     Result.setStdInitializerListElement(toStdInitializerList);
4448     return Result;
4449   }
4450 
4451   // C++11 [over.ics.list]p3:
4452   //   Otherwise, if the parameter is a non-aggregate class X and overload
4453   //   resolution chooses a single best constructor [...] the implicit
4454   //   conversion sequence is a user-defined conversion sequence. If multiple
4455   //   constructors are viable but none is better than the others, the
4456   //   implicit conversion sequence is a user-defined conversion sequence.
4457   if (ToType->isRecordType() && !ToType->isAggregateType()) {
4458     // This function can deal with initializer lists.
4459     Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4460                                       /*AllowExplicit=*/false,
4461                                       InOverloadResolution, /*CStyle=*/false,
4462                                       AllowObjCWritebackConversion);
4463     Result.setListInitializationSequence();
4464     return Result;
4465   }
4466 
4467   // C++11 [over.ics.list]p4:
4468   //   Otherwise, if the parameter has an aggregate type which can be
4469   //   initialized from the initializer list [...] the implicit conversion
4470   //   sequence is a user-defined conversion sequence.
4471   if (ToType->isAggregateType()) {
4472     // Type is an aggregate, argument is an init list. At this point it comes
4473     // down to checking whether the initialization works.
4474     // FIXME: Find out whether this parameter is consumed or not.
4475     InitializedEntity Entity =
4476         InitializedEntity::InitializeParameter(S.Context, ToType,
4477                                                /*Consumed=*/false);
4478     if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4479       Result.setUserDefined();
4480       Result.UserDefined.Before.setAsIdentityConversion();
4481       // Initializer lists don't have a type.
4482       Result.UserDefined.Before.setFromType(QualType());
4483       Result.UserDefined.Before.setAllToTypes(QualType());
4484 
4485       Result.UserDefined.After.setAsIdentityConversion();
4486       Result.UserDefined.After.setFromType(ToType);
4487       Result.UserDefined.After.setAllToTypes(ToType);
4488       Result.UserDefined.ConversionFunction = 0;
4489     }
4490     return Result;
4491   }
4492 
4493   // C++11 [over.ics.list]p5:
4494   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4495   if (ToType->isReferenceType()) {
4496     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4497     // mention initializer lists in any way. So we go by what list-
4498     // initialization would do and try to extrapolate from that.
4499 
4500     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4501 
4502     // If the initializer list has a single element that is reference-related
4503     // to the parameter type, we initialize the reference from that.
4504     if (From->getNumInits() == 1) {
4505       Expr *Init = From->getInit(0);
4506 
4507       QualType T2 = Init->getType();
4508 
4509       // If the initializer is the address of an overloaded function, try
4510       // to resolve the overloaded function. If all goes well, T2 is the
4511       // type of the resulting function.
4512       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4513         DeclAccessPair Found;
4514         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4515                                    Init, ToType, false, Found))
4516           T2 = Fn->getType();
4517       }
4518 
4519       // Compute some basic properties of the types and the initializer.
4520       bool dummy1 = false;
4521       bool dummy2 = false;
4522       bool dummy3 = false;
4523       Sema::ReferenceCompareResult RefRelationship
4524         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4525                                          dummy2, dummy3);
4526 
4527       if (RefRelationship >= Sema::Ref_Related)
4528         return TryReferenceInit(S, Init, ToType,
4529                                 /*FIXME:*/From->getLocStart(),
4530                                 SuppressUserConversions,
4531                                 /*AllowExplicit=*/false);
4532     }
4533 
4534     // Otherwise, we bind the reference to a temporary created from the
4535     // initializer list.
4536     Result = TryListConversion(S, From, T1, SuppressUserConversions,
4537                                InOverloadResolution,
4538                                AllowObjCWritebackConversion);
4539     if (Result.isFailure())
4540       return Result;
4541     assert(!Result.isEllipsis() &&
4542            "Sub-initialization cannot result in ellipsis conversion.");
4543 
4544     // Can we even bind to a temporary?
4545     if (ToType->isRValueReferenceType() ||
4546         (T1.isConstQualified() && !T1.isVolatileQualified())) {
4547       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4548                                             Result.UserDefined.After;
4549       SCS.ReferenceBinding = true;
4550       SCS.IsLvalueReference = ToType->isLValueReferenceType();
4551       SCS.BindsToRvalue = true;
4552       SCS.BindsToFunctionLvalue = false;
4553       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4554       SCS.ObjCLifetimeConversionBinding = false;
4555     } else
4556       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4557                     From, ToType);
4558     return Result;
4559   }
4560 
4561   // C++11 [over.ics.list]p6:
4562   //   Otherwise, if the parameter type is not a class:
4563   if (!ToType->isRecordType()) {
4564     //    - if the initializer list has one element, the implicit conversion
4565     //      sequence is the one required to convert the element to the
4566     //      parameter type.
4567     unsigned NumInits = From->getNumInits();
4568     if (NumInits == 1)
4569       Result = TryCopyInitialization(S, From->getInit(0), ToType,
4570                                      SuppressUserConversions,
4571                                      InOverloadResolution,
4572                                      AllowObjCWritebackConversion);
4573     //    - if the initializer list has no elements, the implicit conversion
4574     //      sequence is the identity conversion.
4575     else if (NumInits == 0) {
4576       Result.setStandard();
4577       Result.Standard.setAsIdentityConversion();
4578       Result.Standard.setFromType(ToType);
4579       Result.Standard.setAllToTypes(ToType);
4580     }
4581     Result.setListInitializationSequence();
4582     return Result;
4583   }
4584 
4585   // C++11 [over.ics.list]p7:
4586   //   In all cases other than those enumerated above, no conversion is possible
4587   return Result;
4588 }
4589 
4590 /// TryCopyInitialization - Try to copy-initialize a value of type
4591 /// ToType from the expression From. Return the implicit conversion
4592 /// sequence required to pass this argument, which may be a bad
4593 /// conversion sequence (meaning that the argument cannot be passed to
4594 /// a parameter of this type). If @p SuppressUserConversions, then we
4595 /// do not permit any user-defined conversion sequences.
4596 static ImplicitConversionSequence
4597 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4598                       bool SuppressUserConversions,
4599                       bool InOverloadResolution,
4600                       bool AllowObjCWritebackConversion,
4601                       bool AllowExplicit) {
4602   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4603     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4604                              InOverloadResolution,AllowObjCWritebackConversion);
4605 
4606   if (ToType->isReferenceType())
4607     return TryReferenceInit(S, From, ToType,
4608                             /*FIXME:*/From->getLocStart(),
4609                             SuppressUserConversions,
4610                             AllowExplicit);
4611 
4612   return TryImplicitConversion(S, From, ToType,
4613                                SuppressUserConversions,
4614                                /*AllowExplicit=*/false,
4615                                InOverloadResolution,
4616                                /*CStyle=*/false,
4617                                AllowObjCWritebackConversion);
4618 }
4619 
4620 static bool TryCopyInitialization(const CanQualType FromQTy,
4621                                   const CanQualType ToQTy,
4622                                   Sema &S,
4623                                   SourceLocation Loc,
4624                                   ExprValueKind FromVK) {
4625   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4626   ImplicitConversionSequence ICS =
4627     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4628 
4629   return !ICS.isBad();
4630 }
4631 
4632 /// TryObjectArgumentInitialization - Try to initialize the object
4633 /// parameter of the given member function (@c Method) from the
4634 /// expression @p From.
4635 static ImplicitConversionSequence
4636 TryObjectArgumentInitialization(Sema &S, QualType FromType,
4637                                 Expr::Classification FromClassification,
4638                                 CXXMethodDecl *Method,
4639                                 CXXRecordDecl *ActingContext) {
4640   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4641   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4642   //                 const volatile object.
4643   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4644     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4645   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4646 
4647   // Set up the conversion sequence as a "bad" conversion, to allow us
4648   // to exit early.
4649   ImplicitConversionSequence ICS;
4650 
4651   // We need to have an object of class type.
4652   if (const PointerType *PT = FromType->getAs<PointerType>()) {
4653     FromType = PT->getPointeeType();
4654 
4655     // When we had a pointer, it's implicitly dereferenced, so we
4656     // better have an lvalue.
4657     assert(FromClassification.isLValue());
4658   }
4659 
4660   assert(FromType->isRecordType());
4661 
4662   // C++0x [over.match.funcs]p4:
4663   //   For non-static member functions, the type of the implicit object
4664   //   parameter is
4665   //
4666   //     - "lvalue reference to cv X" for functions declared without a
4667   //        ref-qualifier or with the & ref-qualifier
4668   //     - "rvalue reference to cv X" for functions declared with the &&
4669   //        ref-qualifier
4670   //
4671   // where X is the class of which the function is a member and cv is the
4672   // cv-qualification on the member function declaration.
4673   //
4674   // However, when finding an implicit conversion sequence for the argument, we
4675   // are not allowed to create temporaries or perform user-defined conversions
4676   // (C++ [over.match.funcs]p5). We perform a simplified version of
4677   // reference binding here, that allows class rvalues to bind to
4678   // non-constant references.
4679 
4680   // First check the qualifiers.
4681   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4682   if (ImplicitParamType.getCVRQualifiers()
4683                                     != FromTypeCanon.getLocalCVRQualifiers() &&
4684       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4685     ICS.setBad(BadConversionSequence::bad_qualifiers,
4686                FromType, ImplicitParamType);
4687     return ICS;
4688   }
4689 
4690   // Check that we have either the same type or a derived type. It
4691   // affects the conversion rank.
4692   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4693   ImplicitConversionKind SecondKind;
4694   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4695     SecondKind = ICK_Identity;
4696   } else if (S.IsDerivedFrom(FromType, ClassType))
4697     SecondKind = ICK_Derived_To_Base;
4698   else {
4699     ICS.setBad(BadConversionSequence::unrelated_class,
4700                FromType, ImplicitParamType);
4701     return ICS;
4702   }
4703 
4704   // Check the ref-qualifier.
4705   switch (Method->getRefQualifier()) {
4706   case RQ_None:
4707     // Do nothing; we don't care about lvalueness or rvalueness.
4708     break;
4709 
4710   case RQ_LValue:
4711     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4712       // non-const lvalue reference cannot bind to an rvalue
4713       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4714                  ImplicitParamType);
4715       return ICS;
4716     }
4717     break;
4718 
4719   case RQ_RValue:
4720     if (!FromClassification.isRValue()) {
4721       // rvalue reference cannot bind to an lvalue
4722       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4723                  ImplicitParamType);
4724       return ICS;
4725     }
4726     break;
4727   }
4728 
4729   // Success. Mark this as a reference binding.
4730   ICS.setStandard();
4731   ICS.Standard.setAsIdentityConversion();
4732   ICS.Standard.Second = SecondKind;
4733   ICS.Standard.setFromType(FromType);
4734   ICS.Standard.setAllToTypes(ImplicitParamType);
4735   ICS.Standard.ReferenceBinding = true;
4736   ICS.Standard.DirectBinding = true;
4737   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4738   ICS.Standard.BindsToFunctionLvalue = false;
4739   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4740   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4741     = (Method->getRefQualifier() == RQ_None);
4742   return ICS;
4743 }
4744 
4745 /// PerformObjectArgumentInitialization - Perform initialization of
4746 /// the implicit object parameter for the given Method with the given
4747 /// expression.
4748 ExprResult
4749 Sema::PerformObjectArgumentInitialization(Expr *From,
4750                                           NestedNameSpecifier *Qualifier,
4751                                           NamedDecl *FoundDecl,
4752                                           CXXMethodDecl *Method) {
4753   QualType FromRecordType, DestType;
4754   QualType ImplicitParamRecordType  =
4755     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4756 
4757   Expr::Classification FromClassification;
4758   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4759     FromRecordType = PT->getPointeeType();
4760     DestType = Method->getThisType(Context);
4761     FromClassification = Expr::Classification::makeSimpleLValue();
4762   } else {
4763     FromRecordType = From->getType();
4764     DestType = ImplicitParamRecordType;
4765     FromClassification = From->Classify(Context);
4766   }
4767 
4768   // Note that we always use the true parent context when performing
4769   // the actual argument initialization.
4770   ImplicitConversionSequence ICS
4771     = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4772                                       Method, Method->getParent());
4773   if (ICS.isBad()) {
4774     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4775       Qualifiers FromQs = FromRecordType.getQualifiers();
4776       Qualifiers ToQs = DestType.getQualifiers();
4777       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4778       if (CVR) {
4779         Diag(From->getLocStart(),
4780              diag::err_member_function_call_bad_cvr)
4781           << Method->getDeclName() << FromRecordType << (CVR - 1)
4782           << From->getSourceRange();
4783         Diag(Method->getLocation(), diag::note_previous_decl)
4784           << Method->getDeclName();
4785         return ExprError();
4786       }
4787     }
4788 
4789     return Diag(From->getLocStart(),
4790                 diag::err_implicit_object_parameter_init)
4791        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4792   }
4793 
4794   if (ICS.Standard.Second == ICK_Derived_To_Base) {
4795     ExprResult FromRes =
4796       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4797     if (FromRes.isInvalid())
4798       return ExprError();
4799     From = FromRes.take();
4800   }
4801 
4802   if (!Context.hasSameType(From->getType(), DestType))
4803     From = ImpCastExprToType(From, DestType, CK_NoOp,
4804                              From->getValueKind()).take();
4805   return Owned(From);
4806 }
4807 
4808 /// TryContextuallyConvertToBool - Attempt to contextually convert the
4809 /// expression From to bool (C++0x [conv]p3).
4810 static ImplicitConversionSequence
4811 TryContextuallyConvertToBool(Sema &S, Expr *From) {
4812   // FIXME: This is pretty broken.
4813   return TryImplicitConversion(S, From, S.Context.BoolTy,
4814                                // FIXME: Are these flags correct?
4815                                /*SuppressUserConversions=*/false,
4816                                /*AllowExplicit=*/true,
4817                                /*InOverloadResolution=*/false,
4818                                /*CStyle=*/false,
4819                                /*AllowObjCWritebackConversion=*/false);
4820 }
4821 
4822 /// PerformContextuallyConvertToBool - Perform a contextual conversion
4823 /// of the expression From to bool (C++0x [conv]p3).
4824 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4825   if (checkPlaceholderForOverload(*this, From))
4826     return ExprError();
4827 
4828   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4829   if (!ICS.isBad())
4830     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4831 
4832   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4833     return Diag(From->getLocStart(),
4834                 diag::err_typecheck_bool_condition)
4835                   << From->getType() << From->getSourceRange();
4836   return ExprError();
4837 }
4838 
4839 /// Check that the specified conversion is permitted in a converted constant
4840 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
4841 /// is acceptable.
4842 static bool CheckConvertedConstantConversions(Sema &S,
4843                                               StandardConversionSequence &SCS) {
4844   // Since we know that the target type is an integral or unscoped enumeration
4845   // type, most conversion kinds are impossible. All possible First and Third
4846   // conversions are fine.
4847   switch (SCS.Second) {
4848   case ICK_Identity:
4849   case ICK_Integral_Promotion:
4850   case ICK_Integral_Conversion:
4851   case ICK_Zero_Event_Conversion:
4852     return true;
4853 
4854   case ICK_Boolean_Conversion:
4855     // Conversion from an integral or unscoped enumeration type to bool is
4856     // classified as ICK_Boolean_Conversion, but it's also an integral
4857     // conversion, so it's permitted in a converted constant expression.
4858     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4859            SCS.getToType(2)->isBooleanType();
4860 
4861   case ICK_Floating_Integral:
4862   case ICK_Complex_Real:
4863     return false;
4864 
4865   case ICK_Lvalue_To_Rvalue:
4866   case ICK_Array_To_Pointer:
4867   case ICK_Function_To_Pointer:
4868   case ICK_NoReturn_Adjustment:
4869   case ICK_Qualification:
4870   case ICK_Compatible_Conversion:
4871   case ICK_Vector_Conversion:
4872   case ICK_Vector_Splat:
4873   case ICK_Derived_To_Base:
4874   case ICK_Pointer_Conversion:
4875   case ICK_Pointer_Member:
4876   case ICK_Block_Pointer_Conversion:
4877   case ICK_Writeback_Conversion:
4878   case ICK_Floating_Promotion:
4879   case ICK_Complex_Promotion:
4880   case ICK_Complex_Conversion:
4881   case ICK_Floating_Conversion:
4882   case ICK_TransparentUnionConversion:
4883     llvm_unreachable("unexpected second conversion kind");
4884 
4885   case ICK_Num_Conversion_Kinds:
4886     break;
4887   }
4888 
4889   llvm_unreachable("unknown conversion kind");
4890 }
4891 
4892 /// CheckConvertedConstantExpression - Check that the expression From is a
4893 /// converted constant expression of type T, perform the conversion and produce
4894 /// the converted expression, per C++11 [expr.const]p3.
4895 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4896                                                   llvm::APSInt &Value,
4897                                                   CCEKind CCE) {
4898   assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
4899   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4900 
4901   if (checkPlaceholderForOverload(*this, From))
4902     return ExprError();
4903 
4904   // C++11 [expr.const]p3 with proposed wording fixes:
4905   //  A converted constant expression of type T is a core constant expression,
4906   //  implicitly converted to a prvalue of type T, where the converted
4907   //  expression is a literal constant expression and the implicit conversion
4908   //  sequence contains only user-defined conversions, lvalue-to-rvalue
4909   //  conversions, integral promotions, and integral conversions other than
4910   //  narrowing conversions.
4911   ImplicitConversionSequence ICS =
4912     TryImplicitConversion(From, T,
4913                           /*SuppressUserConversions=*/false,
4914                           /*AllowExplicit=*/false,
4915                           /*InOverloadResolution=*/false,
4916                           /*CStyle=*/false,
4917                           /*AllowObjcWritebackConversion=*/false);
4918   StandardConversionSequence *SCS = 0;
4919   switch (ICS.getKind()) {
4920   case ImplicitConversionSequence::StandardConversion:
4921     if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4922       return Diag(From->getLocStart(),
4923                   diag::err_typecheck_converted_constant_expression_disallowed)
4924                << From->getType() << From->getSourceRange() << T;
4925     SCS = &ICS.Standard;
4926     break;
4927   case ImplicitConversionSequence::UserDefinedConversion:
4928     // We are converting from class type to an integral or enumeration type, so
4929     // the Before sequence must be trivial.
4930     if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4931       return Diag(From->getLocStart(),
4932                   diag::err_typecheck_converted_constant_expression_disallowed)
4933                << From->getType() << From->getSourceRange() << T;
4934     SCS = &ICS.UserDefined.After;
4935     break;
4936   case ImplicitConversionSequence::AmbiguousConversion:
4937   case ImplicitConversionSequence::BadConversion:
4938     if (!DiagnoseMultipleUserDefinedConversion(From, T))
4939       return Diag(From->getLocStart(),
4940                   diag::err_typecheck_converted_constant_expression)
4941                     << From->getType() << From->getSourceRange() << T;
4942     return ExprError();
4943 
4944   case ImplicitConversionSequence::EllipsisConversion:
4945     llvm_unreachable("ellipsis conversion in converted constant expression");
4946   }
4947 
4948   ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4949   if (Result.isInvalid())
4950     return Result;
4951 
4952   // Check for a narrowing implicit conversion.
4953   APValue PreNarrowingValue;
4954   QualType PreNarrowingType;
4955   switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
4956                                 PreNarrowingType)) {
4957   case NK_Variable_Narrowing:
4958     // Implicit conversion to a narrower type, and the value is not a constant
4959     // expression. We'll diagnose this in a moment.
4960   case NK_Not_Narrowing:
4961     break;
4962 
4963   case NK_Constant_Narrowing:
4964     Diag(From->getLocStart(),
4965          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4966                              diag::err_cce_narrowing)
4967       << CCE << /*Constant*/1
4968       << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
4969     break;
4970 
4971   case NK_Type_Narrowing:
4972     Diag(From->getLocStart(),
4973          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4974                              diag::err_cce_narrowing)
4975       << CCE << /*Constant*/0 << From->getType() << T;
4976     break;
4977   }
4978 
4979   // Check the expression is a constant expression.
4980   SmallVector<PartialDiagnosticAt, 8> Notes;
4981   Expr::EvalResult Eval;
4982   Eval.Diag = &Notes;
4983 
4984   if (!Result.get()->EvaluateAsRValue(Eval, Context) || !Eval.Val.isInt()) {
4985     // The expression can't be folded, so we can't keep it at this position in
4986     // the AST.
4987     Result = ExprError();
4988   } else {
4989     Value = Eval.Val.getInt();
4990 
4991     if (Notes.empty()) {
4992       // It's a constant expression.
4993       return Result;
4994     }
4995   }
4996 
4997   // It's not a constant expression. Produce an appropriate diagnostic.
4998   if (Notes.size() == 1 &&
4999       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
5000     Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
5001   else {
5002     Diag(From->getLocStart(), diag::err_expr_not_cce)
5003       << CCE << From->getSourceRange();
5004     for (unsigned I = 0; I < Notes.size(); ++I)
5005       Diag(Notes[I].first, Notes[I].second);
5006   }
5007   return Result;
5008 }
5009 
5010 /// dropPointerConversions - If the given standard conversion sequence
5011 /// involves any pointer conversions, remove them.  This may change
5012 /// the result type of the conversion sequence.
5013 static void dropPointerConversion(StandardConversionSequence &SCS) {
5014   if (SCS.Second == ICK_Pointer_Conversion) {
5015     SCS.Second = ICK_Identity;
5016     SCS.Third = ICK_Identity;
5017     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
5018   }
5019 }
5020 
5021 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
5022 /// convert the expression From to an Objective-C pointer type.
5023 static ImplicitConversionSequence
5024 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
5025   // Do an implicit conversion to 'id'.
5026   QualType Ty = S.Context.getObjCIdType();
5027   ImplicitConversionSequence ICS
5028     = TryImplicitConversion(S, From, Ty,
5029                             // FIXME: Are these flags correct?
5030                             /*SuppressUserConversions=*/false,
5031                             /*AllowExplicit=*/true,
5032                             /*InOverloadResolution=*/false,
5033                             /*CStyle=*/false,
5034                             /*AllowObjCWritebackConversion=*/false);
5035 
5036   // Strip off any final conversions to 'id'.
5037   switch (ICS.getKind()) {
5038   case ImplicitConversionSequence::BadConversion:
5039   case ImplicitConversionSequence::AmbiguousConversion:
5040   case ImplicitConversionSequence::EllipsisConversion:
5041     break;
5042 
5043   case ImplicitConversionSequence::UserDefinedConversion:
5044     dropPointerConversion(ICS.UserDefined.After);
5045     break;
5046 
5047   case ImplicitConversionSequence::StandardConversion:
5048     dropPointerConversion(ICS.Standard);
5049     break;
5050   }
5051 
5052   return ICS;
5053 }
5054 
5055 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
5056 /// conversion of the expression From to an Objective-C pointer type.
5057 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5058   if (checkPlaceholderForOverload(*this, From))
5059     return ExprError();
5060 
5061   QualType Ty = Context.getObjCIdType();
5062   ImplicitConversionSequence ICS =
5063     TryContextuallyConvertToObjCPointer(*this, From);
5064   if (!ICS.isBad())
5065     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5066   return ExprError();
5067 }
5068 
5069 /// Determine whether the provided type is an integral type, or an enumeration
5070 /// type of a permitted flavor.
5071 bool Sema::ICEConvertDiagnoser::match(QualType T) {
5072   return AllowScopedEnumerations ? T->isIntegralOrEnumerationType()
5073                                  : T->isIntegralOrUnscopedEnumerationType();
5074 }
5075 
5076 static ExprResult
5077 diagnoseAmbiguousConversion(Sema &SemaRef, SourceLocation Loc, Expr *From,
5078                             Sema::ContextualImplicitConverter &Converter,
5079                             QualType T, UnresolvedSetImpl &ViableConversions) {
5080 
5081   if (Converter.Suppress)
5082     return ExprError();
5083 
5084   Converter.diagnoseAmbiguous(SemaRef, Loc, T) << From->getSourceRange();
5085   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5086     CXXConversionDecl *Conv =
5087         cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5088     QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5089     Converter.noteAmbiguous(SemaRef, Conv, ConvTy);
5090   }
5091   return SemaRef.Owned(From);
5092 }
5093 
5094 static bool
5095 diagnoseNoViableConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5096                            Sema::ContextualImplicitConverter &Converter,
5097                            QualType T, bool HadMultipleCandidates,
5098                            UnresolvedSetImpl &ExplicitConversions) {
5099   if (ExplicitConversions.size() == 1 && !Converter.Suppress) {
5100     DeclAccessPair Found = ExplicitConversions[0];
5101     CXXConversionDecl *Conversion =
5102         cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5103 
5104     // The user probably meant to invoke the given explicit
5105     // conversion; use it.
5106     QualType ConvTy = Conversion->getConversionType().getNonReferenceType();
5107     std::string TypeStr;
5108     ConvTy.getAsStringInternal(TypeStr, SemaRef.getPrintingPolicy());
5109 
5110     Converter.diagnoseExplicitConv(SemaRef, Loc, T, ConvTy)
5111         << FixItHint::CreateInsertion(From->getLocStart(),
5112                                       "static_cast<" + TypeStr + ">(")
5113         << FixItHint::CreateInsertion(
5114                SemaRef.PP.getLocForEndOfToken(From->getLocEnd()), ")");
5115     Converter.noteExplicitConv(SemaRef, Conversion, ConvTy);
5116 
5117     // If we aren't in a SFINAE context, build a call to the
5118     // explicit conversion function.
5119     if (SemaRef.isSFINAEContext())
5120       return true;
5121 
5122     SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5123     ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5124                                                        HadMultipleCandidates);
5125     if (Result.isInvalid())
5126       return true;
5127     // Record usage of conversion in an implicit cast.
5128     From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5129                                     CK_UserDefinedConversion, Result.get(), 0,
5130                                     Result.get()->getValueKind());
5131   }
5132   return false;
5133 }
5134 
5135 static bool recordConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5136                              Sema::ContextualImplicitConverter &Converter,
5137                              QualType T, bool HadMultipleCandidates,
5138                              DeclAccessPair &Found) {
5139   CXXConversionDecl *Conversion =
5140       cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5141   SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5142 
5143   QualType ToType = Conversion->getConversionType().getNonReferenceType();
5144   if (!Converter.SuppressConversion) {
5145     if (SemaRef.isSFINAEContext())
5146       return true;
5147 
5148     Converter.diagnoseConversion(SemaRef, Loc, T, ToType)
5149         << From->getSourceRange();
5150   }
5151 
5152   ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5153                                                      HadMultipleCandidates);
5154   if (Result.isInvalid())
5155     return true;
5156   // Record usage of conversion in an implicit cast.
5157   From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5158                                   CK_UserDefinedConversion, Result.get(), 0,
5159                                   Result.get()->getValueKind());
5160   return false;
5161 }
5162 
5163 static ExprResult finishContextualImplicitConversion(
5164     Sema &SemaRef, SourceLocation Loc, Expr *From,
5165     Sema::ContextualImplicitConverter &Converter) {
5166   if (!Converter.match(From->getType()) && !Converter.Suppress)
5167     Converter.diagnoseNoMatch(SemaRef, Loc, From->getType())
5168         << From->getSourceRange();
5169 
5170   return SemaRef.DefaultLvalueConversion(From);
5171 }
5172 
5173 static void
5174 collectViableConversionCandidates(Sema &SemaRef, Expr *From, QualType ToType,
5175                                   UnresolvedSetImpl &ViableConversions,
5176                                   OverloadCandidateSet &CandidateSet) {
5177   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5178     DeclAccessPair FoundDecl = ViableConversions[I];
5179     NamedDecl *D = FoundDecl.getDecl();
5180     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
5181     if (isa<UsingShadowDecl>(D))
5182       D = cast<UsingShadowDecl>(D)->getTargetDecl();
5183 
5184     CXXConversionDecl *Conv;
5185     FunctionTemplateDecl *ConvTemplate;
5186     if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
5187       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5188     else
5189       Conv = cast<CXXConversionDecl>(D);
5190 
5191     if (ConvTemplate)
5192       SemaRef.AddTemplateConversionCandidate(
5193           ConvTemplate, FoundDecl, ActingContext, From, ToType, CandidateSet);
5194     else
5195       SemaRef.AddConversionCandidate(Conv, FoundDecl, ActingContext, From,
5196                                      ToType, CandidateSet);
5197   }
5198 }
5199 
5200 /// \brief Attempt to convert the given expression to a type which is accepted
5201 /// by the given converter.
5202 ///
5203 /// This routine will attempt to convert an expression of class type to a
5204 /// type accepted by the specified converter. In C++11 and before, the class
5205 /// must have a single non-explicit conversion function converting to a matching
5206 /// type. In C++1y, there can be multiple such conversion functions, but only
5207 /// one target type.
5208 ///
5209 /// \param Loc The source location of the construct that requires the
5210 /// conversion.
5211 ///
5212 /// \param From The expression we're converting from.
5213 ///
5214 /// \param Converter Used to control and diagnose the conversion process.
5215 ///
5216 /// \returns The expression, converted to an integral or enumeration type if
5217 /// successful.
5218 ExprResult Sema::PerformContextualImplicitConversion(
5219     SourceLocation Loc, Expr *From, ContextualImplicitConverter &Converter) {
5220   // We can't perform any more checking for type-dependent expressions.
5221   if (From->isTypeDependent())
5222     return Owned(From);
5223 
5224   // Process placeholders immediately.
5225   if (From->hasPlaceholderType()) {
5226     ExprResult result = CheckPlaceholderExpr(From);
5227     if (result.isInvalid())
5228       return result;
5229     From = result.take();
5230   }
5231 
5232   // If the expression already has a matching type, we're golden.
5233   QualType T = From->getType();
5234   if (Converter.match(T))
5235     return DefaultLvalueConversion(From);
5236 
5237   // FIXME: Check for missing '()' if T is a function type?
5238 
5239   // We can only perform contextual implicit conversions on objects of class
5240   // type.
5241   const RecordType *RecordTy = T->getAs<RecordType>();
5242   if (!RecordTy || !getLangOpts().CPlusPlus) {
5243     if (!Converter.Suppress)
5244       Converter.diagnoseNoMatch(*this, Loc, T) << From->getSourceRange();
5245     return Owned(From);
5246   }
5247 
5248   // We must have a complete class type.
5249   struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5250     ContextualImplicitConverter &Converter;
5251     Expr *From;
5252 
5253     TypeDiagnoserPartialDiag(ContextualImplicitConverter &Converter, Expr *From)
5254         : TypeDiagnoser(Converter.Suppress), Converter(Converter), From(From) {}
5255 
5256     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5257       Converter.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5258     }
5259   } IncompleteDiagnoser(Converter, From);
5260 
5261   if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5262     return Owned(From);
5263 
5264   // Look for a conversion to an integral or enumeration type.
5265   UnresolvedSet<4>
5266       ViableConversions; // These are *potentially* viable in C++1y.
5267   UnresolvedSet<4> ExplicitConversions;
5268   std::pair<CXXRecordDecl::conversion_iterator,
5269             CXXRecordDecl::conversion_iterator> Conversions =
5270       cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5271 
5272   bool HadMultipleCandidates =
5273       (std::distance(Conversions.first, Conversions.second) > 1);
5274 
5275   // To check that there is only one target type, in C++1y:
5276   QualType ToType;
5277   bool HasUniqueTargetType = true;
5278 
5279   // Collect explicit or viable (potentially in C++1y) conversions.
5280   for (CXXRecordDecl::conversion_iterator I = Conversions.first,
5281                                           E = Conversions.second;
5282        I != E; ++I) {
5283     NamedDecl *D = (*I)->getUnderlyingDecl();
5284     CXXConversionDecl *Conversion;
5285     FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D);
5286     if (ConvTemplate) {
5287       if (getLangOpts().CPlusPlus1y)
5288         Conversion = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5289       else
5290         continue; // C++11 does not consider conversion operator templates(?).
5291     } else
5292       Conversion = cast<CXXConversionDecl>(D);
5293 
5294     assert((!ConvTemplate || getLangOpts().CPlusPlus1y) &&
5295            "Conversion operator templates are considered potentially "
5296            "viable in C++1y");
5297 
5298     QualType CurToType = Conversion->getConversionType().getNonReferenceType();
5299     if (Converter.match(CurToType) || ConvTemplate) {
5300 
5301       if (Conversion->isExplicit()) {
5302         // FIXME: For C++1y, do we need this restriction?
5303         // cf. diagnoseNoViableConversion()
5304         if (!ConvTemplate)
5305           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5306       } else {
5307         if (!ConvTemplate && getLangOpts().CPlusPlus1y) {
5308           if (ToType.isNull())
5309             ToType = CurToType.getUnqualifiedType();
5310           else if (HasUniqueTargetType &&
5311                    (CurToType.getUnqualifiedType() != ToType))
5312             HasUniqueTargetType = false;
5313         }
5314         ViableConversions.addDecl(I.getDecl(), I.getAccess());
5315       }
5316     }
5317   }
5318 
5319   if (getLangOpts().CPlusPlus1y) {
5320     // C++1y [conv]p6:
5321     // ... An expression e of class type E appearing in such a context
5322     // is said to be contextually implicitly converted to a specified
5323     // type T and is well-formed if and only if e can be implicitly
5324     // converted to a type T that is determined as follows: E is searched
5325     // for conversion functions whose return type is cv T or reference to
5326     // cv T such that T is allowed by the context. There shall be
5327     // exactly one such T.
5328 
5329     // If no unique T is found:
5330     if (ToType.isNull()) {
5331       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5332                                      HadMultipleCandidates,
5333                                      ExplicitConversions))
5334         return ExprError();
5335       return finishContextualImplicitConversion(*this, Loc, From, Converter);
5336     }
5337 
5338     // If more than one unique Ts are found:
5339     if (!HasUniqueTargetType)
5340       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5341                                          ViableConversions);
5342 
5343     // If one unique T is found:
5344     // First, build a candidate set from the previously recorded
5345     // potentially viable conversions.
5346     OverloadCandidateSet CandidateSet(Loc);
5347     collectViableConversionCandidates(*this, From, ToType, ViableConversions,
5348                                       CandidateSet);
5349 
5350     // Then, perform overload resolution over the candidate set.
5351     OverloadCandidateSet::iterator Best;
5352     switch (CandidateSet.BestViableFunction(*this, Loc, Best)) {
5353     case OR_Success: {
5354       // Apply this conversion.
5355       DeclAccessPair Found =
5356           DeclAccessPair::make(Best->Function, Best->FoundDecl.getAccess());
5357       if (recordConversion(*this, Loc, From, Converter, T,
5358                            HadMultipleCandidates, Found))
5359         return ExprError();
5360       break;
5361     }
5362     case OR_Ambiguous:
5363       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5364                                          ViableConversions);
5365     case OR_No_Viable_Function:
5366       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5367                                      HadMultipleCandidates,
5368                                      ExplicitConversions))
5369         return ExprError();
5370     // fall through 'OR_Deleted' case.
5371     case OR_Deleted:
5372       // We'll complain below about a non-integral condition type.
5373       break;
5374     }
5375   } else {
5376     switch (ViableConversions.size()) {
5377     case 0: {
5378       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5379                                      HadMultipleCandidates,
5380                                      ExplicitConversions))
5381         return ExprError();
5382 
5383       // We'll complain below about a non-integral condition type.
5384       break;
5385     }
5386     case 1: {
5387       // Apply this conversion.
5388       DeclAccessPair Found = ViableConversions[0];
5389       if (recordConversion(*this, Loc, From, Converter, T,
5390                            HadMultipleCandidates, Found))
5391         return ExprError();
5392       break;
5393     }
5394     default:
5395       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5396                                          ViableConversions);
5397     }
5398   }
5399 
5400   return finishContextualImplicitConversion(*this, Loc, From, Converter);
5401 }
5402 
5403 /// AddOverloadCandidate - Adds the given function to the set of
5404 /// candidate functions, using the given function call arguments.  If
5405 /// @p SuppressUserConversions, then don't allow user-defined
5406 /// conversions via constructors or conversion operators.
5407 ///
5408 /// \param PartialOverloading true if we are performing "partial" overloading
5409 /// based on an incomplete set of function arguments. This feature is used by
5410 /// code completion.
5411 void
5412 Sema::AddOverloadCandidate(FunctionDecl *Function,
5413                            DeclAccessPair FoundDecl,
5414                            ArrayRef<Expr *> Args,
5415                            OverloadCandidateSet& CandidateSet,
5416                            bool SuppressUserConversions,
5417                            bool PartialOverloading,
5418                            bool AllowExplicit) {
5419   const FunctionProtoType* Proto
5420     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5421   assert(Proto && "Functions without a prototype cannot be overloaded");
5422   assert(!Function->getDescribedFunctionTemplate() &&
5423          "Use AddTemplateOverloadCandidate for function templates");
5424 
5425   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5426     if (!isa<CXXConstructorDecl>(Method)) {
5427       // If we get here, it's because we're calling a member function
5428       // that is named without a member access expression (e.g.,
5429       // "this->f") that was either written explicitly or created
5430       // implicitly. This can happen with a qualified call to a member
5431       // function, e.g., X::f(). We use an empty type for the implied
5432       // object argument (C++ [over.call.func]p3), and the acting context
5433       // is irrelevant.
5434       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5435                          QualType(), Expr::Classification::makeSimpleLValue(),
5436                          Args, CandidateSet, SuppressUserConversions);
5437       return;
5438     }
5439     // We treat a constructor like a non-member function, since its object
5440     // argument doesn't participate in overload resolution.
5441   }
5442 
5443   if (!CandidateSet.isNewCandidate(Function))
5444     return;
5445 
5446   // Overload resolution is always an unevaluated context.
5447   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5448 
5449   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5450     // C++ [class.copy]p3:
5451     //   A member function template is never instantiated to perform the copy
5452     //   of a class object to an object of its class type.
5453     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5454     if (Args.size() == 1 &&
5455         Constructor->isSpecializationCopyingObject() &&
5456         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5457          IsDerivedFrom(Args[0]->getType(), ClassType)))
5458       return;
5459   }
5460 
5461   // Add this candidate
5462   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5463   Candidate.FoundDecl = FoundDecl;
5464   Candidate.Function = Function;
5465   Candidate.Viable = true;
5466   Candidate.IsSurrogate = false;
5467   Candidate.IgnoreObjectArgument = false;
5468   Candidate.ExplicitCallArguments = Args.size();
5469 
5470   unsigned NumArgsInProto = Proto->getNumArgs();
5471 
5472   // (C++ 13.3.2p2): A candidate function having fewer than m
5473   // parameters is viable only if it has an ellipsis in its parameter
5474   // list (8.3.5).
5475   if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5476       !Proto->isVariadic()) {
5477     Candidate.Viable = false;
5478     Candidate.FailureKind = ovl_fail_too_many_arguments;
5479     return;
5480   }
5481 
5482   // (C++ 13.3.2p2): A candidate function having more than m parameters
5483   // is viable only if the (m+1)st parameter has a default argument
5484   // (8.3.6). For the purposes of overload resolution, the
5485   // parameter list is truncated on the right, so that there are
5486   // exactly m parameters.
5487   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5488   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5489     // Not enough arguments.
5490     Candidate.Viable = false;
5491     Candidate.FailureKind = ovl_fail_too_few_arguments;
5492     return;
5493   }
5494 
5495   // (CUDA B.1): Check for invalid calls between targets.
5496   if (getLangOpts().CUDA)
5497     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5498       if (CheckCUDATarget(Caller, Function)) {
5499         Candidate.Viable = false;
5500         Candidate.FailureKind = ovl_fail_bad_target;
5501         return;
5502       }
5503 
5504   // Determine the implicit conversion sequences for each of the
5505   // arguments.
5506   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5507     if (ArgIdx < NumArgsInProto) {
5508       // (C++ 13.3.2p3): for F to be a viable function, there shall
5509       // exist for each argument an implicit conversion sequence
5510       // (13.3.3.1) that converts that argument to the corresponding
5511       // parameter of F.
5512       QualType ParamType = Proto->getArgType(ArgIdx);
5513       Candidate.Conversions[ArgIdx]
5514         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5515                                 SuppressUserConversions,
5516                                 /*InOverloadResolution=*/true,
5517                                 /*AllowObjCWritebackConversion=*/
5518                                   getLangOpts().ObjCAutoRefCount,
5519                                 AllowExplicit);
5520       if (Candidate.Conversions[ArgIdx].isBad()) {
5521         Candidate.Viable = false;
5522         Candidate.FailureKind = ovl_fail_bad_conversion;
5523         break;
5524       }
5525     } else {
5526       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5527       // argument for which there is no corresponding parameter is
5528       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5529       Candidate.Conversions[ArgIdx].setEllipsis();
5530     }
5531   }
5532 }
5533 
5534 /// \brief Add all of the function declarations in the given function set to
5535 /// the overload canddiate set.
5536 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5537                                  ArrayRef<Expr *> Args,
5538                                  OverloadCandidateSet& CandidateSet,
5539                                  bool SuppressUserConversions,
5540                                TemplateArgumentListInfo *ExplicitTemplateArgs) {
5541   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5542     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5543     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5544       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5545         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5546                            cast<CXXMethodDecl>(FD)->getParent(),
5547                            Args[0]->getType(), Args[0]->Classify(Context),
5548                            Args.slice(1), CandidateSet,
5549                            SuppressUserConversions);
5550       else
5551         AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5552                              SuppressUserConversions);
5553     } else {
5554       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5555       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5556           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5557         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5558                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5559                                    ExplicitTemplateArgs,
5560                                    Args[0]->getType(),
5561                                    Args[0]->Classify(Context), Args.slice(1),
5562                                    CandidateSet, SuppressUserConversions);
5563       else
5564         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5565                                      ExplicitTemplateArgs, Args,
5566                                      CandidateSet, SuppressUserConversions);
5567     }
5568   }
5569 }
5570 
5571 /// AddMethodCandidate - Adds a named decl (which is some kind of
5572 /// method) as a method candidate to the given overload set.
5573 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5574                               QualType ObjectType,
5575                               Expr::Classification ObjectClassification,
5576                               ArrayRef<Expr *> Args,
5577                               OverloadCandidateSet& CandidateSet,
5578                               bool SuppressUserConversions) {
5579   NamedDecl *Decl = FoundDecl.getDecl();
5580   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5581 
5582   if (isa<UsingShadowDecl>(Decl))
5583     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5584 
5585   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5586     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5587            "Expected a member function template");
5588     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5589                                /*ExplicitArgs*/ 0,
5590                                ObjectType, ObjectClassification,
5591                                Args, CandidateSet,
5592                                SuppressUserConversions);
5593   } else {
5594     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5595                        ObjectType, ObjectClassification,
5596                        Args,
5597                        CandidateSet, SuppressUserConversions);
5598   }
5599 }
5600 
5601 /// AddMethodCandidate - Adds the given C++ member function to the set
5602 /// of candidate functions, using the given function call arguments
5603 /// and the object argument (@c Object). For example, in a call
5604 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5605 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5606 /// allow user-defined conversions via constructors or conversion
5607 /// operators.
5608 void
5609 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5610                          CXXRecordDecl *ActingContext, QualType ObjectType,
5611                          Expr::Classification ObjectClassification,
5612                          ArrayRef<Expr *> Args,
5613                          OverloadCandidateSet& CandidateSet,
5614                          bool SuppressUserConversions) {
5615   const FunctionProtoType* Proto
5616     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5617   assert(Proto && "Methods without a prototype cannot be overloaded");
5618   assert(!isa<CXXConstructorDecl>(Method) &&
5619          "Use AddOverloadCandidate for constructors");
5620 
5621   if (!CandidateSet.isNewCandidate(Method))
5622     return;
5623 
5624   // Overload resolution is always an unevaluated context.
5625   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5626 
5627   // Add this candidate
5628   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5629   Candidate.FoundDecl = FoundDecl;
5630   Candidate.Function = Method;
5631   Candidate.IsSurrogate = false;
5632   Candidate.IgnoreObjectArgument = false;
5633   Candidate.ExplicitCallArguments = Args.size();
5634 
5635   unsigned NumArgsInProto = Proto->getNumArgs();
5636 
5637   // (C++ 13.3.2p2): A candidate function having fewer than m
5638   // parameters is viable only if it has an ellipsis in its parameter
5639   // list (8.3.5).
5640   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5641     Candidate.Viable = false;
5642     Candidate.FailureKind = ovl_fail_too_many_arguments;
5643     return;
5644   }
5645 
5646   // (C++ 13.3.2p2): A candidate function having more than m parameters
5647   // is viable only if the (m+1)st parameter has a default argument
5648   // (8.3.6). For the purposes of overload resolution, the
5649   // parameter list is truncated on the right, so that there are
5650   // exactly m parameters.
5651   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5652   if (Args.size() < MinRequiredArgs) {
5653     // Not enough arguments.
5654     Candidate.Viable = false;
5655     Candidate.FailureKind = ovl_fail_too_few_arguments;
5656     return;
5657   }
5658 
5659   Candidate.Viable = true;
5660 
5661   if (Method->isStatic() || ObjectType.isNull())
5662     // The implicit object argument is ignored.
5663     Candidate.IgnoreObjectArgument = true;
5664   else {
5665     // Determine the implicit conversion sequence for the object
5666     // parameter.
5667     Candidate.Conversions[0]
5668       = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5669                                         Method, ActingContext);
5670     if (Candidate.Conversions[0].isBad()) {
5671       Candidate.Viable = false;
5672       Candidate.FailureKind = ovl_fail_bad_conversion;
5673       return;
5674     }
5675   }
5676 
5677   // Determine the implicit conversion sequences for each of the
5678   // arguments.
5679   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5680     if (ArgIdx < NumArgsInProto) {
5681       // (C++ 13.3.2p3): for F to be a viable function, there shall
5682       // exist for each argument an implicit conversion sequence
5683       // (13.3.3.1) that converts that argument to the corresponding
5684       // parameter of F.
5685       QualType ParamType = Proto->getArgType(ArgIdx);
5686       Candidate.Conversions[ArgIdx + 1]
5687         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5688                                 SuppressUserConversions,
5689                                 /*InOverloadResolution=*/true,
5690                                 /*AllowObjCWritebackConversion=*/
5691                                   getLangOpts().ObjCAutoRefCount);
5692       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5693         Candidate.Viable = false;
5694         Candidate.FailureKind = ovl_fail_bad_conversion;
5695         break;
5696       }
5697     } else {
5698       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5699       // argument for which there is no corresponding parameter is
5700       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5701       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5702     }
5703   }
5704 }
5705 
5706 /// \brief Add a C++ member function template as a candidate to the candidate
5707 /// set, using template argument deduction to produce an appropriate member
5708 /// function template specialization.
5709 void
5710 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5711                                  DeclAccessPair FoundDecl,
5712                                  CXXRecordDecl *ActingContext,
5713                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5714                                  QualType ObjectType,
5715                                  Expr::Classification ObjectClassification,
5716                                  ArrayRef<Expr *> Args,
5717                                  OverloadCandidateSet& CandidateSet,
5718                                  bool SuppressUserConversions) {
5719   if (!CandidateSet.isNewCandidate(MethodTmpl))
5720     return;
5721 
5722   // C++ [over.match.funcs]p7:
5723   //   In each case where a candidate is a function template, candidate
5724   //   function template specializations are generated using template argument
5725   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5726   //   candidate functions in the usual way.113) A given name can refer to one
5727   //   or more function templates and also to a set of overloaded non-template
5728   //   functions. In such a case, the candidate functions generated from each
5729   //   function template are combined with the set of non-template candidate
5730   //   functions.
5731   TemplateDeductionInfo Info(CandidateSet.getLocation());
5732   FunctionDecl *Specialization = 0;
5733   if (TemplateDeductionResult Result
5734       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5735                                 Specialization, Info)) {
5736     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5737     Candidate.FoundDecl = FoundDecl;
5738     Candidate.Function = MethodTmpl->getTemplatedDecl();
5739     Candidate.Viable = false;
5740     Candidate.FailureKind = ovl_fail_bad_deduction;
5741     Candidate.IsSurrogate = false;
5742     Candidate.IgnoreObjectArgument = false;
5743     Candidate.ExplicitCallArguments = Args.size();
5744     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5745                                                           Info);
5746     return;
5747   }
5748 
5749   // Add the function template specialization produced by template argument
5750   // deduction as a candidate.
5751   assert(Specialization && "Missing member function template specialization?");
5752   assert(isa<CXXMethodDecl>(Specialization) &&
5753          "Specialization is not a member function?");
5754   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5755                      ActingContext, ObjectType, ObjectClassification, Args,
5756                      CandidateSet, SuppressUserConversions);
5757 }
5758 
5759 /// \brief Add a C++ function template specialization as a candidate
5760 /// in the candidate set, using template argument deduction to produce
5761 /// an appropriate function template specialization.
5762 void
5763 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5764                                    DeclAccessPair FoundDecl,
5765                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5766                                    ArrayRef<Expr *> Args,
5767                                    OverloadCandidateSet& CandidateSet,
5768                                    bool SuppressUserConversions) {
5769   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5770     return;
5771 
5772   // C++ [over.match.funcs]p7:
5773   //   In each case where a candidate is a function template, candidate
5774   //   function template specializations are generated using template argument
5775   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5776   //   candidate functions in the usual way.113) A given name can refer to one
5777   //   or more function templates and also to a set of overloaded non-template
5778   //   functions. In such a case, the candidate functions generated from each
5779   //   function template are combined with the set of non-template candidate
5780   //   functions.
5781   TemplateDeductionInfo Info(CandidateSet.getLocation());
5782   FunctionDecl *Specialization = 0;
5783   if (TemplateDeductionResult Result
5784         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5785                                   Specialization, Info)) {
5786     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5787     Candidate.FoundDecl = FoundDecl;
5788     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5789     Candidate.Viable = false;
5790     Candidate.FailureKind = ovl_fail_bad_deduction;
5791     Candidate.IsSurrogate = false;
5792     Candidate.IgnoreObjectArgument = false;
5793     Candidate.ExplicitCallArguments = Args.size();
5794     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5795                                                           Info);
5796     return;
5797   }
5798 
5799   // Add the function template specialization produced by template argument
5800   // deduction as a candidate.
5801   assert(Specialization && "Missing function template specialization?");
5802   AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5803                        SuppressUserConversions);
5804 }
5805 
5806 /// AddConversionCandidate - Add a C++ conversion function as a
5807 /// candidate in the candidate set (C++ [over.match.conv],
5808 /// C++ [over.match.copy]). From is the expression we're converting from,
5809 /// and ToType is the type that we're eventually trying to convert to
5810 /// (which may or may not be the same type as the type that the
5811 /// conversion function produces).
5812 void
5813 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5814                              DeclAccessPair FoundDecl,
5815                              CXXRecordDecl *ActingContext,
5816                              Expr *From, QualType ToType,
5817                              OverloadCandidateSet& CandidateSet) {
5818   assert(!Conversion->getDescribedFunctionTemplate() &&
5819          "Conversion function templates use AddTemplateConversionCandidate");
5820   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5821   if (!CandidateSet.isNewCandidate(Conversion))
5822     return;
5823 
5824   // If the conversion function has an undeduced return type, trigger its
5825   // deduction now.
5826   if (getLangOpts().CPlusPlus1y && ConvType->isUndeducedType()) {
5827     if (DeduceReturnType(Conversion, From->getExprLoc()))
5828       return;
5829     ConvType = Conversion->getConversionType().getNonReferenceType();
5830   }
5831 
5832   // Overload resolution is always an unevaluated context.
5833   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5834 
5835   // Add this candidate
5836   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5837   Candidate.FoundDecl = FoundDecl;
5838   Candidate.Function = Conversion;
5839   Candidate.IsSurrogate = false;
5840   Candidate.IgnoreObjectArgument = false;
5841   Candidate.FinalConversion.setAsIdentityConversion();
5842   Candidate.FinalConversion.setFromType(ConvType);
5843   Candidate.FinalConversion.setAllToTypes(ToType);
5844   Candidate.Viable = true;
5845   Candidate.ExplicitCallArguments = 1;
5846 
5847   // C++ [over.match.funcs]p4:
5848   //   For conversion functions, the function is considered to be a member of
5849   //   the class of the implicit implied object argument for the purpose of
5850   //   defining the type of the implicit object parameter.
5851   //
5852   // Determine the implicit conversion sequence for the implicit
5853   // object parameter.
5854   QualType ImplicitParamType = From->getType();
5855   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5856     ImplicitParamType = FromPtrType->getPointeeType();
5857   CXXRecordDecl *ConversionContext
5858     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5859 
5860   Candidate.Conversions[0]
5861     = TryObjectArgumentInitialization(*this, From->getType(),
5862                                       From->Classify(Context),
5863                                       Conversion, ConversionContext);
5864 
5865   if (Candidate.Conversions[0].isBad()) {
5866     Candidate.Viable = false;
5867     Candidate.FailureKind = ovl_fail_bad_conversion;
5868     return;
5869   }
5870 
5871   // We won't go through a user-define type conversion function to convert a
5872   // derived to base as such conversions are given Conversion Rank. They only
5873   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5874   QualType FromCanon
5875     = Context.getCanonicalType(From->getType().getUnqualifiedType());
5876   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5877   if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5878     Candidate.Viable = false;
5879     Candidate.FailureKind = ovl_fail_trivial_conversion;
5880     return;
5881   }
5882 
5883   // To determine what the conversion from the result of calling the
5884   // conversion function to the type we're eventually trying to
5885   // convert to (ToType), we need to synthesize a call to the
5886   // conversion function and attempt copy initialization from it. This
5887   // makes sure that we get the right semantics with respect to
5888   // lvalues/rvalues and the type. Fortunately, we can allocate this
5889   // call on the stack and we don't need its arguments to be
5890   // well-formed.
5891   DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5892                             VK_LValue, From->getLocStart());
5893   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5894                                 Context.getPointerType(Conversion->getType()),
5895                                 CK_FunctionToPointerDecay,
5896                                 &ConversionRef, VK_RValue);
5897 
5898   QualType ConversionType = Conversion->getConversionType();
5899   if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5900     Candidate.Viable = false;
5901     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5902     return;
5903   }
5904 
5905   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5906 
5907   // Note that it is safe to allocate CallExpr on the stack here because
5908   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5909   // allocator).
5910   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5911   CallExpr Call(Context, &ConversionFn, None, CallResultType, VK,
5912                 From->getLocStart());
5913   ImplicitConversionSequence ICS =
5914     TryCopyInitialization(*this, &Call, ToType,
5915                           /*SuppressUserConversions=*/true,
5916                           /*InOverloadResolution=*/false,
5917                           /*AllowObjCWritebackConversion=*/false);
5918 
5919   switch (ICS.getKind()) {
5920   case ImplicitConversionSequence::StandardConversion:
5921     Candidate.FinalConversion = ICS.Standard;
5922 
5923     // C++ [over.ics.user]p3:
5924     //   If the user-defined conversion is specified by a specialization of a
5925     //   conversion function template, the second standard conversion sequence
5926     //   shall have exact match rank.
5927     if (Conversion->getPrimaryTemplate() &&
5928         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5929       Candidate.Viable = false;
5930       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5931     }
5932 
5933     // C++0x [dcl.init.ref]p5:
5934     //    In the second case, if the reference is an rvalue reference and
5935     //    the second standard conversion sequence of the user-defined
5936     //    conversion sequence includes an lvalue-to-rvalue conversion, the
5937     //    program is ill-formed.
5938     if (ToType->isRValueReferenceType() &&
5939         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5940       Candidate.Viable = false;
5941       Candidate.FailureKind = ovl_fail_bad_final_conversion;
5942     }
5943     break;
5944 
5945   case ImplicitConversionSequence::BadConversion:
5946     Candidate.Viable = false;
5947     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5948     break;
5949 
5950   default:
5951     llvm_unreachable(
5952            "Can only end up with a standard conversion sequence or failure");
5953   }
5954 }
5955 
5956 /// \brief Adds a conversion function template specialization
5957 /// candidate to the overload set, using template argument deduction
5958 /// to deduce the template arguments of the conversion function
5959 /// template from the type that we are converting to (C++
5960 /// [temp.deduct.conv]).
5961 void
5962 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5963                                      DeclAccessPair FoundDecl,
5964                                      CXXRecordDecl *ActingDC,
5965                                      Expr *From, QualType ToType,
5966                                      OverloadCandidateSet &CandidateSet) {
5967   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5968          "Only conversion function templates permitted here");
5969 
5970   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5971     return;
5972 
5973   TemplateDeductionInfo Info(CandidateSet.getLocation());
5974   CXXConversionDecl *Specialization = 0;
5975   if (TemplateDeductionResult Result
5976         = DeduceTemplateArguments(FunctionTemplate, ToType,
5977                                   Specialization, Info)) {
5978     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5979     Candidate.FoundDecl = FoundDecl;
5980     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5981     Candidate.Viable = false;
5982     Candidate.FailureKind = ovl_fail_bad_deduction;
5983     Candidate.IsSurrogate = false;
5984     Candidate.IgnoreObjectArgument = false;
5985     Candidate.ExplicitCallArguments = 1;
5986     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5987                                                           Info);
5988     return;
5989   }
5990 
5991   // Add the conversion function template specialization produced by
5992   // template argument deduction as a candidate.
5993   assert(Specialization && "Missing function template specialization?");
5994   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5995                          CandidateSet);
5996 }
5997 
5998 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5999 /// converts the given @c Object to a function pointer via the
6000 /// conversion function @c Conversion, and then attempts to call it
6001 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
6002 /// the type of function that we'll eventually be calling.
6003 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
6004                                  DeclAccessPair FoundDecl,
6005                                  CXXRecordDecl *ActingContext,
6006                                  const FunctionProtoType *Proto,
6007                                  Expr *Object,
6008                                  ArrayRef<Expr *> Args,
6009                                  OverloadCandidateSet& CandidateSet) {
6010   if (!CandidateSet.isNewCandidate(Conversion))
6011     return;
6012 
6013   // Overload resolution is always an unevaluated context.
6014   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6015 
6016   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
6017   Candidate.FoundDecl = FoundDecl;
6018   Candidate.Function = 0;
6019   Candidate.Surrogate = Conversion;
6020   Candidate.Viable = true;
6021   Candidate.IsSurrogate = true;
6022   Candidate.IgnoreObjectArgument = false;
6023   Candidate.ExplicitCallArguments = Args.size();
6024 
6025   // Determine the implicit conversion sequence for the implicit
6026   // object parameter.
6027   ImplicitConversionSequence ObjectInit
6028     = TryObjectArgumentInitialization(*this, Object->getType(),
6029                                       Object->Classify(Context),
6030                                       Conversion, ActingContext);
6031   if (ObjectInit.isBad()) {
6032     Candidate.Viable = false;
6033     Candidate.FailureKind = ovl_fail_bad_conversion;
6034     Candidate.Conversions[0] = ObjectInit;
6035     return;
6036   }
6037 
6038   // The first conversion is actually a user-defined conversion whose
6039   // first conversion is ObjectInit's standard conversion (which is
6040   // effectively a reference binding). Record it as such.
6041   Candidate.Conversions[0].setUserDefined();
6042   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
6043   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
6044   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
6045   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
6046   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
6047   Candidate.Conversions[0].UserDefined.After
6048     = Candidate.Conversions[0].UserDefined.Before;
6049   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
6050 
6051   // Find the
6052   unsigned NumArgsInProto = Proto->getNumArgs();
6053 
6054   // (C++ 13.3.2p2): A candidate function having fewer than m
6055   // parameters is viable only if it has an ellipsis in its parameter
6056   // list (8.3.5).
6057   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
6058     Candidate.Viable = false;
6059     Candidate.FailureKind = ovl_fail_too_many_arguments;
6060     return;
6061   }
6062 
6063   // Function types don't have any default arguments, so just check if
6064   // we have enough arguments.
6065   if (Args.size() < NumArgsInProto) {
6066     // Not enough arguments.
6067     Candidate.Viable = false;
6068     Candidate.FailureKind = ovl_fail_too_few_arguments;
6069     return;
6070   }
6071 
6072   // Determine the implicit conversion sequences for each of the
6073   // arguments.
6074   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6075     if (ArgIdx < NumArgsInProto) {
6076       // (C++ 13.3.2p3): for F to be a viable function, there shall
6077       // exist for each argument an implicit conversion sequence
6078       // (13.3.3.1) that converts that argument to the corresponding
6079       // parameter of F.
6080       QualType ParamType = Proto->getArgType(ArgIdx);
6081       Candidate.Conversions[ArgIdx + 1]
6082         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
6083                                 /*SuppressUserConversions=*/false,
6084                                 /*InOverloadResolution=*/false,
6085                                 /*AllowObjCWritebackConversion=*/
6086                                   getLangOpts().ObjCAutoRefCount);
6087       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
6088         Candidate.Viable = false;
6089         Candidate.FailureKind = ovl_fail_bad_conversion;
6090         break;
6091       }
6092     } else {
6093       // (C++ 13.3.2p2): For the purposes of overload resolution, any
6094       // argument for which there is no corresponding parameter is
6095       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
6096       Candidate.Conversions[ArgIdx + 1].setEllipsis();
6097     }
6098   }
6099 }
6100 
6101 /// \brief Add overload candidates for overloaded operators that are
6102 /// member functions.
6103 ///
6104 /// Add the overloaded operator candidates that are member functions
6105 /// for the operator Op that was used in an operator expression such
6106 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
6107 /// CandidateSet will store the added overload candidates. (C++
6108 /// [over.match.oper]).
6109 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
6110                                        SourceLocation OpLoc,
6111                                        ArrayRef<Expr *> Args,
6112                                        OverloadCandidateSet& CandidateSet,
6113                                        SourceRange OpRange) {
6114   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6115 
6116   // C++ [over.match.oper]p3:
6117   //   For a unary operator @ with an operand of a type whose
6118   //   cv-unqualified version is T1, and for a binary operator @ with
6119   //   a left operand of a type whose cv-unqualified version is T1 and
6120   //   a right operand of a type whose cv-unqualified version is T2,
6121   //   three sets of candidate functions, designated member
6122   //   candidates, non-member candidates and built-in candidates, are
6123   //   constructed as follows:
6124   QualType T1 = Args[0]->getType();
6125 
6126   //     -- If T1 is a complete class type or a class currently being
6127   //        defined, the set of member candidates is the result of the
6128   //        qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
6129   //        the set of member candidates is empty.
6130   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
6131     // Complete the type if it can be completed.
6132     RequireCompleteType(OpLoc, T1, 0);
6133     // If the type is neither complete nor being defined, bail out now.
6134     if (!T1Rec->getDecl()->getDefinition())
6135       return;
6136 
6137     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
6138     LookupQualifiedName(Operators, T1Rec->getDecl());
6139     Operators.suppressDiagnostics();
6140 
6141     for (LookupResult::iterator Oper = Operators.begin(),
6142                              OperEnd = Operators.end();
6143          Oper != OperEnd;
6144          ++Oper)
6145       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
6146                          Args[0]->Classify(Context),
6147                          Args.slice(1),
6148                          CandidateSet,
6149                          /* SuppressUserConversions = */ false);
6150   }
6151 }
6152 
6153 /// AddBuiltinCandidate - Add a candidate for a built-in
6154 /// operator. ResultTy and ParamTys are the result and parameter types
6155 /// of the built-in candidate, respectively. Args and NumArgs are the
6156 /// arguments being passed to the candidate. IsAssignmentOperator
6157 /// should be true when this built-in candidate is an assignment
6158 /// operator. NumContextualBoolArguments is the number of arguments
6159 /// (at the beginning of the argument list) that will be contextually
6160 /// converted to bool.
6161 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
6162                                ArrayRef<Expr *> Args,
6163                                OverloadCandidateSet& CandidateSet,
6164                                bool IsAssignmentOperator,
6165                                unsigned NumContextualBoolArguments) {
6166   // Overload resolution is always an unevaluated context.
6167   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6168 
6169   // Add this candidate
6170   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
6171   Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
6172   Candidate.Function = 0;
6173   Candidate.IsSurrogate = false;
6174   Candidate.IgnoreObjectArgument = false;
6175   Candidate.BuiltinTypes.ResultTy = ResultTy;
6176   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
6177     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
6178 
6179   // Determine the implicit conversion sequences for each of the
6180   // arguments.
6181   Candidate.Viable = true;
6182   Candidate.ExplicitCallArguments = Args.size();
6183   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6184     // C++ [over.match.oper]p4:
6185     //   For the built-in assignment operators, conversions of the
6186     //   left operand are restricted as follows:
6187     //     -- no temporaries are introduced to hold the left operand, and
6188     //     -- no user-defined conversions are applied to the left
6189     //        operand to achieve a type match with the left-most
6190     //        parameter of a built-in candidate.
6191     //
6192     // We block these conversions by turning off user-defined
6193     // conversions, since that is the only way that initialization of
6194     // a reference to a non-class type can occur from something that
6195     // is not of the same type.
6196     if (ArgIdx < NumContextualBoolArguments) {
6197       assert(ParamTys[ArgIdx] == Context.BoolTy &&
6198              "Contextual conversion to bool requires bool type");
6199       Candidate.Conversions[ArgIdx]
6200         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6201     } else {
6202       Candidate.Conversions[ArgIdx]
6203         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6204                                 ArgIdx == 0 && IsAssignmentOperator,
6205                                 /*InOverloadResolution=*/false,
6206                                 /*AllowObjCWritebackConversion=*/
6207                                   getLangOpts().ObjCAutoRefCount);
6208     }
6209     if (Candidate.Conversions[ArgIdx].isBad()) {
6210       Candidate.Viable = false;
6211       Candidate.FailureKind = ovl_fail_bad_conversion;
6212       break;
6213     }
6214   }
6215 }
6216 
6217 namespace {
6218 
6219 /// BuiltinCandidateTypeSet - A set of types that will be used for the
6220 /// candidate operator functions for built-in operators (C++
6221 /// [over.built]). The types are separated into pointer types and
6222 /// enumeration types.
6223 class BuiltinCandidateTypeSet  {
6224   /// TypeSet - A set of types.
6225   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6226 
6227   /// PointerTypes - The set of pointer types that will be used in the
6228   /// built-in candidates.
6229   TypeSet PointerTypes;
6230 
6231   /// MemberPointerTypes - The set of member pointer types that will be
6232   /// used in the built-in candidates.
6233   TypeSet MemberPointerTypes;
6234 
6235   /// EnumerationTypes - The set of enumeration types that will be
6236   /// used in the built-in candidates.
6237   TypeSet EnumerationTypes;
6238 
6239   /// \brief The set of vector types that will be used in the built-in
6240   /// candidates.
6241   TypeSet VectorTypes;
6242 
6243   /// \brief A flag indicating non-record types are viable candidates
6244   bool HasNonRecordTypes;
6245 
6246   /// \brief A flag indicating whether either arithmetic or enumeration types
6247   /// were present in the candidate set.
6248   bool HasArithmeticOrEnumeralTypes;
6249 
6250   /// \brief A flag indicating whether the nullptr type was present in the
6251   /// candidate set.
6252   bool HasNullPtrType;
6253 
6254   /// Sema - The semantic analysis instance where we are building the
6255   /// candidate type set.
6256   Sema &SemaRef;
6257 
6258   /// Context - The AST context in which we will build the type sets.
6259   ASTContext &Context;
6260 
6261   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6262                                                const Qualifiers &VisibleQuals);
6263   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6264 
6265 public:
6266   /// iterator - Iterates through the types that are part of the set.
6267   typedef TypeSet::iterator iterator;
6268 
6269   BuiltinCandidateTypeSet(Sema &SemaRef)
6270     : HasNonRecordTypes(false),
6271       HasArithmeticOrEnumeralTypes(false),
6272       HasNullPtrType(false),
6273       SemaRef(SemaRef),
6274       Context(SemaRef.Context) { }
6275 
6276   void AddTypesConvertedFrom(QualType Ty,
6277                              SourceLocation Loc,
6278                              bool AllowUserConversions,
6279                              bool AllowExplicitConversions,
6280                              const Qualifiers &VisibleTypeConversionsQuals);
6281 
6282   /// pointer_begin - First pointer type found;
6283   iterator pointer_begin() { return PointerTypes.begin(); }
6284 
6285   /// pointer_end - Past the last pointer type found;
6286   iterator pointer_end() { return PointerTypes.end(); }
6287 
6288   /// member_pointer_begin - First member pointer type found;
6289   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6290 
6291   /// member_pointer_end - Past the last member pointer type found;
6292   iterator member_pointer_end() { return MemberPointerTypes.end(); }
6293 
6294   /// enumeration_begin - First enumeration type found;
6295   iterator enumeration_begin() { return EnumerationTypes.begin(); }
6296 
6297   /// enumeration_end - Past the last enumeration type found;
6298   iterator enumeration_end() { return EnumerationTypes.end(); }
6299 
6300   iterator vector_begin() { return VectorTypes.begin(); }
6301   iterator vector_end() { return VectorTypes.end(); }
6302 
6303   bool hasNonRecordTypes() { return HasNonRecordTypes; }
6304   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6305   bool hasNullPtrType() const { return HasNullPtrType; }
6306 };
6307 
6308 } // end anonymous namespace
6309 
6310 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6311 /// the set of pointer types along with any more-qualified variants of
6312 /// that type. For example, if @p Ty is "int const *", this routine
6313 /// will add "int const *", "int const volatile *", "int const
6314 /// restrict *", and "int const volatile restrict *" to the set of
6315 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6316 /// false otherwise.
6317 ///
6318 /// FIXME: what to do about extended qualifiers?
6319 bool
6320 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6321                                              const Qualifiers &VisibleQuals) {
6322 
6323   // Insert this type.
6324   if (!PointerTypes.insert(Ty))
6325     return false;
6326 
6327   QualType PointeeTy;
6328   const PointerType *PointerTy = Ty->getAs<PointerType>();
6329   bool buildObjCPtr = false;
6330   if (!PointerTy) {
6331     const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6332     PointeeTy = PTy->getPointeeType();
6333     buildObjCPtr = true;
6334   } else {
6335     PointeeTy = PointerTy->getPointeeType();
6336   }
6337 
6338   // Don't add qualified variants of arrays. For one, they're not allowed
6339   // (the qualifier would sink to the element type), and for another, the
6340   // only overload situation where it matters is subscript or pointer +- int,
6341   // and those shouldn't have qualifier variants anyway.
6342   if (PointeeTy->isArrayType())
6343     return true;
6344 
6345   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6346   bool hasVolatile = VisibleQuals.hasVolatile();
6347   bool hasRestrict = VisibleQuals.hasRestrict();
6348 
6349   // Iterate through all strict supersets of BaseCVR.
6350   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6351     if ((CVR | BaseCVR) != CVR) continue;
6352     // Skip over volatile if no volatile found anywhere in the types.
6353     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6354 
6355     // Skip over restrict if no restrict found anywhere in the types, or if
6356     // the type cannot be restrict-qualified.
6357     if ((CVR & Qualifiers::Restrict) &&
6358         (!hasRestrict ||
6359          (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6360       continue;
6361 
6362     // Build qualified pointee type.
6363     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6364 
6365     // Build qualified pointer type.
6366     QualType QPointerTy;
6367     if (!buildObjCPtr)
6368       QPointerTy = Context.getPointerType(QPointeeTy);
6369     else
6370       QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6371 
6372     // Insert qualified pointer type.
6373     PointerTypes.insert(QPointerTy);
6374   }
6375 
6376   return true;
6377 }
6378 
6379 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6380 /// to the set of pointer types along with any more-qualified variants of
6381 /// that type. For example, if @p Ty is "int const *", this routine
6382 /// will add "int const *", "int const volatile *", "int const
6383 /// restrict *", and "int const volatile restrict *" to the set of
6384 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6385 /// false otherwise.
6386 ///
6387 /// FIXME: what to do about extended qualifiers?
6388 bool
6389 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6390     QualType Ty) {
6391   // Insert this type.
6392   if (!MemberPointerTypes.insert(Ty))
6393     return false;
6394 
6395   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6396   assert(PointerTy && "type was not a member pointer type!");
6397 
6398   QualType PointeeTy = PointerTy->getPointeeType();
6399   // Don't add qualified variants of arrays. For one, they're not allowed
6400   // (the qualifier would sink to the element type), and for another, the
6401   // only overload situation where it matters is subscript or pointer +- int,
6402   // and those shouldn't have qualifier variants anyway.
6403   if (PointeeTy->isArrayType())
6404     return true;
6405   const Type *ClassTy = PointerTy->getClass();
6406 
6407   // Iterate through all strict supersets of the pointee type's CVR
6408   // qualifiers.
6409   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6410   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6411     if ((CVR | BaseCVR) != CVR) continue;
6412 
6413     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6414     MemberPointerTypes.insert(
6415       Context.getMemberPointerType(QPointeeTy, ClassTy));
6416   }
6417 
6418   return true;
6419 }
6420 
6421 /// AddTypesConvertedFrom - Add each of the types to which the type @p
6422 /// Ty can be implicit converted to the given set of @p Types. We're
6423 /// primarily interested in pointer types and enumeration types. We also
6424 /// take member pointer types, for the conditional operator.
6425 /// AllowUserConversions is true if we should look at the conversion
6426 /// functions of a class type, and AllowExplicitConversions if we
6427 /// should also include the explicit conversion functions of a class
6428 /// type.
6429 void
6430 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6431                                                SourceLocation Loc,
6432                                                bool AllowUserConversions,
6433                                                bool AllowExplicitConversions,
6434                                                const Qualifiers &VisibleQuals) {
6435   // Only deal with canonical types.
6436   Ty = Context.getCanonicalType(Ty);
6437 
6438   // Look through reference types; they aren't part of the type of an
6439   // expression for the purposes of conversions.
6440   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6441     Ty = RefTy->getPointeeType();
6442 
6443   // If we're dealing with an array type, decay to the pointer.
6444   if (Ty->isArrayType())
6445     Ty = SemaRef.Context.getArrayDecayedType(Ty);
6446 
6447   // Otherwise, we don't care about qualifiers on the type.
6448   Ty = Ty.getLocalUnqualifiedType();
6449 
6450   // Flag if we ever add a non-record type.
6451   const RecordType *TyRec = Ty->getAs<RecordType>();
6452   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6453 
6454   // Flag if we encounter an arithmetic type.
6455   HasArithmeticOrEnumeralTypes =
6456     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6457 
6458   if (Ty->isObjCIdType() || Ty->isObjCClassType())
6459     PointerTypes.insert(Ty);
6460   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6461     // Insert our type, and its more-qualified variants, into the set
6462     // of types.
6463     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6464       return;
6465   } else if (Ty->isMemberPointerType()) {
6466     // Member pointers are far easier, since the pointee can't be converted.
6467     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6468       return;
6469   } else if (Ty->isEnumeralType()) {
6470     HasArithmeticOrEnumeralTypes = true;
6471     EnumerationTypes.insert(Ty);
6472   } else if (Ty->isVectorType()) {
6473     // We treat vector types as arithmetic types in many contexts as an
6474     // extension.
6475     HasArithmeticOrEnumeralTypes = true;
6476     VectorTypes.insert(Ty);
6477   } else if (Ty->isNullPtrType()) {
6478     HasNullPtrType = true;
6479   } else if (AllowUserConversions && TyRec) {
6480     // No conversion functions in incomplete types.
6481     if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6482       return;
6483 
6484     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6485     std::pair<CXXRecordDecl::conversion_iterator,
6486               CXXRecordDecl::conversion_iterator>
6487       Conversions = ClassDecl->getVisibleConversionFunctions();
6488     for (CXXRecordDecl::conversion_iterator
6489            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6490       NamedDecl *D = I.getDecl();
6491       if (isa<UsingShadowDecl>(D))
6492         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6493 
6494       // Skip conversion function templates; they don't tell us anything
6495       // about which builtin types we can convert to.
6496       if (isa<FunctionTemplateDecl>(D))
6497         continue;
6498 
6499       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6500       if (AllowExplicitConversions || !Conv->isExplicit()) {
6501         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6502                               VisibleQuals);
6503       }
6504     }
6505   }
6506 }
6507 
6508 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6509 /// the volatile- and non-volatile-qualified assignment operators for the
6510 /// given type to the candidate set.
6511 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6512                                                    QualType T,
6513                                                    ArrayRef<Expr *> Args,
6514                                     OverloadCandidateSet &CandidateSet) {
6515   QualType ParamTypes[2];
6516 
6517   // T& operator=(T&, T)
6518   ParamTypes[0] = S.Context.getLValueReferenceType(T);
6519   ParamTypes[1] = T;
6520   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6521                         /*IsAssignmentOperator=*/true);
6522 
6523   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6524     // volatile T& operator=(volatile T&, T)
6525     ParamTypes[0]
6526       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6527     ParamTypes[1] = T;
6528     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6529                           /*IsAssignmentOperator=*/true);
6530   }
6531 }
6532 
6533 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6534 /// if any, found in visible type conversion functions found in ArgExpr's type.
6535 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6536     Qualifiers VRQuals;
6537     const RecordType *TyRec;
6538     if (const MemberPointerType *RHSMPType =
6539         ArgExpr->getType()->getAs<MemberPointerType>())
6540       TyRec = RHSMPType->getClass()->getAs<RecordType>();
6541     else
6542       TyRec = ArgExpr->getType()->getAs<RecordType>();
6543     if (!TyRec) {
6544       // Just to be safe, assume the worst case.
6545       VRQuals.addVolatile();
6546       VRQuals.addRestrict();
6547       return VRQuals;
6548     }
6549 
6550     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6551     if (!ClassDecl->hasDefinition())
6552       return VRQuals;
6553 
6554     std::pair<CXXRecordDecl::conversion_iterator,
6555               CXXRecordDecl::conversion_iterator>
6556       Conversions = ClassDecl->getVisibleConversionFunctions();
6557 
6558     for (CXXRecordDecl::conversion_iterator
6559            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6560       NamedDecl *D = I.getDecl();
6561       if (isa<UsingShadowDecl>(D))
6562         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6563       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6564         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6565         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6566           CanTy = ResTypeRef->getPointeeType();
6567         // Need to go down the pointer/mempointer chain and add qualifiers
6568         // as see them.
6569         bool done = false;
6570         while (!done) {
6571           if (CanTy.isRestrictQualified())
6572             VRQuals.addRestrict();
6573           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6574             CanTy = ResTypePtr->getPointeeType();
6575           else if (const MemberPointerType *ResTypeMPtr =
6576                 CanTy->getAs<MemberPointerType>())
6577             CanTy = ResTypeMPtr->getPointeeType();
6578           else
6579             done = true;
6580           if (CanTy.isVolatileQualified())
6581             VRQuals.addVolatile();
6582           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6583             return VRQuals;
6584         }
6585       }
6586     }
6587     return VRQuals;
6588 }
6589 
6590 namespace {
6591 
6592 /// \brief Helper class to manage the addition of builtin operator overload
6593 /// candidates. It provides shared state and utility methods used throughout
6594 /// the process, as well as a helper method to add each group of builtin
6595 /// operator overloads from the standard to a candidate set.
6596 class BuiltinOperatorOverloadBuilder {
6597   // Common instance state available to all overload candidate addition methods.
6598   Sema &S;
6599   ArrayRef<Expr *> Args;
6600   Qualifiers VisibleTypeConversionsQuals;
6601   bool HasArithmeticOrEnumeralCandidateType;
6602   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6603   OverloadCandidateSet &CandidateSet;
6604 
6605   // Define some constants used to index and iterate over the arithemetic types
6606   // provided via the getArithmeticType() method below.
6607   // The "promoted arithmetic types" are the arithmetic
6608   // types are that preserved by promotion (C++ [over.built]p2).
6609   static const unsigned FirstIntegralType = 3;
6610   static const unsigned LastIntegralType = 20;
6611   static const unsigned FirstPromotedIntegralType = 3,
6612                         LastPromotedIntegralType = 11;
6613   static const unsigned FirstPromotedArithmeticType = 0,
6614                         LastPromotedArithmeticType = 11;
6615   static const unsigned NumArithmeticTypes = 20;
6616 
6617   /// \brief Get the canonical type for a given arithmetic type index.
6618   CanQualType getArithmeticType(unsigned index) {
6619     assert(index < NumArithmeticTypes);
6620     static CanQualType ASTContext::* const
6621       ArithmeticTypes[NumArithmeticTypes] = {
6622       // Start of promoted types.
6623       &ASTContext::FloatTy,
6624       &ASTContext::DoubleTy,
6625       &ASTContext::LongDoubleTy,
6626 
6627       // Start of integral types.
6628       &ASTContext::IntTy,
6629       &ASTContext::LongTy,
6630       &ASTContext::LongLongTy,
6631       &ASTContext::Int128Ty,
6632       &ASTContext::UnsignedIntTy,
6633       &ASTContext::UnsignedLongTy,
6634       &ASTContext::UnsignedLongLongTy,
6635       &ASTContext::UnsignedInt128Ty,
6636       // End of promoted types.
6637 
6638       &ASTContext::BoolTy,
6639       &ASTContext::CharTy,
6640       &ASTContext::WCharTy,
6641       &ASTContext::Char16Ty,
6642       &ASTContext::Char32Ty,
6643       &ASTContext::SignedCharTy,
6644       &ASTContext::ShortTy,
6645       &ASTContext::UnsignedCharTy,
6646       &ASTContext::UnsignedShortTy,
6647       // End of integral types.
6648       // FIXME: What about complex? What about half?
6649     };
6650     return S.Context.*ArithmeticTypes[index];
6651   }
6652 
6653   /// \brief Gets the canonical type resulting from the usual arithemetic
6654   /// converions for the given arithmetic types.
6655   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6656     // Accelerator table for performing the usual arithmetic conversions.
6657     // The rules are basically:
6658     //   - if either is floating-point, use the wider floating-point
6659     //   - if same signedness, use the higher rank
6660     //   - if same size, use unsigned of the higher rank
6661     //   - use the larger type
6662     // These rules, together with the axiom that higher ranks are
6663     // never smaller, are sufficient to precompute all of these results
6664     // *except* when dealing with signed types of higher rank.
6665     // (we could precompute SLL x UI for all known platforms, but it's
6666     // better not to make any assumptions).
6667     // We assume that int128 has a higher rank than long long on all platforms.
6668     enum PromotedType {
6669             Dep=-1,
6670             Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6671     };
6672     static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6673                                         [LastPromotedArithmeticType] = {
6674 /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6675 /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6676 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6677 /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6678 /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6679 /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6680 /*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6681 /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6682 /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6683 /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6684 /*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6685     };
6686 
6687     assert(L < LastPromotedArithmeticType);
6688     assert(R < LastPromotedArithmeticType);
6689     int Idx = ConversionsTable[L][R];
6690 
6691     // Fast path: the table gives us a concrete answer.
6692     if (Idx != Dep) return getArithmeticType(Idx);
6693 
6694     // Slow path: we need to compare widths.
6695     // An invariant is that the signed type has higher rank.
6696     CanQualType LT = getArithmeticType(L),
6697                 RT = getArithmeticType(R);
6698     unsigned LW = S.Context.getIntWidth(LT),
6699              RW = S.Context.getIntWidth(RT);
6700 
6701     // If they're different widths, use the signed type.
6702     if (LW > RW) return LT;
6703     else if (LW < RW) return RT;
6704 
6705     // Otherwise, use the unsigned type of the signed type's rank.
6706     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6707     assert(L == SLL || R == SLL);
6708     return S.Context.UnsignedLongLongTy;
6709   }
6710 
6711   /// \brief Helper method to factor out the common pattern of adding overloads
6712   /// for '++' and '--' builtin operators.
6713   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6714                                            bool HasVolatile,
6715                                            bool HasRestrict) {
6716     QualType ParamTypes[2] = {
6717       S.Context.getLValueReferenceType(CandidateTy),
6718       S.Context.IntTy
6719     };
6720 
6721     // Non-volatile version.
6722     if (Args.size() == 1)
6723       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6724     else
6725       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6726 
6727     // Use a heuristic to reduce number of builtin candidates in the set:
6728     // add volatile version only if there are conversions to a volatile type.
6729     if (HasVolatile) {
6730       ParamTypes[0] =
6731         S.Context.getLValueReferenceType(
6732           S.Context.getVolatileType(CandidateTy));
6733       if (Args.size() == 1)
6734         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6735       else
6736         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6737     }
6738 
6739     // Add restrict version only if there are conversions to a restrict type
6740     // and our candidate type is a non-restrict-qualified pointer.
6741     if (HasRestrict && CandidateTy->isAnyPointerType() &&
6742         !CandidateTy.isRestrictQualified()) {
6743       ParamTypes[0]
6744         = S.Context.getLValueReferenceType(
6745             S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6746       if (Args.size() == 1)
6747         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6748       else
6749         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6750 
6751       if (HasVolatile) {
6752         ParamTypes[0]
6753           = S.Context.getLValueReferenceType(
6754               S.Context.getCVRQualifiedType(CandidateTy,
6755                                             (Qualifiers::Volatile |
6756                                              Qualifiers::Restrict)));
6757         if (Args.size() == 1)
6758           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6759         else
6760           S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6761       }
6762     }
6763 
6764   }
6765 
6766 public:
6767   BuiltinOperatorOverloadBuilder(
6768     Sema &S, ArrayRef<Expr *> Args,
6769     Qualifiers VisibleTypeConversionsQuals,
6770     bool HasArithmeticOrEnumeralCandidateType,
6771     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6772     OverloadCandidateSet &CandidateSet)
6773     : S(S), Args(Args),
6774       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6775       HasArithmeticOrEnumeralCandidateType(
6776         HasArithmeticOrEnumeralCandidateType),
6777       CandidateTypes(CandidateTypes),
6778       CandidateSet(CandidateSet) {
6779     // Validate some of our static helper constants in debug builds.
6780     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6781            "Invalid first promoted integral type");
6782     assert(getArithmeticType(LastPromotedIntegralType - 1)
6783              == S.Context.UnsignedInt128Ty &&
6784            "Invalid last promoted integral type");
6785     assert(getArithmeticType(FirstPromotedArithmeticType)
6786              == S.Context.FloatTy &&
6787            "Invalid first promoted arithmetic type");
6788     assert(getArithmeticType(LastPromotedArithmeticType - 1)
6789              == S.Context.UnsignedInt128Ty &&
6790            "Invalid last promoted arithmetic type");
6791   }
6792 
6793   // C++ [over.built]p3:
6794   //
6795   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6796   //   is either volatile or empty, there exist candidate operator
6797   //   functions of the form
6798   //
6799   //       VQ T&      operator++(VQ T&);
6800   //       T          operator++(VQ T&, int);
6801   //
6802   // C++ [over.built]p4:
6803   //
6804   //   For every pair (T, VQ), where T is an arithmetic type other
6805   //   than bool, and VQ is either volatile or empty, there exist
6806   //   candidate operator functions of the form
6807   //
6808   //       VQ T&      operator--(VQ T&);
6809   //       T          operator--(VQ T&, int);
6810   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6811     if (!HasArithmeticOrEnumeralCandidateType)
6812       return;
6813 
6814     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6815          Arith < NumArithmeticTypes; ++Arith) {
6816       addPlusPlusMinusMinusStyleOverloads(
6817         getArithmeticType(Arith),
6818         VisibleTypeConversionsQuals.hasVolatile(),
6819         VisibleTypeConversionsQuals.hasRestrict());
6820     }
6821   }
6822 
6823   // C++ [over.built]p5:
6824   //
6825   //   For every pair (T, VQ), where T is a cv-qualified or
6826   //   cv-unqualified object type, and VQ is either volatile or
6827   //   empty, there exist candidate operator functions of the form
6828   //
6829   //       T*VQ&      operator++(T*VQ&);
6830   //       T*VQ&      operator--(T*VQ&);
6831   //       T*         operator++(T*VQ&, int);
6832   //       T*         operator--(T*VQ&, int);
6833   void addPlusPlusMinusMinusPointerOverloads() {
6834     for (BuiltinCandidateTypeSet::iterator
6835               Ptr = CandidateTypes[0].pointer_begin(),
6836            PtrEnd = CandidateTypes[0].pointer_end();
6837          Ptr != PtrEnd; ++Ptr) {
6838       // Skip pointer types that aren't pointers to object types.
6839       if (!(*Ptr)->getPointeeType()->isObjectType())
6840         continue;
6841 
6842       addPlusPlusMinusMinusStyleOverloads(*Ptr,
6843         (!(*Ptr).isVolatileQualified() &&
6844          VisibleTypeConversionsQuals.hasVolatile()),
6845         (!(*Ptr).isRestrictQualified() &&
6846          VisibleTypeConversionsQuals.hasRestrict()));
6847     }
6848   }
6849 
6850   // C++ [over.built]p6:
6851   //   For every cv-qualified or cv-unqualified object type T, there
6852   //   exist candidate operator functions of the form
6853   //
6854   //       T&         operator*(T*);
6855   //
6856   // C++ [over.built]p7:
6857   //   For every function type T that does not have cv-qualifiers or a
6858   //   ref-qualifier, there exist candidate operator functions of the form
6859   //       T&         operator*(T*);
6860   void addUnaryStarPointerOverloads() {
6861     for (BuiltinCandidateTypeSet::iterator
6862               Ptr = CandidateTypes[0].pointer_begin(),
6863            PtrEnd = CandidateTypes[0].pointer_end();
6864          Ptr != PtrEnd; ++Ptr) {
6865       QualType ParamTy = *Ptr;
6866       QualType PointeeTy = ParamTy->getPointeeType();
6867       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6868         continue;
6869 
6870       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6871         if (Proto->getTypeQuals() || Proto->getRefQualifier())
6872           continue;
6873 
6874       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6875                             &ParamTy, Args, CandidateSet);
6876     }
6877   }
6878 
6879   // C++ [over.built]p9:
6880   //  For every promoted arithmetic type T, there exist candidate
6881   //  operator functions of the form
6882   //
6883   //       T         operator+(T);
6884   //       T         operator-(T);
6885   void addUnaryPlusOrMinusArithmeticOverloads() {
6886     if (!HasArithmeticOrEnumeralCandidateType)
6887       return;
6888 
6889     for (unsigned Arith = FirstPromotedArithmeticType;
6890          Arith < LastPromotedArithmeticType; ++Arith) {
6891       QualType ArithTy = getArithmeticType(Arith);
6892       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, CandidateSet);
6893     }
6894 
6895     // Extension: We also add these operators for vector types.
6896     for (BuiltinCandidateTypeSet::iterator
6897               Vec = CandidateTypes[0].vector_begin(),
6898            VecEnd = CandidateTypes[0].vector_end();
6899          Vec != VecEnd; ++Vec) {
6900       QualType VecTy = *Vec;
6901       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6902     }
6903   }
6904 
6905   // C++ [over.built]p8:
6906   //   For every type T, there exist candidate operator functions of
6907   //   the form
6908   //
6909   //       T*         operator+(T*);
6910   void addUnaryPlusPointerOverloads() {
6911     for (BuiltinCandidateTypeSet::iterator
6912               Ptr = CandidateTypes[0].pointer_begin(),
6913            PtrEnd = CandidateTypes[0].pointer_end();
6914          Ptr != PtrEnd; ++Ptr) {
6915       QualType ParamTy = *Ptr;
6916       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet);
6917     }
6918   }
6919 
6920   // C++ [over.built]p10:
6921   //   For every promoted integral type T, there exist candidate
6922   //   operator functions of the form
6923   //
6924   //        T         operator~(T);
6925   void addUnaryTildePromotedIntegralOverloads() {
6926     if (!HasArithmeticOrEnumeralCandidateType)
6927       return;
6928 
6929     for (unsigned Int = FirstPromotedIntegralType;
6930          Int < LastPromotedIntegralType; ++Int) {
6931       QualType IntTy = getArithmeticType(Int);
6932       S.AddBuiltinCandidate(IntTy, &IntTy, Args, CandidateSet);
6933     }
6934 
6935     // Extension: We also add this operator for vector types.
6936     for (BuiltinCandidateTypeSet::iterator
6937               Vec = CandidateTypes[0].vector_begin(),
6938            VecEnd = CandidateTypes[0].vector_end();
6939          Vec != VecEnd; ++Vec) {
6940       QualType VecTy = *Vec;
6941       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6942     }
6943   }
6944 
6945   // C++ [over.match.oper]p16:
6946   //   For every pointer to member type T, there exist candidate operator
6947   //   functions of the form
6948   //
6949   //        bool operator==(T,T);
6950   //        bool operator!=(T,T);
6951   void addEqualEqualOrNotEqualMemberPointerOverloads() {
6952     /// Set of (canonical) types that we've already handled.
6953     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6954 
6955     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6956       for (BuiltinCandidateTypeSet::iterator
6957                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6958              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6959            MemPtr != MemPtrEnd;
6960            ++MemPtr) {
6961         // Don't add the same builtin candidate twice.
6962         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6963           continue;
6964 
6965         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6966         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
6967       }
6968     }
6969   }
6970 
6971   // C++ [over.built]p15:
6972   //
6973   //   For every T, where T is an enumeration type, a pointer type, or
6974   //   std::nullptr_t, there exist candidate operator functions of the form
6975   //
6976   //        bool       operator<(T, T);
6977   //        bool       operator>(T, T);
6978   //        bool       operator<=(T, T);
6979   //        bool       operator>=(T, T);
6980   //        bool       operator==(T, T);
6981   //        bool       operator!=(T, T);
6982   void addRelationalPointerOrEnumeralOverloads() {
6983     // C++ [over.match.oper]p3:
6984     //   [...]the built-in candidates include all of the candidate operator
6985     //   functions defined in 13.6 that, compared to the given operator, [...]
6986     //   do not have the same parameter-type-list as any non-template non-member
6987     //   candidate.
6988     //
6989     // Note that in practice, this only affects enumeration types because there
6990     // aren't any built-in candidates of record type, and a user-defined operator
6991     // must have an operand of record or enumeration type. Also, the only other
6992     // overloaded operator with enumeration arguments, operator=,
6993     // cannot be overloaded for enumeration types, so this is the only place
6994     // where we must suppress candidates like this.
6995     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6996       UserDefinedBinaryOperators;
6997 
6998     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6999       if (CandidateTypes[ArgIdx].enumeration_begin() !=
7000           CandidateTypes[ArgIdx].enumeration_end()) {
7001         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
7002                                          CEnd = CandidateSet.end();
7003              C != CEnd; ++C) {
7004           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
7005             continue;
7006 
7007           if (C->Function->isFunctionTemplateSpecialization())
7008             continue;
7009 
7010           QualType FirstParamType =
7011             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
7012           QualType SecondParamType =
7013             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
7014 
7015           // Skip if either parameter isn't of enumeral type.
7016           if (!FirstParamType->isEnumeralType() ||
7017               !SecondParamType->isEnumeralType())
7018             continue;
7019 
7020           // Add this operator to the set of known user-defined operators.
7021           UserDefinedBinaryOperators.insert(
7022             std::make_pair(S.Context.getCanonicalType(FirstParamType),
7023                            S.Context.getCanonicalType(SecondParamType)));
7024         }
7025       }
7026     }
7027 
7028     /// Set of (canonical) types that we've already handled.
7029     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7030 
7031     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7032       for (BuiltinCandidateTypeSet::iterator
7033                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7034              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7035            Ptr != PtrEnd; ++Ptr) {
7036         // Don't add the same builtin candidate twice.
7037         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7038           continue;
7039 
7040         QualType ParamTypes[2] = { *Ptr, *Ptr };
7041         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7042       }
7043       for (BuiltinCandidateTypeSet::iterator
7044                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7045              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7046            Enum != EnumEnd; ++Enum) {
7047         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
7048 
7049         // Don't add the same builtin candidate twice, or if a user defined
7050         // candidate exists.
7051         if (!AddedTypes.insert(CanonType) ||
7052             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
7053                                                             CanonType)))
7054           continue;
7055 
7056         QualType ParamTypes[2] = { *Enum, *Enum };
7057         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7058       }
7059 
7060       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
7061         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
7062         if (AddedTypes.insert(NullPtrTy) &&
7063             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
7064                                                              NullPtrTy))) {
7065           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
7066           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args,
7067                                 CandidateSet);
7068         }
7069       }
7070     }
7071   }
7072 
7073   // C++ [over.built]p13:
7074   //
7075   //   For every cv-qualified or cv-unqualified object type T
7076   //   there exist candidate operator functions of the form
7077   //
7078   //      T*         operator+(T*, ptrdiff_t);
7079   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
7080   //      T*         operator-(T*, ptrdiff_t);
7081   //      T*         operator+(ptrdiff_t, T*);
7082   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
7083   //
7084   // C++ [over.built]p14:
7085   //
7086   //   For every T, where T is a pointer to object type, there
7087   //   exist candidate operator functions of the form
7088   //
7089   //      ptrdiff_t  operator-(T, T);
7090   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
7091     /// Set of (canonical) types that we've already handled.
7092     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7093 
7094     for (int Arg = 0; Arg < 2; ++Arg) {
7095       QualType AsymetricParamTypes[2] = {
7096         S.Context.getPointerDiffType(),
7097         S.Context.getPointerDiffType(),
7098       };
7099       for (BuiltinCandidateTypeSet::iterator
7100                 Ptr = CandidateTypes[Arg].pointer_begin(),
7101              PtrEnd = CandidateTypes[Arg].pointer_end();
7102            Ptr != PtrEnd; ++Ptr) {
7103         QualType PointeeTy = (*Ptr)->getPointeeType();
7104         if (!PointeeTy->isObjectType())
7105           continue;
7106 
7107         AsymetricParamTypes[Arg] = *Ptr;
7108         if (Arg == 0 || Op == OO_Plus) {
7109           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
7110           // T* operator+(ptrdiff_t, T*);
7111           S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, CandidateSet);
7112         }
7113         if (Op == OO_Minus) {
7114           // ptrdiff_t operator-(T, T);
7115           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7116             continue;
7117 
7118           QualType ParamTypes[2] = { *Ptr, *Ptr };
7119           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
7120                                 Args, CandidateSet);
7121         }
7122       }
7123     }
7124   }
7125 
7126   // C++ [over.built]p12:
7127   //
7128   //   For every pair of promoted arithmetic types L and R, there
7129   //   exist candidate operator functions of the form
7130   //
7131   //        LR         operator*(L, R);
7132   //        LR         operator/(L, R);
7133   //        LR         operator+(L, R);
7134   //        LR         operator-(L, R);
7135   //        bool       operator<(L, R);
7136   //        bool       operator>(L, R);
7137   //        bool       operator<=(L, R);
7138   //        bool       operator>=(L, R);
7139   //        bool       operator==(L, R);
7140   //        bool       operator!=(L, R);
7141   //
7142   //   where LR is the result of the usual arithmetic conversions
7143   //   between types L and R.
7144   //
7145   // C++ [over.built]p24:
7146   //
7147   //   For every pair of promoted arithmetic types L and R, there exist
7148   //   candidate operator functions of the form
7149   //
7150   //        LR       operator?(bool, L, R);
7151   //
7152   //   where LR is the result of the usual arithmetic conversions
7153   //   between types L and R.
7154   // Our candidates ignore the first parameter.
7155   void addGenericBinaryArithmeticOverloads(bool isComparison) {
7156     if (!HasArithmeticOrEnumeralCandidateType)
7157       return;
7158 
7159     for (unsigned Left = FirstPromotedArithmeticType;
7160          Left < LastPromotedArithmeticType; ++Left) {
7161       for (unsigned Right = FirstPromotedArithmeticType;
7162            Right < LastPromotedArithmeticType; ++Right) {
7163         QualType LandR[2] = { getArithmeticType(Left),
7164                               getArithmeticType(Right) };
7165         QualType Result =
7166           isComparison ? S.Context.BoolTy
7167                        : getUsualArithmeticConversions(Left, Right);
7168         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7169       }
7170     }
7171 
7172     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
7173     // conditional operator for vector types.
7174     for (BuiltinCandidateTypeSet::iterator
7175               Vec1 = CandidateTypes[0].vector_begin(),
7176            Vec1End = CandidateTypes[0].vector_end();
7177          Vec1 != Vec1End; ++Vec1) {
7178       for (BuiltinCandidateTypeSet::iterator
7179                 Vec2 = CandidateTypes[1].vector_begin(),
7180              Vec2End = CandidateTypes[1].vector_end();
7181            Vec2 != Vec2End; ++Vec2) {
7182         QualType LandR[2] = { *Vec1, *Vec2 };
7183         QualType Result = S.Context.BoolTy;
7184         if (!isComparison) {
7185           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7186             Result = *Vec1;
7187           else
7188             Result = *Vec2;
7189         }
7190 
7191         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7192       }
7193     }
7194   }
7195 
7196   // C++ [over.built]p17:
7197   //
7198   //   For every pair of promoted integral types L and R, there
7199   //   exist candidate operator functions of the form
7200   //
7201   //      LR         operator%(L, R);
7202   //      LR         operator&(L, R);
7203   //      LR         operator^(L, R);
7204   //      LR         operator|(L, R);
7205   //      L          operator<<(L, R);
7206   //      L          operator>>(L, R);
7207   //
7208   //   where LR is the result of the usual arithmetic conversions
7209   //   between types L and R.
7210   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7211     if (!HasArithmeticOrEnumeralCandidateType)
7212       return;
7213 
7214     for (unsigned Left = FirstPromotedIntegralType;
7215          Left < LastPromotedIntegralType; ++Left) {
7216       for (unsigned Right = FirstPromotedIntegralType;
7217            Right < LastPromotedIntegralType; ++Right) {
7218         QualType LandR[2] = { getArithmeticType(Left),
7219                               getArithmeticType(Right) };
7220         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7221             ? LandR[0]
7222             : getUsualArithmeticConversions(Left, Right);
7223         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7224       }
7225     }
7226   }
7227 
7228   // C++ [over.built]p20:
7229   //
7230   //   For every pair (T, VQ), where T is an enumeration or
7231   //   pointer to member type and VQ is either volatile or
7232   //   empty, there exist candidate operator functions of the form
7233   //
7234   //        VQ T&      operator=(VQ T&, T);
7235   void addAssignmentMemberPointerOrEnumeralOverloads() {
7236     /// Set of (canonical) types that we've already handled.
7237     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7238 
7239     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7240       for (BuiltinCandidateTypeSet::iterator
7241                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7242              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7243            Enum != EnumEnd; ++Enum) {
7244         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7245           continue;
7246 
7247         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, CandidateSet);
7248       }
7249 
7250       for (BuiltinCandidateTypeSet::iterator
7251                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7252              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7253            MemPtr != MemPtrEnd; ++MemPtr) {
7254         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7255           continue;
7256 
7257         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, CandidateSet);
7258       }
7259     }
7260   }
7261 
7262   // C++ [over.built]p19:
7263   //
7264   //   For every pair (T, VQ), where T is any type and VQ is either
7265   //   volatile or empty, there exist candidate operator functions
7266   //   of the form
7267   //
7268   //        T*VQ&      operator=(T*VQ&, T*);
7269   //
7270   // C++ [over.built]p21:
7271   //
7272   //   For every pair (T, VQ), where T is a cv-qualified or
7273   //   cv-unqualified object type and VQ is either volatile or
7274   //   empty, there exist candidate operator functions of the form
7275   //
7276   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7277   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7278   void addAssignmentPointerOverloads(bool isEqualOp) {
7279     /// Set of (canonical) types that we've already handled.
7280     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7281 
7282     for (BuiltinCandidateTypeSet::iterator
7283               Ptr = CandidateTypes[0].pointer_begin(),
7284            PtrEnd = CandidateTypes[0].pointer_end();
7285          Ptr != PtrEnd; ++Ptr) {
7286       // If this is operator=, keep track of the builtin candidates we added.
7287       if (isEqualOp)
7288         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7289       else if (!(*Ptr)->getPointeeType()->isObjectType())
7290         continue;
7291 
7292       // non-volatile version
7293       QualType ParamTypes[2] = {
7294         S.Context.getLValueReferenceType(*Ptr),
7295         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7296       };
7297       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7298                             /*IsAssigmentOperator=*/ isEqualOp);
7299 
7300       bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7301                           VisibleTypeConversionsQuals.hasVolatile();
7302       if (NeedVolatile) {
7303         // volatile version
7304         ParamTypes[0] =
7305           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7306         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7307                               /*IsAssigmentOperator=*/isEqualOp);
7308       }
7309 
7310       if (!(*Ptr).isRestrictQualified() &&
7311           VisibleTypeConversionsQuals.hasRestrict()) {
7312         // restrict version
7313         ParamTypes[0]
7314           = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7315         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7316                               /*IsAssigmentOperator=*/isEqualOp);
7317 
7318         if (NeedVolatile) {
7319           // volatile restrict version
7320           ParamTypes[0]
7321             = S.Context.getLValueReferenceType(
7322                 S.Context.getCVRQualifiedType(*Ptr,
7323                                               (Qualifiers::Volatile |
7324                                                Qualifiers::Restrict)));
7325           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7326                                 /*IsAssigmentOperator=*/isEqualOp);
7327         }
7328       }
7329     }
7330 
7331     if (isEqualOp) {
7332       for (BuiltinCandidateTypeSet::iterator
7333                 Ptr = CandidateTypes[1].pointer_begin(),
7334              PtrEnd = CandidateTypes[1].pointer_end();
7335            Ptr != PtrEnd; ++Ptr) {
7336         // Make sure we don't add the same candidate twice.
7337         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7338           continue;
7339 
7340         QualType ParamTypes[2] = {
7341           S.Context.getLValueReferenceType(*Ptr),
7342           *Ptr,
7343         };
7344 
7345         // non-volatile version
7346         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7347                               /*IsAssigmentOperator=*/true);
7348 
7349         bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7350                            VisibleTypeConversionsQuals.hasVolatile();
7351         if (NeedVolatile) {
7352           // volatile version
7353           ParamTypes[0] =
7354             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7355           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7356                                 /*IsAssigmentOperator=*/true);
7357         }
7358 
7359         if (!(*Ptr).isRestrictQualified() &&
7360             VisibleTypeConversionsQuals.hasRestrict()) {
7361           // restrict version
7362           ParamTypes[0]
7363             = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7364           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7365                                 /*IsAssigmentOperator=*/true);
7366 
7367           if (NeedVolatile) {
7368             // volatile restrict version
7369             ParamTypes[0]
7370               = S.Context.getLValueReferenceType(
7371                   S.Context.getCVRQualifiedType(*Ptr,
7372                                                 (Qualifiers::Volatile |
7373                                                  Qualifiers::Restrict)));
7374             S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7375                                   /*IsAssigmentOperator=*/true);
7376           }
7377         }
7378       }
7379     }
7380   }
7381 
7382   // C++ [over.built]p18:
7383   //
7384   //   For every triple (L, VQ, R), where L is an arithmetic type,
7385   //   VQ is either volatile or empty, and R is a promoted
7386   //   arithmetic type, there exist candidate operator functions of
7387   //   the form
7388   //
7389   //        VQ L&      operator=(VQ L&, R);
7390   //        VQ L&      operator*=(VQ L&, R);
7391   //        VQ L&      operator/=(VQ L&, R);
7392   //        VQ L&      operator+=(VQ L&, R);
7393   //        VQ L&      operator-=(VQ L&, R);
7394   void addAssignmentArithmeticOverloads(bool isEqualOp) {
7395     if (!HasArithmeticOrEnumeralCandidateType)
7396       return;
7397 
7398     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7399       for (unsigned Right = FirstPromotedArithmeticType;
7400            Right < LastPromotedArithmeticType; ++Right) {
7401         QualType ParamTypes[2];
7402         ParamTypes[1] = getArithmeticType(Right);
7403 
7404         // Add this built-in operator as a candidate (VQ is empty).
7405         ParamTypes[0] =
7406           S.Context.getLValueReferenceType(getArithmeticType(Left));
7407         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7408                               /*IsAssigmentOperator=*/isEqualOp);
7409 
7410         // Add this built-in operator as a candidate (VQ is 'volatile').
7411         if (VisibleTypeConversionsQuals.hasVolatile()) {
7412           ParamTypes[0] =
7413             S.Context.getVolatileType(getArithmeticType(Left));
7414           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7415           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7416                                 /*IsAssigmentOperator=*/isEqualOp);
7417         }
7418       }
7419     }
7420 
7421     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7422     for (BuiltinCandidateTypeSet::iterator
7423               Vec1 = CandidateTypes[0].vector_begin(),
7424            Vec1End = CandidateTypes[0].vector_end();
7425          Vec1 != Vec1End; ++Vec1) {
7426       for (BuiltinCandidateTypeSet::iterator
7427                 Vec2 = CandidateTypes[1].vector_begin(),
7428              Vec2End = CandidateTypes[1].vector_end();
7429            Vec2 != Vec2End; ++Vec2) {
7430         QualType ParamTypes[2];
7431         ParamTypes[1] = *Vec2;
7432         // Add this built-in operator as a candidate (VQ is empty).
7433         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7434         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7435                               /*IsAssigmentOperator=*/isEqualOp);
7436 
7437         // Add this built-in operator as a candidate (VQ is 'volatile').
7438         if (VisibleTypeConversionsQuals.hasVolatile()) {
7439           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7440           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7441           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7442                                 /*IsAssigmentOperator=*/isEqualOp);
7443         }
7444       }
7445     }
7446   }
7447 
7448   // C++ [over.built]p22:
7449   //
7450   //   For every triple (L, VQ, R), where L is an integral type, VQ
7451   //   is either volatile or empty, and R is a promoted integral
7452   //   type, there exist candidate operator functions of the form
7453   //
7454   //        VQ L&       operator%=(VQ L&, R);
7455   //        VQ L&       operator<<=(VQ L&, R);
7456   //        VQ L&       operator>>=(VQ L&, R);
7457   //        VQ L&       operator&=(VQ L&, R);
7458   //        VQ L&       operator^=(VQ L&, R);
7459   //        VQ L&       operator|=(VQ L&, R);
7460   void addAssignmentIntegralOverloads() {
7461     if (!HasArithmeticOrEnumeralCandidateType)
7462       return;
7463 
7464     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7465       for (unsigned Right = FirstPromotedIntegralType;
7466            Right < LastPromotedIntegralType; ++Right) {
7467         QualType ParamTypes[2];
7468         ParamTypes[1] = getArithmeticType(Right);
7469 
7470         // Add this built-in operator as a candidate (VQ is empty).
7471         ParamTypes[0] =
7472           S.Context.getLValueReferenceType(getArithmeticType(Left));
7473         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7474         if (VisibleTypeConversionsQuals.hasVolatile()) {
7475           // Add this built-in operator as a candidate (VQ is 'volatile').
7476           ParamTypes[0] = getArithmeticType(Left);
7477           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7478           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7479           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7480         }
7481       }
7482     }
7483   }
7484 
7485   // C++ [over.operator]p23:
7486   //
7487   //   There also exist candidate operator functions of the form
7488   //
7489   //        bool        operator!(bool);
7490   //        bool        operator&&(bool, bool);
7491   //        bool        operator||(bool, bool);
7492   void addExclaimOverload() {
7493     QualType ParamTy = S.Context.BoolTy;
7494     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet,
7495                           /*IsAssignmentOperator=*/false,
7496                           /*NumContextualBoolArguments=*/1);
7497   }
7498   void addAmpAmpOrPipePipeOverload() {
7499     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7500     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet,
7501                           /*IsAssignmentOperator=*/false,
7502                           /*NumContextualBoolArguments=*/2);
7503   }
7504 
7505   // C++ [over.built]p13:
7506   //
7507   //   For every cv-qualified or cv-unqualified object type T there
7508   //   exist candidate operator functions of the form
7509   //
7510   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7511   //        T&         operator[](T*, ptrdiff_t);
7512   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7513   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7514   //        T&         operator[](ptrdiff_t, T*);
7515   void addSubscriptOverloads() {
7516     for (BuiltinCandidateTypeSet::iterator
7517               Ptr = CandidateTypes[0].pointer_begin(),
7518            PtrEnd = CandidateTypes[0].pointer_end();
7519          Ptr != PtrEnd; ++Ptr) {
7520       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7521       QualType PointeeType = (*Ptr)->getPointeeType();
7522       if (!PointeeType->isObjectType())
7523         continue;
7524 
7525       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7526 
7527       // T& operator[](T*, ptrdiff_t)
7528       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7529     }
7530 
7531     for (BuiltinCandidateTypeSet::iterator
7532               Ptr = CandidateTypes[1].pointer_begin(),
7533            PtrEnd = CandidateTypes[1].pointer_end();
7534          Ptr != PtrEnd; ++Ptr) {
7535       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7536       QualType PointeeType = (*Ptr)->getPointeeType();
7537       if (!PointeeType->isObjectType())
7538         continue;
7539 
7540       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7541 
7542       // T& operator[](ptrdiff_t, T*)
7543       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7544     }
7545   }
7546 
7547   // C++ [over.built]p11:
7548   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7549   //    C1 is the same type as C2 or is a derived class of C2, T is an object
7550   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7551   //    there exist candidate operator functions of the form
7552   //
7553   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7554   //
7555   //    where CV12 is the union of CV1 and CV2.
7556   void addArrowStarOverloads() {
7557     for (BuiltinCandidateTypeSet::iterator
7558              Ptr = CandidateTypes[0].pointer_begin(),
7559            PtrEnd = CandidateTypes[0].pointer_end();
7560          Ptr != PtrEnd; ++Ptr) {
7561       QualType C1Ty = (*Ptr);
7562       QualType C1;
7563       QualifierCollector Q1;
7564       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7565       if (!isa<RecordType>(C1))
7566         continue;
7567       // heuristic to reduce number of builtin candidates in the set.
7568       // Add volatile/restrict version only if there are conversions to a
7569       // volatile/restrict type.
7570       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7571         continue;
7572       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7573         continue;
7574       for (BuiltinCandidateTypeSet::iterator
7575                 MemPtr = CandidateTypes[1].member_pointer_begin(),
7576              MemPtrEnd = CandidateTypes[1].member_pointer_end();
7577            MemPtr != MemPtrEnd; ++MemPtr) {
7578         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7579         QualType C2 = QualType(mptr->getClass(), 0);
7580         C2 = C2.getUnqualifiedType();
7581         if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7582           break;
7583         QualType ParamTypes[2] = { *Ptr, *MemPtr };
7584         // build CV12 T&
7585         QualType T = mptr->getPointeeType();
7586         if (!VisibleTypeConversionsQuals.hasVolatile() &&
7587             T.isVolatileQualified())
7588           continue;
7589         if (!VisibleTypeConversionsQuals.hasRestrict() &&
7590             T.isRestrictQualified())
7591           continue;
7592         T = Q1.apply(S.Context, T);
7593         QualType ResultTy = S.Context.getLValueReferenceType(T);
7594         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7595       }
7596     }
7597   }
7598 
7599   // Note that we don't consider the first argument, since it has been
7600   // contextually converted to bool long ago. The candidates below are
7601   // therefore added as binary.
7602   //
7603   // C++ [over.built]p25:
7604   //   For every type T, where T is a pointer, pointer-to-member, or scoped
7605   //   enumeration type, there exist candidate operator functions of the form
7606   //
7607   //        T        operator?(bool, T, T);
7608   //
7609   void addConditionalOperatorOverloads() {
7610     /// Set of (canonical) types that we've already handled.
7611     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7612 
7613     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7614       for (BuiltinCandidateTypeSet::iterator
7615                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7616              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7617            Ptr != PtrEnd; ++Ptr) {
7618         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7619           continue;
7620 
7621         QualType ParamTypes[2] = { *Ptr, *Ptr };
7622         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, CandidateSet);
7623       }
7624 
7625       for (BuiltinCandidateTypeSet::iterator
7626                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7627              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7628            MemPtr != MemPtrEnd; ++MemPtr) {
7629         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7630           continue;
7631 
7632         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7633         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, CandidateSet);
7634       }
7635 
7636       if (S.getLangOpts().CPlusPlus11) {
7637         for (BuiltinCandidateTypeSet::iterator
7638                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7639                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7640              Enum != EnumEnd; ++Enum) {
7641           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7642             continue;
7643 
7644           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7645             continue;
7646 
7647           QualType ParamTypes[2] = { *Enum, *Enum };
7648           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, CandidateSet);
7649         }
7650       }
7651     }
7652   }
7653 };
7654 
7655 } // end anonymous namespace
7656 
7657 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
7658 /// operator overloads to the candidate set (C++ [over.built]), based
7659 /// on the operator @p Op and the arguments given. For example, if the
7660 /// operator is a binary '+', this routine might add "int
7661 /// operator+(int, int)" to cover integer addition.
7662 void Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7663                                         SourceLocation OpLoc,
7664                                         ArrayRef<Expr *> Args,
7665                                         OverloadCandidateSet &CandidateSet) {
7666   // Find all of the types that the arguments can convert to, but only
7667   // if the operator we're looking at has built-in operator candidates
7668   // that make use of these types. Also record whether we encounter non-record
7669   // candidate types or either arithmetic or enumeral candidate types.
7670   Qualifiers VisibleTypeConversionsQuals;
7671   VisibleTypeConversionsQuals.addConst();
7672   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
7673     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7674 
7675   bool HasNonRecordCandidateType = false;
7676   bool HasArithmeticOrEnumeralCandidateType = false;
7677   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7678   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7679     CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7680     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7681                                                  OpLoc,
7682                                                  true,
7683                                                  (Op == OO_Exclaim ||
7684                                                   Op == OO_AmpAmp ||
7685                                                   Op == OO_PipePipe),
7686                                                  VisibleTypeConversionsQuals);
7687     HasNonRecordCandidateType = HasNonRecordCandidateType ||
7688         CandidateTypes[ArgIdx].hasNonRecordTypes();
7689     HasArithmeticOrEnumeralCandidateType =
7690         HasArithmeticOrEnumeralCandidateType ||
7691         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7692   }
7693 
7694   // Exit early when no non-record types have been added to the candidate set
7695   // for any of the arguments to the operator.
7696   //
7697   // We can't exit early for !, ||, or &&, since there we have always have
7698   // 'bool' overloads.
7699   if (!HasNonRecordCandidateType &&
7700       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7701     return;
7702 
7703   // Setup an object to manage the common state for building overloads.
7704   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args,
7705                                            VisibleTypeConversionsQuals,
7706                                            HasArithmeticOrEnumeralCandidateType,
7707                                            CandidateTypes, CandidateSet);
7708 
7709   // Dispatch over the operation to add in only those overloads which apply.
7710   switch (Op) {
7711   case OO_None:
7712   case NUM_OVERLOADED_OPERATORS:
7713     llvm_unreachable("Expected an overloaded operator");
7714 
7715   case OO_New:
7716   case OO_Delete:
7717   case OO_Array_New:
7718   case OO_Array_Delete:
7719   case OO_Call:
7720     llvm_unreachable(
7721                     "Special operators don't use AddBuiltinOperatorCandidates");
7722 
7723   case OO_Comma:
7724   case OO_Arrow:
7725     // C++ [over.match.oper]p3:
7726     //   -- For the operator ',', the unary operator '&', or the
7727     //      operator '->', the built-in candidates set is empty.
7728     break;
7729 
7730   case OO_Plus: // '+' is either unary or binary
7731     if (Args.size() == 1)
7732       OpBuilder.addUnaryPlusPointerOverloads();
7733     // Fall through.
7734 
7735   case OO_Minus: // '-' is either unary or binary
7736     if (Args.size() == 1) {
7737       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7738     } else {
7739       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7740       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7741     }
7742     break;
7743 
7744   case OO_Star: // '*' is either unary or binary
7745     if (Args.size() == 1)
7746       OpBuilder.addUnaryStarPointerOverloads();
7747     else
7748       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7749     break;
7750 
7751   case OO_Slash:
7752     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7753     break;
7754 
7755   case OO_PlusPlus:
7756   case OO_MinusMinus:
7757     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7758     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7759     break;
7760 
7761   case OO_EqualEqual:
7762   case OO_ExclaimEqual:
7763     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7764     // Fall through.
7765 
7766   case OO_Less:
7767   case OO_Greater:
7768   case OO_LessEqual:
7769   case OO_GreaterEqual:
7770     OpBuilder.addRelationalPointerOrEnumeralOverloads();
7771     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7772     break;
7773 
7774   case OO_Percent:
7775   case OO_Caret:
7776   case OO_Pipe:
7777   case OO_LessLess:
7778   case OO_GreaterGreater:
7779     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7780     break;
7781 
7782   case OO_Amp: // '&' is either unary or binary
7783     if (Args.size() == 1)
7784       // C++ [over.match.oper]p3:
7785       //   -- For the operator ',', the unary operator '&', or the
7786       //      operator '->', the built-in candidates set is empty.
7787       break;
7788 
7789     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7790     break;
7791 
7792   case OO_Tilde:
7793     OpBuilder.addUnaryTildePromotedIntegralOverloads();
7794     break;
7795 
7796   case OO_Equal:
7797     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7798     // Fall through.
7799 
7800   case OO_PlusEqual:
7801   case OO_MinusEqual:
7802     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7803     // Fall through.
7804 
7805   case OO_StarEqual:
7806   case OO_SlashEqual:
7807     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7808     break;
7809 
7810   case OO_PercentEqual:
7811   case OO_LessLessEqual:
7812   case OO_GreaterGreaterEqual:
7813   case OO_AmpEqual:
7814   case OO_CaretEqual:
7815   case OO_PipeEqual:
7816     OpBuilder.addAssignmentIntegralOverloads();
7817     break;
7818 
7819   case OO_Exclaim:
7820     OpBuilder.addExclaimOverload();
7821     break;
7822 
7823   case OO_AmpAmp:
7824   case OO_PipePipe:
7825     OpBuilder.addAmpAmpOrPipePipeOverload();
7826     break;
7827 
7828   case OO_Subscript:
7829     OpBuilder.addSubscriptOverloads();
7830     break;
7831 
7832   case OO_ArrowStar:
7833     OpBuilder.addArrowStarOverloads();
7834     break;
7835 
7836   case OO_Conditional:
7837     OpBuilder.addConditionalOperatorOverloads();
7838     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7839     break;
7840   }
7841 }
7842 
7843 /// \brief Add function candidates found via argument-dependent lookup
7844 /// to the set of overloading candidates.
7845 ///
7846 /// This routine performs argument-dependent name lookup based on the
7847 /// given function name (which may also be an operator name) and adds
7848 /// all of the overload candidates found by ADL to the overload
7849 /// candidate set (C++ [basic.lookup.argdep]).
7850 void
7851 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7852                                            bool Operator, SourceLocation Loc,
7853                                            ArrayRef<Expr *> Args,
7854                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
7855                                            OverloadCandidateSet& CandidateSet,
7856                                            bool PartialOverloading) {
7857   ADLResult Fns;
7858 
7859   // FIXME: This approach for uniquing ADL results (and removing
7860   // redundant candidates from the set) relies on pointer-equality,
7861   // which means we need to key off the canonical decl.  However,
7862   // always going back to the canonical decl might not get us the
7863   // right set of default arguments.  What default arguments are
7864   // we supposed to consider on ADL candidates, anyway?
7865 
7866   // FIXME: Pass in the explicit template arguments?
7867   ArgumentDependentLookup(Name, Operator, Loc, Args, Fns);
7868 
7869   // Erase all of the candidates we already knew about.
7870   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7871                                    CandEnd = CandidateSet.end();
7872        Cand != CandEnd; ++Cand)
7873     if (Cand->Function) {
7874       Fns.erase(Cand->Function);
7875       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7876         Fns.erase(FunTmpl);
7877     }
7878 
7879   // For each of the ADL candidates we found, add it to the overload
7880   // set.
7881   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7882     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7883     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7884       if (ExplicitTemplateArgs)
7885         continue;
7886 
7887       AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7888                            PartialOverloading);
7889     } else
7890       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7891                                    FoundDecl, ExplicitTemplateArgs,
7892                                    Args, CandidateSet);
7893   }
7894 }
7895 
7896 /// isBetterOverloadCandidate - Determines whether the first overload
7897 /// candidate is a better candidate than the second (C++ 13.3.3p1).
7898 bool
7899 isBetterOverloadCandidate(Sema &S,
7900                           const OverloadCandidate &Cand1,
7901                           const OverloadCandidate &Cand2,
7902                           SourceLocation Loc,
7903                           bool UserDefinedConversion) {
7904   // Define viable functions to be better candidates than non-viable
7905   // functions.
7906   if (!Cand2.Viable)
7907     return Cand1.Viable;
7908   else if (!Cand1.Viable)
7909     return false;
7910 
7911   // C++ [over.match.best]p1:
7912   //
7913   //   -- if F is a static member function, ICS1(F) is defined such
7914   //      that ICS1(F) is neither better nor worse than ICS1(G) for
7915   //      any function G, and, symmetrically, ICS1(G) is neither
7916   //      better nor worse than ICS1(F).
7917   unsigned StartArg = 0;
7918   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7919     StartArg = 1;
7920 
7921   // C++ [over.match.best]p1:
7922   //   A viable function F1 is defined to be a better function than another
7923   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7924   //   conversion sequence than ICSi(F2), and then...
7925   unsigned NumArgs = Cand1.NumConversions;
7926   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7927   bool HasBetterConversion = false;
7928   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7929     switch (CompareImplicitConversionSequences(S,
7930                                                Cand1.Conversions[ArgIdx],
7931                                                Cand2.Conversions[ArgIdx])) {
7932     case ImplicitConversionSequence::Better:
7933       // Cand1 has a better conversion sequence.
7934       HasBetterConversion = true;
7935       break;
7936 
7937     case ImplicitConversionSequence::Worse:
7938       // Cand1 can't be better than Cand2.
7939       return false;
7940 
7941     case ImplicitConversionSequence::Indistinguishable:
7942       // Do nothing.
7943       break;
7944     }
7945   }
7946 
7947   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7948   //       ICSj(F2), or, if not that,
7949   if (HasBetterConversion)
7950     return true;
7951 
7952   //     - F1 is a non-template function and F2 is a function template
7953   //       specialization, or, if not that,
7954   if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7955       Cand2.Function && Cand2.Function->getPrimaryTemplate())
7956     return true;
7957 
7958   //   -- F1 and F2 are function template specializations, and the function
7959   //      template for F1 is more specialized than the template for F2
7960   //      according to the partial ordering rules described in 14.5.5.2, or,
7961   //      if not that,
7962   if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7963       Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7964     if (FunctionTemplateDecl *BetterTemplate
7965           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7966                                          Cand2.Function->getPrimaryTemplate(),
7967                                          Loc,
7968                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7969                                                              : TPOC_Call,
7970                                          Cand1.ExplicitCallArguments))
7971       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7972   }
7973 
7974   //   -- the context is an initialization by user-defined conversion
7975   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7976   //      from the return type of F1 to the destination type (i.e.,
7977   //      the type of the entity being initialized) is a better
7978   //      conversion sequence than the standard conversion sequence
7979   //      from the return type of F2 to the destination type.
7980   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7981       isa<CXXConversionDecl>(Cand1.Function) &&
7982       isa<CXXConversionDecl>(Cand2.Function)) {
7983     // First check whether we prefer one of the conversion functions over the
7984     // other. This only distinguishes the results in non-standard, extension
7985     // cases such as the conversion from a lambda closure type to a function
7986     // pointer or block.
7987     ImplicitConversionSequence::CompareKind FuncResult
7988       = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7989     if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7990       return FuncResult;
7991 
7992     switch (CompareStandardConversionSequences(S,
7993                                                Cand1.FinalConversion,
7994                                                Cand2.FinalConversion)) {
7995     case ImplicitConversionSequence::Better:
7996       // Cand1 has a better conversion sequence.
7997       return true;
7998 
7999     case ImplicitConversionSequence::Worse:
8000       // Cand1 can't be better than Cand2.
8001       return false;
8002 
8003     case ImplicitConversionSequence::Indistinguishable:
8004       // Do nothing
8005       break;
8006     }
8007   }
8008 
8009   return false;
8010 }
8011 
8012 /// \brief Computes the best viable function (C++ 13.3.3)
8013 /// within an overload candidate set.
8014 ///
8015 /// \param Loc The location of the function name (or operator symbol) for
8016 /// which overload resolution occurs.
8017 ///
8018 /// \param Best If overload resolution was successful or found a deleted
8019 /// function, \p Best points to the candidate function found.
8020 ///
8021 /// \returns The result of overload resolution.
8022 OverloadingResult
8023 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
8024                                          iterator &Best,
8025                                          bool UserDefinedConversion) {
8026   // Find the best viable function.
8027   Best = end();
8028   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8029     if (Cand->Viable)
8030       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
8031                                                      UserDefinedConversion))
8032         Best = Cand;
8033   }
8034 
8035   // If we didn't find any viable functions, abort.
8036   if (Best == end())
8037     return OR_No_Viable_Function;
8038 
8039   // Make sure that this function is better than every other viable
8040   // function. If not, we have an ambiguity.
8041   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8042     if (Cand->Viable &&
8043         Cand != Best &&
8044         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
8045                                    UserDefinedConversion)) {
8046       Best = end();
8047       return OR_Ambiguous;
8048     }
8049   }
8050 
8051   // Best is the best viable function.
8052   if (Best->Function &&
8053       (Best->Function->isDeleted() ||
8054        S.isFunctionConsideredUnavailable(Best->Function)))
8055     return OR_Deleted;
8056 
8057   return OR_Success;
8058 }
8059 
8060 namespace {
8061 
8062 enum OverloadCandidateKind {
8063   oc_function,
8064   oc_method,
8065   oc_constructor,
8066   oc_function_template,
8067   oc_method_template,
8068   oc_constructor_template,
8069   oc_implicit_default_constructor,
8070   oc_implicit_copy_constructor,
8071   oc_implicit_move_constructor,
8072   oc_implicit_copy_assignment,
8073   oc_implicit_move_assignment,
8074   oc_implicit_inherited_constructor
8075 };
8076 
8077 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
8078                                                 FunctionDecl *Fn,
8079                                                 std::string &Description) {
8080   bool isTemplate = false;
8081 
8082   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
8083     isTemplate = true;
8084     Description = S.getTemplateArgumentBindingsText(
8085       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
8086   }
8087 
8088   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
8089     if (!Ctor->isImplicit())
8090       return isTemplate ? oc_constructor_template : oc_constructor;
8091 
8092     if (Ctor->getInheritedConstructor())
8093       return oc_implicit_inherited_constructor;
8094 
8095     if (Ctor->isDefaultConstructor())
8096       return oc_implicit_default_constructor;
8097 
8098     if (Ctor->isMoveConstructor())
8099       return oc_implicit_move_constructor;
8100 
8101     assert(Ctor->isCopyConstructor() &&
8102            "unexpected sort of implicit constructor");
8103     return oc_implicit_copy_constructor;
8104   }
8105 
8106   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
8107     // This actually gets spelled 'candidate function' for now, but
8108     // it doesn't hurt to split it out.
8109     if (!Meth->isImplicit())
8110       return isTemplate ? oc_method_template : oc_method;
8111 
8112     if (Meth->isMoveAssignmentOperator())
8113       return oc_implicit_move_assignment;
8114 
8115     if (Meth->isCopyAssignmentOperator())
8116       return oc_implicit_copy_assignment;
8117 
8118     assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
8119     return oc_method;
8120   }
8121 
8122   return isTemplate ? oc_function_template : oc_function;
8123 }
8124 
8125 void MaybeEmitInheritedConstructorNote(Sema &S, Decl *Fn) {
8126   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
8127   if (!Ctor) return;
8128 
8129   Ctor = Ctor->getInheritedConstructor();
8130   if (!Ctor) return;
8131 
8132   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
8133 }
8134 
8135 } // end anonymous namespace
8136 
8137 // Notes the location of an overload candidate.
8138 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
8139   std::string FnDesc;
8140   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
8141   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
8142                              << (unsigned) K << FnDesc;
8143   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
8144   Diag(Fn->getLocation(), PD);
8145   MaybeEmitInheritedConstructorNote(*this, Fn);
8146 }
8147 
8148 //Notes the location of all overload candidates designated through
8149 // OverloadedExpr
8150 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
8151   assert(OverloadedExpr->getType() == Context.OverloadTy);
8152 
8153   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
8154   OverloadExpr *OvlExpr = Ovl.Expression;
8155 
8156   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8157                             IEnd = OvlExpr->decls_end();
8158        I != IEnd; ++I) {
8159     if (FunctionTemplateDecl *FunTmpl =
8160                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
8161       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
8162     } else if (FunctionDecl *Fun
8163                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
8164       NoteOverloadCandidate(Fun, DestType);
8165     }
8166   }
8167 }
8168 
8169 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
8170 /// "lead" diagnostic; it will be given two arguments, the source and
8171 /// target types of the conversion.
8172 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8173                                  Sema &S,
8174                                  SourceLocation CaretLoc,
8175                                  const PartialDiagnostic &PDiag) const {
8176   S.Diag(CaretLoc, PDiag)
8177     << Ambiguous.getFromType() << Ambiguous.getToType();
8178   // FIXME: The note limiting machinery is borrowed from
8179   // OverloadCandidateSet::NoteCandidates; there's an opportunity for
8180   // refactoring here.
8181   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8182   unsigned CandsShown = 0;
8183   AmbiguousConversionSequence::const_iterator I, E;
8184   for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8185     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
8186       break;
8187     ++CandsShown;
8188     S.NoteOverloadCandidate(*I);
8189   }
8190   if (I != E)
8191     S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
8192 }
8193 
8194 namespace {
8195 
8196 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8197   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8198   assert(Conv.isBad());
8199   assert(Cand->Function && "for now, candidate must be a function");
8200   FunctionDecl *Fn = Cand->Function;
8201 
8202   // There's a conversion slot for the object argument if this is a
8203   // non-constructor method.  Note that 'I' corresponds the
8204   // conversion-slot index.
8205   bool isObjectArgument = false;
8206   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8207     if (I == 0)
8208       isObjectArgument = true;
8209     else
8210       I--;
8211   }
8212 
8213   std::string FnDesc;
8214   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8215 
8216   Expr *FromExpr = Conv.Bad.FromExpr;
8217   QualType FromTy = Conv.Bad.getFromType();
8218   QualType ToTy = Conv.Bad.getToType();
8219 
8220   if (FromTy == S.Context.OverloadTy) {
8221     assert(FromExpr && "overload set argument came from implicit argument?");
8222     Expr *E = FromExpr->IgnoreParens();
8223     if (isa<UnaryOperator>(E))
8224       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8225     DeclarationName Name = cast<OverloadExpr>(E)->getName();
8226 
8227     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8228       << (unsigned) FnKind << FnDesc
8229       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8230       << ToTy << Name << I+1;
8231     MaybeEmitInheritedConstructorNote(S, Fn);
8232     return;
8233   }
8234 
8235   // Do some hand-waving analysis to see if the non-viability is due
8236   // to a qualifier mismatch.
8237   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8238   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8239   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8240     CToTy = RT->getPointeeType();
8241   else {
8242     // TODO: detect and diagnose the full richness of const mismatches.
8243     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8244       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8245         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8246   }
8247 
8248   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8249       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8250     Qualifiers FromQs = CFromTy.getQualifiers();
8251     Qualifiers ToQs = CToTy.getQualifiers();
8252 
8253     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8254       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8255         << (unsigned) FnKind << FnDesc
8256         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8257         << FromTy
8258         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8259         << (unsigned) isObjectArgument << I+1;
8260       MaybeEmitInheritedConstructorNote(S, Fn);
8261       return;
8262     }
8263 
8264     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8265       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8266         << (unsigned) FnKind << FnDesc
8267         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8268         << FromTy
8269         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8270         << (unsigned) isObjectArgument << I+1;
8271       MaybeEmitInheritedConstructorNote(S, Fn);
8272       return;
8273     }
8274 
8275     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8276       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8277       << (unsigned) FnKind << FnDesc
8278       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8279       << FromTy
8280       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8281       << (unsigned) isObjectArgument << I+1;
8282       MaybeEmitInheritedConstructorNote(S, Fn);
8283       return;
8284     }
8285 
8286     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8287     assert(CVR && "unexpected qualifiers mismatch");
8288 
8289     if (isObjectArgument) {
8290       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8291         << (unsigned) FnKind << FnDesc
8292         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8293         << FromTy << (CVR - 1);
8294     } else {
8295       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8296         << (unsigned) FnKind << FnDesc
8297         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8298         << FromTy << (CVR - 1) << I+1;
8299     }
8300     MaybeEmitInheritedConstructorNote(S, Fn);
8301     return;
8302   }
8303 
8304   // Special diagnostic for failure to convert an initializer list, since
8305   // telling the user that it has type void is not useful.
8306   if (FromExpr && isa<InitListExpr>(FromExpr)) {
8307     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8308       << (unsigned) FnKind << FnDesc
8309       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8310       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8311     MaybeEmitInheritedConstructorNote(S, Fn);
8312     return;
8313   }
8314 
8315   // Diagnose references or pointers to incomplete types differently,
8316   // since it's far from impossible that the incompleteness triggered
8317   // the failure.
8318   QualType TempFromTy = FromTy.getNonReferenceType();
8319   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8320     TempFromTy = PTy->getPointeeType();
8321   if (TempFromTy->isIncompleteType()) {
8322     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8323       << (unsigned) FnKind << FnDesc
8324       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8325       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8326     MaybeEmitInheritedConstructorNote(S, Fn);
8327     return;
8328   }
8329 
8330   // Diagnose base -> derived pointer conversions.
8331   unsigned BaseToDerivedConversion = 0;
8332   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8333     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8334       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8335                                                FromPtrTy->getPointeeType()) &&
8336           !FromPtrTy->getPointeeType()->isIncompleteType() &&
8337           !ToPtrTy->getPointeeType()->isIncompleteType() &&
8338           S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8339                           FromPtrTy->getPointeeType()))
8340         BaseToDerivedConversion = 1;
8341     }
8342   } else if (const ObjCObjectPointerType *FromPtrTy
8343                                     = FromTy->getAs<ObjCObjectPointerType>()) {
8344     if (const ObjCObjectPointerType *ToPtrTy
8345                                         = ToTy->getAs<ObjCObjectPointerType>())
8346       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8347         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8348           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8349                                                 FromPtrTy->getPointeeType()) &&
8350               FromIface->isSuperClassOf(ToIface))
8351             BaseToDerivedConversion = 2;
8352   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8353     if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8354         !FromTy->isIncompleteType() &&
8355         !ToRefTy->getPointeeType()->isIncompleteType() &&
8356         S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8357       BaseToDerivedConversion = 3;
8358     } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8359                ToTy.getNonReferenceType().getCanonicalType() ==
8360                FromTy.getNonReferenceType().getCanonicalType()) {
8361       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8362         << (unsigned) FnKind << FnDesc
8363         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8364         << (unsigned) isObjectArgument << I + 1;
8365       MaybeEmitInheritedConstructorNote(S, Fn);
8366       return;
8367     }
8368   }
8369 
8370   if (BaseToDerivedConversion) {
8371     S.Diag(Fn->getLocation(),
8372            diag::note_ovl_candidate_bad_base_to_derived_conv)
8373       << (unsigned) FnKind << FnDesc
8374       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8375       << (BaseToDerivedConversion - 1)
8376       << FromTy << ToTy << I+1;
8377     MaybeEmitInheritedConstructorNote(S, Fn);
8378     return;
8379   }
8380 
8381   if (isa<ObjCObjectPointerType>(CFromTy) &&
8382       isa<PointerType>(CToTy)) {
8383       Qualifiers FromQs = CFromTy.getQualifiers();
8384       Qualifiers ToQs = CToTy.getQualifiers();
8385       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8386         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8387         << (unsigned) FnKind << FnDesc
8388         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8389         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8390         MaybeEmitInheritedConstructorNote(S, Fn);
8391         return;
8392       }
8393   }
8394 
8395   // Emit the generic diagnostic and, optionally, add the hints to it.
8396   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8397   FDiag << (unsigned) FnKind << FnDesc
8398     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8399     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8400     << (unsigned) (Cand->Fix.Kind);
8401 
8402   // If we can fix the conversion, suggest the FixIts.
8403   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8404        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8405     FDiag << *HI;
8406   S.Diag(Fn->getLocation(), FDiag);
8407 
8408   MaybeEmitInheritedConstructorNote(S, Fn);
8409 }
8410 
8411 /// Additional arity mismatch diagnosis specific to a function overload
8412 /// candidates. This is not covered by the more general DiagnoseArityMismatch()
8413 /// over a candidate in any candidate set.
8414 bool CheckArityMismatch(Sema &S, OverloadCandidate *Cand,
8415                         unsigned NumArgs) {
8416   FunctionDecl *Fn = Cand->Function;
8417   unsigned MinParams = Fn->getMinRequiredArguments();
8418 
8419   // With invalid overloaded operators, it's possible that we think we
8420   // have an arity mismatch when in fact it looks like we have the
8421   // right number of arguments, because only overloaded operators have
8422   // the weird behavior of overloading member and non-member functions.
8423   // Just don't report anything.
8424   if (Fn->isInvalidDecl() &&
8425       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8426     return true;
8427 
8428   if (NumArgs < MinParams) {
8429     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8430            (Cand->FailureKind == ovl_fail_bad_deduction &&
8431             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8432   } else {
8433     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8434            (Cand->FailureKind == ovl_fail_bad_deduction &&
8435             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8436   }
8437 
8438   return false;
8439 }
8440 
8441 /// General arity mismatch diagnosis over a candidate in a candidate set.
8442 void DiagnoseArityMismatch(Sema &S, Decl *D, unsigned NumFormalArgs) {
8443   assert(isa<FunctionDecl>(D) &&
8444       "The templated declaration should at least be a function"
8445       " when diagnosing bad template argument deduction due to too many"
8446       " or too few arguments");
8447 
8448   FunctionDecl *Fn = cast<FunctionDecl>(D);
8449 
8450   // TODO: treat calls to a missing default constructor as a special case
8451   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8452   unsigned MinParams = Fn->getMinRequiredArguments();
8453 
8454   // at least / at most / exactly
8455   unsigned mode, modeCount;
8456   if (NumFormalArgs < MinParams) {
8457     if (MinParams != FnTy->getNumArgs() ||
8458         FnTy->isVariadic() || FnTy->isTemplateVariadic())
8459       mode = 0; // "at least"
8460     else
8461       mode = 2; // "exactly"
8462     modeCount = MinParams;
8463   } else {
8464     if (MinParams != FnTy->getNumArgs())
8465       mode = 1; // "at most"
8466     else
8467       mode = 2; // "exactly"
8468     modeCount = FnTy->getNumArgs();
8469   }
8470 
8471   std::string Description;
8472   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8473 
8474   if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8475     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8476       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8477       << Fn->getParamDecl(0) << NumFormalArgs;
8478   else
8479     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8480       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8481       << modeCount << NumFormalArgs;
8482   MaybeEmitInheritedConstructorNote(S, Fn);
8483 }
8484 
8485 /// Arity mismatch diagnosis specific to a function overload candidate.
8486 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8487                            unsigned NumFormalArgs) {
8488   if (!CheckArityMismatch(S, Cand, NumFormalArgs))
8489     DiagnoseArityMismatch(S, Cand->Function, NumFormalArgs);
8490 }
8491 
8492 TemplateDecl *getDescribedTemplate(Decl *Templated) {
8493   if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Templated))
8494     return FD->getDescribedFunctionTemplate();
8495   else if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Templated))
8496     return RD->getDescribedClassTemplate();
8497 
8498   llvm_unreachable("Unsupported: Getting the described template declaration"
8499                    " for bad deduction diagnosis");
8500 }
8501 
8502 /// Diagnose a failed template-argument deduction.
8503 void DiagnoseBadDeduction(Sema &S, Decl *Templated,
8504                           DeductionFailureInfo &DeductionFailure,
8505                           unsigned NumArgs) {
8506   TemplateParameter Param = DeductionFailure.getTemplateParameter();
8507   NamedDecl *ParamD;
8508   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8509   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8510   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8511   switch (DeductionFailure.Result) {
8512   case Sema::TDK_Success:
8513     llvm_unreachable("TDK_success while diagnosing bad deduction");
8514 
8515   case Sema::TDK_Incomplete: {
8516     assert(ParamD && "no parameter found for incomplete deduction result");
8517     S.Diag(Templated->getLocation(),
8518            diag::note_ovl_candidate_incomplete_deduction)
8519         << ParamD->getDeclName();
8520     MaybeEmitInheritedConstructorNote(S, Templated);
8521     return;
8522   }
8523 
8524   case Sema::TDK_Underqualified: {
8525     assert(ParamD && "no parameter found for bad qualifiers deduction result");
8526     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8527 
8528     QualType Param = DeductionFailure.getFirstArg()->getAsType();
8529 
8530     // Param will have been canonicalized, but it should just be a
8531     // qualified version of ParamD, so move the qualifiers to that.
8532     QualifierCollector Qs;
8533     Qs.strip(Param);
8534     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8535     assert(S.Context.hasSameType(Param, NonCanonParam));
8536 
8537     // Arg has also been canonicalized, but there's nothing we can do
8538     // about that.  It also doesn't matter as much, because it won't
8539     // have any template parameters in it (because deduction isn't
8540     // done on dependent types).
8541     QualType Arg = DeductionFailure.getSecondArg()->getAsType();
8542 
8543     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified)
8544         << ParamD->getDeclName() << Arg << NonCanonParam;
8545     MaybeEmitInheritedConstructorNote(S, Templated);
8546     return;
8547   }
8548 
8549   case Sema::TDK_Inconsistent: {
8550     assert(ParamD && "no parameter found for inconsistent deduction result");
8551     int which = 0;
8552     if (isa<TemplateTypeParmDecl>(ParamD))
8553       which = 0;
8554     else if (isa<NonTypeTemplateParmDecl>(ParamD))
8555       which = 1;
8556     else {
8557       which = 2;
8558     }
8559 
8560     S.Diag(Templated->getLocation(),
8561            diag::note_ovl_candidate_inconsistent_deduction)
8562         << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg()
8563         << *DeductionFailure.getSecondArg();
8564     MaybeEmitInheritedConstructorNote(S, Templated);
8565     return;
8566   }
8567 
8568   case Sema::TDK_InvalidExplicitArguments:
8569     assert(ParamD && "no parameter found for invalid explicit arguments");
8570     if (ParamD->getDeclName())
8571       S.Diag(Templated->getLocation(),
8572              diag::note_ovl_candidate_explicit_arg_mismatch_named)
8573           << ParamD->getDeclName();
8574     else {
8575       int index = 0;
8576       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8577         index = TTP->getIndex();
8578       else if (NonTypeTemplateParmDecl *NTTP
8579                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8580         index = NTTP->getIndex();
8581       else
8582         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8583       S.Diag(Templated->getLocation(),
8584              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8585           << (index + 1);
8586     }
8587     MaybeEmitInheritedConstructorNote(S, Templated);
8588     return;
8589 
8590   case Sema::TDK_TooManyArguments:
8591   case Sema::TDK_TooFewArguments:
8592     DiagnoseArityMismatch(S, Templated, NumArgs);
8593     return;
8594 
8595   case Sema::TDK_InstantiationDepth:
8596     S.Diag(Templated->getLocation(),
8597            diag::note_ovl_candidate_instantiation_depth);
8598     MaybeEmitInheritedConstructorNote(S, Templated);
8599     return;
8600 
8601   case Sema::TDK_SubstitutionFailure: {
8602     // Format the template argument list into the argument string.
8603     SmallString<128> TemplateArgString;
8604     if (TemplateArgumentList *Args =
8605             DeductionFailure.getTemplateArgumentList()) {
8606       TemplateArgString = " ";
8607       TemplateArgString += S.getTemplateArgumentBindingsText(
8608           getDescribedTemplate(Templated)->getTemplateParameters(), *Args);
8609     }
8610 
8611     // If this candidate was disabled by enable_if, say so.
8612     PartialDiagnosticAt *PDiag = DeductionFailure.getSFINAEDiagnostic();
8613     if (PDiag && PDiag->second.getDiagID() ==
8614           diag::err_typename_nested_not_found_enable_if) {
8615       // FIXME: Use the source range of the condition, and the fully-qualified
8616       //        name of the enable_if template. These are both present in PDiag.
8617       S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8618         << "'enable_if'" << TemplateArgString;
8619       return;
8620     }
8621 
8622     // Format the SFINAE diagnostic into the argument string.
8623     // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8624     //        formatted message in another diagnostic.
8625     SmallString<128> SFINAEArgString;
8626     SourceRange R;
8627     if (PDiag) {
8628       SFINAEArgString = ": ";
8629       R = SourceRange(PDiag->first, PDiag->first);
8630       PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8631     }
8632 
8633     S.Diag(Templated->getLocation(),
8634            diag::note_ovl_candidate_substitution_failure)
8635         << TemplateArgString << SFINAEArgString << R;
8636     MaybeEmitInheritedConstructorNote(S, Templated);
8637     return;
8638   }
8639 
8640   case Sema::TDK_FailedOverloadResolution: {
8641     OverloadExpr::FindResult R = OverloadExpr::find(DeductionFailure.getExpr());
8642     S.Diag(Templated->getLocation(),
8643            diag::note_ovl_candidate_failed_overload_resolution)
8644         << R.Expression->getName();
8645     return;
8646   }
8647 
8648   case Sema::TDK_NonDeducedMismatch: {
8649     // FIXME: Provide a source location to indicate what we couldn't match.
8650     TemplateArgument FirstTA = *DeductionFailure.getFirstArg();
8651     TemplateArgument SecondTA = *DeductionFailure.getSecondArg();
8652     if (FirstTA.getKind() == TemplateArgument::Template &&
8653         SecondTA.getKind() == TemplateArgument::Template) {
8654       TemplateName FirstTN = FirstTA.getAsTemplate();
8655       TemplateName SecondTN = SecondTA.getAsTemplate();
8656       if (FirstTN.getKind() == TemplateName::Template &&
8657           SecondTN.getKind() == TemplateName::Template) {
8658         if (FirstTN.getAsTemplateDecl()->getName() ==
8659             SecondTN.getAsTemplateDecl()->getName()) {
8660           // FIXME: This fixes a bad diagnostic where both templates are named
8661           // the same.  This particular case is a bit difficult since:
8662           // 1) It is passed as a string to the diagnostic printer.
8663           // 2) The diagnostic printer only attempts to find a better
8664           //    name for types, not decls.
8665           // Ideally, this should folded into the diagnostic printer.
8666           S.Diag(Templated->getLocation(),
8667                  diag::note_ovl_candidate_non_deduced_mismatch_qualified)
8668               << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
8669           return;
8670         }
8671       }
8672     }
8673     S.Diag(Templated->getLocation(),
8674            diag::note_ovl_candidate_non_deduced_mismatch)
8675         << FirstTA << SecondTA;
8676     return;
8677   }
8678   // TODO: diagnose these individually, then kill off
8679   // note_ovl_candidate_bad_deduction, which is uselessly vague.
8680   case Sema::TDK_MiscellaneousDeductionFailure:
8681     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);
8682     MaybeEmitInheritedConstructorNote(S, Templated);
8683     return;
8684   }
8685 }
8686 
8687 /// Diagnose a failed template-argument deduction, for function calls.
8688 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand, unsigned NumArgs) {
8689   unsigned TDK = Cand->DeductionFailure.Result;
8690   if (TDK == Sema::TDK_TooFewArguments || TDK == Sema::TDK_TooManyArguments) {
8691     if (CheckArityMismatch(S, Cand, NumArgs))
8692       return;
8693   }
8694   DiagnoseBadDeduction(S, Cand->Function, // pattern
8695                        Cand->DeductionFailure, NumArgs);
8696 }
8697 
8698 /// CUDA: diagnose an invalid call across targets.
8699 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8700   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8701   FunctionDecl *Callee = Cand->Function;
8702 
8703   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8704                            CalleeTarget = S.IdentifyCUDATarget(Callee);
8705 
8706   std::string FnDesc;
8707   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8708 
8709   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8710       << (unsigned) FnKind << CalleeTarget << CallerTarget;
8711 }
8712 
8713 /// Generates a 'note' diagnostic for an overload candidate.  We've
8714 /// already generated a primary error at the call site.
8715 ///
8716 /// It really does need to be a single diagnostic with its caret
8717 /// pointed at the candidate declaration.  Yes, this creates some
8718 /// major challenges of technical writing.  Yes, this makes pointing
8719 /// out problems with specific arguments quite awkward.  It's still
8720 /// better than generating twenty screens of text for every failed
8721 /// overload.
8722 ///
8723 /// It would be great to be able to express per-candidate problems
8724 /// more richly for those diagnostic clients that cared, but we'd
8725 /// still have to be just as careful with the default diagnostics.
8726 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8727                            unsigned NumArgs) {
8728   FunctionDecl *Fn = Cand->Function;
8729 
8730   // Note deleted candidates, but only if they're viable.
8731   if (Cand->Viable && (Fn->isDeleted() ||
8732       S.isFunctionConsideredUnavailable(Fn))) {
8733     std::string FnDesc;
8734     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8735 
8736     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8737       << FnKind << FnDesc
8738       << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8739     MaybeEmitInheritedConstructorNote(S, Fn);
8740     return;
8741   }
8742 
8743   // We don't really have anything else to say about viable candidates.
8744   if (Cand->Viable) {
8745     S.NoteOverloadCandidate(Fn);
8746     return;
8747   }
8748 
8749   switch (Cand->FailureKind) {
8750   case ovl_fail_too_many_arguments:
8751   case ovl_fail_too_few_arguments:
8752     return DiagnoseArityMismatch(S, Cand, NumArgs);
8753 
8754   case ovl_fail_bad_deduction:
8755     return DiagnoseBadDeduction(S, Cand, NumArgs);
8756 
8757   case ovl_fail_trivial_conversion:
8758   case ovl_fail_bad_final_conversion:
8759   case ovl_fail_final_conversion_not_exact:
8760     return S.NoteOverloadCandidate(Fn);
8761 
8762   case ovl_fail_bad_conversion: {
8763     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8764     for (unsigned N = Cand->NumConversions; I != N; ++I)
8765       if (Cand->Conversions[I].isBad())
8766         return DiagnoseBadConversion(S, Cand, I);
8767 
8768     // FIXME: this currently happens when we're called from SemaInit
8769     // when user-conversion overload fails.  Figure out how to handle
8770     // those conditions and diagnose them well.
8771     return S.NoteOverloadCandidate(Fn);
8772   }
8773 
8774   case ovl_fail_bad_target:
8775     return DiagnoseBadTarget(S, Cand);
8776   }
8777 }
8778 
8779 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8780   // Desugar the type of the surrogate down to a function type,
8781   // retaining as many typedefs as possible while still showing
8782   // the function type (and, therefore, its parameter types).
8783   QualType FnType = Cand->Surrogate->getConversionType();
8784   bool isLValueReference = false;
8785   bool isRValueReference = false;
8786   bool isPointer = false;
8787   if (const LValueReferenceType *FnTypeRef =
8788         FnType->getAs<LValueReferenceType>()) {
8789     FnType = FnTypeRef->getPointeeType();
8790     isLValueReference = true;
8791   } else if (const RValueReferenceType *FnTypeRef =
8792                FnType->getAs<RValueReferenceType>()) {
8793     FnType = FnTypeRef->getPointeeType();
8794     isRValueReference = true;
8795   }
8796   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8797     FnType = FnTypePtr->getPointeeType();
8798     isPointer = true;
8799   }
8800   // Desugar down to a function type.
8801   FnType = QualType(FnType->getAs<FunctionType>(), 0);
8802   // Reconstruct the pointer/reference as appropriate.
8803   if (isPointer) FnType = S.Context.getPointerType(FnType);
8804   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8805   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8806 
8807   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8808     << FnType;
8809   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8810 }
8811 
8812 void NoteBuiltinOperatorCandidate(Sema &S,
8813                                   StringRef Opc,
8814                                   SourceLocation OpLoc,
8815                                   OverloadCandidate *Cand) {
8816   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8817   std::string TypeStr("operator");
8818   TypeStr += Opc;
8819   TypeStr += "(";
8820   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8821   if (Cand->NumConversions == 1) {
8822     TypeStr += ")";
8823     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8824   } else {
8825     TypeStr += ", ";
8826     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8827     TypeStr += ")";
8828     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8829   }
8830 }
8831 
8832 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8833                                   OverloadCandidate *Cand) {
8834   unsigned NoOperands = Cand->NumConversions;
8835   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8836     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8837     if (ICS.isBad()) break; // all meaningless after first invalid
8838     if (!ICS.isAmbiguous()) continue;
8839 
8840     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8841                               S.PDiag(diag::note_ambiguous_type_conversion));
8842   }
8843 }
8844 
8845 static SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8846   if (Cand->Function)
8847     return Cand->Function->getLocation();
8848   if (Cand->IsSurrogate)
8849     return Cand->Surrogate->getLocation();
8850   return SourceLocation();
8851 }
8852 
8853 static unsigned RankDeductionFailure(const DeductionFailureInfo &DFI) {
8854   switch ((Sema::TemplateDeductionResult)DFI.Result) {
8855   case Sema::TDK_Success:
8856     llvm_unreachable("TDK_success while diagnosing bad deduction");
8857 
8858   case Sema::TDK_Invalid:
8859   case Sema::TDK_Incomplete:
8860     return 1;
8861 
8862   case Sema::TDK_Underqualified:
8863   case Sema::TDK_Inconsistent:
8864     return 2;
8865 
8866   case Sema::TDK_SubstitutionFailure:
8867   case Sema::TDK_NonDeducedMismatch:
8868   case Sema::TDK_MiscellaneousDeductionFailure:
8869     return 3;
8870 
8871   case Sema::TDK_InstantiationDepth:
8872   case Sema::TDK_FailedOverloadResolution:
8873     return 4;
8874 
8875   case Sema::TDK_InvalidExplicitArguments:
8876     return 5;
8877 
8878   case Sema::TDK_TooManyArguments:
8879   case Sema::TDK_TooFewArguments:
8880     return 6;
8881   }
8882   llvm_unreachable("Unhandled deduction result");
8883 }
8884 
8885 struct CompareOverloadCandidatesForDisplay {
8886   Sema &S;
8887   CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8888 
8889   bool operator()(const OverloadCandidate *L,
8890                   const OverloadCandidate *R) {
8891     // Fast-path this check.
8892     if (L == R) return false;
8893 
8894     // Order first by viability.
8895     if (L->Viable) {
8896       if (!R->Viable) return true;
8897 
8898       // TODO: introduce a tri-valued comparison for overload
8899       // candidates.  Would be more worthwhile if we had a sort
8900       // that could exploit it.
8901       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8902       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8903     } else if (R->Viable)
8904       return false;
8905 
8906     assert(L->Viable == R->Viable);
8907 
8908     // Criteria by which we can sort non-viable candidates:
8909     if (!L->Viable) {
8910       // 1. Arity mismatches come after other candidates.
8911       if (L->FailureKind == ovl_fail_too_many_arguments ||
8912           L->FailureKind == ovl_fail_too_few_arguments)
8913         return false;
8914       if (R->FailureKind == ovl_fail_too_many_arguments ||
8915           R->FailureKind == ovl_fail_too_few_arguments)
8916         return true;
8917 
8918       // 2. Bad conversions come first and are ordered by the number
8919       // of bad conversions and quality of good conversions.
8920       if (L->FailureKind == ovl_fail_bad_conversion) {
8921         if (R->FailureKind != ovl_fail_bad_conversion)
8922           return true;
8923 
8924         // The conversion that can be fixed with a smaller number of changes,
8925         // comes first.
8926         unsigned numLFixes = L->Fix.NumConversionsFixed;
8927         unsigned numRFixes = R->Fix.NumConversionsFixed;
8928         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8929         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8930         if (numLFixes != numRFixes) {
8931           if (numLFixes < numRFixes)
8932             return true;
8933           else
8934             return false;
8935         }
8936 
8937         // If there's any ordering between the defined conversions...
8938         // FIXME: this might not be transitive.
8939         assert(L->NumConversions == R->NumConversions);
8940 
8941         int leftBetter = 0;
8942         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8943         for (unsigned E = L->NumConversions; I != E; ++I) {
8944           switch (CompareImplicitConversionSequences(S,
8945                                                      L->Conversions[I],
8946                                                      R->Conversions[I])) {
8947           case ImplicitConversionSequence::Better:
8948             leftBetter++;
8949             break;
8950 
8951           case ImplicitConversionSequence::Worse:
8952             leftBetter--;
8953             break;
8954 
8955           case ImplicitConversionSequence::Indistinguishable:
8956             break;
8957           }
8958         }
8959         if (leftBetter > 0) return true;
8960         if (leftBetter < 0) return false;
8961 
8962       } else if (R->FailureKind == ovl_fail_bad_conversion)
8963         return false;
8964 
8965       if (L->FailureKind == ovl_fail_bad_deduction) {
8966         if (R->FailureKind != ovl_fail_bad_deduction)
8967           return true;
8968 
8969         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8970           return RankDeductionFailure(L->DeductionFailure)
8971                < RankDeductionFailure(R->DeductionFailure);
8972       } else if (R->FailureKind == ovl_fail_bad_deduction)
8973         return false;
8974 
8975       // TODO: others?
8976     }
8977 
8978     // Sort everything else by location.
8979     SourceLocation LLoc = GetLocationForCandidate(L);
8980     SourceLocation RLoc = GetLocationForCandidate(R);
8981 
8982     // Put candidates without locations (e.g. builtins) at the end.
8983     if (LLoc.isInvalid()) return false;
8984     if (RLoc.isInvalid()) return true;
8985 
8986     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8987   }
8988 };
8989 
8990 /// CompleteNonViableCandidate - Normally, overload resolution only
8991 /// computes up to the first. Produces the FixIt set if possible.
8992 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8993                                 ArrayRef<Expr *> Args) {
8994   assert(!Cand->Viable);
8995 
8996   // Don't do anything on failures other than bad conversion.
8997   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8998 
8999   // We only want the FixIts if all the arguments can be corrected.
9000   bool Unfixable = false;
9001   // Use a implicit copy initialization to check conversion fixes.
9002   Cand->Fix.setConversionChecker(TryCopyInitialization);
9003 
9004   // Skip forward to the first bad conversion.
9005   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
9006   unsigned ConvCount = Cand->NumConversions;
9007   while (true) {
9008     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
9009     ConvIdx++;
9010     if (Cand->Conversions[ConvIdx - 1].isBad()) {
9011       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
9012       break;
9013     }
9014   }
9015 
9016   if (ConvIdx == ConvCount)
9017     return;
9018 
9019   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
9020          "remaining conversion is initialized?");
9021 
9022   // FIXME: this should probably be preserved from the overload
9023   // operation somehow.
9024   bool SuppressUserConversions = false;
9025 
9026   const FunctionProtoType* Proto;
9027   unsigned ArgIdx = ConvIdx;
9028 
9029   if (Cand->IsSurrogate) {
9030     QualType ConvType
9031       = Cand->Surrogate->getConversionType().getNonReferenceType();
9032     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
9033       ConvType = ConvPtrType->getPointeeType();
9034     Proto = ConvType->getAs<FunctionProtoType>();
9035     ArgIdx--;
9036   } else if (Cand->Function) {
9037     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
9038     if (isa<CXXMethodDecl>(Cand->Function) &&
9039         !isa<CXXConstructorDecl>(Cand->Function))
9040       ArgIdx--;
9041   } else {
9042     // Builtin binary operator with a bad first conversion.
9043     assert(ConvCount <= 3);
9044     for (; ConvIdx != ConvCount; ++ConvIdx)
9045       Cand->Conversions[ConvIdx]
9046         = TryCopyInitialization(S, Args[ConvIdx],
9047                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
9048                                 SuppressUserConversions,
9049                                 /*InOverloadResolution*/ true,
9050                                 /*AllowObjCWritebackConversion=*/
9051                                   S.getLangOpts().ObjCAutoRefCount);
9052     return;
9053   }
9054 
9055   // Fill in the rest of the conversions.
9056   unsigned NumArgsInProto = Proto->getNumArgs();
9057   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
9058     if (ArgIdx < NumArgsInProto) {
9059       Cand->Conversions[ConvIdx]
9060         = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
9061                                 SuppressUserConversions,
9062                                 /*InOverloadResolution=*/true,
9063                                 /*AllowObjCWritebackConversion=*/
9064                                   S.getLangOpts().ObjCAutoRefCount);
9065       // Store the FixIt in the candidate if it exists.
9066       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
9067         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
9068     }
9069     else
9070       Cand->Conversions[ConvIdx].setEllipsis();
9071   }
9072 }
9073 
9074 } // end anonymous namespace
9075 
9076 /// PrintOverloadCandidates - When overload resolution fails, prints
9077 /// diagnostic messages containing the candidates in the candidate
9078 /// set.
9079 void OverloadCandidateSet::NoteCandidates(Sema &S,
9080                                           OverloadCandidateDisplayKind OCD,
9081                                           ArrayRef<Expr *> Args,
9082                                           StringRef Opc,
9083                                           SourceLocation OpLoc) {
9084   // Sort the candidates by viability and position.  Sorting directly would
9085   // be prohibitive, so we make a set of pointers and sort those.
9086   SmallVector<OverloadCandidate*, 32> Cands;
9087   if (OCD == OCD_AllCandidates) Cands.reserve(size());
9088   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9089     if (Cand->Viable)
9090       Cands.push_back(Cand);
9091     else if (OCD == OCD_AllCandidates) {
9092       CompleteNonViableCandidate(S, Cand, Args);
9093       if (Cand->Function || Cand->IsSurrogate)
9094         Cands.push_back(Cand);
9095       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
9096       // want to list every possible builtin candidate.
9097     }
9098   }
9099 
9100   std::sort(Cands.begin(), Cands.end(),
9101             CompareOverloadCandidatesForDisplay(S));
9102 
9103   bool ReportedAmbiguousConversions = false;
9104 
9105   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
9106   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
9107   unsigned CandsShown = 0;
9108   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
9109     OverloadCandidate *Cand = *I;
9110 
9111     // Set an arbitrary limit on the number of candidate functions we'll spam
9112     // the user with.  FIXME: This limit should depend on details of the
9113     // candidate list.
9114     if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
9115       break;
9116     }
9117     ++CandsShown;
9118 
9119     if (Cand->Function)
9120       NoteFunctionCandidate(S, Cand, Args.size());
9121     else if (Cand->IsSurrogate)
9122       NoteSurrogateCandidate(S, Cand);
9123     else {
9124       assert(Cand->Viable &&
9125              "Non-viable built-in candidates are not added to Cands.");
9126       // Generally we only see ambiguities including viable builtin
9127       // operators if overload resolution got screwed up by an
9128       // ambiguous user-defined conversion.
9129       //
9130       // FIXME: It's quite possible for different conversions to see
9131       // different ambiguities, though.
9132       if (!ReportedAmbiguousConversions) {
9133         NoteAmbiguousUserConversions(S, OpLoc, Cand);
9134         ReportedAmbiguousConversions = true;
9135       }
9136 
9137       // If this is a viable builtin, print it.
9138       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
9139     }
9140   }
9141 
9142   if (I != E)
9143     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
9144 }
9145 
9146 static SourceLocation
9147 GetLocationForCandidate(const TemplateSpecCandidate *Cand) {
9148   return Cand->Specialization ? Cand->Specialization->getLocation()
9149                               : SourceLocation();
9150 }
9151 
9152 struct CompareTemplateSpecCandidatesForDisplay {
9153   Sema &S;
9154   CompareTemplateSpecCandidatesForDisplay(Sema &S) : S(S) {}
9155 
9156   bool operator()(const TemplateSpecCandidate *L,
9157                   const TemplateSpecCandidate *R) {
9158     // Fast-path this check.
9159     if (L == R)
9160       return false;
9161 
9162     // Assuming that both candidates are not matches...
9163 
9164     // Sort by the ranking of deduction failures.
9165     if (L->DeductionFailure.Result != R->DeductionFailure.Result)
9166       return RankDeductionFailure(L->DeductionFailure) <
9167              RankDeductionFailure(R->DeductionFailure);
9168 
9169     // Sort everything else by location.
9170     SourceLocation LLoc = GetLocationForCandidate(L);
9171     SourceLocation RLoc = GetLocationForCandidate(R);
9172 
9173     // Put candidates without locations (e.g. builtins) at the end.
9174     if (LLoc.isInvalid())
9175       return false;
9176     if (RLoc.isInvalid())
9177       return true;
9178 
9179     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
9180   }
9181 };
9182 
9183 /// Diagnose a template argument deduction failure.
9184 /// We are treating these failures as overload failures due to bad
9185 /// deductions.
9186 void TemplateSpecCandidate::NoteDeductionFailure(Sema &S) {
9187   DiagnoseBadDeduction(S, Specialization, // pattern
9188                        DeductionFailure, /*NumArgs=*/0);
9189 }
9190 
9191 void TemplateSpecCandidateSet::destroyCandidates() {
9192   for (iterator i = begin(), e = end(); i != e; ++i) {
9193     i->DeductionFailure.Destroy();
9194   }
9195 }
9196 
9197 void TemplateSpecCandidateSet::clear() {
9198   destroyCandidates();
9199   Candidates.clear();
9200 }
9201 
9202 /// NoteCandidates - When no template specialization match is found, prints
9203 /// diagnostic messages containing the non-matching specializations that form
9204 /// the candidate set.
9205 /// This is analoguous to OverloadCandidateSet::NoteCandidates() with
9206 /// OCD == OCD_AllCandidates and Cand->Viable == false.
9207 void TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {
9208   // Sort the candidates by position (assuming no candidate is a match).
9209   // Sorting directly would be prohibitive, so we make a set of pointers
9210   // and sort those.
9211   SmallVector<TemplateSpecCandidate *, 32> Cands;
9212   Cands.reserve(size());
9213   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9214     if (Cand->Specialization)
9215       Cands.push_back(Cand);
9216     // Otherwise, this is a non matching builtin candidate.  We do not,
9217     // in general, want to list every possible builtin candidate.
9218   }
9219 
9220   std::sort(Cands.begin(), Cands.end(),
9221             CompareTemplateSpecCandidatesForDisplay(S));
9222 
9223   // FIXME: Perhaps rename OverloadsShown and getShowOverloads()
9224   // for generalization purposes (?).
9225   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
9226 
9227   SmallVectorImpl<TemplateSpecCandidate *>::iterator I, E;
9228   unsigned CandsShown = 0;
9229   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
9230     TemplateSpecCandidate *Cand = *I;
9231 
9232     // Set an arbitrary limit on the number of candidates we'll spam
9233     // the user with.  FIXME: This limit should depend on details of the
9234     // candidate list.
9235     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
9236       break;
9237     ++CandsShown;
9238 
9239     assert(Cand->Specialization &&
9240            "Non-matching built-in candidates are not added to Cands.");
9241     Cand->NoteDeductionFailure(S);
9242   }
9243 
9244   if (I != E)
9245     S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);
9246 }
9247 
9248 // [PossiblyAFunctionType]  -->   [Return]
9249 // NonFunctionType --> NonFunctionType
9250 // R (A) --> R(A)
9251 // R (*)(A) --> R (A)
9252 // R (&)(A) --> R (A)
9253 // R (S::*)(A) --> R (A)
9254 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
9255   QualType Ret = PossiblyAFunctionType;
9256   if (const PointerType *ToTypePtr =
9257     PossiblyAFunctionType->getAs<PointerType>())
9258     Ret = ToTypePtr->getPointeeType();
9259   else if (const ReferenceType *ToTypeRef =
9260     PossiblyAFunctionType->getAs<ReferenceType>())
9261     Ret = ToTypeRef->getPointeeType();
9262   else if (const MemberPointerType *MemTypePtr =
9263     PossiblyAFunctionType->getAs<MemberPointerType>())
9264     Ret = MemTypePtr->getPointeeType();
9265   Ret =
9266     Context.getCanonicalType(Ret).getUnqualifiedType();
9267   return Ret;
9268 }
9269 
9270 // A helper class to help with address of function resolution
9271 // - allows us to avoid passing around all those ugly parameters
9272 class AddressOfFunctionResolver
9273 {
9274   Sema& S;
9275   Expr* SourceExpr;
9276   const QualType& TargetType;
9277   QualType TargetFunctionType; // Extracted function type from target type
9278 
9279   bool Complain;
9280   //DeclAccessPair& ResultFunctionAccessPair;
9281   ASTContext& Context;
9282 
9283   bool TargetTypeIsNonStaticMemberFunction;
9284   bool FoundNonTemplateFunction;
9285   bool StaticMemberFunctionFromBoundPointer;
9286 
9287   OverloadExpr::FindResult OvlExprInfo;
9288   OverloadExpr *OvlExpr;
9289   TemplateArgumentListInfo OvlExplicitTemplateArgs;
9290   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
9291   TemplateSpecCandidateSet FailedCandidates;
9292 
9293 public:
9294   AddressOfFunctionResolver(Sema &S, Expr *SourceExpr,
9295                             const QualType &TargetType, bool Complain)
9296       : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
9297         Complain(Complain), Context(S.getASTContext()),
9298         TargetTypeIsNonStaticMemberFunction(
9299             !!TargetType->getAs<MemberPointerType>()),
9300         FoundNonTemplateFunction(false),
9301         StaticMemberFunctionFromBoundPointer(false),
9302         OvlExprInfo(OverloadExpr::find(SourceExpr)),
9303         OvlExpr(OvlExprInfo.Expression),
9304         FailedCandidates(OvlExpr->getNameLoc()) {
9305     ExtractUnqualifiedFunctionTypeFromTargetType();
9306 
9307     if (TargetFunctionType->isFunctionType()) {
9308       if (UnresolvedMemberExpr *UME = dyn_cast<UnresolvedMemberExpr>(OvlExpr))
9309         if (!UME->isImplicitAccess() &&
9310             !S.ResolveSingleFunctionTemplateSpecialization(UME))
9311           StaticMemberFunctionFromBoundPointer = true;
9312     } else if (OvlExpr->hasExplicitTemplateArgs()) {
9313       DeclAccessPair dap;
9314       if (FunctionDecl *Fn = S.ResolveSingleFunctionTemplateSpecialization(
9315               OvlExpr, false, &dap)) {
9316         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn))
9317           if (!Method->isStatic()) {
9318             // If the target type is a non-function type and the function found
9319             // is a non-static member function, pretend as if that was the
9320             // target, it's the only possible type to end up with.
9321             TargetTypeIsNonStaticMemberFunction = true;
9322 
9323             // And skip adding the function if its not in the proper form.
9324             // We'll diagnose this due to an empty set of functions.
9325             if (!OvlExprInfo.HasFormOfMemberPointer)
9326               return;
9327           }
9328 
9329         Matches.push_back(std::make_pair(dap, Fn));
9330       }
9331       return;
9332     }
9333 
9334     if (OvlExpr->hasExplicitTemplateArgs())
9335       OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
9336 
9337     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
9338       // C++ [over.over]p4:
9339       //   If more than one function is selected, [...]
9340       if (Matches.size() > 1) {
9341         if (FoundNonTemplateFunction)
9342           EliminateAllTemplateMatches();
9343         else
9344           EliminateAllExceptMostSpecializedTemplate();
9345       }
9346     }
9347   }
9348 
9349 private:
9350   bool isTargetTypeAFunction() const {
9351     return TargetFunctionType->isFunctionType();
9352   }
9353 
9354   // [ToType]     [Return]
9355 
9356   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
9357   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
9358   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
9359   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
9360     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
9361   }
9362 
9363   // return true if any matching specializations were found
9364   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
9365                                    const DeclAccessPair& CurAccessFunPair) {
9366     if (CXXMethodDecl *Method
9367               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
9368       // Skip non-static function templates when converting to pointer, and
9369       // static when converting to member pointer.
9370       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9371         return false;
9372     }
9373     else if (TargetTypeIsNonStaticMemberFunction)
9374       return false;
9375 
9376     // C++ [over.over]p2:
9377     //   If the name is a function template, template argument deduction is
9378     //   done (14.8.2.2), and if the argument deduction succeeds, the
9379     //   resulting template argument list is used to generate a single
9380     //   function template specialization, which is added to the set of
9381     //   overloaded functions considered.
9382     FunctionDecl *Specialization = 0;
9383     TemplateDeductionInfo Info(FailedCandidates.getLocation());
9384     if (Sema::TemplateDeductionResult Result
9385           = S.DeduceTemplateArguments(FunctionTemplate,
9386                                       &OvlExplicitTemplateArgs,
9387                                       TargetFunctionType, Specialization,
9388                                       Info, /*InOverloadResolution=*/true)) {
9389       // Make a note of the failed deduction for diagnostics.
9390       FailedCandidates.addCandidate()
9391           .set(FunctionTemplate->getTemplatedDecl(),
9392                MakeDeductionFailureInfo(Context, Result, Info));
9393       return false;
9394     }
9395 
9396     // Template argument deduction ensures that we have an exact match or
9397     // compatible pointer-to-function arguments that would be adjusted by ICS.
9398     // This function template specicalization works.
9399     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
9400     assert(S.isSameOrCompatibleFunctionType(
9401               Context.getCanonicalType(Specialization->getType()),
9402               Context.getCanonicalType(TargetFunctionType)));
9403     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9404     return true;
9405   }
9406 
9407   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9408                                       const DeclAccessPair& CurAccessFunPair) {
9409     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9410       // Skip non-static functions when converting to pointer, and static
9411       // when converting to member pointer.
9412       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9413         return false;
9414     }
9415     else if (TargetTypeIsNonStaticMemberFunction)
9416       return false;
9417 
9418     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9419       if (S.getLangOpts().CUDA)
9420         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9421           if (S.CheckCUDATarget(Caller, FunDecl))
9422             return false;
9423 
9424       // If any candidate has a placeholder return type, trigger its deduction
9425       // now.
9426       if (S.getLangOpts().CPlusPlus1y &&
9427           FunDecl->getResultType()->isUndeducedType() &&
9428           S.DeduceReturnType(FunDecl, SourceExpr->getLocStart(), Complain))
9429         return false;
9430 
9431       QualType ResultTy;
9432       if (Context.hasSameUnqualifiedType(TargetFunctionType,
9433                                          FunDecl->getType()) ||
9434           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9435                                  ResultTy)) {
9436         Matches.push_back(std::make_pair(CurAccessFunPair,
9437           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9438         FoundNonTemplateFunction = true;
9439         return true;
9440       }
9441     }
9442 
9443     return false;
9444   }
9445 
9446   bool FindAllFunctionsThatMatchTargetTypeExactly() {
9447     bool Ret = false;
9448 
9449     // If the overload expression doesn't have the form of a pointer to
9450     // member, don't try to convert it to a pointer-to-member type.
9451     if (IsInvalidFormOfPointerToMemberFunction())
9452       return false;
9453 
9454     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9455                                E = OvlExpr->decls_end();
9456          I != E; ++I) {
9457       // Look through any using declarations to find the underlying function.
9458       NamedDecl *Fn = (*I)->getUnderlyingDecl();
9459 
9460       // C++ [over.over]p3:
9461       //   Non-member functions and static member functions match
9462       //   targets of type "pointer-to-function" or "reference-to-function."
9463       //   Nonstatic member functions match targets of
9464       //   type "pointer-to-member-function."
9465       // Note that according to DR 247, the containing class does not matter.
9466       if (FunctionTemplateDecl *FunctionTemplate
9467                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
9468         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9469           Ret = true;
9470       }
9471       // If we have explicit template arguments supplied, skip non-templates.
9472       else if (!OvlExpr->hasExplicitTemplateArgs() &&
9473                AddMatchingNonTemplateFunction(Fn, I.getPair()))
9474         Ret = true;
9475     }
9476     assert(Ret || Matches.empty());
9477     return Ret;
9478   }
9479 
9480   void EliminateAllExceptMostSpecializedTemplate() {
9481     //   [...] and any given function template specialization F1 is
9482     //   eliminated if the set contains a second function template
9483     //   specialization whose function template is more specialized
9484     //   than the function template of F1 according to the partial
9485     //   ordering rules of 14.5.5.2.
9486 
9487     // The algorithm specified above is quadratic. We instead use a
9488     // two-pass algorithm (similar to the one used to identify the
9489     // best viable function in an overload set) that identifies the
9490     // best function template (if it exists).
9491 
9492     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9493     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9494       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9495 
9496     // TODO: It looks like FailedCandidates does not serve much purpose
9497     // here, since the no_viable diagnostic has index 0.
9498     UnresolvedSetIterator Result = S.getMostSpecialized(
9499         MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, TPOC_Other, 0,
9500         SourceExpr->getLocStart(), S.PDiag(),
9501         S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0]
9502                                                      .second->getDeclName(),
9503         S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function_template,
9504         Complain, TargetFunctionType);
9505 
9506     if (Result != MatchesCopy.end()) {
9507       // Make it the first and only element
9508       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9509       Matches[0].second = cast<FunctionDecl>(*Result);
9510       Matches.resize(1);
9511     }
9512   }
9513 
9514   void EliminateAllTemplateMatches() {
9515     //   [...] any function template specializations in the set are
9516     //   eliminated if the set also contains a non-template function, [...]
9517     for (unsigned I = 0, N = Matches.size(); I != N; ) {
9518       if (Matches[I].second->getPrimaryTemplate() == 0)
9519         ++I;
9520       else {
9521         Matches[I] = Matches[--N];
9522         Matches.set_size(N);
9523       }
9524     }
9525   }
9526 
9527 public:
9528   void ComplainNoMatchesFound() const {
9529     assert(Matches.empty());
9530     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9531         << OvlExpr->getName() << TargetFunctionType
9532         << OvlExpr->getSourceRange();
9533     if (FailedCandidates.empty())
9534       S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9535     else {
9536       // We have some deduction failure messages. Use them to diagnose
9537       // the function templates, and diagnose the non-template candidates
9538       // normally.
9539       for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9540                                  IEnd = OvlExpr->decls_end();
9541            I != IEnd; ++I)
9542         if (FunctionDecl *Fun =
9543                 dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()))
9544           S.NoteOverloadCandidate(Fun, TargetFunctionType);
9545       FailedCandidates.NoteCandidates(S, OvlExpr->getLocStart());
9546     }
9547   }
9548 
9549   bool IsInvalidFormOfPointerToMemberFunction() const {
9550     return TargetTypeIsNonStaticMemberFunction &&
9551       !OvlExprInfo.HasFormOfMemberPointer;
9552   }
9553 
9554   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9555       // TODO: Should we condition this on whether any functions might
9556       // have matched, or is it more appropriate to do that in callers?
9557       // TODO: a fixit wouldn't hurt.
9558       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9559         << TargetType << OvlExpr->getSourceRange();
9560   }
9561 
9562   bool IsStaticMemberFunctionFromBoundPointer() const {
9563     return StaticMemberFunctionFromBoundPointer;
9564   }
9565 
9566   void ComplainIsStaticMemberFunctionFromBoundPointer() const {
9567     S.Diag(OvlExpr->getLocStart(),
9568            diag::err_invalid_form_pointer_member_function)
9569       << OvlExpr->getSourceRange();
9570   }
9571 
9572   void ComplainOfInvalidConversion() const {
9573     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9574       << OvlExpr->getName() << TargetType;
9575   }
9576 
9577   void ComplainMultipleMatchesFound() const {
9578     assert(Matches.size() > 1);
9579     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9580       << OvlExpr->getName()
9581       << OvlExpr->getSourceRange();
9582     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9583   }
9584 
9585   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9586 
9587   int getNumMatches() const { return Matches.size(); }
9588 
9589   FunctionDecl* getMatchingFunctionDecl() const {
9590     if (Matches.size() != 1) return 0;
9591     return Matches[0].second;
9592   }
9593 
9594   const DeclAccessPair* getMatchingFunctionAccessPair() const {
9595     if (Matches.size() != 1) return 0;
9596     return &Matches[0].first;
9597   }
9598 };
9599 
9600 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9601 /// an overloaded function (C++ [over.over]), where @p From is an
9602 /// expression with overloaded function type and @p ToType is the type
9603 /// we're trying to resolve to. For example:
9604 ///
9605 /// @code
9606 /// int f(double);
9607 /// int f(int);
9608 ///
9609 /// int (*pfd)(double) = f; // selects f(double)
9610 /// @endcode
9611 ///
9612 /// This routine returns the resulting FunctionDecl if it could be
9613 /// resolved, and NULL otherwise. When @p Complain is true, this
9614 /// routine will emit diagnostics if there is an error.
9615 FunctionDecl *
9616 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9617                                          QualType TargetType,
9618                                          bool Complain,
9619                                          DeclAccessPair &FoundResult,
9620                                          bool *pHadMultipleCandidates) {
9621   assert(AddressOfExpr->getType() == Context.OverloadTy);
9622 
9623   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9624                                      Complain);
9625   int NumMatches = Resolver.getNumMatches();
9626   FunctionDecl* Fn = 0;
9627   if (NumMatches == 0 && Complain) {
9628     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9629       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9630     else
9631       Resolver.ComplainNoMatchesFound();
9632   }
9633   else if (NumMatches > 1 && Complain)
9634     Resolver.ComplainMultipleMatchesFound();
9635   else if (NumMatches == 1) {
9636     Fn = Resolver.getMatchingFunctionDecl();
9637     assert(Fn);
9638     FoundResult = *Resolver.getMatchingFunctionAccessPair();
9639     if (Complain) {
9640       if (Resolver.IsStaticMemberFunctionFromBoundPointer())
9641         Resolver.ComplainIsStaticMemberFunctionFromBoundPointer();
9642       else
9643         CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9644     }
9645   }
9646 
9647   if (pHadMultipleCandidates)
9648     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9649   return Fn;
9650 }
9651 
9652 /// \brief Given an expression that refers to an overloaded function, try to
9653 /// resolve that overloaded function expression down to a single function.
9654 ///
9655 /// This routine can only resolve template-ids that refer to a single function
9656 /// template, where that template-id refers to a single template whose template
9657 /// arguments are either provided by the template-id or have defaults,
9658 /// as described in C++0x [temp.arg.explicit]p3.
9659 FunctionDecl *
9660 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9661                                                   bool Complain,
9662                                                   DeclAccessPair *FoundResult) {
9663   // C++ [over.over]p1:
9664   //   [...] [Note: any redundant set of parentheses surrounding the
9665   //   overloaded function name is ignored (5.1). ]
9666   // C++ [over.over]p1:
9667   //   [...] The overloaded function name can be preceded by the &
9668   //   operator.
9669 
9670   // If we didn't actually find any template-ids, we're done.
9671   if (!ovl->hasExplicitTemplateArgs())
9672     return 0;
9673 
9674   TemplateArgumentListInfo ExplicitTemplateArgs;
9675   ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9676   TemplateSpecCandidateSet FailedCandidates(ovl->getNameLoc());
9677 
9678   // Look through all of the overloaded functions, searching for one
9679   // whose type matches exactly.
9680   FunctionDecl *Matched = 0;
9681   for (UnresolvedSetIterator I = ovl->decls_begin(),
9682          E = ovl->decls_end(); I != E; ++I) {
9683     // C++0x [temp.arg.explicit]p3:
9684     //   [...] In contexts where deduction is done and fails, or in contexts
9685     //   where deduction is not done, if a template argument list is
9686     //   specified and it, along with any default template arguments,
9687     //   identifies a single function template specialization, then the
9688     //   template-id is an lvalue for the function template specialization.
9689     FunctionTemplateDecl *FunctionTemplate
9690       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9691 
9692     // C++ [over.over]p2:
9693     //   If the name is a function template, template argument deduction is
9694     //   done (14.8.2.2), and if the argument deduction succeeds, the
9695     //   resulting template argument list is used to generate a single
9696     //   function template specialization, which is added to the set of
9697     //   overloaded functions considered.
9698     FunctionDecl *Specialization = 0;
9699     TemplateDeductionInfo Info(FailedCandidates.getLocation());
9700     if (TemplateDeductionResult Result
9701           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9702                                     Specialization, Info,
9703                                     /*InOverloadResolution=*/true)) {
9704       // Make a note of the failed deduction for diagnostics.
9705       // TODO: Actually use the failed-deduction info?
9706       FailedCandidates.addCandidate()
9707           .set(FunctionTemplate->getTemplatedDecl(),
9708                MakeDeductionFailureInfo(Context, Result, Info));
9709       continue;
9710     }
9711 
9712     assert(Specialization && "no specialization and no error?");
9713 
9714     // Multiple matches; we can't resolve to a single declaration.
9715     if (Matched) {
9716       if (Complain) {
9717         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9718           << ovl->getName();
9719         NoteAllOverloadCandidates(ovl);
9720       }
9721       return 0;
9722     }
9723 
9724     Matched = Specialization;
9725     if (FoundResult) *FoundResult = I.getPair();
9726   }
9727 
9728   if (Matched && getLangOpts().CPlusPlus1y &&
9729       Matched->getResultType()->isUndeducedType() &&
9730       DeduceReturnType(Matched, ovl->getExprLoc(), Complain))
9731     return 0;
9732 
9733   return Matched;
9734 }
9735 
9736 
9737 
9738 
9739 // Resolve and fix an overloaded expression that can be resolved
9740 // because it identifies a single function template specialization.
9741 //
9742 // Last three arguments should only be supplied if Complain = true
9743 //
9744 // Return true if it was logically possible to so resolve the
9745 // expression, regardless of whether or not it succeeded.  Always
9746 // returns true if 'complain' is set.
9747 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9748                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
9749                    bool complain, const SourceRange& OpRangeForComplaining,
9750                                            QualType DestTypeForComplaining,
9751                                             unsigned DiagIDForComplaining) {
9752   assert(SrcExpr.get()->getType() == Context.OverloadTy);
9753 
9754   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9755 
9756   DeclAccessPair found;
9757   ExprResult SingleFunctionExpression;
9758   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9759                            ovl.Expression, /*complain*/ false, &found)) {
9760     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9761       SrcExpr = ExprError();
9762       return true;
9763     }
9764 
9765     // It is only correct to resolve to an instance method if we're
9766     // resolving a form that's permitted to be a pointer to member.
9767     // Otherwise we'll end up making a bound member expression, which
9768     // is illegal in all the contexts we resolve like this.
9769     if (!ovl.HasFormOfMemberPointer &&
9770         isa<CXXMethodDecl>(fn) &&
9771         cast<CXXMethodDecl>(fn)->isInstance()) {
9772       if (!complain) return false;
9773 
9774       Diag(ovl.Expression->getExprLoc(),
9775            diag::err_bound_member_function)
9776         << 0 << ovl.Expression->getSourceRange();
9777 
9778       // TODO: I believe we only end up here if there's a mix of
9779       // static and non-static candidates (otherwise the expression
9780       // would have 'bound member' type, not 'overload' type).
9781       // Ideally we would note which candidate was chosen and why
9782       // the static candidates were rejected.
9783       SrcExpr = ExprError();
9784       return true;
9785     }
9786 
9787     // Fix the expression to refer to 'fn'.
9788     SingleFunctionExpression =
9789       Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9790 
9791     // If desired, do function-to-pointer decay.
9792     if (doFunctionPointerConverion) {
9793       SingleFunctionExpression =
9794         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9795       if (SingleFunctionExpression.isInvalid()) {
9796         SrcExpr = ExprError();
9797         return true;
9798       }
9799     }
9800   }
9801 
9802   if (!SingleFunctionExpression.isUsable()) {
9803     if (complain) {
9804       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9805         << ovl.Expression->getName()
9806         << DestTypeForComplaining
9807         << OpRangeForComplaining
9808         << ovl.Expression->getQualifierLoc().getSourceRange();
9809       NoteAllOverloadCandidates(SrcExpr.get());
9810 
9811       SrcExpr = ExprError();
9812       return true;
9813     }
9814 
9815     return false;
9816   }
9817 
9818   SrcExpr = SingleFunctionExpression;
9819   return true;
9820 }
9821 
9822 /// \brief Add a single candidate to the overload set.
9823 static void AddOverloadedCallCandidate(Sema &S,
9824                                        DeclAccessPair FoundDecl,
9825                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
9826                                        ArrayRef<Expr *> Args,
9827                                        OverloadCandidateSet &CandidateSet,
9828                                        bool PartialOverloading,
9829                                        bool KnownValid) {
9830   NamedDecl *Callee = FoundDecl.getDecl();
9831   if (isa<UsingShadowDecl>(Callee))
9832     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9833 
9834   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9835     if (ExplicitTemplateArgs) {
9836       assert(!KnownValid && "Explicit template arguments?");
9837       return;
9838     }
9839     S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9840                            PartialOverloading);
9841     return;
9842   }
9843 
9844   if (FunctionTemplateDecl *FuncTemplate
9845       = dyn_cast<FunctionTemplateDecl>(Callee)) {
9846     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9847                                    ExplicitTemplateArgs, Args, CandidateSet);
9848     return;
9849   }
9850 
9851   assert(!KnownValid && "unhandled case in overloaded call candidate");
9852 }
9853 
9854 /// \brief Add the overload candidates named by callee and/or found by argument
9855 /// dependent lookup to the given overload set.
9856 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9857                                        ArrayRef<Expr *> Args,
9858                                        OverloadCandidateSet &CandidateSet,
9859                                        bool PartialOverloading) {
9860 
9861 #ifndef NDEBUG
9862   // Verify that ArgumentDependentLookup is consistent with the rules
9863   // in C++0x [basic.lookup.argdep]p3:
9864   //
9865   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9866   //   and let Y be the lookup set produced by argument dependent
9867   //   lookup (defined as follows). If X contains
9868   //
9869   //     -- a declaration of a class member, or
9870   //
9871   //     -- a block-scope function declaration that is not a
9872   //        using-declaration, or
9873   //
9874   //     -- a declaration that is neither a function or a function
9875   //        template
9876   //
9877   //   then Y is empty.
9878 
9879   if (ULE->requiresADL()) {
9880     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9881            E = ULE->decls_end(); I != E; ++I) {
9882       assert(!(*I)->getDeclContext()->isRecord());
9883       assert(isa<UsingShadowDecl>(*I) ||
9884              !(*I)->getDeclContext()->isFunctionOrMethod());
9885       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9886     }
9887   }
9888 #endif
9889 
9890   // It would be nice to avoid this copy.
9891   TemplateArgumentListInfo TABuffer;
9892   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9893   if (ULE->hasExplicitTemplateArgs()) {
9894     ULE->copyTemplateArgumentsInto(TABuffer);
9895     ExplicitTemplateArgs = &TABuffer;
9896   }
9897 
9898   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9899          E = ULE->decls_end(); I != E; ++I)
9900     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9901                                CandidateSet, PartialOverloading,
9902                                /*KnownValid*/ true);
9903 
9904   if (ULE->requiresADL())
9905     AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9906                                          ULE->getExprLoc(),
9907                                          Args, ExplicitTemplateArgs,
9908                                          CandidateSet, PartialOverloading);
9909 }
9910 
9911 /// Determine whether a declaration with the specified name could be moved into
9912 /// a different namespace.
9913 static bool canBeDeclaredInNamespace(const DeclarationName &Name) {
9914   switch (Name.getCXXOverloadedOperator()) {
9915   case OO_New: case OO_Array_New:
9916   case OO_Delete: case OO_Array_Delete:
9917     return false;
9918 
9919   default:
9920     return true;
9921   }
9922 }
9923 
9924 /// Attempt to recover from an ill-formed use of a non-dependent name in a
9925 /// template, where the non-dependent name was declared after the template
9926 /// was defined. This is common in code written for a compilers which do not
9927 /// correctly implement two-stage name lookup.
9928 ///
9929 /// Returns true if a viable candidate was found and a diagnostic was issued.
9930 static bool
9931 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9932                        const CXXScopeSpec &SS, LookupResult &R,
9933                        TemplateArgumentListInfo *ExplicitTemplateArgs,
9934                        ArrayRef<Expr *> Args) {
9935   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9936     return false;
9937 
9938   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9939     if (DC->isTransparentContext())
9940       continue;
9941 
9942     SemaRef.LookupQualifiedName(R, DC);
9943 
9944     if (!R.empty()) {
9945       R.suppressDiagnostics();
9946 
9947       if (isa<CXXRecordDecl>(DC)) {
9948         // Don't diagnose names we find in classes; we get much better
9949         // diagnostics for these from DiagnoseEmptyLookup.
9950         R.clear();
9951         return false;
9952       }
9953 
9954       OverloadCandidateSet Candidates(FnLoc);
9955       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9956         AddOverloadedCallCandidate(SemaRef, I.getPair(),
9957                                    ExplicitTemplateArgs, Args,
9958                                    Candidates, false, /*KnownValid*/ false);
9959 
9960       OverloadCandidateSet::iterator Best;
9961       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9962         // No viable functions. Don't bother the user with notes for functions
9963         // which don't work and shouldn't be found anyway.
9964         R.clear();
9965         return false;
9966       }
9967 
9968       // Find the namespaces where ADL would have looked, and suggest
9969       // declaring the function there instead.
9970       Sema::AssociatedNamespaceSet AssociatedNamespaces;
9971       Sema::AssociatedClassSet AssociatedClasses;
9972       SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9973                                                  AssociatedNamespaces,
9974                                                  AssociatedClasses);
9975       Sema::AssociatedNamespaceSet SuggestedNamespaces;
9976       if (canBeDeclaredInNamespace(R.getLookupName())) {
9977         DeclContext *Std = SemaRef.getStdNamespace();
9978         for (Sema::AssociatedNamespaceSet::iterator
9979                it = AssociatedNamespaces.begin(),
9980                end = AssociatedNamespaces.end(); it != end; ++it) {
9981           // Never suggest declaring a function within namespace 'std'.
9982           if (Std && Std->Encloses(*it))
9983             continue;
9984 
9985           // Never suggest declaring a function within a namespace with a
9986           // reserved name, like __gnu_cxx.
9987           NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
9988           if (NS &&
9989               NS->getQualifiedNameAsString().find("__") != std::string::npos)
9990             continue;
9991 
9992           SuggestedNamespaces.insert(*it);
9993         }
9994       }
9995 
9996       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9997         << R.getLookupName();
9998       if (SuggestedNamespaces.empty()) {
9999         SemaRef.Diag(Best->Function->getLocation(),
10000                      diag::note_not_found_by_two_phase_lookup)
10001           << R.getLookupName() << 0;
10002       } else if (SuggestedNamespaces.size() == 1) {
10003         SemaRef.Diag(Best->Function->getLocation(),
10004                      diag::note_not_found_by_two_phase_lookup)
10005           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
10006       } else {
10007         // FIXME: It would be useful to list the associated namespaces here,
10008         // but the diagnostics infrastructure doesn't provide a way to produce
10009         // a localized representation of a list of items.
10010         SemaRef.Diag(Best->Function->getLocation(),
10011                      diag::note_not_found_by_two_phase_lookup)
10012           << R.getLookupName() << 2;
10013       }
10014 
10015       // Try to recover by calling this function.
10016       return true;
10017     }
10018 
10019     R.clear();
10020   }
10021 
10022   return false;
10023 }
10024 
10025 /// Attempt to recover from ill-formed use of a non-dependent operator in a
10026 /// template, where the non-dependent operator was declared after the template
10027 /// was defined.
10028 ///
10029 /// Returns true if a viable candidate was found and a diagnostic was issued.
10030 static bool
10031 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
10032                                SourceLocation OpLoc,
10033                                ArrayRef<Expr *> Args) {
10034   DeclarationName OpName =
10035     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
10036   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
10037   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
10038                                 /*ExplicitTemplateArgs=*/0, Args);
10039 }
10040 
10041 namespace {
10042 class BuildRecoveryCallExprRAII {
10043   Sema &SemaRef;
10044 public:
10045   BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
10046     assert(SemaRef.IsBuildingRecoveryCallExpr == false);
10047     SemaRef.IsBuildingRecoveryCallExpr = true;
10048   }
10049 
10050   ~BuildRecoveryCallExprRAII() {
10051     SemaRef.IsBuildingRecoveryCallExpr = false;
10052   }
10053 };
10054 
10055 }
10056 
10057 /// Attempts to recover from a call where no functions were found.
10058 ///
10059 /// Returns true if new candidates were found.
10060 static ExprResult
10061 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
10062                       UnresolvedLookupExpr *ULE,
10063                       SourceLocation LParenLoc,
10064                       llvm::MutableArrayRef<Expr *> Args,
10065                       SourceLocation RParenLoc,
10066                       bool EmptyLookup, bool AllowTypoCorrection) {
10067   // Do not try to recover if it is already building a recovery call.
10068   // This stops infinite loops for template instantiations like
10069   //
10070   // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
10071   // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
10072   //
10073   if (SemaRef.IsBuildingRecoveryCallExpr)
10074     return ExprError();
10075   BuildRecoveryCallExprRAII RCE(SemaRef);
10076 
10077   CXXScopeSpec SS;
10078   SS.Adopt(ULE->getQualifierLoc());
10079   SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
10080 
10081   TemplateArgumentListInfo TABuffer;
10082   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
10083   if (ULE->hasExplicitTemplateArgs()) {
10084     ULE->copyTemplateArgumentsInto(TABuffer);
10085     ExplicitTemplateArgs = &TABuffer;
10086   }
10087 
10088   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
10089                  Sema::LookupOrdinaryName);
10090   FunctionCallFilterCCC Validator(SemaRef, Args.size(),
10091                                   ExplicitTemplateArgs != 0);
10092   NoTypoCorrectionCCC RejectAll;
10093   CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
10094       (CorrectionCandidateCallback*)&Validator :
10095       (CorrectionCandidateCallback*)&RejectAll;
10096   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
10097                               ExplicitTemplateArgs, Args) &&
10098       (!EmptyLookup ||
10099        SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
10100                                    ExplicitTemplateArgs, Args)))
10101     return ExprError();
10102 
10103   assert(!R.empty() && "lookup results empty despite recovery");
10104 
10105   // Build an implicit member call if appropriate.  Just drop the
10106   // casts and such from the call, we don't really care.
10107   ExprResult NewFn = ExprError();
10108   if ((*R.begin())->isCXXClassMember())
10109     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
10110                                                     R, ExplicitTemplateArgs);
10111   else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
10112     NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
10113                                         ExplicitTemplateArgs);
10114   else
10115     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
10116 
10117   if (NewFn.isInvalid())
10118     return ExprError();
10119 
10120   // This shouldn't cause an infinite loop because we're giving it
10121   // an expression with viable lookup results, which should never
10122   // end up here.
10123   return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
10124                                MultiExprArg(Args.data(), Args.size()),
10125                                RParenLoc);
10126 }
10127 
10128 /// \brief Constructs and populates an OverloadedCandidateSet from
10129 /// the given function.
10130 /// \returns true when an the ExprResult output parameter has been set.
10131 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
10132                                   UnresolvedLookupExpr *ULE,
10133                                   MultiExprArg Args,
10134                                   SourceLocation RParenLoc,
10135                                   OverloadCandidateSet *CandidateSet,
10136                                   ExprResult *Result) {
10137 #ifndef NDEBUG
10138   if (ULE->requiresADL()) {
10139     // To do ADL, we must have found an unqualified name.
10140     assert(!ULE->getQualifier() && "qualified name with ADL");
10141 
10142     // We don't perform ADL for implicit declarations of builtins.
10143     // Verify that this was correctly set up.
10144     FunctionDecl *F;
10145     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
10146         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
10147         F->getBuiltinID() && F->isImplicit())
10148       llvm_unreachable("performing ADL for builtin");
10149 
10150     // We don't perform ADL in C.
10151     assert(getLangOpts().CPlusPlus && "ADL enabled in C");
10152   }
10153 #endif
10154 
10155   UnbridgedCastsSet UnbridgedCasts;
10156   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) {
10157     *Result = ExprError();
10158     return true;
10159   }
10160 
10161   // Add the functions denoted by the callee to the set of candidate
10162   // functions, including those from argument-dependent lookup.
10163   AddOverloadedCallCandidates(ULE, Args, *CandidateSet);
10164 
10165   // If we found nothing, try to recover.
10166   // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
10167   // out if it fails.
10168   if (CandidateSet->empty()) {
10169     // In Microsoft mode, if we are inside a template class member function then
10170     // create a type dependent CallExpr. The goal is to postpone name lookup
10171     // to instantiation time to be able to search into type dependent base
10172     // classes.
10173     if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
10174         (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
10175       CallExpr *CE = new (Context) CallExpr(Context, Fn, Args,
10176                                             Context.DependentTy, VK_RValue,
10177                                             RParenLoc);
10178       CE->setTypeDependent(true);
10179       *Result = Owned(CE);
10180       return true;
10181     }
10182     return false;
10183   }
10184 
10185   UnbridgedCasts.restore();
10186   return false;
10187 }
10188 
10189 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
10190 /// the completed call expression. If overload resolution fails, emits
10191 /// diagnostics and returns ExprError()
10192 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
10193                                            UnresolvedLookupExpr *ULE,
10194                                            SourceLocation LParenLoc,
10195                                            MultiExprArg Args,
10196                                            SourceLocation RParenLoc,
10197                                            Expr *ExecConfig,
10198                                            OverloadCandidateSet *CandidateSet,
10199                                            OverloadCandidateSet::iterator *Best,
10200                                            OverloadingResult OverloadResult,
10201                                            bool AllowTypoCorrection) {
10202   if (CandidateSet->empty())
10203     return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, Args,
10204                                  RParenLoc, /*EmptyLookup=*/true,
10205                                  AllowTypoCorrection);
10206 
10207   switch (OverloadResult) {
10208   case OR_Success: {
10209     FunctionDecl *FDecl = (*Best)->Function;
10210     SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
10211     if (SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()))
10212       return ExprError();
10213     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10214     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10215                                          ExecConfig);
10216   }
10217 
10218   case OR_No_Viable_Function: {
10219     // Try to recover by looking for viable functions which the user might
10220     // have meant to call.
10221     ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
10222                                                 Args, RParenLoc,
10223                                                 /*EmptyLookup=*/false,
10224                                                 AllowTypoCorrection);
10225     if (!Recovery.isInvalid())
10226       return Recovery;
10227 
10228     SemaRef.Diag(Fn->getLocStart(),
10229          diag::err_ovl_no_viable_function_in_call)
10230       << ULE->getName() << Fn->getSourceRange();
10231     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10232     break;
10233   }
10234 
10235   case OR_Ambiguous:
10236     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
10237       << ULE->getName() << Fn->getSourceRange();
10238     CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates, Args);
10239     break;
10240 
10241   case OR_Deleted: {
10242     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
10243       << (*Best)->Function->isDeleted()
10244       << ULE->getName()
10245       << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
10246       << Fn->getSourceRange();
10247     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10248 
10249     // We emitted an error for the unvailable/deleted function call but keep
10250     // the call in the AST.
10251     FunctionDecl *FDecl = (*Best)->Function;
10252     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10253     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10254                                          ExecConfig);
10255   }
10256   }
10257 
10258   // Overload resolution failed.
10259   return ExprError();
10260 }
10261 
10262 /// BuildOverloadedCallExpr - Given the call expression that calls Fn
10263 /// (which eventually refers to the declaration Func) and the call
10264 /// arguments Args/NumArgs, attempt to resolve the function call down
10265 /// to a specific function. If overload resolution succeeds, returns
10266 /// the call expression produced by overload resolution.
10267 /// Otherwise, emits diagnostics and returns ExprError.
10268 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
10269                                          UnresolvedLookupExpr *ULE,
10270                                          SourceLocation LParenLoc,
10271                                          MultiExprArg Args,
10272                                          SourceLocation RParenLoc,
10273                                          Expr *ExecConfig,
10274                                          bool AllowTypoCorrection) {
10275   OverloadCandidateSet CandidateSet(Fn->getExprLoc());
10276   ExprResult result;
10277 
10278   if (buildOverloadedCallSet(S, Fn, ULE, Args, LParenLoc, &CandidateSet,
10279                              &result))
10280     return result;
10281 
10282   OverloadCandidateSet::iterator Best;
10283   OverloadingResult OverloadResult =
10284       CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
10285 
10286   return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args,
10287                                   RParenLoc, ExecConfig, &CandidateSet,
10288                                   &Best, OverloadResult,
10289                                   AllowTypoCorrection);
10290 }
10291 
10292 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
10293   return Functions.size() > 1 ||
10294     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
10295 }
10296 
10297 /// \brief Create a unary operation that may resolve to an overloaded
10298 /// operator.
10299 ///
10300 /// \param OpLoc The location of the operator itself (e.g., '*').
10301 ///
10302 /// \param OpcIn The UnaryOperator::Opcode that describes this
10303 /// operator.
10304 ///
10305 /// \param Fns The set of non-member functions that will be
10306 /// considered by overload resolution. The caller needs to build this
10307 /// set based on the context using, e.g.,
10308 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10309 /// set should not contain any member functions; those will be added
10310 /// by CreateOverloadedUnaryOp().
10311 ///
10312 /// \param Input The input argument.
10313 ExprResult
10314 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
10315                               const UnresolvedSetImpl &Fns,
10316                               Expr *Input) {
10317   UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
10318 
10319   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
10320   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
10321   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10322   // TODO: provide better source location info.
10323   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10324 
10325   if (checkPlaceholderForOverload(*this, Input))
10326     return ExprError();
10327 
10328   Expr *Args[2] = { Input, 0 };
10329   unsigned NumArgs = 1;
10330 
10331   // For post-increment and post-decrement, add the implicit '0' as
10332   // the second argument, so that we know this is a post-increment or
10333   // post-decrement.
10334   if (Opc == UO_PostInc || Opc == UO_PostDec) {
10335     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
10336     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
10337                                      SourceLocation());
10338     NumArgs = 2;
10339   }
10340 
10341   ArrayRef<Expr *> ArgsArray(Args, NumArgs);
10342 
10343   if (Input->isTypeDependent()) {
10344     if (Fns.empty())
10345       return Owned(new (Context) UnaryOperator(Input,
10346                                                Opc,
10347                                                Context.DependentTy,
10348                                                VK_RValue, OK_Ordinary,
10349                                                OpLoc));
10350 
10351     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10352     UnresolvedLookupExpr *Fn
10353       = UnresolvedLookupExpr::Create(Context, NamingClass,
10354                                      NestedNameSpecifierLoc(), OpNameInfo,
10355                                      /*ADL*/ true, IsOverloaded(Fns),
10356                                      Fns.begin(), Fns.end());
10357     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, ArgsArray,
10358                                                    Context.DependentTy,
10359                                                    VK_RValue,
10360                                                    OpLoc, false));
10361   }
10362 
10363   // Build an empty overload set.
10364   OverloadCandidateSet CandidateSet(OpLoc);
10365 
10366   // Add the candidates from the given function set.
10367   AddFunctionCandidates(Fns, ArgsArray, CandidateSet, false);
10368 
10369   // Add operator candidates that are member functions.
10370   AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10371 
10372   // Add candidates from ADL.
10373   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, OpLoc,
10374                                        ArgsArray, /*ExplicitTemplateArgs*/ 0,
10375                                        CandidateSet);
10376 
10377   // Add builtin operator candidates.
10378   AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10379 
10380   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10381 
10382   // Perform overload resolution.
10383   OverloadCandidateSet::iterator Best;
10384   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10385   case OR_Success: {
10386     // We found a built-in operator or an overloaded operator.
10387     FunctionDecl *FnDecl = Best->Function;
10388 
10389     if (FnDecl) {
10390       // We matched an overloaded operator. Build a call to that
10391       // operator.
10392 
10393       // Convert the arguments.
10394       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10395         CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
10396 
10397         ExprResult InputRes =
10398           PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
10399                                               Best->FoundDecl, Method);
10400         if (InputRes.isInvalid())
10401           return ExprError();
10402         Input = InputRes.take();
10403       } else {
10404         // Convert the arguments.
10405         ExprResult InputInit
10406           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10407                                                       Context,
10408                                                       FnDecl->getParamDecl(0)),
10409                                       SourceLocation(),
10410                                       Input);
10411         if (InputInit.isInvalid())
10412           return ExprError();
10413         Input = InputInit.take();
10414       }
10415 
10416       // Determine the result type.
10417       QualType ResultTy = FnDecl->getResultType();
10418       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10419       ResultTy = ResultTy.getNonLValueExprType(Context);
10420 
10421       // Build the actual expression node.
10422       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
10423                                                 HadMultipleCandidates, OpLoc);
10424       if (FnExpr.isInvalid())
10425         return ExprError();
10426 
10427       Args[0] = Input;
10428       CallExpr *TheCall =
10429         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), ArgsArray,
10430                                           ResultTy, VK, OpLoc, false);
10431 
10432       if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10433                               FnDecl))
10434         return ExprError();
10435 
10436       return MaybeBindToTemporary(TheCall);
10437     } else {
10438       // We matched a built-in operator. Convert the arguments, then
10439       // break out so that we will build the appropriate built-in
10440       // operator node.
10441       ExprResult InputRes =
10442         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10443                                   Best->Conversions[0], AA_Passing);
10444       if (InputRes.isInvalid())
10445         return ExprError();
10446       Input = InputRes.take();
10447       break;
10448     }
10449   }
10450 
10451   case OR_No_Viable_Function:
10452     // This is an erroneous use of an operator which can be overloaded by
10453     // a non-member function. Check for non-member operators which were
10454     // defined too late to be candidates.
10455     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, ArgsArray))
10456       // FIXME: Recover by calling the found function.
10457       return ExprError();
10458 
10459     // No viable function; fall through to handling this as a
10460     // built-in operator, which will produce an error message for us.
10461     break;
10462 
10463   case OR_Ambiguous:
10464     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10465         << UnaryOperator::getOpcodeStr(Opc)
10466         << Input->getType()
10467         << Input->getSourceRange();
10468     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, ArgsArray,
10469                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10470     return ExprError();
10471 
10472   case OR_Deleted:
10473     Diag(OpLoc, diag::err_ovl_deleted_oper)
10474       << Best->Function->isDeleted()
10475       << UnaryOperator::getOpcodeStr(Opc)
10476       << getDeletedOrUnavailableSuffix(Best->Function)
10477       << Input->getSourceRange();
10478     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, ArgsArray,
10479                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10480     return ExprError();
10481   }
10482 
10483   // Either we found no viable overloaded operator or we matched a
10484   // built-in operator. In either case, fall through to trying to
10485   // build a built-in operation.
10486   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10487 }
10488 
10489 /// \brief Create a binary operation that may resolve to an overloaded
10490 /// operator.
10491 ///
10492 /// \param OpLoc The location of the operator itself (e.g., '+').
10493 ///
10494 /// \param OpcIn The BinaryOperator::Opcode that describes this
10495 /// operator.
10496 ///
10497 /// \param Fns The set of non-member functions that will be
10498 /// considered by overload resolution. The caller needs to build this
10499 /// set based on the context using, e.g.,
10500 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10501 /// set should not contain any member functions; those will be added
10502 /// by CreateOverloadedBinOp().
10503 ///
10504 /// \param LHS Left-hand argument.
10505 /// \param RHS Right-hand argument.
10506 ExprResult
10507 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10508                             unsigned OpcIn,
10509                             const UnresolvedSetImpl &Fns,
10510                             Expr *LHS, Expr *RHS) {
10511   Expr *Args[2] = { LHS, RHS };
10512   LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10513 
10514   BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10515   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10516   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10517 
10518   // If either side is type-dependent, create an appropriate dependent
10519   // expression.
10520   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10521     if (Fns.empty()) {
10522       // If there are no functions to store, just build a dependent
10523       // BinaryOperator or CompoundAssignment.
10524       if (Opc <= BO_Assign || Opc > BO_OrAssign)
10525         return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10526                                                   Context.DependentTy,
10527                                                   VK_RValue, OK_Ordinary,
10528                                                   OpLoc,
10529                                                   FPFeatures.fp_contract));
10530 
10531       return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10532                                                         Context.DependentTy,
10533                                                         VK_LValue,
10534                                                         OK_Ordinary,
10535                                                         Context.DependentTy,
10536                                                         Context.DependentTy,
10537                                                         OpLoc,
10538                                                         FPFeatures.fp_contract));
10539     }
10540 
10541     // FIXME: save results of ADL from here?
10542     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10543     // TODO: provide better source location info in DNLoc component.
10544     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10545     UnresolvedLookupExpr *Fn
10546       = UnresolvedLookupExpr::Create(Context, NamingClass,
10547                                      NestedNameSpecifierLoc(), OpNameInfo,
10548                                      /*ADL*/ true, IsOverloaded(Fns),
10549                                      Fns.begin(), Fns.end());
10550     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
10551                                                 Context.DependentTy, VK_RValue,
10552                                                 OpLoc, FPFeatures.fp_contract));
10553   }
10554 
10555   // Always do placeholder-like conversions on the RHS.
10556   if (checkPlaceholderForOverload(*this, Args[1]))
10557     return ExprError();
10558 
10559   // Do placeholder-like conversion on the LHS; note that we should
10560   // not get here with a PseudoObject LHS.
10561   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10562   if (checkPlaceholderForOverload(*this, Args[0]))
10563     return ExprError();
10564 
10565   // If this is the assignment operator, we only perform overload resolution
10566   // if the left-hand side is a class or enumeration type. This is actually
10567   // a hack. The standard requires that we do overload resolution between the
10568   // various built-in candidates, but as DR507 points out, this can lead to
10569   // problems. So we do it this way, which pretty much follows what GCC does.
10570   // Note that we go the traditional code path for compound assignment forms.
10571   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10572     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10573 
10574   // If this is the .* operator, which is not overloadable, just
10575   // create a built-in binary operator.
10576   if (Opc == BO_PtrMemD)
10577     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10578 
10579   // Build an empty overload set.
10580   OverloadCandidateSet CandidateSet(OpLoc);
10581 
10582   // Add the candidates from the given function set.
10583   AddFunctionCandidates(Fns, Args, CandidateSet, false);
10584 
10585   // Add operator candidates that are member functions.
10586   AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10587 
10588   // Add candidates from ADL.
10589   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10590                                        OpLoc, Args,
10591                                        /*ExplicitTemplateArgs*/ 0,
10592                                        CandidateSet);
10593 
10594   // Add builtin operator candidates.
10595   AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10596 
10597   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10598 
10599   // Perform overload resolution.
10600   OverloadCandidateSet::iterator Best;
10601   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10602     case OR_Success: {
10603       // We found a built-in operator or an overloaded operator.
10604       FunctionDecl *FnDecl = Best->Function;
10605 
10606       if (FnDecl) {
10607         // We matched an overloaded operator. Build a call to that
10608         // operator.
10609 
10610         // Convert the arguments.
10611         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10612           // Best->Access is only meaningful for class members.
10613           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10614 
10615           ExprResult Arg1 =
10616             PerformCopyInitialization(
10617               InitializedEntity::InitializeParameter(Context,
10618                                                      FnDecl->getParamDecl(0)),
10619               SourceLocation(), Owned(Args[1]));
10620           if (Arg1.isInvalid())
10621             return ExprError();
10622 
10623           ExprResult Arg0 =
10624             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10625                                                 Best->FoundDecl, Method);
10626           if (Arg0.isInvalid())
10627             return ExprError();
10628           Args[0] = Arg0.takeAs<Expr>();
10629           Args[1] = RHS = Arg1.takeAs<Expr>();
10630         } else {
10631           // Convert the arguments.
10632           ExprResult Arg0 = PerformCopyInitialization(
10633             InitializedEntity::InitializeParameter(Context,
10634                                                    FnDecl->getParamDecl(0)),
10635             SourceLocation(), Owned(Args[0]));
10636           if (Arg0.isInvalid())
10637             return ExprError();
10638 
10639           ExprResult Arg1 =
10640             PerformCopyInitialization(
10641               InitializedEntity::InitializeParameter(Context,
10642                                                      FnDecl->getParamDecl(1)),
10643               SourceLocation(), Owned(Args[1]));
10644           if (Arg1.isInvalid())
10645             return ExprError();
10646           Args[0] = LHS = Arg0.takeAs<Expr>();
10647           Args[1] = RHS = Arg1.takeAs<Expr>();
10648         }
10649 
10650         // Determine the result type.
10651         QualType ResultTy = FnDecl->getResultType();
10652         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10653         ResultTy = ResultTy.getNonLValueExprType(Context);
10654 
10655         // Build the actual expression node.
10656         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10657                                                   Best->FoundDecl,
10658                                                   HadMultipleCandidates, OpLoc);
10659         if (FnExpr.isInvalid())
10660           return ExprError();
10661 
10662         CXXOperatorCallExpr *TheCall =
10663           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10664                                             Args, ResultTy, VK, OpLoc,
10665                                             FPFeatures.fp_contract);
10666 
10667         if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10668                                 FnDecl))
10669           return ExprError();
10670 
10671         ArrayRef<const Expr *> ArgsArray(Args, 2);
10672         // Cut off the implicit 'this'.
10673         if (isa<CXXMethodDecl>(FnDecl))
10674           ArgsArray = ArgsArray.slice(1);
10675         checkCall(FnDecl, ArgsArray, 0, isa<CXXMethodDecl>(FnDecl), OpLoc,
10676                   TheCall->getSourceRange(), VariadicDoesNotApply);
10677 
10678         return MaybeBindToTemporary(TheCall);
10679       } else {
10680         // We matched a built-in operator. Convert the arguments, then
10681         // break out so that we will build the appropriate built-in
10682         // operator node.
10683         ExprResult ArgsRes0 =
10684           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10685                                     Best->Conversions[0], AA_Passing);
10686         if (ArgsRes0.isInvalid())
10687           return ExprError();
10688         Args[0] = ArgsRes0.take();
10689 
10690         ExprResult ArgsRes1 =
10691           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10692                                     Best->Conversions[1], AA_Passing);
10693         if (ArgsRes1.isInvalid())
10694           return ExprError();
10695         Args[1] = ArgsRes1.take();
10696         break;
10697       }
10698     }
10699 
10700     case OR_No_Viable_Function: {
10701       // C++ [over.match.oper]p9:
10702       //   If the operator is the operator , [...] and there are no
10703       //   viable functions, then the operator is assumed to be the
10704       //   built-in operator and interpreted according to clause 5.
10705       if (Opc == BO_Comma)
10706         break;
10707 
10708       // For class as left operand for assignment or compound assigment
10709       // operator do not fall through to handling in built-in, but report that
10710       // no overloaded assignment operator found
10711       ExprResult Result = ExprError();
10712       if (Args[0]->getType()->isRecordType() &&
10713           Opc >= BO_Assign && Opc <= BO_OrAssign) {
10714         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10715              << BinaryOperator::getOpcodeStr(Opc)
10716              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10717       } else {
10718         // This is an erroneous use of an operator which can be overloaded by
10719         // a non-member function. Check for non-member operators which were
10720         // defined too late to be candidates.
10721         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10722           // FIXME: Recover by calling the found function.
10723           return ExprError();
10724 
10725         // No viable function; try to create a built-in operation, which will
10726         // produce an error. Then, show the non-viable candidates.
10727         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10728       }
10729       assert(Result.isInvalid() &&
10730              "C++ binary operator overloading is missing candidates!");
10731       if (Result.isInvalid())
10732         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10733                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
10734       return Result;
10735     }
10736 
10737     case OR_Ambiguous:
10738       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10739           << BinaryOperator::getOpcodeStr(Opc)
10740           << Args[0]->getType() << Args[1]->getType()
10741           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10742       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10743                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10744       return ExprError();
10745 
10746     case OR_Deleted:
10747       if (isImplicitlyDeleted(Best->Function)) {
10748         CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10749         Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10750           << Context.getRecordType(Method->getParent())
10751           << getSpecialMember(Method);
10752 
10753         // The user probably meant to call this special member. Just
10754         // explain why it's deleted.
10755         NoteDeletedFunction(Method);
10756         return ExprError();
10757       } else {
10758         Diag(OpLoc, diag::err_ovl_deleted_oper)
10759           << Best->Function->isDeleted()
10760           << BinaryOperator::getOpcodeStr(Opc)
10761           << getDeletedOrUnavailableSuffix(Best->Function)
10762           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10763       }
10764       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10765                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10766       return ExprError();
10767   }
10768 
10769   // We matched a built-in operator; build it.
10770   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10771 }
10772 
10773 ExprResult
10774 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10775                                          SourceLocation RLoc,
10776                                          Expr *Base, Expr *Idx) {
10777   Expr *Args[2] = { Base, Idx };
10778   DeclarationName OpName =
10779       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10780 
10781   // If either side is type-dependent, create an appropriate dependent
10782   // expression.
10783   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10784 
10785     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10786     // CHECKME: no 'operator' keyword?
10787     DeclarationNameInfo OpNameInfo(OpName, LLoc);
10788     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10789     UnresolvedLookupExpr *Fn
10790       = UnresolvedLookupExpr::Create(Context, NamingClass,
10791                                      NestedNameSpecifierLoc(), OpNameInfo,
10792                                      /*ADL*/ true, /*Overloaded*/ false,
10793                                      UnresolvedSetIterator(),
10794                                      UnresolvedSetIterator());
10795     // Can't add any actual overloads yet
10796 
10797     return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10798                                                    Args,
10799                                                    Context.DependentTy,
10800                                                    VK_RValue,
10801                                                    RLoc, false));
10802   }
10803 
10804   // Handle placeholders on both operands.
10805   if (checkPlaceholderForOverload(*this, Args[0]))
10806     return ExprError();
10807   if (checkPlaceholderForOverload(*this, Args[1]))
10808     return ExprError();
10809 
10810   // Build an empty overload set.
10811   OverloadCandidateSet CandidateSet(LLoc);
10812 
10813   // Subscript can only be overloaded as a member function.
10814 
10815   // Add operator candidates that are member functions.
10816   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10817 
10818   // Add builtin operator candidates.
10819   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10820 
10821   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10822 
10823   // Perform overload resolution.
10824   OverloadCandidateSet::iterator Best;
10825   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10826     case OR_Success: {
10827       // We found a built-in operator or an overloaded operator.
10828       FunctionDecl *FnDecl = Best->Function;
10829 
10830       if (FnDecl) {
10831         // We matched an overloaded operator. Build a call to that
10832         // operator.
10833 
10834         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10835 
10836         // Convert the arguments.
10837         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10838         ExprResult Arg0 =
10839           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10840                                               Best->FoundDecl, Method);
10841         if (Arg0.isInvalid())
10842           return ExprError();
10843         Args[0] = Arg0.take();
10844 
10845         // Convert the arguments.
10846         ExprResult InputInit
10847           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10848                                                       Context,
10849                                                       FnDecl->getParamDecl(0)),
10850                                       SourceLocation(),
10851                                       Owned(Args[1]));
10852         if (InputInit.isInvalid())
10853           return ExprError();
10854 
10855         Args[1] = InputInit.takeAs<Expr>();
10856 
10857         // Determine the result type
10858         QualType ResultTy = FnDecl->getResultType();
10859         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10860         ResultTy = ResultTy.getNonLValueExprType(Context);
10861 
10862         // Build the actual expression node.
10863         DeclarationNameInfo OpLocInfo(OpName, LLoc);
10864         OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10865         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10866                                                   Best->FoundDecl,
10867                                                   HadMultipleCandidates,
10868                                                   OpLocInfo.getLoc(),
10869                                                   OpLocInfo.getInfo());
10870         if (FnExpr.isInvalid())
10871           return ExprError();
10872 
10873         CXXOperatorCallExpr *TheCall =
10874           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10875                                             FnExpr.take(), Args,
10876                                             ResultTy, VK, RLoc,
10877                                             false);
10878 
10879         if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10880                                 FnDecl))
10881           return ExprError();
10882 
10883         return MaybeBindToTemporary(TheCall);
10884       } else {
10885         // We matched a built-in operator. Convert the arguments, then
10886         // break out so that we will build the appropriate built-in
10887         // operator node.
10888         ExprResult ArgsRes0 =
10889           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10890                                     Best->Conversions[0], AA_Passing);
10891         if (ArgsRes0.isInvalid())
10892           return ExprError();
10893         Args[0] = ArgsRes0.take();
10894 
10895         ExprResult ArgsRes1 =
10896           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10897                                     Best->Conversions[1], AA_Passing);
10898         if (ArgsRes1.isInvalid())
10899           return ExprError();
10900         Args[1] = ArgsRes1.take();
10901 
10902         break;
10903       }
10904     }
10905 
10906     case OR_No_Viable_Function: {
10907       if (CandidateSet.empty())
10908         Diag(LLoc, diag::err_ovl_no_oper)
10909           << Args[0]->getType() << /*subscript*/ 0
10910           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10911       else
10912         Diag(LLoc, diag::err_ovl_no_viable_subscript)
10913           << Args[0]->getType()
10914           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10915       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10916                                   "[]", LLoc);
10917       return ExprError();
10918     }
10919 
10920     case OR_Ambiguous:
10921       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10922           << "[]"
10923           << Args[0]->getType() << Args[1]->getType()
10924           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10925       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10926                                   "[]", LLoc);
10927       return ExprError();
10928 
10929     case OR_Deleted:
10930       Diag(LLoc, diag::err_ovl_deleted_oper)
10931         << Best->Function->isDeleted() << "[]"
10932         << getDeletedOrUnavailableSuffix(Best->Function)
10933         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10934       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10935                                   "[]", LLoc);
10936       return ExprError();
10937     }
10938 
10939   // We matched a built-in operator; build it.
10940   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10941 }
10942 
10943 /// BuildCallToMemberFunction - Build a call to a member
10944 /// function. MemExpr is the expression that refers to the member
10945 /// function (and includes the object parameter), Args/NumArgs are the
10946 /// arguments to the function call (not including the object
10947 /// parameter). The caller needs to validate that the member
10948 /// expression refers to a non-static member function or an overloaded
10949 /// member function.
10950 ExprResult
10951 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10952                                 SourceLocation LParenLoc,
10953                                 MultiExprArg Args,
10954                                 SourceLocation RParenLoc) {
10955   assert(MemExprE->getType() == Context.BoundMemberTy ||
10956          MemExprE->getType() == Context.OverloadTy);
10957 
10958   // Dig out the member expression. This holds both the object
10959   // argument and the member function we're referring to.
10960   Expr *NakedMemExpr = MemExprE->IgnoreParens();
10961 
10962   // Determine whether this is a call to a pointer-to-member function.
10963   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10964     assert(op->getType() == Context.BoundMemberTy);
10965     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10966 
10967     QualType fnType =
10968       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10969 
10970     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10971     QualType resultType = proto->getCallResultType(Context);
10972     ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10973 
10974     // Check that the object type isn't more qualified than the
10975     // member function we're calling.
10976     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10977 
10978     QualType objectType = op->getLHS()->getType();
10979     if (op->getOpcode() == BO_PtrMemI)
10980       objectType = objectType->castAs<PointerType>()->getPointeeType();
10981     Qualifiers objectQuals = objectType.getQualifiers();
10982 
10983     Qualifiers difference = objectQuals - funcQuals;
10984     difference.removeObjCGCAttr();
10985     difference.removeAddressSpace();
10986     if (difference) {
10987       std::string qualsString = difference.getAsString();
10988       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10989         << fnType.getUnqualifiedType()
10990         << qualsString
10991         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10992     }
10993 
10994     CXXMemberCallExpr *call
10995       = new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
10996                                         resultType, valueKind, RParenLoc);
10997 
10998     if (CheckCallReturnType(proto->getResultType(),
10999                             op->getRHS()->getLocStart(),
11000                             call, 0))
11001       return ExprError();
11002 
11003     if (ConvertArgumentsForCall(call, op, 0, proto, Args, RParenLoc))
11004       return ExprError();
11005 
11006     if (CheckOtherCall(call, proto))
11007       return ExprError();
11008 
11009     return MaybeBindToTemporary(call);
11010   }
11011 
11012   UnbridgedCastsSet UnbridgedCasts;
11013   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
11014     return ExprError();
11015 
11016   MemberExpr *MemExpr;
11017   CXXMethodDecl *Method = 0;
11018   DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
11019   NestedNameSpecifier *Qualifier = 0;
11020   if (isa<MemberExpr>(NakedMemExpr)) {
11021     MemExpr = cast<MemberExpr>(NakedMemExpr);
11022     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
11023     FoundDecl = MemExpr->getFoundDecl();
11024     Qualifier = MemExpr->getQualifier();
11025     UnbridgedCasts.restore();
11026   } else {
11027     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
11028     Qualifier = UnresExpr->getQualifier();
11029 
11030     QualType ObjectType = UnresExpr->getBaseType();
11031     Expr::Classification ObjectClassification
11032       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
11033                             : UnresExpr->getBase()->Classify(Context);
11034 
11035     // Add overload candidates
11036     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
11037 
11038     // FIXME: avoid copy.
11039     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11040     if (UnresExpr->hasExplicitTemplateArgs()) {
11041       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11042       TemplateArgs = &TemplateArgsBuffer;
11043     }
11044 
11045     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
11046            E = UnresExpr->decls_end(); I != E; ++I) {
11047 
11048       NamedDecl *Func = *I;
11049       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
11050       if (isa<UsingShadowDecl>(Func))
11051         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
11052 
11053 
11054       // Microsoft supports direct constructor calls.
11055       if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
11056         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
11057                              Args, CandidateSet);
11058       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
11059         // If explicit template arguments were provided, we can't call a
11060         // non-template member function.
11061         if (TemplateArgs)
11062           continue;
11063 
11064         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
11065                            ObjectClassification, Args, CandidateSet,
11066                            /*SuppressUserConversions=*/false);
11067       } else {
11068         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
11069                                    I.getPair(), ActingDC, TemplateArgs,
11070                                    ObjectType,  ObjectClassification,
11071                                    Args, CandidateSet,
11072                                    /*SuppressUsedConversions=*/false);
11073       }
11074     }
11075 
11076     DeclarationName DeclName = UnresExpr->getMemberName();
11077 
11078     UnbridgedCasts.restore();
11079 
11080     OverloadCandidateSet::iterator Best;
11081     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
11082                                             Best)) {
11083     case OR_Success:
11084       Method = cast<CXXMethodDecl>(Best->Function);
11085       FoundDecl = Best->FoundDecl;
11086       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
11087       if (DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()))
11088         return ExprError();
11089       // If FoundDecl is different from Method (such as if one is a template
11090       // and the other a specialization), make sure DiagnoseUseOfDecl is
11091       // called on both.
11092       // FIXME: This would be more comprehensively addressed by modifying
11093       // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
11094       // being used.
11095       if (Method != FoundDecl.getDecl() &&
11096                       DiagnoseUseOfDecl(Method, UnresExpr->getNameLoc()))
11097         return ExprError();
11098       break;
11099 
11100     case OR_No_Viable_Function:
11101       Diag(UnresExpr->getMemberLoc(),
11102            diag::err_ovl_no_viable_member_function_in_call)
11103         << DeclName << MemExprE->getSourceRange();
11104       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11105       // FIXME: Leaking incoming expressions!
11106       return ExprError();
11107 
11108     case OR_Ambiguous:
11109       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
11110         << DeclName << MemExprE->getSourceRange();
11111       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11112       // FIXME: Leaking incoming expressions!
11113       return ExprError();
11114 
11115     case OR_Deleted:
11116       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
11117         << Best->Function->isDeleted()
11118         << DeclName
11119         << getDeletedOrUnavailableSuffix(Best->Function)
11120         << MemExprE->getSourceRange();
11121       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11122       // FIXME: Leaking incoming expressions!
11123       return ExprError();
11124     }
11125 
11126     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
11127 
11128     // If overload resolution picked a static member, build a
11129     // non-member call based on that function.
11130     if (Method->isStatic()) {
11131       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, Args,
11132                                    RParenLoc);
11133     }
11134 
11135     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
11136   }
11137 
11138   QualType ResultType = Method->getResultType();
11139   ExprValueKind VK = Expr::getValueKindForType(ResultType);
11140   ResultType = ResultType.getNonLValueExprType(Context);
11141 
11142   assert(Method && "Member call to something that isn't a method?");
11143   CXXMemberCallExpr *TheCall =
11144     new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
11145                                     ResultType, VK, RParenLoc);
11146 
11147   // Check for a valid return type.
11148   if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
11149                           TheCall, Method))
11150     return ExprError();
11151 
11152   // Convert the object argument (for a non-static member function call).
11153   // We only need to do this if there was actually an overload; otherwise
11154   // it was done at lookup.
11155   if (!Method->isStatic()) {
11156     ExprResult ObjectArg =
11157       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
11158                                           FoundDecl, Method);
11159     if (ObjectArg.isInvalid())
11160       return ExprError();
11161     MemExpr->setBase(ObjectArg.take());
11162   }
11163 
11164   // Convert the rest of the arguments
11165   const FunctionProtoType *Proto =
11166     Method->getType()->getAs<FunctionProtoType>();
11167   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args,
11168                               RParenLoc))
11169     return ExprError();
11170 
11171   DiagnoseSentinelCalls(Method, LParenLoc, Args);
11172 
11173   if (CheckFunctionCall(Method, TheCall, Proto))
11174     return ExprError();
11175 
11176   if ((isa<CXXConstructorDecl>(CurContext) ||
11177        isa<CXXDestructorDecl>(CurContext)) &&
11178       TheCall->getMethodDecl()->isPure()) {
11179     const CXXMethodDecl *MD = TheCall->getMethodDecl();
11180 
11181     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
11182       Diag(MemExpr->getLocStart(),
11183            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
11184         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
11185         << MD->getParent()->getDeclName();
11186 
11187       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
11188     }
11189   }
11190   return MaybeBindToTemporary(TheCall);
11191 }
11192 
11193 /// BuildCallToObjectOfClassType - Build a call to an object of class
11194 /// type (C++ [over.call.object]), which can end up invoking an
11195 /// overloaded function call operator (@c operator()) or performing a
11196 /// user-defined conversion on the object argument.
11197 ExprResult
11198 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
11199                                    SourceLocation LParenLoc,
11200                                    MultiExprArg Args,
11201                                    SourceLocation RParenLoc) {
11202   if (checkPlaceholderForOverload(*this, Obj))
11203     return ExprError();
11204   ExprResult Object = Owned(Obj);
11205 
11206   UnbridgedCastsSet UnbridgedCasts;
11207   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
11208     return ExprError();
11209 
11210   assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
11211   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
11212 
11213   // C++ [over.call.object]p1:
11214   //  If the primary-expression E in the function call syntax
11215   //  evaluates to a class object of type "cv T", then the set of
11216   //  candidate functions includes at least the function call
11217   //  operators of T. The function call operators of T are obtained by
11218   //  ordinary lookup of the name operator() in the context of
11219   //  (E).operator().
11220   OverloadCandidateSet CandidateSet(LParenLoc);
11221   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
11222 
11223   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
11224                           diag::err_incomplete_object_call, Object.get()))
11225     return true;
11226 
11227   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
11228   LookupQualifiedName(R, Record->getDecl());
11229   R.suppressDiagnostics();
11230 
11231   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11232        Oper != OperEnd; ++Oper) {
11233     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
11234                        Object.get()->Classify(Context),
11235                        Args, CandidateSet,
11236                        /*SuppressUserConversions=*/ false);
11237   }
11238 
11239   // C++ [over.call.object]p2:
11240   //   In addition, for each (non-explicit in C++0x) conversion function
11241   //   declared in T of the form
11242   //
11243   //        operator conversion-type-id () cv-qualifier;
11244   //
11245   //   where cv-qualifier is the same cv-qualification as, or a
11246   //   greater cv-qualification than, cv, and where conversion-type-id
11247   //   denotes the type "pointer to function of (P1,...,Pn) returning
11248   //   R", or the type "reference to pointer to function of
11249   //   (P1,...,Pn) returning R", or the type "reference to function
11250   //   of (P1,...,Pn) returning R", a surrogate call function [...]
11251   //   is also considered as a candidate function. Similarly,
11252   //   surrogate call functions are added to the set of candidate
11253   //   functions for each conversion function declared in an
11254   //   accessible base class provided the function is not hidden
11255   //   within T by another intervening declaration.
11256   std::pair<CXXRecordDecl::conversion_iterator,
11257             CXXRecordDecl::conversion_iterator> Conversions
11258     = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
11259   for (CXXRecordDecl::conversion_iterator
11260          I = Conversions.first, E = Conversions.second; I != E; ++I) {
11261     NamedDecl *D = *I;
11262     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
11263     if (isa<UsingShadowDecl>(D))
11264       D = cast<UsingShadowDecl>(D)->getTargetDecl();
11265 
11266     // Skip over templated conversion functions; they aren't
11267     // surrogates.
11268     if (isa<FunctionTemplateDecl>(D))
11269       continue;
11270 
11271     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
11272     if (!Conv->isExplicit()) {
11273       // Strip the reference type (if any) and then the pointer type (if
11274       // any) to get down to what might be a function type.
11275       QualType ConvType = Conv->getConversionType().getNonReferenceType();
11276       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
11277         ConvType = ConvPtrType->getPointeeType();
11278 
11279       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
11280       {
11281         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
11282                               Object.get(), Args, CandidateSet);
11283       }
11284     }
11285   }
11286 
11287   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11288 
11289   // Perform overload resolution.
11290   OverloadCandidateSet::iterator Best;
11291   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
11292                              Best)) {
11293   case OR_Success:
11294     // Overload resolution succeeded; we'll build the appropriate call
11295     // below.
11296     break;
11297 
11298   case OR_No_Viable_Function:
11299     if (CandidateSet.empty())
11300       Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
11301         << Object.get()->getType() << /*call*/ 1
11302         << Object.get()->getSourceRange();
11303     else
11304       Diag(Object.get()->getLocStart(),
11305            diag::err_ovl_no_viable_object_call)
11306         << Object.get()->getType() << Object.get()->getSourceRange();
11307     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11308     break;
11309 
11310   case OR_Ambiguous:
11311     Diag(Object.get()->getLocStart(),
11312          diag::err_ovl_ambiguous_object_call)
11313       << Object.get()->getType() << Object.get()->getSourceRange();
11314     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11315     break;
11316 
11317   case OR_Deleted:
11318     Diag(Object.get()->getLocStart(),
11319          diag::err_ovl_deleted_object_call)
11320       << Best->Function->isDeleted()
11321       << Object.get()->getType()
11322       << getDeletedOrUnavailableSuffix(Best->Function)
11323       << Object.get()->getSourceRange();
11324     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11325     break;
11326   }
11327 
11328   if (Best == CandidateSet.end())
11329     return true;
11330 
11331   UnbridgedCasts.restore();
11332 
11333   if (Best->Function == 0) {
11334     // Since there is no function declaration, this is one of the
11335     // surrogate candidates. Dig out the conversion function.
11336     CXXConversionDecl *Conv
11337       = cast<CXXConversionDecl>(
11338                          Best->Conversions[0].UserDefined.ConversionFunction);
11339 
11340     CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11341     if (DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc))
11342       return ExprError();
11343     assert(Conv == Best->FoundDecl.getDecl() &&
11344              "Found Decl & conversion-to-functionptr should be same, right?!");
11345     // We selected one of the surrogate functions that converts the
11346     // object parameter to a function pointer. Perform the conversion
11347     // on the object argument, then let ActOnCallExpr finish the job.
11348 
11349     // Create an implicit member expr to refer to the conversion operator.
11350     // and then call it.
11351     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
11352                                              Conv, HadMultipleCandidates);
11353     if (Call.isInvalid())
11354       return ExprError();
11355     // Record usage of conversion in an implicit cast.
11356     Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
11357                                           CK_UserDefinedConversion,
11358                                           Call.get(), 0, VK_RValue));
11359 
11360     return ActOnCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc);
11361   }
11362 
11363   CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11364 
11365   // We found an overloaded operator(). Build a CXXOperatorCallExpr
11366   // that calls this method, using Object for the implicit object
11367   // parameter and passing along the remaining arguments.
11368   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11369 
11370   // An error diagnostic has already been printed when parsing the declaration.
11371   if (Method->isInvalidDecl())
11372     return ExprError();
11373 
11374   const FunctionProtoType *Proto =
11375     Method->getType()->getAs<FunctionProtoType>();
11376 
11377   unsigned NumArgsInProto = Proto->getNumArgs();
11378   unsigned NumArgsToCheck = Args.size();
11379 
11380   // Build the full argument list for the method call (the
11381   // implicit object parameter is placed at the beginning of the
11382   // list).
11383   Expr **MethodArgs;
11384   if (Args.size() < NumArgsInProto) {
11385     NumArgsToCheck = NumArgsInProto;
11386     MethodArgs = new Expr*[NumArgsInProto + 1];
11387   } else {
11388     MethodArgs = new Expr*[Args.size() + 1];
11389   }
11390   MethodArgs[0] = Object.get();
11391   for (unsigned ArgIdx = 0, e = Args.size(); ArgIdx != e; ++ArgIdx)
11392     MethodArgs[ArgIdx + 1] = Args[ArgIdx];
11393 
11394   DeclarationNameInfo OpLocInfo(
11395                Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
11396   OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
11397   ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11398                                            HadMultipleCandidates,
11399                                            OpLocInfo.getLoc(),
11400                                            OpLocInfo.getInfo());
11401   if (NewFn.isInvalid())
11402     return true;
11403 
11404   // Once we've built TheCall, all of the expressions are properly
11405   // owned.
11406   QualType ResultTy = Method->getResultType();
11407   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11408   ResultTy = ResultTy.getNonLValueExprType(Context);
11409 
11410   CXXOperatorCallExpr *TheCall =
11411     new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
11412                                       llvm::makeArrayRef(MethodArgs, Args.size()+1),
11413                                       ResultTy, VK, RParenLoc, false);
11414   delete [] MethodArgs;
11415 
11416   if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
11417                           Method))
11418     return true;
11419 
11420   // We may have default arguments. If so, we need to allocate more
11421   // slots in the call for them.
11422   if (Args.size() < NumArgsInProto)
11423     TheCall->setNumArgs(Context, NumArgsInProto + 1);
11424   else if (Args.size() > NumArgsInProto)
11425     NumArgsToCheck = NumArgsInProto;
11426 
11427   bool IsError = false;
11428 
11429   // Initialize the implicit object parameter.
11430   ExprResult ObjRes =
11431     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11432                                         Best->FoundDecl, Method);
11433   if (ObjRes.isInvalid())
11434     IsError = true;
11435   else
11436     Object = ObjRes;
11437   TheCall->setArg(0, Object.take());
11438 
11439   // Check the argument types.
11440   for (unsigned i = 0; i != NumArgsToCheck; i++) {
11441     Expr *Arg;
11442     if (i < Args.size()) {
11443       Arg = Args[i];
11444 
11445       // Pass the argument.
11446 
11447       ExprResult InputInit
11448         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11449                                                     Context,
11450                                                     Method->getParamDecl(i)),
11451                                     SourceLocation(), Arg);
11452 
11453       IsError |= InputInit.isInvalid();
11454       Arg = InputInit.takeAs<Expr>();
11455     } else {
11456       ExprResult DefArg
11457         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11458       if (DefArg.isInvalid()) {
11459         IsError = true;
11460         break;
11461       }
11462 
11463       Arg = DefArg.takeAs<Expr>();
11464     }
11465 
11466     TheCall->setArg(i + 1, Arg);
11467   }
11468 
11469   // If this is a variadic call, handle args passed through "...".
11470   if (Proto->isVariadic()) {
11471     // Promote the arguments (C99 6.5.2.2p7).
11472     for (unsigned i = NumArgsInProto, e = Args.size(); i < e; i++) {
11473       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11474       IsError |= Arg.isInvalid();
11475       TheCall->setArg(i + 1, Arg.take());
11476     }
11477   }
11478 
11479   if (IsError) return true;
11480 
11481   DiagnoseSentinelCalls(Method, LParenLoc, Args);
11482 
11483   if (CheckFunctionCall(Method, TheCall, Proto))
11484     return true;
11485 
11486   return MaybeBindToTemporary(TheCall);
11487 }
11488 
11489 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11490 ///  (if one exists), where @c Base is an expression of class type and
11491 /// @c Member is the name of the member we're trying to find.
11492 ExprResult
11493 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
11494                                bool *NoArrowOperatorFound) {
11495   assert(Base->getType()->isRecordType() &&
11496          "left-hand side must have class type");
11497 
11498   if (checkPlaceholderForOverload(*this, Base))
11499     return ExprError();
11500 
11501   SourceLocation Loc = Base->getExprLoc();
11502 
11503   // C++ [over.ref]p1:
11504   //
11505   //   [...] An expression x->m is interpreted as (x.operator->())->m
11506   //   for a class object x of type T if T::operator->() exists and if
11507   //   the operator is selected as the best match function by the
11508   //   overload resolution mechanism (13.3).
11509   DeclarationName OpName =
11510     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11511   OverloadCandidateSet CandidateSet(Loc);
11512   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11513 
11514   if (RequireCompleteType(Loc, Base->getType(),
11515                           diag::err_typecheck_incomplete_tag, Base))
11516     return ExprError();
11517 
11518   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11519   LookupQualifiedName(R, BaseRecord->getDecl());
11520   R.suppressDiagnostics();
11521 
11522   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11523        Oper != OperEnd; ++Oper) {
11524     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11525                        None, CandidateSet, /*SuppressUserConversions=*/false);
11526   }
11527 
11528   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11529 
11530   // Perform overload resolution.
11531   OverloadCandidateSet::iterator Best;
11532   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11533   case OR_Success:
11534     // Overload resolution succeeded; we'll build the call below.
11535     break;
11536 
11537   case OR_No_Viable_Function:
11538     if (CandidateSet.empty()) {
11539       QualType BaseType = Base->getType();
11540       if (NoArrowOperatorFound) {
11541         // Report this specific error to the caller instead of emitting a
11542         // diagnostic, as requested.
11543         *NoArrowOperatorFound = true;
11544         return ExprError();
11545       }
11546       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11547         << BaseType << Base->getSourceRange();
11548       if (BaseType->isRecordType() && !BaseType->isPointerType()) {
11549         Diag(OpLoc, diag::note_typecheck_member_reference_suggestion)
11550           << FixItHint::CreateReplacement(OpLoc, ".");
11551       }
11552     } else
11553       Diag(OpLoc, diag::err_ovl_no_viable_oper)
11554         << "operator->" << Base->getSourceRange();
11555     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11556     return ExprError();
11557 
11558   case OR_Ambiguous:
11559     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11560       << "->" << Base->getType() << Base->getSourceRange();
11561     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11562     return ExprError();
11563 
11564   case OR_Deleted:
11565     Diag(OpLoc,  diag::err_ovl_deleted_oper)
11566       << Best->Function->isDeleted()
11567       << "->"
11568       << getDeletedOrUnavailableSuffix(Best->Function)
11569       << Base->getSourceRange();
11570     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11571     return ExprError();
11572   }
11573 
11574   CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11575 
11576   // Convert the object parameter.
11577   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11578   ExprResult BaseResult =
11579     PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11580                                         Best->FoundDecl, Method);
11581   if (BaseResult.isInvalid())
11582     return ExprError();
11583   Base = BaseResult.take();
11584 
11585   // Build the operator call.
11586   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11587                                             HadMultipleCandidates, OpLoc);
11588   if (FnExpr.isInvalid())
11589     return ExprError();
11590 
11591   QualType ResultTy = Method->getResultType();
11592   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11593   ResultTy = ResultTy.getNonLValueExprType(Context);
11594   CXXOperatorCallExpr *TheCall =
11595     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11596                                       Base, ResultTy, VK, OpLoc, false);
11597 
11598   if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11599                           Method))
11600           return ExprError();
11601 
11602   return MaybeBindToTemporary(TheCall);
11603 }
11604 
11605 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11606 /// a literal operator described by the provided lookup results.
11607 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11608                                           DeclarationNameInfo &SuffixInfo,
11609                                           ArrayRef<Expr*> Args,
11610                                           SourceLocation LitEndLoc,
11611                                        TemplateArgumentListInfo *TemplateArgs) {
11612   SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11613 
11614   OverloadCandidateSet CandidateSet(UDSuffixLoc);
11615   AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11616                         TemplateArgs);
11617 
11618   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11619 
11620   // Perform overload resolution. This will usually be trivial, but might need
11621   // to perform substitutions for a literal operator template.
11622   OverloadCandidateSet::iterator Best;
11623   switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11624   case OR_Success:
11625   case OR_Deleted:
11626     break;
11627 
11628   case OR_No_Viable_Function:
11629     Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11630       << R.getLookupName();
11631     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11632     return ExprError();
11633 
11634   case OR_Ambiguous:
11635     Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11636     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11637     return ExprError();
11638   }
11639 
11640   FunctionDecl *FD = Best->Function;
11641   ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
11642                                         HadMultipleCandidates,
11643                                         SuffixInfo.getLoc(),
11644                                         SuffixInfo.getInfo());
11645   if (Fn.isInvalid())
11646     return true;
11647 
11648   // Check the argument types. This should almost always be a no-op, except
11649   // that array-to-pointer decay is applied to string literals.
11650   Expr *ConvArgs[2];
11651   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
11652     ExprResult InputInit = PerformCopyInitialization(
11653       InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11654       SourceLocation(), Args[ArgIdx]);
11655     if (InputInit.isInvalid())
11656       return true;
11657     ConvArgs[ArgIdx] = InputInit.take();
11658   }
11659 
11660   QualType ResultTy = FD->getResultType();
11661   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11662   ResultTy = ResultTy.getNonLValueExprType(Context);
11663 
11664   UserDefinedLiteral *UDL =
11665     new (Context) UserDefinedLiteral(Context, Fn.take(),
11666                                      llvm::makeArrayRef(ConvArgs, Args.size()),
11667                                      ResultTy, VK, LitEndLoc, UDSuffixLoc);
11668 
11669   if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11670     return ExprError();
11671 
11672   if (CheckFunctionCall(FD, UDL, NULL))
11673     return ExprError();
11674 
11675   return MaybeBindToTemporary(UDL);
11676 }
11677 
11678 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11679 /// given LookupResult is non-empty, it is assumed to describe a member which
11680 /// will be invoked. Otherwise, the function will be found via argument
11681 /// dependent lookup.
11682 /// CallExpr is set to a valid expression and FRS_Success returned on success,
11683 /// otherwise CallExpr is set to ExprError() and some non-success value
11684 /// is returned.
11685 Sema::ForRangeStatus
11686 Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11687                                 SourceLocation RangeLoc, VarDecl *Decl,
11688                                 BeginEndFunction BEF,
11689                                 const DeclarationNameInfo &NameInfo,
11690                                 LookupResult &MemberLookup,
11691                                 OverloadCandidateSet *CandidateSet,
11692                                 Expr *Range, ExprResult *CallExpr) {
11693   CandidateSet->clear();
11694   if (!MemberLookup.empty()) {
11695     ExprResult MemberRef =
11696         BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11697                                  /*IsPtr=*/false, CXXScopeSpec(),
11698                                  /*TemplateKWLoc=*/SourceLocation(),
11699                                  /*FirstQualifierInScope=*/0,
11700                                  MemberLookup,
11701                                  /*TemplateArgs=*/0);
11702     if (MemberRef.isInvalid()) {
11703       *CallExpr = ExprError();
11704       Diag(Range->getLocStart(), diag::note_in_for_range)
11705           << RangeLoc << BEF << Range->getType();
11706       return FRS_DiagnosticIssued;
11707     }
11708     *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, None, Loc, 0);
11709     if (CallExpr->isInvalid()) {
11710       *CallExpr = ExprError();
11711       Diag(Range->getLocStart(), diag::note_in_for_range)
11712           << RangeLoc << BEF << Range->getType();
11713       return FRS_DiagnosticIssued;
11714     }
11715   } else {
11716     UnresolvedSet<0> FoundNames;
11717     UnresolvedLookupExpr *Fn =
11718       UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11719                                    NestedNameSpecifierLoc(), NameInfo,
11720                                    /*NeedsADL=*/true, /*Overloaded=*/false,
11721                                    FoundNames.begin(), FoundNames.end());
11722 
11723     bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, Range, Loc,
11724                                                     CandidateSet, CallExpr);
11725     if (CandidateSet->empty() || CandidateSetError) {
11726       *CallExpr = ExprError();
11727       return FRS_NoViableFunction;
11728     }
11729     OverloadCandidateSet::iterator Best;
11730     OverloadingResult OverloadResult =
11731         CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11732 
11733     if (OverloadResult == OR_No_Viable_Function) {
11734       *CallExpr = ExprError();
11735       return FRS_NoViableFunction;
11736     }
11737     *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, Range,
11738                                          Loc, 0, CandidateSet, &Best,
11739                                          OverloadResult,
11740                                          /*AllowTypoCorrection=*/false);
11741     if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11742       *CallExpr = ExprError();
11743       Diag(Range->getLocStart(), diag::note_in_for_range)
11744           << RangeLoc << BEF << Range->getType();
11745       return FRS_DiagnosticIssued;
11746     }
11747   }
11748   return FRS_Success;
11749 }
11750 
11751 
11752 /// FixOverloadedFunctionReference - E is an expression that refers to
11753 /// a C++ overloaded function (possibly with some parentheses and
11754 /// perhaps a '&' around it). We have resolved the overloaded function
11755 /// to the function declaration Fn, so patch up the expression E to
11756 /// refer (possibly indirectly) to Fn. Returns the new expr.
11757 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11758                                            FunctionDecl *Fn) {
11759   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11760     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11761                                                    Found, Fn);
11762     if (SubExpr == PE->getSubExpr())
11763       return PE;
11764 
11765     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11766   }
11767 
11768   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11769     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11770                                                    Found, Fn);
11771     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11772                                SubExpr->getType()) &&
11773            "Implicit cast type cannot be determined from overload");
11774     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11775     if (SubExpr == ICE->getSubExpr())
11776       return ICE;
11777 
11778     return ImplicitCastExpr::Create(Context, ICE->getType(),
11779                                     ICE->getCastKind(),
11780                                     SubExpr, 0,
11781                                     ICE->getValueKind());
11782   }
11783 
11784   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11785     assert(UnOp->getOpcode() == UO_AddrOf &&
11786            "Can only take the address of an overloaded function");
11787     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11788       if (Method->isStatic()) {
11789         // Do nothing: static member functions aren't any different
11790         // from non-member functions.
11791       } else {
11792         // Fix the sub expression, which really has to be an
11793         // UnresolvedLookupExpr holding an overloaded member function
11794         // or template.
11795         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11796                                                        Found, Fn);
11797         if (SubExpr == UnOp->getSubExpr())
11798           return UnOp;
11799 
11800         assert(isa<DeclRefExpr>(SubExpr)
11801                && "fixed to something other than a decl ref");
11802         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11803                && "fixed to a member ref with no nested name qualifier");
11804 
11805         // We have taken the address of a pointer to member
11806         // function. Perform the computation here so that we get the
11807         // appropriate pointer to member type.
11808         QualType ClassType
11809           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11810         QualType MemPtrType
11811           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11812 
11813         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11814                                            VK_RValue, OK_Ordinary,
11815                                            UnOp->getOperatorLoc());
11816       }
11817     }
11818     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11819                                                    Found, Fn);
11820     if (SubExpr == UnOp->getSubExpr())
11821       return UnOp;
11822 
11823     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11824                                      Context.getPointerType(SubExpr->getType()),
11825                                        VK_RValue, OK_Ordinary,
11826                                        UnOp->getOperatorLoc());
11827   }
11828 
11829   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11830     // FIXME: avoid copy.
11831     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11832     if (ULE->hasExplicitTemplateArgs()) {
11833       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11834       TemplateArgs = &TemplateArgsBuffer;
11835     }
11836 
11837     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11838                                            ULE->getQualifierLoc(),
11839                                            ULE->getTemplateKeywordLoc(),
11840                                            Fn,
11841                                            /*enclosing*/ false, // FIXME?
11842                                            ULE->getNameLoc(),
11843                                            Fn->getType(),
11844                                            VK_LValue,
11845                                            Found.getDecl(),
11846                                            TemplateArgs);
11847     MarkDeclRefReferenced(DRE);
11848     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11849     return DRE;
11850   }
11851 
11852   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11853     // FIXME: avoid copy.
11854     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11855     if (MemExpr->hasExplicitTemplateArgs()) {
11856       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11857       TemplateArgs = &TemplateArgsBuffer;
11858     }
11859 
11860     Expr *Base;
11861 
11862     // If we're filling in a static method where we used to have an
11863     // implicit member access, rewrite to a simple decl ref.
11864     if (MemExpr->isImplicitAccess()) {
11865       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11866         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11867                                                MemExpr->getQualifierLoc(),
11868                                                MemExpr->getTemplateKeywordLoc(),
11869                                                Fn,
11870                                                /*enclosing*/ false,
11871                                                MemExpr->getMemberLoc(),
11872                                                Fn->getType(),
11873                                                VK_LValue,
11874                                                Found.getDecl(),
11875                                                TemplateArgs);
11876         MarkDeclRefReferenced(DRE);
11877         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11878         return DRE;
11879       } else {
11880         SourceLocation Loc = MemExpr->getMemberLoc();
11881         if (MemExpr->getQualifier())
11882           Loc = MemExpr->getQualifierLoc().getBeginLoc();
11883         CheckCXXThisCapture(Loc);
11884         Base = new (Context) CXXThisExpr(Loc,
11885                                          MemExpr->getBaseType(),
11886                                          /*isImplicit=*/true);
11887       }
11888     } else
11889       Base = MemExpr->getBase();
11890 
11891     ExprValueKind valueKind;
11892     QualType type;
11893     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11894       valueKind = VK_LValue;
11895       type = Fn->getType();
11896     } else {
11897       valueKind = VK_RValue;
11898       type = Context.BoundMemberTy;
11899     }
11900 
11901     MemberExpr *ME = MemberExpr::Create(Context, Base,
11902                                         MemExpr->isArrow(),
11903                                         MemExpr->getQualifierLoc(),
11904                                         MemExpr->getTemplateKeywordLoc(),
11905                                         Fn,
11906                                         Found,
11907                                         MemExpr->getMemberNameInfo(),
11908                                         TemplateArgs,
11909                                         type, valueKind, OK_Ordinary);
11910     ME->setHadMultipleCandidates(true);
11911     MarkMemberReferenced(ME);
11912     return ME;
11913   }
11914 
11915   llvm_unreachable("Invalid reference to overloaded function");
11916 }
11917 
11918 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11919                                                 DeclAccessPair Found,
11920                                                 FunctionDecl *Fn) {
11921   return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11922 }
11923 
11924 } // end namespace clang
11925