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 OverloadCandidate::DeductionFailureInfo to store
552   // template argument information.
553   struct DFIArguments {
554     TemplateArgument FirstArg;
555     TemplateArgument SecondArg;
556   };
557   // Structure used by OverloadCandidate::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 OverloadCandidate::DeductionFailureInfo
567 static MakeDeductionFailureInfo(ASTContext &Context,
568                                 Sema::TemplateDeductionResult TDK,
569                                 TemplateDeductionInfo &Info) {
570   OverloadCandidate::DeductionFailureInfo Result;
571   Result.Result = static_cast<unsigned>(TDK);
572   Result.HasDiagnostic = false;
573   Result.Data = 0;
574   switch (TDK) {
575   case Sema::TDK_Success:
576   case Sema::TDK_Invalid:
577   case Sema::TDK_InstantiationDepth:
578   case Sema::TDK_TooManyArguments:
579   case Sema::TDK_TooFewArguments:
580     break;
581 
582   case Sema::TDK_Incomplete:
583   case Sema::TDK_InvalidExplicitArguments:
584     Result.Data = Info.Param.getOpaqueValue();
585     break;
586 
587   case Sema::TDK_NonDeducedMismatch: {
588     // FIXME: Should allocate from normal heap so that we can free this later.
589     DFIArguments *Saved = new (Context) DFIArguments;
590     Saved->FirstArg = Info.FirstArg;
591     Saved->SecondArg = Info.SecondArg;
592     Result.Data = Saved;
593     break;
594   }
595 
596   case Sema::TDK_Inconsistent:
597   case Sema::TDK_Underqualified: {
598     // FIXME: Should allocate from normal heap so that we can free this later.
599     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
600     Saved->Param = Info.Param;
601     Saved->FirstArg = Info.FirstArg;
602     Saved->SecondArg = Info.SecondArg;
603     Result.Data = Saved;
604     break;
605   }
606 
607   case Sema::TDK_SubstitutionFailure:
608     Result.Data = Info.take();
609     if (Info.hasSFINAEDiagnostic()) {
610       PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
611           SourceLocation(), PartialDiagnostic::NullDiagnostic());
612       Info.takeSFINAEDiagnostic(*Diag);
613       Result.HasDiagnostic = true;
614     }
615     break;
616 
617   case Sema::TDK_FailedOverloadResolution:
618     Result.Data = Info.Expression;
619     break;
620 
621   case Sema::TDK_MiscellaneousDeductionFailure:
622     break;
623   }
624 
625   return Result;
626 }
627 
628 void OverloadCandidate::DeductionFailureInfo::Destroy() {
629   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
630   case Sema::TDK_Success:
631   case Sema::TDK_Invalid:
632   case Sema::TDK_InstantiationDepth:
633   case Sema::TDK_Incomplete:
634   case Sema::TDK_TooManyArguments:
635   case Sema::TDK_TooFewArguments:
636   case Sema::TDK_InvalidExplicitArguments:
637   case Sema::TDK_FailedOverloadResolution:
638     break;
639 
640   case Sema::TDK_Inconsistent:
641   case Sema::TDK_Underqualified:
642   case Sema::TDK_NonDeducedMismatch:
643     // FIXME: Destroy the data?
644     Data = 0;
645     break;
646 
647   case Sema::TDK_SubstitutionFailure:
648     // FIXME: Destroy the template argument list?
649     Data = 0;
650     if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
651       Diag->~PartialDiagnosticAt();
652       HasDiagnostic = false;
653     }
654     break;
655 
656   // Unhandled
657   case Sema::TDK_MiscellaneousDeductionFailure:
658     break;
659   }
660 }
661 
662 PartialDiagnosticAt *
663 OverloadCandidate::DeductionFailureInfo::getSFINAEDiagnostic() {
664   if (HasDiagnostic)
665     return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
666   return 0;
667 }
668 
669 TemplateParameter
670 OverloadCandidate::DeductionFailureInfo::getTemplateParameter() {
671   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
672   case Sema::TDK_Success:
673   case Sema::TDK_Invalid:
674   case Sema::TDK_InstantiationDepth:
675   case Sema::TDK_TooManyArguments:
676   case Sema::TDK_TooFewArguments:
677   case Sema::TDK_SubstitutionFailure:
678   case Sema::TDK_NonDeducedMismatch:
679   case Sema::TDK_FailedOverloadResolution:
680     return TemplateParameter();
681 
682   case Sema::TDK_Incomplete:
683   case Sema::TDK_InvalidExplicitArguments:
684     return TemplateParameter::getFromOpaqueValue(Data);
685 
686   case Sema::TDK_Inconsistent:
687   case Sema::TDK_Underqualified:
688     return static_cast<DFIParamWithArguments*>(Data)->Param;
689 
690   // Unhandled
691   case Sema::TDK_MiscellaneousDeductionFailure:
692     break;
693   }
694 
695   return TemplateParameter();
696 }
697 
698 TemplateArgumentList *
699 OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() {
700   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
701   case Sema::TDK_Success:
702   case Sema::TDK_Invalid:
703   case Sema::TDK_InstantiationDepth:
704   case Sema::TDK_TooManyArguments:
705   case Sema::TDK_TooFewArguments:
706   case Sema::TDK_Incomplete:
707   case Sema::TDK_InvalidExplicitArguments:
708   case Sema::TDK_Inconsistent:
709   case Sema::TDK_Underqualified:
710   case Sema::TDK_NonDeducedMismatch:
711   case Sema::TDK_FailedOverloadResolution:
712     return 0;
713 
714   case Sema::TDK_SubstitutionFailure:
715     return static_cast<TemplateArgumentList*>(Data);
716 
717   // Unhandled
718   case Sema::TDK_MiscellaneousDeductionFailure:
719     break;
720   }
721 
722   return 0;
723 }
724 
725 const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() {
726   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
727   case Sema::TDK_Success:
728   case Sema::TDK_Invalid:
729   case Sema::TDK_InstantiationDepth:
730   case Sema::TDK_Incomplete:
731   case Sema::TDK_TooManyArguments:
732   case Sema::TDK_TooFewArguments:
733   case Sema::TDK_InvalidExplicitArguments:
734   case Sema::TDK_SubstitutionFailure:
735   case Sema::TDK_FailedOverloadResolution:
736     return 0;
737 
738   case Sema::TDK_Inconsistent:
739   case Sema::TDK_Underqualified:
740   case Sema::TDK_NonDeducedMismatch:
741     return &static_cast<DFIArguments*>(Data)->FirstArg;
742 
743   // Unhandled
744   case Sema::TDK_MiscellaneousDeductionFailure:
745     break;
746   }
747 
748   return 0;
749 }
750 
751 const TemplateArgument *
752 OverloadCandidate::DeductionFailureInfo::getSecondArg() {
753   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
754   case Sema::TDK_Success:
755   case Sema::TDK_Invalid:
756   case Sema::TDK_InstantiationDepth:
757   case Sema::TDK_Incomplete:
758   case Sema::TDK_TooManyArguments:
759   case Sema::TDK_TooFewArguments:
760   case Sema::TDK_InvalidExplicitArguments:
761   case Sema::TDK_SubstitutionFailure:
762   case Sema::TDK_FailedOverloadResolution:
763     return 0;
764 
765   case Sema::TDK_Inconsistent:
766   case Sema::TDK_Underqualified:
767   case Sema::TDK_NonDeducedMismatch:
768     return &static_cast<DFIArguments*>(Data)->SecondArg;
769 
770   // Unhandled
771   case Sema::TDK_MiscellaneousDeductionFailure:
772     break;
773   }
774 
775   return 0;
776 }
777 
778 Expr *
779 OverloadCandidate::DeductionFailureInfo::getExpr() {
780   if (static_cast<Sema::TemplateDeductionResult>(Result) ==
781         Sema::TDK_FailedOverloadResolution)
782     return static_cast<Expr*>(Data);
783 
784   return 0;
785 }
786 
787 void OverloadCandidateSet::destroyCandidates() {
788   for (iterator i = begin(), e = end(); i != e; ++i) {
789     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
790       i->Conversions[ii].~ImplicitConversionSequence();
791     if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
792       i->DeductionFailure.Destroy();
793   }
794 }
795 
796 void OverloadCandidateSet::clear() {
797   destroyCandidates();
798   NumInlineSequences = 0;
799   Candidates.clear();
800   Functions.clear();
801 }
802 
803 namespace {
804   class UnbridgedCastsSet {
805     struct Entry {
806       Expr **Addr;
807       Expr *Saved;
808     };
809     SmallVector<Entry, 2> Entries;
810 
811   public:
812     void save(Sema &S, Expr *&E) {
813       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
814       Entry entry = { &E, E };
815       Entries.push_back(entry);
816       E = S.stripARCUnbridgedCast(E);
817     }
818 
819     void restore() {
820       for (SmallVectorImpl<Entry>::iterator
821              i = Entries.begin(), e = Entries.end(); i != e; ++i)
822         *i->Addr = i->Saved;
823     }
824   };
825 }
826 
827 /// checkPlaceholderForOverload - Do any interesting placeholder-like
828 /// preprocessing on the given expression.
829 ///
830 /// \param unbridgedCasts a collection to which to add unbridged casts;
831 ///   without this, they will be immediately diagnosed as errors
832 ///
833 /// Return true on unrecoverable error.
834 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
835                                         UnbridgedCastsSet *unbridgedCasts = 0) {
836   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
837     // We can't handle overloaded expressions here because overload
838     // resolution might reasonably tweak them.
839     if (placeholder->getKind() == BuiltinType::Overload) return false;
840 
841     // If the context potentially accepts unbridged ARC casts, strip
842     // the unbridged cast and add it to the collection for later restoration.
843     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
844         unbridgedCasts) {
845       unbridgedCasts->save(S, E);
846       return false;
847     }
848 
849     // Go ahead and check everything else.
850     ExprResult result = S.CheckPlaceholderExpr(E);
851     if (result.isInvalid())
852       return true;
853 
854     E = result.take();
855     return false;
856   }
857 
858   // Nothing to do.
859   return false;
860 }
861 
862 /// checkArgPlaceholdersForOverload - Check a set of call operands for
863 /// placeholders.
864 static bool checkArgPlaceholdersForOverload(Sema &S,
865                                             MultiExprArg Args,
866                                             UnbridgedCastsSet &unbridged) {
867   for (unsigned i = 0, e = Args.size(); i != e; ++i)
868     if (checkPlaceholderForOverload(S, Args[i], &unbridged))
869       return true;
870 
871   return false;
872 }
873 
874 // IsOverload - Determine whether the given New declaration is an
875 // overload of the declarations in Old. This routine returns false if
876 // New and Old cannot be overloaded, e.g., if New has the same
877 // signature as some function in Old (C++ 1.3.10) or if the Old
878 // declarations aren't functions (or function templates) at all. When
879 // it does return false, MatchedDecl will point to the decl that New
880 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
881 // top of the underlying declaration.
882 //
883 // Example: Given the following input:
884 //
885 //   void f(int, float); // #1
886 //   void f(int, int); // #2
887 //   int f(int, int); // #3
888 //
889 // When we process #1, there is no previous declaration of "f",
890 // so IsOverload will not be used.
891 //
892 // When we process #2, Old contains only the FunctionDecl for #1.  By
893 // comparing the parameter types, we see that #1 and #2 are overloaded
894 // (since they have different signatures), so this routine returns
895 // false; MatchedDecl is unchanged.
896 //
897 // When we process #3, Old is an overload set containing #1 and #2. We
898 // compare the signatures of #3 to #1 (they're overloaded, so we do
899 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
900 // identical (return types of functions are not part of the
901 // signature), IsOverload returns false and MatchedDecl will be set to
902 // point to the FunctionDecl for #2.
903 //
904 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
905 // into a class by a using declaration.  The rules for whether to hide
906 // shadow declarations ignore some properties which otherwise figure
907 // into a function template's signature.
908 Sema::OverloadKind
909 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
910                     NamedDecl *&Match, bool NewIsUsingDecl) {
911   for (LookupResult::iterator I = Old.begin(), E = Old.end();
912          I != E; ++I) {
913     NamedDecl *OldD = *I;
914 
915     bool OldIsUsingDecl = false;
916     if (isa<UsingShadowDecl>(OldD)) {
917       OldIsUsingDecl = true;
918 
919       // We can always introduce two using declarations into the same
920       // context, even if they have identical signatures.
921       if (NewIsUsingDecl) continue;
922 
923       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
924     }
925 
926     // If either declaration was introduced by a using declaration,
927     // we'll need to use slightly different rules for matching.
928     // Essentially, these rules are the normal rules, except that
929     // function templates hide function templates with different
930     // return types or template parameter lists.
931     bool UseMemberUsingDeclRules =
932       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
933       !New->getFriendObjectKind();
934 
935     if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
936       if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
937         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
938           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
939           continue;
940         }
941 
942         Match = *I;
943         return Ovl_Match;
944       }
945     } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
946       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
947         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
948           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
949           continue;
950         }
951 
952         if (!shouldLinkPossiblyHiddenDecl(*I, New))
953           continue;
954 
955         Match = *I;
956         return Ovl_Match;
957       }
958     } else if (isa<UsingDecl>(OldD)) {
959       // We can overload with these, which can show up when doing
960       // redeclaration checks for UsingDecls.
961       assert(Old.getLookupKind() == LookupUsingDeclName);
962     } else if (isa<TagDecl>(OldD)) {
963       // We can always overload with tags by hiding them.
964     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
965       // Optimistically assume that an unresolved using decl will
966       // overload; if it doesn't, we'll have to diagnose during
967       // template instantiation.
968     } else {
969       // (C++ 13p1):
970       //   Only function declarations can be overloaded; object and type
971       //   declarations cannot be overloaded.
972       Match = *I;
973       return Ovl_NonFunction;
974     }
975   }
976 
977   return Ovl_Overload;
978 }
979 
980 static bool canBeOverloaded(const FunctionDecl &D) {
981   if (D.getAttr<OverloadableAttr>())
982     return true;
983   if (D.isExternC())
984     return false;
985 
986   // Main cannot be overloaded (basic.start.main).
987   if (D.isMain())
988     return false;
989 
990   return true;
991 }
992 
993 static bool shouldTryToOverload(Sema &S, FunctionDecl *New, FunctionDecl *Old,
994                                 bool UseUsingDeclRules) {
995   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
996   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
997 
998   // C++ [temp.fct]p2:
999   //   A function template can be overloaded with other function templates
1000   //   and with normal (non-template) functions.
1001   if ((OldTemplate == 0) != (NewTemplate == 0))
1002     return true;
1003 
1004   // Is the function New an overload of the function Old?
1005   QualType OldQType = S.Context.getCanonicalType(Old->getType());
1006   QualType NewQType = S.Context.getCanonicalType(New->getType());
1007 
1008   // Compare the signatures (C++ 1.3.10) of the two functions to
1009   // determine whether they are overloads. If we find any mismatch
1010   // in the signature, they are overloads.
1011 
1012   // If either of these functions is a K&R-style function (no
1013   // prototype), then we consider them to have matching signatures.
1014   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
1015       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
1016     return false;
1017 
1018   const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
1019   const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
1020 
1021   // The signature of a function includes the types of its
1022   // parameters (C++ 1.3.10), which includes the presence or absence
1023   // of the ellipsis; see C++ DR 357).
1024   if (OldQType != NewQType &&
1025       (OldType->getNumArgs() != NewType->getNumArgs() ||
1026        OldType->isVariadic() != NewType->isVariadic() ||
1027        !S.FunctionArgTypesAreEqual(OldType, NewType)))
1028     return true;
1029 
1030   // C++ [temp.over.link]p4:
1031   //   The signature of a function template consists of its function
1032   //   signature, its return type and its template parameter list. The names
1033   //   of the template parameters are significant only for establishing the
1034   //   relationship between the template parameters and the rest of the
1035   //   signature.
1036   //
1037   // We check the return type and template parameter lists for function
1038   // templates first; the remaining checks follow.
1039   //
1040   // However, we don't consider either of these when deciding whether
1041   // a member introduced by a shadow declaration is hidden.
1042   if (!UseUsingDeclRules && NewTemplate &&
1043       (!S.TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
1044                                          OldTemplate->getTemplateParameters(),
1045                                          false, S.TPL_TemplateMatch) ||
1046        OldType->getResultType() != NewType->getResultType()))
1047     return true;
1048 
1049   // If the function is a class member, its signature includes the
1050   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
1051   //
1052   // As part of this, also check whether one of the member functions
1053   // is static, in which case they are not overloads (C++
1054   // 13.1p2). While not part of the definition of the signature,
1055   // this check is important to determine whether these functions
1056   // can be overloaded.
1057   CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
1058   CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
1059   if (OldMethod && NewMethod &&
1060       !OldMethod->isStatic() && !NewMethod->isStatic()) {
1061     if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
1062       if (!UseUsingDeclRules &&
1063           (OldMethod->getRefQualifier() == RQ_None ||
1064            NewMethod->getRefQualifier() == RQ_None)) {
1065         // C++0x [over.load]p2:
1066         //   - Member function declarations with the same name and the same
1067         //     parameter-type-list as well as member function template
1068         //     declarations with the same name, the same parameter-type-list, and
1069         //     the same template parameter lists cannot be overloaded if any of
1070         //     them, but not all, have a ref-qualifier (8.3.5).
1071         S.Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1072           << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1073         S.Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1074       }
1075       return true;
1076     }
1077 
1078     // We may not have applied the implicit const for a constexpr member
1079     // function yet (because we haven't yet resolved whether this is a static
1080     // or non-static member function). Add it now, on the assumption that this
1081     // is a redeclaration of OldMethod.
1082     unsigned NewQuals = NewMethod->getTypeQualifiers();
1083     if (NewMethod->isConstexpr() && !isa<CXXConstructorDecl>(NewMethod))
1084       NewQuals |= Qualifiers::Const;
1085     if (OldMethod->getTypeQualifiers() != NewQuals)
1086       return true;
1087   }
1088 
1089   // The signatures match; this is not an overload.
1090   return false;
1091 }
1092 
1093 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
1094                       bool UseUsingDeclRules) {
1095   if (!shouldTryToOverload(*this, New, Old, UseUsingDeclRules))
1096     return false;
1097 
1098   // If both of the functions are extern "C", then they are not
1099   // overloads.
1100   if (!canBeOverloaded(*Old) && !canBeOverloaded(*New))
1101     return false;
1102 
1103   return true;
1104 }
1105 
1106 /// \brief Checks availability of the function depending on the current
1107 /// function context. Inside an unavailable function, unavailability is ignored.
1108 ///
1109 /// \returns true if \arg FD is unavailable and current context is inside
1110 /// an available function, false otherwise.
1111 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1112   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1113 }
1114 
1115 /// \brief Tries a user-defined conversion from From to ToType.
1116 ///
1117 /// Produces an implicit conversion sequence for when a standard conversion
1118 /// is not an option. See TryImplicitConversion for more information.
1119 static ImplicitConversionSequence
1120 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1121                          bool SuppressUserConversions,
1122                          bool AllowExplicit,
1123                          bool InOverloadResolution,
1124                          bool CStyle,
1125                          bool AllowObjCWritebackConversion) {
1126   ImplicitConversionSequence ICS;
1127 
1128   if (SuppressUserConversions) {
1129     // We're not in the case above, so there is no conversion that
1130     // we can perform.
1131     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1132     return ICS;
1133   }
1134 
1135   // Attempt user-defined conversion.
1136   OverloadCandidateSet Conversions(From->getExprLoc());
1137   OverloadingResult UserDefResult
1138     = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1139                               AllowExplicit);
1140 
1141   if (UserDefResult == OR_Success) {
1142     ICS.setUserDefined();
1143     // C++ [over.ics.user]p4:
1144     //   A conversion of an expression of class type to the same class
1145     //   type is given Exact Match rank, and a conversion of an
1146     //   expression of class type to a base class of that type is
1147     //   given Conversion rank, in spite of the fact that a copy
1148     //   constructor (i.e., a user-defined conversion function) is
1149     //   called for those cases.
1150     if (CXXConstructorDecl *Constructor
1151           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1152       QualType FromCanon
1153         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1154       QualType ToCanon
1155         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1156       if (Constructor->isCopyConstructor() &&
1157           (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1158         // Turn this into a "standard" conversion sequence, so that it
1159         // gets ranked with standard conversion sequences.
1160         ICS.setStandard();
1161         ICS.Standard.setAsIdentityConversion();
1162         ICS.Standard.setFromType(From->getType());
1163         ICS.Standard.setAllToTypes(ToType);
1164         ICS.Standard.CopyConstructor = Constructor;
1165         if (ToCanon != FromCanon)
1166           ICS.Standard.Second = ICK_Derived_To_Base;
1167       }
1168     }
1169 
1170     // C++ [over.best.ics]p4:
1171     //   However, when considering the argument of a user-defined
1172     //   conversion function that is a candidate by 13.3.1.3 when
1173     //   invoked for the copying of the temporary in the second step
1174     //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1175     //   13.3.1.6 in all cases, only standard conversion sequences and
1176     //   ellipsis conversion sequences are allowed.
1177     if (SuppressUserConversions && ICS.isUserDefined()) {
1178       ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1179     }
1180   } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1181     ICS.setAmbiguous();
1182     ICS.Ambiguous.setFromType(From->getType());
1183     ICS.Ambiguous.setToType(ToType);
1184     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1185          Cand != Conversions.end(); ++Cand)
1186       if (Cand->Viable)
1187         ICS.Ambiguous.addConversion(Cand->Function);
1188   } else {
1189     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1190   }
1191 
1192   return ICS;
1193 }
1194 
1195 /// TryImplicitConversion - Attempt to perform an implicit conversion
1196 /// from the given expression (Expr) to the given type (ToType). This
1197 /// function returns an implicit conversion sequence that can be used
1198 /// to perform the initialization. Given
1199 ///
1200 ///   void f(float f);
1201 ///   void g(int i) { f(i); }
1202 ///
1203 /// this routine would produce an implicit conversion sequence to
1204 /// describe the initialization of f from i, which will be a standard
1205 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1206 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1207 //
1208 /// Note that this routine only determines how the conversion can be
1209 /// performed; it does not actually perform the conversion. As such,
1210 /// it will not produce any diagnostics if no conversion is available,
1211 /// but will instead return an implicit conversion sequence of kind
1212 /// "BadConversion".
1213 ///
1214 /// If @p SuppressUserConversions, then user-defined conversions are
1215 /// not permitted.
1216 /// If @p AllowExplicit, then explicit user-defined conversions are
1217 /// permitted.
1218 ///
1219 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1220 /// writeback conversion, which allows __autoreleasing id* parameters to
1221 /// be initialized with __strong id* or __weak id* arguments.
1222 static ImplicitConversionSequence
1223 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1224                       bool SuppressUserConversions,
1225                       bool AllowExplicit,
1226                       bool InOverloadResolution,
1227                       bool CStyle,
1228                       bool AllowObjCWritebackConversion) {
1229   ImplicitConversionSequence ICS;
1230   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1231                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1232     ICS.setStandard();
1233     return ICS;
1234   }
1235 
1236   if (!S.getLangOpts().CPlusPlus) {
1237     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1238     return ICS;
1239   }
1240 
1241   // C++ [over.ics.user]p4:
1242   //   A conversion of an expression of class type to the same class
1243   //   type is given Exact Match rank, and a conversion of an
1244   //   expression of class type to a base class of that type is
1245   //   given Conversion rank, in spite of the fact that a copy/move
1246   //   constructor (i.e., a user-defined conversion function) is
1247   //   called for those cases.
1248   QualType FromType = From->getType();
1249   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1250       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1251        S.IsDerivedFrom(FromType, ToType))) {
1252     ICS.setStandard();
1253     ICS.Standard.setAsIdentityConversion();
1254     ICS.Standard.setFromType(FromType);
1255     ICS.Standard.setAllToTypes(ToType);
1256 
1257     // We don't actually check at this point whether there is a valid
1258     // copy/move constructor, since overloading just assumes that it
1259     // exists. When we actually perform initialization, we'll find the
1260     // appropriate constructor to copy the returned object, if needed.
1261     ICS.Standard.CopyConstructor = 0;
1262 
1263     // Determine whether this is considered a derived-to-base conversion.
1264     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1265       ICS.Standard.Second = ICK_Derived_To_Base;
1266 
1267     return ICS;
1268   }
1269 
1270   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1271                                   AllowExplicit, InOverloadResolution, CStyle,
1272                                   AllowObjCWritebackConversion);
1273 }
1274 
1275 ImplicitConversionSequence
1276 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1277                             bool SuppressUserConversions,
1278                             bool AllowExplicit,
1279                             bool InOverloadResolution,
1280                             bool CStyle,
1281                             bool AllowObjCWritebackConversion) {
1282   return clang::TryImplicitConversion(*this, From, ToType,
1283                                       SuppressUserConversions, AllowExplicit,
1284                                       InOverloadResolution, CStyle,
1285                                       AllowObjCWritebackConversion);
1286 }
1287 
1288 /// PerformImplicitConversion - Perform an implicit conversion of the
1289 /// expression From to the type ToType. Returns the
1290 /// converted expression. Flavor is the kind of conversion we're
1291 /// performing, used in the error message. If @p AllowExplicit,
1292 /// explicit user-defined conversions are permitted.
1293 ExprResult
1294 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1295                                 AssignmentAction Action, bool AllowExplicit) {
1296   ImplicitConversionSequence ICS;
1297   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1298 }
1299 
1300 ExprResult
1301 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1302                                 AssignmentAction Action, bool AllowExplicit,
1303                                 ImplicitConversionSequence& ICS) {
1304   if (checkPlaceholderForOverload(*this, From))
1305     return ExprError();
1306 
1307   // Objective-C ARC: Determine whether we will allow the writeback conversion.
1308   bool AllowObjCWritebackConversion
1309     = getLangOpts().ObjCAutoRefCount &&
1310       (Action == AA_Passing || Action == AA_Sending);
1311 
1312   ICS = clang::TryImplicitConversion(*this, From, ToType,
1313                                      /*SuppressUserConversions=*/false,
1314                                      AllowExplicit,
1315                                      /*InOverloadResolution=*/false,
1316                                      /*CStyle=*/false,
1317                                      AllowObjCWritebackConversion);
1318   return PerformImplicitConversion(From, ToType, ICS, Action);
1319 }
1320 
1321 /// \brief Determine whether the conversion from FromType to ToType is a valid
1322 /// conversion that strips "noreturn" off the nested function type.
1323 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1324                                 QualType &ResultTy) {
1325   if (Context.hasSameUnqualifiedType(FromType, ToType))
1326     return false;
1327 
1328   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1329   // where F adds one of the following at most once:
1330   //   - a pointer
1331   //   - a member pointer
1332   //   - a block pointer
1333   CanQualType CanTo = Context.getCanonicalType(ToType);
1334   CanQualType CanFrom = Context.getCanonicalType(FromType);
1335   Type::TypeClass TyClass = CanTo->getTypeClass();
1336   if (TyClass != CanFrom->getTypeClass()) return false;
1337   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1338     if (TyClass == Type::Pointer) {
1339       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1340       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1341     } else if (TyClass == Type::BlockPointer) {
1342       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1343       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1344     } else if (TyClass == Type::MemberPointer) {
1345       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1346       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1347     } else {
1348       return false;
1349     }
1350 
1351     TyClass = CanTo->getTypeClass();
1352     if (TyClass != CanFrom->getTypeClass()) return false;
1353     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1354       return false;
1355   }
1356 
1357   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1358   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1359   if (!EInfo.getNoReturn()) return false;
1360 
1361   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1362   assert(QualType(FromFn, 0).isCanonical());
1363   if (QualType(FromFn, 0) != CanTo) return false;
1364 
1365   ResultTy = ToType;
1366   return true;
1367 }
1368 
1369 /// \brief Determine whether the conversion from FromType to ToType is a valid
1370 /// vector conversion.
1371 ///
1372 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1373 /// conversion.
1374 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1375                                QualType ToType, ImplicitConversionKind &ICK) {
1376   // We need at least one of these types to be a vector type to have a vector
1377   // conversion.
1378   if (!ToType->isVectorType() && !FromType->isVectorType())
1379     return false;
1380 
1381   // Identical types require no conversions.
1382   if (Context.hasSameUnqualifiedType(FromType, ToType))
1383     return false;
1384 
1385   // There are no conversions between extended vector types, only identity.
1386   if (ToType->isExtVectorType()) {
1387     // There are no conversions between extended vector types other than the
1388     // identity conversion.
1389     if (FromType->isExtVectorType())
1390       return false;
1391 
1392     // Vector splat from any arithmetic type to a vector.
1393     if (FromType->isArithmeticType()) {
1394       ICK = ICK_Vector_Splat;
1395       return true;
1396     }
1397   }
1398 
1399   // We can perform the conversion between vector types in the following cases:
1400   // 1)vector types are equivalent AltiVec and GCC vector types
1401   // 2)lax vector conversions are permitted and the vector types are of the
1402   //   same size
1403   if (ToType->isVectorType() && FromType->isVectorType()) {
1404     if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1405         (Context.getLangOpts().LaxVectorConversions &&
1406          (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1407       ICK = ICK_Vector_Conversion;
1408       return true;
1409     }
1410   }
1411 
1412   return false;
1413 }
1414 
1415 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1416                                 bool InOverloadResolution,
1417                                 StandardConversionSequence &SCS,
1418                                 bool CStyle);
1419 
1420 /// IsStandardConversion - Determines whether there is a standard
1421 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1422 /// expression From to the type ToType. Standard conversion sequences
1423 /// only consider non-class types; for conversions that involve class
1424 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1425 /// contain the standard conversion sequence required to perform this
1426 /// conversion and this routine will return true. Otherwise, this
1427 /// routine will return false and the value of SCS is unspecified.
1428 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1429                                  bool InOverloadResolution,
1430                                  StandardConversionSequence &SCS,
1431                                  bool CStyle,
1432                                  bool AllowObjCWritebackConversion) {
1433   QualType FromType = From->getType();
1434 
1435   // Standard conversions (C++ [conv])
1436   SCS.setAsIdentityConversion();
1437   SCS.DeprecatedStringLiteralToCharPtr = false;
1438   SCS.IncompatibleObjC = false;
1439   SCS.setFromType(FromType);
1440   SCS.CopyConstructor = 0;
1441 
1442   // There are no standard conversions for class types in C++, so
1443   // abort early. When overloading in C, however, we do permit
1444   if (FromType->isRecordType() || ToType->isRecordType()) {
1445     if (S.getLangOpts().CPlusPlus)
1446       return false;
1447 
1448     // When we're overloading in C, we allow, as standard conversions,
1449   }
1450 
1451   // The first conversion can be an lvalue-to-rvalue conversion,
1452   // array-to-pointer conversion, or function-to-pointer conversion
1453   // (C++ 4p1).
1454 
1455   if (FromType == S.Context.OverloadTy) {
1456     DeclAccessPair AccessPair;
1457     if (FunctionDecl *Fn
1458           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1459                                                  AccessPair)) {
1460       // We were able to resolve the address of the overloaded function,
1461       // so we can convert to the type of that function.
1462       FromType = Fn->getType();
1463 
1464       // we can sometimes resolve &foo<int> regardless of ToType, so check
1465       // if the type matches (identity) or we are converting to bool
1466       if (!S.Context.hasSameUnqualifiedType(
1467                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1468         QualType resultTy;
1469         // if the function type matches except for [[noreturn]], it's ok
1470         if (!S.IsNoReturnConversion(FromType,
1471               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1472           // otherwise, only a boolean conversion is standard
1473           if (!ToType->isBooleanType())
1474             return false;
1475       }
1476 
1477       // Check if the "from" expression is taking the address of an overloaded
1478       // function and recompute the FromType accordingly. Take advantage of the
1479       // fact that non-static member functions *must* have such an address-of
1480       // expression.
1481       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1482       if (Method && !Method->isStatic()) {
1483         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1484                "Non-unary operator on non-static member address");
1485         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1486                == UO_AddrOf &&
1487                "Non-address-of operator on non-static member address");
1488         const Type *ClassType
1489           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1490         FromType = S.Context.getMemberPointerType(FromType, ClassType);
1491       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1492         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1493                UO_AddrOf &&
1494                "Non-address-of operator for overloaded function expression");
1495         FromType = S.Context.getPointerType(FromType);
1496       }
1497 
1498       // Check that we've computed the proper type after overload resolution.
1499       assert(S.Context.hasSameType(
1500         FromType,
1501         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1502     } else {
1503       return false;
1504     }
1505   }
1506   // Lvalue-to-rvalue conversion (C++11 4.1):
1507   //   A glvalue (3.10) of a non-function, non-array type T can
1508   //   be converted to a prvalue.
1509   bool argIsLValue = From->isGLValue();
1510   if (argIsLValue &&
1511       !FromType->isFunctionType() && !FromType->isArrayType() &&
1512       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1513     SCS.First = ICK_Lvalue_To_Rvalue;
1514 
1515     // C11 6.3.2.1p2:
1516     //   ... if the lvalue has atomic type, the value has the non-atomic version
1517     //   of the type of the lvalue ...
1518     if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1519       FromType = Atomic->getValueType();
1520 
1521     // If T is a non-class type, the type of the rvalue is the
1522     // cv-unqualified version of T. Otherwise, the type of the rvalue
1523     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1524     // just strip the qualifiers because they don't matter.
1525     FromType = FromType.getUnqualifiedType();
1526   } else if (FromType->isArrayType()) {
1527     // Array-to-pointer conversion (C++ 4.2)
1528     SCS.First = ICK_Array_To_Pointer;
1529 
1530     // An lvalue or rvalue of type "array of N T" or "array of unknown
1531     // bound of T" can be converted to an rvalue of type "pointer to
1532     // T" (C++ 4.2p1).
1533     FromType = S.Context.getArrayDecayedType(FromType);
1534 
1535     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1536       // This conversion is deprecated. (C++ D.4).
1537       SCS.DeprecatedStringLiteralToCharPtr = true;
1538 
1539       // For the purpose of ranking in overload resolution
1540       // (13.3.3.1.1), this conversion is considered an
1541       // array-to-pointer conversion followed by a qualification
1542       // conversion (4.4). (C++ 4.2p2)
1543       SCS.Second = ICK_Identity;
1544       SCS.Third = ICK_Qualification;
1545       SCS.QualificationIncludesObjCLifetime = false;
1546       SCS.setAllToTypes(FromType);
1547       return true;
1548     }
1549   } else if (FromType->isFunctionType() && argIsLValue) {
1550     // Function-to-pointer conversion (C++ 4.3).
1551     SCS.First = ICK_Function_To_Pointer;
1552 
1553     // An lvalue of function type T can be converted to an rvalue of
1554     // type "pointer to T." The result is a pointer to the
1555     // function. (C++ 4.3p1).
1556     FromType = S.Context.getPointerType(FromType);
1557   } else {
1558     // We don't require any conversions for the first step.
1559     SCS.First = ICK_Identity;
1560   }
1561   SCS.setToType(0, FromType);
1562 
1563   // The second conversion can be an integral promotion, floating
1564   // point promotion, integral conversion, floating point conversion,
1565   // floating-integral conversion, pointer conversion,
1566   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1567   // For overloading in C, this can also be a "compatible-type"
1568   // conversion.
1569   bool IncompatibleObjC = false;
1570   ImplicitConversionKind SecondICK = ICK_Identity;
1571   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1572     // The unqualified versions of the types are the same: there's no
1573     // conversion to do.
1574     SCS.Second = ICK_Identity;
1575   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1576     // Integral promotion (C++ 4.5).
1577     SCS.Second = ICK_Integral_Promotion;
1578     FromType = ToType.getUnqualifiedType();
1579   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1580     // Floating point promotion (C++ 4.6).
1581     SCS.Second = ICK_Floating_Promotion;
1582     FromType = ToType.getUnqualifiedType();
1583   } else if (S.IsComplexPromotion(FromType, ToType)) {
1584     // Complex promotion (Clang extension)
1585     SCS.Second = ICK_Complex_Promotion;
1586     FromType = ToType.getUnqualifiedType();
1587   } else if (ToType->isBooleanType() &&
1588              (FromType->isArithmeticType() ||
1589               FromType->isAnyPointerType() ||
1590               FromType->isBlockPointerType() ||
1591               FromType->isMemberPointerType() ||
1592               FromType->isNullPtrType())) {
1593     // Boolean conversions (C++ 4.12).
1594     SCS.Second = ICK_Boolean_Conversion;
1595     FromType = S.Context.BoolTy;
1596   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1597              ToType->isIntegralType(S.Context)) {
1598     // Integral conversions (C++ 4.7).
1599     SCS.Second = ICK_Integral_Conversion;
1600     FromType = ToType.getUnqualifiedType();
1601   } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) {
1602     // Complex conversions (C99 6.3.1.6)
1603     SCS.Second = ICK_Complex_Conversion;
1604     FromType = ToType.getUnqualifiedType();
1605   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1606              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1607     // Complex-real conversions (C99 6.3.1.7)
1608     SCS.Second = ICK_Complex_Real;
1609     FromType = ToType.getUnqualifiedType();
1610   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1611     // Floating point conversions (C++ 4.8).
1612     SCS.Second = ICK_Floating_Conversion;
1613     FromType = ToType.getUnqualifiedType();
1614   } else if ((FromType->isRealFloatingType() &&
1615               ToType->isIntegralType(S.Context)) ||
1616              (FromType->isIntegralOrUnscopedEnumerationType() &&
1617               ToType->isRealFloatingType())) {
1618     // Floating-integral conversions (C++ 4.9).
1619     SCS.Second = ICK_Floating_Integral;
1620     FromType = ToType.getUnqualifiedType();
1621   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1622     SCS.Second = ICK_Block_Pointer_Conversion;
1623   } else if (AllowObjCWritebackConversion &&
1624              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1625     SCS.Second = ICK_Writeback_Conversion;
1626   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1627                                    FromType, IncompatibleObjC)) {
1628     // Pointer conversions (C++ 4.10).
1629     SCS.Second = ICK_Pointer_Conversion;
1630     SCS.IncompatibleObjC = IncompatibleObjC;
1631     FromType = FromType.getUnqualifiedType();
1632   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1633                                          InOverloadResolution, FromType)) {
1634     // Pointer to member conversions (4.11).
1635     SCS.Second = ICK_Pointer_Member;
1636   } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1637     SCS.Second = SecondICK;
1638     FromType = ToType.getUnqualifiedType();
1639   } else if (!S.getLangOpts().CPlusPlus &&
1640              S.Context.typesAreCompatible(ToType, FromType)) {
1641     // Compatible conversions (Clang extension for C function overloading)
1642     SCS.Second = ICK_Compatible_Conversion;
1643     FromType = ToType.getUnqualifiedType();
1644   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1645     // Treat a conversion that strips "noreturn" as an identity conversion.
1646     SCS.Second = ICK_NoReturn_Adjustment;
1647   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1648                                              InOverloadResolution,
1649                                              SCS, CStyle)) {
1650     SCS.Second = ICK_TransparentUnionConversion;
1651     FromType = ToType;
1652   } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1653                                  CStyle)) {
1654     // tryAtomicConversion has updated the standard conversion sequence
1655     // appropriately.
1656     return true;
1657   } else if (ToType->isEventT() &&
1658              From->isIntegerConstantExpr(S.getASTContext()) &&
1659              (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
1660     SCS.Second = ICK_Zero_Event_Conversion;
1661     FromType = ToType;
1662   } else {
1663     // No second conversion required.
1664     SCS.Second = ICK_Identity;
1665   }
1666   SCS.setToType(1, FromType);
1667 
1668   QualType CanonFrom;
1669   QualType CanonTo;
1670   // The third conversion can be a qualification conversion (C++ 4p1).
1671   bool ObjCLifetimeConversion;
1672   if (S.IsQualificationConversion(FromType, ToType, CStyle,
1673                                   ObjCLifetimeConversion)) {
1674     SCS.Third = ICK_Qualification;
1675     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1676     FromType = ToType;
1677     CanonFrom = S.Context.getCanonicalType(FromType);
1678     CanonTo = S.Context.getCanonicalType(ToType);
1679   } else {
1680     // No conversion required
1681     SCS.Third = ICK_Identity;
1682 
1683     // C++ [over.best.ics]p6:
1684     //   [...] Any difference in top-level cv-qualification is
1685     //   subsumed by the initialization itself and does not constitute
1686     //   a conversion. [...]
1687     CanonFrom = S.Context.getCanonicalType(FromType);
1688     CanonTo = S.Context.getCanonicalType(ToType);
1689     if (CanonFrom.getLocalUnqualifiedType()
1690                                        == CanonTo.getLocalUnqualifiedType() &&
1691         CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
1692       FromType = ToType;
1693       CanonFrom = CanonTo;
1694     }
1695   }
1696   SCS.setToType(2, FromType);
1697 
1698   // If we have not converted the argument type to the parameter type,
1699   // this is a bad conversion sequence.
1700   if (CanonFrom != CanonTo)
1701     return false;
1702 
1703   return true;
1704 }
1705 
1706 static bool
1707 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1708                                      QualType &ToType,
1709                                      bool InOverloadResolution,
1710                                      StandardConversionSequence &SCS,
1711                                      bool CStyle) {
1712 
1713   const RecordType *UT = ToType->getAsUnionType();
1714   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1715     return false;
1716   // The field to initialize within the transparent union.
1717   RecordDecl *UD = UT->getDecl();
1718   // It's compatible if the expression matches any of the fields.
1719   for (RecordDecl::field_iterator it = UD->field_begin(),
1720        itend = UD->field_end();
1721        it != itend; ++it) {
1722     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1723                              CStyle, /*ObjCWritebackConversion=*/false)) {
1724       ToType = it->getType();
1725       return true;
1726     }
1727   }
1728   return false;
1729 }
1730 
1731 /// IsIntegralPromotion - Determines whether the conversion from the
1732 /// expression From (whose potentially-adjusted type is FromType) to
1733 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1734 /// sets PromotedType to the promoted type.
1735 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1736   const BuiltinType *To = ToType->getAs<BuiltinType>();
1737   // All integers are built-in.
1738   if (!To) {
1739     return false;
1740   }
1741 
1742   // An rvalue of type char, signed char, unsigned char, short int, or
1743   // unsigned short int can be converted to an rvalue of type int if
1744   // int can represent all the values of the source type; otherwise,
1745   // the source rvalue can be converted to an rvalue of type unsigned
1746   // int (C++ 4.5p1).
1747   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1748       !FromType->isEnumeralType()) {
1749     if (// We can promote any signed, promotable integer type to an int
1750         (FromType->isSignedIntegerType() ||
1751          // We can promote any unsigned integer type whose size is
1752          // less than int to an int.
1753          (!FromType->isSignedIntegerType() &&
1754           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1755       return To->getKind() == BuiltinType::Int;
1756     }
1757 
1758     return To->getKind() == BuiltinType::UInt;
1759   }
1760 
1761   // C++11 [conv.prom]p3:
1762   //   A prvalue of an unscoped enumeration type whose underlying type is not
1763   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1764   //   following types that can represent all the values of the enumeration
1765   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1766   //   unsigned int, long int, unsigned long int, long long int, or unsigned
1767   //   long long int. If none of the types in that list can represent all the
1768   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1769   //   type can be converted to an rvalue a prvalue of the extended integer type
1770   //   with lowest integer conversion rank (4.13) greater than the rank of long
1771   //   long in which all the values of the enumeration can be represented. If
1772   //   there are two such extended types, the signed one is chosen.
1773   // C++11 [conv.prom]p4:
1774   //   A prvalue of an unscoped enumeration type whose underlying type is fixed
1775   //   can be converted to a prvalue of its underlying type. Moreover, if
1776   //   integral promotion can be applied to its underlying type, a prvalue of an
1777   //   unscoped enumeration type whose underlying type is fixed can also be
1778   //   converted to a prvalue of the promoted underlying type.
1779   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1780     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1781     // provided for a scoped enumeration.
1782     if (FromEnumType->getDecl()->isScoped())
1783       return false;
1784 
1785     // We can perform an integral promotion to the underlying type of the enum,
1786     // even if that's not the promoted type.
1787     if (FromEnumType->getDecl()->isFixed()) {
1788       QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1789       return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1790              IsIntegralPromotion(From, Underlying, ToType);
1791     }
1792 
1793     // We have already pre-calculated the promotion type, so this is trivial.
1794     if (ToType->isIntegerType() &&
1795         !RequireCompleteType(From->getLocStart(), FromType, 0))
1796       return Context.hasSameUnqualifiedType(ToType,
1797                                 FromEnumType->getDecl()->getPromotionType());
1798   }
1799 
1800   // C++0x [conv.prom]p2:
1801   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1802   //   to an rvalue a prvalue of the first of the following types that can
1803   //   represent all the values of its underlying type: int, unsigned int,
1804   //   long int, unsigned long int, long long int, or unsigned long long int.
1805   //   If none of the types in that list can represent all the values of its
1806   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1807   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1808   //   type.
1809   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1810       ToType->isIntegerType()) {
1811     // Determine whether the type we're converting from is signed or
1812     // unsigned.
1813     bool FromIsSigned = FromType->isSignedIntegerType();
1814     uint64_t FromSize = Context.getTypeSize(FromType);
1815 
1816     // The types we'll try to promote to, in the appropriate
1817     // order. Try each of these types.
1818     QualType PromoteTypes[6] = {
1819       Context.IntTy, Context.UnsignedIntTy,
1820       Context.LongTy, Context.UnsignedLongTy ,
1821       Context.LongLongTy, Context.UnsignedLongLongTy
1822     };
1823     for (int Idx = 0; Idx < 6; ++Idx) {
1824       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1825       if (FromSize < ToSize ||
1826           (FromSize == ToSize &&
1827            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1828         // We found the type that we can promote to. If this is the
1829         // type we wanted, we have a promotion. Otherwise, no
1830         // promotion.
1831         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1832       }
1833     }
1834   }
1835 
1836   // An rvalue for an integral bit-field (9.6) can be converted to an
1837   // rvalue of type int if int can represent all the values of the
1838   // bit-field; otherwise, it can be converted to unsigned int if
1839   // unsigned int can represent all the values of the bit-field. If
1840   // the bit-field is larger yet, no integral promotion applies to
1841   // it. If the bit-field has an enumerated type, it is treated as any
1842   // other value of that type for promotion purposes (C++ 4.5p3).
1843   // FIXME: We should delay checking of bit-fields until we actually perform the
1844   // conversion.
1845   using llvm::APSInt;
1846   if (From)
1847     if (FieldDecl *MemberDecl = From->getSourceBitField()) {
1848       APSInt BitWidth;
1849       if (FromType->isIntegralType(Context) &&
1850           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1851         APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1852         ToSize = Context.getTypeSize(ToType);
1853 
1854         // Are we promoting to an int from a bitfield that fits in an int?
1855         if (BitWidth < ToSize ||
1856             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1857           return To->getKind() == BuiltinType::Int;
1858         }
1859 
1860         // Are we promoting to an unsigned int from an unsigned bitfield
1861         // that fits into an unsigned int?
1862         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1863           return To->getKind() == BuiltinType::UInt;
1864         }
1865 
1866         return false;
1867       }
1868     }
1869 
1870   // An rvalue of type bool can be converted to an rvalue of type int,
1871   // with false becoming zero and true becoming one (C++ 4.5p4).
1872   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1873     return true;
1874   }
1875 
1876   return false;
1877 }
1878 
1879 /// IsFloatingPointPromotion - Determines whether the conversion from
1880 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1881 /// returns true and sets PromotedType to the promoted type.
1882 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1883   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1884     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1885       /// An rvalue of type float can be converted to an rvalue of type
1886       /// double. (C++ 4.6p1).
1887       if (FromBuiltin->getKind() == BuiltinType::Float &&
1888           ToBuiltin->getKind() == BuiltinType::Double)
1889         return true;
1890 
1891       // C99 6.3.1.5p1:
1892       //   When a float is promoted to double or long double, or a
1893       //   double is promoted to long double [...].
1894       if (!getLangOpts().CPlusPlus &&
1895           (FromBuiltin->getKind() == BuiltinType::Float ||
1896            FromBuiltin->getKind() == BuiltinType::Double) &&
1897           (ToBuiltin->getKind() == BuiltinType::LongDouble))
1898         return true;
1899 
1900       // Half can be promoted to float.
1901       if (!getLangOpts().NativeHalfType &&
1902            FromBuiltin->getKind() == BuiltinType::Half &&
1903           ToBuiltin->getKind() == BuiltinType::Float)
1904         return true;
1905     }
1906 
1907   return false;
1908 }
1909 
1910 /// \brief Determine if a conversion is a complex promotion.
1911 ///
1912 /// A complex promotion is defined as a complex -> complex conversion
1913 /// where the conversion between the underlying real types is a
1914 /// floating-point or integral promotion.
1915 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1916   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1917   if (!FromComplex)
1918     return false;
1919 
1920   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1921   if (!ToComplex)
1922     return false;
1923 
1924   return IsFloatingPointPromotion(FromComplex->getElementType(),
1925                                   ToComplex->getElementType()) ||
1926     IsIntegralPromotion(0, FromComplex->getElementType(),
1927                         ToComplex->getElementType());
1928 }
1929 
1930 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1931 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1932 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1933 /// if non-empty, will be a pointer to ToType that may or may not have
1934 /// the right set of qualifiers on its pointee.
1935 ///
1936 static QualType
1937 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1938                                    QualType ToPointee, QualType ToType,
1939                                    ASTContext &Context,
1940                                    bool StripObjCLifetime = false) {
1941   assert((FromPtr->getTypeClass() == Type::Pointer ||
1942           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1943          "Invalid similarly-qualified pointer type");
1944 
1945   /// Conversions to 'id' subsume cv-qualifier conversions.
1946   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1947     return ToType.getUnqualifiedType();
1948 
1949   QualType CanonFromPointee
1950     = Context.getCanonicalType(FromPtr->getPointeeType());
1951   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1952   Qualifiers Quals = CanonFromPointee.getQualifiers();
1953 
1954   if (StripObjCLifetime)
1955     Quals.removeObjCLifetime();
1956 
1957   // Exact qualifier match -> return the pointer type we're converting to.
1958   if (CanonToPointee.getLocalQualifiers() == Quals) {
1959     // ToType is exactly what we need. Return it.
1960     if (!ToType.isNull())
1961       return ToType.getUnqualifiedType();
1962 
1963     // Build a pointer to ToPointee. It has the right qualifiers
1964     // already.
1965     if (isa<ObjCObjectPointerType>(ToType))
1966       return Context.getObjCObjectPointerType(ToPointee);
1967     return Context.getPointerType(ToPointee);
1968   }
1969 
1970   // Just build a canonical type that has the right qualifiers.
1971   QualType QualifiedCanonToPointee
1972     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1973 
1974   if (isa<ObjCObjectPointerType>(ToType))
1975     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1976   return Context.getPointerType(QualifiedCanonToPointee);
1977 }
1978 
1979 static bool isNullPointerConstantForConversion(Expr *Expr,
1980                                                bool InOverloadResolution,
1981                                                ASTContext &Context) {
1982   // Handle value-dependent integral null pointer constants correctly.
1983   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1984   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1985       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1986     return !InOverloadResolution;
1987 
1988   return Expr->isNullPointerConstant(Context,
1989                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1990                                         : Expr::NPC_ValueDependentIsNull);
1991 }
1992 
1993 /// IsPointerConversion - Determines whether the conversion of the
1994 /// expression From, which has the (possibly adjusted) type FromType,
1995 /// can be converted to the type ToType via a pointer conversion (C++
1996 /// 4.10). If so, returns true and places the converted type (that
1997 /// might differ from ToType in its cv-qualifiers at some level) into
1998 /// ConvertedType.
1999 ///
2000 /// This routine also supports conversions to and from block pointers
2001 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
2002 /// pointers to interfaces. FIXME: Once we've determined the
2003 /// appropriate overloading rules for Objective-C, we may want to
2004 /// split the Objective-C checks into a different routine; however,
2005 /// GCC seems to consider all of these conversions to be pointer
2006 /// conversions, so for now they live here. IncompatibleObjC will be
2007 /// set if the conversion is an allowed Objective-C conversion that
2008 /// should result in a warning.
2009 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
2010                                bool InOverloadResolution,
2011                                QualType& ConvertedType,
2012                                bool &IncompatibleObjC) {
2013   IncompatibleObjC = false;
2014   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
2015                               IncompatibleObjC))
2016     return true;
2017 
2018   // Conversion from a null pointer constant to any Objective-C pointer type.
2019   if (ToType->isObjCObjectPointerType() &&
2020       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2021     ConvertedType = ToType;
2022     return true;
2023   }
2024 
2025   // Blocks: Block pointers can be converted to void*.
2026   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
2027       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
2028     ConvertedType = ToType;
2029     return true;
2030   }
2031   // Blocks: A null pointer constant can be converted to a block
2032   // pointer type.
2033   if (ToType->isBlockPointerType() &&
2034       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2035     ConvertedType = ToType;
2036     return true;
2037   }
2038 
2039   // If the left-hand-side is nullptr_t, the right side can be a null
2040   // pointer constant.
2041   if (ToType->isNullPtrType() &&
2042       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2043     ConvertedType = ToType;
2044     return true;
2045   }
2046 
2047   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
2048   if (!ToTypePtr)
2049     return false;
2050 
2051   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
2052   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2053     ConvertedType = ToType;
2054     return true;
2055   }
2056 
2057   // Beyond this point, both types need to be pointers
2058   // , including objective-c pointers.
2059   QualType ToPointeeType = ToTypePtr->getPointeeType();
2060   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
2061       !getLangOpts().ObjCAutoRefCount) {
2062     ConvertedType = BuildSimilarlyQualifiedPointerType(
2063                                       FromType->getAs<ObjCObjectPointerType>(),
2064                                                        ToPointeeType,
2065                                                        ToType, Context);
2066     return true;
2067   }
2068   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
2069   if (!FromTypePtr)
2070     return false;
2071 
2072   QualType FromPointeeType = FromTypePtr->getPointeeType();
2073 
2074   // If the unqualified pointee types are the same, this can't be a
2075   // pointer conversion, so don't do all of the work below.
2076   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
2077     return false;
2078 
2079   // An rvalue of type "pointer to cv T," where T is an object type,
2080   // can be converted to an rvalue of type "pointer to cv void" (C++
2081   // 4.10p2).
2082   if (FromPointeeType->isIncompleteOrObjectType() &&
2083       ToPointeeType->isVoidType()) {
2084     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2085                                                        ToPointeeType,
2086                                                        ToType, Context,
2087                                                    /*StripObjCLifetime=*/true);
2088     return true;
2089   }
2090 
2091   // MSVC allows implicit function to void* type conversion.
2092   if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
2093       ToPointeeType->isVoidType()) {
2094     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2095                                                        ToPointeeType,
2096                                                        ToType, Context);
2097     return true;
2098   }
2099 
2100   // When we're overloading in C, we allow a special kind of pointer
2101   // conversion for compatible-but-not-identical pointee types.
2102   if (!getLangOpts().CPlusPlus &&
2103       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2104     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2105                                                        ToPointeeType,
2106                                                        ToType, Context);
2107     return true;
2108   }
2109 
2110   // C++ [conv.ptr]p3:
2111   //
2112   //   An rvalue of type "pointer to cv D," where D is a class type,
2113   //   can be converted to an rvalue of type "pointer to cv B," where
2114   //   B is a base class (clause 10) of D. If B is an inaccessible
2115   //   (clause 11) or ambiguous (10.2) base class of D, a program that
2116   //   necessitates this conversion is ill-formed. The result of the
2117   //   conversion is a pointer to the base class sub-object of the
2118   //   derived class object. The null pointer value is converted to
2119   //   the null pointer value of the destination type.
2120   //
2121   // Note that we do not check for ambiguity or inaccessibility
2122   // here. That is handled by CheckPointerConversion.
2123   if (getLangOpts().CPlusPlus &&
2124       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2125       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2126       !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2127       IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2128     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2129                                                        ToPointeeType,
2130                                                        ToType, Context);
2131     return true;
2132   }
2133 
2134   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2135       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2136     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2137                                                        ToPointeeType,
2138                                                        ToType, Context);
2139     return true;
2140   }
2141 
2142   return false;
2143 }
2144 
2145 /// \brief Adopt the given qualifiers for the given type.
2146 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2147   Qualifiers TQs = T.getQualifiers();
2148 
2149   // Check whether qualifiers already match.
2150   if (TQs == Qs)
2151     return T;
2152 
2153   if (Qs.compatiblyIncludes(TQs))
2154     return Context.getQualifiedType(T, Qs);
2155 
2156   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2157 }
2158 
2159 /// isObjCPointerConversion - Determines whether this is an
2160 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2161 /// with the same arguments and return values.
2162 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2163                                    QualType& ConvertedType,
2164                                    bool &IncompatibleObjC) {
2165   if (!getLangOpts().ObjC1)
2166     return false;
2167 
2168   // The set of qualifiers on the type we're converting from.
2169   Qualifiers FromQualifiers = FromType.getQualifiers();
2170 
2171   // First, we handle all conversions on ObjC object pointer types.
2172   const ObjCObjectPointerType* ToObjCPtr =
2173     ToType->getAs<ObjCObjectPointerType>();
2174   const ObjCObjectPointerType *FromObjCPtr =
2175     FromType->getAs<ObjCObjectPointerType>();
2176 
2177   if (ToObjCPtr && FromObjCPtr) {
2178     // If the pointee types are the same (ignoring qualifications),
2179     // then this is not a pointer conversion.
2180     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2181                                        FromObjCPtr->getPointeeType()))
2182       return false;
2183 
2184     // Check for compatible
2185     // Objective C++: We're able to convert between "id" or "Class" and a
2186     // pointer to any interface (in both directions).
2187     if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2188       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2189       return true;
2190     }
2191     // Conversions with Objective-C's id<...>.
2192     if ((FromObjCPtr->isObjCQualifiedIdType() ||
2193          ToObjCPtr->isObjCQualifiedIdType()) &&
2194         Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2195                                                   /*compare=*/false)) {
2196       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2197       return true;
2198     }
2199     // Objective C++: We're able to convert from a pointer to an
2200     // interface to a pointer to a different interface.
2201     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2202       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2203       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2204       if (getLangOpts().CPlusPlus && LHS && RHS &&
2205           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2206                                                 FromObjCPtr->getPointeeType()))
2207         return false;
2208       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2209                                                    ToObjCPtr->getPointeeType(),
2210                                                          ToType, Context);
2211       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2212       return true;
2213     }
2214 
2215     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2216       // Okay: this is some kind of implicit downcast of Objective-C
2217       // interfaces, which is permitted. However, we're going to
2218       // complain about it.
2219       IncompatibleObjC = true;
2220       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2221                                                    ToObjCPtr->getPointeeType(),
2222                                                          ToType, Context);
2223       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2224       return true;
2225     }
2226   }
2227   // Beyond this point, both types need to be C pointers or block pointers.
2228   QualType ToPointeeType;
2229   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2230     ToPointeeType = ToCPtr->getPointeeType();
2231   else if (const BlockPointerType *ToBlockPtr =
2232             ToType->getAs<BlockPointerType>()) {
2233     // Objective C++: We're able to convert from a pointer to any object
2234     // to a block pointer type.
2235     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2236       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2237       return true;
2238     }
2239     ToPointeeType = ToBlockPtr->getPointeeType();
2240   }
2241   else if (FromType->getAs<BlockPointerType>() &&
2242            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2243     // Objective C++: We're able to convert from a block pointer type to a
2244     // pointer to any object.
2245     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2246     return true;
2247   }
2248   else
2249     return false;
2250 
2251   QualType FromPointeeType;
2252   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2253     FromPointeeType = FromCPtr->getPointeeType();
2254   else if (const BlockPointerType *FromBlockPtr =
2255            FromType->getAs<BlockPointerType>())
2256     FromPointeeType = FromBlockPtr->getPointeeType();
2257   else
2258     return false;
2259 
2260   // If we have pointers to pointers, recursively check whether this
2261   // is an Objective-C conversion.
2262   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2263       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2264                               IncompatibleObjC)) {
2265     // We always complain about this conversion.
2266     IncompatibleObjC = true;
2267     ConvertedType = Context.getPointerType(ConvertedType);
2268     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2269     return true;
2270   }
2271   // Allow conversion of pointee being objective-c pointer to another one;
2272   // as in I* to id.
2273   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2274       ToPointeeType->getAs<ObjCObjectPointerType>() &&
2275       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2276                               IncompatibleObjC)) {
2277 
2278     ConvertedType = Context.getPointerType(ConvertedType);
2279     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2280     return true;
2281   }
2282 
2283   // If we have pointers to functions or blocks, check whether the only
2284   // differences in the argument and result types are in Objective-C
2285   // pointer conversions. If so, we permit the conversion (but
2286   // complain about it).
2287   const FunctionProtoType *FromFunctionType
2288     = FromPointeeType->getAs<FunctionProtoType>();
2289   const FunctionProtoType *ToFunctionType
2290     = ToPointeeType->getAs<FunctionProtoType>();
2291   if (FromFunctionType && ToFunctionType) {
2292     // If the function types are exactly the same, this isn't an
2293     // Objective-C pointer conversion.
2294     if (Context.getCanonicalType(FromPointeeType)
2295           == Context.getCanonicalType(ToPointeeType))
2296       return false;
2297 
2298     // Perform the quick checks that will tell us whether these
2299     // function types are obviously different.
2300     if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2301         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2302         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2303       return false;
2304 
2305     bool HasObjCConversion = false;
2306     if (Context.getCanonicalType(FromFunctionType->getResultType())
2307           == Context.getCanonicalType(ToFunctionType->getResultType())) {
2308       // Okay, the types match exactly. Nothing to do.
2309     } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2310                                        ToFunctionType->getResultType(),
2311                                        ConvertedType, IncompatibleObjC)) {
2312       // Okay, we have an Objective-C pointer conversion.
2313       HasObjCConversion = true;
2314     } else {
2315       // Function types are too different. Abort.
2316       return false;
2317     }
2318 
2319     // Check argument types.
2320     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2321          ArgIdx != NumArgs; ++ArgIdx) {
2322       QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2323       QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2324       if (Context.getCanonicalType(FromArgType)
2325             == Context.getCanonicalType(ToArgType)) {
2326         // Okay, the types match exactly. Nothing to do.
2327       } else if (isObjCPointerConversion(FromArgType, ToArgType,
2328                                          ConvertedType, IncompatibleObjC)) {
2329         // Okay, we have an Objective-C pointer conversion.
2330         HasObjCConversion = true;
2331       } else {
2332         // Argument types are too different. Abort.
2333         return false;
2334       }
2335     }
2336 
2337     if (HasObjCConversion) {
2338       // We had an Objective-C conversion. Allow this pointer
2339       // conversion, but complain about it.
2340       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2341       IncompatibleObjC = true;
2342       return true;
2343     }
2344   }
2345 
2346   return false;
2347 }
2348 
2349 /// \brief Determine whether this is an Objective-C writeback conversion,
2350 /// used for parameter passing when performing automatic reference counting.
2351 ///
2352 /// \param FromType The type we're converting form.
2353 ///
2354 /// \param ToType The type we're converting to.
2355 ///
2356 /// \param ConvertedType The type that will be produced after applying
2357 /// this conversion.
2358 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2359                                      QualType &ConvertedType) {
2360   if (!getLangOpts().ObjCAutoRefCount ||
2361       Context.hasSameUnqualifiedType(FromType, ToType))
2362     return false;
2363 
2364   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2365   QualType ToPointee;
2366   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2367     ToPointee = ToPointer->getPointeeType();
2368   else
2369     return false;
2370 
2371   Qualifiers ToQuals = ToPointee.getQualifiers();
2372   if (!ToPointee->isObjCLifetimeType() ||
2373       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2374       !ToQuals.withoutObjCLifetime().empty())
2375     return false;
2376 
2377   // Argument must be a pointer to __strong to __weak.
2378   QualType FromPointee;
2379   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2380     FromPointee = FromPointer->getPointeeType();
2381   else
2382     return false;
2383 
2384   Qualifiers FromQuals = FromPointee.getQualifiers();
2385   if (!FromPointee->isObjCLifetimeType() ||
2386       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2387        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2388     return false;
2389 
2390   // Make sure that we have compatible qualifiers.
2391   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2392   if (!ToQuals.compatiblyIncludes(FromQuals))
2393     return false;
2394 
2395   // Remove qualifiers from the pointee type we're converting from; they
2396   // aren't used in the compatibility check belong, and we'll be adding back
2397   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2398   FromPointee = FromPointee.getUnqualifiedType();
2399 
2400   // The unqualified form of the pointee types must be compatible.
2401   ToPointee = ToPointee.getUnqualifiedType();
2402   bool IncompatibleObjC;
2403   if (Context.typesAreCompatible(FromPointee, ToPointee))
2404     FromPointee = ToPointee;
2405   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2406                                     IncompatibleObjC))
2407     return false;
2408 
2409   /// \brief Construct the type we're converting to, which is a pointer to
2410   /// __autoreleasing pointee.
2411   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2412   ConvertedType = Context.getPointerType(FromPointee);
2413   return true;
2414 }
2415 
2416 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2417                                     QualType& ConvertedType) {
2418   QualType ToPointeeType;
2419   if (const BlockPointerType *ToBlockPtr =
2420         ToType->getAs<BlockPointerType>())
2421     ToPointeeType = ToBlockPtr->getPointeeType();
2422   else
2423     return false;
2424 
2425   QualType FromPointeeType;
2426   if (const BlockPointerType *FromBlockPtr =
2427       FromType->getAs<BlockPointerType>())
2428     FromPointeeType = FromBlockPtr->getPointeeType();
2429   else
2430     return false;
2431   // We have pointer to blocks, check whether the only
2432   // differences in the argument and result types are in Objective-C
2433   // pointer conversions. If so, we permit the conversion.
2434 
2435   const FunctionProtoType *FromFunctionType
2436     = FromPointeeType->getAs<FunctionProtoType>();
2437   const FunctionProtoType *ToFunctionType
2438     = ToPointeeType->getAs<FunctionProtoType>();
2439 
2440   if (!FromFunctionType || !ToFunctionType)
2441     return false;
2442 
2443   if (Context.hasSameType(FromPointeeType, ToPointeeType))
2444     return true;
2445 
2446   // Perform the quick checks that will tell us whether these
2447   // function types are obviously different.
2448   if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2449       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2450     return false;
2451 
2452   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2453   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2454   if (FromEInfo != ToEInfo)
2455     return false;
2456 
2457   bool IncompatibleObjC = false;
2458   if (Context.hasSameType(FromFunctionType->getResultType(),
2459                           ToFunctionType->getResultType())) {
2460     // Okay, the types match exactly. Nothing to do.
2461   } else {
2462     QualType RHS = FromFunctionType->getResultType();
2463     QualType LHS = ToFunctionType->getResultType();
2464     if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2465         !RHS.hasQualifiers() && LHS.hasQualifiers())
2466        LHS = LHS.getUnqualifiedType();
2467 
2468      if (Context.hasSameType(RHS,LHS)) {
2469        // OK exact match.
2470      } else if (isObjCPointerConversion(RHS, LHS,
2471                                         ConvertedType, IncompatibleObjC)) {
2472      if (IncompatibleObjC)
2473        return false;
2474      // Okay, we have an Objective-C pointer conversion.
2475      }
2476      else
2477        return false;
2478    }
2479 
2480    // Check argument types.
2481    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2482         ArgIdx != NumArgs; ++ArgIdx) {
2483      IncompatibleObjC = false;
2484      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2485      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2486      if (Context.hasSameType(FromArgType, ToArgType)) {
2487        // Okay, the types match exactly. Nothing to do.
2488      } else if (isObjCPointerConversion(ToArgType, FromArgType,
2489                                         ConvertedType, IncompatibleObjC)) {
2490        if (IncompatibleObjC)
2491          return false;
2492        // Okay, we have an Objective-C pointer conversion.
2493      } else
2494        // Argument types are too different. Abort.
2495        return false;
2496    }
2497    if (LangOpts.ObjCAutoRefCount &&
2498        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2499                                                     ToFunctionType))
2500      return false;
2501 
2502    ConvertedType = ToType;
2503    return true;
2504 }
2505 
2506 enum {
2507   ft_default,
2508   ft_different_class,
2509   ft_parameter_arity,
2510   ft_parameter_mismatch,
2511   ft_return_type,
2512   ft_qualifer_mismatch
2513 };
2514 
2515 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2516 /// function types.  Catches different number of parameter, mismatch in
2517 /// parameter types, and different return types.
2518 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2519                                       QualType FromType, QualType ToType) {
2520   // If either type is not valid, include no extra info.
2521   if (FromType.isNull() || ToType.isNull()) {
2522     PDiag << ft_default;
2523     return;
2524   }
2525 
2526   // Get the function type from the pointers.
2527   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2528     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2529                             *ToMember = ToType->getAs<MemberPointerType>();
2530     if (FromMember->getClass() != ToMember->getClass()) {
2531       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2532             << QualType(FromMember->getClass(), 0);
2533       return;
2534     }
2535     FromType = FromMember->getPointeeType();
2536     ToType = ToMember->getPointeeType();
2537   }
2538 
2539   if (FromType->isPointerType())
2540     FromType = FromType->getPointeeType();
2541   if (ToType->isPointerType())
2542     ToType = ToType->getPointeeType();
2543 
2544   // Remove references.
2545   FromType = FromType.getNonReferenceType();
2546   ToType = ToType.getNonReferenceType();
2547 
2548   // Don't print extra info for non-specialized template functions.
2549   if (FromType->isInstantiationDependentType() &&
2550       !FromType->getAs<TemplateSpecializationType>()) {
2551     PDiag << ft_default;
2552     return;
2553   }
2554 
2555   // No extra info for same types.
2556   if (Context.hasSameType(FromType, ToType)) {
2557     PDiag << ft_default;
2558     return;
2559   }
2560 
2561   const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2562                           *ToFunction = ToType->getAs<FunctionProtoType>();
2563 
2564   // Both types need to be function types.
2565   if (!FromFunction || !ToFunction) {
2566     PDiag << ft_default;
2567     return;
2568   }
2569 
2570   if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2571     PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2572           << FromFunction->getNumArgs();
2573     return;
2574   }
2575 
2576   // Handle different parameter types.
2577   unsigned ArgPos;
2578   if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2579     PDiag << ft_parameter_mismatch << ArgPos + 1
2580           << ToFunction->getArgType(ArgPos)
2581           << FromFunction->getArgType(ArgPos);
2582     return;
2583   }
2584 
2585   // Handle different return type.
2586   if (!Context.hasSameType(FromFunction->getResultType(),
2587                            ToFunction->getResultType())) {
2588     PDiag << ft_return_type << ToFunction->getResultType()
2589           << FromFunction->getResultType();
2590     return;
2591   }
2592 
2593   unsigned FromQuals = FromFunction->getTypeQuals(),
2594            ToQuals = ToFunction->getTypeQuals();
2595   if (FromQuals != ToQuals) {
2596     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2597     return;
2598   }
2599 
2600   // Unable to find a difference, so add no extra info.
2601   PDiag << ft_default;
2602 }
2603 
2604 /// FunctionArgTypesAreEqual - This routine checks two function proto types
2605 /// for equality of their argument types. Caller has already checked that
2606 /// they have same number of arguments. This routine assumes that Objective-C
2607 /// pointer types which only differ in their protocol qualifiers are equal.
2608 /// If the parameters are different, ArgPos will have the parameter index
2609 /// of the first different parameter.
2610 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2611                                     const FunctionProtoType *NewType,
2612                                     unsigned *ArgPos) {
2613   if (!getLangOpts().ObjC1) {
2614     for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2615          N = NewType->arg_type_begin(),
2616          E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2617       if (!Context.hasSameType(*O, *N)) {
2618         if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2619         return false;
2620       }
2621     }
2622     return true;
2623   }
2624 
2625   for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2626        N = NewType->arg_type_begin(),
2627        E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2628     QualType ToType = (*O);
2629     QualType FromType = (*N);
2630     if (!Context.hasSameType(ToType, FromType)) {
2631       if (const PointerType *PTTo = ToType->getAs<PointerType>()) {
2632         if (const PointerType *PTFr = FromType->getAs<PointerType>())
2633           if ((PTTo->getPointeeType()->isObjCQualifiedIdType() &&
2634                PTFr->getPointeeType()->isObjCQualifiedIdType()) ||
2635               (PTTo->getPointeeType()->isObjCQualifiedClassType() &&
2636                PTFr->getPointeeType()->isObjCQualifiedClassType()))
2637             continue;
2638       }
2639       else if (const ObjCObjectPointerType *PTTo =
2640                  ToType->getAs<ObjCObjectPointerType>()) {
2641         if (const ObjCObjectPointerType *PTFr =
2642               FromType->getAs<ObjCObjectPointerType>())
2643           if (Context.hasSameUnqualifiedType(
2644                 PTTo->getObjectType()->getBaseType(),
2645                 PTFr->getObjectType()->getBaseType()))
2646             continue;
2647       }
2648       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2649       return false;
2650     }
2651   }
2652   return true;
2653 }
2654 
2655 /// CheckPointerConversion - Check the pointer conversion from the
2656 /// expression From to the type ToType. This routine checks for
2657 /// ambiguous or inaccessible derived-to-base pointer
2658 /// conversions for which IsPointerConversion has already returned
2659 /// true. It returns true and produces a diagnostic if there was an
2660 /// error, or returns false otherwise.
2661 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2662                                   CastKind &Kind,
2663                                   CXXCastPath& BasePath,
2664                                   bool IgnoreBaseAccess) {
2665   QualType FromType = From->getType();
2666   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2667 
2668   Kind = CK_BitCast;
2669 
2670   if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2671       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2672       Expr::NPCK_ZeroExpression) {
2673     if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2674       DiagRuntimeBehavior(From->getExprLoc(), From,
2675                           PDiag(diag::warn_impcast_bool_to_null_pointer)
2676                             << ToType << From->getSourceRange());
2677     else if (!isUnevaluatedContext())
2678       Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2679         << ToType << From->getSourceRange();
2680   }
2681   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2682     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2683       QualType FromPointeeType = FromPtrType->getPointeeType(),
2684                ToPointeeType   = ToPtrType->getPointeeType();
2685 
2686       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2687           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2688         // We must have a derived-to-base conversion. Check an
2689         // ambiguous or inaccessible conversion.
2690         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2691                                          From->getExprLoc(),
2692                                          From->getSourceRange(), &BasePath,
2693                                          IgnoreBaseAccess))
2694           return true;
2695 
2696         // The conversion was successful.
2697         Kind = CK_DerivedToBase;
2698       }
2699     }
2700   } else if (const ObjCObjectPointerType *ToPtrType =
2701                ToType->getAs<ObjCObjectPointerType>()) {
2702     if (const ObjCObjectPointerType *FromPtrType =
2703           FromType->getAs<ObjCObjectPointerType>()) {
2704       // Objective-C++ conversions are always okay.
2705       // FIXME: We should have a different class of conversions for the
2706       // Objective-C++ implicit conversions.
2707       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2708         return false;
2709     } else if (FromType->isBlockPointerType()) {
2710       Kind = CK_BlockPointerToObjCPointerCast;
2711     } else {
2712       Kind = CK_CPointerToObjCPointerCast;
2713     }
2714   } else if (ToType->isBlockPointerType()) {
2715     if (!FromType->isBlockPointerType())
2716       Kind = CK_AnyPointerToBlockPointerCast;
2717   }
2718 
2719   // We shouldn't fall into this case unless it's valid for other
2720   // reasons.
2721   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2722     Kind = CK_NullToPointer;
2723 
2724   return false;
2725 }
2726 
2727 /// IsMemberPointerConversion - Determines whether the conversion of the
2728 /// expression From, which has the (possibly adjusted) type FromType, can be
2729 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2730 /// If so, returns true and places the converted type (that might differ from
2731 /// ToType in its cv-qualifiers at some level) into ConvertedType.
2732 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2733                                      QualType ToType,
2734                                      bool InOverloadResolution,
2735                                      QualType &ConvertedType) {
2736   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2737   if (!ToTypePtr)
2738     return false;
2739 
2740   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2741   if (From->isNullPointerConstant(Context,
2742                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2743                                         : Expr::NPC_ValueDependentIsNull)) {
2744     ConvertedType = ToType;
2745     return true;
2746   }
2747 
2748   // Otherwise, both types have to be member pointers.
2749   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2750   if (!FromTypePtr)
2751     return false;
2752 
2753   // A pointer to member of B can be converted to a pointer to member of D,
2754   // where D is derived from B (C++ 4.11p2).
2755   QualType FromClass(FromTypePtr->getClass(), 0);
2756   QualType ToClass(ToTypePtr->getClass(), 0);
2757 
2758   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2759       !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2760       IsDerivedFrom(ToClass, FromClass)) {
2761     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2762                                                  ToClass.getTypePtr());
2763     return true;
2764   }
2765 
2766   return false;
2767 }
2768 
2769 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2770 /// expression From to the type ToType. This routine checks for ambiguous or
2771 /// virtual or inaccessible base-to-derived member pointer conversions
2772 /// for which IsMemberPointerConversion has already returned true. It returns
2773 /// true and produces a diagnostic if there was an error, or returns false
2774 /// otherwise.
2775 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2776                                         CastKind &Kind,
2777                                         CXXCastPath &BasePath,
2778                                         bool IgnoreBaseAccess) {
2779   QualType FromType = From->getType();
2780   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2781   if (!FromPtrType) {
2782     // This must be a null pointer to member pointer conversion
2783     assert(From->isNullPointerConstant(Context,
2784                                        Expr::NPC_ValueDependentIsNull) &&
2785            "Expr must be null pointer constant!");
2786     Kind = CK_NullToMemberPointer;
2787     return false;
2788   }
2789 
2790   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2791   assert(ToPtrType && "No member pointer cast has a target type "
2792                       "that is not a member pointer.");
2793 
2794   QualType FromClass = QualType(FromPtrType->getClass(), 0);
2795   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2796 
2797   // FIXME: What about dependent types?
2798   assert(FromClass->isRecordType() && "Pointer into non-class.");
2799   assert(ToClass->isRecordType() && "Pointer into non-class.");
2800 
2801   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2802                      /*DetectVirtual=*/true);
2803   bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2804   assert(DerivationOkay &&
2805          "Should not have been called if derivation isn't OK.");
2806   (void)DerivationOkay;
2807 
2808   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2809                                   getUnqualifiedType())) {
2810     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2811     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2812       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2813     return true;
2814   }
2815 
2816   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2817     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2818       << FromClass << ToClass << QualType(VBase, 0)
2819       << From->getSourceRange();
2820     return true;
2821   }
2822 
2823   if (!IgnoreBaseAccess)
2824     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2825                          Paths.front(),
2826                          diag::err_downcast_from_inaccessible_base);
2827 
2828   // Must be a base to derived member conversion.
2829   BuildBasePathArray(Paths, BasePath);
2830   Kind = CK_BaseToDerivedMemberPointer;
2831   return false;
2832 }
2833 
2834 /// IsQualificationConversion - Determines whether the conversion from
2835 /// an rvalue of type FromType to ToType is a qualification conversion
2836 /// (C++ 4.4).
2837 ///
2838 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2839 /// when the qualification conversion involves a change in the Objective-C
2840 /// object lifetime.
2841 bool
2842 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2843                                 bool CStyle, bool &ObjCLifetimeConversion) {
2844   FromType = Context.getCanonicalType(FromType);
2845   ToType = Context.getCanonicalType(ToType);
2846   ObjCLifetimeConversion = false;
2847 
2848   // If FromType and ToType are the same type, this is not a
2849   // qualification conversion.
2850   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2851     return false;
2852 
2853   // (C++ 4.4p4):
2854   //   A conversion can add cv-qualifiers at levels other than the first
2855   //   in multi-level pointers, subject to the following rules: [...]
2856   bool PreviousToQualsIncludeConst = true;
2857   bool UnwrappedAnyPointer = false;
2858   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2859     // Within each iteration of the loop, we check the qualifiers to
2860     // determine if this still looks like a qualification
2861     // conversion. Then, if all is well, we unwrap one more level of
2862     // pointers or pointers-to-members and do it all again
2863     // until there are no more pointers or pointers-to-members left to
2864     // unwrap.
2865     UnwrappedAnyPointer = true;
2866 
2867     Qualifiers FromQuals = FromType.getQualifiers();
2868     Qualifiers ToQuals = ToType.getQualifiers();
2869 
2870     // Objective-C ARC:
2871     //   Check Objective-C lifetime conversions.
2872     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2873         UnwrappedAnyPointer) {
2874       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2875         ObjCLifetimeConversion = true;
2876         FromQuals.removeObjCLifetime();
2877         ToQuals.removeObjCLifetime();
2878       } else {
2879         // Qualification conversions cannot cast between different
2880         // Objective-C lifetime qualifiers.
2881         return false;
2882       }
2883     }
2884 
2885     // Allow addition/removal of GC attributes but not changing GC attributes.
2886     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2887         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2888       FromQuals.removeObjCGCAttr();
2889       ToQuals.removeObjCGCAttr();
2890     }
2891 
2892     //   -- for every j > 0, if const is in cv 1,j then const is in cv
2893     //      2,j, and similarly for volatile.
2894     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2895       return false;
2896 
2897     //   -- if the cv 1,j and cv 2,j are different, then const is in
2898     //      every cv for 0 < k < j.
2899     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2900         && !PreviousToQualsIncludeConst)
2901       return false;
2902 
2903     // Keep track of whether all prior cv-qualifiers in the "to" type
2904     // include const.
2905     PreviousToQualsIncludeConst
2906       = PreviousToQualsIncludeConst && ToQuals.hasConst();
2907   }
2908 
2909   // We are left with FromType and ToType being the pointee types
2910   // after unwrapping the original FromType and ToType the same number
2911   // of types. If we unwrapped any pointers, and if FromType and
2912   // ToType have the same unqualified type (since we checked
2913   // qualifiers above), then this is a qualification conversion.
2914   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2915 }
2916 
2917 /// \brief - Determine whether this is a conversion from a scalar type to an
2918 /// atomic type.
2919 ///
2920 /// If successful, updates \c SCS's second and third steps in the conversion
2921 /// sequence to finish the conversion.
2922 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2923                                 bool InOverloadResolution,
2924                                 StandardConversionSequence &SCS,
2925                                 bool CStyle) {
2926   const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2927   if (!ToAtomic)
2928     return false;
2929 
2930   StandardConversionSequence InnerSCS;
2931   if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2932                             InOverloadResolution, InnerSCS,
2933                             CStyle, /*AllowObjCWritebackConversion=*/false))
2934     return false;
2935 
2936   SCS.Second = InnerSCS.Second;
2937   SCS.setToType(1, InnerSCS.getToType(1));
2938   SCS.Third = InnerSCS.Third;
2939   SCS.QualificationIncludesObjCLifetime
2940     = InnerSCS.QualificationIncludesObjCLifetime;
2941   SCS.setToType(2, InnerSCS.getToType(2));
2942   return true;
2943 }
2944 
2945 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2946                                               CXXConstructorDecl *Constructor,
2947                                               QualType Type) {
2948   const FunctionProtoType *CtorType =
2949       Constructor->getType()->getAs<FunctionProtoType>();
2950   if (CtorType->getNumArgs() > 0) {
2951     QualType FirstArg = CtorType->getArgType(0);
2952     if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2953       return true;
2954   }
2955   return false;
2956 }
2957 
2958 static OverloadingResult
2959 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2960                                        CXXRecordDecl *To,
2961                                        UserDefinedConversionSequence &User,
2962                                        OverloadCandidateSet &CandidateSet,
2963                                        bool AllowExplicit) {
2964   DeclContext::lookup_result R = S.LookupConstructors(To);
2965   for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
2966        Con != ConEnd; ++Con) {
2967     NamedDecl *D = *Con;
2968     DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2969 
2970     // Find the constructor (which may be a template).
2971     CXXConstructorDecl *Constructor = 0;
2972     FunctionTemplateDecl *ConstructorTmpl
2973       = dyn_cast<FunctionTemplateDecl>(D);
2974     if (ConstructorTmpl)
2975       Constructor
2976         = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2977     else
2978       Constructor = cast<CXXConstructorDecl>(D);
2979 
2980     bool Usable = !Constructor->isInvalidDecl() &&
2981                   S.isInitListConstructor(Constructor) &&
2982                   (AllowExplicit || !Constructor->isExplicit());
2983     if (Usable) {
2984       // If the first argument is (a reference to) the target type,
2985       // suppress conversions.
2986       bool SuppressUserConversions =
2987           isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2988       if (ConstructorTmpl)
2989         S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2990                                        /*ExplicitArgs*/ 0,
2991                                        From, CandidateSet,
2992                                        SuppressUserConversions);
2993       else
2994         S.AddOverloadCandidate(Constructor, FoundDecl,
2995                                From, CandidateSet,
2996                                SuppressUserConversions);
2997     }
2998   }
2999 
3000   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3001 
3002   OverloadCandidateSet::iterator Best;
3003   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3004   case OR_Success: {
3005     // Record the standard conversion we used and the conversion function.
3006     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
3007     QualType ThisType = Constructor->getThisType(S.Context);
3008     // Initializer lists don't have conversions as such.
3009     User.Before.setAsIdentityConversion();
3010     User.HadMultipleCandidates = HadMultipleCandidates;
3011     User.ConversionFunction = Constructor;
3012     User.FoundConversionFunction = Best->FoundDecl;
3013     User.After.setAsIdentityConversion();
3014     User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3015     User.After.setAllToTypes(ToType);
3016     return OR_Success;
3017   }
3018 
3019   case OR_No_Viable_Function:
3020     return OR_No_Viable_Function;
3021   case OR_Deleted:
3022     return OR_Deleted;
3023   case OR_Ambiguous:
3024     return OR_Ambiguous;
3025   }
3026 
3027   llvm_unreachable("Invalid OverloadResult!");
3028 }
3029 
3030 /// Determines whether there is a user-defined conversion sequence
3031 /// (C++ [over.ics.user]) that converts expression From to the type
3032 /// ToType. If such a conversion exists, User will contain the
3033 /// user-defined conversion sequence that performs such a conversion
3034 /// and this routine will return true. Otherwise, this routine returns
3035 /// false and User is unspecified.
3036 ///
3037 /// \param AllowExplicit  true if the conversion should consider C++0x
3038 /// "explicit" conversion functions as well as non-explicit conversion
3039 /// functions (C++0x [class.conv.fct]p2).
3040 static OverloadingResult
3041 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
3042                         UserDefinedConversionSequence &User,
3043                         OverloadCandidateSet &CandidateSet,
3044                         bool AllowExplicit) {
3045   // Whether we will only visit constructors.
3046   bool ConstructorsOnly = false;
3047 
3048   // If the type we are conversion to is a class type, enumerate its
3049   // constructors.
3050   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
3051     // C++ [over.match.ctor]p1:
3052     //   When objects of class type are direct-initialized (8.5), or
3053     //   copy-initialized from an expression of the same or a
3054     //   derived class type (8.5), overload resolution selects the
3055     //   constructor. [...] For copy-initialization, the candidate
3056     //   functions are all the converting constructors (12.3.1) of
3057     //   that class. The argument list is the expression-list within
3058     //   the parentheses of the initializer.
3059     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
3060         (From->getType()->getAs<RecordType>() &&
3061          S.IsDerivedFrom(From->getType(), ToType)))
3062       ConstructorsOnly = true;
3063 
3064     S.RequireCompleteType(From->getExprLoc(), ToType, 0);
3065     // RequireCompleteType may have returned true due to some invalid decl
3066     // during template instantiation, but ToType may be complete enough now
3067     // to try to recover.
3068     if (ToType->isIncompleteType()) {
3069       // We're not going to find any constructors.
3070     } else if (CXXRecordDecl *ToRecordDecl
3071                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
3072 
3073       Expr **Args = &From;
3074       unsigned NumArgs = 1;
3075       bool ListInitializing = false;
3076       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
3077         // But first, see if there is an init-list-contructor that will work.
3078         OverloadingResult Result = IsInitializerListConstructorConversion(
3079             S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3080         if (Result != OR_No_Viable_Function)
3081           return Result;
3082         // Never mind.
3083         CandidateSet.clear();
3084 
3085         // If we're list-initializing, we pass the individual elements as
3086         // arguments, not the entire list.
3087         Args = InitList->getInits();
3088         NumArgs = InitList->getNumInits();
3089         ListInitializing = true;
3090       }
3091 
3092       DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
3093       for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3094            Con != ConEnd; ++Con) {
3095         NamedDecl *D = *Con;
3096         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3097 
3098         // Find the constructor (which may be a template).
3099         CXXConstructorDecl *Constructor = 0;
3100         FunctionTemplateDecl *ConstructorTmpl
3101           = dyn_cast<FunctionTemplateDecl>(D);
3102         if (ConstructorTmpl)
3103           Constructor
3104             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3105         else
3106           Constructor = cast<CXXConstructorDecl>(D);
3107 
3108         bool Usable = !Constructor->isInvalidDecl();
3109         if (ListInitializing)
3110           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3111         else
3112           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3113         if (Usable) {
3114           bool SuppressUserConversions = !ConstructorsOnly;
3115           if (SuppressUserConversions && ListInitializing) {
3116             SuppressUserConversions = false;
3117             if (NumArgs == 1) {
3118               // If the first argument is (a reference to) the target type,
3119               // suppress conversions.
3120               SuppressUserConversions = isFirstArgumentCompatibleWithType(
3121                                                 S.Context, Constructor, ToType);
3122             }
3123           }
3124           if (ConstructorTmpl)
3125             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3126                                            /*ExplicitArgs*/ 0,
3127                                            llvm::makeArrayRef(Args, NumArgs),
3128                                            CandidateSet, SuppressUserConversions);
3129           else
3130             // Allow one user-defined conversion when user specifies a
3131             // From->ToType conversion via an static cast (c-style, etc).
3132             S.AddOverloadCandidate(Constructor, FoundDecl,
3133                                    llvm::makeArrayRef(Args, NumArgs),
3134                                    CandidateSet, SuppressUserConversions);
3135         }
3136       }
3137     }
3138   }
3139 
3140   // Enumerate conversion functions, if we're allowed to.
3141   if (ConstructorsOnly || isa<InitListExpr>(From)) {
3142   } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3143     // No conversion functions from incomplete types.
3144   } else if (const RecordType *FromRecordType
3145                                    = From->getType()->getAs<RecordType>()) {
3146     if (CXXRecordDecl *FromRecordDecl
3147          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3148       // Add all of the conversion functions as candidates.
3149       std::pair<CXXRecordDecl::conversion_iterator,
3150                 CXXRecordDecl::conversion_iterator>
3151         Conversions = FromRecordDecl->getVisibleConversionFunctions();
3152       for (CXXRecordDecl::conversion_iterator
3153              I = Conversions.first, E = Conversions.second; I != E; ++I) {
3154         DeclAccessPair FoundDecl = I.getPair();
3155         NamedDecl *D = FoundDecl.getDecl();
3156         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3157         if (isa<UsingShadowDecl>(D))
3158           D = cast<UsingShadowDecl>(D)->getTargetDecl();
3159 
3160         CXXConversionDecl *Conv;
3161         FunctionTemplateDecl *ConvTemplate;
3162         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3163           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3164         else
3165           Conv = cast<CXXConversionDecl>(D);
3166 
3167         if (AllowExplicit || !Conv->isExplicit()) {
3168           if (ConvTemplate)
3169             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3170                                              ActingContext, From, ToType,
3171                                              CandidateSet);
3172           else
3173             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3174                                      From, ToType, CandidateSet);
3175         }
3176       }
3177     }
3178   }
3179 
3180   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3181 
3182   OverloadCandidateSet::iterator Best;
3183   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3184   case OR_Success:
3185     // Record the standard conversion we used and the conversion function.
3186     if (CXXConstructorDecl *Constructor
3187           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3188       // C++ [over.ics.user]p1:
3189       //   If the user-defined conversion is specified by a
3190       //   constructor (12.3.1), the initial standard conversion
3191       //   sequence converts the source type to the type required by
3192       //   the argument of the constructor.
3193       //
3194       QualType ThisType = Constructor->getThisType(S.Context);
3195       if (isa<InitListExpr>(From)) {
3196         // Initializer lists don't have conversions as such.
3197         User.Before.setAsIdentityConversion();
3198       } else {
3199         if (Best->Conversions[0].isEllipsis())
3200           User.EllipsisConversion = true;
3201         else {
3202           User.Before = Best->Conversions[0].Standard;
3203           User.EllipsisConversion = false;
3204         }
3205       }
3206       User.HadMultipleCandidates = HadMultipleCandidates;
3207       User.ConversionFunction = Constructor;
3208       User.FoundConversionFunction = Best->FoundDecl;
3209       User.After.setAsIdentityConversion();
3210       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3211       User.After.setAllToTypes(ToType);
3212       return OR_Success;
3213     }
3214     if (CXXConversionDecl *Conversion
3215                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
3216       // C++ [over.ics.user]p1:
3217       //
3218       //   [...] If the user-defined conversion is specified by a
3219       //   conversion function (12.3.2), the initial standard
3220       //   conversion sequence converts the source type to the
3221       //   implicit object parameter of the conversion function.
3222       User.Before = Best->Conversions[0].Standard;
3223       User.HadMultipleCandidates = HadMultipleCandidates;
3224       User.ConversionFunction = Conversion;
3225       User.FoundConversionFunction = Best->FoundDecl;
3226       User.EllipsisConversion = false;
3227 
3228       // C++ [over.ics.user]p2:
3229       //   The second standard conversion sequence converts the
3230       //   result of the user-defined conversion to the target type
3231       //   for the sequence. Since an implicit conversion sequence
3232       //   is an initialization, the special rules for
3233       //   initialization by user-defined conversion apply when
3234       //   selecting the best user-defined conversion for a
3235       //   user-defined conversion sequence (see 13.3.3 and
3236       //   13.3.3.1).
3237       User.After = Best->FinalConversion;
3238       return OR_Success;
3239     }
3240     llvm_unreachable("Not a constructor or conversion function?");
3241 
3242   case OR_No_Viable_Function:
3243     return OR_No_Viable_Function;
3244   case OR_Deleted:
3245     // No conversion here! We're done.
3246     return OR_Deleted;
3247 
3248   case OR_Ambiguous:
3249     return OR_Ambiguous;
3250   }
3251 
3252   llvm_unreachable("Invalid OverloadResult!");
3253 }
3254 
3255 bool
3256 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3257   ImplicitConversionSequence ICS;
3258   OverloadCandidateSet CandidateSet(From->getExprLoc());
3259   OverloadingResult OvResult =
3260     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3261                             CandidateSet, false);
3262   if (OvResult == OR_Ambiguous)
3263     Diag(From->getLocStart(),
3264          diag::err_typecheck_ambiguous_condition)
3265           << From->getType() << ToType << From->getSourceRange();
3266   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
3267     Diag(From->getLocStart(),
3268          diag::err_typecheck_nonviable_condition)
3269     << From->getType() << ToType << From->getSourceRange();
3270   else
3271     return false;
3272   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3273   return true;
3274 }
3275 
3276 /// \brief Compare the user-defined conversion functions or constructors
3277 /// of two user-defined conversion sequences to determine whether any ordering
3278 /// is possible.
3279 static ImplicitConversionSequence::CompareKind
3280 compareConversionFunctions(Sema &S,
3281                            FunctionDecl *Function1,
3282                            FunctionDecl *Function2) {
3283   if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
3284     return ImplicitConversionSequence::Indistinguishable;
3285 
3286   // Objective-C++:
3287   //   If both conversion functions are implicitly-declared conversions from
3288   //   a lambda closure type to a function pointer and a block pointer,
3289   //   respectively, always prefer the conversion to a function pointer,
3290   //   because the function pointer is more lightweight and is more likely
3291   //   to keep code working.
3292   CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3293   if (!Conv1)
3294     return ImplicitConversionSequence::Indistinguishable;
3295 
3296   CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3297   if (!Conv2)
3298     return ImplicitConversionSequence::Indistinguishable;
3299 
3300   if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3301     bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3302     bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3303     if (Block1 != Block2)
3304       return Block1? ImplicitConversionSequence::Worse
3305                    : ImplicitConversionSequence::Better;
3306   }
3307 
3308   return ImplicitConversionSequence::Indistinguishable;
3309 }
3310 
3311 /// CompareImplicitConversionSequences - Compare two implicit
3312 /// conversion sequences to determine whether one is better than the
3313 /// other or if they are indistinguishable (C++ 13.3.3.2).
3314 static ImplicitConversionSequence::CompareKind
3315 CompareImplicitConversionSequences(Sema &S,
3316                                    const ImplicitConversionSequence& ICS1,
3317                                    const ImplicitConversionSequence& ICS2)
3318 {
3319   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3320   // conversion sequences (as defined in 13.3.3.1)
3321   //   -- a standard conversion sequence (13.3.3.1.1) is a better
3322   //      conversion sequence than a user-defined conversion sequence or
3323   //      an ellipsis conversion sequence, and
3324   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3325   //      conversion sequence than an ellipsis conversion sequence
3326   //      (13.3.3.1.3).
3327   //
3328   // C++0x [over.best.ics]p10:
3329   //   For the purpose of ranking implicit conversion sequences as
3330   //   described in 13.3.3.2, the ambiguous conversion sequence is
3331   //   treated as a user-defined sequence that is indistinguishable
3332   //   from any other user-defined conversion sequence.
3333   if (ICS1.getKindRank() < ICS2.getKindRank())
3334     return ImplicitConversionSequence::Better;
3335   if (ICS2.getKindRank() < ICS1.getKindRank())
3336     return ImplicitConversionSequence::Worse;
3337 
3338   // The following checks require both conversion sequences to be of
3339   // the same kind.
3340   if (ICS1.getKind() != ICS2.getKind())
3341     return ImplicitConversionSequence::Indistinguishable;
3342 
3343   ImplicitConversionSequence::CompareKind Result =
3344       ImplicitConversionSequence::Indistinguishable;
3345 
3346   // Two implicit conversion sequences of the same form are
3347   // indistinguishable conversion sequences unless one of the
3348   // following rules apply: (C++ 13.3.3.2p3):
3349   if (ICS1.isStandard())
3350     Result = CompareStandardConversionSequences(S,
3351                                                 ICS1.Standard, ICS2.Standard);
3352   else if (ICS1.isUserDefined()) {
3353     // User-defined conversion sequence U1 is a better conversion
3354     // sequence than another user-defined conversion sequence U2 if
3355     // they contain the same user-defined conversion function or
3356     // constructor and if the second standard conversion sequence of
3357     // U1 is better than the second standard conversion sequence of
3358     // U2 (C++ 13.3.3.2p3).
3359     if (ICS1.UserDefined.ConversionFunction ==
3360           ICS2.UserDefined.ConversionFunction)
3361       Result = CompareStandardConversionSequences(S,
3362                                                   ICS1.UserDefined.After,
3363                                                   ICS2.UserDefined.After);
3364     else
3365       Result = compareConversionFunctions(S,
3366                                           ICS1.UserDefined.ConversionFunction,
3367                                           ICS2.UserDefined.ConversionFunction);
3368   }
3369 
3370   // List-initialization sequence L1 is a better conversion sequence than
3371   // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3372   // for some X and L2 does not.
3373   if (Result == ImplicitConversionSequence::Indistinguishable &&
3374       !ICS1.isBad() &&
3375       ICS1.isListInitializationSequence() &&
3376       ICS2.isListInitializationSequence()) {
3377     if (ICS1.isStdInitializerListElement() &&
3378         !ICS2.isStdInitializerListElement())
3379       return ImplicitConversionSequence::Better;
3380     if (!ICS1.isStdInitializerListElement() &&
3381         ICS2.isStdInitializerListElement())
3382       return ImplicitConversionSequence::Worse;
3383   }
3384 
3385   return Result;
3386 }
3387 
3388 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3389   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3390     Qualifiers Quals;
3391     T1 = Context.getUnqualifiedArrayType(T1, Quals);
3392     T2 = Context.getUnqualifiedArrayType(T2, Quals);
3393   }
3394 
3395   return Context.hasSameUnqualifiedType(T1, T2);
3396 }
3397 
3398 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3399 // determine if one is a proper subset of the other.
3400 static ImplicitConversionSequence::CompareKind
3401 compareStandardConversionSubsets(ASTContext &Context,
3402                                  const StandardConversionSequence& SCS1,
3403                                  const StandardConversionSequence& SCS2) {
3404   ImplicitConversionSequence::CompareKind Result
3405     = ImplicitConversionSequence::Indistinguishable;
3406 
3407   // the identity conversion sequence is considered to be a subsequence of
3408   // any non-identity conversion sequence
3409   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3410     return ImplicitConversionSequence::Better;
3411   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3412     return ImplicitConversionSequence::Worse;
3413 
3414   if (SCS1.Second != SCS2.Second) {
3415     if (SCS1.Second == ICK_Identity)
3416       Result = ImplicitConversionSequence::Better;
3417     else if (SCS2.Second == ICK_Identity)
3418       Result = ImplicitConversionSequence::Worse;
3419     else
3420       return ImplicitConversionSequence::Indistinguishable;
3421   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3422     return ImplicitConversionSequence::Indistinguishable;
3423 
3424   if (SCS1.Third == SCS2.Third) {
3425     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3426                              : ImplicitConversionSequence::Indistinguishable;
3427   }
3428 
3429   if (SCS1.Third == ICK_Identity)
3430     return Result == ImplicitConversionSequence::Worse
3431              ? ImplicitConversionSequence::Indistinguishable
3432              : ImplicitConversionSequence::Better;
3433 
3434   if (SCS2.Third == ICK_Identity)
3435     return Result == ImplicitConversionSequence::Better
3436              ? ImplicitConversionSequence::Indistinguishable
3437              : ImplicitConversionSequence::Worse;
3438 
3439   return ImplicitConversionSequence::Indistinguishable;
3440 }
3441 
3442 /// \brief Determine whether one of the given reference bindings is better
3443 /// than the other based on what kind of bindings they are.
3444 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3445                                        const StandardConversionSequence &SCS2) {
3446   // C++0x [over.ics.rank]p3b4:
3447   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3448   //      implicit object parameter of a non-static member function declared
3449   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3450   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3451   //      lvalue reference to a function lvalue and S2 binds an rvalue
3452   //      reference*.
3453   //
3454   // FIXME: Rvalue references. We're going rogue with the above edits,
3455   // because the semantics in the current C++0x working paper (N3225 at the
3456   // time of this writing) break the standard definition of std::forward
3457   // and std::reference_wrapper when dealing with references to functions.
3458   // Proposed wording changes submitted to CWG for consideration.
3459   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3460       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3461     return false;
3462 
3463   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3464           SCS2.IsLvalueReference) ||
3465          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3466           !SCS2.IsLvalueReference);
3467 }
3468 
3469 /// CompareStandardConversionSequences - Compare two standard
3470 /// conversion sequences to determine whether one is better than the
3471 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3472 static ImplicitConversionSequence::CompareKind
3473 CompareStandardConversionSequences(Sema &S,
3474                                    const StandardConversionSequence& SCS1,
3475                                    const StandardConversionSequence& SCS2)
3476 {
3477   // Standard conversion sequence S1 is a better conversion sequence
3478   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3479 
3480   //  -- S1 is a proper subsequence of S2 (comparing the conversion
3481   //     sequences in the canonical form defined by 13.3.3.1.1,
3482   //     excluding any Lvalue Transformation; the identity conversion
3483   //     sequence is considered to be a subsequence of any
3484   //     non-identity conversion sequence) or, if not that,
3485   if (ImplicitConversionSequence::CompareKind CK
3486         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3487     return CK;
3488 
3489   //  -- the rank of S1 is better than the rank of S2 (by the rules
3490   //     defined below), or, if not that,
3491   ImplicitConversionRank Rank1 = SCS1.getRank();
3492   ImplicitConversionRank Rank2 = SCS2.getRank();
3493   if (Rank1 < Rank2)
3494     return ImplicitConversionSequence::Better;
3495   else if (Rank2 < Rank1)
3496     return ImplicitConversionSequence::Worse;
3497 
3498   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3499   // are indistinguishable unless one of the following rules
3500   // applies:
3501 
3502   //   A conversion that is not a conversion of a pointer, or
3503   //   pointer to member, to bool is better than another conversion
3504   //   that is such a conversion.
3505   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3506     return SCS2.isPointerConversionToBool()
3507              ? ImplicitConversionSequence::Better
3508              : ImplicitConversionSequence::Worse;
3509 
3510   // C++ [over.ics.rank]p4b2:
3511   //
3512   //   If class B is derived directly or indirectly from class A,
3513   //   conversion of B* to A* is better than conversion of B* to
3514   //   void*, and conversion of A* to void* is better than conversion
3515   //   of B* to void*.
3516   bool SCS1ConvertsToVoid
3517     = SCS1.isPointerConversionToVoidPointer(S.Context);
3518   bool SCS2ConvertsToVoid
3519     = SCS2.isPointerConversionToVoidPointer(S.Context);
3520   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3521     // Exactly one of the conversion sequences is a conversion to
3522     // a void pointer; it's the worse conversion.
3523     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3524                               : ImplicitConversionSequence::Worse;
3525   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3526     // Neither conversion sequence converts to a void pointer; compare
3527     // their derived-to-base conversions.
3528     if (ImplicitConversionSequence::CompareKind DerivedCK
3529           = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3530       return DerivedCK;
3531   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3532              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3533     // Both conversion sequences are conversions to void
3534     // pointers. Compare the source types to determine if there's an
3535     // inheritance relationship in their sources.
3536     QualType FromType1 = SCS1.getFromType();
3537     QualType FromType2 = SCS2.getFromType();
3538 
3539     // Adjust the types we're converting from via the array-to-pointer
3540     // conversion, if we need to.
3541     if (SCS1.First == ICK_Array_To_Pointer)
3542       FromType1 = S.Context.getArrayDecayedType(FromType1);
3543     if (SCS2.First == ICK_Array_To_Pointer)
3544       FromType2 = S.Context.getArrayDecayedType(FromType2);
3545 
3546     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3547     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3548 
3549     if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3550       return ImplicitConversionSequence::Better;
3551     else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3552       return ImplicitConversionSequence::Worse;
3553 
3554     // Objective-C++: If one interface is more specific than the
3555     // other, it is the better one.
3556     const ObjCObjectPointerType* FromObjCPtr1
3557       = FromType1->getAs<ObjCObjectPointerType>();
3558     const ObjCObjectPointerType* FromObjCPtr2
3559       = FromType2->getAs<ObjCObjectPointerType>();
3560     if (FromObjCPtr1 && FromObjCPtr2) {
3561       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3562                                                           FromObjCPtr2);
3563       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3564                                                            FromObjCPtr1);
3565       if (AssignLeft != AssignRight) {
3566         return AssignLeft? ImplicitConversionSequence::Better
3567                          : ImplicitConversionSequence::Worse;
3568       }
3569     }
3570   }
3571 
3572   // Compare based on qualification conversions (C++ 13.3.3.2p3,
3573   // bullet 3).
3574   if (ImplicitConversionSequence::CompareKind QualCK
3575         = CompareQualificationConversions(S, SCS1, SCS2))
3576     return QualCK;
3577 
3578   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3579     // Check for a better reference binding based on the kind of bindings.
3580     if (isBetterReferenceBindingKind(SCS1, SCS2))
3581       return ImplicitConversionSequence::Better;
3582     else if (isBetterReferenceBindingKind(SCS2, SCS1))
3583       return ImplicitConversionSequence::Worse;
3584 
3585     // C++ [over.ics.rank]p3b4:
3586     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3587     //      which the references refer are the same type except for
3588     //      top-level cv-qualifiers, and the type to which the reference
3589     //      initialized by S2 refers is more cv-qualified than the type
3590     //      to which the reference initialized by S1 refers.
3591     QualType T1 = SCS1.getToType(2);
3592     QualType T2 = SCS2.getToType(2);
3593     T1 = S.Context.getCanonicalType(T1);
3594     T2 = S.Context.getCanonicalType(T2);
3595     Qualifiers T1Quals, T2Quals;
3596     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3597     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3598     if (UnqualT1 == UnqualT2) {
3599       // Objective-C++ ARC: If the references refer to objects with different
3600       // lifetimes, prefer bindings that don't change lifetime.
3601       if (SCS1.ObjCLifetimeConversionBinding !=
3602                                           SCS2.ObjCLifetimeConversionBinding) {
3603         return SCS1.ObjCLifetimeConversionBinding
3604                                            ? ImplicitConversionSequence::Worse
3605                                            : ImplicitConversionSequence::Better;
3606       }
3607 
3608       // If the type is an array type, promote the element qualifiers to the
3609       // type for comparison.
3610       if (isa<ArrayType>(T1) && T1Quals)
3611         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3612       if (isa<ArrayType>(T2) && T2Quals)
3613         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3614       if (T2.isMoreQualifiedThan(T1))
3615         return ImplicitConversionSequence::Better;
3616       else if (T1.isMoreQualifiedThan(T2))
3617         return ImplicitConversionSequence::Worse;
3618     }
3619   }
3620 
3621   // In Microsoft mode, prefer an integral conversion to a
3622   // floating-to-integral conversion if the integral conversion
3623   // is between types of the same size.
3624   // For example:
3625   // void f(float);
3626   // void f(int);
3627   // int main {
3628   //    long a;
3629   //    f(a);
3630   // }
3631   // Here, MSVC will call f(int) instead of generating a compile error
3632   // as clang will do in standard mode.
3633   if (S.getLangOpts().MicrosoftMode &&
3634       SCS1.Second == ICK_Integral_Conversion &&
3635       SCS2.Second == ICK_Floating_Integral &&
3636       S.Context.getTypeSize(SCS1.getFromType()) ==
3637       S.Context.getTypeSize(SCS1.getToType(2)))
3638     return ImplicitConversionSequence::Better;
3639 
3640   return ImplicitConversionSequence::Indistinguishable;
3641 }
3642 
3643 /// CompareQualificationConversions - Compares two standard conversion
3644 /// sequences to determine whether they can be ranked based on their
3645 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3646 ImplicitConversionSequence::CompareKind
3647 CompareQualificationConversions(Sema &S,
3648                                 const StandardConversionSequence& SCS1,
3649                                 const StandardConversionSequence& SCS2) {
3650   // C++ 13.3.3.2p3:
3651   //  -- S1 and S2 differ only in their qualification conversion and
3652   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3653   //     cv-qualification signature of type T1 is a proper subset of
3654   //     the cv-qualification signature of type T2, and S1 is not the
3655   //     deprecated string literal array-to-pointer conversion (4.2).
3656   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3657       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3658     return ImplicitConversionSequence::Indistinguishable;
3659 
3660   // FIXME: the example in the standard doesn't use a qualification
3661   // conversion (!)
3662   QualType T1 = SCS1.getToType(2);
3663   QualType T2 = SCS2.getToType(2);
3664   T1 = S.Context.getCanonicalType(T1);
3665   T2 = S.Context.getCanonicalType(T2);
3666   Qualifiers T1Quals, T2Quals;
3667   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3668   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3669 
3670   // If the types are the same, we won't learn anything by unwrapped
3671   // them.
3672   if (UnqualT1 == UnqualT2)
3673     return ImplicitConversionSequence::Indistinguishable;
3674 
3675   // If the type is an array type, promote the element qualifiers to the type
3676   // for comparison.
3677   if (isa<ArrayType>(T1) && T1Quals)
3678     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3679   if (isa<ArrayType>(T2) && T2Quals)
3680     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3681 
3682   ImplicitConversionSequence::CompareKind Result
3683     = ImplicitConversionSequence::Indistinguishable;
3684 
3685   // Objective-C++ ARC:
3686   //   Prefer qualification conversions not involving a change in lifetime
3687   //   to qualification conversions that do not change lifetime.
3688   if (SCS1.QualificationIncludesObjCLifetime !=
3689                                       SCS2.QualificationIncludesObjCLifetime) {
3690     Result = SCS1.QualificationIncludesObjCLifetime
3691                ? ImplicitConversionSequence::Worse
3692                : ImplicitConversionSequence::Better;
3693   }
3694 
3695   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3696     // Within each iteration of the loop, we check the qualifiers to
3697     // determine if this still looks like a qualification
3698     // conversion. Then, if all is well, we unwrap one more level of
3699     // pointers or pointers-to-members and do it all again
3700     // until there are no more pointers or pointers-to-members left
3701     // to unwrap. This essentially mimics what
3702     // IsQualificationConversion does, but here we're checking for a
3703     // strict subset of qualifiers.
3704     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3705       // The qualifiers are the same, so this doesn't tell us anything
3706       // about how the sequences rank.
3707       ;
3708     else if (T2.isMoreQualifiedThan(T1)) {
3709       // T1 has fewer qualifiers, so it could be the better sequence.
3710       if (Result == ImplicitConversionSequence::Worse)
3711         // Neither has qualifiers that are a subset of the other's
3712         // qualifiers.
3713         return ImplicitConversionSequence::Indistinguishable;
3714 
3715       Result = ImplicitConversionSequence::Better;
3716     } else if (T1.isMoreQualifiedThan(T2)) {
3717       // T2 has fewer qualifiers, so it could be the better sequence.
3718       if (Result == ImplicitConversionSequence::Better)
3719         // Neither has qualifiers that are a subset of the other's
3720         // qualifiers.
3721         return ImplicitConversionSequence::Indistinguishable;
3722 
3723       Result = ImplicitConversionSequence::Worse;
3724     } else {
3725       // Qualifiers are disjoint.
3726       return ImplicitConversionSequence::Indistinguishable;
3727     }
3728 
3729     // If the types after this point are equivalent, we're done.
3730     if (S.Context.hasSameUnqualifiedType(T1, T2))
3731       break;
3732   }
3733 
3734   // Check that the winning standard conversion sequence isn't using
3735   // the deprecated string literal array to pointer conversion.
3736   switch (Result) {
3737   case ImplicitConversionSequence::Better:
3738     if (SCS1.DeprecatedStringLiteralToCharPtr)
3739       Result = ImplicitConversionSequence::Indistinguishable;
3740     break;
3741 
3742   case ImplicitConversionSequence::Indistinguishable:
3743     break;
3744 
3745   case ImplicitConversionSequence::Worse:
3746     if (SCS2.DeprecatedStringLiteralToCharPtr)
3747       Result = ImplicitConversionSequence::Indistinguishable;
3748     break;
3749   }
3750 
3751   return Result;
3752 }
3753 
3754 /// CompareDerivedToBaseConversions - Compares two standard conversion
3755 /// sequences to determine whether they can be ranked based on their
3756 /// various kinds of derived-to-base conversions (C++
3757 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
3758 /// conversions between Objective-C interface types.
3759 ImplicitConversionSequence::CompareKind
3760 CompareDerivedToBaseConversions(Sema &S,
3761                                 const StandardConversionSequence& SCS1,
3762                                 const StandardConversionSequence& SCS2) {
3763   QualType FromType1 = SCS1.getFromType();
3764   QualType ToType1 = SCS1.getToType(1);
3765   QualType FromType2 = SCS2.getFromType();
3766   QualType ToType2 = SCS2.getToType(1);
3767 
3768   // Adjust the types we're converting from via the array-to-pointer
3769   // conversion, if we need to.
3770   if (SCS1.First == ICK_Array_To_Pointer)
3771     FromType1 = S.Context.getArrayDecayedType(FromType1);
3772   if (SCS2.First == ICK_Array_To_Pointer)
3773     FromType2 = S.Context.getArrayDecayedType(FromType2);
3774 
3775   // Canonicalize all of the types.
3776   FromType1 = S.Context.getCanonicalType(FromType1);
3777   ToType1 = S.Context.getCanonicalType(ToType1);
3778   FromType2 = S.Context.getCanonicalType(FromType2);
3779   ToType2 = S.Context.getCanonicalType(ToType2);
3780 
3781   // C++ [over.ics.rank]p4b3:
3782   //
3783   //   If class B is derived directly or indirectly from class A and
3784   //   class C is derived directly or indirectly from B,
3785   //
3786   // Compare based on pointer conversions.
3787   if (SCS1.Second == ICK_Pointer_Conversion &&
3788       SCS2.Second == ICK_Pointer_Conversion &&
3789       /*FIXME: Remove if Objective-C id conversions get their own rank*/
3790       FromType1->isPointerType() && FromType2->isPointerType() &&
3791       ToType1->isPointerType() && ToType2->isPointerType()) {
3792     QualType FromPointee1
3793       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3794     QualType ToPointee1
3795       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3796     QualType FromPointee2
3797       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3798     QualType ToPointee2
3799       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3800 
3801     //   -- conversion of C* to B* is better than conversion of C* to A*,
3802     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3803       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3804         return ImplicitConversionSequence::Better;
3805       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3806         return ImplicitConversionSequence::Worse;
3807     }
3808 
3809     //   -- conversion of B* to A* is better than conversion of C* to A*,
3810     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3811       if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3812         return ImplicitConversionSequence::Better;
3813       else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3814         return ImplicitConversionSequence::Worse;
3815     }
3816   } else if (SCS1.Second == ICK_Pointer_Conversion &&
3817              SCS2.Second == ICK_Pointer_Conversion) {
3818     const ObjCObjectPointerType *FromPtr1
3819       = FromType1->getAs<ObjCObjectPointerType>();
3820     const ObjCObjectPointerType *FromPtr2
3821       = FromType2->getAs<ObjCObjectPointerType>();
3822     const ObjCObjectPointerType *ToPtr1
3823       = ToType1->getAs<ObjCObjectPointerType>();
3824     const ObjCObjectPointerType *ToPtr2
3825       = ToType2->getAs<ObjCObjectPointerType>();
3826 
3827     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3828       // Apply the same conversion ranking rules for Objective-C pointer types
3829       // that we do for C++ pointers to class types. However, we employ the
3830       // Objective-C pseudo-subtyping relationship used for assignment of
3831       // Objective-C pointer types.
3832       bool FromAssignLeft
3833         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3834       bool FromAssignRight
3835         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3836       bool ToAssignLeft
3837         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3838       bool ToAssignRight
3839         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3840 
3841       // A conversion to an a non-id object pointer type or qualified 'id'
3842       // type is better than a conversion to 'id'.
3843       if (ToPtr1->isObjCIdType() &&
3844           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3845         return ImplicitConversionSequence::Worse;
3846       if (ToPtr2->isObjCIdType() &&
3847           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3848         return ImplicitConversionSequence::Better;
3849 
3850       // A conversion to a non-id object pointer type is better than a
3851       // conversion to a qualified 'id' type
3852       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3853         return ImplicitConversionSequence::Worse;
3854       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3855         return ImplicitConversionSequence::Better;
3856 
3857       // A conversion to an a non-Class object pointer type or qualified 'Class'
3858       // type is better than a conversion to 'Class'.
3859       if (ToPtr1->isObjCClassType() &&
3860           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3861         return ImplicitConversionSequence::Worse;
3862       if (ToPtr2->isObjCClassType() &&
3863           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3864         return ImplicitConversionSequence::Better;
3865 
3866       // A conversion to a non-Class object pointer type is better than a
3867       // conversion to a qualified 'Class' type.
3868       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3869         return ImplicitConversionSequence::Worse;
3870       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3871         return ImplicitConversionSequence::Better;
3872 
3873       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3874       if (S.Context.hasSameType(FromType1, FromType2) &&
3875           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3876           (ToAssignLeft != ToAssignRight))
3877         return ToAssignLeft? ImplicitConversionSequence::Worse
3878                            : ImplicitConversionSequence::Better;
3879 
3880       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3881       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3882           (FromAssignLeft != FromAssignRight))
3883         return FromAssignLeft? ImplicitConversionSequence::Better
3884         : ImplicitConversionSequence::Worse;
3885     }
3886   }
3887 
3888   // Ranking of member-pointer types.
3889   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3890       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3891       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3892     const MemberPointerType * FromMemPointer1 =
3893                                         FromType1->getAs<MemberPointerType>();
3894     const MemberPointerType * ToMemPointer1 =
3895                                           ToType1->getAs<MemberPointerType>();
3896     const MemberPointerType * FromMemPointer2 =
3897                                           FromType2->getAs<MemberPointerType>();
3898     const MemberPointerType * ToMemPointer2 =
3899                                           ToType2->getAs<MemberPointerType>();
3900     const Type *FromPointeeType1 = FromMemPointer1->getClass();
3901     const Type *ToPointeeType1 = ToMemPointer1->getClass();
3902     const Type *FromPointeeType2 = FromMemPointer2->getClass();
3903     const Type *ToPointeeType2 = ToMemPointer2->getClass();
3904     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3905     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3906     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3907     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3908     // conversion of A::* to B::* is better than conversion of A::* to C::*,
3909     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3910       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3911         return ImplicitConversionSequence::Worse;
3912       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3913         return ImplicitConversionSequence::Better;
3914     }
3915     // conversion of B::* to C::* is better than conversion of A::* to C::*
3916     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3917       if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3918         return ImplicitConversionSequence::Better;
3919       else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3920         return ImplicitConversionSequence::Worse;
3921     }
3922   }
3923 
3924   if (SCS1.Second == ICK_Derived_To_Base) {
3925     //   -- conversion of C to B is better than conversion of C to A,
3926     //   -- binding of an expression of type C to a reference of type
3927     //      B& is better than binding an expression of type C to a
3928     //      reference of type A&,
3929     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3930         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3931       if (S.IsDerivedFrom(ToType1, ToType2))
3932         return ImplicitConversionSequence::Better;
3933       else if (S.IsDerivedFrom(ToType2, ToType1))
3934         return ImplicitConversionSequence::Worse;
3935     }
3936 
3937     //   -- conversion of B to A is better than conversion of C to A.
3938     //   -- binding of an expression of type B to a reference of type
3939     //      A& is better than binding an expression of type C to a
3940     //      reference of type A&,
3941     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3942         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3943       if (S.IsDerivedFrom(FromType2, FromType1))
3944         return ImplicitConversionSequence::Better;
3945       else if (S.IsDerivedFrom(FromType1, FromType2))
3946         return ImplicitConversionSequence::Worse;
3947     }
3948   }
3949 
3950   return ImplicitConversionSequence::Indistinguishable;
3951 }
3952 
3953 /// \brief Determine whether the given type is valid, e.g., it is not an invalid
3954 /// C++ class.
3955 static bool isTypeValid(QualType T) {
3956   if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
3957     return !Record->isInvalidDecl();
3958 
3959   return true;
3960 }
3961 
3962 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
3963 /// determine whether they are reference-related,
3964 /// reference-compatible, reference-compatible with added
3965 /// qualification, or incompatible, for use in C++ initialization by
3966 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3967 /// type, and the first type (T1) is the pointee type of the reference
3968 /// type being initialized.
3969 Sema::ReferenceCompareResult
3970 Sema::CompareReferenceRelationship(SourceLocation Loc,
3971                                    QualType OrigT1, QualType OrigT2,
3972                                    bool &DerivedToBase,
3973                                    bool &ObjCConversion,
3974                                    bool &ObjCLifetimeConversion) {
3975   assert(!OrigT1->isReferenceType() &&
3976     "T1 must be the pointee type of the reference type");
3977   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3978 
3979   QualType T1 = Context.getCanonicalType(OrigT1);
3980   QualType T2 = Context.getCanonicalType(OrigT2);
3981   Qualifiers T1Quals, T2Quals;
3982   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3983   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3984 
3985   // C++ [dcl.init.ref]p4:
3986   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3987   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3988   //   T1 is a base class of T2.
3989   DerivedToBase = false;
3990   ObjCConversion = false;
3991   ObjCLifetimeConversion = false;
3992   if (UnqualT1 == UnqualT2) {
3993     // Nothing to do.
3994   } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3995              isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
3996              IsDerivedFrom(UnqualT2, UnqualT1))
3997     DerivedToBase = true;
3998   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3999            UnqualT2->isObjCObjectOrInterfaceType() &&
4000            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
4001     ObjCConversion = true;
4002   else
4003     return Ref_Incompatible;
4004 
4005   // At this point, we know that T1 and T2 are reference-related (at
4006   // least).
4007 
4008   // If the type is an array type, promote the element qualifiers to the type
4009   // for comparison.
4010   if (isa<ArrayType>(T1) && T1Quals)
4011     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
4012   if (isa<ArrayType>(T2) && T2Quals)
4013     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
4014 
4015   // C++ [dcl.init.ref]p4:
4016   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
4017   //   reference-related to T2 and cv1 is the same cv-qualification
4018   //   as, or greater cv-qualification than, cv2. For purposes of
4019   //   overload resolution, cases for which cv1 is greater
4020   //   cv-qualification than cv2 are identified as
4021   //   reference-compatible with added qualification (see 13.3.3.2).
4022   //
4023   // Note that we also require equivalence of Objective-C GC and address-space
4024   // qualifiers when performing these computations, so that e.g., an int in
4025   // address space 1 is not reference-compatible with an int in address
4026   // space 2.
4027   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
4028       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
4029     T1Quals.removeObjCLifetime();
4030     T2Quals.removeObjCLifetime();
4031     ObjCLifetimeConversion = true;
4032   }
4033 
4034   if (T1Quals == T2Quals)
4035     return Ref_Compatible;
4036   else if (T1Quals.compatiblyIncludes(T2Quals))
4037     return Ref_Compatible_With_Added_Qualification;
4038   else
4039     return Ref_Related;
4040 }
4041 
4042 /// \brief Look for a user-defined conversion to an value reference-compatible
4043 ///        with DeclType. Return true if something definite is found.
4044 static bool
4045 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
4046                          QualType DeclType, SourceLocation DeclLoc,
4047                          Expr *Init, QualType T2, bool AllowRvalues,
4048                          bool AllowExplicit) {
4049   assert(T2->isRecordType() && "Can only find conversions of record types.");
4050   CXXRecordDecl *T2RecordDecl
4051     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
4052 
4053   OverloadCandidateSet CandidateSet(DeclLoc);
4054   std::pair<CXXRecordDecl::conversion_iterator,
4055             CXXRecordDecl::conversion_iterator>
4056     Conversions = T2RecordDecl->getVisibleConversionFunctions();
4057   for (CXXRecordDecl::conversion_iterator
4058          I = Conversions.first, E = Conversions.second; I != E; ++I) {
4059     NamedDecl *D = *I;
4060     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
4061     if (isa<UsingShadowDecl>(D))
4062       D = cast<UsingShadowDecl>(D)->getTargetDecl();
4063 
4064     FunctionTemplateDecl *ConvTemplate
4065       = dyn_cast<FunctionTemplateDecl>(D);
4066     CXXConversionDecl *Conv;
4067     if (ConvTemplate)
4068       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
4069     else
4070       Conv = cast<CXXConversionDecl>(D);
4071 
4072     // If this is an explicit conversion, and we're not allowed to consider
4073     // explicit conversions, skip it.
4074     if (!AllowExplicit && Conv->isExplicit())
4075       continue;
4076 
4077     if (AllowRvalues) {
4078       bool DerivedToBase = false;
4079       bool ObjCConversion = false;
4080       bool ObjCLifetimeConversion = false;
4081 
4082       // If we are initializing an rvalue reference, don't permit conversion
4083       // functions that return lvalues.
4084       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
4085         const ReferenceType *RefType
4086           = Conv->getConversionType()->getAs<LValueReferenceType>();
4087         if (RefType && !RefType->getPointeeType()->isFunctionType())
4088           continue;
4089       }
4090 
4091       if (!ConvTemplate &&
4092           S.CompareReferenceRelationship(
4093             DeclLoc,
4094             Conv->getConversionType().getNonReferenceType()
4095               .getUnqualifiedType(),
4096             DeclType.getNonReferenceType().getUnqualifiedType(),
4097             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4098           Sema::Ref_Incompatible)
4099         continue;
4100     } else {
4101       // If the conversion function doesn't return a reference type,
4102       // it can't be considered for this conversion. An rvalue reference
4103       // is only acceptable if its referencee is a function type.
4104 
4105       const ReferenceType *RefType =
4106         Conv->getConversionType()->getAs<ReferenceType>();
4107       if (!RefType ||
4108           (!RefType->isLValueReferenceType() &&
4109            !RefType->getPointeeType()->isFunctionType()))
4110         continue;
4111     }
4112 
4113     if (ConvTemplate)
4114       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4115                                        Init, DeclType, CandidateSet);
4116     else
4117       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4118                                DeclType, CandidateSet);
4119   }
4120 
4121   bool HadMultipleCandidates = (CandidateSet.size() > 1);
4122 
4123   OverloadCandidateSet::iterator Best;
4124   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4125   case OR_Success:
4126     // C++ [over.ics.ref]p1:
4127     //
4128     //   [...] If the parameter binds directly to the result of
4129     //   applying a conversion function to the argument
4130     //   expression, the implicit conversion sequence is a
4131     //   user-defined conversion sequence (13.3.3.1.2), with the
4132     //   second standard conversion sequence either an identity
4133     //   conversion or, if the conversion function returns an
4134     //   entity of a type that is a derived class of the parameter
4135     //   type, a derived-to-base Conversion.
4136     if (!Best->FinalConversion.DirectBinding)
4137       return false;
4138 
4139     ICS.setUserDefined();
4140     ICS.UserDefined.Before = Best->Conversions[0].Standard;
4141     ICS.UserDefined.After = Best->FinalConversion;
4142     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4143     ICS.UserDefined.ConversionFunction = Best->Function;
4144     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4145     ICS.UserDefined.EllipsisConversion = false;
4146     assert(ICS.UserDefined.After.ReferenceBinding &&
4147            ICS.UserDefined.After.DirectBinding &&
4148            "Expected a direct reference binding!");
4149     return true;
4150 
4151   case OR_Ambiguous:
4152     ICS.setAmbiguous();
4153     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4154          Cand != CandidateSet.end(); ++Cand)
4155       if (Cand->Viable)
4156         ICS.Ambiguous.addConversion(Cand->Function);
4157     return true;
4158 
4159   case OR_No_Viable_Function:
4160   case OR_Deleted:
4161     // There was no suitable conversion, or we found a deleted
4162     // conversion; continue with other checks.
4163     return false;
4164   }
4165 
4166   llvm_unreachable("Invalid OverloadResult!");
4167 }
4168 
4169 /// \brief Compute an implicit conversion sequence for reference
4170 /// initialization.
4171 static ImplicitConversionSequence
4172 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4173                  SourceLocation DeclLoc,
4174                  bool SuppressUserConversions,
4175                  bool AllowExplicit) {
4176   assert(DeclType->isReferenceType() && "Reference init needs a reference");
4177 
4178   // Most paths end in a failed conversion.
4179   ImplicitConversionSequence ICS;
4180   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4181 
4182   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4183   QualType T2 = Init->getType();
4184 
4185   // If the initializer is the address of an overloaded function, try
4186   // to resolve the overloaded function. If all goes well, T2 is the
4187   // type of the resulting function.
4188   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4189     DeclAccessPair Found;
4190     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4191                                                                 false, Found))
4192       T2 = Fn->getType();
4193   }
4194 
4195   // Compute some basic properties of the types and the initializer.
4196   bool isRValRef = DeclType->isRValueReferenceType();
4197   bool DerivedToBase = false;
4198   bool ObjCConversion = false;
4199   bool ObjCLifetimeConversion = false;
4200   Expr::Classification InitCategory = Init->Classify(S.Context);
4201   Sema::ReferenceCompareResult RefRelationship
4202     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4203                                      ObjCConversion, ObjCLifetimeConversion);
4204 
4205 
4206   // C++0x [dcl.init.ref]p5:
4207   //   A reference to type "cv1 T1" is initialized by an expression
4208   //   of type "cv2 T2" as follows:
4209 
4210   //     -- If reference is an lvalue reference and the initializer expression
4211   if (!isRValRef) {
4212     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4213     //        reference-compatible with "cv2 T2," or
4214     //
4215     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4216     if (InitCategory.isLValue() &&
4217         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4218       // C++ [over.ics.ref]p1:
4219       //   When a parameter of reference type binds directly (8.5.3)
4220       //   to an argument expression, the implicit conversion sequence
4221       //   is the identity conversion, unless the argument expression
4222       //   has a type that is a derived class of the parameter type,
4223       //   in which case the implicit conversion sequence is a
4224       //   derived-to-base Conversion (13.3.3.1).
4225       ICS.setStandard();
4226       ICS.Standard.First = ICK_Identity;
4227       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4228                          : ObjCConversion? ICK_Compatible_Conversion
4229                          : ICK_Identity;
4230       ICS.Standard.Third = ICK_Identity;
4231       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4232       ICS.Standard.setToType(0, T2);
4233       ICS.Standard.setToType(1, T1);
4234       ICS.Standard.setToType(2, T1);
4235       ICS.Standard.ReferenceBinding = true;
4236       ICS.Standard.DirectBinding = true;
4237       ICS.Standard.IsLvalueReference = !isRValRef;
4238       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4239       ICS.Standard.BindsToRvalue = false;
4240       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4241       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4242       ICS.Standard.CopyConstructor = 0;
4243 
4244       // Nothing more to do: the inaccessibility/ambiguity check for
4245       // derived-to-base conversions is suppressed when we're
4246       // computing the implicit conversion sequence (C++
4247       // [over.best.ics]p2).
4248       return ICS;
4249     }
4250 
4251     //       -- has a class type (i.e., T2 is a class type), where T1 is
4252     //          not reference-related to T2, and can be implicitly
4253     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4254     //          is reference-compatible with "cv3 T3" 92) (this
4255     //          conversion is selected by enumerating the applicable
4256     //          conversion functions (13.3.1.6) and choosing the best
4257     //          one through overload resolution (13.3)),
4258     if (!SuppressUserConversions && T2->isRecordType() &&
4259         !S.RequireCompleteType(DeclLoc, T2, 0) &&
4260         RefRelationship == Sema::Ref_Incompatible) {
4261       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4262                                    Init, T2, /*AllowRvalues=*/false,
4263                                    AllowExplicit))
4264         return ICS;
4265     }
4266   }
4267 
4268   //     -- Otherwise, the reference shall be an lvalue reference to a
4269   //        non-volatile const type (i.e., cv1 shall be const), or the reference
4270   //        shall be an rvalue reference.
4271   //
4272   // We actually handle one oddity of C++ [over.ics.ref] at this
4273   // point, which is that, due to p2 (which short-circuits reference
4274   // binding by only attempting a simple conversion for non-direct
4275   // bindings) and p3's strange wording, we allow a const volatile
4276   // reference to bind to an rvalue. Hence the check for the presence
4277   // of "const" rather than checking for "const" being the only
4278   // qualifier.
4279   // This is also the point where rvalue references and lvalue inits no longer
4280   // go together.
4281   if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4282     return ICS;
4283 
4284   //       -- If the initializer expression
4285   //
4286   //            -- is an xvalue, class prvalue, array prvalue or function
4287   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4288   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4289       (InitCategory.isXValue() ||
4290       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4291       (InitCategory.isLValue() && T2->isFunctionType()))) {
4292     ICS.setStandard();
4293     ICS.Standard.First = ICK_Identity;
4294     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4295                       : ObjCConversion? ICK_Compatible_Conversion
4296                       : ICK_Identity;
4297     ICS.Standard.Third = ICK_Identity;
4298     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4299     ICS.Standard.setToType(0, T2);
4300     ICS.Standard.setToType(1, T1);
4301     ICS.Standard.setToType(2, T1);
4302     ICS.Standard.ReferenceBinding = true;
4303     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4304     // binding unless we're binding to a class prvalue.
4305     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4306     // allow the use of rvalue references in C++98/03 for the benefit of
4307     // standard library implementors; therefore, we need the xvalue check here.
4308     ICS.Standard.DirectBinding =
4309       S.getLangOpts().CPlusPlus11 ||
4310       (InitCategory.isPRValue() && !T2->isRecordType());
4311     ICS.Standard.IsLvalueReference = !isRValRef;
4312     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4313     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4314     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4315     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4316     ICS.Standard.CopyConstructor = 0;
4317     return ICS;
4318   }
4319 
4320   //            -- has a class type (i.e., T2 is a class type), where T1 is not
4321   //               reference-related to T2, and can be implicitly converted to
4322   //               an xvalue, class prvalue, or function lvalue of type
4323   //               "cv3 T3", where "cv1 T1" is reference-compatible with
4324   //               "cv3 T3",
4325   //
4326   //          then the reference is bound to the value of the initializer
4327   //          expression in the first case and to the result of the conversion
4328   //          in the second case (or, in either case, to an appropriate base
4329   //          class subobject).
4330   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4331       T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4332       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4333                                Init, T2, /*AllowRvalues=*/true,
4334                                AllowExplicit)) {
4335     // In the second case, if the reference is an rvalue reference
4336     // and the second standard conversion sequence of the
4337     // user-defined conversion sequence includes an lvalue-to-rvalue
4338     // conversion, the program is ill-formed.
4339     if (ICS.isUserDefined() && isRValRef &&
4340         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4341       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4342 
4343     return ICS;
4344   }
4345 
4346   //       -- Otherwise, a temporary of type "cv1 T1" is created and
4347   //          initialized from the initializer expression using the
4348   //          rules for a non-reference copy initialization (8.5). The
4349   //          reference is then bound to the temporary. If T1 is
4350   //          reference-related to T2, cv1 must be the same
4351   //          cv-qualification as, or greater cv-qualification than,
4352   //          cv2; otherwise, the program is ill-formed.
4353   if (RefRelationship == Sema::Ref_Related) {
4354     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4355     // we would be reference-compatible or reference-compatible with
4356     // added qualification. But that wasn't the case, so the reference
4357     // initialization fails.
4358     //
4359     // Note that we only want to check address spaces and cvr-qualifiers here.
4360     // ObjC GC and lifetime qualifiers aren't important.
4361     Qualifiers T1Quals = T1.getQualifiers();
4362     Qualifiers T2Quals = T2.getQualifiers();
4363     T1Quals.removeObjCGCAttr();
4364     T1Quals.removeObjCLifetime();
4365     T2Quals.removeObjCGCAttr();
4366     T2Quals.removeObjCLifetime();
4367     if (!T1Quals.compatiblyIncludes(T2Quals))
4368       return ICS;
4369   }
4370 
4371   // If at least one of the types is a class type, the types are not
4372   // related, and we aren't allowed any user conversions, the
4373   // reference binding fails. This case is important for breaking
4374   // recursion, since TryImplicitConversion below will attempt to
4375   // create a temporary through the use of a copy constructor.
4376   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4377       (T1->isRecordType() || T2->isRecordType()))
4378     return ICS;
4379 
4380   // If T1 is reference-related to T2 and the reference is an rvalue
4381   // reference, the initializer expression shall not be an lvalue.
4382   if (RefRelationship >= Sema::Ref_Related &&
4383       isRValRef && Init->Classify(S.Context).isLValue())
4384     return ICS;
4385 
4386   // C++ [over.ics.ref]p2:
4387   //   When a parameter of reference type is not bound directly to
4388   //   an argument expression, the conversion sequence is the one
4389   //   required to convert the argument expression to the
4390   //   underlying type of the reference according to
4391   //   13.3.3.1. Conceptually, this conversion sequence corresponds
4392   //   to copy-initializing a temporary of the underlying type with
4393   //   the argument expression. Any difference in top-level
4394   //   cv-qualification is subsumed by the initialization itself
4395   //   and does not constitute a conversion.
4396   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4397                               /*AllowExplicit=*/false,
4398                               /*InOverloadResolution=*/false,
4399                               /*CStyle=*/false,
4400                               /*AllowObjCWritebackConversion=*/false);
4401 
4402   // Of course, that's still a reference binding.
4403   if (ICS.isStandard()) {
4404     ICS.Standard.ReferenceBinding = true;
4405     ICS.Standard.IsLvalueReference = !isRValRef;
4406     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4407     ICS.Standard.BindsToRvalue = true;
4408     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4409     ICS.Standard.ObjCLifetimeConversionBinding = false;
4410   } else if (ICS.isUserDefined()) {
4411     // Don't allow rvalue references to bind to lvalues.
4412     if (DeclType->isRValueReferenceType()) {
4413       if (const ReferenceType *RefType
4414             = ICS.UserDefined.ConversionFunction->getResultType()
4415                 ->getAs<LValueReferenceType>()) {
4416         if (!RefType->getPointeeType()->isFunctionType()) {
4417           ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4418                      DeclType);
4419           return ICS;
4420         }
4421       }
4422     }
4423 
4424     ICS.UserDefined.After.ReferenceBinding = true;
4425     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4426     ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4427     ICS.UserDefined.After.BindsToRvalue = true;
4428     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4429     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4430   }
4431 
4432   return ICS;
4433 }
4434 
4435 static ImplicitConversionSequence
4436 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4437                       bool SuppressUserConversions,
4438                       bool InOverloadResolution,
4439                       bool AllowObjCWritebackConversion,
4440                       bool AllowExplicit = false);
4441 
4442 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4443 /// initializer list From.
4444 static ImplicitConversionSequence
4445 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4446                   bool SuppressUserConversions,
4447                   bool InOverloadResolution,
4448                   bool AllowObjCWritebackConversion) {
4449   // C++11 [over.ics.list]p1:
4450   //   When an argument is an initializer list, it is not an expression and
4451   //   special rules apply for converting it to a parameter type.
4452 
4453   ImplicitConversionSequence Result;
4454   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4455   Result.setListInitializationSequence();
4456 
4457   // We need a complete type for what follows. Incomplete types can never be
4458   // initialized from init lists.
4459   if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4460     return Result;
4461 
4462   // C++11 [over.ics.list]p2:
4463   //   If the parameter type is std::initializer_list<X> or "array of X" and
4464   //   all the elements can be implicitly converted to X, the implicit
4465   //   conversion sequence is the worst conversion necessary to convert an
4466   //   element of the list to X.
4467   bool toStdInitializerList = false;
4468   QualType X;
4469   if (ToType->isArrayType())
4470     X = S.Context.getAsArrayType(ToType)->getElementType();
4471   else
4472     toStdInitializerList = S.isStdInitializerList(ToType, &X);
4473   if (!X.isNull()) {
4474     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4475       Expr *Init = From->getInit(i);
4476       ImplicitConversionSequence ICS =
4477           TryCopyInitialization(S, Init, X, SuppressUserConversions,
4478                                 InOverloadResolution,
4479                                 AllowObjCWritebackConversion);
4480       // If a single element isn't convertible, fail.
4481       if (ICS.isBad()) {
4482         Result = ICS;
4483         break;
4484       }
4485       // Otherwise, look for the worst conversion.
4486       if (Result.isBad() ||
4487           CompareImplicitConversionSequences(S, ICS, Result) ==
4488               ImplicitConversionSequence::Worse)
4489         Result = ICS;
4490     }
4491 
4492     // For an empty list, we won't have computed any conversion sequence.
4493     // Introduce the identity conversion sequence.
4494     if (From->getNumInits() == 0) {
4495       Result.setStandard();
4496       Result.Standard.setAsIdentityConversion();
4497       Result.Standard.setFromType(ToType);
4498       Result.Standard.setAllToTypes(ToType);
4499     }
4500 
4501     Result.setListInitializationSequence();
4502     Result.setStdInitializerListElement(toStdInitializerList);
4503     return Result;
4504   }
4505 
4506   // C++11 [over.ics.list]p3:
4507   //   Otherwise, if the parameter is a non-aggregate class X and overload
4508   //   resolution chooses a single best constructor [...] the implicit
4509   //   conversion sequence is a user-defined conversion sequence. If multiple
4510   //   constructors are viable but none is better than the others, the
4511   //   implicit conversion sequence is a user-defined conversion sequence.
4512   if (ToType->isRecordType() && !ToType->isAggregateType()) {
4513     // This function can deal with initializer lists.
4514     Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4515                                       /*AllowExplicit=*/false,
4516                                       InOverloadResolution, /*CStyle=*/false,
4517                                       AllowObjCWritebackConversion);
4518     Result.setListInitializationSequence();
4519     return Result;
4520   }
4521 
4522   // C++11 [over.ics.list]p4:
4523   //   Otherwise, if the parameter has an aggregate type which can be
4524   //   initialized from the initializer list [...] the implicit conversion
4525   //   sequence is a user-defined conversion sequence.
4526   if (ToType->isAggregateType()) {
4527     // Type is an aggregate, argument is an init list. At this point it comes
4528     // down to checking whether the initialization works.
4529     // FIXME: Find out whether this parameter is consumed or not.
4530     InitializedEntity Entity =
4531         InitializedEntity::InitializeParameter(S.Context, ToType,
4532                                                /*Consumed=*/false);
4533     if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4534       Result.setUserDefined();
4535       Result.UserDefined.Before.setAsIdentityConversion();
4536       // Initializer lists don't have a type.
4537       Result.UserDefined.Before.setFromType(QualType());
4538       Result.UserDefined.Before.setAllToTypes(QualType());
4539 
4540       Result.UserDefined.After.setAsIdentityConversion();
4541       Result.UserDefined.After.setFromType(ToType);
4542       Result.UserDefined.After.setAllToTypes(ToType);
4543       Result.UserDefined.ConversionFunction = 0;
4544     }
4545     return Result;
4546   }
4547 
4548   // C++11 [over.ics.list]p5:
4549   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4550   if (ToType->isReferenceType()) {
4551     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4552     // mention initializer lists in any way. So we go by what list-
4553     // initialization would do and try to extrapolate from that.
4554 
4555     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4556 
4557     // If the initializer list has a single element that is reference-related
4558     // to the parameter type, we initialize the reference from that.
4559     if (From->getNumInits() == 1) {
4560       Expr *Init = From->getInit(0);
4561 
4562       QualType T2 = Init->getType();
4563 
4564       // If the initializer is the address of an overloaded function, try
4565       // to resolve the overloaded function. If all goes well, T2 is the
4566       // type of the resulting function.
4567       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4568         DeclAccessPair Found;
4569         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4570                                    Init, ToType, false, Found))
4571           T2 = Fn->getType();
4572       }
4573 
4574       // Compute some basic properties of the types and the initializer.
4575       bool dummy1 = false;
4576       bool dummy2 = false;
4577       bool dummy3 = false;
4578       Sema::ReferenceCompareResult RefRelationship
4579         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4580                                          dummy2, dummy3);
4581 
4582       if (RefRelationship >= Sema::Ref_Related)
4583         return TryReferenceInit(S, Init, ToType,
4584                                 /*FIXME:*/From->getLocStart(),
4585                                 SuppressUserConversions,
4586                                 /*AllowExplicit=*/false);
4587     }
4588 
4589     // Otherwise, we bind the reference to a temporary created from the
4590     // initializer list.
4591     Result = TryListConversion(S, From, T1, SuppressUserConversions,
4592                                InOverloadResolution,
4593                                AllowObjCWritebackConversion);
4594     if (Result.isFailure())
4595       return Result;
4596     assert(!Result.isEllipsis() &&
4597            "Sub-initialization cannot result in ellipsis conversion.");
4598 
4599     // Can we even bind to a temporary?
4600     if (ToType->isRValueReferenceType() ||
4601         (T1.isConstQualified() && !T1.isVolatileQualified())) {
4602       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4603                                             Result.UserDefined.After;
4604       SCS.ReferenceBinding = true;
4605       SCS.IsLvalueReference = ToType->isLValueReferenceType();
4606       SCS.BindsToRvalue = true;
4607       SCS.BindsToFunctionLvalue = false;
4608       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4609       SCS.ObjCLifetimeConversionBinding = false;
4610     } else
4611       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4612                     From, ToType);
4613     return Result;
4614   }
4615 
4616   // C++11 [over.ics.list]p6:
4617   //   Otherwise, if the parameter type is not a class:
4618   if (!ToType->isRecordType()) {
4619     //    - if the initializer list has one element, the implicit conversion
4620     //      sequence is the one required to convert the element to the
4621     //      parameter type.
4622     unsigned NumInits = From->getNumInits();
4623     if (NumInits == 1)
4624       Result = TryCopyInitialization(S, From->getInit(0), ToType,
4625                                      SuppressUserConversions,
4626                                      InOverloadResolution,
4627                                      AllowObjCWritebackConversion);
4628     //    - if the initializer list has no elements, the implicit conversion
4629     //      sequence is the identity conversion.
4630     else if (NumInits == 0) {
4631       Result.setStandard();
4632       Result.Standard.setAsIdentityConversion();
4633       Result.Standard.setFromType(ToType);
4634       Result.Standard.setAllToTypes(ToType);
4635     }
4636     Result.setListInitializationSequence();
4637     return Result;
4638   }
4639 
4640   // C++11 [over.ics.list]p7:
4641   //   In all cases other than those enumerated above, no conversion is possible
4642   return Result;
4643 }
4644 
4645 /// TryCopyInitialization - Try to copy-initialize a value of type
4646 /// ToType from the expression From. Return the implicit conversion
4647 /// sequence required to pass this argument, which may be a bad
4648 /// conversion sequence (meaning that the argument cannot be passed to
4649 /// a parameter of this type). If @p SuppressUserConversions, then we
4650 /// do not permit any user-defined conversion sequences.
4651 static ImplicitConversionSequence
4652 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4653                       bool SuppressUserConversions,
4654                       bool InOverloadResolution,
4655                       bool AllowObjCWritebackConversion,
4656                       bool AllowExplicit) {
4657   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4658     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4659                              InOverloadResolution,AllowObjCWritebackConversion);
4660 
4661   if (ToType->isReferenceType())
4662     return TryReferenceInit(S, From, ToType,
4663                             /*FIXME:*/From->getLocStart(),
4664                             SuppressUserConversions,
4665                             AllowExplicit);
4666 
4667   return TryImplicitConversion(S, From, ToType,
4668                                SuppressUserConversions,
4669                                /*AllowExplicit=*/false,
4670                                InOverloadResolution,
4671                                /*CStyle=*/false,
4672                                AllowObjCWritebackConversion);
4673 }
4674 
4675 static bool TryCopyInitialization(const CanQualType FromQTy,
4676                                   const CanQualType ToQTy,
4677                                   Sema &S,
4678                                   SourceLocation Loc,
4679                                   ExprValueKind FromVK) {
4680   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4681   ImplicitConversionSequence ICS =
4682     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4683 
4684   return !ICS.isBad();
4685 }
4686 
4687 /// TryObjectArgumentInitialization - Try to initialize the object
4688 /// parameter of the given member function (@c Method) from the
4689 /// expression @p From.
4690 static ImplicitConversionSequence
4691 TryObjectArgumentInitialization(Sema &S, QualType FromType,
4692                                 Expr::Classification FromClassification,
4693                                 CXXMethodDecl *Method,
4694                                 CXXRecordDecl *ActingContext) {
4695   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4696   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4697   //                 const volatile object.
4698   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4699     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4700   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4701 
4702   // Set up the conversion sequence as a "bad" conversion, to allow us
4703   // to exit early.
4704   ImplicitConversionSequence ICS;
4705 
4706   // We need to have an object of class type.
4707   if (const PointerType *PT = FromType->getAs<PointerType>()) {
4708     FromType = PT->getPointeeType();
4709 
4710     // When we had a pointer, it's implicitly dereferenced, so we
4711     // better have an lvalue.
4712     assert(FromClassification.isLValue());
4713   }
4714 
4715   assert(FromType->isRecordType());
4716 
4717   // C++0x [over.match.funcs]p4:
4718   //   For non-static member functions, the type of the implicit object
4719   //   parameter is
4720   //
4721   //     - "lvalue reference to cv X" for functions declared without a
4722   //        ref-qualifier or with the & ref-qualifier
4723   //     - "rvalue reference to cv X" for functions declared with the &&
4724   //        ref-qualifier
4725   //
4726   // where X is the class of which the function is a member and cv is the
4727   // cv-qualification on the member function declaration.
4728   //
4729   // However, when finding an implicit conversion sequence for the argument, we
4730   // are not allowed to create temporaries or perform user-defined conversions
4731   // (C++ [over.match.funcs]p5). We perform a simplified version of
4732   // reference binding here, that allows class rvalues to bind to
4733   // non-constant references.
4734 
4735   // First check the qualifiers.
4736   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4737   if (ImplicitParamType.getCVRQualifiers()
4738                                     != FromTypeCanon.getLocalCVRQualifiers() &&
4739       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4740     ICS.setBad(BadConversionSequence::bad_qualifiers,
4741                FromType, ImplicitParamType);
4742     return ICS;
4743   }
4744 
4745   // Check that we have either the same type or a derived type. It
4746   // affects the conversion rank.
4747   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4748   ImplicitConversionKind SecondKind;
4749   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4750     SecondKind = ICK_Identity;
4751   } else if (S.IsDerivedFrom(FromType, ClassType))
4752     SecondKind = ICK_Derived_To_Base;
4753   else {
4754     ICS.setBad(BadConversionSequence::unrelated_class,
4755                FromType, ImplicitParamType);
4756     return ICS;
4757   }
4758 
4759   // Check the ref-qualifier.
4760   switch (Method->getRefQualifier()) {
4761   case RQ_None:
4762     // Do nothing; we don't care about lvalueness or rvalueness.
4763     break;
4764 
4765   case RQ_LValue:
4766     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4767       // non-const lvalue reference cannot bind to an rvalue
4768       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4769                  ImplicitParamType);
4770       return ICS;
4771     }
4772     break;
4773 
4774   case RQ_RValue:
4775     if (!FromClassification.isRValue()) {
4776       // rvalue reference cannot bind to an lvalue
4777       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4778                  ImplicitParamType);
4779       return ICS;
4780     }
4781     break;
4782   }
4783 
4784   // Success. Mark this as a reference binding.
4785   ICS.setStandard();
4786   ICS.Standard.setAsIdentityConversion();
4787   ICS.Standard.Second = SecondKind;
4788   ICS.Standard.setFromType(FromType);
4789   ICS.Standard.setAllToTypes(ImplicitParamType);
4790   ICS.Standard.ReferenceBinding = true;
4791   ICS.Standard.DirectBinding = true;
4792   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4793   ICS.Standard.BindsToFunctionLvalue = false;
4794   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4795   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4796     = (Method->getRefQualifier() == RQ_None);
4797   return ICS;
4798 }
4799 
4800 /// PerformObjectArgumentInitialization - Perform initialization of
4801 /// the implicit object parameter for the given Method with the given
4802 /// expression.
4803 ExprResult
4804 Sema::PerformObjectArgumentInitialization(Expr *From,
4805                                           NestedNameSpecifier *Qualifier,
4806                                           NamedDecl *FoundDecl,
4807                                           CXXMethodDecl *Method) {
4808   QualType FromRecordType, DestType;
4809   QualType ImplicitParamRecordType  =
4810     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4811 
4812   Expr::Classification FromClassification;
4813   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4814     FromRecordType = PT->getPointeeType();
4815     DestType = Method->getThisType(Context);
4816     FromClassification = Expr::Classification::makeSimpleLValue();
4817   } else {
4818     FromRecordType = From->getType();
4819     DestType = ImplicitParamRecordType;
4820     FromClassification = From->Classify(Context);
4821   }
4822 
4823   // Note that we always use the true parent context when performing
4824   // the actual argument initialization.
4825   ImplicitConversionSequence ICS
4826     = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4827                                       Method, Method->getParent());
4828   if (ICS.isBad()) {
4829     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4830       Qualifiers FromQs = FromRecordType.getQualifiers();
4831       Qualifiers ToQs = DestType.getQualifiers();
4832       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4833       if (CVR) {
4834         Diag(From->getLocStart(),
4835              diag::err_member_function_call_bad_cvr)
4836           << Method->getDeclName() << FromRecordType << (CVR - 1)
4837           << From->getSourceRange();
4838         Diag(Method->getLocation(), diag::note_previous_decl)
4839           << Method->getDeclName();
4840         return ExprError();
4841       }
4842     }
4843 
4844     return Diag(From->getLocStart(),
4845                 diag::err_implicit_object_parameter_init)
4846        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4847   }
4848 
4849   if (ICS.Standard.Second == ICK_Derived_To_Base) {
4850     ExprResult FromRes =
4851       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4852     if (FromRes.isInvalid())
4853       return ExprError();
4854     From = FromRes.take();
4855   }
4856 
4857   if (!Context.hasSameType(From->getType(), DestType))
4858     From = ImpCastExprToType(From, DestType, CK_NoOp,
4859                              From->getValueKind()).take();
4860   return Owned(From);
4861 }
4862 
4863 /// TryContextuallyConvertToBool - Attempt to contextually convert the
4864 /// expression From to bool (C++0x [conv]p3).
4865 static ImplicitConversionSequence
4866 TryContextuallyConvertToBool(Sema &S, Expr *From) {
4867   // FIXME: This is pretty broken.
4868   return TryImplicitConversion(S, From, S.Context.BoolTy,
4869                                // FIXME: Are these flags correct?
4870                                /*SuppressUserConversions=*/false,
4871                                /*AllowExplicit=*/true,
4872                                /*InOverloadResolution=*/false,
4873                                /*CStyle=*/false,
4874                                /*AllowObjCWritebackConversion=*/false);
4875 }
4876 
4877 /// PerformContextuallyConvertToBool - Perform a contextual conversion
4878 /// of the expression From to bool (C++0x [conv]p3).
4879 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4880   if (checkPlaceholderForOverload(*this, From))
4881     return ExprError();
4882 
4883   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4884   if (!ICS.isBad())
4885     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4886 
4887   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4888     return Diag(From->getLocStart(),
4889                 diag::err_typecheck_bool_condition)
4890                   << From->getType() << From->getSourceRange();
4891   return ExprError();
4892 }
4893 
4894 /// Check that the specified conversion is permitted in a converted constant
4895 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
4896 /// is acceptable.
4897 static bool CheckConvertedConstantConversions(Sema &S,
4898                                               StandardConversionSequence &SCS) {
4899   // Since we know that the target type is an integral or unscoped enumeration
4900   // type, most conversion kinds are impossible. All possible First and Third
4901   // conversions are fine.
4902   switch (SCS.Second) {
4903   case ICK_Identity:
4904   case ICK_Integral_Promotion:
4905   case ICK_Integral_Conversion:
4906   case ICK_Zero_Event_Conversion:
4907     return true;
4908 
4909   case ICK_Boolean_Conversion:
4910     // Conversion from an integral or unscoped enumeration type to bool is
4911     // classified as ICK_Boolean_Conversion, but it's also an integral
4912     // conversion, so it's permitted in a converted constant expression.
4913     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4914            SCS.getToType(2)->isBooleanType();
4915 
4916   case ICK_Floating_Integral:
4917   case ICK_Complex_Real:
4918     return false;
4919 
4920   case ICK_Lvalue_To_Rvalue:
4921   case ICK_Array_To_Pointer:
4922   case ICK_Function_To_Pointer:
4923   case ICK_NoReturn_Adjustment:
4924   case ICK_Qualification:
4925   case ICK_Compatible_Conversion:
4926   case ICK_Vector_Conversion:
4927   case ICK_Vector_Splat:
4928   case ICK_Derived_To_Base:
4929   case ICK_Pointer_Conversion:
4930   case ICK_Pointer_Member:
4931   case ICK_Block_Pointer_Conversion:
4932   case ICK_Writeback_Conversion:
4933   case ICK_Floating_Promotion:
4934   case ICK_Complex_Promotion:
4935   case ICK_Complex_Conversion:
4936   case ICK_Floating_Conversion:
4937   case ICK_TransparentUnionConversion:
4938     llvm_unreachable("unexpected second conversion kind");
4939 
4940   case ICK_Num_Conversion_Kinds:
4941     break;
4942   }
4943 
4944   llvm_unreachable("unknown conversion kind");
4945 }
4946 
4947 /// CheckConvertedConstantExpression - Check that the expression From is a
4948 /// converted constant expression of type T, perform the conversion and produce
4949 /// the converted expression, per C++11 [expr.const]p3.
4950 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4951                                                   llvm::APSInt &Value,
4952                                                   CCEKind CCE) {
4953   assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
4954   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4955 
4956   if (checkPlaceholderForOverload(*this, From))
4957     return ExprError();
4958 
4959   // C++11 [expr.const]p3 with proposed wording fixes:
4960   //  A converted constant expression of type T is a core constant expression,
4961   //  implicitly converted to a prvalue of type T, where the converted
4962   //  expression is a literal constant expression and the implicit conversion
4963   //  sequence contains only user-defined conversions, lvalue-to-rvalue
4964   //  conversions, integral promotions, and integral conversions other than
4965   //  narrowing conversions.
4966   ImplicitConversionSequence ICS =
4967     TryImplicitConversion(From, T,
4968                           /*SuppressUserConversions=*/false,
4969                           /*AllowExplicit=*/false,
4970                           /*InOverloadResolution=*/false,
4971                           /*CStyle=*/false,
4972                           /*AllowObjcWritebackConversion=*/false);
4973   StandardConversionSequence *SCS = 0;
4974   switch (ICS.getKind()) {
4975   case ImplicitConversionSequence::StandardConversion:
4976     if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4977       return Diag(From->getLocStart(),
4978                   diag::err_typecheck_converted_constant_expression_disallowed)
4979                << From->getType() << From->getSourceRange() << T;
4980     SCS = &ICS.Standard;
4981     break;
4982   case ImplicitConversionSequence::UserDefinedConversion:
4983     // We are converting from class type to an integral or enumeration type, so
4984     // the Before sequence must be trivial.
4985     if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4986       return Diag(From->getLocStart(),
4987                   diag::err_typecheck_converted_constant_expression_disallowed)
4988                << From->getType() << From->getSourceRange() << T;
4989     SCS = &ICS.UserDefined.After;
4990     break;
4991   case ImplicitConversionSequence::AmbiguousConversion:
4992   case ImplicitConversionSequence::BadConversion:
4993     if (!DiagnoseMultipleUserDefinedConversion(From, T))
4994       return Diag(From->getLocStart(),
4995                   diag::err_typecheck_converted_constant_expression)
4996                     << From->getType() << From->getSourceRange() << T;
4997     return ExprError();
4998 
4999   case ImplicitConversionSequence::EllipsisConversion:
5000     llvm_unreachable("ellipsis conversion in converted constant expression");
5001   }
5002 
5003   ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
5004   if (Result.isInvalid())
5005     return Result;
5006 
5007   // Check for a narrowing implicit conversion.
5008   APValue PreNarrowingValue;
5009   QualType PreNarrowingType;
5010   switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
5011                                 PreNarrowingType)) {
5012   case NK_Variable_Narrowing:
5013     // Implicit conversion to a narrower type, and the value is not a constant
5014     // expression. We'll diagnose this in a moment.
5015   case NK_Not_Narrowing:
5016     break;
5017 
5018   case NK_Constant_Narrowing:
5019     Diag(From->getLocStart(),
5020          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
5021                              diag::err_cce_narrowing)
5022       << CCE << /*Constant*/1
5023       << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
5024     break;
5025 
5026   case NK_Type_Narrowing:
5027     Diag(From->getLocStart(),
5028          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
5029                              diag::err_cce_narrowing)
5030       << CCE << /*Constant*/0 << From->getType() << T;
5031     break;
5032   }
5033 
5034   // Check the expression is a constant expression.
5035   SmallVector<PartialDiagnosticAt, 8> Notes;
5036   Expr::EvalResult Eval;
5037   Eval.Diag = &Notes;
5038 
5039   if (!Result.get()->EvaluateAsRValue(Eval, Context) || !Eval.Val.isInt()) {
5040     // The expression can't be folded, so we can't keep it at this position in
5041     // the AST.
5042     Result = ExprError();
5043   } else {
5044     Value = Eval.Val.getInt();
5045 
5046     if (Notes.empty()) {
5047       // It's a constant expression.
5048       return Result;
5049     }
5050   }
5051 
5052   // It's not a constant expression. Produce an appropriate diagnostic.
5053   if (Notes.size() == 1 &&
5054       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
5055     Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
5056   else {
5057     Diag(From->getLocStart(), diag::err_expr_not_cce)
5058       << CCE << From->getSourceRange();
5059     for (unsigned I = 0; I < Notes.size(); ++I)
5060       Diag(Notes[I].first, Notes[I].second);
5061   }
5062   return Result;
5063 }
5064 
5065 /// dropPointerConversions - If the given standard conversion sequence
5066 /// involves any pointer conversions, remove them.  This may change
5067 /// the result type of the conversion sequence.
5068 static void dropPointerConversion(StandardConversionSequence &SCS) {
5069   if (SCS.Second == ICK_Pointer_Conversion) {
5070     SCS.Second = ICK_Identity;
5071     SCS.Third = ICK_Identity;
5072     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
5073   }
5074 }
5075 
5076 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
5077 /// convert the expression From to an Objective-C pointer type.
5078 static ImplicitConversionSequence
5079 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
5080   // Do an implicit conversion to 'id'.
5081   QualType Ty = S.Context.getObjCIdType();
5082   ImplicitConversionSequence ICS
5083     = TryImplicitConversion(S, From, Ty,
5084                             // FIXME: Are these flags correct?
5085                             /*SuppressUserConversions=*/false,
5086                             /*AllowExplicit=*/true,
5087                             /*InOverloadResolution=*/false,
5088                             /*CStyle=*/false,
5089                             /*AllowObjCWritebackConversion=*/false);
5090 
5091   // Strip off any final conversions to 'id'.
5092   switch (ICS.getKind()) {
5093   case ImplicitConversionSequence::BadConversion:
5094   case ImplicitConversionSequence::AmbiguousConversion:
5095   case ImplicitConversionSequence::EllipsisConversion:
5096     break;
5097 
5098   case ImplicitConversionSequence::UserDefinedConversion:
5099     dropPointerConversion(ICS.UserDefined.After);
5100     break;
5101 
5102   case ImplicitConversionSequence::StandardConversion:
5103     dropPointerConversion(ICS.Standard);
5104     break;
5105   }
5106 
5107   return ICS;
5108 }
5109 
5110 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
5111 /// conversion of the expression From to an Objective-C pointer type.
5112 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5113   if (checkPlaceholderForOverload(*this, From))
5114     return ExprError();
5115 
5116   QualType Ty = Context.getObjCIdType();
5117   ImplicitConversionSequence ICS =
5118     TryContextuallyConvertToObjCPointer(*this, From);
5119   if (!ICS.isBad())
5120     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5121   return ExprError();
5122 }
5123 
5124 /// Determine whether the provided type is an integral type, or an enumeration
5125 /// type of a permitted flavor.
5126 bool Sema::ICEConvertDiagnoser::match(QualType T) {
5127   return AllowScopedEnumerations ? T->isIntegralOrEnumerationType()
5128                                  : T->isIntegralOrUnscopedEnumerationType();
5129 }
5130 
5131 static ExprResult
5132 diagnoseAmbiguousConversion(Sema &SemaRef, SourceLocation Loc, Expr *From,
5133                             Sema::ContextualImplicitConverter &Converter,
5134                             QualType T, UnresolvedSetImpl &ViableConversions) {
5135 
5136   if (Converter.Suppress)
5137     return ExprError();
5138 
5139   Converter.diagnoseAmbiguous(SemaRef, Loc, T) << From->getSourceRange();
5140   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5141     CXXConversionDecl *Conv =
5142         cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5143     QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5144     Converter.noteAmbiguous(SemaRef, Conv, ConvTy);
5145   }
5146   return SemaRef.Owned(From);
5147 }
5148 
5149 static bool
5150 diagnoseNoViableConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5151                            Sema::ContextualImplicitConverter &Converter,
5152                            QualType T, bool HadMultipleCandidates,
5153                            UnresolvedSetImpl &ExplicitConversions) {
5154   if (ExplicitConversions.size() == 1 && !Converter.Suppress) {
5155     DeclAccessPair Found = ExplicitConversions[0];
5156     CXXConversionDecl *Conversion =
5157         cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5158 
5159     // The user probably meant to invoke the given explicit
5160     // conversion; use it.
5161     QualType ConvTy = Conversion->getConversionType().getNonReferenceType();
5162     std::string TypeStr;
5163     ConvTy.getAsStringInternal(TypeStr, SemaRef.getPrintingPolicy());
5164 
5165     Converter.diagnoseExplicitConv(SemaRef, Loc, T, ConvTy)
5166         << FixItHint::CreateInsertion(From->getLocStart(),
5167                                       "static_cast<" + TypeStr + ">(")
5168         << FixItHint::CreateInsertion(
5169                SemaRef.PP.getLocForEndOfToken(From->getLocEnd()), ")");
5170     Converter.noteExplicitConv(SemaRef, Conversion, ConvTy);
5171 
5172     // If we aren't in a SFINAE context, build a call to the
5173     // explicit conversion function.
5174     if (SemaRef.isSFINAEContext())
5175       return true;
5176 
5177     SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5178     ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5179                                                        HadMultipleCandidates);
5180     if (Result.isInvalid())
5181       return true;
5182     // Record usage of conversion in an implicit cast.
5183     From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5184                                     CK_UserDefinedConversion, Result.get(), 0,
5185                                     Result.get()->getValueKind());
5186   }
5187   return false;
5188 }
5189 
5190 static bool recordConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5191                              Sema::ContextualImplicitConverter &Converter,
5192                              QualType T, bool HadMultipleCandidates,
5193                              DeclAccessPair &Found) {
5194   CXXConversionDecl *Conversion =
5195       cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5196   SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5197 
5198   QualType ToType = Conversion->getConversionType().getNonReferenceType();
5199   if (!Converter.SuppressConversion) {
5200     if (SemaRef.isSFINAEContext())
5201       return true;
5202 
5203     Converter.diagnoseConversion(SemaRef, Loc, T, ToType)
5204         << From->getSourceRange();
5205   }
5206 
5207   ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5208                                                      HadMultipleCandidates);
5209   if (Result.isInvalid())
5210     return true;
5211   // Record usage of conversion in an implicit cast.
5212   From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5213                                   CK_UserDefinedConversion, Result.get(), 0,
5214                                   Result.get()->getValueKind());
5215   return false;
5216 }
5217 
5218 static ExprResult finishContextualImplicitConversion(
5219     Sema &SemaRef, SourceLocation Loc, Expr *From,
5220     Sema::ContextualImplicitConverter &Converter) {
5221   if (!Converter.match(From->getType()) && !Converter.Suppress)
5222     Converter.diagnoseNoMatch(SemaRef, Loc, From->getType())
5223         << From->getSourceRange();
5224 
5225   return SemaRef.DefaultLvalueConversion(From);
5226 }
5227 
5228 static void
5229 collectViableConversionCandidates(Sema &SemaRef, Expr *From, QualType ToType,
5230                                   UnresolvedSetImpl &ViableConversions,
5231                                   OverloadCandidateSet &CandidateSet) {
5232   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5233     DeclAccessPair FoundDecl = ViableConversions[I];
5234     NamedDecl *D = FoundDecl.getDecl();
5235     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
5236     if (isa<UsingShadowDecl>(D))
5237       D = cast<UsingShadowDecl>(D)->getTargetDecl();
5238 
5239     CXXConversionDecl *Conv;
5240     FunctionTemplateDecl *ConvTemplate;
5241     if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
5242       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5243     else
5244       Conv = cast<CXXConversionDecl>(D);
5245 
5246     if (ConvTemplate)
5247       SemaRef.AddTemplateConversionCandidate(
5248           ConvTemplate, FoundDecl, ActingContext, From, ToType, CandidateSet);
5249     else
5250       SemaRef.AddConversionCandidate(Conv, FoundDecl, ActingContext, From,
5251                                      ToType, CandidateSet);
5252   }
5253 }
5254 
5255 /// \brief Attempt to convert the given expression to a type which is accepted
5256 /// by the given converter.
5257 ///
5258 /// This routine will attempt to convert an expression of class type to a
5259 /// type accepted by the specified converter. In C++11 and before, the class
5260 /// must have a single non-explicit conversion function converting to a matching
5261 /// type. In C++1y, there can be multiple such conversion functions, but only
5262 /// one target type.
5263 ///
5264 /// \param Loc The source location of the construct that requires the
5265 /// conversion.
5266 ///
5267 /// \param From The expression we're converting from.
5268 ///
5269 /// \param Converter Used to control and diagnose the conversion process.
5270 ///
5271 /// \returns The expression, converted to an integral or enumeration type if
5272 /// successful.
5273 ExprResult Sema::PerformContextualImplicitConversion(
5274     SourceLocation Loc, Expr *From, ContextualImplicitConverter &Converter) {
5275   // We can't perform any more checking for type-dependent expressions.
5276   if (From->isTypeDependent())
5277     return Owned(From);
5278 
5279   // Process placeholders immediately.
5280   if (From->hasPlaceholderType()) {
5281     ExprResult result = CheckPlaceholderExpr(From);
5282     if (result.isInvalid())
5283       return result;
5284     From = result.take();
5285   }
5286 
5287   // If the expression already has a matching type, we're golden.
5288   QualType T = From->getType();
5289   if (Converter.match(T))
5290     return DefaultLvalueConversion(From);
5291 
5292   // FIXME: Check for missing '()' if T is a function type?
5293 
5294   // We can only perform contextual implicit conversions on objects of class
5295   // type.
5296   const RecordType *RecordTy = T->getAs<RecordType>();
5297   if (!RecordTy || !getLangOpts().CPlusPlus) {
5298     if (!Converter.Suppress)
5299       Converter.diagnoseNoMatch(*this, Loc, T) << From->getSourceRange();
5300     return Owned(From);
5301   }
5302 
5303   // We must have a complete class type.
5304   struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5305     ContextualImplicitConverter &Converter;
5306     Expr *From;
5307 
5308     TypeDiagnoserPartialDiag(ContextualImplicitConverter &Converter, Expr *From)
5309         : TypeDiagnoser(Converter.Suppress), Converter(Converter), From(From) {}
5310 
5311     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5312       Converter.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5313     }
5314   } IncompleteDiagnoser(Converter, From);
5315 
5316   if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5317     return Owned(From);
5318 
5319   // Look for a conversion to an integral or enumeration type.
5320   UnresolvedSet<4>
5321       ViableConversions; // These are *potentially* viable in C++1y.
5322   UnresolvedSet<4> ExplicitConversions;
5323   std::pair<CXXRecordDecl::conversion_iterator,
5324             CXXRecordDecl::conversion_iterator> Conversions =
5325       cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5326 
5327   bool HadMultipleCandidates =
5328       (std::distance(Conversions.first, Conversions.second) > 1);
5329 
5330   // To check that there is only one target type, in C++1y:
5331   QualType ToType;
5332   bool HasUniqueTargetType = true;
5333 
5334   // Collect explicit or viable (potentially in C++1y) conversions.
5335   for (CXXRecordDecl::conversion_iterator I = Conversions.first,
5336                                           E = Conversions.second;
5337        I != E; ++I) {
5338     NamedDecl *D = (*I)->getUnderlyingDecl();
5339     CXXConversionDecl *Conversion;
5340     FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D);
5341     if (ConvTemplate) {
5342       if (getLangOpts().CPlusPlus1y)
5343         Conversion = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5344       else
5345         continue; // C++11 does not consider conversion operator templates(?).
5346     } else
5347       Conversion = cast<CXXConversionDecl>(D);
5348 
5349     assert((!ConvTemplate || getLangOpts().CPlusPlus1y) &&
5350            "Conversion operator templates are considered potentially "
5351            "viable in C++1y");
5352 
5353     QualType CurToType = Conversion->getConversionType().getNonReferenceType();
5354     if (Converter.match(CurToType) || ConvTemplate) {
5355 
5356       if (Conversion->isExplicit()) {
5357         // FIXME: For C++1y, do we need this restriction?
5358         // cf. diagnoseNoViableConversion()
5359         if (!ConvTemplate)
5360           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5361       } else {
5362         if (!ConvTemplate && getLangOpts().CPlusPlus1y) {
5363           if (ToType.isNull())
5364             ToType = CurToType.getUnqualifiedType();
5365           else if (HasUniqueTargetType &&
5366                    (CurToType.getUnqualifiedType() != ToType))
5367             HasUniqueTargetType = false;
5368         }
5369         ViableConversions.addDecl(I.getDecl(), I.getAccess());
5370       }
5371     }
5372   }
5373 
5374   if (getLangOpts().CPlusPlus1y) {
5375     // C++1y [conv]p6:
5376     // ... An expression e of class type E appearing in such a context
5377     // is said to be contextually implicitly converted to a specified
5378     // type T and is well-formed if and only if e can be implicitly
5379     // converted to a type T that is determined as follows: E is searched
5380     // for conversion functions whose return type is cv T or reference to
5381     // cv T such that T is allowed by the context. There shall be
5382     // exactly one such T.
5383 
5384     // If no unique T is found:
5385     if (ToType.isNull()) {
5386       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5387                                      HadMultipleCandidates,
5388                                      ExplicitConversions))
5389         return ExprError();
5390       return finishContextualImplicitConversion(*this, Loc, From, Converter);
5391     }
5392 
5393     // If more than one unique Ts are found:
5394     if (!HasUniqueTargetType)
5395       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5396                                          ViableConversions);
5397 
5398     // If one unique T is found:
5399     // First, build a candidate set from the previously recorded
5400     // potentially viable conversions.
5401     OverloadCandidateSet CandidateSet(Loc);
5402     collectViableConversionCandidates(*this, From, ToType, ViableConversions,
5403                                       CandidateSet);
5404 
5405     // Then, perform overload resolution over the candidate set.
5406     OverloadCandidateSet::iterator Best;
5407     switch (CandidateSet.BestViableFunction(*this, Loc, Best)) {
5408     case OR_Success: {
5409       // Apply this conversion.
5410       DeclAccessPair Found =
5411           DeclAccessPair::make(Best->Function, Best->FoundDecl.getAccess());
5412       if (recordConversion(*this, Loc, From, Converter, T,
5413                            HadMultipleCandidates, Found))
5414         return ExprError();
5415       break;
5416     }
5417     case OR_Ambiguous:
5418       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5419                                          ViableConversions);
5420     case OR_No_Viable_Function:
5421       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5422                                      HadMultipleCandidates,
5423                                      ExplicitConversions))
5424         return ExprError();
5425     // fall through 'OR_Deleted' case.
5426     case OR_Deleted:
5427       // We'll complain below about a non-integral condition type.
5428       break;
5429     }
5430   } else {
5431     switch (ViableConversions.size()) {
5432     case 0: {
5433       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5434                                      HadMultipleCandidates,
5435                                      ExplicitConversions))
5436         return ExprError();
5437 
5438       // We'll complain below about a non-integral condition type.
5439       break;
5440     }
5441     case 1: {
5442       // Apply this conversion.
5443       DeclAccessPair Found = ViableConversions[0];
5444       if (recordConversion(*this, Loc, From, Converter, T,
5445                            HadMultipleCandidates, Found))
5446         return ExprError();
5447       break;
5448     }
5449     default:
5450       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5451                                          ViableConversions);
5452     }
5453   }
5454 
5455   return finishContextualImplicitConversion(*this, Loc, From, Converter);
5456 }
5457 
5458 /// AddOverloadCandidate - Adds the given function to the set of
5459 /// candidate functions, using the given function call arguments.  If
5460 /// @p SuppressUserConversions, then don't allow user-defined
5461 /// conversions via constructors or conversion operators.
5462 ///
5463 /// \param PartialOverloading true if we are performing "partial" overloading
5464 /// based on an incomplete set of function arguments. This feature is used by
5465 /// code completion.
5466 void
5467 Sema::AddOverloadCandidate(FunctionDecl *Function,
5468                            DeclAccessPair FoundDecl,
5469                            ArrayRef<Expr *> Args,
5470                            OverloadCandidateSet& CandidateSet,
5471                            bool SuppressUserConversions,
5472                            bool PartialOverloading,
5473                            bool AllowExplicit) {
5474   const FunctionProtoType* Proto
5475     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5476   assert(Proto && "Functions without a prototype cannot be overloaded");
5477   assert(!Function->getDescribedFunctionTemplate() &&
5478          "Use AddTemplateOverloadCandidate for function templates");
5479 
5480   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5481     if (!isa<CXXConstructorDecl>(Method)) {
5482       // If we get here, it's because we're calling a member function
5483       // that is named without a member access expression (e.g.,
5484       // "this->f") that was either written explicitly or created
5485       // implicitly. This can happen with a qualified call to a member
5486       // function, e.g., X::f(). We use an empty type for the implied
5487       // object argument (C++ [over.call.func]p3), and the acting context
5488       // is irrelevant.
5489       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5490                          QualType(), Expr::Classification::makeSimpleLValue(),
5491                          Args, CandidateSet, SuppressUserConversions);
5492       return;
5493     }
5494     // We treat a constructor like a non-member function, since its object
5495     // argument doesn't participate in overload resolution.
5496   }
5497 
5498   if (!CandidateSet.isNewCandidate(Function))
5499     return;
5500 
5501   // Overload resolution is always an unevaluated context.
5502   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5503 
5504   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5505     // C++ [class.copy]p3:
5506     //   A member function template is never instantiated to perform the copy
5507     //   of a class object to an object of its class type.
5508     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5509     if (Args.size() == 1 &&
5510         Constructor->isSpecializationCopyingObject() &&
5511         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5512          IsDerivedFrom(Args[0]->getType(), ClassType)))
5513       return;
5514   }
5515 
5516   // Add this candidate
5517   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5518   Candidate.FoundDecl = FoundDecl;
5519   Candidate.Function = Function;
5520   Candidate.Viable = true;
5521   Candidate.IsSurrogate = false;
5522   Candidate.IgnoreObjectArgument = false;
5523   Candidate.ExplicitCallArguments = Args.size();
5524 
5525   unsigned NumArgsInProto = Proto->getNumArgs();
5526 
5527   // (C++ 13.3.2p2): A candidate function having fewer than m
5528   // parameters is viable only if it has an ellipsis in its parameter
5529   // list (8.3.5).
5530   if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5531       !Proto->isVariadic()) {
5532     Candidate.Viable = false;
5533     Candidate.FailureKind = ovl_fail_too_many_arguments;
5534     return;
5535   }
5536 
5537   // (C++ 13.3.2p2): A candidate function having more than m parameters
5538   // is viable only if the (m+1)st parameter has a default argument
5539   // (8.3.6). For the purposes of overload resolution, the
5540   // parameter list is truncated on the right, so that there are
5541   // exactly m parameters.
5542   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5543   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5544     // Not enough arguments.
5545     Candidate.Viable = false;
5546     Candidate.FailureKind = ovl_fail_too_few_arguments;
5547     return;
5548   }
5549 
5550   // (CUDA B.1): Check for invalid calls between targets.
5551   if (getLangOpts().CUDA)
5552     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5553       if (CheckCUDATarget(Caller, Function)) {
5554         Candidate.Viable = false;
5555         Candidate.FailureKind = ovl_fail_bad_target;
5556         return;
5557       }
5558 
5559   // Determine the implicit conversion sequences for each of the
5560   // arguments.
5561   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5562     if (ArgIdx < NumArgsInProto) {
5563       // (C++ 13.3.2p3): for F to be a viable function, there shall
5564       // exist for each argument an implicit conversion sequence
5565       // (13.3.3.1) that converts that argument to the corresponding
5566       // parameter of F.
5567       QualType ParamType = Proto->getArgType(ArgIdx);
5568       Candidate.Conversions[ArgIdx]
5569         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5570                                 SuppressUserConversions,
5571                                 /*InOverloadResolution=*/true,
5572                                 /*AllowObjCWritebackConversion=*/
5573                                   getLangOpts().ObjCAutoRefCount,
5574                                 AllowExplicit);
5575       if (Candidate.Conversions[ArgIdx].isBad()) {
5576         Candidate.Viable = false;
5577         Candidate.FailureKind = ovl_fail_bad_conversion;
5578         break;
5579       }
5580     } else {
5581       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5582       // argument for which there is no corresponding parameter is
5583       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5584       Candidate.Conversions[ArgIdx].setEllipsis();
5585     }
5586   }
5587 }
5588 
5589 /// \brief Add all of the function declarations in the given function set to
5590 /// the overload canddiate set.
5591 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5592                                  ArrayRef<Expr *> Args,
5593                                  OverloadCandidateSet& CandidateSet,
5594                                  bool SuppressUserConversions,
5595                                TemplateArgumentListInfo *ExplicitTemplateArgs) {
5596   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5597     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5598     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5599       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5600         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5601                            cast<CXXMethodDecl>(FD)->getParent(),
5602                            Args[0]->getType(), Args[0]->Classify(Context),
5603                            Args.slice(1), CandidateSet,
5604                            SuppressUserConversions);
5605       else
5606         AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5607                              SuppressUserConversions);
5608     } else {
5609       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5610       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5611           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5612         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5613                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5614                                    ExplicitTemplateArgs,
5615                                    Args[0]->getType(),
5616                                    Args[0]->Classify(Context), Args.slice(1),
5617                                    CandidateSet, SuppressUserConversions);
5618       else
5619         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5620                                      ExplicitTemplateArgs, Args,
5621                                      CandidateSet, SuppressUserConversions);
5622     }
5623   }
5624 }
5625 
5626 /// AddMethodCandidate - Adds a named decl (which is some kind of
5627 /// method) as a method candidate to the given overload set.
5628 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5629                               QualType ObjectType,
5630                               Expr::Classification ObjectClassification,
5631                               ArrayRef<Expr *> Args,
5632                               OverloadCandidateSet& CandidateSet,
5633                               bool SuppressUserConversions) {
5634   NamedDecl *Decl = FoundDecl.getDecl();
5635   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5636 
5637   if (isa<UsingShadowDecl>(Decl))
5638     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5639 
5640   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5641     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5642            "Expected a member function template");
5643     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5644                                /*ExplicitArgs*/ 0,
5645                                ObjectType, ObjectClassification,
5646                                Args, CandidateSet,
5647                                SuppressUserConversions);
5648   } else {
5649     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5650                        ObjectType, ObjectClassification,
5651                        Args,
5652                        CandidateSet, SuppressUserConversions);
5653   }
5654 }
5655 
5656 /// AddMethodCandidate - Adds the given C++ member function to the set
5657 /// of candidate functions, using the given function call arguments
5658 /// and the object argument (@c Object). For example, in a call
5659 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5660 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5661 /// allow user-defined conversions via constructors or conversion
5662 /// operators.
5663 void
5664 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5665                          CXXRecordDecl *ActingContext, QualType ObjectType,
5666                          Expr::Classification ObjectClassification,
5667                          ArrayRef<Expr *> Args,
5668                          OverloadCandidateSet& CandidateSet,
5669                          bool SuppressUserConversions) {
5670   const FunctionProtoType* Proto
5671     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5672   assert(Proto && "Methods without a prototype cannot be overloaded");
5673   assert(!isa<CXXConstructorDecl>(Method) &&
5674          "Use AddOverloadCandidate for constructors");
5675 
5676   if (!CandidateSet.isNewCandidate(Method))
5677     return;
5678 
5679   // Overload resolution is always an unevaluated context.
5680   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5681 
5682   // Add this candidate
5683   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5684   Candidate.FoundDecl = FoundDecl;
5685   Candidate.Function = Method;
5686   Candidate.IsSurrogate = false;
5687   Candidate.IgnoreObjectArgument = false;
5688   Candidate.ExplicitCallArguments = Args.size();
5689 
5690   unsigned NumArgsInProto = Proto->getNumArgs();
5691 
5692   // (C++ 13.3.2p2): A candidate function having fewer than m
5693   // parameters is viable only if it has an ellipsis in its parameter
5694   // list (8.3.5).
5695   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5696     Candidate.Viable = false;
5697     Candidate.FailureKind = ovl_fail_too_many_arguments;
5698     return;
5699   }
5700 
5701   // (C++ 13.3.2p2): A candidate function having more than m parameters
5702   // is viable only if the (m+1)st parameter has a default argument
5703   // (8.3.6). For the purposes of overload resolution, the
5704   // parameter list is truncated on the right, so that there are
5705   // exactly m parameters.
5706   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5707   if (Args.size() < MinRequiredArgs) {
5708     // Not enough arguments.
5709     Candidate.Viable = false;
5710     Candidate.FailureKind = ovl_fail_too_few_arguments;
5711     return;
5712   }
5713 
5714   Candidate.Viable = true;
5715 
5716   if (Method->isStatic() || ObjectType.isNull())
5717     // The implicit object argument is ignored.
5718     Candidate.IgnoreObjectArgument = true;
5719   else {
5720     // Determine the implicit conversion sequence for the object
5721     // parameter.
5722     Candidate.Conversions[0]
5723       = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5724                                         Method, ActingContext);
5725     if (Candidate.Conversions[0].isBad()) {
5726       Candidate.Viable = false;
5727       Candidate.FailureKind = ovl_fail_bad_conversion;
5728       return;
5729     }
5730   }
5731 
5732   // Determine the implicit conversion sequences for each of the
5733   // arguments.
5734   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5735     if (ArgIdx < NumArgsInProto) {
5736       // (C++ 13.3.2p3): for F to be a viable function, there shall
5737       // exist for each argument an implicit conversion sequence
5738       // (13.3.3.1) that converts that argument to the corresponding
5739       // parameter of F.
5740       QualType ParamType = Proto->getArgType(ArgIdx);
5741       Candidate.Conversions[ArgIdx + 1]
5742         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5743                                 SuppressUserConversions,
5744                                 /*InOverloadResolution=*/true,
5745                                 /*AllowObjCWritebackConversion=*/
5746                                   getLangOpts().ObjCAutoRefCount);
5747       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5748         Candidate.Viable = false;
5749         Candidate.FailureKind = ovl_fail_bad_conversion;
5750         break;
5751       }
5752     } else {
5753       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5754       // argument for which there is no corresponding parameter is
5755       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5756       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5757     }
5758   }
5759 }
5760 
5761 /// \brief Add a C++ member function template as a candidate to the candidate
5762 /// set, using template argument deduction to produce an appropriate member
5763 /// function template specialization.
5764 void
5765 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5766                                  DeclAccessPair FoundDecl,
5767                                  CXXRecordDecl *ActingContext,
5768                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5769                                  QualType ObjectType,
5770                                  Expr::Classification ObjectClassification,
5771                                  ArrayRef<Expr *> Args,
5772                                  OverloadCandidateSet& CandidateSet,
5773                                  bool SuppressUserConversions) {
5774   if (!CandidateSet.isNewCandidate(MethodTmpl))
5775     return;
5776 
5777   // C++ [over.match.funcs]p7:
5778   //   In each case where a candidate is a function template, candidate
5779   //   function template specializations are generated using template argument
5780   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5781   //   candidate functions in the usual way.113) A given name can refer to one
5782   //   or more function templates and also to a set of overloaded non-template
5783   //   functions. In such a case, the candidate functions generated from each
5784   //   function template are combined with the set of non-template candidate
5785   //   functions.
5786   TemplateDeductionInfo Info(CandidateSet.getLocation());
5787   FunctionDecl *Specialization = 0;
5788   if (TemplateDeductionResult Result
5789       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5790                                 Specialization, Info)) {
5791     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5792     Candidate.FoundDecl = FoundDecl;
5793     Candidate.Function = MethodTmpl->getTemplatedDecl();
5794     Candidate.Viable = false;
5795     Candidate.FailureKind = ovl_fail_bad_deduction;
5796     Candidate.IsSurrogate = false;
5797     Candidate.IgnoreObjectArgument = false;
5798     Candidate.ExplicitCallArguments = Args.size();
5799     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5800                                                           Info);
5801     return;
5802   }
5803 
5804   // Add the function template specialization produced by template argument
5805   // deduction as a candidate.
5806   assert(Specialization && "Missing member function template specialization?");
5807   assert(isa<CXXMethodDecl>(Specialization) &&
5808          "Specialization is not a member function?");
5809   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5810                      ActingContext, ObjectType, ObjectClassification, Args,
5811                      CandidateSet, SuppressUserConversions);
5812 }
5813 
5814 /// \brief Add a C++ function template specialization as a candidate
5815 /// in the candidate set, using template argument deduction to produce
5816 /// an appropriate function template specialization.
5817 void
5818 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5819                                    DeclAccessPair FoundDecl,
5820                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5821                                    ArrayRef<Expr *> Args,
5822                                    OverloadCandidateSet& CandidateSet,
5823                                    bool SuppressUserConversions) {
5824   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5825     return;
5826 
5827   // C++ [over.match.funcs]p7:
5828   //   In each case where a candidate is a function template, candidate
5829   //   function template specializations are generated using template argument
5830   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5831   //   candidate functions in the usual way.113) A given name can refer to one
5832   //   or more function templates and also to a set of overloaded non-template
5833   //   functions. In such a case, the candidate functions generated from each
5834   //   function template are combined with the set of non-template candidate
5835   //   functions.
5836   TemplateDeductionInfo Info(CandidateSet.getLocation());
5837   FunctionDecl *Specialization = 0;
5838   if (TemplateDeductionResult Result
5839         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5840                                   Specialization, Info)) {
5841     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5842     Candidate.FoundDecl = FoundDecl;
5843     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5844     Candidate.Viable = false;
5845     Candidate.FailureKind = ovl_fail_bad_deduction;
5846     Candidate.IsSurrogate = false;
5847     Candidate.IgnoreObjectArgument = false;
5848     Candidate.ExplicitCallArguments = Args.size();
5849     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5850                                                           Info);
5851     return;
5852   }
5853 
5854   // Add the function template specialization produced by template argument
5855   // deduction as a candidate.
5856   assert(Specialization && "Missing function template specialization?");
5857   AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5858                        SuppressUserConversions);
5859 }
5860 
5861 /// AddConversionCandidate - Add a C++ conversion function as a
5862 /// candidate in the candidate set (C++ [over.match.conv],
5863 /// C++ [over.match.copy]). From is the expression we're converting from,
5864 /// and ToType is the type that we're eventually trying to convert to
5865 /// (which may or may not be the same type as the type that the
5866 /// conversion function produces).
5867 void
5868 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5869                              DeclAccessPair FoundDecl,
5870                              CXXRecordDecl *ActingContext,
5871                              Expr *From, QualType ToType,
5872                              OverloadCandidateSet& CandidateSet) {
5873   assert(!Conversion->getDescribedFunctionTemplate() &&
5874          "Conversion function templates use AddTemplateConversionCandidate");
5875   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5876   if (!CandidateSet.isNewCandidate(Conversion))
5877     return;
5878 
5879   // If the conversion function has an undeduced return type, trigger its
5880   // deduction now.
5881   if (getLangOpts().CPlusPlus1y && ConvType->isUndeducedType()) {
5882     if (DeduceReturnType(Conversion, From->getExprLoc()))
5883       return;
5884     ConvType = Conversion->getConversionType().getNonReferenceType();
5885   }
5886 
5887   // Overload resolution is always an unevaluated context.
5888   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5889 
5890   // Add this candidate
5891   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5892   Candidate.FoundDecl = FoundDecl;
5893   Candidate.Function = Conversion;
5894   Candidate.IsSurrogate = false;
5895   Candidate.IgnoreObjectArgument = false;
5896   Candidate.FinalConversion.setAsIdentityConversion();
5897   Candidate.FinalConversion.setFromType(ConvType);
5898   Candidate.FinalConversion.setAllToTypes(ToType);
5899   Candidate.Viable = true;
5900   Candidate.ExplicitCallArguments = 1;
5901 
5902   // C++ [over.match.funcs]p4:
5903   //   For conversion functions, the function is considered to be a member of
5904   //   the class of the implicit implied object argument for the purpose of
5905   //   defining the type of the implicit object parameter.
5906   //
5907   // Determine the implicit conversion sequence for the implicit
5908   // object parameter.
5909   QualType ImplicitParamType = From->getType();
5910   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5911     ImplicitParamType = FromPtrType->getPointeeType();
5912   CXXRecordDecl *ConversionContext
5913     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5914 
5915   Candidate.Conversions[0]
5916     = TryObjectArgumentInitialization(*this, From->getType(),
5917                                       From->Classify(Context),
5918                                       Conversion, ConversionContext);
5919 
5920   if (Candidate.Conversions[0].isBad()) {
5921     Candidate.Viable = false;
5922     Candidate.FailureKind = ovl_fail_bad_conversion;
5923     return;
5924   }
5925 
5926   // We won't go through a user-define type conversion function to convert a
5927   // derived to base as such conversions are given Conversion Rank. They only
5928   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5929   QualType FromCanon
5930     = Context.getCanonicalType(From->getType().getUnqualifiedType());
5931   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5932   if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5933     Candidate.Viable = false;
5934     Candidate.FailureKind = ovl_fail_trivial_conversion;
5935     return;
5936   }
5937 
5938   // To determine what the conversion from the result of calling the
5939   // conversion function to the type we're eventually trying to
5940   // convert to (ToType), we need to synthesize a call to the
5941   // conversion function and attempt copy initialization from it. This
5942   // makes sure that we get the right semantics with respect to
5943   // lvalues/rvalues and the type. Fortunately, we can allocate this
5944   // call on the stack and we don't need its arguments to be
5945   // well-formed.
5946   DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5947                             VK_LValue, From->getLocStart());
5948   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5949                                 Context.getPointerType(Conversion->getType()),
5950                                 CK_FunctionToPointerDecay,
5951                                 &ConversionRef, VK_RValue);
5952 
5953   QualType ConversionType = Conversion->getConversionType();
5954   if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5955     Candidate.Viable = false;
5956     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5957     return;
5958   }
5959 
5960   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5961 
5962   // Note that it is safe to allocate CallExpr on the stack here because
5963   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5964   // allocator).
5965   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5966   CallExpr Call(Context, &ConversionFn, None, CallResultType, VK,
5967                 From->getLocStart());
5968   ImplicitConversionSequence ICS =
5969     TryCopyInitialization(*this, &Call, ToType,
5970                           /*SuppressUserConversions=*/true,
5971                           /*InOverloadResolution=*/false,
5972                           /*AllowObjCWritebackConversion=*/false);
5973 
5974   switch (ICS.getKind()) {
5975   case ImplicitConversionSequence::StandardConversion:
5976     Candidate.FinalConversion = ICS.Standard;
5977 
5978     // C++ [over.ics.user]p3:
5979     //   If the user-defined conversion is specified by a specialization of a
5980     //   conversion function template, the second standard conversion sequence
5981     //   shall have exact match rank.
5982     if (Conversion->getPrimaryTemplate() &&
5983         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5984       Candidate.Viable = false;
5985       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5986     }
5987 
5988     // C++0x [dcl.init.ref]p5:
5989     //    In the second case, if the reference is an rvalue reference and
5990     //    the second standard conversion sequence of the user-defined
5991     //    conversion sequence includes an lvalue-to-rvalue conversion, the
5992     //    program is ill-formed.
5993     if (ToType->isRValueReferenceType() &&
5994         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5995       Candidate.Viable = false;
5996       Candidate.FailureKind = ovl_fail_bad_final_conversion;
5997     }
5998     break;
5999 
6000   case ImplicitConversionSequence::BadConversion:
6001     Candidate.Viable = false;
6002     Candidate.FailureKind = ovl_fail_bad_final_conversion;
6003     break;
6004 
6005   default:
6006     llvm_unreachable(
6007            "Can only end up with a standard conversion sequence or failure");
6008   }
6009 }
6010 
6011 /// \brief Adds a conversion function template specialization
6012 /// candidate to the overload set, using template argument deduction
6013 /// to deduce the template arguments of the conversion function
6014 /// template from the type that we are converting to (C++
6015 /// [temp.deduct.conv]).
6016 void
6017 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
6018                                      DeclAccessPair FoundDecl,
6019                                      CXXRecordDecl *ActingDC,
6020                                      Expr *From, QualType ToType,
6021                                      OverloadCandidateSet &CandidateSet) {
6022   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
6023          "Only conversion function templates permitted here");
6024 
6025   if (!CandidateSet.isNewCandidate(FunctionTemplate))
6026     return;
6027 
6028   TemplateDeductionInfo Info(CandidateSet.getLocation());
6029   CXXConversionDecl *Specialization = 0;
6030   if (TemplateDeductionResult Result
6031         = DeduceTemplateArguments(FunctionTemplate, ToType,
6032                                   Specialization, Info)) {
6033     OverloadCandidate &Candidate = CandidateSet.addCandidate();
6034     Candidate.FoundDecl = FoundDecl;
6035     Candidate.Function = FunctionTemplate->getTemplatedDecl();
6036     Candidate.Viable = false;
6037     Candidate.FailureKind = ovl_fail_bad_deduction;
6038     Candidate.IsSurrogate = false;
6039     Candidate.IgnoreObjectArgument = false;
6040     Candidate.ExplicitCallArguments = 1;
6041     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
6042                                                           Info);
6043     return;
6044   }
6045 
6046   // Add the conversion function template specialization produced by
6047   // template argument deduction as a candidate.
6048   assert(Specialization && "Missing function template specialization?");
6049   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
6050                          CandidateSet);
6051 }
6052 
6053 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
6054 /// converts the given @c Object to a function pointer via the
6055 /// conversion function @c Conversion, and then attempts to call it
6056 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
6057 /// the type of function that we'll eventually be calling.
6058 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
6059                                  DeclAccessPair FoundDecl,
6060                                  CXXRecordDecl *ActingContext,
6061                                  const FunctionProtoType *Proto,
6062                                  Expr *Object,
6063                                  ArrayRef<Expr *> Args,
6064                                  OverloadCandidateSet& CandidateSet) {
6065   if (!CandidateSet.isNewCandidate(Conversion))
6066     return;
6067 
6068   // Overload resolution is always an unevaluated context.
6069   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6070 
6071   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
6072   Candidate.FoundDecl = FoundDecl;
6073   Candidate.Function = 0;
6074   Candidate.Surrogate = Conversion;
6075   Candidate.Viable = true;
6076   Candidate.IsSurrogate = true;
6077   Candidate.IgnoreObjectArgument = false;
6078   Candidate.ExplicitCallArguments = Args.size();
6079 
6080   // Determine the implicit conversion sequence for the implicit
6081   // object parameter.
6082   ImplicitConversionSequence ObjectInit
6083     = TryObjectArgumentInitialization(*this, Object->getType(),
6084                                       Object->Classify(Context),
6085                                       Conversion, ActingContext);
6086   if (ObjectInit.isBad()) {
6087     Candidate.Viable = false;
6088     Candidate.FailureKind = ovl_fail_bad_conversion;
6089     Candidate.Conversions[0] = ObjectInit;
6090     return;
6091   }
6092 
6093   // The first conversion is actually a user-defined conversion whose
6094   // first conversion is ObjectInit's standard conversion (which is
6095   // effectively a reference binding). Record it as such.
6096   Candidate.Conversions[0].setUserDefined();
6097   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
6098   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
6099   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
6100   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
6101   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
6102   Candidate.Conversions[0].UserDefined.After
6103     = Candidate.Conversions[0].UserDefined.Before;
6104   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
6105 
6106   // Find the
6107   unsigned NumArgsInProto = Proto->getNumArgs();
6108 
6109   // (C++ 13.3.2p2): A candidate function having fewer than m
6110   // parameters is viable only if it has an ellipsis in its parameter
6111   // list (8.3.5).
6112   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
6113     Candidate.Viable = false;
6114     Candidate.FailureKind = ovl_fail_too_many_arguments;
6115     return;
6116   }
6117 
6118   // Function types don't have any default arguments, so just check if
6119   // we have enough arguments.
6120   if (Args.size() < NumArgsInProto) {
6121     // Not enough arguments.
6122     Candidate.Viable = false;
6123     Candidate.FailureKind = ovl_fail_too_few_arguments;
6124     return;
6125   }
6126 
6127   // Determine the implicit conversion sequences for each of the
6128   // arguments.
6129   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6130     if (ArgIdx < NumArgsInProto) {
6131       // (C++ 13.3.2p3): for F to be a viable function, there shall
6132       // exist for each argument an implicit conversion sequence
6133       // (13.3.3.1) that converts that argument to the corresponding
6134       // parameter of F.
6135       QualType ParamType = Proto->getArgType(ArgIdx);
6136       Candidate.Conversions[ArgIdx + 1]
6137         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
6138                                 /*SuppressUserConversions=*/false,
6139                                 /*InOverloadResolution=*/false,
6140                                 /*AllowObjCWritebackConversion=*/
6141                                   getLangOpts().ObjCAutoRefCount);
6142       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
6143         Candidate.Viable = false;
6144         Candidate.FailureKind = ovl_fail_bad_conversion;
6145         break;
6146       }
6147     } else {
6148       // (C++ 13.3.2p2): For the purposes of overload resolution, any
6149       // argument for which there is no corresponding parameter is
6150       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
6151       Candidate.Conversions[ArgIdx + 1].setEllipsis();
6152     }
6153   }
6154 }
6155 
6156 /// \brief Add overload candidates for overloaded operators that are
6157 /// member functions.
6158 ///
6159 /// Add the overloaded operator candidates that are member functions
6160 /// for the operator Op that was used in an operator expression such
6161 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
6162 /// CandidateSet will store the added overload candidates. (C++
6163 /// [over.match.oper]).
6164 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
6165                                        SourceLocation OpLoc,
6166                                        ArrayRef<Expr *> Args,
6167                                        OverloadCandidateSet& CandidateSet,
6168                                        SourceRange OpRange) {
6169   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6170 
6171   // C++ [over.match.oper]p3:
6172   //   For a unary operator @ with an operand of a type whose
6173   //   cv-unqualified version is T1, and for a binary operator @ with
6174   //   a left operand of a type whose cv-unqualified version is T1 and
6175   //   a right operand of a type whose cv-unqualified version is T2,
6176   //   three sets of candidate functions, designated member
6177   //   candidates, non-member candidates and built-in candidates, are
6178   //   constructed as follows:
6179   QualType T1 = Args[0]->getType();
6180 
6181   //     -- If T1 is a complete class type or a class currently being
6182   //        defined, the set of member candidates is the result of the
6183   //        qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
6184   //        the set of member candidates is empty.
6185   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
6186     // Complete the type if it can be completed.
6187     RequireCompleteType(OpLoc, T1, 0);
6188     // If the type is neither complete nor being defined, bail out now.
6189     if (!T1Rec->getDecl()->getDefinition())
6190       return;
6191 
6192     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
6193     LookupQualifiedName(Operators, T1Rec->getDecl());
6194     Operators.suppressDiagnostics();
6195 
6196     for (LookupResult::iterator Oper = Operators.begin(),
6197                              OperEnd = Operators.end();
6198          Oper != OperEnd;
6199          ++Oper)
6200       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
6201                          Args[0]->Classify(Context),
6202                          Args.slice(1),
6203                          CandidateSet,
6204                          /* SuppressUserConversions = */ false);
6205   }
6206 }
6207 
6208 /// AddBuiltinCandidate - Add a candidate for a built-in
6209 /// operator. ResultTy and ParamTys are the result and parameter types
6210 /// of the built-in candidate, respectively. Args and NumArgs are the
6211 /// arguments being passed to the candidate. IsAssignmentOperator
6212 /// should be true when this built-in candidate is an assignment
6213 /// operator. NumContextualBoolArguments is the number of arguments
6214 /// (at the beginning of the argument list) that will be contextually
6215 /// converted to bool.
6216 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
6217                                ArrayRef<Expr *> Args,
6218                                OverloadCandidateSet& CandidateSet,
6219                                bool IsAssignmentOperator,
6220                                unsigned NumContextualBoolArguments) {
6221   // Overload resolution is always an unevaluated context.
6222   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6223 
6224   // Add this candidate
6225   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
6226   Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
6227   Candidate.Function = 0;
6228   Candidate.IsSurrogate = false;
6229   Candidate.IgnoreObjectArgument = false;
6230   Candidate.BuiltinTypes.ResultTy = ResultTy;
6231   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
6232     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
6233 
6234   // Determine the implicit conversion sequences for each of the
6235   // arguments.
6236   Candidate.Viable = true;
6237   Candidate.ExplicitCallArguments = Args.size();
6238   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6239     // C++ [over.match.oper]p4:
6240     //   For the built-in assignment operators, conversions of the
6241     //   left operand are restricted as follows:
6242     //     -- no temporaries are introduced to hold the left operand, and
6243     //     -- no user-defined conversions are applied to the left
6244     //        operand to achieve a type match with the left-most
6245     //        parameter of a built-in candidate.
6246     //
6247     // We block these conversions by turning off user-defined
6248     // conversions, since that is the only way that initialization of
6249     // a reference to a non-class type can occur from something that
6250     // is not of the same type.
6251     if (ArgIdx < NumContextualBoolArguments) {
6252       assert(ParamTys[ArgIdx] == Context.BoolTy &&
6253              "Contextual conversion to bool requires bool type");
6254       Candidate.Conversions[ArgIdx]
6255         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6256     } else {
6257       Candidate.Conversions[ArgIdx]
6258         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6259                                 ArgIdx == 0 && IsAssignmentOperator,
6260                                 /*InOverloadResolution=*/false,
6261                                 /*AllowObjCWritebackConversion=*/
6262                                   getLangOpts().ObjCAutoRefCount);
6263     }
6264     if (Candidate.Conversions[ArgIdx].isBad()) {
6265       Candidate.Viable = false;
6266       Candidate.FailureKind = ovl_fail_bad_conversion;
6267       break;
6268     }
6269   }
6270 }
6271 
6272 /// BuiltinCandidateTypeSet - A set of types that will be used for the
6273 /// candidate operator functions for built-in operators (C++
6274 /// [over.built]). The types are separated into pointer types and
6275 /// enumeration types.
6276 class BuiltinCandidateTypeSet  {
6277   /// TypeSet - A set of types.
6278   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6279 
6280   /// PointerTypes - The set of pointer types that will be used in the
6281   /// built-in candidates.
6282   TypeSet PointerTypes;
6283 
6284   /// MemberPointerTypes - The set of member pointer types that will be
6285   /// used in the built-in candidates.
6286   TypeSet MemberPointerTypes;
6287 
6288   /// EnumerationTypes - The set of enumeration types that will be
6289   /// used in the built-in candidates.
6290   TypeSet EnumerationTypes;
6291 
6292   /// \brief The set of vector types that will be used in the built-in
6293   /// candidates.
6294   TypeSet VectorTypes;
6295 
6296   /// \brief A flag indicating non-record types are viable candidates
6297   bool HasNonRecordTypes;
6298 
6299   /// \brief A flag indicating whether either arithmetic or enumeration types
6300   /// were present in the candidate set.
6301   bool HasArithmeticOrEnumeralTypes;
6302 
6303   /// \brief A flag indicating whether the nullptr type was present in the
6304   /// candidate set.
6305   bool HasNullPtrType;
6306 
6307   /// Sema - The semantic analysis instance where we are building the
6308   /// candidate type set.
6309   Sema &SemaRef;
6310 
6311   /// Context - The AST context in which we will build the type sets.
6312   ASTContext &Context;
6313 
6314   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6315                                                const Qualifiers &VisibleQuals);
6316   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6317 
6318 public:
6319   /// iterator - Iterates through the types that are part of the set.
6320   typedef TypeSet::iterator iterator;
6321 
6322   BuiltinCandidateTypeSet(Sema &SemaRef)
6323     : HasNonRecordTypes(false),
6324       HasArithmeticOrEnumeralTypes(false),
6325       HasNullPtrType(false),
6326       SemaRef(SemaRef),
6327       Context(SemaRef.Context) { }
6328 
6329   void AddTypesConvertedFrom(QualType Ty,
6330                              SourceLocation Loc,
6331                              bool AllowUserConversions,
6332                              bool AllowExplicitConversions,
6333                              const Qualifiers &VisibleTypeConversionsQuals);
6334 
6335   /// pointer_begin - First pointer type found;
6336   iterator pointer_begin() { return PointerTypes.begin(); }
6337 
6338   /// pointer_end - Past the last pointer type found;
6339   iterator pointer_end() { return PointerTypes.end(); }
6340 
6341   /// member_pointer_begin - First member pointer type found;
6342   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6343 
6344   /// member_pointer_end - Past the last member pointer type found;
6345   iterator member_pointer_end() { return MemberPointerTypes.end(); }
6346 
6347   /// enumeration_begin - First enumeration type found;
6348   iterator enumeration_begin() { return EnumerationTypes.begin(); }
6349 
6350   /// enumeration_end - Past the last enumeration type found;
6351   iterator enumeration_end() { return EnumerationTypes.end(); }
6352 
6353   iterator vector_begin() { return VectorTypes.begin(); }
6354   iterator vector_end() { return VectorTypes.end(); }
6355 
6356   bool hasNonRecordTypes() { return HasNonRecordTypes; }
6357   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6358   bool hasNullPtrType() const { return HasNullPtrType; }
6359 };
6360 
6361 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6362 /// the set of pointer types along with any more-qualified variants of
6363 /// that type. For example, if @p Ty is "int const *", this routine
6364 /// will add "int const *", "int const volatile *", "int const
6365 /// restrict *", and "int const volatile restrict *" to the set of
6366 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6367 /// false otherwise.
6368 ///
6369 /// FIXME: what to do about extended qualifiers?
6370 bool
6371 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6372                                              const Qualifiers &VisibleQuals) {
6373 
6374   // Insert this type.
6375   if (!PointerTypes.insert(Ty))
6376     return false;
6377 
6378   QualType PointeeTy;
6379   const PointerType *PointerTy = Ty->getAs<PointerType>();
6380   bool buildObjCPtr = false;
6381   if (!PointerTy) {
6382     const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6383     PointeeTy = PTy->getPointeeType();
6384     buildObjCPtr = true;
6385   } else {
6386     PointeeTy = PointerTy->getPointeeType();
6387   }
6388 
6389   // Don't add qualified variants of arrays. For one, they're not allowed
6390   // (the qualifier would sink to the element type), and for another, the
6391   // only overload situation where it matters is subscript or pointer +- int,
6392   // and those shouldn't have qualifier variants anyway.
6393   if (PointeeTy->isArrayType())
6394     return true;
6395 
6396   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6397   bool hasVolatile = VisibleQuals.hasVolatile();
6398   bool hasRestrict = VisibleQuals.hasRestrict();
6399 
6400   // Iterate through all strict supersets of BaseCVR.
6401   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6402     if ((CVR | BaseCVR) != CVR) continue;
6403     // Skip over volatile if no volatile found anywhere in the types.
6404     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6405 
6406     // Skip over restrict if no restrict found anywhere in the types, or if
6407     // the type cannot be restrict-qualified.
6408     if ((CVR & Qualifiers::Restrict) &&
6409         (!hasRestrict ||
6410          (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6411       continue;
6412 
6413     // Build qualified pointee type.
6414     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6415 
6416     // Build qualified pointer type.
6417     QualType QPointerTy;
6418     if (!buildObjCPtr)
6419       QPointerTy = Context.getPointerType(QPointeeTy);
6420     else
6421       QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6422 
6423     // Insert qualified pointer type.
6424     PointerTypes.insert(QPointerTy);
6425   }
6426 
6427   return true;
6428 }
6429 
6430 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6431 /// to the set of pointer types along with any more-qualified variants of
6432 /// that type. For example, if @p Ty is "int const *", this routine
6433 /// will add "int const *", "int const volatile *", "int const
6434 /// restrict *", and "int const volatile restrict *" to the set of
6435 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6436 /// false otherwise.
6437 ///
6438 /// FIXME: what to do about extended qualifiers?
6439 bool
6440 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6441     QualType Ty) {
6442   // Insert this type.
6443   if (!MemberPointerTypes.insert(Ty))
6444     return false;
6445 
6446   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6447   assert(PointerTy && "type was not a member pointer type!");
6448 
6449   QualType PointeeTy = PointerTy->getPointeeType();
6450   // Don't add qualified variants of arrays. For one, they're not allowed
6451   // (the qualifier would sink to the element type), and for another, the
6452   // only overload situation where it matters is subscript or pointer +- int,
6453   // and those shouldn't have qualifier variants anyway.
6454   if (PointeeTy->isArrayType())
6455     return true;
6456   const Type *ClassTy = PointerTy->getClass();
6457 
6458   // Iterate through all strict supersets of the pointee type's CVR
6459   // qualifiers.
6460   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6461   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6462     if ((CVR | BaseCVR) != CVR) continue;
6463 
6464     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6465     MemberPointerTypes.insert(
6466       Context.getMemberPointerType(QPointeeTy, ClassTy));
6467   }
6468 
6469   return true;
6470 }
6471 
6472 /// AddTypesConvertedFrom - Add each of the types to which the type @p
6473 /// Ty can be implicit converted to the given set of @p Types. We're
6474 /// primarily interested in pointer types and enumeration types. We also
6475 /// take member pointer types, for the conditional operator.
6476 /// AllowUserConversions is true if we should look at the conversion
6477 /// functions of a class type, and AllowExplicitConversions if we
6478 /// should also include the explicit conversion functions of a class
6479 /// type.
6480 void
6481 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6482                                                SourceLocation Loc,
6483                                                bool AllowUserConversions,
6484                                                bool AllowExplicitConversions,
6485                                                const Qualifiers &VisibleQuals) {
6486   // Only deal with canonical types.
6487   Ty = Context.getCanonicalType(Ty);
6488 
6489   // Look through reference types; they aren't part of the type of an
6490   // expression for the purposes of conversions.
6491   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6492     Ty = RefTy->getPointeeType();
6493 
6494   // If we're dealing with an array type, decay to the pointer.
6495   if (Ty->isArrayType())
6496     Ty = SemaRef.Context.getArrayDecayedType(Ty);
6497 
6498   // Otherwise, we don't care about qualifiers on the type.
6499   Ty = Ty.getLocalUnqualifiedType();
6500 
6501   // Flag if we ever add a non-record type.
6502   const RecordType *TyRec = Ty->getAs<RecordType>();
6503   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6504 
6505   // Flag if we encounter an arithmetic type.
6506   HasArithmeticOrEnumeralTypes =
6507     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6508 
6509   if (Ty->isObjCIdType() || Ty->isObjCClassType())
6510     PointerTypes.insert(Ty);
6511   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6512     // Insert our type, and its more-qualified variants, into the set
6513     // of types.
6514     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6515       return;
6516   } else if (Ty->isMemberPointerType()) {
6517     // Member pointers are far easier, since the pointee can't be converted.
6518     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6519       return;
6520   } else if (Ty->isEnumeralType()) {
6521     HasArithmeticOrEnumeralTypes = true;
6522     EnumerationTypes.insert(Ty);
6523   } else if (Ty->isVectorType()) {
6524     // We treat vector types as arithmetic types in many contexts as an
6525     // extension.
6526     HasArithmeticOrEnumeralTypes = true;
6527     VectorTypes.insert(Ty);
6528   } else if (Ty->isNullPtrType()) {
6529     HasNullPtrType = true;
6530   } else if (AllowUserConversions && TyRec) {
6531     // No conversion functions in incomplete types.
6532     if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6533       return;
6534 
6535     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6536     std::pair<CXXRecordDecl::conversion_iterator,
6537               CXXRecordDecl::conversion_iterator>
6538       Conversions = ClassDecl->getVisibleConversionFunctions();
6539     for (CXXRecordDecl::conversion_iterator
6540            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6541       NamedDecl *D = I.getDecl();
6542       if (isa<UsingShadowDecl>(D))
6543         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6544 
6545       // Skip conversion function templates; they don't tell us anything
6546       // about which builtin types we can convert to.
6547       if (isa<FunctionTemplateDecl>(D))
6548         continue;
6549 
6550       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6551       if (AllowExplicitConversions || !Conv->isExplicit()) {
6552         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6553                               VisibleQuals);
6554       }
6555     }
6556   }
6557 }
6558 
6559 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6560 /// the volatile- and non-volatile-qualified assignment operators for the
6561 /// given type to the candidate set.
6562 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6563                                                    QualType T,
6564                                                    ArrayRef<Expr *> Args,
6565                                     OverloadCandidateSet &CandidateSet) {
6566   QualType ParamTypes[2];
6567 
6568   // T& operator=(T&, T)
6569   ParamTypes[0] = S.Context.getLValueReferenceType(T);
6570   ParamTypes[1] = T;
6571   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6572                         /*IsAssignmentOperator=*/true);
6573 
6574   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6575     // volatile T& operator=(volatile T&, T)
6576     ParamTypes[0]
6577       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6578     ParamTypes[1] = T;
6579     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6580                           /*IsAssignmentOperator=*/true);
6581   }
6582 }
6583 
6584 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6585 /// if any, found in visible type conversion functions found in ArgExpr's type.
6586 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6587     Qualifiers VRQuals;
6588     const RecordType *TyRec;
6589     if (const MemberPointerType *RHSMPType =
6590         ArgExpr->getType()->getAs<MemberPointerType>())
6591       TyRec = RHSMPType->getClass()->getAs<RecordType>();
6592     else
6593       TyRec = ArgExpr->getType()->getAs<RecordType>();
6594     if (!TyRec) {
6595       // Just to be safe, assume the worst case.
6596       VRQuals.addVolatile();
6597       VRQuals.addRestrict();
6598       return VRQuals;
6599     }
6600 
6601     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6602     if (!ClassDecl->hasDefinition())
6603       return VRQuals;
6604 
6605     std::pair<CXXRecordDecl::conversion_iterator,
6606               CXXRecordDecl::conversion_iterator>
6607       Conversions = ClassDecl->getVisibleConversionFunctions();
6608 
6609     for (CXXRecordDecl::conversion_iterator
6610            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6611       NamedDecl *D = I.getDecl();
6612       if (isa<UsingShadowDecl>(D))
6613         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6614       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6615         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6616         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6617           CanTy = ResTypeRef->getPointeeType();
6618         // Need to go down the pointer/mempointer chain and add qualifiers
6619         // as see them.
6620         bool done = false;
6621         while (!done) {
6622           if (CanTy.isRestrictQualified())
6623             VRQuals.addRestrict();
6624           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6625             CanTy = ResTypePtr->getPointeeType();
6626           else if (const MemberPointerType *ResTypeMPtr =
6627                 CanTy->getAs<MemberPointerType>())
6628             CanTy = ResTypeMPtr->getPointeeType();
6629           else
6630             done = true;
6631           if (CanTy.isVolatileQualified())
6632             VRQuals.addVolatile();
6633           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6634             return VRQuals;
6635         }
6636       }
6637     }
6638     return VRQuals;
6639 }
6640 
6641 namespace {
6642 
6643 /// \brief Helper class to manage the addition of builtin operator overload
6644 /// candidates. It provides shared state and utility methods used throughout
6645 /// the process, as well as a helper method to add each group of builtin
6646 /// operator overloads from the standard to a candidate set.
6647 class BuiltinOperatorOverloadBuilder {
6648   // Common instance state available to all overload candidate addition methods.
6649   Sema &S;
6650   ArrayRef<Expr *> Args;
6651   Qualifiers VisibleTypeConversionsQuals;
6652   bool HasArithmeticOrEnumeralCandidateType;
6653   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6654   OverloadCandidateSet &CandidateSet;
6655 
6656   // Define some constants used to index and iterate over the arithemetic types
6657   // provided via the getArithmeticType() method below.
6658   // The "promoted arithmetic types" are the arithmetic
6659   // types are that preserved by promotion (C++ [over.built]p2).
6660   static const unsigned FirstIntegralType = 3;
6661   static const unsigned LastIntegralType = 20;
6662   static const unsigned FirstPromotedIntegralType = 3,
6663                         LastPromotedIntegralType = 11;
6664   static const unsigned FirstPromotedArithmeticType = 0,
6665                         LastPromotedArithmeticType = 11;
6666   static const unsigned NumArithmeticTypes = 20;
6667 
6668   /// \brief Get the canonical type for a given arithmetic type index.
6669   CanQualType getArithmeticType(unsigned index) {
6670     assert(index < NumArithmeticTypes);
6671     static CanQualType ASTContext::* const
6672       ArithmeticTypes[NumArithmeticTypes] = {
6673       // Start of promoted types.
6674       &ASTContext::FloatTy,
6675       &ASTContext::DoubleTy,
6676       &ASTContext::LongDoubleTy,
6677 
6678       // Start of integral types.
6679       &ASTContext::IntTy,
6680       &ASTContext::LongTy,
6681       &ASTContext::LongLongTy,
6682       &ASTContext::Int128Ty,
6683       &ASTContext::UnsignedIntTy,
6684       &ASTContext::UnsignedLongTy,
6685       &ASTContext::UnsignedLongLongTy,
6686       &ASTContext::UnsignedInt128Ty,
6687       // End of promoted types.
6688 
6689       &ASTContext::BoolTy,
6690       &ASTContext::CharTy,
6691       &ASTContext::WCharTy,
6692       &ASTContext::Char16Ty,
6693       &ASTContext::Char32Ty,
6694       &ASTContext::SignedCharTy,
6695       &ASTContext::ShortTy,
6696       &ASTContext::UnsignedCharTy,
6697       &ASTContext::UnsignedShortTy,
6698       // End of integral types.
6699       // FIXME: What about complex? What about half?
6700     };
6701     return S.Context.*ArithmeticTypes[index];
6702   }
6703 
6704   /// \brief Gets the canonical type resulting from the usual arithemetic
6705   /// converions for the given arithmetic types.
6706   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6707     // Accelerator table for performing the usual arithmetic conversions.
6708     // The rules are basically:
6709     //   - if either is floating-point, use the wider floating-point
6710     //   - if same signedness, use the higher rank
6711     //   - if same size, use unsigned of the higher rank
6712     //   - use the larger type
6713     // These rules, together with the axiom that higher ranks are
6714     // never smaller, are sufficient to precompute all of these results
6715     // *except* when dealing with signed types of higher rank.
6716     // (we could precompute SLL x UI for all known platforms, but it's
6717     // better not to make any assumptions).
6718     // We assume that int128 has a higher rank than long long on all platforms.
6719     enum PromotedType {
6720             Dep=-1,
6721             Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6722     };
6723     static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6724                                         [LastPromotedArithmeticType] = {
6725 /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6726 /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6727 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6728 /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6729 /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6730 /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6731 /*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6732 /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6733 /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6734 /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6735 /*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6736     };
6737 
6738     assert(L < LastPromotedArithmeticType);
6739     assert(R < LastPromotedArithmeticType);
6740     int Idx = ConversionsTable[L][R];
6741 
6742     // Fast path: the table gives us a concrete answer.
6743     if (Idx != Dep) return getArithmeticType(Idx);
6744 
6745     // Slow path: we need to compare widths.
6746     // An invariant is that the signed type has higher rank.
6747     CanQualType LT = getArithmeticType(L),
6748                 RT = getArithmeticType(R);
6749     unsigned LW = S.Context.getIntWidth(LT),
6750              RW = S.Context.getIntWidth(RT);
6751 
6752     // If they're different widths, use the signed type.
6753     if (LW > RW) return LT;
6754     else if (LW < RW) return RT;
6755 
6756     // Otherwise, use the unsigned type of the signed type's rank.
6757     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6758     assert(L == SLL || R == SLL);
6759     return S.Context.UnsignedLongLongTy;
6760   }
6761 
6762   /// \brief Helper method to factor out the common pattern of adding overloads
6763   /// for '++' and '--' builtin operators.
6764   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6765                                            bool HasVolatile,
6766                                            bool HasRestrict) {
6767     QualType ParamTypes[2] = {
6768       S.Context.getLValueReferenceType(CandidateTy),
6769       S.Context.IntTy
6770     };
6771 
6772     // Non-volatile version.
6773     if (Args.size() == 1)
6774       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6775     else
6776       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6777 
6778     // Use a heuristic to reduce number of builtin candidates in the set:
6779     // add volatile version only if there are conversions to a volatile type.
6780     if (HasVolatile) {
6781       ParamTypes[0] =
6782         S.Context.getLValueReferenceType(
6783           S.Context.getVolatileType(CandidateTy));
6784       if (Args.size() == 1)
6785         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6786       else
6787         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6788     }
6789 
6790     // Add restrict version only if there are conversions to a restrict type
6791     // and our candidate type is a non-restrict-qualified pointer.
6792     if (HasRestrict && CandidateTy->isAnyPointerType() &&
6793         !CandidateTy.isRestrictQualified()) {
6794       ParamTypes[0]
6795         = S.Context.getLValueReferenceType(
6796             S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6797       if (Args.size() == 1)
6798         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6799       else
6800         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6801 
6802       if (HasVolatile) {
6803         ParamTypes[0]
6804           = S.Context.getLValueReferenceType(
6805               S.Context.getCVRQualifiedType(CandidateTy,
6806                                             (Qualifiers::Volatile |
6807                                              Qualifiers::Restrict)));
6808         if (Args.size() == 1)
6809           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6810         else
6811           S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6812       }
6813     }
6814 
6815   }
6816 
6817 public:
6818   BuiltinOperatorOverloadBuilder(
6819     Sema &S, ArrayRef<Expr *> Args,
6820     Qualifiers VisibleTypeConversionsQuals,
6821     bool HasArithmeticOrEnumeralCandidateType,
6822     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6823     OverloadCandidateSet &CandidateSet)
6824     : S(S), Args(Args),
6825       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6826       HasArithmeticOrEnumeralCandidateType(
6827         HasArithmeticOrEnumeralCandidateType),
6828       CandidateTypes(CandidateTypes),
6829       CandidateSet(CandidateSet) {
6830     // Validate some of our static helper constants in debug builds.
6831     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6832            "Invalid first promoted integral type");
6833     assert(getArithmeticType(LastPromotedIntegralType - 1)
6834              == S.Context.UnsignedInt128Ty &&
6835            "Invalid last promoted integral type");
6836     assert(getArithmeticType(FirstPromotedArithmeticType)
6837              == S.Context.FloatTy &&
6838            "Invalid first promoted arithmetic type");
6839     assert(getArithmeticType(LastPromotedArithmeticType - 1)
6840              == S.Context.UnsignedInt128Ty &&
6841            "Invalid last promoted arithmetic type");
6842   }
6843 
6844   // C++ [over.built]p3:
6845   //
6846   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6847   //   is either volatile or empty, there exist candidate operator
6848   //   functions of the form
6849   //
6850   //       VQ T&      operator++(VQ T&);
6851   //       T          operator++(VQ T&, int);
6852   //
6853   // C++ [over.built]p4:
6854   //
6855   //   For every pair (T, VQ), where T is an arithmetic type other
6856   //   than bool, and VQ is either volatile or empty, there exist
6857   //   candidate operator functions of the form
6858   //
6859   //       VQ T&      operator--(VQ T&);
6860   //       T          operator--(VQ T&, int);
6861   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6862     if (!HasArithmeticOrEnumeralCandidateType)
6863       return;
6864 
6865     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6866          Arith < NumArithmeticTypes; ++Arith) {
6867       addPlusPlusMinusMinusStyleOverloads(
6868         getArithmeticType(Arith),
6869         VisibleTypeConversionsQuals.hasVolatile(),
6870         VisibleTypeConversionsQuals.hasRestrict());
6871     }
6872   }
6873 
6874   // C++ [over.built]p5:
6875   //
6876   //   For every pair (T, VQ), where T is a cv-qualified or
6877   //   cv-unqualified object type, and VQ is either volatile or
6878   //   empty, there exist candidate operator functions of the form
6879   //
6880   //       T*VQ&      operator++(T*VQ&);
6881   //       T*VQ&      operator--(T*VQ&);
6882   //       T*         operator++(T*VQ&, int);
6883   //       T*         operator--(T*VQ&, int);
6884   void addPlusPlusMinusMinusPointerOverloads() {
6885     for (BuiltinCandidateTypeSet::iterator
6886               Ptr = CandidateTypes[0].pointer_begin(),
6887            PtrEnd = CandidateTypes[0].pointer_end();
6888          Ptr != PtrEnd; ++Ptr) {
6889       // Skip pointer types that aren't pointers to object types.
6890       if (!(*Ptr)->getPointeeType()->isObjectType())
6891         continue;
6892 
6893       addPlusPlusMinusMinusStyleOverloads(*Ptr,
6894         (!(*Ptr).isVolatileQualified() &&
6895          VisibleTypeConversionsQuals.hasVolatile()),
6896         (!(*Ptr).isRestrictQualified() &&
6897          VisibleTypeConversionsQuals.hasRestrict()));
6898     }
6899   }
6900 
6901   // C++ [over.built]p6:
6902   //   For every cv-qualified or cv-unqualified object type T, there
6903   //   exist candidate operator functions of the form
6904   //
6905   //       T&         operator*(T*);
6906   //
6907   // C++ [over.built]p7:
6908   //   For every function type T that does not have cv-qualifiers or a
6909   //   ref-qualifier, there exist candidate operator functions of the form
6910   //       T&         operator*(T*);
6911   void addUnaryStarPointerOverloads() {
6912     for (BuiltinCandidateTypeSet::iterator
6913               Ptr = CandidateTypes[0].pointer_begin(),
6914            PtrEnd = CandidateTypes[0].pointer_end();
6915          Ptr != PtrEnd; ++Ptr) {
6916       QualType ParamTy = *Ptr;
6917       QualType PointeeTy = ParamTy->getPointeeType();
6918       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6919         continue;
6920 
6921       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6922         if (Proto->getTypeQuals() || Proto->getRefQualifier())
6923           continue;
6924 
6925       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6926                             &ParamTy, Args, CandidateSet);
6927     }
6928   }
6929 
6930   // C++ [over.built]p9:
6931   //  For every promoted arithmetic type T, there exist candidate
6932   //  operator functions of the form
6933   //
6934   //       T         operator+(T);
6935   //       T         operator-(T);
6936   void addUnaryPlusOrMinusArithmeticOverloads() {
6937     if (!HasArithmeticOrEnumeralCandidateType)
6938       return;
6939 
6940     for (unsigned Arith = FirstPromotedArithmeticType;
6941          Arith < LastPromotedArithmeticType; ++Arith) {
6942       QualType ArithTy = getArithmeticType(Arith);
6943       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, CandidateSet);
6944     }
6945 
6946     // Extension: We also add these operators for vector types.
6947     for (BuiltinCandidateTypeSet::iterator
6948               Vec = CandidateTypes[0].vector_begin(),
6949            VecEnd = CandidateTypes[0].vector_end();
6950          Vec != VecEnd; ++Vec) {
6951       QualType VecTy = *Vec;
6952       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6953     }
6954   }
6955 
6956   // C++ [over.built]p8:
6957   //   For every type T, there exist candidate operator functions of
6958   //   the form
6959   //
6960   //       T*         operator+(T*);
6961   void addUnaryPlusPointerOverloads() {
6962     for (BuiltinCandidateTypeSet::iterator
6963               Ptr = CandidateTypes[0].pointer_begin(),
6964            PtrEnd = CandidateTypes[0].pointer_end();
6965          Ptr != PtrEnd; ++Ptr) {
6966       QualType ParamTy = *Ptr;
6967       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet);
6968     }
6969   }
6970 
6971   // C++ [over.built]p10:
6972   //   For every promoted integral type T, there exist candidate
6973   //   operator functions of the form
6974   //
6975   //        T         operator~(T);
6976   void addUnaryTildePromotedIntegralOverloads() {
6977     if (!HasArithmeticOrEnumeralCandidateType)
6978       return;
6979 
6980     for (unsigned Int = FirstPromotedIntegralType;
6981          Int < LastPromotedIntegralType; ++Int) {
6982       QualType IntTy = getArithmeticType(Int);
6983       S.AddBuiltinCandidate(IntTy, &IntTy, Args, CandidateSet);
6984     }
6985 
6986     // Extension: We also add this operator for vector types.
6987     for (BuiltinCandidateTypeSet::iterator
6988               Vec = CandidateTypes[0].vector_begin(),
6989            VecEnd = CandidateTypes[0].vector_end();
6990          Vec != VecEnd; ++Vec) {
6991       QualType VecTy = *Vec;
6992       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6993     }
6994   }
6995 
6996   // C++ [over.match.oper]p16:
6997   //   For every pointer to member type T, there exist candidate operator
6998   //   functions of the form
6999   //
7000   //        bool operator==(T,T);
7001   //        bool operator!=(T,T);
7002   void addEqualEqualOrNotEqualMemberPointerOverloads() {
7003     /// Set of (canonical) types that we've already handled.
7004     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7005 
7006     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7007       for (BuiltinCandidateTypeSet::iterator
7008                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7009              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7010            MemPtr != MemPtrEnd;
7011            ++MemPtr) {
7012         // Don't add the same builtin candidate twice.
7013         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7014           continue;
7015 
7016         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7017         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7018       }
7019     }
7020   }
7021 
7022   // C++ [over.built]p15:
7023   //
7024   //   For every T, where T is an enumeration type, a pointer type, or
7025   //   std::nullptr_t, there exist candidate operator functions of the form
7026   //
7027   //        bool       operator<(T, T);
7028   //        bool       operator>(T, T);
7029   //        bool       operator<=(T, T);
7030   //        bool       operator>=(T, T);
7031   //        bool       operator==(T, T);
7032   //        bool       operator!=(T, T);
7033   void addRelationalPointerOrEnumeralOverloads() {
7034     // C++ [over.match.oper]p3:
7035     //   [...]the built-in candidates include all of the candidate operator
7036     //   functions defined in 13.6 that, compared to the given operator, [...]
7037     //   do not have the same parameter-type-list as any non-template non-member
7038     //   candidate.
7039     //
7040     // Note that in practice, this only affects enumeration types because there
7041     // aren't any built-in candidates of record type, and a user-defined operator
7042     // must have an operand of record or enumeration type. Also, the only other
7043     // overloaded operator with enumeration arguments, operator=,
7044     // cannot be overloaded for enumeration types, so this is the only place
7045     // where we must suppress candidates like this.
7046     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
7047       UserDefinedBinaryOperators;
7048 
7049     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7050       if (CandidateTypes[ArgIdx].enumeration_begin() !=
7051           CandidateTypes[ArgIdx].enumeration_end()) {
7052         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
7053                                          CEnd = CandidateSet.end();
7054              C != CEnd; ++C) {
7055           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
7056             continue;
7057 
7058           if (C->Function->isFunctionTemplateSpecialization())
7059             continue;
7060 
7061           QualType FirstParamType =
7062             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
7063           QualType SecondParamType =
7064             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
7065 
7066           // Skip if either parameter isn't of enumeral type.
7067           if (!FirstParamType->isEnumeralType() ||
7068               !SecondParamType->isEnumeralType())
7069             continue;
7070 
7071           // Add this operator to the set of known user-defined operators.
7072           UserDefinedBinaryOperators.insert(
7073             std::make_pair(S.Context.getCanonicalType(FirstParamType),
7074                            S.Context.getCanonicalType(SecondParamType)));
7075         }
7076       }
7077     }
7078 
7079     /// Set of (canonical) types that we've already handled.
7080     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7081 
7082     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7083       for (BuiltinCandidateTypeSet::iterator
7084                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7085              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7086            Ptr != PtrEnd; ++Ptr) {
7087         // Don't add the same builtin candidate twice.
7088         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7089           continue;
7090 
7091         QualType ParamTypes[2] = { *Ptr, *Ptr };
7092         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7093       }
7094       for (BuiltinCandidateTypeSet::iterator
7095                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7096              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7097            Enum != EnumEnd; ++Enum) {
7098         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
7099 
7100         // Don't add the same builtin candidate twice, or if a user defined
7101         // candidate exists.
7102         if (!AddedTypes.insert(CanonType) ||
7103             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
7104                                                             CanonType)))
7105           continue;
7106 
7107         QualType ParamTypes[2] = { *Enum, *Enum };
7108         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7109       }
7110 
7111       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
7112         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
7113         if (AddedTypes.insert(NullPtrTy) &&
7114             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
7115                                                              NullPtrTy))) {
7116           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
7117           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args,
7118                                 CandidateSet);
7119         }
7120       }
7121     }
7122   }
7123 
7124   // C++ [over.built]p13:
7125   //
7126   //   For every cv-qualified or cv-unqualified object type T
7127   //   there exist candidate operator functions of the form
7128   //
7129   //      T*         operator+(T*, ptrdiff_t);
7130   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
7131   //      T*         operator-(T*, ptrdiff_t);
7132   //      T*         operator+(ptrdiff_t, T*);
7133   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
7134   //
7135   // C++ [over.built]p14:
7136   //
7137   //   For every T, where T is a pointer to object type, there
7138   //   exist candidate operator functions of the form
7139   //
7140   //      ptrdiff_t  operator-(T, T);
7141   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
7142     /// Set of (canonical) types that we've already handled.
7143     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7144 
7145     for (int Arg = 0; Arg < 2; ++Arg) {
7146       QualType AsymetricParamTypes[2] = {
7147         S.Context.getPointerDiffType(),
7148         S.Context.getPointerDiffType(),
7149       };
7150       for (BuiltinCandidateTypeSet::iterator
7151                 Ptr = CandidateTypes[Arg].pointer_begin(),
7152              PtrEnd = CandidateTypes[Arg].pointer_end();
7153            Ptr != PtrEnd; ++Ptr) {
7154         QualType PointeeTy = (*Ptr)->getPointeeType();
7155         if (!PointeeTy->isObjectType())
7156           continue;
7157 
7158         AsymetricParamTypes[Arg] = *Ptr;
7159         if (Arg == 0 || Op == OO_Plus) {
7160           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
7161           // T* operator+(ptrdiff_t, T*);
7162           S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, CandidateSet);
7163         }
7164         if (Op == OO_Minus) {
7165           // ptrdiff_t operator-(T, T);
7166           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7167             continue;
7168 
7169           QualType ParamTypes[2] = { *Ptr, *Ptr };
7170           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
7171                                 Args, CandidateSet);
7172         }
7173       }
7174     }
7175   }
7176 
7177   // C++ [over.built]p12:
7178   //
7179   //   For every pair of promoted arithmetic types L and R, there
7180   //   exist candidate operator functions of the form
7181   //
7182   //        LR         operator*(L, R);
7183   //        LR         operator/(L, R);
7184   //        LR         operator+(L, R);
7185   //        LR         operator-(L, R);
7186   //        bool       operator<(L, R);
7187   //        bool       operator>(L, R);
7188   //        bool       operator<=(L, R);
7189   //        bool       operator>=(L, R);
7190   //        bool       operator==(L, R);
7191   //        bool       operator!=(L, R);
7192   //
7193   //   where LR is the result of the usual arithmetic conversions
7194   //   between types L and R.
7195   //
7196   // C++ [over.built]p24:
7197   //
7198   //   For every pair of promoted arithmetic types L and R, there exist
7199   //   candidate operator functions of the form
7200   //
7201   //        LR       operator?(bool, L, R);
7202   //
7203   //   where LR is the result of the usual arithmetic conversions
7204   //   between types L and R.
7205   // Our candidates ignore the first parameter.
7206   void addGenericBinaryArithmeticOverloads(bool isComparison) {
7207     if (!HasArithmeticOrEnumeralCandidateType)
7208       return;
7209 
7210     for (unsigned Left = FirstPromotedArithmeticType;
7211          Left < LastPromotedArithmeticType; ++Left) {
7212       for (unsigned Right = FirstPromotedArithmeticType;
7213            Right < LastPromotedArithmeticType; ++Right) {
7214         QualType LandR[2] = { getArithmeticType(Left),
7215                               getArithmeticType(Right) };
7216         QualType Result =
7217           isComparison ? S.Context.BoolTy
7218                        : getUsualArithmeticConversions(Left, Right);
7219         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7220       }
7221     }
7222 
7223     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
7224     // conditional operator for vector types.
7225     for (BuiltinCandidateTypeSet::iterator
7226               Vec1 = CandidateTypes[0].vector_begin(),
7227            Vec1End = CandidateTypes[0].vector_end();
7228          Vec1 != Vec1End; ++Vec1) {
7229       for (BuiltinCandidateTypeSet::iterator
7230                 Vec2 = CandidateTypes[1].vector_begin(),
7231              Vec2End = CandidateTypes[1].vector_end();
7232            Vec2 != Vec2End; ++Vec2) {
7233         QualType LandR[2] = { *Vec1, *Vec2 };
7234         QualType Result = S.Context.BoolTy;
7235         if (!isComparison) {
7236           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7237             Result = *Vec1;
7238           else
7239             Result = *Vec2;
7240         }
7241 
7242         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7243       }
7244     }
7245   }
7246 
7247   // C++ [over.built]p17:
7248   //
7249   //   For every pair of promoted integral types L and R, there
7250   //   exist candidate operator functions of the form
7251   //
7252   //      LR         operator%(L, R);
7253   //      LR         operator&(L, R);
7254   //      LR         operator^(L, R);
7255   //      LR         operator|(L, R);
7256   //      L          operator<<(L, R);
7257   //      L          operator>>(L, R);
7258   //
7259   //   where LR is the result of the usual arithmetic conversions
7260   //   between types L and R.
7261   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7262     if (!HasArithmeticOrEnumeralCandidateType)
7263       return;
7264 
7265     for (unsigned Left = FirstPromotedIntegralType;
7266          Left < LastPromotedIntegralType; ++Left) {
7267       for (unsigned Right = FirstPromotedIntegralType;
7268            Right < LastPromotedIntegralType; ++Right) {
7269         QualType LandR[2] = { getArithmeticType(Left),
7270                               getArithmeticType(Right) };
7271         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7272             ? LandR[0]
7273             : getUsualArithmeticConversions(Left, Right);
7274         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7275       }
7276     }
7277   }
7278 
7279   // C++ [over.built]p20:
7280   //
7281   //   For every pair (T, VQ), where T is an enumeration or
7282   //   pointer to member type and VQ is either volatile or
7283   //   empty, there exist candidate operator functions of the form
7284   //
7285   //        VQ T&      operator=(VQ T&, T);
7286   void addAssignmentMemberPointerOrEnumeralOverloads() {
7287     /// Set of (canonical) types that we've already handled.
7288     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7289 
7290     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7291       for (BuiltinCandidateTypeSet::iterator
7292                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7293              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7294            Enum != EnumEnd; ++Enum) {
7295         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7296           continue;
7297 
7298         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, CandidateSet);
7299       }
7300 
7301       for (BuiltinCandidateTypeSet::iterator
7302                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7303              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7304            MemPtr != MemPtrEnd; ++MemPtr) {
7305         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7306           continue;
7307 
7308         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, CandidateSet);
7309       }
7310     }
7311   }
7312 
7313   // C++ [over.built]p19:
7314   //
7315   //   For every pair (T, VQ), where T is any type and VQ is either
7316   //   volatile or empty, there exist candidate operator functions
7317   //   of the form
7318   //
7319   //        T*VQ&      operator=(T*VQ&, T*);
7320   //
7321   // C++ [over.built]p21:
7322   //
7323   //   For every pair (T, VQ), where T is a cv-qualified or
7324   //   cv-unqualified object type and VQ is either volatile or
7325   //   empty, there exist candidate operator functions of the form
7326   //
7327   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7328   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7329   void addAssignmentPointerOverloads(bool isEqualOp) {
7330     /// Set of (canonical) types that we've already handled.
7331     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7332 
7333     for (BuiltinCandidateTypeSet::iterator
7334               Ptr = CandidateTypes[0].pointer_begin(),
7335            PtrEnd = CandidateTypes[0].pointer_end();
7336          Ptr != PtrEnd; ++Ptr) {
7337       // If this is operator=, keep track of the builtin candidates we added.
7338       if (isEqualOp)
7339         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7340       else if (!(*Ptr)->getPointeeType()->isObjectType())
7341         continue;
7342 
7343       // non-volatile version
7344       QualType ParamTypes[2] = {
7345         S.Context.getLValueReferenceType(*Ptr),
7346         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7347       };
7348       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7349                             /*IsAssigmentOperator=*/ isEqualOp);
7350 
7351       bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7352                           VisibleTypeConversionsQuals.hasVolatile();
7353       if (NeedVolatile) {
7354         // volatile version
7355         ParamTypes[0] =
7356           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7357         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7358                               /*IsAssigmentOperator=*/isEqualOp);
7359       }
7360 
7361       if (!(*Ptr).isRestrictQualified() &&
7362           VisibleTypeConversionsQuals.hasRestrict()) {
7363         // restrict version
7364         ParamTypes[0]
7365           = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7366         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7367                               /*IsAssigmentOperator=*/isEqualOp);
7368 
7369         if (NeedVolatile) {
7370           // volatile restrict version
7371           ParamTypes[0]
7372             = S.Context.getLValueReferenceType(
7373                 S.Context.getCVRQualifiedType(*Ptr,
7374                                               (Qualifiers::Volatile |
7375                                                Qualifiers::Restrict)));
7376           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7377                                 /*IsAssigmentOperator=*/isEqualOp);
7378         }
7379       }
7380     }
7381 
7382     if (isEqualOp) {
7383       for (BuiltinCandidateTypeSet::iterator
7384                 Ptr = CandidateTypes[1].pointer_begin(),
7385              PtrEnd = CandidateTypes[1].pointer_end();
7386            Ptr != PtrEnd; ++Ptr) {
7387         // Make sure we don't add the same candidate twice.
7388         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7389           continue;
7390 
7391         QualType ParamTypes[2] = {
7392           S.Context.getLValueReferenceType(*Ptr),
7393           *Ptr,
7394         };
7395 
7396         // non-volatile version
7397         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7398                               /*IsAssigmentOperator=*/true);
7399 
7400         bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7401                            VisibleTypeConversionsQuals.hasVolatile();
7402         if (NeedVolatile) {
7403           // volatile version
7404           ParamTypes[0] =
7405             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7406           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7407                                 /*IsAssigmentOperator=*/true);
7408         }
7409 
7410         if (!(*Ptr).isRestrictQualified() &&
7411             VisibleTypeConversionsQuals.hasRestrict()) {
7412           // restrict version
7413           ParamTypes[0]
7414             = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7415           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7416                                 /*IsAssigmentOperator=*/true);
7417 
7418           if (NeedVolatile) {
7419             // volatile restrict version
7420             ParamTypes[0]
7421               = S.Context.getLValueReferenceType(
7422                   S.Context.getCVRQualifiedType(*Ptr,
7423                                                 (Qualifiers::Volatile |
7424                                                  Qualifiers::Restrict)));
7425             S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7426                                   /*IsAssigmentOperator=*/true);
7427           }
7428         }
7429       }
7430     }
7431   }
7432 
7433   // C++ [over.built]p18:
7434   //
7435   //   For every triple (L, VQ, R), where L is an arithmetic type,
7436   //   VQ is either volatile or empty, and R is a promoted
7437   //   arithmetic type, there exist candidate operator functions of
7438   //   the form
7439   //
7440   //        VQ L&      operator=(VQ L&, R);
7441   //        VQ L&      operator*=(VQ L&, R);
7442   //        VQ L&      operator/=(VQ L&, R);
7443   //        VQ L&      operator+=(VQ L&, R);
7444   //        VQ L&      operator-=(VQ L&, R);
7445   void addAssignmentArithmeticOverloads(bool isEqualOp) {
7446     if (!HasArithmeticOrEnumeralCandidateType)
7447       return;
7448 
7449     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7450       for (unsigned Right = FirstPromotedArithmeticType;
7451            Right < LastPromotedArithmeticType; ++Right) {
7452         QualType ParamTypes[2];
7453         ParamTypes[1] = getArithmeticType(Right);
7454 
7455         // Add this built-in operator as a candidate (VQ is empty).
7456         ParamTypes[0] =
7457           S.Context.getLValueReferenceType(getArithmeticType(Left));
7458         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7459                               /*IsAssigmentOperator=*/isEqualOp);
7460 
7461         // Add this built-in operator as a candidate (VQ is 'volatile').
7462         if (VisibleTypeConversionsQuals.hasVolatile()) {
7463           ParamTypes[0] =
7464             S.Context.getVolatileType(getArithmeticType(Left));
7465           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7466           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7467                                 /*IsAssigmentOperator=*/isEqualOp);
7468         }
7469       }
7470     }
7471 
7472     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7473     for (BuiltinCandidateTypeSet::iterator
7474               Vec1 = CandidateTypes[0].vector_begin(),
7475            Vec1End = CandidateTypes[0].vector_end();
7476          Vec1 != Vec1End; ++Vec1) {
7477       for (BuiltinCandidateTypeSet::iterator
7478                 Vec2 = CandidateTypes[1].vector_begin(),
7479              Vec2End = CandidateTypes[1].vector_end();
7480            Vec2 != Vec2End; ++Vec2) {
7481         QualType ParamTypes[2];
7482         ParamTypes[1] = *Vec2;
7483         // Add this built-in operator as a candidate (VQ is empty).
7484         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7485         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7486                               /*IsAssigmentOperator=*/isEqualOp);
7487 
7488         // Add this built-in operator as a candidate (VQ is 'volatile').
7489         if (VisibleTypeConversionsQuals.hasVolatile()) {
7490           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7491           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7492           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7493                                 /*IsAssigmentOperator=*/isEqualOp);
7494         }
7495       }
7496     }
7497   }
7498 
7499   // C++ [over.built]p22:
7500   //
7501   //   For every triple (L, VQ, R), where L is an integral type, VQ
7502   //   is either volatile or empty, and R is a promoted integral
7503   //   type, there exist candidate operator functions of the form
7504   //
7505   //        VQ L&       operator%=(VQ L&, R);
7506   //        VQ L&       operator<<=(VQ L&, R);
7507   //        VQ L&       operator>>=(VQ L&, R);
7508   //        VQ L&       operator&=(VQ L&, R);
7509   //        VQ L&       operator^=(VQ L&, R);
7510   //        VQ L&       operator|=(VQ L&, R);
7511   void addAssignmentIntegralOverloads() {
7512     if (!HasArithmeticOrEnumeralCandidateType)
7513       return;
7514 
7515     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7516       for (unsigned Right = FirstPromotedIntegralType;
7517            Right < LastPromotedIntegralType; ++Right) {
7518         QualType ParamTypes[2];
7519         ParamTypes[1] = getArithmeticType(Right);
7520 
7521         // Add this built-in operator as a candidate (VQ is empty).
7522         ParamTypes[0] =
7523           S.Context.getLValueReferenceType(getArithmeticType(Left));
7524         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7525         if (VisibleTypeConversionsQuals.hasVolatile()) {
7526           // Add this built-in operator as a candidate (VQ is 'volatile').
7527           ParamTypes[0] = getArithmeticType(Left);
7528           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7529           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7530           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7531         }
7532       }
7533     }
7534   }
7535 
7536   // C++ [over.operator]p23:
7537   //
7538   //   There also exist candidate operator functions of the form
7539   //
7540   //        bool        operator!(bool);
7541   //        bool        operator&&(bool, bool);
7542   //        bool        operator||(bool, bool);
7543   void addExclaimOverload() {
7544     QualType ParamTy = S.Context.BoolTy;
7545     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet,
7546                           /*IsAssignmentOperator=*/false,
7547                           /*NumContextualBoolArguments=*/1);
7548   }
7549   void addAmpAmpOrPipePipeOverload() {
7550     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7551     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet,
7552                           /*IsAssignmentOperator=*/false,
7553                           /*NumContextualBoolArguments=*/2);
7554   }
7555 
7556   // C++ [over.built]p13:
7557   //
7558   //   For every cv-qualified or cv-unqualified object type T there
7559   //   exist candidate operator functions of the form
7560   //
7561   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7562   //        T&         operator[](T*, ptrdiff_t);
7563   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7564   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7565   //        T&         operator[](ptrdiff_t, T*);
7566   void addSubscriptOverloads() {
7567     for (BuiltinCandidateTypeSet::iterator
7568               Ptr = CandidateTypes[0].pointer_begin(),
7569            PtrEnd = CandidateTypes[0].pointer_end();
7570          Ptr != PtrEnd; ++Ptr) {
7571       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7572       QualType PointeeType = (*Ptr)->getPointeeType();
7573       if (!PointeeType->isObjectType())
7574         continue;
7575 
7576       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7577 
7578       // T& operator[](T*, ptrdiff_t)
7579       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7580     }
7581 
7582     for (BuiltinCandidateTypeSet::iterator
7583               Ptr = CandidateTypes[1].pointer_begin(),
7584            PtrEnd = CandidateTypes[1].pointer_end();
7585          Ptr != PtrEnd; ++Ptr) {
7586       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7587       QualType PointeeType = (*Ptr)->getPointeeType();
7588       if (!PointeeType->isObjectType())
7589         continue;
7590 
7591       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7592 
7593       // T& operator[](ptrdiff_t, T*)
7594       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7595     }
7596   }
7597 
7598   // C++ [over.built]p11:
7599   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7600   //    C1 is the same type as C2 or is a derived class of C2, T is an object
7601   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7602   //    there exist candidate operator functions of the form
7603   //
7604   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7605   //
7606   //    where CV12 is the union of CV1 and CV2.
7607   void addArrowStarOverloads() {
7608     for (BuiltinCandidateTypeSet::iterator
7609              Ptr = CandidateTypes[0].pointer_begin(),
7610            PtrEnd = CandidateTypes[0].pointer_end();
7611          Ptr != PtrEnd; ++Ptr) {
7612       QualType C1Ty = (*Ptr);
7613       QualType C1;
7614       QualifierCollector Q1;
7615       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7616       if (!isa<RecordType>(C1))
7617         continue;
7618       // heuristic to reduce number of builtin candidates in the set.
7619       // Add volatile/restrict version only if there are conversions to a
7620       // volatile/restrict type.
7621       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7622         continue;
7623       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7624         continue;
7625       for (BuiltinCandidateTypeSet::iterator
7626                 MemPtr = CandidateTypes[1].member_pointer_begin(),
7627              MemPtrEnd = CandidateTypes[1].member_pointer_end();
7628            MemPtr != MemPtrEnd; ++MemPtr) {
7629         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7630         QualType C2 = QualType(mptr->getClass(), 0);
7631         C2 = C2.getUnqualifiedType();
7632         if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7633           break;
7634         QualType ParamTypes[2] = { *Ptr, *MemPtr };
7635         // build CV12 T&
7636         QualType T = mptr->getPointeeType();
7637         if (!VisibleTypeConversionsQuals.hasVolatile() &&
7638             T.isVolatileQualified())
7639           continue;
7640         if (!VisibleTypeConversionsQuals.hasRestrict() &&
7641             T.isRestrictQualified())
7642           continue;
7643         T = Q1.apply(S.Context, T);
7644         QualType ResultTy = S.Context.getLValueReferenceType(T);
7645         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7646       }
7647     }
7648   }
7649 
7650   // Note that we don't consider the first argument, since it has been
7651   // contextually converted to bool long ago. The candidates below are
7652   // therefore added as binary.
7653   //
7654   // C++ [over.built]p25:
7655   //   For every type T, where T is a pointer, pointer-to-member, or scoped
7656   //   enumeration type, there exist candidate operator functions of the form
7657   //
7658   //        T        operator?(bool, T, T);
7659   //
7660   void addConditionalOperatorOverloads() {
7661     /// Set of (canonical) types that we've already handled.
7662     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7663 
7664     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7665       for (BuiltinCandidateTypeSet::iterator
7666                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7667              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7668            Ptr != PtrEnd; ++Ptr) {
7669         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7670           continue;
7671 
7672         QualType ParamTypes[2] = { *Ptr, *Ptr };
7673         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, CandidateSet);
7674       }
7675 
7676       for (BuiltinCandidateTypeSet::iterator
7677                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7678              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7679            MemPtr != MemPtrEnd; ++MemPtr) {
7680         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7681           continue;
7682 
7683         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7684         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, CandidateSet);
7685       }
7686 
7687       if (S.getLangOpts().CPlusPlus11) {
7688         for (BuiltinCandidateTypeSet::iterator
7689                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7690                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7691              Enum != EnumEnd; ++Enum) {
7692           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7693             continue;
7694 
7695           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7696             continue;
7697 
7698           QualType ParamTypes[2] = { *Enum, *Enum };
7699           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, CandidateSet);
7700         }
7701       }
7702     }
7703   }
7704 };
7705 
7706 } // end anonymous namespace
7707 
7708 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
7709 /// operator overloads to the candidate set (C++ [over.built]), based
7710 /// on the operator @p Op and the arguments given. For example, if the
7711 /// operator is a binary '+', this routine might add "int
7712 /// operator+(int, int)" to cover integer addition.
7713 void
7714 Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7715                                    SourceLocation OpLoc,
7716                                    llvm::ArrayRef<Expr *> Args,
7717                                    OverloadCandidateSet& CandidateSet) {
7718   // Find all of the types that the arguments can convert to, but only
7719   // if the operator we're looking at has built-in operator candidates
7720   // that make use of these types. Also record whether we encounter non-record
7721   // candidate types or either arithmetic or enumeral candidate types.
7722   Qualifiers VisibleTypeConversionsQuals;
7723   VisibleTypeConversionsQuals.addConst();
7724   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
7725     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7726 
7727   bool HasNonRecordCandidateType = false;
7728   bool HasArithmeticOrEnumeralCandidateType = false;
7729   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7730   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7731     CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7732     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7733                                                  OpLoc,
7734                                                  true,
7735                                                  (Op == OO_Exclaim ||
7736                                                   Op == OO_AmpAmp ||
7737                                                   Op == OO_PipePipe),
7738                                                  VisibleTypeConversionsQuals);
7739     HasNonRecordCandidateType = HasNonRecordCandidateType ||
7740         CandidateTypes[ArgIdx].hasNonRecordTypes();
7741     HasArithmeticOrEnumeralCandidateType =
7742         HasArithmeticOrEnumeralCandidateType ||
7743         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7744   }
7745 
7746   // Exit early when no non-record types have been added to the candidate set
7747   // for any of the arguments to the operator.
7748   //
7749   // We can't exit early for !, ||, or &&, since there we have always have
7750   // 'bool' overloads.
7751   if (!HasNonRecordCandidateType &&
7752       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7753     return;
7754 
7755   // Setup an object to manage the common state for building overloads.
7756   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args,
7757                                            VisibleTypeConversionsQuals,
7758                                            HasArithmeticOrEnumeralCandidateType,
7759                                            CandidateTypes, CandidateSet);
7760 
7761   // Dispatch over the operation to add in only those overloads which apply.
7762   switch (Op) {
7763   case OO_None:
7764   case NUM_OVERLOADED_OPERATORS:
7765     llvm_unreachable("Expected an overloaded operator");
7766 
7767   case OO_New:
7768   case OO_Delete:
7769   case OO_Array_New:
7770   case OO_Array_Delete:
7771   case OO_Call:
7772     llvm_unreachable(
7773                     "Special operators don't use AddBuiltinOperatorCandidates");
7774 
7775   case OO_Comma:
7776   case OO_Arrow:
7777     // C++ [over.match.oper]p3:
7778     //   -- For the operator ',', the unary operator '&', or the
7779     //      operator '->', the built-in candidates set is empty.
7780     break;
7781 
7782   case OO_Plus: // '+' is either unary or binary
7783     if (Args.size() == 1)
7784       OpBuilder.addUnaryPlusPointerOverloads();
7785     // Fall through.
7786 
7787   case OO_Minus: // '-' is either unary or binary
7788     if (Args.size() == 1) {
7789       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7790     } else {
7791       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7792       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7793     }
7794     break;
7795 
7796   case OO_Star: // '*' is either unary or binary
7797     if (Args.size() == 1)
7798       OpBuilder.addUnaryStarPointerOverloads();
7799     else
7800       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7801     break;
7802 
7803   case OO_Slash:
7804     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7805     break;
7806 
7807   case OO_PlusPlus:
7808   case OO_MinusMinus:
7809     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7810     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7811     break;
7812 
7813   case OO_EqualEqual:
7814   case OO_ExclaimEqual:
7815     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7816     // Fall through.
7817 
7818   case OO_Less:
7819   case OO_Greater:
7820   case OO_LessEqual:
7821   case OO_GreaterEqual:
7822     OpBuilder.addRelationalPointerOrEnumeralOverloads();
7823     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7824     break;
7825 
7826   case OO_Percent:
7827   case OO_Caret:
7828   case OO_Pipe:
7829   case OO_LessLess:
7830   case OO_GreaterGreater:
7831     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7832     break;
7833 
7834   case OO_Amp: // '&' is either unary or binary
7835     if (Args.size() == 1)
7836       // C++ [over.match.oper]p3:
7837       //   -- For the operator ',', the unary operator '&', or the
7838       //      operator '->', the built-in candidates set is empty.
7839       break;
7840 
7841     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7842     break;
7843 
7844   case OO_Tilde:
7845     OpBuilder.addUnaryTildePromotedIntegralOverloads();
7846     break;
7847 
7848   case OO_Equal:
7849     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7850     // Fall through.
7851 
7852   case OO_PlusEqual:
7853   case OO_MinusEqual:
7854     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7855     // Fall through.
7856 
7857   case OO_StarEqual:
7858   case OO_SlashEqual:
7859     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7860     break;
7861 
7862   case OO_PercentEqual:
7863   case OO_LessLessEqual:
7864   case OO_GreaterGreaterEqual:
7865   case OO_AmpEqual:
7866   case OO_CaretEqual:
7867   case OO_PipeEqual:
7868     OpBuilder.addAssignmentIntegralOverloads();
7869     break;
7870 
7871   case OO_Exclaim:
7872     OpBuilder.addExclaimOverload();
7873     break;
7874 
7875   case OO_AmpAmp:
7876   case OO_PipePipe:
7877     OpBuilder.addAmpAmpOrPipePipeOverload();
7878     break;
7879 
7880   case OO_Subscript:
7881     OpBuilder.addSubscriptOverloads();
7882     break;
7883 
7884   case OO_ArrowStar:
7885     OpBuilder.addArrowStarOverloads();
7886     break;
7887 
7888   case OO_Conditional:
7889     OpBuilder.addConditionalOperatorOverloads();
7890     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7891     break;
7892   }
7893 }
7894 
7895 /// \brief Add function candidates found via argument-dependent lookup
7896 /// to the set of overloading candidates.
7897 ///
7898 /// This routine performs argument-dependent name lookup based on the
7899 /// given function name (which may also be an operator name) and adds
7900 /// all of the overload candidates found by ADL to the overload
7901 /// candidate set (C++ [basic.lookup.argdep]).
7902 void
7903 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7904                                            bool Operator, SourceLocation Loc,
7905                                            ArrayRef<Expr *> Args,
7906                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
7907                                            OverloadCandidateSet& CandidateSet,
7908                                            bool PartialOverloading) {
7909   ADLResult Fns;
7910 
7911   // FIXME: This approach for uniquing ADL results (and removing
7912   // redundant candidates from the set) relies on pointer-equality,
7913   // which means we need to key off the canonical decl.  However,
7914   // always going back to the canonical decl might not get us the
7915   // right set of default arguments.  What default arguments are
7916   // we supposed to consider on ADL candidates, anyway?
7917 
7918   // FIXME: Pass in the explicit template arguments?
7919   ArgumentDependentLookup(Name, Operator, Loc, Args, Fns);
7920 
7921   // Erase all of the candidates we already knew about.
7922   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7923                                    CandEnd = CandidateSet.end();
7924        Cand != CandEnd; ++Cand)
7925     if (Cand->Function) {
7926       Fns.erase(Cand->Function);
7927       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7928         Fns.erase(FunTmpl);
7929     }
7930 
7931   // For each of the ADL candidates we found, add it to the overload
7932   // set.
7933   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7934     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7935     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7936       if (ExplicitTemplateArgs)
7937         continue;
7938 
7939       AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7940                            PartialOverloading);
7941     } else
7942       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7943                                    FoundDecl, ExplicitTemplateArgs,
7944                                    Args, CandidateSet);
7945   }
7946 }
7947 
7948 /// isBetterOverloadCandidate - Determines whether the first overload
7949 /// candidate is a better candidate than the second (C++ 13.3.3p1).
7950 bool
7951 isBetterOverloadCandidate(Sema &S,
7952                           const OverloadCandidate &Cand1,
7953                           const OverloadCandidate &Cand2,
7954                           SourceLocation Loc,
7955                           bool UserDefinedConversion) {
7956   // Define viable functions to be better candidates than non-viable
7957   // functions.
7958   if (!Cand2.Viable)
7959     return Cand1.Viable;
7960   else if (!Cand1.Viable)
7961     return false;
7962 
7963   // C++ [over.match.best]p1:
7964   //
7965   //   -- if F is a static member function, ICS1(F) is defined such
7966   //      that ICS1(F) is neither better nor worse than ICS1(G) for
7967   //      any function G, and, symmetrically, ICS1(G) is neither
7968   //      better nor worse than ICS1(F).
7969   unsigned StartArg = 0;
7970   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7971     StartArg = 1;
7972 
7973   // C++ [over.match.best]p1:
7974   //   A viable function F1 is defined to be a better function than another
7975   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7976   //   conversion sequence than ICSi(F2), and then...
7977   unsigned NumArgs = Cand1.NumConversions;
7978   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7979   bool HasBetterConversion = false;
7980   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7981     switch (CompareImplicitConversionSequences(S,
7982                                                Cand1.Conversions[ArgIdx],
7983                                                Cand2.Conversions[ArgIdx])) {
7984     case ImplicitConversionSequence::Better:
7985       // Cand1 has a better conversion sequence.
7986       HasBetterConversion = true;
7987       break;
7988 
7989     case ImplicitConversionSequence::Worse:
7990       // Cand1 can't be better than Cand2.
7991       return false;
7992 
7993     case ImplicitConversionSequence::Indistinguishable:
7994       // Do nothing.
7995       break;
7996     }
7997   }
7998 
7999   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
8000   //       ICSj(F2), or, if not that,
8001   if (HasBetterConversion)
8002     return true;
8003 
8004   //     - F1 is a non-template function and F2 is a function template
8005   //       specialization, or, if not that,
8006   if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
8007       Cand2.Function && Cand2.Function->getPrimaryTemplate())
8008     return true;
8009 
8010   //   -- F1 and F2 are function template specializations, and the function
8011   //      template for F1 is more specialized than the template for F2
8012   //      according to the partial ordering rules described in 14.5.5.2, or,
8013   //      if not that,
8014   if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
8015       Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
8016     if (FunctionTemplateDecl *BetterTemplate
8017           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
8018                                          Cand2.Function->getPrimaryTemplate(),
8019                                          Loc,
8020                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
8021                                                              : TPOC_Call,
8022                                          Cand1.ExplicitCallArguments))
8023       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
8024   }
8025 
8026   //   -- the context is an initialization by user-defined conversion
8027   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
8028   //      from the return type of F1 to the destination type (i.e.,
8029   //      the type of the entity being initialized) is a better
8030   //      conversion sequence than the standard conversion sequence
8031   //      from the return type of F2 to the destination type.
8032   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
8033       isa<CXXConversionDecl>(Cand1.Function) &&
8034       isa<CXXConversionDecl>(Cand2.Function)) {
8035     // First check whether we prefer one of the conversion functions over the
8036     // other. This only distinguishes the results in non-standard, extension
8037     // cases such as the conversion from a lambda closure type to a function
8038     // pointer or block.
8039     ImplicitConversionSequence::CompareKind FuncResult
8040       = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
8041     if (FuncResult != ImplicitConversionSequence::Indistinguishable)
8042       return FuncResult;
8043 
8044     switch (CompareStandardConversionSequences(S,
8045                                                Cand1.FinalConversion,
8046                                                Cand2.FinalConversion)) {
8047     case ImplicitConversionSequence::Better:
8048       // Cand1 has a better conversion sequence.
8049       return true;
8050 
8051     case ImplicitConversionSequence::Worse:
8052       // Cand1 can't be better than Cand2.
8053       return false;
8054 
8055     case ImplicitConversionSequence::Indistinguishable:
8056       // Do nothing
8057       break;
8058     }
8059   }
8060 
8061   return false;
8062 }
8063 
8064 /// \brief Computes the best viable function (C++ 13.3.3)
8065 /// within an overload candidate set.
8066 ///
8067 /// \param Loc The location of the function name (or operator symbol) for
8068 /// which overload resolution occurs.
8069 ///
8070 /// \param Best If overload resolution was successful or found a deleted
8071 /// function, \p Best points to the candidate function found.
8072 ///
8073 /// \returns The result of overload resolution.
8074 OverloadingResult
8075 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
8076                                          iterator &Best,
8077                                          bool UserDefinedConversion) {
8078   // Find the best viable function.
8079   Best = end();
8080   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8081     if (Cand->Viable)
8082       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
8083                                                      UserDefinedConversion))
8084         Best = Cand;
8085   }
8086 
8087   // If we didn't find any viable functions, abort.
8088   if (Best == end())
8089     return OR_No_Viable_Function;
8090 
8091   // Make sure that this function is better than every other viable
8092   // function. If not, we have an ambiguity.
8093   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8094     if (Cand->Viable &&
8095         Cand != Best &&
8096         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
8097                                    UserDefinedConversion)) {
8098       Best = end();
8099       return OR_Ambiguous;
8100     }
8101   }
8102 
8103   // Best is the best viable function.
8104   if (Best->Function &&
8105       (Best->Function->isDeleted() ||
8106        S.isFunctionConsideredUnavailable(Best->Function)))
8107     return OR_Deleted;
8108 
8109   return OR_Success;
8110 }
8111 
8112 namespace {
8113 
8114 enum OverloadCandidateKind {
8115   oc_function,
8116   oc_method,
8117   oc_constructor,
8118   oc_function_template,
8119   oc_method_template,
8120   oc_constructor_template,
8121   oc_implicit_default_constructor,
8122   oc_implicit_copy_constructor,
8123   oc_implicit_move_constructor,
8124   oc_implicit_copy_assignment,
8125   oc_implicit_move_assignment,
8126   oc_implicit_inherited_constructor
8127 };
8128 
8129 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
8130                                                 FunctionDecl *Fn,
8131                                                 std::string &Description) {
8132   bool isTemplate = false;
8133 
8134   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
8135     isTemplate = true;
8136     Description = S.getTemplateArgumentBindingsText(
8137       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
8138   }
8139 
8140   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
8141     if (!Ctor->isImplicit())
8142       return isTemplate ? oc_constructor_template : oc_constructor;
8143 
8144     if (Ctor->getInheritedConstructor())
8145       return oc_implicit_inherited_constructor;
8146 
8147     if (Ctor->isDefaultConstructor())
8148       return oc_implicit_default_constructor;
8149 
8150     if (Ctor->isMoveConstructor())
8151       return oc_implicit_move_constructor;
8152 
8153     assert(Ctor->isCopyConstructor() &&
8154            "unexpected sort of implicit constructor");
8155     return oc_implicit_copy_constructor;
8156   }
8157 
8158   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
8159     // This actually gets spelled 'candidate function' for now, but
8160     // it doesn't hurt to split it out.
8161     if (!Meth->isImplicit())
8162       return isTemplate ? oc_method_template : oc_method;
8163 
8164     if (Meth->isMoveAssignmentOperator())
8165       return oc_implicit_move_assignment;
8166 
8167     if (Meth->isCopyAssignmentOperator())
8168       return oc_implicit_copy_assignment;
8169 
8170     assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
8171     return oc_method;
8172   }
8173 
8174   return isTemplate ? oc_function_template : oc_function;
8175 }
8176 
8177 void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) {
8178   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
8179   if (!Ctor) return;
8180 
8181   Ctor = Ctor->getInheritedConstructor();
8182   if (!Ctor) return;
8183 
8184   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
8185 }
8186 
8187 } // end anonymous namespace
8188 
8189 // Notes the location of an overload candidate.
8190 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
8191   std::string FnDesc;
8192   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
8193   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
8194                              << (unsigned) K << FnDesc;
8195   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
8196   Diag(Fn->getLocation(), PD);
8197   MaybeEmitInheritedConstructorNote(*this, Fn);
8198 }
8199 
8200 //Notes the location of all overload candidates designated through
8201 // OverloadedExpr
8202 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
8203   assert(OverloadedExpr->getType() == Context.OverloadTy);
8204 
8205   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
8206   OverloadExpr *OvlExpr = Ovl.Expression;
8207 
8208   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8209                             IEnd = OvlExpr->decls_end();
8210        I != IEnd; ++I) {
8211     if (FunctionTemplateDecl *FunTmpl =
8212                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
8213       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
8214     } else if (FunctionDecl *Fun
8215                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
8216       NoteOverloadCandidate(Fun, DestType);
8217     }
8218   }
8219 }
8220 
8221 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
8222 /// "lead" diagnostic; it will be given two arguments, the source and
8223 /// target types of the conversion.
8224 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8225                                  Sema &S,
8226                                  SourceLocation CaretLoc,
8227                                  const PartialDiagnostic &PDiag) const {
8228   S.Diag(CaretLoc, PDiag)
8229     << Ambiguous.getFromType() << Ambiguous.getToType();
8230   // FIXME: The note limiting machinery is borrowed from
8231   // OverloadCandidateSet::NoteCandidates; there's an opportunity for
8232   // refactoring here.
8233   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8234   unsigned CandsShown = 0;
8235   AmbiguousConversionSequence::const_iterator I, E;
8236   for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8237     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
8238       break;
8239     ++CandsShown;
8240     S.NoteOverloadCandidate(*I);
8241   }
8242   if (I != E)
8243     S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
8244 }
8245 
8246 namespace {
8247 
8248 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8249   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8250   assert(Conv.isBad());
8251   assert(Cand->Function && "for now, candidate must be a function");
8252   FunctionDecl *Fn = Cand->Function;
8253 
8254   // There's a conversion slot for the object argument if this is a
8255   // non-constructor method.  Note that 'I' corresponds the
8256   // conversion-slot index.
8257   bool isObjectArgument = false;
8258   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8259     if (I == 0)
8260       isObjectArgument = true;
8261     else
8262       I--;
8263   }
8264 
8265   std::string FnDesc;
8266   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8267 
8268   Expr *FromExpr = Conv.Bad.FromExpr;
8269   QualType FromTy = Conv.Bad.getFromType();
8270   QualType ToTy = Conv.Bad.getToType();
8271 
8272   if (FromTy == S.Context.OverloadTy) {
8273     assert(FromExpr && "overload set argument came from implicit argument?");
8274     Expr *E = FromExpr->IgnoreParens();
8275     if (isa<UnaryOperator>(E))
8276       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8277     DeclarationName Name = cast<OverloadExpr>(E)->getName();
8278 
8279     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8280       << (unsigned) FnKind << FnDesc
8281       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8282       << ToTy << Name << I+1;
8283     MaybeEmitInheritedConstructorNote(S, Fn);
8284     return;
8285   }
8286 
8287   // Do some hand-waving analysis to see if the non-viability is due
8288   // to a qualifier mismatch.
8289   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8290   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8291   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8292     CToTy = RT->getPointeeType();
8293   else {
8294     // TODO: detect and diagnose the full richness of const mismatches.
8295     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8296       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8297         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8298   }
8299 
8300   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8301       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8302     Qualifiers FromQs = CFromTy.getQualifiers();
8303     Qualifiers ToQs = CToTy.getQualifiers();
8304 
8305     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8306       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8307         << (unsigned) FnKind << FnDesc
8308         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8309         << FromTy
8310         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8311         << (unsigned) isObjectArgument << I+1;
8312       MaybeEmitInheritedConstructorNote(S, Fn);
8313       return;
8314     }
8315 
8316     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8317       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8318         << (unsigned) FnKind << FnDesc
8319         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8320         << FromTy
8321         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8322         << (unsigned) isObjectArgument << I+1;
8323       MaybeEmitInheritedConstructorNote(S, Fn);
8324       return;
8325     }
8326 
8327     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8328       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8329       << (unsigned) FnKind << FnDesc
8330       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8331       << FromTy
8332       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8333       << (unsigned) isObjectArgument << I+1;
8334       MaybeEmitInheritedConstructorNote(S, Fn);
8335       return;
8336     }
8337 
8338     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8339     assert(CVR && "unexpected qualifiers mismatch");
8340 
8341     if (isObjectArgument) {
8342       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8343         << (unsigned) FnKind << FnDesc
8344         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8345         << FromTy << (CVR - 1);
8346     } else {
8347       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8348         << (unsigned) FnKind << FnDesc
8349         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8350         << FromTy << (CVR - 1) << I+1;
8351     }
8352     MaybeEmitInheritedConstructorNote(S, Fn);
8353     return;
8354   }
8355 
8356   // Special diagnostic for failure to convert an initializer list, since
8357   // telling the user that it has type void is not useful.
8358   if (FromExpr && isa<InitListExpr>(FromExpr)) {
8359     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8360       << (unsigned) FnKind << FnDesc
8361       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8362       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8363     MaybeEmitInheritedConstructorNote(S, Fn);
8364     return;
8365   }
8366 
8367   // Diagnose references or pointers to incomplete types differently,
8368   // since it's far from impossible that the incompleteness triggered
8369   // the failure.
8370   QualType TempFromTy = FromTy.getNonReferenceType();
8371   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8372     TempFromTy = PTy->getPointeeType();
8373   if (TempFromTy->isIncompleteType()) {
8374     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8375       << (unsigned) FnKind << FnDesc
8376       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8377       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8378     MaybeEmitInheritedConstructorNote(S, Fn);
8379     return;
8380   }
8381 
8382   // Diagnose base -> derived pointer conversions.
8383   unsigned BaseToDerivedConversion = 0;
8384   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8385     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8386       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8387                                                FromPtrTy->getPointeeType()) &&
8388           !FromPtrTy->getPointeeType()->isIncompleteType() &&
8389           !ToPtrTy->getPointeeType()->isIncompleteType() &&
8390           S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8391                           FromPtrTy->getPointeeType()))
8392         BaseToDerivedConversion = 1;
8393     }
8394   } else if (const ObjCObjectPointerType *FromPtrTy
8395                                     = FromTy->getAs<ObjCObjectPointerType>()) {
8396     if (const ObjCObjectPointerType *ToPtrTy
8397                                         = ToTy->getAs<ObjCObjectPointerType>())
8398       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8399         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8400           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8401                                                 FromPtrTy->getPointeeType()) &&
8402               FromIface->isSuperClassOf(ToIface))
8403             BaseToDerivedConversion = 2;
8404   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8405     if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8406         !FromTy->isIncompleteType() &&
8407         !ToRefTy->getPointeeType()->isIncompleteType() &&
8408         S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8409       BaseToDerivedConversion = 3;
8410     } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8411                ToTy.getNonReferenceType().getCanonicalType() ==
8412                FromTy.getNonReferenceType().getCanonicalType()) {
8413       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8414         << (unsigned) FnKind << FnDesc
8415         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8416         << (unsigned) isObjectArgument << I + 1;
8417       MaybeEmitInheritedConstructorNote(S, Fn);
8418       return;
8419     }
8420   }
8421 
8422   if (BaseToDerivedConversion) {
8423     S.Diag(Fn->getLocation(),
8424            diag::note_ovl_candidate_bad_base_to_derived_conv)
8425       << (unsigned) FnKind << FnDesc
8426       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8427       << (BaseToDerivedConversion - 1)
8428       << FromTy << ToTy << I+1;
8429     MaybeEmitInheritedConstructorNote(S, Fn);
8430     return;
8431   }
8432 
8433   if (isa<ObjCObjectPointerType>(CFromTy) &&
8434       isa<PointerType>(CToTy)) {
8435       Qualifiers FromQs = CFromTy.getQualifiers();
8436       Qualifiers ToQs = CToTy.getQualifiers();
8437       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8438         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8439         << (unsigned) FnKind << FnDesc
8440         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8441         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8442         MaybeEmitInheritedConstructorNote(S, Fn);
8443         return;
8444       }
8445   }
8446 
8447   // Emit the generic diagnostic and, optionally, add the hints to it.
8448   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8449   FDiag << (unsigned) FnKind << FnDesc
8450     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8451     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8452     << (unsigned) (Cand->Fix.Kind);
8453 
8454   // If we can fix the conversion, suggest the FixIts.
8455   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8456        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8457     FDiag << *HI;
8458   S.Diag(Fn->getLocation(), FDiag);
8459 
8460   MaybeEmitInheritedConstructorNote(S, Fn);
8461 }
8462 
8463 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8464                            unsigned NumFormalArgs) {
8465   // TODO: treat calls to a missing default constructor as a special case
8466 
8467   FunctionDecl *Fn = Cand->Function;
8468   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8469 
8470   unsigned MinParams = Fn->getMinRequiredArguments();
8471 
8472   // With invalid overloaded operators, it's possible that we think we
8473   // have an arity mismatch when it fact it looks like we have the
8474   // right number of arguments, because only overloaded operators have
8475   // the weird behavior of overloading member and non-member functions.
8476   // Just don't report anything.
8477   if (Fn->isInvalidDecl() &&
8478       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8479     return;
8480 
8481   // at least / at most / exactly
8482   unsigned mode, modeCount;
8483   if (NumFormalArgs < MinParams) {
8484     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8485            (Cand->FailureKind == ovl_fail_bad_deduction &&
8486             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8487     if (MinParams != FnTy->getNumArgs() ||
8488         FnTy->isVariadic() || FnTy->isTemplateVariadic())
8489       mode = 0; // "at least"
8490     else
8491       mode = 2; // "exactly"
8492     modeCount = MinParams;
8493   } else {
8494     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8495            (Cand->FailureKind == ovl_fail_bad_deduction &&
8496             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8497     if (MinParams != FnTy->getNumArgs())
8498       mode = 1; // "at most"
8499     else
8500       mode = 2; // "exactly"
8501     modeCount = FnTy->getNumArgs();
8502   }
8503 
8504   std::string Description;
8505   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8506 
8507   if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8508     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8509       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8510       << Fn->getParamDecl(0) << NumFormalArgs;
8511   else
8512     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8513       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8514       << modeCount << NumFormalArgs;
8515   MaybeEmitInheritedConstructorNote(S, Fn);
8516 }
8517 
8518 /// Diagnose a failed template-argument deduction.
8519 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
8520                           unsigned NumArgs) {
8521   FunctionDecl *Fn = Cand->Function; // pattern
8522 
8523   TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
8524   NamedDecl *ParamD;
8525   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8526   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8527   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8528   switch (Cand->DeductionFailure.Result) {
8529   case Sema::TDK_Success:
8530     llvm_unreachable("TDK_success while diagnosing bad deduction");
8531 
8532   case Sema::TDK_Incomplete: {
8533     assert(ParamD && "no parameter found for incomplete deduction result");
8534     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
8535       << ParamD->getDeclName();
8536     MaybeEmitInheritedConstructorNote(S, Fn);
8537     return;
8538   }
8539 
8540   case Sema::TDK_Underqualified: {
8541     assert(ParamD && "no parameter found for bad qualifiers deduction result");
8542     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8543 
8544     QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType();
8545 
8546     // Param will have been canonicalized, but it should just be a
8547     // qualified version of ParamD, so move the qualifiers to that.
8548     QualifierCollector Qs;
8549     Qs.strip(Param);
8550     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8551     assert(S.Context.hasSameType(Param, NonCanonParam));
8552 
8553     // Arg has also been canonicalized, but there's nothing we can do
8554     // about that.  It also doesn't matter as much, because it won't
8555     // have any template parameters in it (because deduction isn't
8556     // done on dependent types).
8557     QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType();
8558 
8559     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified)
8560       << ParamD->getDeclName() << Arg << NonCanonParam;
8561     MaybeEmitInheritedConstructorNote(S, Fn);
8562     return;
8563   }
8564 
8565   case Sema::TDK_Inconsistent: {
8566     assert(ParamD && "no parameter found for inconsistent deduction result");
8567     int which = 0;
8568     if (isa<TemplateTypeParmDecl>(ParamD))
8569       which = 0;
8570     else if (isa<NonTypeTemplateParmDecl>(ParamD))
8571       which = 1;
8572     else {
8573       which = 2;
8574     }
8575 
8576     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
8577       << which << ParamD->getDeclName()
8578       << *Cand->DeductionFailure.getFirstArg()
8579       << *Cand->DeductionFailure.getSecondArg();
8580     MaybeEmitInheritedConstructorNote(S, Fn);
8581     return;
8582   }
8583 
8584   case Sema::TDK_InvalidExplicitArguments:
8585     assert(ParamD && "no parameter found for invalid explicit arguments");
8586     if (ParamD->getDeclName())
8587       S.Diag(Fn->getLocation(),
8588              diag::note_ovl_candidate_explicit_arg_mismatch_named)
8589         << ParamD->getDeclName();
8590     else {
8591       int index = 0;
8592       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8593         index = TTP->getIndex();
8594       else if (NonTypeTemplateParmDecl *NTTP
8595                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8596         index = NTTP->getIndex();
8597       else
8598         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8599       S.Diag(Fn->getLocation(),
8600              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8601         << (index + 1);
8602     }
8603     MaybeEmitInheritedConstructorNote(S, Fn);
8604     return;
8605 
8606   case Sema::TDK_TooManyArguments:
8607   case Sema::TDK_TooFewArguments:
8608     DiagnoseArityMismatch(S, Cand, NumArgs);
8609     return;
8610 
8611   case Sema::TDK_InstantiationDepth:
8612     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
8613     MaybeEmitInheritedConstructorNote(S, Fn);
8614     return;
8615 
8616   case Sema::TDK_SubstitutionFailure: {
8617     // Format the template argument list into the argument string.
8618     SmallString<128> TemplateArgString;
8619     if (TemplateArgumentList *Args =
8620           Cand->DeductionFailure.getTemplateArgumentList()) {
8621       TemplateArgString = " ";
8622       TemplateArgString += S.getTemplateArgumentBindingsText(
8623           Fn->getDescribedFunctionTemplate()->getTemplateParameters(), *Args);
8624     }
8625 
8626     // If this candidate was disabled by enable_if, say so.
8627     PartialDiagnosticAt *PDiag = Cand->DeductionFailure.getSFINAEDiagnostic();
8628     if (PDiag && PDiag->second.getDiagID() ==
8629           diag::err_typename_nested_not_found_enable_if) {
8630       // FIXME: Use the source range of the condition, and the fully-qualified
8631       //        name of the enable_if template. These are both present in PDiag.
8632       S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8633         << "'enable_if'" << TemplateArgString;
8634       return;
8635     }
8636 
8637     // Format the SFINAE diagnostic into the argument string.
8638     // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8639     //        formatted message in another diagnostic.
8640     SmallString<128> SFINAEArgString;
8641     SourceRange R;
8642     if (PDiag) {
8643       SFINAEArgString = ": ";
8644       R = SourceRange(PDiag->first, PDiag->first);
8645       PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8646     }
8647 
8648     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
8649       << TemplateArgString << SFINAEArgString << R;
8650     MaybeEmitInheritedConstructorNote(S, Fn);
8651     return;
8652   }
8653 
8654   case Sema::TDK_FailedOverloadResolution: {
8655     OverloadExpr::FindResult R =
8656         OverloadExpr::find(Cand->DeductionFailure.getExpr());
8657     S.Diag(Fn->getLocation(),
8658            diag::note_ovl_candidate_failed_overload_resolution)
8659       << R.Expression->getName();
8660     return;
8661   }
8662 
8663   case Sema::TDK_NonDeducedMismatch: {
8664     // FIXME: Provide a source location to indicate what we couldn't match.
8665     TemplateArgument FirstTA = *Cand->DeductionFailure.getFirstArg();
8666     TemplateArgument SecondTA = *Cand->DeductionFailure.getSecondArg();
8667     if (FirstTA.getKind() == TemplateArgument::Template &&
8668         SecondTA.getKind() == TemplateArgument::Template) {
8669       TemplateName FirstTN = FirstTA.getAsTemplate();
8670       TemplateName SecondTN = SecondTA.getAsTemplate();
8671       if (FirstTN.getKind() == TemplateName::Template &&
8672           SecondTN.getKind() == TemplateName::Template) {
8673         if (FirstTN.getAsTemplateDecl()->getName() ==
8674             SecondTN.getAsTemplateDecl()->getName()) {
8675           // FIXME: This fixes a bad diagnostic where both templates are named
8676           // the same.  This particular case is a bit difficult since:
8677           // 1) It is passed as a string to the diagnostic printer.
8678           // 2) The diagnostic printer only attempts to find a better
8679           //    name for types, not decls.
8680           // Ideally, this should folded into the diagnostic printer.
8681           S.Diag(Fn->getLocation(),
8682                  diag::note_ovl_candidate_non_deduced_mismatch_qualified)
8683               << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
8684           return;
8685         }
8686       }
8687     }
8688     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch)
8689       << FirstTA << SecondTA;
8690     return;
8691   }
8692   // TODO: diagnose these individually, then kill off
8693   // note_ovl_candidate_bad_deduction, which is uselessly vague.
8694   case Sema::TDK_MiscellaneousDeductionFailure:
8695     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
8696     MaybeEmitInheritedConstructorNote(S, Fn);
8697     return;
8698   }
8699 }
8700 
8701 /// CUDA: diagnose an invalid call across targets.
8702 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8703   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8704   FunctionDecl *Callee = Cand->Function;
8705 
8706   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8707                            CalleeTarget = S.IdentifyCUDATarget(Callee);
8708 
8709   std::string FnDesc;
8710   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8711 
8712   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8713       << (unsigned) FnKind << CalleeTarget << CallerTarget;
8714 }
8715 
8716 /// Generates a 'note' diagnostic for an overload candidate.  We've
8717 /// already generated a primary error at the call site.
8718 ///
8719 /// It really does need to be a single diagnostic with its caret
8720 /// pointed at the candidate declaration.  Yes, this creates some
8721 /// major challenges of technical writing.  Yes, this makes pointing
8722 /// out problems with specific arguments quite awkward.  It's still
8723 /// better than generating twenty screens of text for every failed
8724 /// overload.
8725 ///
8726 /// It would be great to be able to express per-candidate problems
8727 /// more richly for those diagnostic clients that cared, but we'd
8728 /// still have to be just as careful with the default diagnostics.
8729 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8730                            unsigned NumArgs) {
8731   FunctionDecl *Fn = Cand->Function;
8732 
8733   // Note deleted candidates, but only if they're viable.
8734   if (Cand->Viable && (Fn->isDeleted() ||
8735       S.isFunctionConsideredUnavailable(Fn))) {
8736     std::string FnDesc;
8737     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8738 
8739     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8740       << FnKind << FnDesc
8741       << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8742     MaybeEmitInheritedConstructorNote(S, Fn);
8743     return;
8744   }
8745 
8746   // We don't really have anything else to say about viable candidates.
8747   if (Cand->Viable) {
8748     S.NoteOverloadCandidate(Fn);
8749     return;
8750   }
8751 
8752   switch (Cand->FailureKind) {
8753   case ovl_fail_too_many_arguments:
8754   case ovl_fail_too_few_arguments:
8755     return DiagnoseArityMismatch(S, Cand, NumArgs);
8756 
8757   case ovl_fail_bad_deduction:
8758     return DiagnoseBadDeduction(S, Cand, NumArgs);
8759 
8760   case ovl_fail_trivial_conversion:
8761   case ovl_fail_bad_final_conversion:
8762   case ovl_fail_final_conversion_not_exact:
8763     return S.NoteOverloadCandidate(Fn);
8764 
8765   case ovl_fail_bad_conversion: {
8766     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8767     for (unsigned N = Cand->NumConversions; I != N; ++I)
8768       if (Cand->Conversions[I].isBad())
8769         return DiagnoseBadConversion(S, Cand, I);
8770 
8771     // FIXME: this currently happens when we're called from SemaInit
8772     // when user-conversion overload fails.  Figure out how to handle
8773     // those conditions and diagnose them well.
8774     return S.NoteOverloadCandidate(Fn);
8775   }
8776 
8777   case ovl_fail_bad_target:
8778     return DiagnoseBadTarget(S, Cand);
8779   }
8780 }
8781 
8782 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8783   // Desugar the type of the surrogate down to a function type,
8784   // retaining as many typedefs as possible while still showing
8785   // the function type (and, therefore, its parameter types).
8786   QualType FnType = Cand->Surrogate->getConversionType();
8787   bool isLValueReference = false;
8788   bool isRValueReference = false;
8789   bool isPointer = false;
8790   if (const LValueReferenceType *FnTypeRef =
8791         FnType->getAs<LValueReferenceType>()) {
8792     FnType = FnTypeRef->getPointeeType();
8793     isLValueReference = true;
8794   } else if (const RValueReferenceType *FnTypeRef =
8795                FnType->getAs<RValueReferenceType>()) {
8796     FnType = FnTypeRef->getPointeeType();
8797     isRValueReference = true;
8798   }
8799   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8800     FnType = FnTypePtr->getPointeeType();
8801     isPointer = true;
8802   }
8803   // Desugar down to a function type.
8804   FnType = QualType(FnType->getAs<FunctionType>(), 0);
8805   // Reconstruct the pointer/reference as appropriate.
8806   if (isPointer) FnType = S.Context.getPointerType(FnType);
8807   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8808   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8809 
8810   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8811     << FnType;
8812   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8813 }
8814 
8815 void NoteBuiltinOperatorCandidate(Sema &S,
8816                                   StringRef Opc,
8817                                   SourceLocation OpLoc,
8818                                   OverloadCandidate *Cand) {
8819   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8820   std::string TypeStr("operator");
8821   TypeStr += Opc;
8822   TypeStr += "(";
8823   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8824   if (Cand->NumConversions == 1) {
8825     TypeStr += ")";
8826     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8827   } else {
8828     TypeStr += ", ";
8829     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8830     TypeStr += ")";
8831     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8832   }
8833 }
8834 
8835 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8836                                   OverloadCandidate *Cand) {
8837   unsigned NoOperands = Cand->NumConversions;
8838   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8839     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8840     if (ICS.isBad()) break; // all meaningless after first invalid
8841     if (!ICS.isAmbiguous()) continue;
8842 
8843     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8844                               S.PDiag(diag::note_ambiguous_type_conversion));
8845   }
8846 }
8847 
8848 SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8849   if (Cand->Function)
8850     return Cand->Function->getLocation();
8851   if (Cand->IsSurrogate)
8852     return Cand->Surrogate->getLocation();
8853   return SourceLocation();
8854 }
8855 
8856 static unsigned
8857 RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) {
8858   switch ((Sema::TemplateDeductionResult)DFI.Result) {
8859   case Sema::TDK_Success:
8860     llvm_unreachable("TDK_success while diagnosing bad deduction");
8861 
8862   case Sema::TDK_Invalid:
8863   case Sema::TDK_Incomplete:
8864     return 1;
8865 
8866   case Sema::TDK_Underqualified:
8867   case Sema::TDK_Inconsistent:
8868     return 2;
8869 
8870   case Sema::TDK_SubstitutionFailure:
8871   case Sema::TDK_NonDeducedMismatch:
8872   case Sema::TDK_MiscellaneousDeductionFailure:
8873     return 3;
8874 
8875   case Sema::TDK_InstantiationDepth:
8876   case Sema::TDK_FailedOverloadResolution:
8877     return 4;
8878 
8879   case Sema::TDK_InvalidExplicitArguments:
8880     return 5;
8881 
8882   case Sema::TDK_TooManyArguments:
8883   case Sema::TDK_TooFewArguments:
8884     return 6;
8885   }
8886   llvm_unreachable("Unhandled deduction result");
8887 }
8888 
8889 struct CompareOverloadCandidatesForDisplay {
8890   Sema &S;
8891   CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8892 
8893   bool operator()(const OverloadCandidate *L,
8894                   const OverloadCandidate *R) {
8895     // Fast-path this check.
8896     if (L == R) return false;
8897 
8898     // Order first by viability.
8899     if (L->Viable) {
8900       if (!R->Viable) return true;
8901 
8902       // TODO: introduce a tri-valued comparison for overload
8903       // candidates.  Would be more worthwhile if we had a sort
8904       // that could exploit it.
8905       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8906       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8907     } else if (R->Viable)
8908       return false;
8909 
8910     assert(L->Viable == R->Viable);
8911 
8912     // Criteria by which we can sort non-viable candidates:
8913     if (!L->Viable) {
8914       // 1. Arity mismatches come after other candidates.
8915       if (L->FailureKind == ovl_fail_too_many_arguments ||
8916           L->FailureKind == ovl_fail_too_few_arguments)
8917         return false;
8918       if (R->FailureKind == ovl_fail_too_many_arguments ||
8919           R->FailureKind == ovl_fail_too_few_arguments)
8920         return true;
8921 
8922       // 2. Bad conversions come first and are ordered by the number
8923       // of bad conversions and quality of good conversions.
8924       if (L->FailureKind == ovl_fail_bad_conversion) {
8925         if (R->FailureKind != ovl_fail_bad_conversion)
8926           return true;
8927 
8928         // The conversion that can be fixed with a smaller number of changes,
8929         // comes first.
8930         unsigned numLFixes = L->Fix.NumConversionsFixed;
8931         unsigned numRFixes = R->Fix.NumConversionsFixed;
8932         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8933         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8934         if (numLFixes != numRFixes) {
8935           if (numLFixes < numRFixes)
8936             return true;
8937           else
8938             return false;
8939         }
8940 
8941         // If there's any ordering between the defined conversions...
8942         // FIXME: this might not be transitive.
8943         assert(L->NumConversions == R->NumConversions);
8944 
8945         int leftBetter = 0;
8946         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8947         for (unsigned E = L->NumConversions; I != E; ++I) {
8948           switch (CompareImplicitConversionSequences(S,
8949                                                      L->Conversions[I],
8950                                                      R->Conversions[I])) {
8951           case ImplicitConversionSequence::Better:
8952             leftBetter++;
8953             break;
8954 
8955           case ImplicitConversionSequence::Worse:
8956             leftBetter--;
8957             break;
8958 
8959           case ImplicitConversionSequence::Indistinguishable:
8960             break;
8961           }
8962         }
8963         if (leftBetter > 0) return true;
8964         if (leftBetter < 0) return false;
8965 
8966       } else if (R->FailureKind == ovl_fail_bad_conversion)
8967         return false;
8968 
8969       if (L->FailureKind == ovl_fail_bad_deduction) {
8970         if (R->FailureKind != ovl_fail_bad_deduction)
8971           return true;
8972 
8973         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8974           return RankDeductionFailure(L->DeductionFailure)
8975                < RankDeductionFailure(R->DeductionFailure);
8976       } else if (R->FailureKind == ovl_fail_bad_deduction)
8977         return false;
8978 
8979       // TODO: others?
8980     }
8981 
8982     // Sort everything else by location.
8983     SourceLocation LLoc = GetLocationForCandidate(L);
8984     SourceLocation RLoc = GetLocationForCandidate(R);
8985 
8986     // Put candidates without locations (e.g. builtins) at the end.
8987     if (LLoc.isInvalid()) return false;
8988     if (RLoc.isInvalid()) return true;
8989 
8990     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8991   }
8992 };
8993 
8994 /// CompleteNonViableCandidate - Normally, overload resolution only
8995 /// computes up to the first. Produces the FixIt set if possible.
8996 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8997                                 ArrayRef<Expr *> Args) {
8998   assert(!Cand->Viable);
8999 
9000   // Don't do anything on failures other than bad conversion.
9001   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
9002 
9003   // We only want the FixIts if all the arguments can be corrected.
9004   bool Unfixable = false;
9005   // Use a implicit copy initialization to check conversion fixes.
9006   Cand->Fix.setConversionChecker(TryCopyInitialization);
9007 
9008   // Skip forward to the first bad conversion.
9009   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
9010   unsigned ConvCount = Cand->NumConversions;
9011   while (true) {
9012     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
9013     ConvIdx++;
9014     if (Cand->Conversions[ConvIdx - 1].isBad()) {
9015       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
9016       break;
9017     }
9018   }
9019 
9020   if (ConvIdx == ConvCount)
9021     return;
9022 
9023   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
9024          "remaining conversion is initialized?");
9025 
9026   // FIXME: this should probably be preserved from the overload
9027   // operation somehow.
9028   bool SuppressUserConversions = false;
9029 
9030   const FunctionProtoType* Proto;
9031   unsigned ArgIdx = ConvIdx;
9032 
9033   if (Cand->IsSurrogate) {
9034     QualType ConvType
9035       = Cand->Surrogate->getConversionType().getNonReferenceType();
9036     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
9037       ConvType = ConvPtrType->getPointeeType();
9038     Proto = ConvType->getAs<FunctionProtoType>();
9039     ArgIdx--;
9040   } else if (Cand->Function) {
9041     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
9042     if (isa<CXXMethodDecl>(Cand->Function) &&
9043         !isa<CXXConstructorDecl>(Cand->Function))
9044       ArgIdx--;
9045   } else {
9046     // Builtin binary operator with a bad first conversion.
9047     assert(ConvCount <= 3);
9048     for (; ConvIdx != ConvCount; ++ConvIdx)
9049       Cand->Conversions[ConvIdx]
9050         = TryCopyInitialization(S, Args[ConvIdx],
9051                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
9052                                 SuppressUserConversions,
9053                                 /*InOverloadResolution*/ true,
9054                                 /*AllowObjCWritebackConversion=*/
9055                                   S.getLangOpts().ObjCAutoRefCount);
9056     return;
9057   }
9058 
9059   // Fill in the rest of the conversions.
9060   unsigned NumArgsInProto = Proto->getNumArgs();
9061   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
9062     if (ArgIdx < NumArgsInProto) {
9063       Cand->Conversions[ConvIdx]
9064         = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
9065                                 SuppressUserConversions,
9066                                 /*InOverloadResolution=*/true,
9067                                 /*AllowObjCWritebackConversion=*/
9068                                   S.getLangOpts().ObjCAutoRefCount);
9069       // Store the FixIt in the candidate if it exists.
9070       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
9071         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
9072     }
9073     else
9074       Cand->Conversions[ConvIdx].setEllipsis();
9075   }
9076 }
9077 
9078 } // end anonymous namespace
9079 
9080 /// PrintOverloadCandidates - When overload resolution fails, prints
9081 /// diagnostic messages containing the candidates in the candidate
9082 /// set.
9083 void OverloadCandidateSet::NoteCandidates(Sema &S,
9084                                           OverloadCandidateDisplayKind OCD,
9085                                           ArrayRef<Expr *> Args,
9086                                           StringRef Opc,
9087                                           SourceLocation OpLoc) {
9088   // Sort the candidates by viability and position.  Sorting directly would
9089   // be prohibitive, so we make a set of pointers and sort those.
9090   SmallVector<OverloadCandidate*, 32> Cands;
9091   if (OCD == OCD_AllCandidates) Cands.reserve(size());
9092   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9093     if (Cand->Viable)
9094       Cands.push_back(Cand);
9095     else if (OCD == OCD_AllCandidates) {
9096       CompleteNonViableCandidate(S, Cand, Args);
9097       if (Cand->Function || Cand->IsSurrogate)
9098         Cands.push_back(Cand);
9099       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
9100       // want to list every possible builtin candidate.
9101     }
9102   }
9103 
9104   std::sort(Cands.begin(), Cands.end(),
9105             CompareOverloadCandidatesForDisplay(S));
9106 
9107   bool ReportedAmbiguousConversions = false;
9108 
9109   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
9110   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
9111   unsigned CandsShown = 0;
9112   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
9113     OverloadCandidate *Cand = *I;
9114 
9115     // Set an arbitrary limit on the number of candidate functions we'll spam
9116     // the user with.  FIXME: This limit should depend on details of the
9117     // candidate list.
9118     if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
9119       break;
9120     }
9121     ++CandsShown;
9122 
9123     if (Cand->Function)
9124       NoteFunctionCandidate(S, Cand, Args.size());
9125     else if (Cand->IsSurrogate)
9126       NoteSurrogateCandidate(S, Cand);
9127     else {
9128       assert(Cand->Viable &&
9129              "Non-viable built-in candidates are not added to Cands.");
9130       // Generally we only see ambiguities including viable builtin
9131       // operators if overload resolution got screwed up by an
9132       // ambiguous user-defined conversion.
9133       //
9134       // FIXME: It's quite possible for different conversions to see
9135       // different ambiguities, though.
9136       if (!ReportedAmbiguousConversions) {
9137         NoteAmbiguousUserConversions(S, OpLoc, Cand);
9138         ReportedAmbiguousConversions = true;
9139       }
9140 
9141       // If this is a viable builtin, print it.
9142       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
9143     }
9144   }
9145 
9146   if (I != E)
9147     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
9148 }
9149 
9150 // [PossiblyAFunctionType]  -->   [Return]
9151 // NonFunctionType --> NonFunctionType
9152 // R (A) --> R(A)
9153 // R (*)(A) --> R (A)
9154 // R (&)(A) --> R (A)
9155 // R (S::*)(A) --> R (A)
9156 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
9157   QualType Ret = PossiblyAFunctionType;
9158   if (const PointerType *ToTypePtr =
9159     PossiblyAFunctionType->getAs<PointerType>())
9160     Ret = ToTypePtr->getPointeeType();
9161   else if (const ReferenceType *ToTypeRef =
9162     PossiblyAFunctionType->getAs<ReferenceType>())
9163     Ret = ToTypeRef->getPointeeType();
9164   else if (const MemberPointerType *MemTypePtr =
9165     PossiblyAFunctionType->getAs<MemberPointerType>())
9166     Ret = MemTypePtr->getPointeeType();
9167   Ret =
9168     Context.getCanonicalType(Ret).getUnqualifiedType();
9169   return Ret;
9170 }
9171 
9172 // A helper class to help with address of function resolution
9173 // - allows us to avoid passing around all those ugly parameters
9174 class AddressOfFunctionResolver
9175 {
9176   Sema& S;
9177   Expr* SourceExpr;
9178   const QualType& TargetType;
9179   QualType TargetFunctionType; // Extracted function type from target type
9180 
9181   bool Complain;
9182   //DeclAccessPair& ResultFunctionAccessPair;
9183   ASTContext& Context;
9184 
9185   bool TargetTypeIsNonStaticMemberFunction;
9186   bool FoundNonTemplateFunction;
9187 
9188   OverloadExpr::FindResult OvlExprInfo;
9189   OverloadExpr *OvlExpr;
9190   TemplateArgumentListInfo OvlExplicitTemplateArgs;
9191   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
9192 
9193 public:
9194   AddressOfFunctionResolver(Sema &S, Expr* SourceExpr,
9195                             const QualType& TargetType, bool Complain)
9196     : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
9197       Complain(Complain), Context(S.getASTContext()),
9198       TargetTypeIsNonStaticMemberFunction(
9199                                     !!TargetType->getAs<MemberPointerType>()),
9200       FoundNonTemplateFunction(false),
9201       OvlExprInfo(OverloadExpr::find(SourceExpr)),
9202       OvlExpr(OvlExprInfo.Expression)
9203   {
9204     ExtractUnqualifiedFunctionTypeFromTargetType();
9205 
9206     if (!TargetFunctionType->isFunctionType()) {
9207       if (OvlExpr->hasExplicitTemplateArgs()) {
9208         DeclAccessPair dap;
9209         if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization(
9210                                             OvlExpr, false, &dap) ) {
9211 
9212           if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9213             if (!Method->isStatic()) {
9214               // If the target type is a non-function type and the function
9215               // found is a non-static member function, pretend as if that was
9216               // the target, it's the only possible type to end up with.
9217               TargetTypeIsNonStaticMemberFunction = true;
9218 
9219               // And skip adding the function if its not in the proper form.
9220               // We'll diagnose this due to an empty set of functions.
9221               if (!OvlExprInfo.HasFormOfMemberPointer)
9222                 return;
9223             }
9224           }
9225 
9226           Matches.push_back(std::make_pair(dap,Fn));
9227         }
9228       }
9229       return;
9230     }
9231 
9232     if (OvlExpr->hasExplicitTemplateArgs())
9233       OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
9234 
9235     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
9236       // C++ [over.over]p4:
9237       //   If more than one function is selected, [...]
9238       if (Matches.size() > 1) {
9239         if (FoundNonTemplateFunction)
9240           EliminateAllTemplateMatches();
9241         else
9242           EliminateAllExceptMostSpecializedTemplate();
9243       }
9244     }
9245   }
9246 
9247 private:
9248   bool isTargetTypeAFunction() const {
9249     return TargetFunctionType->isFunctionType();
9250   }
9251 
9252   // [ToType]     [Return]
9253 
9254   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
9255   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
9256   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
9257   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
9258     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
9259   }
9260 
9261   // return true if any matching specializations were found
9262   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
9263                                    const DeclAccessPair& CurAccessFunPair) {
9264     if (CXXMethodDecl *Method
9265               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
9266       // Skip non-static function templates when converting to pointer, and
9267       // static when converting to member pointer.
9268       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9269         return false;
9270     }
9271     else if (TargetTypeIsNonStaticMemberFunction)
9272       return false;
9273 
9274     // C++ [over.over]p2:
9275     //   If the name is a function template, template argument deduction is
9276     //   done (14.8.2.2), and if the argument deduction succeeds, the
9277     //   resulting template argument list is used to generate a single
9278     //   function template specialization, which is added to the set of
9279     //   overloaded functions considered.
9280     FunctionDecl *Specialization = 0;
9281     TemplateDeductionInfo Info(OvlExpr->getNameLoc());
9282     if (Sema::TemplateDeductionResult Result
9283           = S.DeduceTemplateArguments(FunctionTemplate,
9284                                       &OvlExplicitTemplateArgs,
9285                                       TargetFunctionType, Specialization,
9286                                       Info, /*InOverloadResolution=*/true)) {
9287       // FIXME: make a note of the failed deduction for diagnostics.
9288       (void)Result;
9289       return false;
9290     }
9291 
9292     // Template argument deduction ensures that we have an exact match or
9293     // compatible pointer-to-function arguments that would be adjusted by ICS.
9294     // This function template specicalization works.
9295     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
9296     assert(S.isSameOrCompatibleFunctionType(
9297               Context.getCanonicalType(Specialization->getType()),
9298               Context.getCanonicalType(TargetFunctionType)));
9299     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9300     return true;
9301   }
9302 
9303   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9304                                       const DeclAccessPair& CurAccessFunPair) {
9305     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9306       // Skip non-static functions when converting to pointer, and static
9307       // when converting to member pointer.
9308       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9309         return false;
9310     }
9311     else if (TargetTypeIsNonStaticMemberFunction)
9312       return false;
9313 
9314     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9315       if (S.getLangOpts().CUDA)
9316         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9317           if (S.CheckCUDATarget(Caller, FunDecl))
9318             return false;
9319 
9320       // If any candidate has a placeholder return type, trigger its deduction
9321       // now.
9322       if (S.getLangOpts().CPlusPlus1y &&
9323           FunDecl->getResultType()->isUndeducedType() &&
9324           S.DeduceReturnType(FunDecl, SourceExpr->getLocStart(), Complain))
9325         return false;
9326 
9327       QualType ResultTy;
9328       if (Context.hasSameUnqualifiedType(TargetFunctionType,
9329                                          FunDecl->getType()) ||
9330           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9331                                  ResultTy)) {
9332         Matches.push_back(std::make_pair(CurAccessFunPair,
9333           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9334         FoundNonTemplateFunction = true;
9335         return true;
9336       }
9337     }
9338 
9339     return false;
9340   }
9341 
9342   bool FindAllFunctionsThatMatchTargetTypeExactly() {
9343     bool Ret = false;
9344 
9345     // If the overload expression doesn't have the form of a pointer to
9346     // member, don't try to convert it to a pointer-to-member type.
9347     if (IsInvalidFormOfPointerToMemberFunction())
9348       return false;
9349 
9350     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9351                                E = OvlExpr->decls_end();
9352          I != E; ++I) {
9353       // Look through any using declarations to find the underlying function.
9354       NamedDecl *Fn = (*I)->getUnderlyingDecl();
9355 
9356       // C++ [over.over]p3:
9357       //   Non-member functions and static member functions match
9358       //   targets of type "pointer-to-function" or "reference-to-function."
9359       //   Nonstatic member functions match targets of
9360       //   type "pointer-to-member-function."
9361       // Note that according to DR 247, the containing class does not matter.
9362       if (FunctionTemplateDecl *FunctionTemplate
9363                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
9364         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9365           Ret = true;
9366       }
9367       // If we have explicit template arguments supplied, skip non-templates.
9368       else if (!OvlExpr->hasExplicitTemplateArgs() &&
9369                AddMatchingNonTemplateFunction(Fn, I.getPair()))
9370         Ret = true;
9371     }
9372     assert(Ret || Matches.empty());
9373     return Ret;
9374   }
9375 
9376   void EliminateAllExceptMostSpecializedTemplate() {
9377     //   [...] and any given function template specialization F1 is
9378     //   eliminated if the set contains a second function template
9379     //   specialization whose function template is more specialized
9380     //   than the function template of F1 according to the partial
9381     //   ordering rules of 14.5.5.2.
9382 
9383     // The algorithm specified above is quadratic. We instead use a
9384     // two-pass algorithm (similar to the one used to identify the
9385     // best viable function in an overload set) that identifies the
9386     // best function template (if it exists).
9387 
9388     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9389     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9390       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9391 
9392     UnresolvedSetIterator Result =
9393       S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
9394                            TPOC_Other, 0, SourceExpr->getLocStart(),
9395                            S.PDiag(),
9396                            S.PDiag(diag::err_addr_ovl_ambiguous)
9397                              << Matches[0].second->getDeclName(),
9398                            S.PDiag(diag::note_ovl_candidate)
9399                              << (unsigned) oc_function_template,
9400                            Complain, TargetFunctionType);
9401 
9402     if (Result != MatchesCopy.end()) {
9403       // Make it the first and only element
9404       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9405       Matches[0].second = cast<FunctionDecl>(*Result);
9406       Matches.resize(1);
9407     }
9408   }
9409 
9410   void EliminateAllTemplateMatches() {
9411     //   [...] any function template specializations in the set are
9412     //   eliminated if the set also contains a non-template function, [...]
9413     for (unsigned I = 0, N = Matches.size(); I != N; ) {
9414       if (Matches[I].second->getPrimaryTemplate() == 0)
9415         ++I;
9416       else {
9417         Matches[I] = Matches[--N];
9418         Matches.set_size(N);
9419       }
9420     }
9421   }
9422 
9423 public:
9424   void ComplainNoMatchesFound() const {
9425     assert(Matches.empty());
9426     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9427         << OvlExpr->getName() << TargetFunctionType
9428         << OvlExpr->getSourceRange();
9429     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9430   }
9431 
9432   bool IsInvalidFormOfPointerToMemberFunction() const {
9433     return TargetTypeIsNonStaticMemberFunction &&
9434       !OvlExprInfo.HasFormOfMemberPointer;
9435   }
9436 
9437   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9438       // TODO: Should we condition this on whether any functions might
9439       // have matched, or is it more appropriate to do that in callers?
9440       // TODO: a fixit wouldn't hurt.
9441       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9442         << TargetType << OvlExpr->getSourceRange();
9443   }
9444 
9445   void ComplainOfInvalidConversion() const {
9446     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9447       << OvlExpr->getName() << TargetType;
9448   }
9449 
9450   void ComplainMultipleMatchesFound() const {
9451     assert(Matches.size() > 1);
9452     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9453       << OvlExpr->getName()
9454       << OvlExpr->getSourceRange();
9455     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9456   }
9457 
9458   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9459 
9460   int getNumMatches() const { return Matches.size(); }
9461 
9462   FunctionDecl* getMatchingFunctionDecl() const {
9463     if (Matches.size() != 1) return 0;
9464     return Matches[0].second;
9465   }
9466 
9467   const DeclAccessPair* getMatchingFunctionAccessPair() const {
9468     if (Matches.size() != 1) return 0;
9469     return &Matches[0].first;
9470   }
9471 };
9472 
9473 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9474 /// an overloaded function (C++ [over.over]), where @p From is an
9475 /// expression with overloaded function type and @p ToType is the type
9476 /// we're trying to resolve to. For example:
9477 ///
9478 /// @code
9479 /// int f(double);
9480 /// int f(int);
9481 ///
9482 /// int (*pfd)(double) = f; // selects f(double)
9483 /// @endcode
9484 ///
9485 /// This routine returns the resulting FunctionDecl if it could be
9486 /// resolved, and NULL otherwise. When @p Complain is true, this
9487 /// routine will emit diagnostics if there is an error.
9488 FunctionDecl *
9489 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9490                                          QualType TargetType,
9491                                          bool Complain,
9492                                          DeclAccessPair &FoundResult,
9493                                          bool *pHadMultipleCandidates) {
9494   assert(AddressOfExpr->getType() == Context.OverloadTy);
9495 
9496   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9497                                      Complain);
9498   int NumMatches = Resolver.getNumMatches();
9499   FunctionDecl* Fn = 0;
9500   if (NumMatches == 0 && Complain) {
9501     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9502       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9503     else
9504       Resolver.ComplainNoMatchesFound();
9505   }
9506   else if (NumMatches > 1 && Complain)
9507     Resolver.ComplainMultipleMatchesFound();
9508   else if (NumMatches == 1) {
9509     Fn = Resolver.getMatchingFunctionDecl();
9510     assert(Fn);
9511     FoundResult = *Resolver.getMatchingFunctionAccessPair();
9512     if (Complain)
9513       CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9514   }
9515 
9516   if (pHadMultipleCandidates)
9517     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9518   return Fn;
9519 }
9520 
9521 /// \brief Given an expression that refers to an overloaded function, try to
9522 /// resolve that overloaded function expression down to a single function.
9523 ///
9524 /// This routine can only resolve template-ids that refer to a single function
9525 /// template, where that template-id refers to a single template whose template
9526 /// arguments are either provided by the template-id or have defaults,
9527 /// as described in C++0x [temp.arg.explicit]p3.
9528 FunctionDecl *
9529 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9530                                                   bool Complain,
9531                                                   DeclAccessPair *FoundResult) {
9532   // C++ [over.over]p1:
9533   //   [...] [Note: any redundant set of parentheses surrounding the
9534   //   overloaded function name is ignored (5.1). ]
9535   // C++ [over.over]p1:
9536   //   [...] The overloaded function name can be preceded by the &
9537   //   operator.
9538 
9539   // If we didn't actually find any template-ids, we're done.
9540   if (!ovl->hasExplicitTemplateArgs())
9541     return 0;
9542 
9543   TemplateArgumentListInfo ExplicitTemplateArgs;
9544   ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9545 
9546   // Look through all of the overloaded functions, searching for one
9547   // whose type matches exactly.
9548   FunctionDecl *Matched = 0;
9549   for (UnresolvedSetIterator I = ovl->decls_begin(),
9550          E = ovl->decls_end(); I != E; ++I) {
9551     // C++0x [temp.arg.explicit]p3:
9552     //   [...] In contexts where deduction is done and fails, or in contexts
9553     //   where deduction is not done, if a template argument list is
9554     //   specified and it, along with any default template arguments,
9555     //   identifies a single function template specialization, then the
9556     //   template-id is an lvalue for the function template specialization.
9557     FunctionTemplateDecl *FunctionTemplate
9558       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9559 
9560     // C++ [over.over]p2:
9561     //   If the name is a function template, template argument deduction is
9562     //   done (14.8.2.2), and if the argument deduction succeeds, the
9563     //   resulting template argument list is used to generate a single
9564     //   function template specialization, which is added to the set of
9565     //   overloaded functions considered.
9566     FunctionDecl *Specialization = 0;
9567     TemplateDeductionInfo Info(ovl->getNameLoc());
9568     if (TemplateDeductionResult Result
9569           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9570                                     Specialization, Info,
9571                                     /*InOverloadResolution=*/true)) {
9572       // FIXME: make a note of the failed deduction for diagnostics.
9573       (void)Result;
9574       continue;
9575     }
9576 
9577     assert(Specialization && "no specialization and no error?");
9578 
9579     // Multiple matches; we can't resolve to a single declaration.
9580     if (Matched) {
9581       if (Complain) {
9582         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9583           << ovl->getName();
9584         NoteAllOverloadCandidates(ovl);
9585       }
9586       return 0;
9587     }
9588 
9589     Matched = Specialization;
9590     if (FoundResult) *FoundResult = I.getPair();
9591   }
9592 
9593   if (Matched && getLangOpts().CPlusPlus1y &&
9594       Matched->getResultType()->isUndeducedType() &&
9595       DeduceReturnType(Matched, ovl->getExprLoc(), Complain))
9596     return 0;
9597 
9598   return Matched;
9599 }
9600 
9601 
9602 
9603 
9604 // Resolve and fix an overloaded expression that can be resolved
9605 // because it identifies a single function template specialization.
9606 //
9607 // Last three arguments should only be supplied if Complain = true
9608 //
9609 // Return true if it was logically possible to so resolve the
9610 // expression, regardless of whether or not it succeeded.  Always
9611 // returns true if 'complain' is set.
9612 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9613                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
9614                    bool complain, const SourceRange& OpRangeForComplaining,
9615                                            QualType DestTypeForComplaining,
9616                                             unsigned DiagIDForComplaining) {
9617   assert(SrcExpr.get()->getType() == Context.OverloadTy);
9618 
9619   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9620 
9621   DeclAccessPair found;
9622   ExprResult SingleFunctionExpression;
9623   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9624                            ovl.Expression, /*complain*/ false, &found)) {
9625     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9626       SrcExpr = ExprError();
9627       return true;
9628     }
9629 
9630     // It is only correct to resolve to an instance method if we're
9631     // resolving a form that's permitted to be a pointer to member.
9632     // Otherwise we'll end up making a bound member expression, which
9633     // is illegal in all the contexts we resolve like this.
9634     if (!ovl.HasFormOfMemberPointer &&
9635         isa<CXXMethodDecl>(fn) &&
9636         cast<CXXMethodDecl>(fn)->isInstance()) {
9637       if (!complain) return false;
9638 
9639       Diag(ovl.Expression->getExprLoc(),
9640            diag::err_bound_member_function)
9641         << 0 << ovl.Expression->getSourceRange();
9642 
9643       // TODO: I believe we only end up here if there's a mix of
9644       // static and non-static candidates (otherwise the expression
9645       // would have 'bound member' type, not 'overload' type).
9646       // Ideally we would note which candidate was chosen and why
9647       // the static candidates were rejected.
9648       SrcExpr = ExprError();
9649       return true;
9650     }
9651 
9652     // Fix the expression to refer to 'fn'.
9653     SingleFunctionExpression =
9654       Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9655 
9656     // If desired, do function-to-pointer decay.
9657     if (doFunctionPointerConverion) {
9658       SingleFunctionExpression =
9659         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9660       if (SingleFunctionExpression.isInvalid()) {
9661         SrcExpr = ExprError();
9662         return true;
9663       }
9664     }
9665   }
9666 
9667   if (!SingleFunctionExpression.isUsable()) {
9668     if (complain) {
9669       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9670         << ovl.Expression->getName()
9671         << DestTypeForComplaining
9672         << OpRangeForComplaining
9673         << ovl.Expression->getQualifierLoc().getSourceRange();
9674       NoteAllOverloadCandidates(SrcExpr.get());
9675 
9676       SrcExpr = ExprError();
9677       return true;
9678     }
9679 
9680     return false;
9681   }
9682 
9683   SrcExpr = SingleFunctionExpression;
9684   return true;
9685 }
9686 
9687 /// \brief Add a single candidate to the overload set.
9688 static void AddOverloadedCallCandidate(Sema &S,
9689                                        DeclAccessPair FoundDecl,
9690                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
9691                                        ArrayRef<Expr *> Args,
9692                                        OverloadCandidateSet &CandidateSet,
9693                                        bool PartialOverloading,
9694                                        bool KnownValid) {
9695   NamedDecl *Callee = FoundDecl.getDecl();
9696   if (isa<UsingShadowDecl>(Callee))
9697     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9698 
9699   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9700     if (ExplicitTemplateArgs) {
9701       assert(!KnownValid && "Explicit template arguments?");
9702       return;
9703     }
9704     S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9705                            PartialOverloading);
9706     return;
9707   }
9708 
9709   if (FunctionTemplateDecl *FuncTemplate
9710       = dyn_cast<FunctionTemplateDecl>(Callee)) {
9711     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9712                                    ExplicitTemplateArgs, Args, CandidateSet);
9713     return;
9714   }
9715 
9716   assert(!KnownValid && "unhandled case in overloaded call candidate");
9717 }
9718 
9719 /// \brief Add the overload candidates named by callee and/or found by argument
9720 /// dependent lookup to the given overload set.
9721 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9722                                        ArrayRef<Expr *> Args,
9723                                        OverloadCandidateSet &CandidateSet,
9724                                        bool PartialOverloading) {
9725 
9726 #ifndef NDEBUG
9727   // Verify that ArgumentDependentLookup is consistent with the rules
9728   // in C++0x [basic.lookup.argdep]p3:
9729   //
9730   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9731   //   and let Y be the lookup set produced by argument dependent
9732   //   lookup (defined as follows). If X contains
9733   //
9734   //     -- a declaration of a class member, or
9735   //
9736   //     -- a block-scope function declaration that is not a
9737   //        using-declaration, or
9738   //
9739   //     -- a declaration that is neither a function or a function
9740   //        template
9741   //
9742   //   then Y is empty.
9743 
9744   if (ULE->requiresADL()) {
9745     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9746            E = ULE->decls_end(); I != E; ++I) {
9747       assert(!(*I)->getDeclContext()->isRecord());
9748       assert(isa<UsingShadowDecl>(*I) ||
9749              !(*I)->getDeclContext()->isFunctionOrMethod());
9750       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9751     }
9752   }
9753 #endif
9754 
9755   // It would be nice to avoid this copy.
9756   TemplateArgumentListInfo TABuffer;
9757   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9758   if (ULE->hasExplicitTemplateArgs()) {
9759     ULE->copyTemplateArgumentsInto(TABuffer);
9760     ExplicitTemplateArgs = &TABuffer;
9761   }
9762 
9763   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9764          E = ULE->decls_end(); I != E; ++I)
9765     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9766                                CandidateSet, PartialOverloading,
9767                                /*KnownValid*/ true);
9768 
9769   if (ULE->requiresADL())
9770     AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9771                                          ULE->getExprLoc(),
9772                                          Args, ExplicitTemplateArgs,
9773                                          CandidateSet, PartialOverloading);
9774 }
9775 
9776 /// Determine whether a declaration with the specified name could be moved into
9777 /// a different namespace.
9778 static bool canBeDeclaredInNamespace(const DeclarationName &Name) {
9779   switch (Name.getCXXOverloadedOperator()) {
9780   case OO_New: case OO_Array_New:
9781   case OO_Delete: case OO_Array_Delete:
9782     return false;
9783 
9784   default:
9785     return true;
9786   }
9787 }
9788 
9789 /// Attempt to recover from an ill-formed use of a non-dependent name in a
9790 /// template, where the non-dependent name was declared after the template
9791 /// was defined. This is common in code written for a compilers which do not
9792 /// correctly implement two-stage name lookup.
9793 ///
9794 /// Returns true if a viable candidate was found and a diagnostic was issued.
9795 static bool
9796 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9797                        const CXXScopeSpec &SS, LookupResult &R,
9798                        TemplateArgumentListInfo *ExplicitTemplateArgs,
9799                        ArrayRef<Expr *> Args) {
9800   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9801     return false;
9802 
9803   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9804     if (DC->isTransparentContext())
9805       continue;
9806 
9807     SemaRef.LookupQualifiedName(R, DC);
9808 
9809     if (!R.empty()) {
9810       R.suppressDiagnostics();
9811 
9812       if (isa<CXXRecordDecl>(DC)) {
9813         // Don't diagnose names we find in classes; we get much better
9814         // diagnostics for these from DiagnoseEmptyLookup.
9815         R.clear();
9816         return false;
9817       }
9818 
9819       OverloadCandidateSet Candidates(FnLoc);
9820       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9821         AddOverloadedCallCandidate(SemaRef, I.getPair(),
9822                                    ExplicitTemplateArgs, Args,
9823                                    Candidates, false, /*KnownValid*/ false);
9824 
9825       OverloadCandidateSet::iterator Best;
9826       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9827         // No viable functions. Don't bother the user with notes for functions
9828         // which don't work and shouldn't be found anyway.
9829         R.clear();
9830         return false;
9831       }
9832 
9833       // Find the namespaces where ADL would have looked, and suggest
9834       // declaring the function there instead.
9835       Sema::AssociatedNamespaceSet AssociatedNamespaces;
9836       Sema::AssociatedClassSet AssociatedClasses;
9837       SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9838                                                  AssociatedNamespaces,
9839                                                  AssociatedClasses);
9840       Sema::AssociatedNamespaceSet SuggestedNamespaces;
9841       if (canBeDeclaredInNamespace(R.getLookupName())) {
9842         DeclContext *Std = SemaRef.getStdNamespace();
9843         for (Sema::AssociatedNamespaceSet::iterator
9844                it = AssociatedNamespaces.begin(),
9845                end = AssociatedNamespaces.end(); it != end; ++it) {
9846           // Never suggest declaring a function within namespace 'std'.
9847           if (Std && Std->Encloses(*it))
9848             continue;
9849 
9850           // Never suggest declaring a function within a namespace with a
9851           // reserved name, like __gnu_cxx.
9852           NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
9853           if (NS &&
9854               NS->getQualifiedNameAsString().find("__") != std::string::npos)
9855             continue;
9856 
9857           SuggestedNamespaces.insert(*it);
9858         }
9859       }
9860 
9861       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9862         << R.getLookupName();
9863       if (SuggestedNamespaces.empty()) {
9864         SemaRef.Diag(Best->Function->getLocation(),
9865                      diag::note_not_found_by_two_phase_lookup)
9866           << R.getLookupName() << 0;
9867       } else if (SuggestedNamespaces.size() == 1) {
9868         SemaRef.Diag(Best->Function->getLocation(),
9869                      diag::note_not_found_by_two_phase_lookup)
9870           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9871       } else {
9872         // FIXME: It would be useful to list the associated namespaces here,
9873         // but the diagnostics infrastructure doesn't provide a way to produce
9874         // a localized representation of a list of items.
9875         SemaRef.Diag(Best->Function->getLocation(),
9876                      diag::note_not_found_by_two_phase_lookup)
9877           << R.getLookupName() << 2;
9878       }
9879 
9880       // Try to recover by calling this function.
9881       return true;
9882     }
9883 
9884     R.clear();
9885   }
9886 
9887   return false;
9888 }
9889 
9890 /// Attempt to recover from ill-formed use of a non-dependent operator in a
9891 /// template, where the non-dependent operator was declared after the template
9892 /// was defined.
9893 ///
9894 /// Returns true if a viable candidate was found and a diagnostic was issued.
9895 static bool
9896 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
9897                                SourceLocation OpLoc,
9898                                ArrayRef<Expr *> Args) {
9899   DeclarationName OpName =
9900     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
9901   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
9902   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
9903                                 /*ExplicitTemplateArgs=*/0, Args);
9904 }
9905 
9906 namespace {
9907 // Callback to limit the allowed keywords and to only accept typo corrections
9908 // that are keywords or whose decls refer to functions (or template functions)
9909 // that accept the given number of arguments.
9910 class RecoveryCallCCC : public CorrectionCandidateCallback {
9911  public:
9912   RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs)
9913       : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) {
9914     WantTypeSpecifiers = SemaRef.getLangOpts().CPlusPlus;
9915     WantRemainingKeywords = false;
9916   }
9917 
9918   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9919     if (!candidate.getCorrectionDecl())
9920       return candidate.isKeyword();
9921 
9922     for (TypoCorrection::const_decl_iterator DI = candidate.begin(),
9923            DIEnd = candidate.end(); DI != DIEnd; ++DI) {
9924       FunctionDecl *FD = 0;
9925       NamedDecl *ND = (*DI)->getUnderlyingDecl();
9926       if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9927         FD = FTD->getTemplatedDecl();
9928       if (!HasExplicitTemplateArgs && !FD) {
9929         if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) {
9930           // If the Decl is neither a function nor a template function,
9931           // determine if it is a pointer or reference to a function. If so,
9932           // check against the number of arguments expected for the pointee.
9933           QualType ValType = cast<ValueDecl>(ND)->getType();
9934           if (ValType->isAnyPointerType() || ValType->isReferenceType())
9935             ValType = ValType->getPointeeType();
9936           if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
9937             if (FPT->getNumArgs() == NumArgs)
9938               return true;
9939         }
9940       }
9941       if (FD && FD->getNumParams() >= NumArgs &&
9942           FD->getMinRequiredArguments() <= NumArgs)
9943         return true;
9944     }
9945     return false;
9946   }
9947 
9948  private:
9949   unsigned NumArgs;
9950   bool HasExplicitTemplateArgs;
9951 };
9952 
9953 // Callback that effectively disabled typo correction
9954 class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
9955  public:
9956   NoTypoCorrectionCCC() {
9957     WantTypeSpecifiers = false;
9958     WantExpressionKeywords = false;
9959     WantCXXNamedCasts = false;
9960     WantRemainingKeywords = false;
9961   }
9962 
9963   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9964     return false;
9965   }
9966 };
9967 
9968 class BuildRecoveryCallExprRAII {
9969   Sema &SemaRef;
9970 public:
9971   BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
9972     assert(SemaRef.IsBuildingRecoveryCallExpr == false);
9973     SemaRef.IsBuildingRecoveryCallExpr = true;
9974   }
9975 
9976   ~BuildRecoveryCallExprRAII() {
9977     SemaRef.IsBuildingRecoveryCallExpr = false;
9978   }
9979 };
9980 
9981 }
9982 
9983 /// Attempts to recover from a call where no functions were found.
9984 ///
9985 /// Returns true if new candidates were found.
9986 static ExprResult
9987 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9988                       UnresolvedLookupExpr *ULE,
9989                       SourceLocation LParenLoc,
9990                       llvm::MutableArrayRef<Expr *> Args,
9991                       SourceLocation RParenLoc,
9992                       bool EmptyLookup, bool AllowTypoCorrection) {
9993   // Do not try to recover if it is already building a recovery call.
9994   // This stops infinite loops for template instantiations like
9995   //
9996   // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
9997   // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
9998   //
9999   if (SemaRef.IsBuildingRecoveryCallExpr)
10000     return ExprError();
10001   BuildRecoveryCallExprRAII RCE(SemaRef);
10002 
10003   CXXScopeSpec SS;
10004   SS.Adopt(ULE->getQualifierLoc());
10005   SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
10006 
10007   TemplateArgumentListInfo TABuffer;
10008   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
10009   if (ULE->hasExplicitTemplateArgs()) {
10010     ULE->copyTemplateArgumentsInto(TABuffer);
10011     ExplicitTemplateArgs = &TABuffer;
10012   }
10013 
10014   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
10015                  Sema::LookupOrdinaryName);
10016   RecoveryCallCCC Validator(SemaRef, Args.size(), ExplicitTemplateArgs != 0);
10017   NoTypoCorrectionCCC RejectAll;
10018   CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
10019       (CorrectionCandidateCallback*)&Validator :
10020       (CorrectionCandidateCallback*)&RejectAll;
10021   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
10022                               ExplicitTemplateArgs, Args) &&
10023       (!EmptyLookup ||
10024        SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
10025                                    ExplicitTemplateArgs, Args)))
10026     return ExprError();
10027 
10028   assert(!R.empty() && "lookup results empty despite recovery");
10029 
10030   // Build an implicit member call if appropriate.  Just drop the
10031   // casts and such from the call, we don't really care.
10032   ExprResult NewFn = ExprError();
10033   if ((*R.begin())->isCXXClassMember())
10034     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
10035                                                     R, ExplicitTemplateArgs);
10036   else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
10037     NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
10038                                         ExplicitTemplateArgs);
10039   else
10040     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
10041 
10042   if (NewFn.isInvalid())
10043     return ExprError();
10044 
10045   // This shouldn't cause an infinite loop because we're giving it
10046   // an expression with viable lookup results, which should never
10047   // end up here.
10048   return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
10049                                MultiExprArg(Args.data(), Args.size()),
10050                                RParenLoc);
10051 }
10052 
10053 /// \brief Constructs and populates an OverloadedCandidateSet from
10054 /// the given function.
10055 /// \returns true when an the ExprResult output parameter has been set.
10056 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
10057                                   UnresolvedLookupExpr *ULE,
10058                                   MultiExprArg Args,
10059                                   SourceLocation RParenLoc,
10060                                   OverloadCandidateSet *CandidateSet,
10061                                   ExprResult *Result) {
10062 #ifndef NDEBUG
10063   if (ULE->requiresADL()) {
10064     // To do ADL, we must have found an unqualified name.
10065     assert(!ULE->getQualifier() && "qualified name with ADL");
10066 
10067     // We don't perform ADL for implicit declarations of builtins.
10068     // Verify that this was correctly set up.
10069     FunctionDecl *F;
10070     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
10071         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
10072         F->getBuiltinID() && F->isImplicit())
10073       llvm_unreachable("performing ADL for builtin");
10074 
10075     // We don't perform ADL in C.
10076     assert(getLangOpts().CPlusPlus && "ADL enabled in C");
10077   }
10078 #endif
10079 
10080   UnbridgedCastsSet UnbridgedCasts;
10081   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) {
10082     *Result = ExprError();
10083     return true;
10084   }
10085 
10086   // Add the functions denoted by the callee to the set of candidate
10087   // functions, including those from argument-dependent lookup.
10088   AddOverloadedCallCandidates(ULE, Args, *CandidateSet);
10089 
10090   // If we found nothing, try to recover.
10091   // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
10092   // out if it fails.
10093   if (CandidateSet->empty()) {
10094     // In Microsoft mode, if we are inside a template class member function then
10095     // create a type dependent CallExpr. The goal is to postpone name lookup
10096     // to instantiation time to be able to search into type dependent base
10097     // classes.
10098     if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
10099         (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
10100       CallExpr *CE = new (Context) CallExpr(Context, Fn, Args,
10101                                             Context.DependentTy, VK_RValue,
10102                                             RParenLoc);
10103       CE->setTypeDependent(true);
10104       *Result = Owned(CE);
10105       return true;
10106     }
10107     return false;
10108   }
10109 
10110   UnbridgedCasts.restore();
10111   return false;
10112 }
10113 
10114 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
10115 /// the completed call expression. If overload resolution fails, emits
10116 /// diagnostics and returns ExprError()
10117 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
10118                                            UnresolvedLookupExpr *ULE,
10119                                            SourceLocation LParenLoc,
10120                                            MultiExprArg Args,
10121                                            SourceLocation RParenLoc,
10122                                            Expr *ExecConfig,
10123                                            OverloadCandidateSet *CandidateSet,
10124                                            OverloadCandidateSet::iterator *Best,
10125                                            OverloadingResult OverloadResult,
10126                                            bool AllowTypoCorrection) {
10127   if (CandidateSet->empty())
10128     return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, Args,
10129                                  RParenLoc, /*EmptyLookup=*/true,
10130                                  AllowTypoCorrection);
10131 
10132   switch (OverloadResult) {
10133   case OR_Success: {
10134     FunctionDecl *FDecl = (*Best)->Function;
10135     SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
10136     if (SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()))
10137       return ExprError();
10138     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10139     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10140                                          ExecConfig);
10141   }
10142 
10143   case OR_No_Viable_Function: {
10144     // Try to recover by looking for viable functions which the user might
10145     // have meant to call.
10146     ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
10147                                                 Args, RParenLoc,
10148                                                 /*EmptyLookup=*/false,
10149                                                 AllowTypoCorrection);
10150     if (!Recovery.isInvalid())
10151       return Recovery;
10152 
10153     SemaRef.Diag(Fn->getLocStart(),
10154          diag::err_ovl_no_viable_function_in_call)
10155       << ULE->getName() << Fn->getSourceRange();
10156     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10157     break;
10158   }
10159 
10160   case OR_Ambiguous:
10161     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
10162       << ULE->getName() << Fn->getSourceRange();
10163     CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates, Args);
10164     break;
10165 
10166   case OR_Deleted: {
10167     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
10168       << (*Best)->Function->isDeleted()
10169       << ULE->getName()
10170       << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
10171       << Fn->getSourceRange();
10172     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10173 
10174     // We emitted an error for the unvailable/deleted function call but keep
10175     // the call in the AST.
10176     FunctionDecl *FDecl = (*Best)->Function;
10177     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10178     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10179                                          ExecConfig);
10180   }
10181   }
10182 
10183   // Overload resolution failed.
10184   return ExprError();
10185 }
10186 
10187 /// BuildOverloadedCallExpr - Given the call expression that calls Fn
10188 /// (which eventually refers to the declaration Func) and the call
10189 /// arguments Args/NumArgs, attempt to resolve the function call down
10190 /// to a specific function. If overload resolution succeeds, returns
10191 /// the call expression produced by overload resolution.
10192 /// Otherwise, emits diagnostics and returns ExprError.
10193 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
10194                                          UnresolvedLookupExpr *ULE,
10195                                          SourceLocation LParenLoc,
10196                                          MultiExprArg Args,
10197                                          SourceLocation RParenLoc,
10198                                          Expr *ExecConfig,
10199                                          bool AllowTypoCorrection) {
10200   OverloadCandidateSet CandidateSet(Fn->getExprLoc());
10201   ExprResult result;
10202 
10203   if (buildOverloadedCallSet(S, Fn, ULE, Args, LParenLoc, &CandidateSet,
10204                              &result))
10205     return result;
10206 
10207   OverloadCandidateSet::iterator Best;
10208   OverloadingResult OverloadResult =
10209       CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
10210 
10211   return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args,
10212                                   RParenLoc, ExecConfig, &CandidateSet,
10213                                   &Best, OverloadResult,
10214                                   AllowTypoCorrection);
10215 }
10216 
10217 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
10218   return Functions.size() > 1 ||
10219     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
10220 }
10221 
10222 /// \brief Create a unary operation that may resolve to an overloaded
10223 /// operator.
10224 ///
10225 /// \param OpLoc The location of the operator itself (e.g., '*').
10226 ///
10227 /// \param OpcIn The UnaryOperator::Opcode that describes this
10228 /// operator.
10229 ///
10230 /// \param Fns The set of non-member functions that will be
10231 /// considered by overload resolution. The caller needs to build this
10232 /// set based on the context using, e.g.,
10233 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10234 /// set should not contain any member functions; those will be added
10235 /// by CreateOverloadedUnaryOp().
10236 ///
10237 /// \param Input The input argument.
10238 ExprResult
10239 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
10240                               const UnresolvedSetImpl &Fns,
10241                               Expr *Input) {
10242   UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
10243 
10244   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
10245   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
10246   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10247   // TODO: provide better source location info.
10248   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10249 
10250   if (checkPlaceholderForOverload(*this, Input))
10251     return ExprError();
10252 
10253   Expr *Args[2] = { Input, 0 };
10254   unsigned NumArgs = 1;
10255 
10256   // For post-increment and post-decrement, add the implicit '0' as
10257   // the second argument, so that we know this is a post-increment or
10258   // post-decrement.
10259   if (Opc == UO_PostInc || Opc == UO_PostDec) {
10260     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
10261     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
10262                                      SourceLocation());
10263     NumArgs = 2;
10264   }
10265 
10266   ArrayRef<Expr *> ArgsArray(Args, NumArgs);
10267 
10268   if (Input->isTypeDependent()) {
10269     if (Fns.empty())
10270       return Owned(new (Context) UnaryOperator(Input,
10271                                                Opc,
10272                                                Context.DependentTy,
10273                                                VK_RValue, OK_Ordinary,
10274                                                OpLoc));
10275 
10276     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10277     UnresolvedLookupExpr *Fn
10278       = UnresolvedLookupExpr::Create(Context, NamingClass,
10279                                      NestedNameSpecifierLoc(), OpNameInfo,
10280                                      /*ADL*/ true, IsOverloaded(Fns),
10281                                      Fns.begin(), Fns.end());
10282     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, ArgsArray,
10283                                                    Context.DependentTy,
10284                                                    VK_RValue,
10285                                                    OpLoc, false));
10286   }
10287 
10288   // Build an empty overload set.
10289   OverloadCandidateSet CandidateSet(OpLoc);
10290 
10291   // Add the candidates from the given function set.
10292   AddFunctionCandidates(Fns, ArgsArray, CandidateSet, false);
10293 
10294   // Add operator candidates that are member functions.
10295   AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10296 
10297   // Add candidates from ADL.
10298   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, OpLoc,
10299                                        ArgsArray, /*ExplicitTemplateArgs*/ 0,
10300                                        CandidateSet);
10301 
10302   // Add builtin operator candidates.
10303   AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10304 
10305   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10306 
10307   // Perform overload resolution.
10308   OverloadCandidateSet::iterator Best;
10309   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10310   case OR_Success: {
10311     // We found a built-in operator or an overloaded operator.
10312     FunctionDecl *FnDecl = Best->Function;
10313 
10314     if (FnDecl) {
10315       // We matched an overloaded operator. Build a call to that
10316       // operator.
10317 
10318       // Convert the arguments.
10319       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10320         CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
10321 
10322         ExprResult InputRes =
10323           PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
10324                                               Best->FoundDecl, Method);
10325         if (InputRes.isInvalid())
10326           return ExprError();
10327         Input = InputRes.take();
10328       } else {
10329         // Convert the arguments.
10330         ExprResult InputInit
10331           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10332                                                       Context,
10333                                                       FnDecl->getParamDecl(0)),
10334                                       SourceLocation(),
10335                                       Input);
10336         if (InputInit.isInvalid())
10337           return ExprError();
10338         Input = InputInit.take();
10339       }
10340 
10341       // Determine the result type.
10342       QualType ResultTy = FnDecl->getResultType();
10343       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10344       ResultTy = ResultTy.getNonLValueExprType(Context);
10345 
10346       // Build the actual expression node.
10347       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
10348                                                 HadMultipleCandidates, OpLoc);
10349       if (FnExpr.isInvalid())
10350         return ExprError();
10351 
10352       Args[0] = Input;
10353       CallExpr *TheCall =
10354         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), ArgsArray,
10355                                           ResultTy, VK, OpLoc, false);
10356 
10357       if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10358                               FnDecl))
10359         return ExprError();
10360 
10361       return MaybeBindToTemporary(TheCall);
10362     } else {
10363       // We matched a built-in operator. Convert the arguments, then
10364       // break out so that we will build the appropriate built-in
10365       // operator node.
10366       ExprResult InputRes =
10367         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10368                                   Best->Conversions[0], AA_Passing);
10369       if (InputRes.isInvalid())
10370         return ExprError();
10371       Input = InputRes.take();
10372       break;
10373     }
10374   }
10375 
10376   case OR_No_Viable_Function:
10377     // This is an erroneous use of an operator which can be overloaded by
10378     // a non-member function. Check for non-member operators which were
10379     // defined too late to be candidates.
10380     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, ArgsArray))
10381       // FIXME: Recover by calling the found function.
10382       return ExprError();
10383 
10384     // No viable function; fall through to handling this as a
10385     // built-in operator, which will produce an error message for us.
10386     break;
10387 
10388   case OR_Ambiguous:
10389     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10390         << UnaryOperator::getOpcodeStr(Opc)
10391         << Input->getType()
10392         << Input->getSourceRange();
10393     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, ArgsArray,
10394                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10395     return ExprError();
10396 
10397   case OR_Deleted:
10398     Diag(OpLoc, diag::err_ovl_deleted_oper)
10399       << Best->Function->isDeleted()
10400       << UnaryOperator::getOpcodeStr(Opc)
10401       << getDeletedOrUnavailableSuffix(Best->Function)
10402       << Input->getSourceRange();
10403     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, ArgsArray,
10404                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10405     return ExprError();
10406   }
10407 
10408   // Either we found no viable overloaded operator or we matched a
10409   // built-in operator. In either case, fall through to trying to
10410   // build a built-in operation.
10411   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10412 }
10413 
10414 /// \brief Create a binary operation that may resolve to an overloaded
10415 /// operator.
10416 ///
10417 /// \param OpLoc The location of the operator itself (e.g., '+').
10418 ///
10419 /// \param OpcIn The BinaryOperator::Opcode that describes this
10420 /// operator.
10421 ///
10422 /// \param Fns The set of non-member functions that will be
10423 /// considered by overload resolution. The caller needs to build this
10424 /// set based on the context using, e.g.,
10425 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10426 /// set should not contain any member functions; those will be added
10427 /// by CreateOverloadedBinOp().
10428 ///
10429 /// \param LHS Left-hand argument.
10430 /// \param RHS Right-hand argument.
10431 ExprResult
10432 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10433                             unsigned OpcIn,
10434                             const UnresolvedSetImpl &Fns,
10435                             Expr *LHS, Expr *RHS) {
10436   Expr *Args[2] = { LHS, RHS };
10437   LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10438 
10439   BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10440   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10441   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10442 
10443   // If either side is type-dependent, create an appropriate dependent
10444   // expression.
10445   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10446     if (Fns.empty()) {
10447       // If there are no functions to store, just build a dependent
10448       // BinaryOperator or CompoundAssignment.
10449       if (Opc <= BO_Assign || Opc > BO_OrAssign)
10450         return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10451                                                   Context.DependentTy,
10452                                                   VK_RValue, OK_Ordinary,
10453                                                   OpLoc,
10454                                                   FPFeatures.fp_contract));
10455 
10456       return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10457                                                         Context.DependentTy,
10458                                                         VK_LValue,
10459                                                         OK_Ordinary,
10460                                                         Context.DependentTy,
10461                                                         Context.DependentTy,
10462                                                         OpLoc,
10463                                                         FPFeatures.fp_contract));
10464     }
10465 
10466     // FIXME: save results of ADL from here?
10467     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10468     // TODO: provide better source location info in DNLoc component.
10469     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10470     UnresolvedLookupExpr *Fn
10471       = UnresolvedLookupExpr::Create(Context, NamingClass,
10472                                      NestedNameSpecifierLoc(), OpNameInfo,
10473                                      /*ADL*/ true, IsOverloaded(Fns),
10474                                      Fns.begin(), Fns.end());
10475     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
10476                                                 Context.DependentTy, VK_RValue,
10477                                                 OpLoc, FPFeatures.fp_contract));
10478   }
10479 
10480   // Always do placeholder-like conversions on the RHS.
10481   if (checkPlaceholderForOverload(*this, Args[1]))
10482     return ExprError();
10483 
10484   // Do placeholder-like conversion on the LHS; note that we should
10485   // not get here with a PseudoObject LHS.
10486   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10487   if (checkPlaceholderForOverload(*this, Args[0]))
10488     return ExprError();
10489 
10490   // If this is the assignment operator, we only perform overload resolution
10491   // if the left-hand side is a class or enumeration type. This is actually
10492   // a hack. The standard requires that we do overload resolution between the
10493   // various built-in candidates, but as DR507 points out, this can lead to
10494   // problems. So we do it this way, which pretty much follows what GCC does.
10495   // Note that we go the traditional code path for compound assignment forms.
10496   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10497     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10498 
10499   // If this is the .* operator, which is not overloadable, just
10500   // create a built-in binary operator.
10501   if (Opc == BO_PtrMemD)
10502     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10503 
10504   // Build an empty overload set.
10505   OverloadCandidateSet CandidateSet(OpLoc);
10506 
10507   // Add the candidates from the given function set.
10508   AddFunctionCandidates(Fns, Args, CandidateSet, false);
10509 
10510   // Add operator candidates that are member functions.
10511   AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10512 
10513   // Add candidates from ADL.
10514   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10515                                        OpLoc, Args,
10516                                        /*ExplicitTemplateArgs*/ 0,
10517                                        CandidateSet);
10518 
10519   // Add builtin operator candidates.
10520   AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10521 
10522   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10523 
10524   // Perform overload resolution.
10525   OverloadCandidateSet::iterator Best;
10526   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10527     case OR_Success: {
10528       // We found a built-in operator or an overloaded operator.
10529       FunctionDecl *FnDecl = Best->Function;
10530 
10531       if (FnDecl) {
10532         // We matched an overloaded operator. Build a call to that
10533         // operator.
10534 
10535         // Convert the arguments.
10536         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10537           // Best->Access is only meaningful for class members.
10538           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10539 
10540           ExprResult Arg1 =
10541             PerformCopyInitialization(
10542               InitializedEntity::InitializeParameter(Context,
10543                                                      FnDecl->getParamDecl(0)),
10544               SourceLocation(), Owned(Args[1]));
10545           if (Arg1.isInvalid())
10546             return ExprError();
10547 
10548           ExprResult Arg0 =
10549             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10550                                                 Best->FoundDecl, Method);
10551           if (Arg0.isInvalid())
10552             return ExprError();
10553           Args[0] = Arg0.takeAs<Expr>();
10554           Args[1] = RHS = Arg1.takeAs<Expr>();
10555         } else {
10556           // Convert the arguments.
10557           ExprResult Arg0 = PerformCopyInitialization(
10558             InitializedEntity::InitializeParameter(Context,
10559                                                    FnDecl->getParamDecl(0)),
10560             SourceLocation(), Owned(Args[0]));
10561           if (Arg0.isInvalid())
10562             return ExprError();
10563 
10564           ExprResult Arg1 =
10565             PerformCopyInitialization(
10566               InitializedEntity::InitializeParameter(Context,
10567                                                      FnDecl->getParamDecl(1)),
10568               SourceLocation(), Owned(Args[1]));
10569           if (Arg1.isInvalid())
10570             return ExprError();
10571           Args[0] = LHS = Arg0.takeAs<Expr>();
10572           Args[1] = RHS = Arg1.takeAs<Expr>();
10573         }
10574 
10575         // Determine the result type.
10576         QualType ResultTy = FnDecl->getResultType();
10577         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10578         ResultTy = ResultTy.getNonLValueExprType(Context);
10579 
10580         // Build the actual expression node.
10581         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10582                                                   Best->FoundDecl,
10583                                                   HadMultipleCandidates, OpLoc);
10584         if (FnExpr.isInvalid())
10585           return ExprError();
10586 
10587         CXXOperatorCallExpr *TheCall =
10588           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10589                                             Args, ResultTy, VK, OpLoc,
10590                                             FPFeatures.fp_contract);
10591 
10592         if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10593                                 FnDecl))
10594           return ExprError();
10595 
10596         ArrayRef<const Expr *> ArgsArray(Args, 2);
10597         // Cut off the implicit 'this'.
10598         if (isa<CXXMethodDecl>(FnDecl))
10599           ArgsArray = ArgsArray.slice(1);
10600         checkCall(FnDecl, ArgsArray, 0, isa<CXXMethodDecl>(FnDecl), OpLoc,
10601                   TheCall->getSourceRange(), VariadicDoesNotApply);
10602 
10603         return MaybeBindToTemporary(TheCall);
10604       } else {
10605         // We matched a built-in operator. Convert the arguments, then
10606         // break out so that we will build the appropriate built-in
10607         // operator node.
10608         ExprResult ArgsRes0 =
10609           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10610                                     Best->Conversions[0], AA_Passing);
10611         if (ArgsRes0.isInvalid())
10612           return ExprError();
10613         Args[0] = ArgsRes0.take();
10614 
10615         ExprResult ArgsRes1 =
10616           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10617                                     Best->Conversions[1], AA_Passing);
10618         if (ArgsRes1.isInvalid())
10619           return ExprError();
10620         Args[1] = ArgsRes1.take();
10621         break;
10622       }
10623     }
10624 
10625     case OR_No_Viable_Function: {
10626       // C++ [over.match.oper]p9:
10627       //   If the operator is the operator , [...] and there are no
10628       //   viable functions, then the operator is assumed to be the
10629       //   built-in operator and interpreted according to clause 5.
10630       if (Opc == BO_Comma)
10631         break;
10632 
10633       // For class as left operand for assignment or compound assigment
10634       // operator do not fall through to handling in built-in, but report that
10635       // no overloaded assignment operator found
10636       ExprResult Result = ExprError();
10637       if (Args[0]->getType()->isRecordType() &&
10638           Opc >= BO_Assign && Opc <= BO_OrAssign) {
10639         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10640              << BinaryOperator::getOpcodeStr(Opc)
10641              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10642       } else {
10643         // This is an erroneous use of an operator which can be overloaded by
10644         // a non-member function. Check for non-member operators which were
10645         // defined too late to be candidates.
10646         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10647           // FIXME: Recover by calling the found function.
10648           return ExprError();
10649 
10650         // No viable function; try to create a built-in operation, which will
10651         // produce an error. Then, show the non-viable candidates.
10652         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10653       }
10654       assert(Result.isInvalid() &&
10655              "C++ binary operator overloading is missing candidates!");
10656       if (Result.isInvalid())
10657         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10658                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
10659       return Result;
10660     }
10661 
10662     case OR_Ambiguous:
10663       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10664           << BinaryOperator::getOpcodeStr(Opc)
10665           << Args[0]->getType() << Args[1]->getType()
10666           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10667       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10668                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10669       return ExprError();
10670 
10671     case OR_Deleted:
10672       if (isImplicitlyDeleted(Best->Function)) {
10673         CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10674         Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10675           << Context.getRecordType(Method->getParent())
10676           << getSpecialMember(Method);
10677 
10678         // The user probably meant to call this special member. Just
10679         // explain why it's deleted.
10680         NoteDeletedFunction(Method);
10681         return ExprError();
10682       } else {
10683         Diag(OpLoc, diag::err_ovl_deleted_oper)
10684           << Best->Function->isDeleted()
10685           << BinaryOperator::getOpcodeStr(Opc)
10686           << getDeletedOrUnavailableSuffix(Best->Function)
10687           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10688       }
10689       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10690                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10691       return ExprError();
10692   }
10693 
10694   // We matched a built-in operator; build it.
10695   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10696 }
10697 
10698 ExprResult
10699 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10700                                          SourceLocation RLoc,
10701                                          Expr *Base, Expr *Idx) {
10702   Expr *Args[2] = { Base, Idx };
10703   DeclarationName OpName =
10704       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10705 
10706   // If either side is type-dependent, create an appropriate dependent
10707   // expression.
10708   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10709 
10710     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10711     // CHECKME: no 'operator' keyword?
10712     DeclarationNameInfo OpNameInfo(OpName, LLoc);
10713     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10714     UnresolvedLookupExpr *Fn
10715       = UnresolvedLookupExpr::Create(Context, NamingClass,
10716                                      NestedNameSpecifierLoc(), OpNameInfo,
10717                                      /*ADL*/ true, /*Overloaded*/ false,
10718                                      UnresolvedSetIterator(),
10719                                      UnresolvedSetIterator());
10720     // Can't add any actual overloads yet
10721 
10722     return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10723                                                    Args,
10724                                                    Context.DependentTy,
10725                                                    VK_RValue,
10726                                                    RLoc, false));
10727   }
10728 
10729   // Handle placeholders on both operands.
10730   if (checkPlaceholderForOverload(*this, Args[0]))
10731     return ExprError();
10732   if (checkPlaceholderForOverload(*this, Args[1]))
10733     return ExprError();
10734 
10735   // Build an empty overload set.
10736   OverloadCandidateSet CandidateSet(LLoc);
10737 
10738   // Subscript can only be overloaded as a member function.
10739 
10740   // Add operator candidates that are member functions.
10741   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10742 
10743   // Add builtin operator candidates.
10744   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10745 
10746   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10747 
10748   // Perform overload resolution.
10749   OverloadCandidateSet::iterator Best;
10750   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10751     case OR_Success: {
10752       // We found a built-in operator or an overloaded operator.
10753       FunctionDecl *FnDecl = Best->Function;
10754 
10755       if (FnDecl) {
10756         // We matched an overloaded operator. Build a call to that
10757         // operator.
10758 
10759         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10760 
10761         // Convert the arguments.
10762         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10763         ExprResult Arg0 =
10764           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10765                                               Best->FoundDecl, Method);
10766         if (Arg0.isInvalid())
10767           return ExprError();
10768         Args[0] = Arg0.take();
10769 
10770         // Convert the arguments.
10771         ExprResult InputInit
10772           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10773                                                       Context,
10774                                                       FnDecl->getParamDecl(0)),
10775                                       SourceLocation(),
10776                                       Owned(Args[1]));
10777         if (InputInit.isInvalid())
10778           return ExprError();
10779 
10780         Args[1] = InputInit.takeAs<Expr>();
10781 
10782         // Determine the result type
10783         QualType ResultTy = FnDecl->getResultType();
10784         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10785         ResultTy = ResultTy.getNonLValueExprType(Context);
10786 
10787         // Build the actual expression node.
10788         DeclarationNameInfo OpLocInfo(OpName, LLoc);
10789         OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10790         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10791                                                   Best->FoundDecl,
10792                                                   HadMultipleCandidates,
10793                                                   OpLocInfo.getLoc(),
10794                                                   OpLocInfo.getInfo());
10795         if (FnExpr.isInvalid())
10796           return ExprError();
10797 
10798         CXXOperatorCallExpr *TheCall =
10799           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10800                                             FnExpr.take(), Args,
10801                                             ResultTy, VK, RLoc,
10802                                             false);
10803 
10804         if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10805                                 FnDecl))
10806           return ExprError();
10807 
10808         return MaybeBindToTemporary(TheCall);
10809       } else {
10810         // We matched a built-in operator. Convert the arguments, then
10811         // break out so that we will build the appropriate built-in
10812         // operator node.
10813         ExprResult ArgsRes0 =
10814           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10815                                     Best->Conversions[0], AA_Passing);
10816         if (ArgsRes0.isInvalid())
10817           return ExprError();
10818         Args[0] = ArgsRes0.take();
10819 
10820         ExprResult ArgsRes1 =
10821           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10822                                     Best->Conversions[1], AA_Passing);
10823         if (ArgsRes1.isInvalid())
10824           return ExprError();
10825         Args[1] = ArgsRes1.take();
10826 
10827         break;
10828       }
10829     }
10830 
10831     case OR_No_Viable_Function: {
10832       if (CandidateSet.empty())
10833         Diag(LLoc, diag::err_ovl_no_oper)
10834           << Args[0]->getType() << /*subscript*/ 0
10835           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10836       else
10837         Diag(LLoc, diag::err_ovl_no_viable_subscript)
10838           << Args[0]->getType()
10839           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10840       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10841                                   "[]", LLoc);
10842       return ExprError();
10843     }
10844 
10845     case OR_Ambiguous:
10846       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10847           << "[]"
10848           << Args[0]->getType() << Args[1]->getType()
10849           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10850       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10851                                   "[]", LLoc);
10852       return ExprError();
10853 
10854     case OR_Deleted:
10855       Diag(LLoc, diag::err_ovl_deleted_oper)
10856         << Best->Function->isDeleted() << "[]"
10857         << getDeletedOrUnavailableSuffix(Best->Function)
10858         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10859       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10860                                   "[]", LLoc);
10861       return ExprError();
10862     }
10863 
10864   // We matched a built-in operator; build it.
10865   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10866 }
10867 
10868 /// BuildCallToMemberFunction - Build a call to a member
10869 /// function. MemExpr is the expression that refers to the member
10870 /// function (and includes the object parameter), Args/NumArgs are the
10871 /// arguments to the function call (not including the object
10872 /// parameter). The caller needs to validate that the member
10873 /// expression refers to a non-static member function or an overloaded
10874 /// member function.
10875 ExprResult
10876 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10877                                 SourceLocation LParenLoc,
10878                                 MultiExprArg Args,
10879                                 SourceLocation RParenLoc) {
10880   assert(MemExprE->getType() == Context.BoundMemberTy ||
10881          MemExprE->getType() == Context.OverloadTy);
10882 
10883   // Dig out the member expression. This holds both the object
10884   // argument and the member function we're referring to.
10885   Expr *NakedMemExpr = MemExprE->IgnoreParens();
10886 
10887   // Determine whether this is a call to a pointer-to-member function.
10888   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10889     assert(op->getType() == Context.BoundMemberTy);
10890     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10891 
10892     QualType fnType =
10893       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10894 
10895     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10896     QualType resultType = proto->getCallResultType(Context);
10897     ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10898 
10899     // Check that the object type isn't more qualified than the
10900     // member function we're calling.
10901     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10902 
10903     QualType objectType = op->getLHS()->getType();
10904     if (op->getOpcode() == BO_PtrMemI)
10905       objectType = objectType->castAs<PointerType>()->getPointeeType();
10906     Qualifiers objectQuals = objectType.getQualifiers();
10907 
10908     Qualifiers difference = objectQuals - funcQuals;
10909     difference.removeObjCGCAttr();
10910     difference.removeAddressSpace();
10911     if (difference) {
10912       std::string qualsString = difference.getAsString();
10913       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10914         << fnType.getUnqualifiedType()
10915         << qualsString
10916         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10917     }
10918 
10919     CXXMemberCallExpr *call
10920       = new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
10921                                         resultType, valueKind, RParenLoc);
10922 
10923     if (CheckCallReturnType(proto->getResultType(),
10924                             op->getRHS()->getLocStart(),
10925                             call, 0))
10926       return ExprError();
10927 
10928     if (ConvertArgumentsForCall(call, op, 0, proto, Args, RParenLoc))
10929       return ExprError();
10930 
10931     return MaybeBindToTemporary(call);
10932   }
10933 
10934   UnbridgedCastsSet UnbridgedCasts;
10935   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
10936     return ExprError();
10937 
10938   MemberExpr *MemExpr;
10939   CXXMethodDecl *Method = 0;
10940   DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
10941   NestedNameSpecifier *Qualifier = 0;
10942   if (isa<MemberExpr>(NakedMemExpr)) {
10943     MemExpr = cast<MemberExpr>(NakedMemExpr);
10944     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
10945     FoundDecl = MemExpr->getFoundDecl();
10946     Qualifier = MemExpr->getQualifier();
10947     UnbridgedCasts.restore();
10948   } else {
10949     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
10950     Qualifier = UnresExpr->getQualifier();
10951 
10952     QualType ObjectType = UnresExpr->getBaseType();
10953     Expr::Classification ObjectClassification
10954       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
10955                             : UnresExpr->getBase()->Classify(Context);
10956 
10957     // Add overload candidates
10958     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
10959 
10960     // FIXME: avoid copy.
10961     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10962     if (UnresExpr->hasExplicitTemplateArgs()) {
10963       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10964       TemplateArgs = &TemplateArgsBuffer;
10965     }
10966 
10967     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
10968            E = UnresExpr->decls_end(); I != E; ++I) {
10969 
10970       NamedDecl *Func = *I;
10971       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
10972       if (isa<UsingShadowDecl>(Func))
10973         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
10974 
10975 
10976       // Microsoft supports direct constructor calls.
10977       if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
10978         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
10979                              Args, CandidateSet);
10980       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
10981         // If explicit template arguments were provided, we can't call a
10982         // non-template member function.
10983         if (TemplateArgs)
10984           continue;
10985 
10986         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
10987                            ObjectClassification, Args, CandidateSet,
10988                            /*SuppressUserConversions=*/false);
10989       } else {
10990         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
10991                                    I.getPair(), ActingDC, TemplateArgs,
10992                                    ObjectType,  ObjectClassification,
10993                                    Args, CandidateSet,
10994                                    /*SuppressUsedConversions=*/false);
10995       }
10996     }
10997 
10998     DeclarationName DeclName = UnresExpr->getMemberName();
10999 
11000     UnbridgedCasts.restore();
11001 
11002     OverloadCandidateSet::iterator Best;
11003     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
11004                                             Best)) {
11005     case OR_Success:
11006       Method = cast<CXXMethodDecl>(Best->Function);
11007       FoundDecl = Best->FoundDecl;
11008       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
11009       if (DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()))
11010         return ExprError();
11011       // If FoundDecl is different from Method (such as if one is a template
11012       // and the other a specialization), make sure DiagnoseUseOfDecl is
11013       // called on both.
11014       // FIXME: This would be more comprehensively addressed by modifying
11015       // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
11016       // being used.
11017       if (Method != FoundDecl.getDecl() &&
11018                       DiagnoseUseOfDecl(Method, UnresExpr->getNameLoc()))
11019         return ExprError();
11020       break;
11021 
11022     case OR_No_Viable_Function:
11023       Diag(UnresExpr->getMemberLoc(),
11024            diag::err_ovl_no_viable_member_function_in_call)
11025         << DeclName << MemExprE->getSourceRange();
11026       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11027       // FIXME: Leaking incoming expressions!
11028       return ExprError();
11029 
11030     case OR_Ambiguous:
11031       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
11032         << DeclName << MemExprE->getSourceRange();
11033       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11034       // FIXME: Leaking incoming expressions!
11035       return ExprError();
11036 
11037     case OR_Deleted:
11038       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
11039         << Best->Function->isDeleted()
11040         << DeclName
11041         << getDeletedOrUnavailableSuffix(Best->Function)
11042         << MemExprE->getSourceRange();
11043       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11044       // FIXME: Leaking incoming expressions!
11045       return ExprError();
11046     }
11047 
11048     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
11049 
11050     // If overload resolution picked a static member, build a
11051     // non-member call based on that function.
11052     if (Method->isStatic()) {
11053       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, Args,
11054                                    RParenLoc);
11055     }
11056 
11057     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
11058   }
11059 
11060   QualType ResultType = Method->getResultType();
11061   ExprValueKind VK = Expr::getValueKindForType(ResultType);
11062   ResultType = ResultType.getNonLValueExprType(Context);
11063 
11064   assert(Method && "Member call to something that isn't a method?");
11065   CXXMemberCallExpr *TheCall =
11066     new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
11067                                     ResultType, VK, RParenLoc);
11068 
11069   // Check for a valid return type.
11070   if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
11071                           TheCall, Method))
11072     return ExprError();
11073 
11074   // Convert the object argument (for a non-static member function call).
11075   // We only need to do this if there was actually an overload; otherwise
11076   // it was done at lookup.
11077   if (!Method->isStatic()) {
11078     ExprResult ObjectArg =
11079       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
11080                                           FoundDecl, Method);
11081     if (ObjectArg.isInvalid())
11082       return ExprError();
11083     MemExpr->setBase(ObjectArg.take());
11084   }
11085 
11086   // Convert the rest of the arguments
11087   const FunctionProtoType *Proto =
11088     Method->getType()->getAs<FunctionProtoType>();
11089   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args,
11090                               RParenLoc))
11091     return ExprError();
11092 
11093   DiagnoseSentinelCalls(Method, LParenLoc, Args);
11094 
11095   if (CheckFunctionCall(Method, TheCall, Proto))
11096     return ExprError();
11097 
11098   if ((isa<CXXConstructorDecl>(CurContext) ||
11099        isa<CXXDestructorDecl>(CurContext)) &&
11100       TheCall->getMethodDecl()->isPure()) {
11101     const CXXMethodDecl *MD = TheCall->getMethodDecl();
11102 
11103     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
11104       Diag(MemExpr->getLocStart(),
11105            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
11106         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
11107         << MD->getParent()->getDeclName();
11108 
11109       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
11110     }
11111   }
11112   return MaybeBindToTemporary(TheCall);
11113 }
11114 
11115 /// BuildCallToObjectOfClassType - Build a call to an object of class
11116 /// type (C++ [over.call.object]), which can end up invoking an
11117 /// overloaded function call operator (@c operator()) or performing a
11118 /// user-defined conversion on the object argument.
11119 ExprResult
11120 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
11121                                    SourceLocation LParenLoc,
11122                                    MultiExprArg Args,
11123                                    SourceLocation RParenLoc) {
11124   if (checkPlaceholderForOverload(*this, Obj))
11125     return ExprError();
11126   ExprResult Object = Owned(Obj);
11127 
11128   UnbridgedCastsSet UnbridgedCasts;
11129   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
11130     return ExprError();
11131 
11132   assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
11133   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
11134 
11135   // C++ [over.call.object]p1:
11136   //  If the primary-expression E in the function call syntax
11137   //  evaluates to a class object of type "cv T", then the set of
11138   //  candidate functions includes at least the function call
11139   //  operators of T. The function call operators of T are obtained by
11140   //  ordinary lookup of the name operator() in the context of
11141   //  (E).operator().
11142   OverloadCandidateSet CandidateSet(LParenLoc);
11143   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
11144 
11145   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
11146                           diag::err_incomplete_object_call, Object.get()))
11147     return true;
11148 
11149   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
11150   LookupQualifiedName(R, Record->getDecl());
11151   R.suppressDiagnostics();
11152 
11153   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11154        Oper != OperEnd; ++Oper) {
11155     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
11156                        Object.get()->Classify(Context),
11157                        Args, CandidateSet,
11158                        /*SuppressUserConversions=*/ false);
11159   }
11160 
11161   // C++ [over.call.object]p2:
11162   //   In addition, for each (non-explicit in C++0x) conversion function
11163   //   declared in T of the form
11164   //
11165   //        operator conversion-type-id () cv-qualifier;
11166   //
11167   //   where cv-qualifier is the same cv-qualification as, or a
11168   //   greater cv-qualification than, cv, and where conversion-type-id
11169   //   denotes the type "pointer to function of (P1,...,Pn) returning
11170   //   R", or the type "reference to pointer to function of
11171   //   (P1,...,Pn) returning R", or the type "reference to function
11172   //   of (P1,...,Pn) returning R", a surrogate call function [...]
11173   //   is also considered as a candidate function. Similarly,
11174   //   surrogate call functions are added to the set of candidate
11175   //   functions for each conversion function declared in an
11176   //   accessible base class provided the function is not hidden
11177   //   within T by another intervening declaration.
11178   std::pair<CXXRecordDecl::conversion_iterator,
11179             CXXRecordDecl::conversion_iterator> Conversions
11180     = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
11181   for (CXXRecordDecl::conversion_iterator
11182          I = Conversions.first, E = Conversions.second; I != E; ++I) {
11183     NamedDecl *D = *I;
11184     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
11185     if (isa<UsingShadowDecl>(D))
11186       D = cast<UsingShadowDecl>(D)->getTargetDecl();
11187 
11188     // Skip over templated conversion functions; they aren't
11189     // surrogates.
11190     if (isa<FunctionTemplateDecl>(D))
11191       continue;
11192 
11193     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
11194     if (!Conv->isExplicit()) {
11195       // Strip the reference type (if any) and then the pointer type (if
11196       // any) to get down to what might be a function type.
11197       QualType ConvType = Conv->getConversionType().getNonReferenceType();
11198       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
11199         ConvType = ConvPtrType->getPointeeType();
11200 
11201       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
11202       {
11203         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
11204                               Object.get(), Args, CandidateSet);
11205       }
11206     }
11207   }
11208 
11209   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11210 
11211   // Perform overload resolution.
11212   OverloadCandidateSet::iterator Best;
11213   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
11214                              Best)) {
11215   case OR_Success:
11216     // Overload resolution succeeded; we'll build the appropriate call
11217     // below.
11218     break;
11219 
11220   case OR_No_Viable_Function:
11221     if (CandidateSet.empty())
11222       Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
11223         << Object.get()->getType() << /*call*/ 1
11224         << Object.get()->getSourceRange();
11225     else
11226       Diag(Object.get()->getLocStart(),
11227            diag::err_ovl_no_viable_object_call)
11228         << Object.get()->getType() << Object.get()->getSourceRange();
11229     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11230     break;
11231 
11232   case OR_Ambiguous:
11233     Diag(Object.get()->getLocStart(),
11234          diag::err_ovl_ambiguous_object_call)
11235       << Object.get()->getType() << Object.get()->getSourceRange();
11236     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11237     break;
11238 
11239   case OR_Deleted:
11240     Diag(Object.get()->getLocStart(),
11241          diag::err_ovl_deleted_object_call)
11242       << Best->Function->isDeleted()
11243       << Object.get()->getType()
11244       << getDeletedOrUnavailableSuffix(Best->Function)
11245       << Object.get()->getSourceRange();
11246     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11247     break;
11248   }
11249 
11250   if (Best == CandidateSet.end())
11251     return true;
11252 
11253   UnbridgedCasts.restore();
11254 
11255   if (Best->Function == 0) {
11256     // Since there is no function declaration, this is one of the
11257     // surrogate candidates. Dig out the conversion function.
11258     CXXConversionDecl *Conv
11259       = cast<CXXConversionDecl>(
11260                          Best->Conversions[0].UserDefined.ConversionFunction);
11261 
11262     CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11263     if (DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc))
11264       return ExprError();
11265     assert(Conv == Best->FoundDecl.getDecl() &&
11266              "Found Decl & conversion-to-functionptr should be same, right?!");
11267     // We selected one of the surrogate functions that converts the
11268     // object parameter to a function pointer. Perform the conversion
11269     // on the object argument, then let ActOnCallExpr finish the job.
11270 
11271     // Create an implicit member expr to refer to the conversion operator.
11272     // and then call it.
11273     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
11274                                              Conv, HadMultipleCandidates);
11275     if (Call.isInvalid())
11276       return ExprError();
11277     // Record usage of conversion in an implicit cast.
11278     Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
11279                                           CK_UserDefinedConversion,
11280                                           Call.get(), 0, VK_RValue));
11281 
11282     return ActOnCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc);
11283   }
11284 
11285   CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11286 
11287   // We found an overloaded operator(). Build a CXXOperatorCallExpr
11288   // that calls this method, using Object for the implicit object
11289   // parameter and passing along the remaining arguments.
11290   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11291 
11292   // An error diagnostic has already been printed when parsing the declaration.
11293   if (Method->isInvalidDecl())
11294     return ExprError();
11295 
11296   const FunctionProtoType *Proto =
11297     Method->getType()->getAs<FunctionProtoType>();
11298 
11299   unsigned NumArgsInProto = Proto->getNumArgs();
11300   unsigned NumArgsToCheck = Args.size();
11301 
11302   // Build the full argument list for the method call (the
11303   // implicit object parameter is placed at the beginning of the
11304   // list).
11305   Expr **MethodArgs;
11306   if (Args.size() < NumArgsInProto) {
11307     NumArgsToCheck = NumArgsInProto;
11308     MethodArgs = new Expr*[NumArgsInProto + 1];
11309   } else {
11310     MethodArgs = new Expr*[Args.size() + 1];
11311   }
11312   MethodArgs[0] = Object.get();
11313   for (unsigned ArgIdx = 0, e = Args.size(); ArgIdx != e; ++ArgIdx)
11314     MethodArgs[ArgIdx + 1] = Args[ArgIdx];
11315 
11316   DeclarationNameInfo OpLocInfo(
11317                Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
11318   OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
11319   ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11320                                            HadMultipleCandidates,
11321                                            OpLocInfo.getLoc(),
11322                                            OpLocInfo.getInfo());
11323   if (NewFn.isInvalid())
11324     return true;
11325 
11326   // Once we've built TheCall, all of the expressions are properly
11327   // owned.
11328   QualType ResultTy = Method->getResultType();
11329   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11330   ResultTy = ResultTy.getNonLValueExprType(Context);
11331 
11332   CXXOperatorCallExpr *TheCall =
11333     new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
11334                                       llvm::makeArrayRef(MethodArgs, Args.size()+1),
11335                                       ResultTy, VK, RParenLoc, false);
11336   delete [] MethodArgs;
11337 
11338   if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
11339                           Method))
11340     return true;
11341 
11342   // We may have default arguments. If so, we need to allocate more
11343   // slots in the call for them.
11344   if (Args.size() < NumArgsInProto)
11345     TheCall->setNumArgs(Context, NumArgsInProto + 1);
11346   else if (Args.size() > NumArgsInProto)
11347     NumArgsToCheck = NumArgsInProto;
11348 
11349   bool IsError = false;
11350 
11351   // Initialize the implicit object parameter.
11352   ExprResult ObjRes =
11353     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11354                                         Best->FoundDecl, Method);
11355   if (ObjRes.isInvalid())
11356     IsError = true;
11357   else
11358     Object = ObjRes;
11359   TheCall->setArg(0, Object.take());
11360 
11361   // Check the argument types.
11362   for (unsigned i = 0; i != NumArgsToCheck; i++) {
11363     Expr *Arg;
11364     if (i < Args.size()) {
11365       Arg = Args[i];
11366 
11367       // Pass the argument.
11368 
11369       ExprResult InputInit
11370         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11371                                                     Context,
11372                                                     Method->getParamDecl(i)),
11373                                     SourceLocation(), Arg);
11374 
11375       IsError |= InputInit.isInvalid();
11376       Arg = InputInit.takeAs<Expr>();
11377     } else {
11378       ExprResult DefArg
11379         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11380       if (DefArg.isInvalid()) {
11381         IsError = true;
11382         break;
11383       }
11384 
11385       Arg = DefArg.takeAs<Expr>();
11386     }
11387 
11388     TheCall->setArg(i + 1, Arg);
11389   }
11390 
11391   // If this is a variadic call, handle args passed through "...".
11392   if (Proto->isVariadic()) {
11393     // Promote the arguments (C99 6.5.2.2p7).
11394     for (unsigned i = NumArgsInProto, e = Args.size(); i < e; i++) {
11395       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11396       IsError |= Arg.isInvalid();
11397       TheCall->setArg(i + 1, Arg.take());
11398     }
11399   }
11400 
11401   if (IsError) return true;
11402 
11403   DiagnoseSentinelCalls(Method, LParenLoc, Args);
11404 
11405   if (CheckFunctionCall(Method, TheCall, Proto))
11406     return true;
11407 
11408   return MaybeBindToTemporary(TheCall);
11409 }
11410 
11411 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11412 ///  (if one exists), where @c Base is an expression of class type and
11413 /// @c Member is the name of the member we're trying to find.
11414 ExprResult
11415 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
11416   assert(Base->getType()->isRecordType() &&
11417          "left-hand side must have class type");
11418 
11419   if (checkPlaceholderForOverload(*this, Base))
11420     return ExprError();
11421 
11422   SourceLocation Loc = Base->getExprLoc();
11423 
11424   // C++ [over.ref]p1:
11425   //
11426   //   [...] An expression x->m is interpreted as (x.operator->())->m
11427   //   for a class object x of type T if T::operator->() exists and if
11428   //   the operator is selected as the best match function by the
11429   //   overload resolution mechanism (13.3).
11430   DeclarationName OpName =
11431     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11432   OverloadCandidateSet CandidateSet(Loc);
11433   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11434 
11435   if (RequireCompleteType(Loc, Base->getType(),
11436                           diag::err_typecheck_incomplete_tag, Base))
11437     return ExprError();
11438 
11439   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11440   LookupQualifiedName(R, BaseRecord->getDecl());
11441   R.suppressDiagnostics();
11442 
11443   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11444        Oper != OperEnd; ++Oper) {
11445     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11446                        None, CandidateSet, /*SuppressUserConversions=*/false);
11447   }
11448 
11449   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11450 
11451   // Perform overload resolution.
11452   OverloadCandidateSet::iterator Best;
11453   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11454   case OR_Success:
11455     // Overload resolution succeeded; we'll build the call below.
11456     break;
11457 
11458   case OR_No_Viable_Function:
11459     if (CandidateSet.empty())
11460       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11461         << Base->getType() << Base->getSourceRange();
11462     else
11463       Diag(OpLoc, diag::err_ovl_no_viable_oper)
11464         << "operator->" << Base->getSourceRange();
11465     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11466     return ExprError();
11467 
11468   case OR_Ambiguous:
11469     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11470       << "->" << Base->getType() << Base->getSourceRange();
11471     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11472     return ExprError();
11473 
11474   case OR_Deleted:
11475     Diag(OpLoc,  diag::err_ovl_deleted_oper)
11476       << Best->Function->isDeleted()
11477       << "->"
11478       << getDeletedOrUnavailableSuffix(Best->Function)
11479       << Base->getSourceRange();
11480     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11481     return ExprError();
11482   }
11483 
11484   CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11485 
11486   // Convert the object parameter.
11487   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11488   ExprResult BaseResult =
11489     PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11490                                         Best->FoundDecl, Method);
11491   if (BaseResult.isInvalid())
11492     return ExprError();
11493   Base = BaseResult.take();
11494 
11495   // Build the operator call.
11496   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11497                                             HadMultipleCandidates, OpLoc);
11498   if (FnExpr.isInvalid())
11499     return ExprError();
11500 
11501   QualType ResultTy = Method->getResultType();
11502   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11503   ResultTy = ResultTy.getNonLValueExprType(Context);
11504   CXXOperatorCallExpr *TheCall =
11505     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11506                                       Base, ResultTy, VK, OpLoc, false);
11507 
11508   if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11509                           Method))
11510           return ExprError();
11511 
11512   return MaybeBindToTemporary(TheCall);
11513 }
11514 
11515 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11516 /// a literal operator described by the provided lookup results.
11517 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11518                                           DeclarationNameInfo &SuffixInfo,
11519                                           ArrayRef<Expr*> Args,
11520                                           SourceLocation LitEndLoc,
11521                                        TemplateArgumentListInfo *TemplateArgs) {
11522   SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11523 
11524   OverloadCandidateSet CandidateSet(UDSuffixLoc);
11525   AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11526                         TemplateArgs);
11527 
11528   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11529 
11530   // Perform overload resolution. This will usually be trivial, but might need
11531   // to perform substitutions for a literal operator template.
11532   OverloadCandidateSet::iterator Best;
11533   switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11534   case OR_Success:
11535   case OR_Deleted:
11536     break;
11537 
11538   case OR_No_Viable_Function:
11539     Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11540       << R.getLookupName();
11541     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11542     return ExprError();
11543 
11544   case OR_Ambiguous:
11545     Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11546     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11547     return ExprError();
11548   }
11549 
11550   FunctionDecl *FD = Best->Function;
11551   ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
11552                                         HadMultipleCandidates,
11553                                         SuffixInfo.getLoc(),
11554                                         SuffixInfo.getInfo());
11555   if (Fn.isInvalid())
11556     return true;
11557 
11558   // Check the argument types. This should almost always be a no-op, except
11559   // that array-to-pointer decay is applied to string literals.
11560   Expr *ConvArgs[2];
11561   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
11562     ExprResult InputInit = PerformCopyInitialization(
11563       InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11564       SourceLocation(), Args[ArgIdx]);
11565     if (InputInit.isInvalid())
11566       return true;
11567     ConvArgs[ArgIdx] = InputInit.take();
11568   }
11569 
11570   QualType ResultTy = FD->getResultType();
11571   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11572   ResultTy = ResultTy.getNonLValueExprType(Context);
11573 
11574   UserDefinedLiteral *UDL =
11575     new (Context) UserDefinedLiteral(Context, Fn.take(),
11576                                      llvm::makeArrayRef(ConvArgs, Args.size()),
11577                                      ResultTy, VK, LitEndLoc, UDSuffixLoc);
11578 
11579   if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11580     return ExprError();
11581 
11582   if (CheckFunctionCall(FD, UDL, NULL))
11583     return ExprError();
11584 
11585   return MaybeBindToTemporary(UDL);
11586 }
11587 
11588 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11589 /// given LookupResult is non-empty, it is assumed to describe a member which
11590 /// will be invoked. Otherwise, the function will be found via argument
11591 /// dependent lookup.
11592 /// CallExpr is set to a valid expression and FRS_Success returned on success,
11593 /// otherwise CallExpr is set to ExprError() and some non-success value
11594 /// is returned.
11595 Sema::ForRangeStatus
11596 Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11597                                 SourceLocation RangeLoc, VarDecl *Decl,
11598                                 BeginEndFunction BEF,
11599                                 const DeclarationNameInfo &NameInfo,
11600                                 LookupResult &MemberLookup,
11601                                 OverloadCandidateSet *CandidateSet,
11602                                 Expr *Range, ExprResult *CallExpr) {
11603   CandidateSet->clear();
11604   if (!MemberLookup.empty()) {
11605     ExprResult MemberRef =
11606         BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11607                                  /*IsPtr=*/false, CXXScopeSpec(),
11608                                  /*TemplateKWLoc=*/SourceLocation(),
11609                                  /*FirstQualifierInScope=*/0,
11610                                  MemberLookup,
11611                                  /*TemplateArgs=*/0);
11612     if (MemberRef.isInvalid()) {
11613       *CallExpr = ExprError();
11614       Diag(Range->getLocStart(), diag::note_in_for_range)
11615           << RangeLoc << BEF << Range->getType();
11616       return FRS_DiagnosticIssued;
11617     }
11618     *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, None, Loc, 0);
11619     if (CallExpr->isInvalid()) {
11620       *CallExpr = ExprError();
11621       Diag(Range->getLocStart(), diag::note_in_for_range)
11622           << RangeLoc << BEF << Range->getType();
11623       return FRS_DiagnosticIssued;
11624     }
11625   } else {
11626     UnresolvedSet<0> FoundNames;
11627     UnresolvedLookupExpr *Fn =
11628       UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11629                                    NestedNameSpecifierLoc(), NameInfo,
11630                                    /*NeedsADL=*/true, /*Overloaded=*/false,
11631                                    FoundNames.begin(), FoundNames.end());
11632 
11633     bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, Range, Loc,
11634                                                     CandidateSet, CallExpr);
11635     if (CandidateSet->empty() || CandidateSetError) {
11636       *CallExpr = ExprError();
11637       return FRS_NoViableFunction;
11638     }
11639     OverloadCandidateSet::iterator Best;
11640     OverloadingResult OverloadResult =
11641         CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11642 
11643     if (OverloadResult == OR_No_Viable_Function) {
11644       *CallExpr = ExprError();
11645       return FRS_NoViableFunction;
11646     }
11647     *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, Range,
11648                                          Loc, 0, CandidateSet, &Best,
11649                                          OverloadResult,
11650                                          /*AllowTypoCorrection=*/false);
11651     if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11652       *CallExpr = ExprError();
11653       Diag(Range->getLocStart(), diag::note_in_for_range)
11654           << RangeLoc << BEF << Range->getType();
11655       return FRS_DiagnosticIssued;
11656     }
11657   }
11658   return FRS_Success;
11659 }
11660 
11661 
11662 /// FixOverloadedFunctionReference - E is an expression that refers to
11663 /// a C++ overloaded function (possibly with some parentheses and
11664 /// perhaps a '&' around it). We have resolved the overloaded function
11665 /// to the function declaration Fn, so patch up the expression E to
11666 /// refer (possibly indirectly) to Fn. Returns the new expr.
11667 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11668                                            FunctionDecl *Fn) {
11669   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11670     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11671                                                    Found, Fn);
11672     if (SubExpr == PE->getSubExpr())
11673       return PE;
11674 
11675     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11676   }
11677 
11678   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11679     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11680                                                    Found, Fn);
11681     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11682                                SubExpr->getType()) &&
11683            "Implicit cast type cannot be determined from overload");
11684     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11685     if (SubExpr == ICE->getSubExpr())
11686       return ICE;
11687 
11688     return ImplicitCastExpr::Create(Context, ICE->getType(),
11689                                     ICE->getCastKind(),
11690                                     SubExpr, 0,
11691                                     ICE->getValueKind());
11692   }
11693 
11694   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11695     assert(UnOp->getOpcode() == UO_AddrOf &&
11696            "Can only take the address of an overloaded function");
11697     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11698       if (Method->isStatic()) {
11699         // Do nothing: static member functions aren't any different
11700         // from non-member functions.
11701       } else {
11702         // Fix the sub expression, which really has to be an
11703         // UnresolvedLookupExpr holding an overloaded member function
11704         // or template.
11705         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11706                                                        Found, Fn);
11707         if (SubExpr == UnOp->getSubExpr())
11708           return UnOp;
11709 
11710         assert(isa<DeclRefExpr>(SubExpr)
11711                && "fixed to something other than a decl ref");
11712         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11713                && "fixed to a member ref with no nested name qualifier");
11714 
11715         // We have taken the address of a pointer to member
11716         // function. Perform the computation here so that we get the
11717         // appropriate pointer to member type.
11718         QualType ClassType
11719           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11720         QualType MemPtrType
11721           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11722 
11723         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11724                                            VK_RValue, OK_Ordinary,
11725                                            UnOp->getOperatorLoc());
11726       }
11727     }
11728     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11729                                                    Found, Fn);
11730     if (SubExpr == UnOp->getSubExpr())
11731       return UnOp;
11732 
11733     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11734                                      Context.getPointerType(SubExpr->getType()),
11735                                        VK_RValue, OK_Ordinary,
11736                                        UnOp->getOperatorLoc());
11737   }
11738 
11739   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11740     // FIXME: avoid copy.
11741     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11742     if (ULE->hasExplicitTemplateArgs()) {
11743       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11744       TemplateArgs = &TemplateArgsBuffer;
11745     }
11746 
11747     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11748                                            ULE->getQualifierLoc(),
11749                                            ULE->getTemplateKeywordLoc(),
11750                                            Fn,
11751                                            /*enclosing*/ false, // FIXME?
11752                                            ULE->getNameLoc(),
11753                                            Fn->getType(),
11754                                            VK_LValue,
11755                                            Found.getDecl(),
11756                                            TemplateArgs);
11757     MarkDeclRefReferenced(DRE);
11758     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11759     return DRE;
11760   }
11761 
11762   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11763     // FIXME: avoid copy.
11764     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11765     if (MemExpr->hasExplicitTemplateArgs()) {
11766       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11767       TemplateArgs = &TemplateArgsBuffer;
11768     }
11769 
11770     Expr *Base;
11771 
11772     // If we're filling in a static method where we used to have an
11773     // implicit member access, rewrite to a simple decl ref.
11774     if (MemExpr->isImplicitAccess()) {
11775       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11776         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11777                                                MemExpr->getQualifierLoc(),
11778                                                MemExpr->getTemplateKeywordLoc(),
11779                                                Fn,
11780                                                /*enclosing*/ false,
11781                                                MemExpr->getMemberLoc(),
11782                                                Fn->getType(),
11783                                                VK_LValue,
11784                                                Found.getDecl(),
11785                                                TemplateArgs);
11786         MarkDeclRefReferenced(DRE);
11787         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11788         return DRE;
11789       } else {
11790         SourceLocation Loc = MemExpr->getMemberLoc();
11791         if (MemExpr->getQualifier())
11792           Loc = MemExpr->getQualifierLoc().getBeginLoc();
11793         CheckCXXThisCapture(Loc);
11794         Base = new (Context) CXXThisExpr(Loc,
11795                                          MemExpr->getBaseType(),
11796                                          /*isImplicit=*/true);
11797       }
11798     } else
11799       Base = MemExpr->getBase();
11800 
11801     ExprValueKind valueKind;
11802     QualType type;
11803     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11804       valueKind = VK_LValue;
11805       type = Fn->getType();
11806     } else {
11807       valueKind = VK_RValue;
11808       type = Context.BoundMemberTy;
11809     }
11810 
11811     MemberExpr *ME = MemberExpr::Create(Context, Base,
11812                                         MemExpr->isArrow(),
11813                                         MemExpr->getQualifierLoc(),
11814                                         MemExpr->getTemplateKeywordLoc(),
11815                                         Fn,
11816                                         Found,
11817                                         MemExpr->getMemberNameInfo(),
11818                                         TemplateArgs,
11819                                         type, valueKind, OK_Ordinary);
11820     ME->setHadMultipleCandidates(true);
11821     MarkMemberReferenced(ME);
11822     return ME;
11823   }
11824 
11825   llvm_unreachable("Invalid reference to overloaded function");
11826 }
11827 
11828 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11829                                                 DeclAccessPair Found,
11830                                                 FunctionDecl *Fn) {
11831   return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11832 }
11833 
11834 } // end namespace clang
11835