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   DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
46                                                  VK_LValue, Loc, LocInfo);
47   if (HadMultipleCandidates)
48     DRE->setHadMultipleCandidates(true);
49 
50   S.MarkDeclRefReferenced(DRE);
51   S.DiagnoseUseOfDecl(FoundDecl, Loc);
52 
53   ExprResult E = S.Owned(DRE);
54   E = S.DefaultFunctionArrayConversion(E.take());
55   if (E.isInvalid())
56     return ExprError();
57   return E;
58 }
59 
60 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
61                                  bool InOverloadResolution,
62                                  StandardConversionSequence &SCS,
63                                  bool CStyle,
64                                  bool AllowObjCWritebackConversion);
65 
66 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
67                                                  QualType &ToType,
68                                                  bool InOverloadResolution,
69                                                  StandardConversionSequence &SCS,
70                                                  bool CStyle);
71 static OverloadingResult
72 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
73                         UserDefinedConversionSequence& User,
74                         OverloadCandidateSet& Conversions,
75                         bool AllowExplicit);
76 
77 
78 static ImplicitConversionSequence::CompareKind
79 CompareStandardConversionSequences(Sema &S,
80                                    const StandardConversionSequence& SCS1,
81                                    const StandardConversionSequence& SCS2);
82 
83 static ImplicitConversionSequence::CompareKind
84 CompareQualificationConversions(Sema &S,
85                                 const StandardConversionSequence& SCS1,
86                                 const StandardConversionSequence& SCS2);
87 
88 static ImplicitConversionSequence::CompareKind
89 CompareDerivedToBaseConversions(Sema &S,
90                                 const StandardConversionSequence& SCS1,
91                                 const StandardConversionSequence& SCS2);
92 
93 
94 
95 /// GetConversionCategory - Retrieve the implicit conversion
96 /// category corresponding to the given implicit conversion kind.
97 ImplicitConversionCategory
98 GetConversionCategory(ImplicitConversionKind Kind) {
99   static const ImplicitConversionCategory
100     Category[(int)ICK_Num_Conversion_Kinds] = {
101     ICC_Identity,
102     ICC_Lvalue_Transformation,
103     ICC_Lvalue_Transformation,
104     ICC_Lvalue_Transformation,
105     ICC_Identity,
106     ICC_Qualification_Adjustment,
107     ICC_Promotion,
108     ICC_Promotion,
109     ICC_Promotion,
110     ICC_Conversion,
111     ICC_Conversion,
112     ICC_Conversion,
113     ICC_Conversion,
114     ICC_Conversion,
115     ICC_Conversion,
116     ICC_Conversion,
117     ICC_Conversion,
118     ICC_Conversion,
119     ICC_Conversion,
120     ICC_Conversion,
121     ICC_Conversion,
122     ICC_Conversion
123   };
124   return Category[(int)Kind];
125 }
126 
127 /// GetConversionRank - Retrieve the implicit conversion rank
128 /// corresponding to the given implicit conversion kind.
129 ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
130   static const ImplicitConversionRank
131     Rank[(int)ICK_Num_Conversion_Kinds] = {
132     ICR_Exact_Match,
133     ICR_Exact_Match,
134     ICR_Exact_Match,
135     ICR_Exact_Match,
136     ICR_Exact_Match,
137     ICR_Exact_Match,
138     ICR_Promotion,
139     ICR_Promotion,
140     ICR_Promotion,
141     ICR_Conversion,
142     ICR_Conversion,
143     ICR_Conversion,
144     ICR_Conversion,
145     ICR_Conversion,
146     ICR_Conversion,
147     ICR_Conversion,
148     ICR_Conversion,
149     ICR_Conversion,
150     ICR_Conversion,
151     ICR_Conversion,
152     ICR_Complex_Real_Conversion,
153     ICR_Conversion,
154     ICR_Conversion,
155     ICR_Writeback_Conversion
156   };
157   return Rank[(int)Kind];
158 }
159 
160 /// GetImplicitConversionName - Return the name of this kind of
161 /// implicit conversion.
162 const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
163   static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
164     "No conversion",
165     "Lvalue-to-rvalue",
166     "Array-to-pointer",
167     "Function-to-pointer",
168     "Noreturn adjustment",
169     "Qualification",
170     "Integral promotion",
171     "Floating point promotion",
172     "Complex promotion",
173     "Integral conversion",
174     "Floating conversion",
175     "Complex conversion",
176     "Floating-integral conversion",
177     "Pointer conversion",
178     "Pointer-to-member conversion",
179     "Boolean conversion",
180     "Compatible-types conversion",
181     "Derived-to-base conversion",
182     "Vector conversion",
183     "Vector splat",
184     "Complex-real conversion",
185     "Block Pointer conversion",
186     "Transparent Union Conversion"
187     "Writeback conversion"
188   };
189   return Name[Kind];
190 }
191 
192 /// StandardConversionSequence - Set the standard conversion
193 /// sequence to the identity conversion.
194 void StandardConversionSequence::setAsIdentityConversion() {
195   First = ICK_Identity;
196   Second = ICK_Identity;
197   Third = ICK_Identity;
198   DeprecatedStringLiteralToCharPtr = false;
199   QualificationIncludesObjCLifetime = false;
200   ReferenceBinding = false;
201   DirectBinding = false;
202   IsLvalueReference = true;
203   BindsToFunctionLvalue = false;
204   BindsToRvalue = false;
205   BindsImplicitObjectArgumentWithoutRefQualifier = false;
206   ObjCLifetimeConversionBinding = false;
207   CopyConstructor = 0;
208 }
209 
210 /// getRank - Retrieve the rank of this standard conversion sequence
211 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
212 /// implicit conversions.
213 ImplicitConversionRank StandardConversionSequence::getRank() const {
214   ImplicitConversionRank Rank = ICR_Exact_Match;
215   if  (GetConversionRank(First) > Rank)
216     Rank = GetConversionRank(First);
217   if  (GetConversionRank(Second) > Rank)
218     Rank = GetConversionRank(Second);
219   if  (GetConversionRank(Third) > Rank)
220     Rank = GetConversionRank(Third);
221   return Rank;
222 }
223 
224 /// isPointerConversionToBool - Determines whether this conversion is
225 /// a conversion of a pointer or pointer-to-member to bool. This is
226 /// used as part of the ranking of standard conversion sequences
227 /// (C++ 13.3.3.2p4).
228 bool StandardConversionSequence::isPointerConversionToBool() const {
229   // Note that FromType has not necessarily been transformed by the
230   // array-to-pointer or function-to-pointer implicit conversions, so
231   // check for their presence as well as checking whether FromType is
232   // a pointer.
233   if (getToType(1)->isBooleanType() &&
234       (getFromType()->isPointerType() ||
235        getFromType()->isObjCObjectPointerType() ||
236        getFromType()->isBlockPointerType() ||
237        getFromType()->isNullPtrType() ||
238        First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
239     return true;
240 
241   return false;
242 }
243 
244 /// isPointerConversionToVoidPointer - Determines whether this
245 /// conversion is a conversion of a pointer to a void pointer. This is
246 /// used as part of the ranking of standard conversion sequences (C++
247 /// 13.3.3.2p4).
248 bool
249 StandardConversionSequence::
250 isPointerConversionToVoidPointer(ASTContext& Context) const {
251   QualType FromType = getFromType();
252   QualType ToType = getToType(1);
253 
254   // Note that FromType has not necessarily been transformed by the
255   // array-to-pointer implicit conversion, so check for its presence
256   // and redo the conversion to get a pointer.
257   if (First == ICK_Array_To_Pointer)
258     FromType = Context.getArrayDecayedType(FromType);
259 
260   if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
261     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
262       return ToPtrType->getPointeeType()->isVoidType();
263 
264   return false;
265 }
266 
267 /// Skip any implicit casts which could be either part of a narrowing conversion
268 /// or after one in an implicit conversion.
269 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
270   while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
271     switch (ICE->getCastKind()) {
272     case CK_NoOp:
273     case CK_IntegralCast:
274     case CK_IntegralToBoolean:
275     case CK_IntegralToFloating:
276     case CK_FloatingToIntegral:
277     case CK_FloatingToBoolean:
278     case CK_FloatingCast:
279       Converted = ICE->getSubExpr();
280       continue;
281 
282     default:
283       return Converted;
284     }
285   }
286 
287   return Converted;
288 }
289 
290 /// Check if this standard conversion sequence represents a narrowing
291 /// conversion, according to C++11 [dcl.init.list]p7.
292 ///
293 /// \param Ctx  The AST context.
294 /// \param Converted  The result of applying this standard conversion sequence.
295 /// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
296 ///        value of the expression prior to the narrowing conversion.
297 /// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
298 ///        type of the expression prior to the narrowing conversion.
299 NarrowingKind
300 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
301                                              const Expr *Converted,
302                                              APValue &ConstantValue,
303                                              QualType &ConstantType) const {
304   assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
305 
306   // C++11 [dcl.init.list]p7:
307   //   A narrowing conversion is an implicit conversion ...
308   QualType FromType = getToType(0);
309   QualType ToType = getToType(1);
310   switch (Second) {
311   // -- from a floating-point type to an integer type, or
312   //
313   // -- from an integer type or unscoped enumeration type to a floating-point
314   //    type, except where the source is a constant expression and the actual
315   //    value after conversion will fit into the target type and will produce
316   //    the original value when converted back to the original type, or
317   case ICK_Floating_Integral:
318     if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
319       return NK_Type_Narrowing;
320     } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
321       llvm::APSInt IntConstantValue;
322       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
323       if (Initializer &&
324           Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
325         // Convert the integer to the floating type.
326         llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
327         Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
328                                 llvm::APFloat::rmNearestTiesToEven);
329         // And back.
330         llvm::APSInt ConvertedValue = IntConstantValue;
331         bool ignored;
332         Result.convertToInteger(ConvertedValue,
333                                 llvm::APFloat::rmTowardZero, &ignored);
334         // If the resulting value is different, this was a narrowing conversion.
335         if (IntConstantValue != ConvertedValue) {
336           ConstantValue = APValue(IntConstantValue);
337           ConstantType = Initializer->getType();
338           return NK_Constant_Narrowing;
339         }
340       } else {
341         // Variables are always narrowings.
342         return NK_Variable_Narrowing;
343       }
344     }
345     return NK_Not_Narrowing;
346 
347   // -- from long double to double or float, or from double to float, except
348   //    where the source is a constant expression and the actual value after
349   //    conversion is within the range of values that can be represented (even
350   //    if it cannot be represented exactly), or
351   case ICK_Floating_Conversion:
352     if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
353         Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
354       // FromType is larger than ToType.
355       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
356       if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
357         // Constant!
358         assert(ConstantValue.isFloat());
359         llvm::APFloat FloatVal = ConstantValue.getFloat();
360         // Convert the source value into the target type.
361         bool ignored;
362         llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
363           Ctx.getFloatTypeSemantics(ToType),
364           llvm::APFloat::rmNearestTiesToEven, &ignored);
365         // If there was no overflow, the source value is within the range of
366         // values that can be represented.
367         if (ConvertStatus & llvm::APFloat::opOverflow) {
368           ConstantType = Initializer->getType();
369           return NK_Constant_Narrowing;
370         }
371       } else {
372         return NK_Variable_Narrowing;
373       }
374     }
375     return NK_Not_Narrowing;
376 
377   // -- from an integer type or unscoped enumeration type to an integer type
378   //    that cannot represent all the values of the original type, except where
379   //    the source is a constant expression and the actual value after
380   //    conversion will fit into the target type and will produce the original
381   //    value when converted back to the original type.
382   case ICK_Boolean_Conversion:  // Bools are integers too.
383     if (!FromType->isIntegralOrUnscopedEnumerationType()) {
384       // Boolean conversions can be from pointers and pointers to members
385       // [conv.bool], and those aren't considered narrowing conversions.
386       return NK_Not_Narrowing;
387     }  // Otherwise, fall through to the integral case.
388   case ICK_Integral_Conversion: {
389     assert(FromType->isIntegralOrUnscopedEnumerationType());
390     assert(ToType->isIntegralOrUnscopedEnumerationType());
391     const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
392     const unsigned FromWidth = Ctx.getIntWidth(FromType);
393     const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
394     const unsigned ToWidth = Ctx.getIntWidth(ToType);
395 
396     if (FromWidth > ToWidth ||
397         (FromWidth == ToWidth && FromSigned != ToSigned) ||
398         (FromSigned && !ToSigned)) {
399       // Not all values of FromType can be represented in ToType.
400       llvm::APSInt InitializerValue;
401       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
402       if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
403         // Such conversions on variables are always narrowing.
404         return NK_Variable_Narrowing;
405       }
406       bool Narrowing = false;
407       if (FromWidth < ToWidth) {
408         // Negative -> unsigned is narrowing. Otherwise, more bits is never
409         // narrowing.
410         if (InitializerValue.isSigned() && InitializerValue.isNegative())
411           Narrowing = true;
412       } else {
413         // Add a bit to the InitializerValue so we don't have to worry about
414         // signed vs. unsigned comparisons.
415         InitializerValue = InitializerValue.extend(
416           InitializerValue.getBitWidth() + 1);
417         // Convert the initializer to and from the target width and signed-ness.
418         llvm::APSInt ConvertedValue = InitializerValue;
419         ConvertedValue = ConvertedValue.trunc(ToWidth);
420         ConvertedValue.setIsSigned(ToSigned);
421         ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
422         ConvertedValue.setIsSigned(InitializerValue.isSigned());
423         // If the result is different, this was a narrowing conversion.
424         if (ConvertedValue != InitializerValue)
425           Narrowing = true;
426       }
427       if (Narrowing) {
428         ConstantType = Initializer->getType();
429         ConstantValue = APValue(InitializerValue);
430         return NK_Constant_Narrowing;
431       }
432     }
433     return NK_Not_Narrowing;
434   }
435 
436   default:
437     // Other kinds of conversions are not narrowings.
438     return NK_Not_Narrowing;
439   }
440 }
441 
442 /// DebugPrint - Print this standard conversion sequence to standard
443 /// error. Useful for debugging overloading issues.
444 void StandardConversionSequence::DebugPrint() const {
445   raw_ostream &OS = llvm::errs();
446   bool PrintedSomething = false;
447   if (First != ICK_Identity) {
448     OS << GetImplicitConversionName(First);
449     PrintedSomething = true;
450   }
451 
452   if (Second != ICK_Identity) {
453     if (PrintedSomething) {
454       OS << " -> ";
455     }
456     OS << GetImplicitConversionName(Second);
457 
458     if (CopyConstructor) {
459       OS << " (by copy constructor)";
460     } else if (DirectBinding) {
461       OS << " (direct reference binding)";
462     } else if (ReferenceBinding) {
463       OS << " (reference binding)";
464     }
465     PrintedSomething = true;
466   }
467 
468   if (Third != ICK_Identity) {
469     if (PrintedSomething) {
470       OS << " -> ";
471     }
472     OS << GetImplicitConversionName(Third);
473     PrintedSomething = true;
474   }
475 
476   if (!PrintedSomething) {
477     OS << "No conversions required";
478   }
479 }
480 
481 /// DebugPrint - Print this user-defined conversion sequence to standard
482 /// error. Useful for debugging overloading issues.
483 void UserDefinedConversionSequence::DebugPrint() const {
484   raw_ostream &OS = llvm::errs();
485   if (Before.First || Before.Second || Before.Third) {
486     Before.DebugPrint();
487     OS << " -> ";
488   }
489   if (ConversionFunction)
490     OS << '\'' << *ConversionFunction << '\'';
491   else
492     OS << "aggregate initialization";
493   if (After.First || After.Second || After.Third) {
494     OS << " -> ";
495     After.DebugPrint();
496   }
497 }
498 
499 /// DebugPrint - Print this implicit conversion sequence to standard
500 /// error. Useful for debugging overloading issues.
501 void ImplicitConversionSequence::DebugPrint() const {
502   raw_ostream &OS = llvm::errs();
503   switch (ConversionKind) {
504   case StandardConversion:
505     OS << "Standard conversion: ";
506     Standard.DebugPrint();
507     break;
508   case UserDefinedConversion:
509     OS << "User-defined conversion: ";
510     UserDefined.DebugPrint();
511     break;
512   case EllipsisConversion:
513     OS << "Ellipsis conversion";
514     break;
515   case AmbiguousConversion:
516     OS << "Ambiguous conversion";
517     break;
518   case BadConversion:
519     OS << "Bad conversion";
520     break;
521   }
522 
523   OS << "\n";
524 }
525 
526 void AmbiguousConversionSequence::construct() {
527   new (&conversions()) ConversionSet();
528 }
529 
530 void AmbiguousConversionSequence::destruct() {
531   conversions().~ConversionSet();
532 }
533 
534 void
535 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
536   FromTypePtr = O.FromTypePtr;
537   ToTypePtr = O.ToTypePtr;
538   new (&conversions()) ConversionSet(O.conversions());
539 }
540 
541 namespace {
542   // Structure used by OverloadCandidate::DeductionFailureInfo to store
543   // template argument information.
544   struct DFIArguments {
545     TemplateArgument FirstArg;
546     TemplateArgument SecondArg;
547   };
548   // Structure used by OverloadCandidate::DeductionFailureInfo to store
549   // template parameter and template argument information.
550   struct DFIParamWithArguments : DFIArguments {
551     TemplateParameter Param;
552   };
553 }
554 
555 /// \brief Convert from Sema's representation of template deduction information
556 /// to the form used in overload-candidate information.
557 OverloadCandidate::DeductionFailureInfo
558 static MakeDeductionFailureInfo(ASTContext &Context,
559                                 Sema::TemplateDeductionResult TDK,
560                                 TemplateDeductionInfo &Info) {
561   OverloadCandidate::DeductionFailureInfo Result;
562   Result.Result = static_cast<unsigned>(TDK);
563   Result.HasDiagnostic = false;
564   Result.Data = 0;
565   switch (TDK) {
566   case Sema::TDK_Success:
567   case Sema::TDK_Invalid:
568   case Sema::TDK_InstantiationDepth:
569   case Sema::TDK_TooManyArguments:
570   case Sema::TDK_TooFewArguments:
571     break;
572 
573   case Sema::TDK_Incomplete:
574   case Sema::TDK_InvalidExplicitArguments:
575     Result.Data = Info.Param.getOpaqueValue();
576     break;
577 
578   case Sema::TDK_NonDeducedMismatch: {
579     // FIXME: Should allocate from normal heap so that we can free this later.
580     DFIArguments *Saved = new (Context) DFIArguments;
581     Saved->FirstArg = Info.FirstArg;
582     Saved->SecondArg = Info.SecondArg;
583     Result.Data = Saved;
584     break;
585   }
586 
587   case Sema::TDK_Inconsistent:
588   case Sema::TDK_Underqualified: {
589     // FIXME: Should allocate from normal heap so that we can free this later.
590     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
591     Saved->Param = Info.Param;
592     Saved->FirstArg = Info.FirstArg;
593     Saved->SecondArg = Info.SecondArg;
594     Result.Data = Saved;
595     break;
596   }
597 
598   case Sema::TDK_SubstitutionFailure:
599     Result.Data = Info.take();
600     if (Info.hasSFINAEDiagnostic()) {
601       PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
602           SourceLocation(), PartialDiagnostic::NullDiagnostic());
603       Info.takeSFINAEDiagnostic(*Diag);
604       Result.HasDiagnostic = true;
605     }
606     break;
607 
608   case Sema::TDK_FailedOverloadResolution:
609     Result.Data = Info.Expression;
610     break;
611 
612   case Sema::TDK_MiscellaneousDeductionFailure:
613     break;
614   }
615 
616   return Result;
617 }
618 
619 void OverloadCandidate::DeductionFailureInfo::Destroy() {
620   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
621   case Sema::TDK_Success:
622   case Sema::TDK_Invalid:
623   case Sema::TDK_InstantiationDepth:
624   case Sema::TDK_Incomplete:
625   case Sema::TDK_TooManyArguments:
626   case Sema::TDK_TooFewArguments:
627   case Sema::TDK_InvalidExplicitArguments:
628   case Sema::TDK_FailedOverloadResolution:
629     break;
630 
631   case Sema::TDK_Inconsistent:
632   case Sema::TDK_Underqualified:
633   case Sema::TDK_NonDeducedMismatch:
634     // FIXME: Destroy the data?
635     Data = 0;
636     break;
637 
638   case Sema::TDK_SubstitutionFailure:
639     // FIXME: Destroy the template argument list?
640     Data = 0;
641     if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
642       Diag->~PartialDiagnosticAt();
643       HasDiagnostic = false;
644     }
645     break;
646 
647   // Unhandled
648   case Sema::TDK_MiscellaneousDeductionFailure:
649     break;
650   }
651 }
652 
653 PartialDiagnosticAt *
654 OverloadCandidate::DeductionFailureInfo::getSFINAEDiagnostic() {
655   if (HasDiagnostic)
656     return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
657   return 0;
658 }
659 
660 TemplateParameter
661 OverloadCandidate::DeductionFailureInfo::getTemplateParameter() {
662   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
663   case Sema::TDK_Success:
664   case Sema::TDK_Invalid:
665   case Sema::TDK_InstantiationDepth:
666   case Sema::TDK_TooManyArguments:
667   case Sema::TDK_TooFewArguments:
668   case Sema::TDK_SubstitutionFailure:
669   case Sema::TDK_NonDeducedMismatch:
670   case Sema::TDK_FailedOverloadResolution:
671     return TemplateParameter();
672 
673   case Sema::TDK_Incomplete:
674   case Sema::TDK_InvalidExplicitArguments:
675     return TemplateParameter::getFromOpaqueValue(Data);
676 
677   case Sema::TDK_Inconsistent:
678   case Sema::TDK_Underqualified:
679     return static_cast<DFIParamWithArguments*>(Data)->Param;
680 
681   // Unhandled
682   case Sema::TDK_MiscellaneousDeductionFailure:
683     break;
684   }
685 
686   return TemplateParameter();
687 }
688 
689 TemplateArgumentList *
690 OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() {
691   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
692   case Sema::TDK_Success:
693   case Sema::TDK_Invalid:
694   case Sema::TDK_InstantiationDepth:
695   case Sema::TDK_TooManyArguments:
696   case Sema::TDK_TooFewArguments:
697   case Sema::TDK_Incomplete:
698   case Sema::TDK_InvalidExplicitArguments:
699   case Sema::TDK_Inconsistent:
700   case Sema::TDK_Underqualified:
701   case Sema::TDK_NonDeducedMismatch:
702   case Sema::TDK_FailedOverloadResolution:
703     return 0;
704 
705   case Sema::TDK_SubstitutionFailure:
706     return static_cast<TemplateArgumentList*>(Data);
707 
708   // Unhandled
709   case Sema::TDK_MiscellaneousDeductionFailure:
710     break;
711   }
712 
713   return 0;
714 }
715 
716 const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() {
717   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
718   case Sema::TDK_Success:
719   case Sema::TDK_Invalid:
720   case Sema::TDK_InstantiationDepth:
721   case Sema::TDK_Incomplete:
722   case Sema::TDK_TooManyArguments:
723   case Sema::TDK_TooFewArguments:
724   case Sema::TDK_InvalidExplicitArguments:
725   case Sema::TDK_SubstitutionFailure:
726   case Sema::TDK_FailedOverloadResolution:
727     return 0;
728 
729   case Sema::TDK_Inconsistent:
730   case Sema::TDK_Underqualified:
731   case Sema::TDK_NonDeducedMismatch:
732     return &static_cast<DFIArguments*>(Data)->FirstArg;
733 
734   // Unhandled
735   case Sema::TDK_MiscellaneousDeductionFailure:
736     break;
737   }
738 
739   return 0;
740 }
741 
742 const TemplateArgument *
743 OverloadCandidate::DeductionFailureInfo::getSecondArg() {
744   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
745   case Sema::TDK_Success:
746   case Sema::TDK_Invalid:
747   case Sema::TDK_InstantiationDepth:
748   case Sema::TDK_Incomplete:
749   case Sema::TDK_TooManyArguments:
750   case Sema::TDK_TooFewArguments:
751   case Sema::TDK_InvalidExplicitArguments:
752   case Sema::TDK_SubstitutionFailure:
753   case Sema::TDK_FailedOverloadResolution:
754     return 0;
755 
756   case Sema::TDK_Inconsistent:
757   case Sema::TDK_Underqualified:
758   case Sema::TDK_NonDeducedMismatch:
759     return &static_cast<DFIArguments*>(Data)->SecondArg;
760 
761   // Unhandled
762   case Sema::TDK_MiscellaneousDeductionFailure:
763     break;
764   }
765 
766   return 0;
767 }
768 
769 Expr *
770 OverloadCandidate::DeductionFailureInfo::getExpr() {
771   if (static_cast<Sema::TemplateDeductionResult>(Result) ==
772         Sema::TDK_FailedOverloadResolution)
773     return static_cast<Expr*>(Data);
774 
775   return 0;
776 }
777 
778 void OverloadCandidateSet::destroyCandidates() {
779   for (iterator i = begin(), e = end(); i != e; ++i) {
780     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
781       i->Conversions[ii].~ImplicitConversionSequence();
782     if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
783       i->DeductionFailure.Destroy();
784   }
785 }
786 
787 void OverloadCandidateSet::clear() {
788   destroyCandidates();
789   NumInlineSequences = 0;
790   Candidates.clear();
791   Functions.clear();
792 }
793 
794 namespace {
795   class UnbridgedCastsSet {
796     struct Entry {
797       Expr **Addr;
798       Expr *Saved;
799     };
800     SmallVector<Entry, 2> Entries;
801 
802   public:
803     void save(Sema &S, Expr *&E) {
804       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
805       Entry entry = { &E, E };
806       Entries.push_back(entry);
807       E = S.stripARCUnbridgedCast(E);
808     }
809 
810     void restore() {
811       for (SmallVectorImpl<Entry>::iterator
812              i = Entries.begin(), e = Entries.end(); i != e; ++i)
813         *i->Addr = i->Saved;
814     }
815   };
816 }
817 
818 /// checkPlaceholderForOverload - Do any interesting placeholder-like
819 /// preprocessing on the given expression.
820 ///
821 /// \param unbridgedCasts a collection to which to add unbridged casts;
822 ///   without this, they will be immediately diagnosed as errors
823 ///
824 /// Return true on unrecoverable error.
825 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
826                                         UnbridgedCastsSet *unbridgedCasts = 0) {
827   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
828     // We can't handle overloaded expressions here because overload
829     // resolution might reasonably tweak them.
830     if (placeholder->getKind() == BuiltinType::Overload) return false;
831 
832     // If the context potentially accepts unbridged ARC casts, strip
833     // the unbridged cast and add it to the collection for later restoration.
834     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
835         unbridgedCasts) {
836       unbridgedCasts->save(S, E);
837       return false;
838     }
839 
840     // Go ahead and check everything else.
841     ExprResult result = S.CheckPlaceholderExpr(E);
842     if (result.isInvalid())
843       return true;
844 
845     E = result.take();
846     return false;
847   }
848 
849   // Nothing to do.
850   return false;
851 }
852 
853 /// checkArgPlaceholdersForOverload - Check a set of call operands for
854 /// placeholders.
855 static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args,
856                                             unsigned numArgs,
857                                             UnbridgedCastsSet &unbridged) {
858   for (unsigned i = 0; i != numArgs; ++i)
859     if (checkPlaceholderForOverload(S, args[i], &unbridged))
860       return true;
861 
862   return false;
863 }
864 
865 // IsOverload - Determine whether the given New declaration is an
866 // overload of the declarations in Old. This routine returns false if
867 // New and Old cannot be overloaded, e.g., if New has the same
868 // signature as some function in Old (C++ 1.3.10) or if the Old
869 // declarations aren't functions (or function templates) at all. When
870 // it does return false, MatchedDecl will point to the decl that New
871 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
872 // top of the underlying declaration.
873 //
874 // Example: Given the following input:
875 //
876 //   void f(int, float); // #1
877 //   void f(int, int); // #2
878 //   int f(int, int); // #3
879 //
880 // When we process #1, there is no previous declaration of "f",
881 // so IsOverload will not be used.
882 //
883 // When we process #2, Old contains only the FunctionDecl for #1.  By
884 // comparing the parameter types, we see that #1 and #2 are overloaded
885 // (since they have different signatures), so this routine returns
886 // false; MatchedDecl is unchanged.
887 //
888 // When we process #3, Old is an overload set containing #1 and #2. We
889 // compare the signatures of #3 to #1 (they're overloaded, so we do
890 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
891 // identical (return types of functions are not part of the
892 // signature), IsOverload returns false and MatchedDecl will be set to
893 // point to the FunctionDecl for #2.
894 //
895 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
896 // into a class by a using declaration.  The rules for whether to hide
897 // shadow declarations ignore some properties which otherwise figure
898 // into a function template's signature.
899 Sema::OverloadKind
900 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
901                     NamedDecl *&Match, bool NewIsUsingDecl) {
902   for (LookupResult::iterator I = Old.begin(), E = Old.end();
903          I != E; ++I) {
904     NamedDecl *OldD = *I;
905 
906     bool OldIsUsingDecl = false;
907     if (isa<UsingShadowDecl>(OldD)) {
908       OldIsUsingDecl = true;
909 
910       // We can always introduce two using declarations into the same
911       // context, even if they have identical signatures.
912       if (NewIsUsingDecl) continue;
913 
914       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
915     }
916 
917     // If either declaration was introduced by a using declaration,
918     // we'll need to use slightly different rules for matching.
919     // Essentially, these rules are the normal rules, except that
920     // function templates hide function templates with different
921     // return types or template parameter lists.
922     bool UseMemberUsingDeclRules =
923       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
924       !New->getFriendObjectKind();
925 
926     if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
927       if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
928         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
929           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
930           continue;
931         }
932 
933         Match = *I;
934         return Ovl_Match;
935       }
936     } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
937       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
938         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
939           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
940           continue;
941         }
942 
943         if (!shouldLinkPossiblyHiddenDecl(*I, New))
944           continue;
945 
946         Match = *I;
947         return Ovl_Match;
948       }
949     } else if (isa<UsingDecl>(OldD)) {
950       // We can overload with these, which can show up when doing
951       // redeclaration checks for UsingDecls.
952       assert(Old.getLookupKind() == LookupUsingDeclName);
953     } else if (isa<TagDecl>(OldD)) {
954       // We can always overload with tags by hiding them.
955     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
956       // Optimistically assume that an unresolved using decl will
957       // overload; if it doesn't, we'll have to diagnose during
958       // template instantiation.
959     } else {
960       // (C++ 13p1):
961       //   Only function declarations can be overloaded; object and type
962       //   declarations cannot be overloaded.
963       Match = *I;
964       return Ovl_NonFunction;
965     }
966   }
967 
968   return Ovl_Overload;
969 }
970 
971 static bool canBeOverloaded(const FunctionDecl &D) {
972   if (D.getAttr<OverloadableAttr>())
973     return true;
974   if (D.isExternC())
975     return false;
976 
977   // Main cannot be overloaded (basic.start.main).
978   if (D.isMain())
979     return false;
980 
981   return true;
982 }
983 
984 static bool shouldTryToOverload(Sema &S, FunctionDecl *New, FunctionDecl *Old,
985                                 bool UseUsingDeclRules) {
986   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
987   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
988 
989   // C++ [temp.fct]p2:
990   //   A function template can be overloaded with other function templates
991   //   and with normal (non-template) functions.
992   if ((OldTemplate == 0) != (NewTemplate == 0))
993     return true;
994 
995   // Is the function New an overload of the function Old?
996   QualType OldQType = S.Context.getCanonicalType(Old->getType());
997   QualType NewQType = S.Context.getCanonicalType(New->getType());
998 
999   // Compare the signatures (C++ 1.3.10) of the two functions to
1000   // determine whether they are overloads. If we find any mismatch
1001   // in the signature, they are overloads.
1002 
1003   // If either of these functions is a K&R-style function (no
1004   // prototype), then we consider them to have matching signatures.
1005   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
1006       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
1007     return false;
1008 
1009   const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
1010   const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
1011 
1012   // The signature of a function includes the types of its
1013   // parameters (C++ 1.3.10), which includes the presence or absence
1014   // of the ellipsis; see C++ DR 357).
1015   if (OldQType != NewQType &&
1016       (OldType->getNumArgs() != NewType->getNumArgs() ||
1017        OldType->isVariadic() != NewType->isVariadic() ||
1018        !S.FunctionArgTypesAreEqual(OldType, NewType)))
1019     return true;
1020 
1021   // C++ [temp.over.link]p4:
1022   //   The signature of a function template consists of its function
1023   //   signature, its return type and its template parameter list. The names
1024   //   of the template parameters are significant only for establishing the
1025   //   relationship between the template parameters and the rest of the
1026   //   signature.
1027   //
1028   // We check the return type and template parameter lists for function
1029   // templates first; the remaining checks follow.
1030   //
1031   // However, we don't consider either of these when deciding whether
1032   // a member introduced by a shadow declaration is hidden.
1033   if (!UseUsingDeclRules && NewTemplate &&
1034       (!S.TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
1035                                          OldTemplate->getTemplateParameters(),
1036                                          false, S.TPL_TemplateMatch) ||
1037        OldType->getResultType() != NewType->getResultType()))
1038     return true;
1039 
1040   // If the function is a class member, its signature includes the
1041   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
1042   //
1043   // As part of this, also check whether one of the member functions
1044   // is static, in which case they are not overloads (C++
1045   // 13.1p2). While not part of the definition of the signature,
1046   // this check is important to determine whether these functions
1047   // can be overloaded.
1048   CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
1049   CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
1050   if (OldMethod && NewMethod &&
1051       !OldMethod->isStatic() && !NewMethod->isStatic()) {
1052     if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
1053       if (!UseUsingDeclRules &&
1054           (OldMethod->getRefQualifier() == RQ_None ||
1055            NewMethod->getRefQualifier() == RQ_None)) {
1056         // C++0x [over.load]p2:
1057         //   - Member function declarations with the same name and the same
1058         //     parameter-type-list as well as member function template
1059         //     declarations with the same name, the same parameter-type-list, and
1060         //     the same template parameter lists cannot be overloaded if any of
1061         //     them, but not all, have a ref-qualifier (8.3.5).
1062         S.Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1063           << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1064         S.Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1065       }
1066       return true;
1067     }
1068 
1069     // We may not have applied the implicit const for a constexpr member
1070     // function yet (because we haven't yet resolved whether this is a static
1071     // or non-static member function). Add it now, on the assumption that this
1072     // is a redeclaration of OldMethod.
1073     unsigned NewQuals = NewMethod->getTypeQualifiers();
1074     if (NewMethod->isConstexpr() && !isa<CXXConstructorDecl>(NewMethod))
1075       NewQuals |= Qualifiers::Const;
1076     if (OldMethod->getTypeQualifiers() != NewQuals)
1077       return true;
1078   }
1079 
1080   // The signatures match; this is not an overload.
1081   return false;
1082 }
1083 
1084 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
1085                       bool UseUsingDeclRules) {
1086   if (!shouldTryToOverload(*this, New, Old, UseUsingDeclRules))
1087     return false;
1088 
1089   // If both of the functions are extern "C", then they are not
1090   // overloads.
1091   if (!canBeOverloaded(*Old) && !canBeOverloaded(*New))
1092     return false;
1093 
1094   return true;
1095 }
1096 
1097 /// \brief Checks availability of the function depending on the current
1098 /// function context. Inside an unavailable function, unavailability is ignored.
1099 ///
1100 /// \returns true if \arg FD is unavailable and current context is inside
1101 /// an available function, false otherwise.
1102 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1103   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1104 }
1105 
1106 /// \brief Tries a user-defined conversion from From to ToType.
1107 ///
1108 /// Produces an implicit conversion sequence for when a standard conversion
1109 /// is not an option. See TryImplicitConversion for more information.
1110 static ImplicitConversionSequence
1111 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1112                          bool SuppressUserConversions,
1113                          bool AllowExplicit,
1114                          bool InOverloadResolution,
1115                          bool CStyle,
1116                          bool AllowObjCWritebackConversion) {
1117   ImplicitConversionSequence ICS;
1118 
1119   if (SuppressUserConversions) {
1120     // We're not in the case above, so there is no conversion that
1121     // we can perform.
1122     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1123     return ICS;
1124   }
1125 
1126   // Attempt user-defined conversion.
1127   OverloadCandidateSet Conversions(From->getExprLoc());
1128   OverloadingResult UserDefResult
1129     = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1130                               AllowExplicit);
1131 
1132   if (UserDefResult == OR_Success) {
1133     ICS.setUserDefined();
1134     // C++ [over.ics.user]p4:
1135     //   A conversion of an expression of class type to the same class
1136     //   type is given Exact Match rank, and a conversion of an
1137     //   expression of class type to a base class of that type is
1138     //   given Conversion rank, in spite of the fact that a copy
1139     //   constructor (i.e., a user-defined conversion function) is
1140     //   called for those cases.
1141     if (CXXConstructorDecl *Constructor
1142           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1143       QualType FromCanon
1144         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1145       QualType ToCanon
1146         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1147       if (Constructor->isCopyConstructor() &&
1148           (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1149         // Turn this into a "standard" conversion sequence, so that it
1150         // gets ranked with standard conversion sequences.
1151         ICS.setStandard();
1152         ICS.Standard.setAsIdentityConversion();
1153         ICS.Standard.setFromType(From->getType());
1154         ICS.Standard.setAllToTypes(ToType);
1155         ICS.Standard.CopyConstructor = Constructor;
1156         if (ToCanon != FromCanon)
1157           ICS.Standard.Second = ICK_Derived_To_Base;
1158       }
1159     }
1160 
1161     // C++ [over.best.ics]p4:
1162     //   However, when considering the argument of a user-defined
1163     //   conversion function that is a candidate by 13.3.1.3 when
1164     //   invoked for the copying of the temporary in the second step
1165     //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1166     //   13.3.1.6 in all cases, only standard conversion sequences and
1167     //   ellipsis conversion sequences are allowed.
1168     if (SuppressUserConversions && ICS.isUserDefined()) {
1169       ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1170     }
1171   } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1172     ICS.setAmbiguous();
1173     ICS.Ambiguous.setFromType(From->getType());
1174     ICS.Ambiguous.setToType(ToType);
1175     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1176          Cand != Conversions.end(); ++Cand)
1177       if (Cand->Viable)
1178         ICS.Ambiguous.addConversion(Cand->Function);
1179   } else {
1180     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1181   }
1182 
1183   return ICS;
1184 }
1185 
1186 /// TryImplicitConversion - Attempt to perform an implicit conversion
1187 /// from the given expression (Expr) to the given type (ToType). This
1188 /// function returns an implicit conversion sequence that can be used
1189 /// to perform the initialization. Given
1190 ///
1191 ///   void f(float f);
1192 ///   void g(int i) { f(i); }
1193 ///
1194 /// this routine would produce an implicit conversion sequence to
1195 /// describe the initialization of f from i, which will be a standard
1196 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1197 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1198 //
1199 /// Note that this routine only determines how the conversion can be
1200 /// performed; it does not actually perform the conversion. As such,
1201 /// it will not produce any diagnostics if no conversion is available,
1202 /// but will instead return an implicit conversion sequence of kind
1203 /// "BadConversion".
1204 ///
1205 /// If @p SuppressUserConversions, then user-defined conversions are
1206 /// not permitted.
1207 /// If @p AllowExplicit, then explicit user-defined conversions are
1208 /// permitted.
1209 ///
1210 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1211 /// writeback conversion, which allows __autoreleasing id* parameters to
1212 /// be initialized with __strong id* or __weak id* arguments.
1213 static ImplicitConversionSequence
1214 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1215                       bool SuppressUserConversions,
1216                       bool AllowExplicit,
1217                       bool InOverloadResolution,
1218                       bool CStyle,
1219                       bool AllowObjCWritebackConversion) {
1220   ImplicitConversionSequence ICS;
1221   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1222                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1223     ICS.setStandard();
1224     return ICS;
1225   }
1226 
1227   if (!S.getLangOpts().CPlusPlus) {
1228     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1229     return ICS;
1230   }
1231 
1232   // C++ [over.ics.user]p4:
1233   //   A conversion of an expression of class type to the same class
1234   //   type is given Exact Match rank, and a conversion of an
1235   //   expression of class type to a base class of that type is
1236   //   given Conversion rank, in spite of the fact that a copy/move
1237   //   constructor (i.e., a user-defined conversion function) is
1238   //   called for those cases.
1239   QualType FromType = From->getType();
1240   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1241       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1242        S.IsDerivedFrom(FromType, ToType))) {
1243     ICS.setStandard();
1244     ICS.Standard.setAsIdentityConversion();
1245     ICS.Standard.setFromType(FromType);
1246     ICS.Standard.setAllToTypes(ToType);
1247 
1248     // We don't actually check at this point whether there is a valid
1249     // copy/move constructor, since overloading just assumes that it
1250     // exists. When we actually perform initialization, we'll find the
1251     // appropriate constructor to copy the returned object, if needed.
1252     ICS.Standard.CopyConstructor = 0;
1253 
1254     // Determine whether this is considered a derived-to-base conversion.
1255     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1256       ICS.Standard.Second = ICK_Derived_To_Base;
1257 
1258     return ICS;
1259   }
1260 
1261   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1262                                   AllowExplicit, InOverloadResolution, CStyle,
1263                                   AllowObjCWritebackConversion);
1264 }
1265 
1266 ImplicitConversionSequence
1267 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1268                             bool SuppressUserConversions,
1269                             bool AllowExplicit,
1270                             bool InOverloadResolution,
1271                             bool CStyle,
1272                             bool AllowObjCWritebackConversion) {
1273   return clang::TryImplicitConversion(*this, From, ToType,
1274                                       SuppressUserConversions, AllowExplicit,
1275                                       InOverloadResolution, CStyle,
1276                                       AllowObjCWritebackConversion);
1277 }
1278 
1279 /// PerformImplicitConversion - Perform an implicit conversion of the
1280 /// expression From to the type ToType. Returns the
1281 /// converted expression. Flavor is the kind of conversion we're
1282 /// performing, used in the error message. If @p AllowExplicit,
1283 /// explicit user-defined conversions are permitted.
1284 ExprResult
1285 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1286                                 AssignmentAction Action, bool AllowExplicit) {
1287   ImplicitConversionSequence ICS;
1288   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1289 }
1290 
1291 ExprResult
1292 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1293                                 AssignmentAction Action, bool AllowExplicit,
1294                                 ImplicitConversionSequence& ICS) {
1295   if (checkPlaceholderForOverload(*this, From))
1296     return ExprError();
1297 
1298   // Objective-C ARC: Determine whether we will allow the writeback conversion.
1299   bool AllowObjCWritebackConversion
1300     = getLangOpts().ObjCAutoRefCount &&
1301       (Action == AA_Passing || Action == AA_Sending);
1302 
1303   ICS = clang::TryImplicitConversion(*this, From, ToType,
1304                                      /*SuppressUserConversions=*/false,
1305                                      AllowExplicit,
1306                                      /*InOverloadResolution=*/false,
1307                                      /*CStyle=*/false,
1308                                      AllowObjCWritebackConversion);
1309   return PerformImplicitConversion(From, ToType, ICS, Action);
1310 }
1311 
1312 /// \brief Determine whether the conversion from FromType to ToType is a valid
1313 /// conversion that strips "noreturn" off the nested function type.
1314 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1315                                 QualType &ResultTy) {
1316   if (Context.hasSameUnqualifiedType(FromType, ToType))
1317     return false;
1318 
1319   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1320   // where F adds one of the following at most once:
1321   //   - a pointer
1322   //   - a member pointer
1323   //   - a block pointer
1324   CanQualType CanTo = Context.getCanonicalType(ToType);
1325   CanQualType CanFrom = Context.getCanonicalType(FromType);
1326   Type::TypeClass TyClass = CanTo->getTypeClass();
1327   if (TyClass != CanFrom->getTypeClass()) return false;
1328   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1329     if (TyClass == Type::Pointer) {
1330       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1331       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1332     } else if (TyClass == Type::BlockPointer) {
1333       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1334       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1335     } else if (TyClass == Type::MemberPointer) {
1336       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1337       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1338     } else {
1339       return false;
1340     }
1341 
1342     TyClass = CanTo->getTypeClass();
1343     if (TyClass != CanFrom->getTypeClass()) return false;
1344     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1345       return false;
1346   }
1347 
1348   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1349   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1350   if (!EInfo.getNoReturn()) return false;
1351 
1352   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1353   assert(QualType(FromFn, 0).isCanonical());
1354   if (QualType(FromFn, 0) != CanTo) return false;
1355 
1356   ResultTy = ToType;
1357   return true;
1358 }
1359 
1360 /// \brief Determine whether the conversion from FromType to ToType is a valid
1361 /// vector conversion.
1362 ///
1363 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1364 /// conversion.
1365 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1366                                QualType ToType, ImplicitConversionKind &ICK) {
1367   // We need at least one of these types to be a vector type to have a vector
1368   // conversion.
1369   if (!ToType->isVectorType() && !FromType->isVectorType())
1370     return false;
1371 
1372   // Identical types require no conversions.
1373   if (Context.hasSameUnqualifiedType(FromType, ToType))
1374     return false;
1375 
1376   // There are no conversions between extended vector types, only identity.
1377   if (ToType->isExtVectorType()) {
1378     // There are no conversions between extended vector types other than the
1379     // identity conversion.
1380     if (FromType->isExtVectorType())
1381       return false;
1382 
1383     // Vector splat from any arithmetic type to a vector.
1384     if (FromType->isArithmeticType()) {
1385       ICK = ICK_Vector_Splat;
1386       return true;
1387     }
1388   }
1389 
1390   // We can perform the conversion between vector types in the following cases:
1391   // 1)vector types are equivalent AltiVec and GCC vector types
1392   // 2)lax vector conversions are permitted and the vector types are of the
1393   //   same size
1394   if (ToType->isVectorType() && FromType->isVectorType()) {
1395     if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1396         (Context.getLangOpts().LaxVectorConversions &&
1397          (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1398       ICK = ICK_Vector_Conversion;
1399       return true;
1400     }
1401   }
1402 
1403   return false;
1404 }
1405 
1406 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1407                                 bool InOverloadResolution,
1408                                 StandardConversionSequence &SCS,
1409                                 bool CStyle);
1410 
1411 /// IsStandardConversion - Determines whether there is a standard
1412 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1413 /// expression From to the type ToType. Standard conversion sequences
1414 /// only consider non-class types; for conversions that involve class
1415 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1416 /// contain the standard conversion sequence required to perform this
1417 /// conversion and this routine will return true. Otherwise, this
1418 /// routine will return false and the value of SCS is unspecified.
1419 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1420                                  bool InOverloadResolution,
1421                                  StandardConversionSequence &SCS,
1422                                  bool CStyle,
1423                                  bool AllowObjCWritebackConversion) {
1424   QualType FromType = From->getType();
1425 
1426   // Standard conversions (C++ [conv])
1427   SCS.setAsIdentityConversion();
1428   SCS.DeprecatedStringLiteralToCharPtr = false;
1429   SCS.IncompatibleObjC = false;
1430   SCS.setFromType(FromType);
1431   SCS.CopyConstructor = 0;
1432 
1433   // There are no standard conversions for class types in C++, so
1434   // abort early. When overloading in C, however, we do permit
1435   if (FromType->isRecordType() || ToType->isRecordType()) {
1436     if (S.getLangOpts().CPlusPlus)
1437       return false;
1438 
1439     // When we're overloading in C, we allow, as standard conversions,
1440   }
1441 
1442   // The first conversion can be an lvalue-to-rvalue conversion,
1443   // array-to-pointer conversion, or function-to-pointer conversion
1444   // (C++ 4p1).
1445 
1446   if (FromType == S.Context.OverloadTy) {
1447     DeclAccessPair AccessPair;
1448     if (FunctionDecl *Fn
1449           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1450                                                  AccessPair)) {
1451       // We were able to resolve the address of the overloaded function,
1452       // so we can convert to the type of that function.
1453       FromType = Fn->getType();
1454 
1455       // we can sometimes resolve &foo<int> regardless of ToType, so check
1456       // if the type matches (identity) or we are converting to bool
1457       if (!S.Context.hasSameUnqualifiedType(
1458                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1459         QualType resultTy;
1460         // if the function type matches except for [[noreturn]], it's ok
1461         if (!S.IsNoReturnConversion(FromType,
1462               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1463           // otherwise, only a boolean conversion is standard
1464           if (!ToType->isBooleanType())
1465             return false;
1466       }
1467 
1468       // Check if the "from" expression is taking the address of an overloaded
1469       // function and recompute the FromType accordingly. Take advantage of the
1470       // fact that non-static member functions *must* have such an address-of
1471       // expression.
1472       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1473       if (Method && !Method->isStatic()) {
1474         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1475                "Non-unary operator on non-static member address");
1476         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1477                == UO_AddrOf &&
1478                "Non-address-of operator on non-static member address");
1479         const Type *ClassType
1480           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1481         FromType = S.Context.getMemberPointerType(FromType, ClassType);
1482       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1483         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1484                UO_AddrOf &&
1485                "Non-address-of operator for overloaded function expression");
1486         FromType = S.Context.getPointerType(FromType);
1487       }
1488 
1489       // Check that we've computed the proper type after overload resolution.
1490       assert(S.Context.hasSameType(
1491         FromType,
1492         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1493     } else {
1494       return false;
1495     }
1496   }
1497   // Lvalue-to-rvalue conversion (C++11 4.1):
1498   //   A glvalue (3.10) of a non-function, non-array type T can
1499   //   be converted to a prvalue.
1500   bool argIsLValue = From->isGLValue();
1501   if (argIsLValue &&
1502       !FromType->isFunctionType() && !FromType->isArrayType() &&
1503       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1504     SCS.First = ICK_Lvalue_To_Rvalue;
1505 
1506     // C11 6.3.2.1p2:
1507     //   ... if the lvalue has atomic type, the value has the non-atomic version
1508     //   of the type of the lvalue ...
1509     if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1510       FromType = Atomic->getValueType();
1511 
1512     // If T is a non-class type, the type of the rvalue is the
1513     // cv-unqualified version of T. Otherwise, the type of the rvalue
1514     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1515     // just strip the qualifiers because they don't matter.
1516     FromType = FromType.getUnqualifiedType();
1517   } else if (FromType->isArrayType()) {
1518     // Array-to-pointer conversion (C++ 4.2)
1519     SCS.First = ICK_Array_To_Pointer;
1520 
1521     // An lvalue or rvalue of type "array of N T" or "array of unknown
1522     // bound of T" can be converted to an rvalue of type "pointer to
1523     // T" (C++ 4.2p1).
1524     FromType = S.Context.getArrayDecayedType(FromType);
1525 
1526     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1527       // This conversion is deprecated. (C++ D.4).
1528       SCS.DeprecatedStringLiteralToCharPtr = true;
1529 
1530       // For the purpose of ranking in overload resolution
1531       // (13.3.3.1.1), this conversion is considered an
1532       // array-to-pointer conversion followed by a qualification
1533       // conversion (4.4). (C++ 4.2p2)
1534       SCS.Second = ICK_Identity;
1535       SCS.Third = ICK_Qualification;
1536       SCS.QualificationIncludesObjCLifetime = false;
1537       SCS.setAllToTypes(FromType);
1538       return true;
1539     }
1540   } else if (FromType->isFunctionType() && argIsLValue) {
1541     // Function-to-pointer conversion (C++ 4.3).
1542     SCS.First = ICK_Function_To_Pointer;
1543 
1544     // An lvalue of function type T can be converted to an rvalue of
1545     // type "pointer to T." The result is a pointer to the
1546     // function. (C++ 4.3p1).
1547     FromType = S.Context.getPointerType(FromType);
1548   } else {
1549     // We don't require any conversions for the first step.
1550     SCS.First = ICK_Identity;
1551   }
1552   SCS.setToType(0, FromType);
1553 
1554   // The second conversion can be an integral promotion, floating
1555   // point promotion, integral conversion, floating point conversion,
1556   // floating-integral conversion, pointer conversion,
1557   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1558   // For overloading in C, this can also be a "compatible-type"
1559   // conversion.
1560   bool IncompatibleObjC = false;
1561   ImplicitConversionKind SecondICK = ICK_Identity;
1562   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1563     // The unqualified versions of the types are the same: there's no
1564     // conversion to do.
1565     SCS.Second = ICK_Identity;
1566   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1567     // Integral promotion (C++ 4.5).
1568     SCS.Second = ICK_Integral_Promotion;
1569     FromType = ToType.getUnqualifiedType();
1570   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1571     // Floating point promotion (C++ 4.6).
1572     SCS.Second = ICK_Floating_Promotion;
1573     FromType = ToType.getUnqualifiedType();
1574   } else if (S.IsComplexPromotion(FromType, ToType)) {
1575     // Complex promotion (Clang extension)
1576     SCS.Second = ICK_Complex_Promotion;
1577     FromType = ToType.getUnqualifiedType();
1578   } else if (ToType->isBooleanType() &&
1579              (FromType->isArithmeticType() ||
1580               FromType->isAnyPointerType() ||
1581               FromType->isBlockPointerType() ||
1582               FromType->isMemberPointerType() ||
1583               FromType->isNullPtrType())) {
1584     // Boolean conversions (C++ 4.12).
1585     SCS.Second = ICK_Boolean_Conversion;
1586     FromType = S.Context.BoolTy;
1587   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1588              ToType->isIntegralType(S.Context)) {
1589     // Integral conversions (C++ 4.7).
1590     SCS.Second = ICK_Integral_Conversion;
1591     FromType = ToType.getUnqualifiedType();
1592   } else if (FromType->isAnyComplexType() && ToType->isComplexType()) {
1593     // Complex conversions (C99 6.3.1.6)
1594     SCS.Second = ICK_Complex_Conversion;
1595     FromType = ToType.getUnqualifiedType();
1596   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1597              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1598     // Complex-real conversions (C99 6.3.1.7)
1599     SCS.Second = ICK_Complex_Real;
1600     FromType = ToType.getUnqualifiedType();
1601   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1602     // Floating point conversions (C++ 4.8).
1603     SCS.Second = ICK_Floating_Conversion;
1604     FromType = ToType.getUnqualifiedType();
1605   } else if ((FromType->isRealFloatingType() &&
1606               ToType->isIntegralType(S.Context)) ||
1607              (FromType->isIntegralOrUnscopedEnumerationType() &&
1608               ToType->isRealFloatingType())) {
1609     // Floating-integral conversions (C++ 4.9).
1610     SCS.Second = ICK_Floating_Integral;
1611     FromType = ToType.getUnqualifiedType();
1612   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1613     SCS.Second = ICK_Block_Pointer_Conversion;
1614   } else if (AllowObjCWritebackConversion &&
1615              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1616     SCS.Second = ICK_Writeback_Conversion;
1617   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1618                                    FromType, IncompatibleObjC)) {
1619     // Pointer conversions (C++ 4.10).
1620     SCS.Second = ICK_Pointer_Conversion;
1621     SCS.IncompatibleObjC = IncompatibleObjC;
1622     FromType = FromType.getUnqualifiedType();
1623   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1624                                          InOverloadResolution, FromType)) {
1625     // Pointer to member conversions (4.11).
1626     SCS.Second = ICK_Pointer_Member;
1627   } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1628     SCS.Second = SecondICK;
1629     FromType = ToType.getUnqualifiedType();
1630   } else if (!S.getLangOpts().CPlusPlus &&
1631              S.Context.typesAreCompatible(ToType, FromType)) {
1632     // Compatible conversions (Clang extension for C function overloading)
1633     SCS.Second = ICK_Compatible_Conversion;
1634     FromType = ToType.getUnqualifiedType();
1635   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1636     // Treat a conversion that strips "noreturn" as an identity conversion.
1637     SCS.Second = ICK_NoReturn_Adjustment;
1638   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1639                                              InOverloadResolution,
1640                                              SCS, CStyle)) {
1641     SCS.Second = ICK_TransparentUnionConversion;
1642     FromType = ToType;
1643   } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1644                                  CStyle)) {
1645     // tryAtomicConversion has updated the standard conversion sequence
1646     // appropriately.
1647     return true;
1648   } else if (ToType->isEventT() &&
1649              From->isIntegerConstantExpr(S.getASTContext()) &&
1650              (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
1651     SCS.Second = ICK_Zero_Event_Conversion;
1652     FromType = ToType;
1653   } else {
1654     // No second conversion required.
1655     SCS.Second = ICK_Identity;
1656   }
1657   SCS.setToType(1, FromType);
1658 
1659   QualType CanonFrom;
1660   QualType CanonTo;
1661   // The third conversion can be a qualification conversion (C++ 4p1).
1662   bool ObjCLifetimeConversion;
1663   if (S.IsQualificationConversion(FromType, ToType, CStyle,
1664                                   ObjCLifetimeConversion)) {
1665     SCS.Third = ICK_Qualification;
1666     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1667     FromType = ToType;
1668     CanonFrom = S.Context.getCanonicalType(FromType);
1669     CanonTo = S.Context.getCanonicalType(ToType);
1670   } else {
1671     // No conversion required
1672     SCS.Third = ICK_Identity;
1673 
1674     // C++ [over.best.ics]p6:
1675     //   [...] Any difference in top-level cv-qualification is
1676     //   subsumed by the initialization itself and does not constitute
1677     //   a conversion. [...]
1678     CanonFrom = S.Context.getCanonicalType(FromType);
1679     CanonTo = S.Context.getCanonicalType(ToType);
1680     if (CanonFrom.getLocalUnqualifiedType()
1681                                        == CanonTo.getLocalUnqualifiedType() &&
1682         CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
1683       FromType = ToType;
1684       CanonFrom = CanonTo;
1685     }
1686   }
1687   SCS.setToType(2, FromType);
1688 
1689   // If we have not converted the argument type to the parameter type,
1690   // this is a bad conversion sequence.
1691   if (CanonFrom != CanonTo)
1692     return false;
1693 
1694   return true;
1695 }
1696 
1697 static bool
1698 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1699                                      QualType &ToType,
1700                                      bool InOverloadResolution,
1701                                      StandardConversionSequence &SCS,
1702                                      bool CStyle) {
1703 
1704   const RecordType *UT = ToType->getAsUnionType();
1705   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1706     return false;
1707   // The field to initialize within the transparent union.
1708   RecordDecl *UD = UT->getDecl();
1709   // It's compatible if the expression matches any of the fields.
1710   for (RecordDecl::field_iterator it = UD->field_begin(),
1711        itend = UD->field_end();
1712        it != itend; ++it) {
1713     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1714                              CStyle, /*ObjCWritebackConversion=*/false)) {
1715       ToType = it->getType();
1716       return true;
1717     }
1718   }
1719   return false;
1720 }
1721 
1722 /// IsIntegralPromotion - Determines whether the conversion from the
1723 /// expression From (whose potentially-adjusted type is FromType) to
1724 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1725 /// sets PromotedType to the promoted type.
1726 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1727   const BuiltinType *To = ToType->getAs<BuiltinType>();
1728   // All integers are built-in.
1729   if (!To) {
1730     return false;
1731   }
1732 
1733   // An rvalue of type char, signed char, unsigned char, short int, or
1734   // unsigned short int can be converted to an rvalue of type int if
1735   // int can represent all the values of the source type; otherwise,
1736   // the source rvalue can be converted to an rvalue of type unsigned
1737   // int (C++ 4.5p1).
1738   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1739       !FromType->isEnumeralType()) {
1740     if (// We can promote any signed, promotable integer type to an int
1741         (FromType->isSignedIntegerType() ||
1742          // We can promote any unsigned integer type whose size is
1743          // less than int to an int.
1744          (!FromType->isSignedIntegerType() &&
1745           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1746       return To->getKind() == BuiltinType::Int;
1747     }
1748 
1749     return To->getKind() == BuiltinType::UInt;
1750   }
1751 
1752   // C++11 [conv.prom]p3:
1753   //   A prvalue of an unscoped enumeration type whose underlying type is not
1754   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1755   //   following types that can represent all the values of the enumeration
1756   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1757   //   unsigned int, long int, unsigned long int, long long int, or unsigned
1758   //   long long int. If none of the types in that list can represent all the
1759   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1760   //   type can be converted to an rvalue a prvalue of the extended integer type
1761   //   with lowest integer conversion rank (4.13) greater than the rank of long
1762   //   long in which all the values of the enumeration can be represented. If
1763   //   there are two such extended types, the signed one is chosen.
1764   // C++11 [conv.prom]p4:
1765   //   A prvalue of an unscoped enumeration type whose underlying type is fixed
1766   //   can be converted to a prvalue of its underlying type. Moreover, if
1767   //   integral promotion can be applied to its underlying type, a prvalue of an
1768   //   unscoped enumeration type whose underlying type is fixed can also be
1769   //   converted to a prvalue of the promoted underlying type.
1770   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1771     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1772     // provided for a scoped enumeration.
1773     if (FromEnumType->getDecl()->isScoped())
1774       return false;
1775 
1776     // We can perform an integral promotion to the underlying type of the enum,
1777     // even if that's not the promoted type.
1778     if (FromEnumType->getDecl()->isFixed()) {
1779       QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1780       return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1781              IsIntegralPromotion(From, Underlying, ToType);
1782     }
1783 
1784     // We have already pre-calculated the promotion type, so this is trivial.
1785     if (ToType->isIntegerType() &&
1786         !RequireCompleteType(From->getLocStart(), FromType, 0))
1787       return Context.hasSameUnqualifiedType(ToType,
1788                                 FromEnumType->getDecl()->getPromotionType());
1789   }
1790 
1791   // C++0x [conv.prom]p2:
1792   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1793   //   to an rvalue a prvalue of the first of the following types that can
1794   //   represent all the values of its underlying type: int, unsigned int,
1795   //   long int, unsigned long int, long long int, or unsigned long long int.
1796   //   If none of the types in that list can represent all the values of its
1797   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1798   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1799   //   type.
1800   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1801       ToType->isIntegerType()) {
1802     // Determine whether the type we're converting from is signed or
1803     // unsigned.
1804     bool FromIsSigned = FromType->isSignedIntegerType();
1805     uint64_t FromSize = Context.getTypeSize(FromType);
1806 
1807     // The types we'll try to promote to, in the appropriate
1808     // order. Try each of these types.
1809     QualType PromoteTypes[6] = {
1810       Context.IntTy, Context.UnsignedIntTy,
1811       Context.LongTy, Context.UnsignedLongTy ,
1812       Context.LongLongTy, Context.UnsignedLongLongTy
1813     };
1814     for (int Idx = 0; Idx < 6; ++Idx) {
1815       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1816       if (FromSize < ToSize ||
1817           (FromSize == ToSize &&
1818            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1819         // We found the type that we can promote to. If this is the
1820         // type we wanted, we have a promotion. Otherwise, no
1821         // promotion.
1822         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1823       }
1824     }
1825   }
1826 
1827   // An rvalue for an integral bit-field (9.6) can be converted to an
1828   // rvalue of type int if int can represent all the values of the
1829   // bit-field; otherwise, it can be converted to unsigned int if
1830   // unsigned int can represent all the values of the bit-field. If
1831   // the bit-field is larger yet, no integral promotion applies to
1832   // it. If the bit-field has an enumerated type, it is treated as any
1833   // other value of that type for promotion purposes (C++ 4.5p3).
1834   // FIXME: We should delay checking of bit-fields until we actually perform the
1835   // conversion.
1836   using llvm::APSInt;
1837   if (From)
1838     if (FieldDecl *MemberDecl = From->getBitField()) {
1839       APSInt BitWidth;
1840       if (FromType->isIntegralType(Context) &&
1841           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1842         APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1843         ToSize = Context.getTypeSize(ToType);
1844 
1845         // Are we promoting to an int from a bitfield that fits in an int?
1846         if (BitWidth < ToSize ||
1847             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1848           return To->getKind() == BuiltinType::Int;
1849         }
1850 
1851         // Are we promoting to an unsigned int from an unsigned bitfield
1852         // that fits into an unsigned int?
1853         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1854           return To->getKind() == BuiltinType::UInt;
1855         }
1856 
1857         return false;
1858       }
1859     }
1860 
1861   // An rvalue of type bool can be converted to an rvalue of type int,
1862   // with false becoming zero and true becoming one (C++ 4.5p4).
1863   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1864     return true;
1865   }
1866 
1867   return false;
1868 }
1869 
1870 /// IsFloatingPointPromotion - Determines whether the conversion from
1871 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1872 /// returns true and sets PromotedType to the promoted type.
1873 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1874   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1875     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1876       /// An rvalue of type float can be converted to an rvalue of type
1877       /// double. (C++ 4.6p1).
1878       if (FromBuiltin->getKind() == BuiltinType::Float &&
1879           ToBuiltin->getKind() == BuiltinType::Double)
1880         return true;
1881 
1882       // C99 6.3.1.5p1:
1883       //   When a float is promoted to double or long double, or a
1884       //   double is promoted to long double [...].
1885       if (!getLangOpts().CPlusPlus &&
1886           (FromBuiltin->getKind() == BuiltinType::Float ||
1887            FromBuiltin->getKind() == BuiltinType::Double) &&
1888           (ToBuiltin->getKind() == BuiltinType::LongDouble))
1889         return true;
1890 
1891       // Half can be promoted to float.
1892       if (!getLangOpts().NativeHalfType &&
1893            FromBuiltin->getKind() == BuiltinType::Half &&
1894           ToBuiltin->getKind() == BuiltinType::Float)
1895         return true;
1896     }
1897 
1898   return false;
1899 }
1900 
1901 /// \brief Determine if a conversion is a complex promotion.
1902 ///
1903 /// A complex promotion is defined as a complex -> complex conversion
1904 /// where the conversion between the underlying real types is a
1905 /// floating-point or integral promotion.
1906 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1907   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1908   if (!FromComplex)
1909     return false;
1910 
1911   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1912   if (!ToComplex)
1913     return false;
1914 
1915   return IsFloatingPointPromotion(FromComplex->getElementType(),
1916                                   ToComplex->getElementType()) ||
1917     IsIntegralPromotion(0, FromComplex->getElementType(),
1918                         ToComplex->getElementType());
1919 }
1920 
1921 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1922 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1923 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1924 /// if non-empty, will be a pointer to ToType that may or may not have
1925 /// the right set of qualifiers on its pointee.
1926 ///
1927 static QualType
1928 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1929                                    QualType ToPointee, QualType ToType,
1930                                    ASTContext &Context,
1931                                    bool StripObjCLifetime = false) {
1932   assert((FromPtr->getTypeClass() == Type::Pointer ||
1933           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1934          "Invalid similarly-qualified pointer type");
1935 
1936   /// Conversions to 'id' subsume cv-qualifier conversions.
1937   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1938     return ToType.getUnqualifiedType();
1939 
1940   QualType CanonFromPointee
1941     = Context.getCanonicalType(FromPtr->getPointeeType());
1942   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1943   Qualifiers Quals = CanonFromPointee.getQualifiers();
1944 
1945   if (StripObjCLifetime)
1946     Quals.removeObjCLifetime();
1947 
1948   // Exact qualifier match -> return the pointer type we're converting to.
1949   if (CanonToPointee.getLocalQualifiers() == Quals) {
1950     // ToType is exactly what we need. Return it.
1951     if (!ToType.isNull())
1952       return ToType.getUnqualifiedType();
1953 
1954     // Build a pointer to ToPointee. It has the right qualifiers
1955     // already.
1956     if (isa<ObjCObjectPointerType>(ToType))
1957       return Context.getObjCObjectPointerType(ToPointee);
1958     return Context.getPointerType(ToPointee);
1959   }
1960 
1961   // Just build a canonical type that has the right qualifiers.
1962   QualType QualifiedCanonToPointee
1963     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1964 
1965   if (isa<ObjCObjectPointerType>(ToType))
1966     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1967   return Context.getPointerType(QualifiedCanonToPointee);
1968 }
1969 
1970 static bool isNullPointerConstantForConversion(Expr *Expr,
1971                                                bool InOverloadResolution,
1972                                                ASTContext &Context) {
1973   // Handle value-dependent integral null pointer constants correctly.
1974   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1975   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1976       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1977     return !InOverloadResolution;
1978 
1979   return Expr->isNullPointerConstant(Context,
1980                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1981                                         : Expr::NPC_ValueDependentIsNull);
1982 }
1983 
1984 /// IsPointerConversion - Determines whether the conversion of the
1985 /// expression From, which has the (possibly adjusted) type FromType,
1986 /// can be converted to the type ToType via a pointer conversion (C++
1987 /// 4.10). If so, returns true and places the converted type (that
1988 /// might differ from ToType in its cv-qualifiers at some level) into
1989 /// ConvertedType.
1990 ///
1991 /// This routine also supports conversions to and from block pointers
1992 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
1993 /// pointers to interfaces. FIXME: Once we've determined the
1994 /// appropriate overloading rules for Objective-C, we may want to
1995 /// split the Objective-C checks into a different routine; however,
1996 /// GCC seems to consider all of these conversions to be pointer
1997 /// conversions, so for now they live here. IncompatibleObjC will be
1998 /// set if the conversion is an allowed Objective-C conversion that
1999 /// should result in a warning.
2000 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
2001                                bool InOverloadResolution,
2002                                QualType& ConvertedType,
2003                                bool &IncompatibleObjC) {
2004   IncompatibleObjC = false;
2005   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
2006                               IncompatibleObjC))
2007     return true;
2008 
2009   // Conversion from a null pointer constant to any Objective-C pointer type.
2010   if (ToType->isObjCObjectPointerType() &&
2011       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2012     ConvertedType = ToType;
2013     return true;
2014   }
2015 
2016   // Blocks: Block pointers can be converted to void*.
2017   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
2018       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
2019     ConvertedType = ToType;
2020     return true;
2021   }
2022   // Blocks: A null pointer constant can be converted to a block
2023   // pointer type.
2024   if (ToType->isBlockPointerType() &&
2025       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2026     ConvertedType = ToType;
2027     return true;
2028   }
2029 
2030   // If the left-hand-side is nullptr_t, the right side can be a null
2031   // pointer constant.
2032   if (ToType->isNullPtrType() &&
2033       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2034     ConvertedType = ToType;
2035     return true;
2036   }
2037 
2038   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
2039   if (!ToTypePtr)
2040     return false;
2041 
2042   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
2043   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2044     ConvertedType = ToType;
2045     return true;
2046   }
2047 
2048   // Beyond this point, both types need to be pointers
2049   // , including objective-c pointers.
2050   QualType ToPointeeType = ToTypePtr->getPointeeType();
2051   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
2052       !getLangOpts().ObjCAutoRefCount) {
2053     ConvertedType = BuildSimilarlyQualifiedPointerType(
2054                                       FromType->getAs<ObjCObjectPointerType>(),
2055                                                        ToPointeeType,
2056                                                        ToType, Context);
2057     return true;
2058   }
2059   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
2060   if (!FromTypePtr)
2061     return false;
2062 
2063   QualType FromPointeeType = FromTypePtr->getPointeeType();
2064 
2065   // If the unqualified pointee types are the same, this can't be a
2066   // pointer conversion, so don't do all of the work below.
2067   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
2068     return false;
2069 
2070   // An rvalue of type "pointer to cv T," where T is an object type,
2071   // can be converted to an rvalue of type "pointer to cv void" (C++
2072   // 4.10p2).
2073   if (FromPointeeType->isIncompleteOrObjectType() &&
2074       ToPointeeType->isVoidType()) {
2075     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2076                                                        ToPointeeType,
2077                                                        ToType, Context,
2078                                                    /*StripObjCLifetime=*/true);
2079     return true;
2080   }
2081 
2082   // MSVC allows implicit function to void* type conversion.
2083   if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
2084       ToPointeeType->isVoidType()) {
2085     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2086                                                        ToPointeeType,
2087                                                        ToType, Context);
2088     return true;
2089   }
2090 
2091   // When we're overloading in C, we allow a special kind of pointer
2092   // conversion for compatible-but-not-identical pointee types.
2093   if (!getLangOpts().CPlusPlus &&
2094       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2095     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2096                                                        ToPointeeType,
2097                                                        ToType, Context);
2098     return true;
2099   }
2100 
2101   // C++ [conv.ptr]p3:
2102   //
2103   //   An rvalue of type "pointer to cv D," where D is a class type,
2104   //   can be converted to an rvalue of type "pointer to cv B," where
2105   //   B is a base class (clause 10) of D. If B is an inaccessible
2106   //   (clause 11) or ambiguous (10.2) base class of D, a program that
2107   //   necessitates this conversion is ill-formed. The result of the
2108   //   conversion is a pointer to the base class sub-object of the
2109   //   derived class object. The null pointer value is converted to
2110   //   the null pointer value of the destination type.
2111   //
2112   // Note that we do not check for ambiguity or inaccessibility
2113   // here. That is handled by CheckPointerConversion.
2114   if (getLangOpts().CPlusPlus &&
2115       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2116       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2117       !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2118       IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2119     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2120                                                        ToPointeeType,
2121                                                        ToType, Context);
2122     return true;
2123   }
2124 
2125   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2126       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2127     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2128                                                        ToPointeeType,
2129                                                        ToType, Context);
2130     return true;
2131   }
2132 
2133   return false;
2134 }
2135 
2136 /// \brief Adopt the given qualifiers for the given type.
2137 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2138   Qualifiers TQs = T.getQualifiers();
2139 
2140   // Check whether qualifiers already match.
2141   if (TQs == Qs)
2142     return T;
2143 
2144   if (Qs.compatiblyIncludes(TQs))
2145     return Context.getQualifiedType(T, Qs);
2146 
2147   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2148 }
2149 
2150 /// isObjCPointerConversion - Determines whether this is an
2151 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2152 /// with the same arguments and return values.
2153 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2154                                    QualType& ConvertedType,
2155                                    bool &IncompatibleObjC) {
2156   if (!getLangOpts().ObjC1)
2157     return false;
2158 
2159   // The set of qualifiers on the type we're converting from.
2160   Qualifiers FromQualifiers = FromType.getQualifiers();
2161 
2162   // First, we handle all conversions on ObjC object pointer types.
2163   const ObjCObjectPointerType* ToObjCPtr =
2164     ToType->getAs<ObjCObjectPointerType>();
2165   const ObjCObjectPointerType *FromObjCPtr =
2166     FromType->getAs<ObjCObjectPointerType>();
2167 
2168   if (ToObjCPtr && FromObjCPtr) {
2169     // If the pointee types are the same (ignoring qualifications),
2170     // then this is not a pointer conversion.
2171     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2172                                        FromObjCPtr->getPointeeType()))
2173       return false;
2174 
2175     // Check for compatible
2176     // Objective C++: We're able to convert between "id" or "Class" and a
2177     // pointer to any interface (in both directions).
2178     if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2179       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2180       return true;
2181     }
2182     // Conversions with Objective-C's id<...>.
2183     if ((FromObjCPtr->isObjCQualifiedIdType() ||
2184          ToObjCPtr->isObjCQualifiedIdType()) &&
2185         Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2186                                                   /*compare=*/false)) {
2187       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2188       return true;
2189     }
2190     // Objective C++: We're able to convert from a pointer to an
2191     // interface to a pointer to a different interface.
2192     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2193       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2194       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2195       if (getLangOpts().CPlusPlus && LHS && RHS &&
2196           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2197                                                 FromObjCPtr->getPointeeType()))
2198         return false;
2199       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2200                                                    ToObjCPtr->getPointeeType(),
2201                                                          ToType, Context);
2202       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2203       return true;
2204     }
2205 
2206     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2207       // Okay: this is some kind of implicit downcast of Objective-C
2208       // interfaces, which is permitted. However, we're going to
2209       // complain about it.
2210       IncompatibleObjC = true;
2211       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2212                                                    ToObjCPtr->getPointeeType(),
2213                                                          ToType, Context);
2214       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2215       return true;
2216     }
2217   }
2218   // Beyond this point, both types need to be C pointers or block pointers.
2219   QualType ToPointeeType;
2220   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2221     ToPointeeType = ToCPtr->getPointeeType();
2222   else if (const BlockPointerType *ToBlockPtr =
2223             ToType->getAs<BlockPointerType>()) {
2224     // Objective C++: We're able to convert from a pointer to any object
2225     // to a block pointer type.
2226     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2227       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2228       return true;
2229     }
2230     ToPointeeType = ToBlockPtr->getPointeeType();
2231   }
2232   else if (FromType->getAs<BlockPointerType>() &&
2233            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2234     // Objective C++: We're able to convert from a block pointer type to a
2235     // pointer to any object.
2236     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2237     return true;
2238   }
2239   else
2240     return false;
2241 
2242   QualType FromPointeeType;
2243   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2244     FromPointeeType = FromCPtr->getPointeeType();
2245   else if (const BlockPointerType *FromBlockPtr =
2246            FromType->getAs<BlockPointerType>())
2247     FromPointeeType = FromBlockPtr->getPointeeType();
2248   else
2249     return false;
2250 
2251   // If we have pointers to pointers, recursively check whether this
2252   // is an Objective-C conversion.
2253   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2254       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2255                               IncompatibleObjC)) {
2256     // We always complain about this conversion.
2257     IncompatibleObjC = true;
2258     ConvertedType = Context.getPointerType(ConvertedType);
2259     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2260     return true;
2261   }
2262   // Allow conversion of pointee being objective-c pointer to another one;
2263   // as in I* to id.
2264   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2265       ToPointeeType->getAs<ObjCObjectPointerType>() &&
2266       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2267                               IncompatibleObjC)) {
2268 
2269     ConvertedType = Context.getPointerType(ConvertedType);
2270     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2271     return true;
2272   }
2273 
2274   // If we have pointers to functions or blocks, check whether the only
2275   // differences in the argument and result types are in Objective-C
2276   // pointer conversions. If so, we permit the conversion (but
2277   // complain about it).
2278   const FunctionProtoType *FromFunctionType
2279     = FromPointeeType->getAs<FunctionProtoType>();
2280   const FunctionProtoType *ToFunctionType
2281     = ToPointeeType->getAs<FunctionProtoType>();
2282   if (FromFunctionType && ToFunctionType) {
2283     // If the function types are exactly the same, this isn't an
2284     // Objective-C pointer conversion.
2285     if (Context.getCanonicalType(FromPointeeType)
2286           == Context.getCanonicalType(ToPointeeType))
2287       return false;
2288 
2289     // Perform the quick checks that will tell us whether these
2290     // function types are obviously different.
2291     if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2292         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2293         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2294       return false;
2295 
2296     bool HasObjCConversion = false;
2297     if (Context.getCanonicalType(FromFunctionType->getResultType())
2298           == Context.getCanonicalType(ToFunctionType->getResultType())) {
2299       // Okay, the types match exactly. Nothing to do.
2300     } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2301                                        ToFunctionType->getResultType(),
2302                                        ConvertedType, IncompatibleObjC)) {
2303       // Okay, we have an Objective-C pointer conversion.
2304       HasObjCConversion = true;
2305     } else {
2306       // Function types are too different. Abort.
2307       return false;
2308     }
2309 
2310     // Check argument types.
2311     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2312          ArgIdx != NumArgs; ++ArgIdx) {
2313       QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2314       QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2315       if (Context.getCanonicalType(FromArgType)
2316             == Context.getCanonicalType(ToArgType)) {
2317         // Okay, the types match exactly. Nothing to do.
2318       } else if (isObjCPointerConversion(FromArgType, ToArgType,
2319                                          ConvertedType, IncompatibleObjC)) {
2320         // Okay, we have an Objective-C pointer conversion.
2321         HasObjCConversion = true;
2322       } else {
2323         // Argument types are too different. Abort.
2324         return false;
2325       }
2326     }
2327 
2328     if (HasObjCConversion) {
2329       // We had an Objective-C conversion. Allow this pointer
2330       // conversion, but complain about it.
2331       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2332       IncompatibleObjC = true;
2333       return true;
2334     }
2335   }
2336 
2337   return false;
2338 }
2339 
2340 /// \brief Determine whether this is an Objective-C writeback conversion,
2341 /// used for parameter passing when performing automatic reference counting.
2342 ///
2343 /// \param FromType The type we're converting form.
2344 ///
2345 /// \param ToType The type we're converting to.
2346 ///
2347 /// \param ConvertedType The type that will be produced after applying
2348 /// this conversion.
2349 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2350                                      QualType &ConvertedType) {
2351   if (!getLangOpts().ObjCAutoRefCount ||
2352       Context.hasSameUnqualifiedType(FromType, ToType))
2353     return false;
2354 
2355   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2356   QualType ToPointee;
2357   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2358     ToPointee = ToPointer->getPointeeType();
2359   else
2360     return false;
2361 
2362   Qualifiers ToQuals = ToPointee.getQualifiers();
2363   if (!ToPointee->isObjCLifetimeType() ||
2364       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2365       !ToQuals.withoutObjCLifetime().empty())
2366     return false;
2367 
2368   // Argument must be a pointer to __strong to __weak.
2369   QualType FromPointee;
2370   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2371     FromPointee = FromPointer->getPointeeType();
2372   else
2373     return false;
2374 
2375   Qualifiers FromQuals = FromPointee.getQualifiers();
2376   if (!FromPointee->isObjCLifetimeType() ||
2377       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2378        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2379     return false;
2380 
2381   // Make sure that we have compatible qualifiers.
2382   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2383   if (!ToQuals.compatiblyIncludes(FromQuals))
2384     return false;
2385 
2386   // Remove qualifiers from the pointee type we're converting from; they
2387   // aren't used in the compatibility check belong, and we'll be adding back
2388   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2389   FromPointee = FromPointee.getUnqualifiedType();
2390 
2391   // The unqualified form of the pointee types must be compatible.
2392   ToPointee = ToPointee.getUnqualifiedType();
2393   bool IncompatibleObjC;
2394   if (Context.typesAreCompatible(FromPointee, ToPointee))
2395     FromPointee = ToPointee;
2396   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2397                                     IncompatibleObjC))
2398     return false;
2399 
2400   /// \brief Construct the type we're converting to, which is a pointer to
2401   /// __autoreleasing pointee.
2402   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2403   ConvertedType = Context.getPointerType(FromPointee);
2404   return true;
2405 }
2406 
2407 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2408                                     QualType& ConvertedType) {
2409   QualType ToPointeeType;
2410   if (const BlockPointerType *ToBlockPtr =
2411         ToType->getAs<BlockPointerType>())
2412     ToPointeeType = ToBlockPtr->getPointeeType();
2413   else
2414     return false;
2415 
2416   QualType FromPointeeType;
2417   if (const BlockPointerType *FromBlockPtr =
2418       FromType->getAs<BlockPointerType>())
2419     FromPointeeType = FromBlockPtr->getPointeeType();
2420   else
2421     return false;
2422   // We have pointer to blocks, check whether the only
2423   // differences in the argument and result types are in Objective-C
2424   // pointer conversions. If so, we permit the conversion.
2425 
2426   const FunctionProtoType *FromFunctionType
2427     = FromPointeeType->getAs<FunctionProtoType>();
2428   const FunctionProtoType *ToFunctionType
2429     = ToPointeeType->getAs<FunctionProtoType>();
2430 
2431   if (!FromFunctionType || !ToFunctionType)
2432     return false;
2433 
2434   if (Context.hasSameType(FromPointeeType, ToPointeeType))
2435     return true;
2436 
2437   // Perform the quick checks that will tell us whether these
2438   // function types are obviously different.
2439   if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2440       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2441     return false;
2442 
2443   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2444   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2445   if (FromEInfo != ToEInfo)
2446     return false;
2447 
2448   bool IncompatibleObjC = false;
2449   if (Context.hasSameType(FromFunctionType->getResultType(),
2450                           ToFunctionType->getResultType())) {
2451     // Okay, the types match exactly. Nothing to do.
2452   } else {
2453     QualType RHS = FromFunctionType->getResultType();
2454     QualType LHS = ToFunctionType->getResultType();
2455     if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2456         !RHS.hasQualifiers() && LHS.hasQualifiers())
2457        LHS = LHS.getUnqualifiedType();
2458 
2459      if (Context.hasSameType(RHS,LHS)) {
2460        // OK exact match.
2461      } else if (isObjCPointerConversion(RHS, LHS,
2462                                         ConvertedType, IncompatibleObjC)) {
2463      if (IncompatibleObjC)
2464        return false;
2465      // Okay, we have an Objective-C pointer conversion.
2466      }
2467      else
2468        return false;
2469    }
2470 
2471    // Check argument types.
2472    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2473         ArgIdx != NumArgs; ++ArgIdx) {
2474      IncompatibleObjC = false;
2475      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2476      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2477      if (Context.hasSameType(FromArgType, ToArgType)) {
2478        // Okay, the types match exactly. Nothing to do.
2479      } else if (isObjCPointerConversion(ToArgType, FromArgType,
2480                                         ConvertedType, IncompatibleObjC)) {
2481        if (IncompatibleObjC)
2482          return false;
2483        // Okay, we have an Objective-C pointer conversion.
2484      } else
2485        // Argument types are too different. Abort.
2486        return false;
2487    }
2488    if (LangOpts.ObjCAutoRefCount &&
2489        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2490                                                     ToFunctionType))
2491      return false;
2492 
2493    ConvertedType = ToType;
2494    return true;
2495 }
2496 
2497 enum {
2498   ft_default,
2499   ft_different_class,
2500   ft_parameter_arity,
2501   ft_parameter_mismatch,
2502   ft_return_type,
2503   ft_qualifer_mismatch
2504 };
2505 
2506 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2507 /// function types.  Catches different number of parameter, mismatch in
2508 /// parameter types, and different return types.
2509 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2510                                       QualType FromType, QualType ToType) {
2511   // If either type is not valid, include no extra info.
2512   if (FromType.isNull() || ToType.isNull()) {
2513     PDiag << ft_default;
2514     return;
2515   }
2516 
2517   // Get the function type from the pointers.
2518   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2519     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2520                             *ToMember = ToType->getAs<MemberPointerType>();
2521     if (FromMember->getClass() != ToMember->getClass()) {
2522       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2523             << QualType(FromMember->getClass(), 0);
2524       return;
2525     }
2526     FromType = FromMember->getPointeeType();
2527     ToType = ToMember->getPointeeType();
2528   }
2529 
2530   if (FromType->isPointerType())
2531     FromType = FromType->getPointeeType();
2532   if (ToType->isPointerType())
2533     ToType = ToType->getPointeeType();
2534 
2535   // Remove references.
2536   FromType = FromType.getNonReferenceType();
2537   ToType = ToType.getNonReferenceType();
2538 
2539   // Don't print extra info for non-specialized template functions.
2540   if (FromType->isInstantiationDependentType() &&
2541       !FromType->getAs<TemplateSpecializationType>()) {
2542     PDiag << ft_default;
2543     return;
2544   }
2545 
2546   // No extra info for same types.
2547   if (Context.hasSameType(FromType, ToType)) {
2548     PDiag << ft_default;
2549     return;
2550   }
2551 
2552   const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2553                           *ToFunction = ToType->getAs<FunctionProtoType>();
2554 
2555   // Both types need to be function types.
2556   if (!FromFunction || !ToFunction) {
2557     PDiag << ft_default;
2558     return;
2559   }
2560 
2561   if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2562     PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2563           << FromFunction->getNumArgs();
2564     return;
2565   }
2566 
2567   // Handle different parameter types.
2568   unsigned ArgPos;
2569   if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2570     PDiag << ft_parameter_mismatch << ArgPos + 1
2571           << ToFunction->getArgType(ArgPos)
2572           << FromFunction->getArgType(ArgPos);
2573     return;
2574   }
2575 
2576   // Handle different return type.
2577   if (!Context.hasSameType(FromFunction->getResultType(),
2578                            ToFunction->getResultType())) {
2579     PDiag << ft_return_type << ToFunction->getResultType()
2580           << FromFunction->getResultType();
2581     return;
2582   }
2583 
2584   unsigned FromQuals = FromFunction->getTypeQuals(),
2585            ToQuals = ToFunction->getTypeQuals();
2586   if (FromQuals != ToQuals) {
2587     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2588     return;
2589   }
2590 
2591   // Unable to find a difference, so add no extra info.
2592   PDiag << ft_default;
2593 }
2594 
2595 /// FunctionArgTypesAreEqual - This routine checks two function proto types
2596 /// for equality of their argument types. Caller has already checked that
2597 /// they have same number of arguments. This routine assumes that Objective-C
2598 /// pointer types which only differ in their protocol qualifiers are equal.
2599 /// If the parameters are different, ArgPos will have the parameter index
2600 /// of the first different parameter.
2601 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2602                                     const FunctionProtoType *NewType,
2603                                     unsigned *ArgPos) {
2604   if (!getLangOpts().ObjC1) {
2605     for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2606          N = NewType->arg_type_begin(),
2607          E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2608       if (!Context.hasSameType(*O, *N)) {
2609         if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2610         return false;
2611       }
2612     }
2613     return true;
2614   }
2615 
2616   for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2617        N = NewType->arg_type_begin(),
2618        E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2619     QualType ToType = (*O);
2620     QualType FromType = (*N);
2621     if (!Context.hasSameType(ToType, FromType)) {
2622       if (const PointerType *PTTo = ToType->getAs<PointerType>()) {
2623         if (const PointerType *PTFr = FromType->getAs<PointerType>())
2624           if ((PTTo->getPointeeType()->isObjCQualifiedIdType() &&
2625                PTFr->getPointeeType()->isObjCQualifiedIdType()) ||
2626               (PTTo->getPointeeType()->isObjCQualifiedClassType() &&
2627                PTFr->getPointeeType()->isObjCQualifiedClassType()))
2628             continue;
2629       }
2630       else if (const ObjCObjectPointerType *PTTo =
2631                  ToType->getAs<ObjCObjectPointerType>()) {
2632         if (const ObjCObjectPointerType *PTFr =
2633               FromType->getAs<ObjCObjectPointerType>())
2634           if (Context.hasSameUnqualifiedType(
2635                 PTTo->getObjectType()->getBaseType(),
2636                 PTFr->getObjectType()->getBaseType()))
2637             continue;
2638       }
2639       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2640       return false;
2641     }
2642   }
2643   return true;
2644 }
2645 
2646 /// CheckPointerConversion - Check the pointer conversion from the
2647 /// expression From to the type ToType. This routine checks for
2648 /// ambiguous or inaccessible derived-to-base pointer
2649 /// conversions for which IsPointerConversion has already returned
2650 /// true. It returns true and produces a diagnostic if there was an
2651 /// error, or returns false otherwise.
2652 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2653                                   CastKind &Kind,
2654                                   CXXCastPath& BasePath,
2655                                   bool IgnoreBaseAccess) {
2656   QualType FromType = From->getType();
2657   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2658 
2659   Kind = CK_BitCast;
2660 
2661   if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2662       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2663       Expr::NPCK_ZeroExpression) {
2664     if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2665       DiagRuntimeBehavior(From->getExprLoc(), From,
2666                           PDiag(diag::warn_impcast_bool_to_null_pointer)
2667                             << ToType << From->getSourceRange());
2668     else if (!isUnevaluatedContext())
2669       Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2670         << ToType << From->getSourceRange();
2671   }
2672   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2673     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2674       QualType FromPointeeType = FromPtrType->getPointeeType(),
2675                ToPointeeType   = ToPtrType->getPointeeType();
2676 
2677       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2678           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2679         // We must have a derived-to-base conversion. Check an
2680         // ambiguous or inaccessible conversion.
2681         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2682                                          From->getExprLoc(),
2683                                          From->getSourceRange(), &BasePath,
2684                                          IgnoreBaseAccess))
2685           return true;
2686 
2687         // The conversion was successful.
2688         Kind = CK_DerivedToBase;
2689       }
2690     }
2691   } else if (const ObjCObjectPointerType *ToPtrType =
2692                ToType->getAs<ObjCObjectPointerType>()) {
2693     if (const ObjCObjectPointerType *FromPtrType =
2694           FromType->getAs<ObjCObjectPointerType>()) {
2695       // Objective-C++ conversions are always okay.
2696       // FIXME: We should have a different class of conversions for the
2697       // Objective-C++ implicit conversions.
2698       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2699         return false;
2700     } else if (FromType->isBlockPointerType()) {
2701       Kind = CK_BlockPointerToObjCPointerCast;
2702     } else {
2703       Kind = CK_CPointerToObjCPointerCast;
2704     }
2705   } else if (ToType->isBlockPointerType()) {
2706     if (!FromType->isBlockPointerType())
2707       Kind = CK_AnyPointerToBlockPointerCast;
2708   }
2709 
2710   // We shouldn't fall into this case unless it's valid for other
2711   // reasons.
2712   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2713     Kind = CK_NullToPointer;
2714 
2715   return false;
2716 }
2717 
2718 /// IsMemberPointerConversion - Determines whether the conversion of the
2719 /// expression From, which has the (possibly adjusted) type FromType, can be
2720 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2721 /// If so, returns true and places the converted type (that might differ from
2722 /// ToType in its cv-qualifiers at some level) into ConvertedType.
2723 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2724                                      QualType ToType,
2725                                      bool InOverloadResolution,
2726                                      QualType &ConvertedType) {
2727   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2728   if (!ToTypePtr)
2729     return false;
2730 
2731   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2732   if (From->isNullPointerConstant(Context,
2733                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2734                                         : Expr::NPC_ValueDependentIsNull)) {
2735     ConvertedType = ToType;
2736     return true;
2737   }
2738 
2739   // Otherwise, both types have to be member pointers.
2740   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2741   if (!FromTypePtr)
2742     return false;
2743 
2744   // A pointer to member of B can be converted to a pointer to member of D,
2745   // where D is derived from B (C++ 4.11p2).
2746   QualType FromClass(FromTypePtr->getClass(), 0);
2747   QualType ToClass(ToTypePtr->getClass(), 0);
2748 
2749   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2750       !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2751       IsDerivedFrom(ToClass, FromClass)) {
2752     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2753                                                  ToClass.getTypePtr());
2754     return true;
2755   }
2756 
2757   return false;
2758 }
2759 
2760 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2761 /// expression From to the type ToType. This routine checks for ambiguous or
2762 /// virtual or inaccessible base-to-derived member pointer conversions
2763 /// for which IsMemberPointerConversion has already returned true. It returns
2764 /// true and produces a diagnostic if there was an error, or returns false
2765 /// otherwise.
2766 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2767                                         CastKind &Kind,
2768                                         CXXCastPath &BasePath,
2769                                         bool IgnoreBaseAccess) {
2770   QualType FromType = From->getType();
2771   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2772   if (!FromPtrType) {
2773     // This must be a null pointer to member pointer conversion
2774     assert(From->isNullPointerConstant(Context,
2775                                        Expr::NPC_ValueDependentIsNull) &&
2776            "Expr must be null pointer constant!");
2777     Kind = CK_NullToMemberPointer;
2778     return false;
2779   }
2780 
2781   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2782   assert(ToPtrType && "No member pointer cast has a target type "
2783                       "that is not a member pointer.");
2784 
2785   QualType FromClass = QualType(FromPtrType->getClass(), 0);
2786   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2787 
2788   // FIXME: What about dependent types?
2789   assert(FromClass->isRecordType() && "Pointer into non-class.");
2790   assert(ToClass->isRecordType() && "Pointer into non-class.");
2791 
2792   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2793                      /*DetectVirtual=*/true);
2794   bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2795   assert(DerivationOkay &&
2796          "Should not have been called if derivation isn't OK.");
2797   (void)DerivationOkay;
2798 
2799   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2800                                   getUnqualifiedType())) {
2801     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2802     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2803       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2804     return true;
2805   }
2806 
2807   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2808     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2809       << FromClass << ToClass << QualType(VBase, 0)
2810       << From->getSourceRange();
2811     return true;
2812   }
2813 
2814   if (!IgnoreBaseAccess)
2815     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2816                          Paths.front(),
2817                          diag::err_downcast_from_inaccessible_base);
2818 
2819   // Must be a base to derived member conversion.
2820   BuildBasePathArray(Paths, BasePath);
2821   Kind = CK_BaseToDerivedMemberPointer;
2822   return false;
2823 }
2824 
2825 /// IsQualificationConversion - Determines whether the conversion from
2826 /// an rvalue of type FromType to ToType is a qualification conversion
2827 /// (C++ 4.4).
2828 ///
2829 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2830 /// when the qualification conversion involves a change in the Objective-C
2831 /// object lifetime.
2832 bool
2833 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2834                                 bool CStyle, bool &ObjCLifetimeConversion) {
2835   FromType = Context.getCanonicalType(FromType);
2836   ToType = Context.getCanonicalType(ToType);
2837   ObjCLifetimeConversion = false;
2838 
2839   // If FromType and ToType are the same type, this is not a
2840   // qualification conversion.
2841   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2842     return false;
2843 
2844   // (C++ 4.4p4):
2845   //   A conversion can add cv-qualifiers at levels other than the first
2846   //   in multi-level pointers, subject to the following rules: [...]
2847   bool PreviousToQualsIncludeConst = true;
2848   bool UnwrappedAnyPointer = false;
2849   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2850     // Within each iteration of the loop, we check the qualifiers to
2851     // determine if this still looks like a qualification
2852     // conversion. Then, if all is well, we unwrap one more level of
2853     // pointers or pointers-to-members and do it all again
2854     // until there are no more pointers or pointers-to-members left to
2855     // unwrap.
2856     UnwrappedAnyPointer = true;
2857 
2858     Qualifiers FromQuals = FromType.getQualifiers();
2859     Qualifiers ToQuals = ToType.getQualifiers();
2860 
2861     // Objective-C ARC:
2862     //   Check Objective-C lifetime conversions.
2863     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2864         UnwrappedAnyPointer) {
2865       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2866         ObjCLifetimeConversion = true;
2867         FromQuals.removeObjCLifetime();
2868         ToQuals.removeObjCLifetime();
2869       } else {
2870         // Qualification conversions cannot cast between different
2871         // Objective-C lifetime qualifiers.
2872         return false;
2873       }
2874     }
2875 
2876     // Allow addition/removal of GC attributes but not changing GC attributes.
2877     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2878         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2879       FromQuals.removeObjCGCAttr();
2880       ToQuals.removeObjCGCAttr();
2881     }
2882 
2883     //   -- for every j > 0, if const is in cv 1,j then const is in cv
2884     //      2,j, and similarly for volatile.
2885     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2886       return false;
2887 
2888     //   -- if the cv 1,j and cv 2,j are different, then const is in
2889     //      every cv for 0 < k < j.
2890     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2891         && !PreviousToQualsIncludeConst)
2892       return false;
2893 
2894     // Keep track of whether all prior cv-qualifiers in the "to" type
2895     // include const.
2896     PreviousToQualsIncludeConst
2897       = PreviousToQualsIncludeConst && ToQuals.hasConst();
2898   }
2899 
2900   // We are left with FromType and ToType being the pointee types
2901   // after unwrapping the original FromType and ToType the same number
2902   // of types. If we unwrapped any pointers, and if FromType and
2903   // ToType have the same unqualified type (since we checked
2904   // qualifiers above), then this is a qualification conversion.
2905   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2906 }
2907 
2908 /// \brief - Determine whether this is a conversion from a scalar type to an
2909 /// atomic type.
2910 ///
2911 /// If successful, updates \c SCS's second and third steps in the conversion
2912 /// sequence to finish the conversion.
2913 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2914                                 bool InOverloadResolution,
2915                                 StandardConversionSequence &SCS,
2916                                 bool CStyle) {
2917   const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2918   if (!ToAtomic)
2919     return false;
2920 
2921   StandardConversionSequence InnerSCS;
2922   if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2923                             InOverloadResolution, InnerSCS,
2924                             CStyle, /*AllowObjCWritebackConversion=*/false))
2925     return false;
2926 
2927   SCS.Second = InnerSCS.Second;
2928   SCS.setToType(1, InnerSCS.getToType(1));
2929   SCS.Third = InnerSCS.Third;
2930   SCS.QualificationIncludesObjCLifetime
2931     = InnerSCS.QualificationIncludesObjCLifetime;
2932   SCS.setToType(2, InnerSCS.getToType(2));
2933   return true;
2934 }
2935 
2936 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2937                                               CXXConstructorDecl *Constructor,
2938                                               QualType Type) {
2939   const FunctionProtoType *CtorType =
2940       Constructor->getType()->getAs<FunctionProtoType>();
2941   if (CtorType->getNumArgs() > 0) {
2942     QualType FirstArg = CtorType->getArgType(0);
2943     if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2944       return true;
2945   }
2946   return false;
2947 }
2948 
2949 static OverloadingResult
2950 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2951                                        CXXRecordDecl *To,
2952                                        UserDefinedConversionSequence &User,
2953                                        OverloadCandidateSet &CandidateSet,
2954                                        bool AllowExplicit) {
2955   DeclContext::lookup_result R = S.LookupConstructors(To);
2956   for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
2957        Con != ConEnd; ++Con) {
2958     NamedDecl *D = *Con;
2959     DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2960 
2961     // Find the constructor (which may be a template).
2962     CXXConstructorDecl *Constructor = 0;
2963     FunctionTemplateDecl *ConstructorTmpl
2964       = dyn_cast<FunctionTemplateDecl>(D);
2965     if (ConstructorTmpl)
2966       Constructor
2967         = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2968     else
2969       Constructor = cast<CXXConstructorDecl>(D);
2970 
2971     bool Usable = !Constructor->isInvalidDecl() &&
2972                   S.isInitListConstructor(Constructor) &&
2973                   (AllowExplicit || !Constructor->isExplicit());
2974     if (Usable) {
2975       // If the first argument is (a reference to) the target type,
2976       // suppress conversions.
2977       bool SuppressUserConversions =
2978           isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2979       if (ConstructorTmpl)
2980         S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2981                                        /*ExplicitArgs*/ 0,
2982                                        From, CandidateSet,
2983                                        SuppressUserConversions);
2984       else
2985         S.AddOverloadCandidate(Constructor, FoundDecl,
2986                                From, CandidateSet,
2987                                SuppressUserConversions);
2988     }
2989   }
2990 
2991   bool HadMultipleCandidates = (CandidateSet.size() > 1);
2992 
2993   OverloadCandidateSet::iterator Best;
2994   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2995   case OR_Success: {
2996     // Record the standard conversion we used and the conversion function.
2997     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2998     QualType ThisType = Constructor->getThisType(S.Context);
2999     // Initializer lists don't have conversions as such.
3000     User.Before.setAsIdentityConversion();
3001     User.HadMultipleCandidates = HadMultipleCandidates;
3002     User.ConversionFunction = Constructor;
3003     User.FoundConversionFunction = Best->FoundDecl;
3004     User.After.setAsIdentityConversion();
3005     User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3006     User.After.setAllToTypes(ToType);
3007     return OR_Success;
3008   }
3009 
3010   case OR_No_Viable_Function:
3011     return OR_No_Viable_Function;
3012   case OR_Deleted:
3013     return OR_Deleted;
3014   case OR_Ambiguous:
3015     return OR_Ambiguous;
3016   }
3017 
3018   llvm_unreachable("Invalid OverloadResult!");
3019 }
3020 
3021 /// Determines whether there is a user-defined conversion sequence
3022 /// (C++ [over.ics.user]) that converts expression From to the type
3023 /// ToType. If such a conversion exists, User will contain the
3024 /// user-defined conversion sequence that performs such a conversion
3025 /// and this routine will return true. Otherwise, this routine returns
3026 /// false and User is unspecified.
3027 ///
3028 /// \param AllowExplicit  true if the conversion should consider C++0x
3029 /// "explicit" conversion functions as well as non-explicit conversion
3030 /// functions (C++0x [class.conv.fct]p2).
3031 static OverloadingResult
3032 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
3033                         UserDefinedConversionSequence &User,
3034                         OverloadCandidateSet &CandidateSet,
3035                         bool AllowExplicit) {
3036   // Whether we will only visit constructors.
3037   bool ConstructorsOnly = false;
3038 
3039   // If the type we are conversion to is a class type, enumerate its
3040   // constructors.
3041   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
3042     // C++ [over.match.ctor]p1:
3043     //   When objects of class type are direct-initialized (8.5), or
3044     //   copy-initialized from an expression of the same or a
3045     //   derived class type (8.5), overload resolution selects the
3046     //   constructor. [...] For copy-initialization, the candidate
3047     //   functions are all the converting constructors (12.3.1) of
3048     //   that class. The argument list is the expression-list within
3049     //   the parentheses of the initializer.
3050     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
3051         (From->getType()->getAs<RecordType>() &&
3052          S.IsDerivedFrom(From->getType(), ToType)))
3053       ConstructorsOnly = true;
3054 
3055     S.RequireCompleteType(From->getExprLoc(), ToType, 0);
3056     // RequireCompleteType may have returned true due to some invalid decl
3057     // during template instantiation, but ToType may be complete enough now
3058     // to try to recover.
3059     if (ToType->isIncompleteType()) {
3060       // We're not going to find any constructors.
3061     } else if (CXXRecordDecl *ToRecordDecl
3062                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
3063 
3064       Expr **Args = &From;
3065       unsigned NumArgs = 1;
3066       bool ListInitializing = false;
3067       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
3068         // But first, see if there is an init-list-contructor that will work.
3069         OverloadingResult Result = IsInitializerListConstructorConversion(
3070             S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3071         if (Result != OR_No_Viable_Function)
3072           return Result;
3073         // Never mind.
3074         CandidateSet.clear();
3075 
3076         // If we're list-initializing, we pass the individual elements as
3077         // arguments, not the entire list.
3078         Args = InitList->getInits();
3079         NumArgs = InitList->getNumInits();
3080         ListInitializing = true;
3081       }
3082 
3083       DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
3084       for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3085            Con != ConEnd; ++Con) {
3086         NamedDecl *D = *Con;
3087         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3088 
3089         // Find the constructor (which may be a template).
3090         CXXConstructorDecl *Constructor = 0;
3091         FunctionTemplateDecl *ConstructorTmpl
3092           = dyn_cast<FunctionTemplateDecl>(D);
3093         if (ConstructorTmpl)
3094           Constructor
3095             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3096         else
3097           Constructor = cast<CXXConstructorDecl>(D);
3098 
3099         bool Usable = !Constructor->isInvalidDecl();
3100         if (ListInitializing)
3101           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3102         else
3103           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3104         if (Usable) {
3105           bool SuppressUserConversions = !ConstructorsOnly;
3106           if (SuppressUserConversions && ListInitializing) {
3107             SuppressUserConversions = false;
3108             if (NumArgs == 1) {
3109               // If the first argument is (a reference to) the target type,
3110               // suppress conversions.
3111               SuppressUserConversions = isFirstArgumentCompatibleWithType(
3112                                                 S.Context, Constructor, ToType);
3113             }
3114           }
3115           if (ConstructorTmpl)
3116             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3117                                            /*ExplicitArgs*/ 0,
3118                                            llvm::makeArrayRef(Args, NumArgs),
3119                                            CandidateSet, SuppressUserConversions);
3120           else
3121             // Allow one user-defined conversion when user specifies a
3122             // From->ToType conversion via an static cast (c-style, etc).
3123             S.AddOverloadCandidate(Constructor, FoundDecl,
3124                                    llvm::makeArrayRef(Args, NumArgs),
3125                                    CandidateSet, SuppressUserConversions);
3126         }
3127       }
3128     }
3129   }
3130 
3131   // Enumerate conversion functions, if we're allowed to.
3132   if (ConstructorsOnly || isa<InitListExpr>(From)) {
3133   } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3134     // No conversion functions from incomplete types.
3135   } else if (const RecordType *FromRecordType
3136                                    = From->getType()->getAs<RecordType>()) {
3137     if (CXXRecordDecl *FromRecordDecl
3138          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3139       // Add all of the conversion functions as candidates.
3140       std::pair<CXXRecordDecl::conversion_iterator,
3141                 CXXRecordDecl::conversion_iterator>
3142         Conversions = FromRecordDecl->getVisibleConversionFunctions();
3143       for (CXXRecordDecl::conversion_iterator
3144              I = Conversions.first, E = Conversions.second; I != E; ++I) {
3145         DeclAccessPair FoundDecl = I.getPair();
3146         NamedDecl *D = FoundDecl.getDecl();
3147         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3148         if (isa<UsingShadowDecl>(D))
3149           D = cast<UsingShadowDecl>(D)->getTargetDecl();
3150 
3151         CXXConversionDecl *Conv;
3152         FunctionTemplateDecl *ConvTemplate;
3153         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3154           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3155         else
3156           Conv = cast<CXXConversionDecl>(D);
3157 
3158         if (AllowExplicit || !Conv->isExplicit()) {
3159           if (ConvTemplate)
3160             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3161                                              ActingContext, From, ToType,
3162                                              CandidateSet);
3163           else
3164             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3165                                      From, ToType, CandidateSet);
3166         }
3167       }
3168     }
3169   }
3170 
3171   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3172 
3173   OverloadCandidateSet::iterator Best;
3174   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3175   case OR_Success:
3176     // Record the standard conversion we used and the conversion function.
3177     if (CXXConstructorDecl *Constructor
3178           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3179       // C++ [over.ics.user]p1:
3180       //   If the user-defined conversion is specified by a
3181       //   constructor (12.3.1), the initial standard conversion
3182       //   sequence converts the source type to the type required by
3183       //   the argument of the constructor.
3184       //
3185       QualType ThisType = Constructor->getThisType(S.Context);
3186       if (isa<InitListExpr>(From)) {
3187         // Initializer lists don't have conversions as such.
3188         User.Before.setAsIdentityConversion();
3189       } else {
3190         if (Best->Conversions[0].isEllipsis())
3191           User.EllipsisConversion = true;
3192         else {
3193           User.Before = Best->Conversions[0].Standard;
3194           User.EllipsisConversion = false;
3195         }
3196       }
3197       User.HadMultipleCandidates = HadMultipleCandidates;
3198       User.ConversionFunction = Constructor;
3199       User.FoundConversionFunction = Best->FoundDecl;
3200       User.After.setAsIdentityConversion();
3201       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3202       User.After.setAllToTypes(ToType);
3203       return OR_Success;
3204     }
3205     if (CXXConversionDecl *Conversion
3206                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
3207       // C++ [over.ics.user]p1:
3208       //
3209       //   [...] If the user-defined conversion is specified by a
3210       //   conversion function (12.3.2), the initial standard
3211       //   conversion sequence converts the source type to the
3212       //   implicit object parameter of the conversion function.
3213       User.Before = Best->Conversions[0].Standard;
3214       User.HadMultipleCandidates = HadMultipleCandidates;
3215       User.ConversionFunction = Conversion;
3216       User.FoundConversionFunction = Best->FoundDecl;
3217       User.EllipsisConversion = false;
3218 
3219       // C++ [over.ics.user]p2:
3220       //   The second standard conversion sequence converts the
3221       //   result of the user-defined conversion to the target type
3222       //   for the sequence. Since an implicit conversion sequence
3223       //   is an initialization, the special rules for
3224       //   initialization by user-defined conversion apply when
3225       //   selecting the best user-defined conversion for a
3226       //   user-defined conversion sequence (see 13.3.3 and
3227       //   13.3.3.1).
3228       User.After = Best->FinalConversion;
3229       return OR_Success;
3230     }
3231     llvm_unreachable("Not a constructor or conversion function?");
3232 
3233   case OR_No_Viable_Function:
3234     return OR_No_Viable_Function;
3235   case OR_Deleted:
3236     // No conversion here! We're done.
3237     return OR_Deleted;
3238 
3239   case OR_Ambiguous:
3240     return OR_Ambiguous;
3241   }
3242 
3243   llvm_unreachable("Invalid OverloadResult!");
3244 }
3245 
3246 bool
3247 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3248   ImplicitConversionSequence ICS;
3249   OverloadCandidateSet CandidateSet(From->getExprLoc());
3250   OverloadingResult OvResult =
3251     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3252                             CandidateSet, false);
3253   if (OvResult == OR_Ambiguous)
3254     Diag(From->getLocStart(),
3255          diag::err_typecheck_ambiguous_condition)
3256           << From->getType() << ToType << From->getSourceRange();
3257   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
3258     Diag(From->getLocStart(),
3259          diag::err_typecheck_nonviable_condition)
3260     << From->getType() << ToType << From->getSourceRange();
3261   else
3262     return false;
3263   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3264   return true;
3265 }
3266 
3267 /// \brief Compare the user-defined conversion functions or constructors
3268 /// of two user-defined conversion sequences to determine whether any ordering
3269 /// is possible.
3270 static ImplicitConversionSequence::CompareKind
3271 compareConversionFunctions(Sema &S,
3272                            FunctionDecl *Function1,
3273                            FunctionDecl *Function2) {
3274   if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
3275     return ImplicitConversionSequence::Indistinguishable;
3276 
3277   // Objective-C++:
3278   //   If both conversion functions are implicitly-declared conversions from
3279   //   a lambda closure type to a function pointer and a block pointer,
3280   //   respectively, always prefer the conversion to a function pointer,
3281   //   because the function pointer is more lightweight and is more likely
3282   //   to keep code working.
3283   CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3284   if (!Conv1)
3285     return ImplicitConversionSequence::Indistinguishable;
3286 
3287   CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3288   if (!Conv2)
3289     return ImplicitConversionSequence::Indistinguishable;
3290 
3291   if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3292     bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3293     bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3294     if (Block1 != Block2)
3295       return Block1? ImplicitConversionSequence::Worse
3296                    : ImplicitConversionSequence::Better;
3297   }
3298 
3299   return ImplicitConversionSequence::Indistinguishable;
3300 }
3301 
3302 /// CompareImplicitConversionSequences - Compare two implicit
3303 /// conversion sequences to determine whether one is better than the
3304 /// other or if they are indistinguishable (C++ 13.3.3.2).
3305 static ImplicitConversionSequence::CompareKind
3306 CompareImplicitConversionSequences(Sema &S,
3307                                    const ImplicitConversionSequence& ICS1,
3308                                    const ImplicitConversionSequence& ICS2)
3309 {
3310   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3311   // conversion sequences (as defined in 13.3.3.1)
3312   //   -- a standard conversion sequence (13.3.3.1.1) is a better
3313   //      conversion sequence than a user-defined conversion sequence or
3314   //      an ellipsis conversion sequence, and
3315   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3316   //      conversion sequence than an ellipsis conversion sequence
3317   //      (13.3.3.1.3).
3318   //
3319   // C++0x [over.best.ics]p10:
3320   //   For the purpose of ranking implicit conversion sequences as
3321   //   described in 13.3.3.2, the ambiguous conversion sequence is
3322   //   treated as a user-defined sequence that is indistinguishable
3323   //   from any other user-defined conversion sequence.
3324   if (ICS1.getKindRank() < ICS2.getKindRank())
3325     return ImplicitConversionSequence::Better;
3326   if (ICS2.getKindRank() < ICS1.getKindRank())
3327     return ImplicitConversionSequence::Worse;
3328 
3329   // The following checks require both conversion sequences to be of
3330   // the same kind.
3331   if (ICS1.getKind() != ICS2.getKind())
3332     return ImplicitConversionSequence::Indistinguishable;
3333 
3334   ImplicitConversionSequence::CompareKind Result =
3335       ImplicitConversionSequence::Indistinguishable;
3336 
3337   // Two implicit conversion sequences of the same form are
3338   // indistinguishable conversion sequences unless one of the
3339   // following rules apply: (C++ 13.3.3.2p3):
3340   if (ICS1.isStandard())
3341     Result = CompareStandardConversionSequences(S,
3342                                                 ICS1.Standard, ICS2.Standard);
3343   else if (ICS1.isUserDefined()) {
3344     // User-defined conversion sequence U1 is a better conversion
3345     // sequence than another user-defined conversion sequence U2 if
3346     // they contain the same user-defined conversion function or
3347     // constructor and if the second standard conversion sequence of
3348     // U1 is better than the second standard conversion sequence of
3349     // U2 (C++ 13.3.3.2p3).
3350     if (ICS1.UserDefined.ConversionFunction ==
3351           ICS2.UserDefined.ConversionFunction)
3352       Result = CompareStandardConversionSequences(S,
3353                                                   ICS1.UserDefined.After,
3354                                                   ICS2.UserDefined.After);
3355     else
3356       Result = compareConversionFunctions(S,
3357                                           ICS1.UserDefined.ConversionFunction,
3358                                           ICS2.UserDefined.ConversionFunction);
3359   }
3360 
3361   // List-initialization sequence L1 is a better conversion sequence than
3362   // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3363   // for some X and L2 does not.
3364   if (Result == ImplicitConversionSequence::Indistinguishable &&
3365       !ICS1.isBad() &&
3366       ICS1.isListInitializationSequence() &&
3367       ICS2.isListInitializationSequence()) {
3368     if (ICS1.isStdInitializerListElement() &&
3369         !ICS2.isStdInitializerListElement())
3370       return ImplicitConversionSequence::Better;
3371     if (!ICS1.isStdInitializerListElement() &&
3372         ICS2.isStdInitializerListElement())
3373       return ImplicitConversionSequence::Worse;
3374   }
3375 
3376   return Result;
3377 }
3378 
3379 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3380   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3381     Qualifiers Quals;
3382     T1 = Context.getUnqualifiedArrayType(T1, Quals);
3383     T2 = Context.getUnqualifiedArrayType(T2, Quals);
3384   }
3385 
3386   return Context.hasSameUnqualifiedType(T1, T2);
3387 }
3388 
3389 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3390 // determine if one is a proper subset of the other.
3391 static ImplicitConversionSequence::CompareKind
3392 compareStandardConversionSubsets(ASTContext &Context,
3393                                  const StandardConversionSequence& SCS1,
3394                                  const StandardConversionSequence& SCS2) {
3395   ImplicitConversionSequence::CompareKind Result
3396     = ImplicitConversionSequence::Indistinguishable;
3397 
3398   // the identity conversion sequence is considered to be a subsequence of
3399   // any non-identity conversion sequence
3400   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3401     return ImplicitConversionSequence::Better;
3402   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3403     return ImplicitConversionSequence::Worse;
3404 
3405   if (SCS1.Second != SCS2.Second) {
3406     if (SCS1.Second == ICK_Identity)
3407       Result = ImplicitConversionSequence::Better;
3408     else if (SCS2.Second == ICK_Identity)
3409       Result = ImplicitConversionSequence::Worse;
3410     else
3411       return ImplicitConversionSequence::Indistinguishable;
3412   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3413     return ImplicitConversionSequence::Indistinguishable;
3414 
3415   if (SCS1.Third == SCS2.Third) {
3416     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3417                              : ImplicitConversionSequence::Indistinguishable;
3418   }
3419 
3420   if (SCS1.Third == ICK_Identity)
3421     return Result == ImplicitConversionSequence::Worse
3422              ? ImplicitConversionSequence::Indistinguishable
3423              : ImplicitConversionSequence::Better;
3424 
3425   if (SCS2.Third == ICK_Identity)
3426     return Result == ImplicitConversionSequence::Better
3427              ? ImplicitConversionSequence::Indistinguishable
3428              : ImplicitConversionSequence::Worse;
3429 
3430   return ImplicitConversionSequence::Indistinguishable;
3431 }
3432 
3433 /// \brief Determine whether one of the given reference bindings is better
3434 /// than the other based on what kind of bindings they are.
3435 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3436                                        const StandardConversionSequence &SCS2) {
3437   // C++0x [over.ics.rank]p3b4:
3438   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3439   //      implicit object parameter of a non-static member function declared
3440   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3441   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3442   //      lvalue reference to a function lvalue and S2 binds an rvalue
3443   //      reference*.
3444   //
3445   // FIXME: Rvalue references. We're going rogue with the above edits,
3446   // because the semantics in the current C++0x working paper (N3225 at the
3447   // time of this writing) break the standard definition of std::forward
3448   // and std::reference_wrapper when dealing with references to functions.
3449   // Proposed wording changes submitted to CWG for consideration.
3450   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3451       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3452     return false;
3453 
3454   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3455           SCS2.IsLvalueReference) ||
3456          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3457           !SCS2.IsLvalueReference);
3458 }
3459 
3460 /// CompareStandardConversionSequences - Compare two standard
3461 /// conversion sequences to determine whether one is better than the
3462 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3463 static ImplicitConversionSequence::CompareKind
3464 CompareStandardConversionSequences(Sema &S,
3465                                    const StandardConversionSequence& SCS1,
3466                                    const StandardConversionSequence& SCS2)
3467 {
3468   // Standard conversion sequence S1 is a better conversion sequence
3469   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3470 
3471   //  -- S1 is a proper subsequence of S2 (comparing the conversion
3472   //     sequences in the canonical form defined by 13.3.3.1.1,
3473   //     excluding any Lvalue Transformation; the identity conversion
3474   //     sequence is considered to be a subsequence of any
3475   //     non-identity conversion sequence) or, if not that,
3476   if (ImplicitConversionSequence::CompareKind CK
3477         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3478     return CK;
3479 
3480   //  -- the rank of S1 is better than the rank of S2 (by the rules
3481   //     defined below), or, if not that,
3482   ImplicitConversionRank Rank1 = SCS1.getRank();
3483   ImplicitConversionRank Rank2 = SCS2.getRank();
3484   if (Rank1 < Rank2)
3485     return ImplicitConversionSequence::Better;
3486   else if (Rank2 < Rank1)
3487     return ImplicitConversionSequence::Worse;
3488 
3489   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3490   // are indistinguishable unless one of the following rules
3491   // applies:
3492 
3493   //   A conversion that is not a conversion of a pointer, or
3494   //   pointer to member, to bool is better than another conversion
3495   //   that is such a conversion.
3496   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3497     return SCS2.isPointerConversionToBool()
3498              ? ImplicitConversionSequence::Better
3499              : ImplicitConversionSequence::Worse;
3500 
3501   // C++ [over.ics.rank]p4b2:
3502   //
3503   //   If class B is derived directly or indirectly from class A,
3504   //   conversion of B* to A* is better than conversion of B* to
3505   //   void*, and conversion of A* to void* is better than conversion
3506   //   of B* to void*.
3507   bool SCS1ConvertsToVoid
3508     = SCS1.isPointerConversionToVoidPointer(S.Context);
3509   bool SCS2ConvertsToVoid
3510     = SCS2.isPointerConversionToVoidPointer(S.Context);
3511   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3512     // Exactly one of the conversion sequences is a conversion to
3513     // a void pointer; it's the worse conversion.
3514     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3515                               : ImplicitConversionSequence::Worse;
3516   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3517     // Neither conversion sequence converts to a void pointer; compare
3518     // their derived-to-base conversions.
3519     if (ImplicitConversionSequence::CompareKind DerivedCK
3520           = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3521       return DerivedCK;
3522   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3523              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3524     // Both conversion sequences are conversions to void
3525     // pointers. Compare the source types to determine if there's an
3526     // inheritance relationship in their sources.
3527     QualType FromType1 = SCS1.getFromType();
3528     QualType FromType2 = SCS2.getFromType();
3529 
3530     // Adjust the types we're converting from via the array-to-pointer
3531     // conversion, if we need to.
3532     if (SCS1.First == ICK_Array_To_Pointer)
3533       FromType1 = S.Context.getArrayDecayedType(FromType1);
3534     if (SCS2.First == ICK_Array_To_Pointer)
3535       FromType2 = S.Context.getArrayDecayedType(FromType2);
3536 
3537     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3538     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3539 
3540     if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3541       return ImplicitConversionSequence::Better;
3542     else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3543       return ImplicitConversionSequence::Worse;
3544 
3545     // Objective-C++: If one interface is more specific than the
3546     // other, it is the better one.
3547     const ObjCObjectPointerType* FromObjCPtr1
3548       = FromType1->getAs<ObjCObjectPointerType>();
3549     const ObjCObjectPointerType* FromObjCPtr2
3550       = FromType2->getAs<ObjCObjectPointerType>();
3551     if (FromObjCPtr1 && FromObjCPtr2) {
3552       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3553                                                           FromObjCPtr2);
3554       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3555                                                            FromObjCPtr1);
3556       if (AssignLeft != AssignRight) {
3557         return AssignLeft? ImplicitConversionSequence::Better
3558                          : ImplicitConversionSequence::Worse;
3559       }
3560     }
3561   }
3562 
3563   // Compare based on qualification conversions (C++ 13.3.3.2p3,
3564   // bullet 3).
3565   if (ImplicitConversionSequence::CompareKind QualCK
3566         = CompareQualificationConversions(S, SCS1, SCS2))
3567     return QualCK;
3568 
3569   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3570     // Check for a better reference binding based on the kind of bindings.
3571     if (isBetterReferenceBindingKind(SCS1, SCS2))
3572       return ImplicitConversionSequence::Better;
3573     else if (isBetterReferenceBindingKind(SCS2, SCS1))
3574       return ImplicitConversionSequence::Worse;
3575 
3576     // C++ [over.ics.rank]p3b4:
3577     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3578     //      which the references refer are the same type except for
3579     //      top-level cv-qualifiers, and the type to which the reference
3580     //      initialized by S2 refers is more cv-qualified than the type
3581     //      to which the reference initialized by S1 refers.
3582     QualType T1 = SCS1.getToType(2);
3583     QualType T2 = SCS2.getToType(2);
3584     T1 = S.Context.getCanonicalType(T1);
3585     T2 = S.Context.getCanonicalType(T2);
3586     Qualifiers T1Quals, T2Quals;
3587     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3588     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3589     if (UnqualT1 == UnqualT2) {
3590       // Objective-C++ ARC: If the references refer to objects with different
3591       // lifetimes, prefer bindings that don't change lifetime.
3592       if (SCS1.ObjCLifetimeConversionBinding !=
3593                                           SCS2.ObjCLifetimeConversionBinding) {
3594         return SCS1.ObjCLifetimeConversionBinding
3595                                            ? ImplicitConversionSequence::Worse
3596                                            : ImplicitConversionSequence::Better;
3597       }
3598 
3599       // If the type is an array type, promote the element qualifiers to the
3600       // type for comparison.
3601       if (isa<ArrayType>(T1) && T1Quals)
3602         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3603       if (isa<ArrayType>(T2) && T2Quals)
3604         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3605       if (T2.isMoreQualifiedThan(T1))
3606         return ImplicitConversionSequence::Better;
3607       else if (T1.isMoreQualifiedThan(T2))
3608         return ImplicitConversionSequence::Worse;
3609     }
3610   }
3611 
3612   // In Microsoft mode, prefer an integral conversion to a
3613   // floating-to-integral conversion if the integral conversion
3614   // is between types of the same size.
3615   // For example:
3616   // void f(float);
3617   // void f(int);
3618   // int main {
3619   //    long a;
3620   //    f(a);
3621   // }
3622   // Here, MSVC will call f(int) instead of generating a compile error
3623   // as clang will do in standard mode.
3624   if (S.getLangOpts().MicrosoftMode &&
3625       SCS1.Second == ICK_Integral_Conversion &&
3626       SCS2.Second == ICK_Floating_Integral &&
3627       S.Context.getTypeSize(SCS1.getFromType()) ==
3628       S.Context.getTypeSize(SCS1.getToType(2)))
3629     return ImplicitConversionSequence::Better;
3630 
3631   return ImplicitConversionSequence::Indistinguishable;
3632 }
3633 
3634 /// CompareQualificationConversions - Compares two standard conversion
3635 /// sequences to determine whether they can be ranked based on their
3636 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3637 ImplicitConversionSequence::CompareKind
3638 CompareQualificationConversions(Sema &S,
3639                                 const StandardConversionSequence& SCS1,
3640                                 const StandardConversionSequence& SCS2) {
3641   // C++ 13.3.3.2p3:
3642   //  -- S1 and S2 differ only in their qualification conversion and
3643   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3644   //     cv-qualification signature of type T1 is a proper subset of
3645   //     the cv-qualification signature of type T2, and S1 is not the
3646   //     deprecated string literal array-to-pointer conversion (4.2).
3647   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3648       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3649     return ImplicitConversionSequence::Indistinguishable;
3650 
3651   // FIXME: the example in the standard doesn't use a qualification
3652   // conversion (!)
3653   QualType T1 = SCS1.getToType(2);
3654   QualType T2 = SCS2.getToType(2);
3655   T1 = S.Context.getCanonicalType(T1);
3656   T2 = S.Context.getCanonicalType(T2);
3657   Qualifiers T1Quals, T2Quals;
3658   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3659   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3660 
3661   // If the types are the same, we won't learn anything by unwrapped
3662   // them.
3663   if (UnqualT1 == UnqualT2)
3664     return ImplicitConversionSequence::Indistinguishable;
3665 
3666   // If the type is an array type, promote the element qualifiers to the type
3667   // for comparison.
3668   if (isa<ArrayType>(T1) && T1Quals)
3669     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3670   if (isa<ArrayType>(T2) && T2Quals)
3671     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3672 
3673   ImplicitConversionSequence::CompareKind Result
3674     = ImplicitConversionSequence::Indistinguishable;
3675 
3676   // Objective-C++ ARC:
3677   //   Prefer qualification conversions not involving a change in lifetime
3678   //   to qualification conversions that do not change lifetime.
3679   if (SCS1.QualificationIncludesObjCLifetime !=
3680                                       SCS2.QualificationIncludesObjCLifetime) {
3681     Result = SCS1.QualificationIncludesObjCLifetime
3682                ? ImplicitConversionSequence::Worse
3683                : ImplicitConversionSequence::Better;
3684   }
3685 
3686   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3687     // Within each iteration of the loop, we check the qualifiers to
3688     // determine if this still looks like a qualification
3689     // conversion. Then, if all is well, we unwrap one more level of
3690     // pointers or pointers-to-members and do it all again
3691     // until there are no more pointers or pointers-to-members left
3692     // to unwrap. This essentially mimics what
3693     // IsQualificationConversion does, but here we're checking for a
3694     // strict subset of qualifiers.
3695     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3696       // The qualifiers are the same, so this doesn't tell us anything
3697       // about how the sequences rank.
3698       ;
3699     else if (T2.isMoreQualifiedThan(T1)) {
3700       // T1 has fewer qualifiers, so it could be the better sequence.
3701       if (Result == ImplicitConversionSequence::Worse)
3702         // Neither has qualifiers that are a subset of the other's
3703         // qualifiers.
3704         return ImplicitConversionSequence::Indistinguishable;
3705 
3706       Result = ImplicitConversionSequence::Better;
3707     } else if (T1.isMoreQualifiedThan(T2)) {
3708       // T2 has fewer qualifiers, so it could be the better sequence.
3709       if (Result == ImplicitConversionSequence::Better)
3710         // Neither has qualifiers that are a subset of the other's
3711         // qualifiers.
3712         return ImplicitConversionSequence::Indistinguishable;
3713 
3714       Result = ImplicitConversionSequence::Worse;
3715     } else {
3716       // Qualifiers are disjoint.
3717       return ImplicitConversionSequence::Indistinguishable;
3718     }
3719 
3720     // If the types after this point are equivalent, we're done.
3721     if (S.Context.hasSameUnqualifiedType(T1, T2))
3722       break;
3723   }
3724 
3725   // Check that the winning standard conversion sequence isn't using
3726   // the deprecated string literal array to pointer conversion.
3727   switch (Result) {
3728   case ImplicitConversionSequence::Better:
3729     if (SCS1.DeprecatedStringLiteralToCharPtr)
3730       Result = ImplicitConversionSequence::Indistinguishable;
3731     break;
3732 
3733   case ImplicitConversionSequence::Indistinguishable:
3734     break;
3735 
3736   case ImplicitConversionSequence::Worse:
3737     if (SCS2.DeprecatedStringLiteralToCharPtr)
3738       Result = ImplicitConversionSequence::Indistinguishable;
3739     break;
3740   }
3741 
3742   return Result;
3743 }
3744 
3745 /// CompareDerivedToBaseConversions - Compares two standard conversion
3746 /// sequences to determine whether they can be ranked based on their
3747 /// various kinds of derived-to-base conversions (C++
3748 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
3749 /// conversions between Objective-C interface types.
3750 ImplicitConversionSequence::CompareKind
3751 CompareDerivedToBaseConversions(Sema &S,
3752                                 const StandardConversionSequence& SCS1,
3753                                 const StandardConversionSequence& SCS2) {
3754   QualType FromType1 = SCS1.getFromType();
3755   QualType ToType1 = SCS1.getToType(1);
3756   QualType FromType2 = SCS2.getFromType();
3757   QualType ToType2 = SCS2.getToType(1);
3758 
3759   // Adjust the types we're converting from via the array-to-pointer
3760   // conversion, if we need to.
3761   if (SCS1.First == ICK_Array_To_Pointer)
3762     FromType1 = S.Context.getArrayDecayedType(FromType1);
3763   if (SCS2.First == ICK_Array_To_Pointer)
3764     FromType2 = S.Context.getArrayDecayedType(FromType2);
3765 
3766   // Canonicalize all of the types.
3767   FromType1 = S.Context.getCanonicalType(FromType1);
3768   ToType1 = S.Context.getCanonicalType(ToType1);
3769   FromType2 = S.Context.getCanonicalType(FromType2);
3770   ToType2 = S.Context.getCanonicalType(ToType2);
3771 
3772   // C++ [over.ics.rank]p4b3:
3773   //
3774   //   If class B is derived directly or indirectly from class A and
3775   //   class C is derived directly or indirectly from B,
3776   //
3777   // Compare based on pointer conversions.
3778   if (SCS1.Second == ICK_Pointer_Conversion &&
3779       SCS2.Second == ICK_Pointer_Conversion &&
3780       /*FIXME: Remove if Objective-C id conversions get their own rank*/
3781       FromType1->isPointerType() && FromType2->isPointerType() &&
3782       ToType1->isPointerType() && ToType2->isPointerType()) {
3783     QualType FromPointee1
3784       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3785     QualType ToPointee1
3786       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3787     QualType FromPointee2
3788       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3789     QualType ToPointee2
3790       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3791 
3792     //   -- conversion of C* to B* is better than conversion of C* to A*,
3793     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3794       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3795         return ImplicitConversionSequence::Better;
3796       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3797         return ImplicitConversionSequence::Worse;
3798     }
3799 
3800     //   -- conversion of B* to A* is better than conversion of C* to A*,
3801     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3802       if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3803         return ImplicitConversionSequence::Better;
3804       else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3805         return ImplicitConversionSequence::Worse;
3806     }
3807   } else if (SCS1.Second == ICK_Pointer_Conversion &&
3808              SCS2.Second == ICK_Pointer_Conversion) {
3809     const ObjCObjectPointerType *FromPtr1
3810       = FromType1->getAs<ObjCObjectPointerType>();
3811     const ObjCObjectPointerType *FromPtr2
3812       = FromType2->getAs<ObjCObjectPointerType>();
3813     const ObjCObjectPointerType *ToPtr1
3814       = ToType1->getAs<ObjCObjectPointerType>();
3815     const ObjCObjectPointerType *ToPtr2
3816       = ToType2->getAs<ObjCObjectPointerType>();
3817 
3818     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3819       // Apply the same conversion ranking rules for Objective-C pointer types
3820       // that we do for C++ pointers to class types. However, we employ the
3821       // Objective-C pseudo-subtyping relationship used for assignment of
3822       // Objective-C pointer types.
3823       bool FromAssignLeft
3824         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3825       bool FromAssignRight
3826         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3827       bool ToAssignLeft
3828         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3829       bool ToAssignRight
3830         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3831 
3832       // A conversion to an a non-id object pointer type or qualified 'id'
3833       // type is better than a conversion to 'id'.
3834       if (ToPtr1->isObjCIdType() &&
3835           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3836         return ImplicitConversionSequence::Worse;
3837       if (ToPtr2->isObjCIdType() &&
3838           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3839         return ImplicitConversionSequence::Better;
3840 
3841       // A conversion to a non-id object pointer type is better than a
3842       // conversion to a qualified 'id' type
3843       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3844         return ImplicitConversionSequence::Worse;
3845       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3846         return ImplicitConversionSequence::Better;
3847 
3848       // A conversion to an a non-Class object pointer type or qualified 'Class'
3849       // type is better than a conversion to 'Class'.
3850       if (ToPtr1->isObjCClassType() &&
3851           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3852         return ImplicitConversionSequence::Worse;
3853       if (ToPtr2->isObjCClassType() &&
3854           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3855         return ImplicitConversionSequence::Better;
3856 
3857       // A conversion to a non-Class object pointer type is better than a
3858       // conversion to a qualified 'Class' type.
3859       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3860         return ImplicitConversionSequence::Worse;
3861       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3862         return ImplicitConversionSequence::Better;
3863 
3864       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3865       if (S.Context.hasSameType(FromType1, FromType2) &&
3866           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3867           (ToAssignLeft != ToAssignRight))
3868         return ToAssignLeft? ImplicitConversionSequence::Worse
3869                            : ImplicitConversionSequence::Better;
3870 
3871       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3872       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3873           (FromAssignLeft != FromAssignRight))
3874         return FromAssignLeft? ImplicitConversionSequence::Better
3875         : ImplicitConversionSequence::Worse;
3876     }
3877   }
3878 
3879   // Ranking of member-pointer types.
3880   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3881       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3882       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3883     const MemberPointerType * FromMemPointer1 =
3884                                         FromType1->getAs<MemberPointerType>();
3885     const MemberPointerType * ToMemPointer1 =
3886                                           ToType1->getAs<MemberPointerType>();
3887     const MemberPointerType * FromMemPointer2 =
3888                                           FromType2->getAs<MemberPointerType>();
3889     const MemberPointerType * ToMemPointer2 =
3890                                           ToType2->getAs<MemberPointerType>();
3891     const Type *FromPointeeType1 = FromMemPointer1->getClass();
3892     const Type *ToPointeeType1 = ToMemPointer1->getClass();
3893     const Type *FromPointeeType2 = FromMemPointer2->getClass();
3894     const Type *ToPointeeType2 = ToMemPointer2->getClass();
3895     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3896     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3897     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3898     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3899     // conversion of A::* to B::* is better than conversion of A::* to C::*,
3900     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3901       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3902         return ImplicitConversionSequence::Worse;
3903       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3904         return ImplicitConversionSequence::Better;
3905     }
3906     // conversion of B::* to C::* is better than conversion of A::* to C::*
3907     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3908       if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3909         return ImplicitConversionSequence::Better;
3910       else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3911         return ImplicitConversionSequence::Worse;
3912     }
3913   }
3914 
3915   if (SCS1.Second == ICK_Derived_To_Base) {
3916     //   -- conversion of C to B is better than conversion of C to A,
3917     //   -- binding of an expression of type C to a reference of type
3918     //      B& is better than binding an expression of type C to a
3919     //      reference of type A&,
3920     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3921         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3922       if (S.IsDerivedFrom(ToType1, ToType2))
3923         return ImplicitConversionSequence::Better;
3924       else if (S.IsDerivedFrom(ToType2, ToType1))
3925         return ImplicitConversionSequence::Worse;
3926     }
3927 
3928     //   -- conversion of B to A is better than conversion of C to A.
3929     //   -- binding of an expression of type B to a reference of type
3930     //      A& is better than binding an expression of type C to a
3931     //      reference of type A&,
3932     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3933         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3934       if (S.IsDerivedFrom(FromType2, FromType1))
3935         return ImplicitConversionSequence::Better;
3936       else if (S.IsDerivedFrom(FromType1, FromType2))
3937         return ImplicitConversionSequence::Worse;
3938     }
3939   }
3940 
3941   return ImplicitConversionSequence::Indistinguishable;
3942 }
3943 
3944 /// \brief Determine whether the given type is valid, e.g., it is not an invalid
3945 /// C++ class.
3946 static bool isTypeValid(QualType T) {
3947   if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
3948     return !Record->isInvalidDecl();
3949 
3950   return true;
3951 }
3952 
3953 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
3954 /// determine whether they are reference-related,
3955 /// reference-compatible, reference-compatible with added
3956 /// qualification, or incompatible, for use in C++ initialization by
3957 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3958 /// type, and the first type (T1) is the pointee type of the reference
3959 /// type being initialized.
3960 Sema::ReferenceCompareResult
3961 Sema::CompareReferenceRelationship(SourceLocation Loc,
3962                                    QualType OrigT1, QualType OrigT2,
3963                                    bool &DerivedToBase,
3964                                    bool &ObjCConversion,
3965                                    bool &ObjCLifetimeConversion) {
3966   assert(!OrigT1->isReferenceType() &&
3967     "T1 must be the pointee type of the reference type");
3968   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3969 
3970   QualType T1 = Context.getCanonicalType(OrigT1);
3971   QualType T2 = Context.getCanonicalType(OrigT2);
3972   Qualifiers T1Quals, T2Quals;
3973   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3974   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3975 
3976   // C++ [dcl.init.ref]p4:
3977   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3978   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3979   //   T1 is a base class of T2.
3980   DerivedToBase = false;
3981   ObjCConversion = false;
3982   ObjCLifetimeConversion = false;
3983   if (UnqualT1 == UnqualT2) {
3984     // Nothing to do.
3985   } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3986              isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
3987              IsDerivedFrom(UnqualT2, UnqualT1))
3988     DerivedToBase = true;
3989   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3990            UnqualT2->isObjCObjectOrInterfaceType() &&
3991            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3992     ObjCConversion = true;
3993   else
3994     return Ref_Incompatible;
3995 
3996   // At this point, we know that T1 and T2 are reference-related (at
3997   // least).
3998 
3999   // If the type is an array type, promote the element qualifiers to the type
4000   // for comparison.
4001   if (isa<ArrayType>(T1) && T1Quals)
4002     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
4003   if (isa<ArrayType>(T2) && T2Quals)
4004     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
4005 
4006   // C++ [dcl.init.ref]p4:
4007   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
4008   //   reference-related to T2 and cv1 is the same cv-qualification
4009   //   as, or greater cv-qualification than, cv2. For purposes of
4010   //   overload resolution, cases for which cv1 is greater
4011   //   cv-qualification than cv2 are identified as
4012   //   reference-compatible with added qualification (see 13.3.3.2).
4013   //
4014   // Note that we also require equivalence of Objective-C GC and address-space
4015   // qualifiers when performing these computations, so that e.g., an int in
4016   // address space 1 is not reference-compatible with an int in address
4017   // space 2.
4018   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
4019       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
4020     T1Quals.removeObjCLifetime();
4021     T2Quals.removeObjCLifetime();
4022     ObjCLifetimeConversion = true;
4023   }
4024 
4025   if (T1Quals == T2Quals)
4026     return Ref_Compatible;
4027   else if (T1Quals.compatiblyIncludes(T2Quals))
4028     return Ref_Compatible_With_Added_Qualification;
4029   else
4030     return Ref_Related;
4031 }
4032 
4033 /// \brief Look for a user-defined conversion to an value reference-compatible
4034 ///        with DeclType. Return true if something definite is found.
4035 static bool
4036 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
4037                          QualType DeclType, SourceLocation DeclLoc,
4038                          Expr *Init, QualType T2, bool AllowRvalues,
4039                          bool AllowExplicit) {
4040   assert(T2->isRecordType() && "Can only find conversions of record types.");
4041   CXXRecordDecl *T2RecordDecl
4042     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
4043 
4044   OverloadCandidateSet CandidateSet(DeclLoc);
4045   std::pair<CXXRecordDecl::conversion_iterator,
4046             CXXRecordDecl::conversion_iterator>
4047     Conversions = T2RecordDecl->getVisibleConversionFunctions();
4048   for (CXXRecordDecl::conversion_iterator
4049          I = Conversions.first, E = Conversions.second; I != E; ++I) {
4050     NamedDecl *D = *I;
4051     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
4052     if (isa<UsingShadowDecl>(D))
4053       D = cast<UsingShadowDecl>(D)->getTargetDecl();
4054 
4055     FunctionTemplateDecl *ConvTemplate
4056       = dyn_cast<FunctionTemplateDecl>(D);
4057     CXXConversionDecl *Conv;
4058     if (ConvTemplate)
4059       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
4060     else
4061       Conv = cast<CXXConversionDecl>(D);
4062 
4063     // If this is an explicit conversion, and we're not allowed to consider
4064     // explicit conversions, skip it.
4065     if (!AllowExplicit && Conv->isExplicit())
4066       continue;
4067 
4068     if (AllowRvalues) {
4069       bool DerivedToBase = false;
4070       bool ObjCConversion = false;
4071       bool ObjCLifetimeConversion = false;
4072 
4073       // If we are initializing an rvalue reference, don't permit conversion
4074       // functions that return lvalues.
4075       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
4076         const ReferenceType *RefType
4077           = Conv->getConversionType()->getAs<LValueReferenceType>();
4078         if (RefType && !RefType->getPointeeType()->isFunctionType())
4079           continue;
4080       }
4081 
4082       if (!ConvTemplate &&
4083           S.CompareReferenceRelationship(
4084             DeclLoc,
4085             Conv->getConversionType().getNonReferenceType()
4086               .getUnqualifiedType(),
4087             DeclType.getNonReferenceType().getUnqualifiedType(),
4088             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4089           Sema::Ref_Incompatible)
4090         continue;
4091     } else {
4092       // If the conversion function doesn't return a reference type,
4093       // it can't be considered for this conversion. An rvalue reference
4094       // is only acceptable if its referencee is a function type.
4095 
4096       const ReferenceType *RefType =
4097         Conv->getConversionType()->getAs<ReferenceType>();
4098       if (!RefType ||
4099           (!RefType->isLValueReferenceType() &&
4100            !RefType->getPointeeType()->isFunctionType()))
4101         continue;
4102     }
4103 
4104     if (ConvTemplate)
4105       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4106                                        Init, DeclType, CandidateSet);
4107     else
4108       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4109                                DeclType, CandidateSet);
4110   }
4111 
4112   bool HadMultipleCandidates = (CandidateSet.size() > 1);
4113 
4114   OverloadCandidateSet::iterator Best;
4115   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4116   case OR_Success:
4117     // C++ [over.ics.ref]p1:
4118     //
4119     //   [...] If the parameter binds directly to the result of
4120     //   applying a conversion function to the argument
4121     //   expression, the implicit conversion sequence is a
4122     //   user-defined conversion sequence (13.3.3.1.2), with the
4123     //   second standard conversion sequence either an identity
4124     //   conversion or, if the conversion function returns an
4125     //   entity of a type that is a derived class of the parameter
4126     //   type, a derived-to-base Conversion.
4127     if (!Best->FinalConversion.DirectBinding)
4128       return false;
4129 
4130     ICS.setUserDefined();
4131     ICS.UserDefined.Before = Best->Conversions[0].Standard;
4132     ICS.UserDefined.After = Best->FinalConversion;
4133     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4134     ICS.UserDefined.ConversionFunction = Best->Function;
4135     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4136     ICS.UserDefined.EllipsisConversion = false;
4137     assert(ICS.UserDefined.After.ReferenceBinding &&
4138            ICS.UserDefined.After.DirectBinding &&
4139            "Expected a direct reference binding!");
4140     return true;
4141 
4142   case OR_Ambiguous:
4143     ICS.setAmbiguous();
4144     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4145          Cand != CandidateSet.end(); ++Cand)
4146       if (Cand->Viable)
4147         ICS.Ambiguous.addConversion(Cand->Function);
4148     return true;
4149 
4150   case OR_No_Viable_Function:
4151   case OR_Deleted:
4152     // There was no suitable conversion, or we found a deleted
4153     // conversion; continue with other checks.
4154     return false;
4155   }
4156 
4157   llvm_unreachable("Invalid OverloadResult!");
4158 }
4159 
4160 /// \brief Compute an implicit conversion sequence for reference
4161 /// initialization.
4162 static ImplicitConversionSequence
4163 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4164                  SourceLocation DeclLoc,
4165                  bool SuppressUserConversions,
4166                  bool AllowExplicit) {
4167   assert(DeclType->isReferenceType() && "Reference init needs a reference");
4168 
4169   // Most paths end in a failed conversion.
4170   ImplicitConversionSequence ICS;
4171   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4172 
4173   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4174   QualType T2 = Init->getType();
4175 
4176   // If the initializer is the address of an overloaded function, try
4177   // to resolve the overloaded function. If all goes well, T2 is the
4178   // type of the resulting function.
4179   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4180     DeclAccessPair Found;
4181     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4182                                                                 false, Found))
4183       T2 = Fn->getType();
4184   }
4185 
4186   // Compute some basic properties of the types and the initializer.
4187   bool isRValRef = DeclType->isRValueReferenceType();
4188   bool DerivedToBase = false;
4189   bool ObjCConversion = false;
4190   bool ObjCLifetimeConversion = false;
4191   Expr::Classification InitCategory = Init->Classify(S.Context);
4192   Sema::ReferenceCompareResult RefRelationship
4193     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4194                                      ObjCConversion, ObjCLifetimeConversion);
4195 
4196 
4197   // C++0x [dcl.init.ref]p5:
4198   //   A reference to type "cv1 T1" is initialized by an expression
4199   //   of type "cv2 T2" as follows:
4200 
4201   //     -- If reference is an lvalue reference and the initializer expression
4202   if (!isRValRef) {
4203     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4204     //        reference-compatible with "cv2 T2," or
4205     //
4206     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4207     if (InitCategory.isLValue() &&
4208         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4209       // C++ [over.ics.ref]p1:
4210       //   When a parameter of reference type binds directly (8.5.3)
4211       //   to an argument expression, the implicit conversion sequence
4212       //   is the identity conversion, unless the argument expression
4213       //   has a type that is a derived class of the parameter type,
4214       //   in which case the implicit conversion sequence is a
4215       //   derived-to-base Conversion (13.3.3.1).
4216       ICS.setStandard();
4217       ICS.Standard.First = ICK_Identity;
4218       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4219                          : ObjCConversion? ICK_Compatible_Conversion
4220                          : ICK_Identity;
4221       ICS.Standard.Third = ICK_Identity;
4222       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4223       ICS.Standard.setToType(0, T2);
4224       ICS.Standard.setToType(1, T1);
4225       ICS.Standard.setToType(2, T1);
4226       ICS.Standard.ReferenceBinding = true;
4227       ICS.Standard.DirectBinding = true;
4228       ICS.Standard.IsLvalueReference = !isRValRef;
4229       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4230       ICS.Standard.BindsToRvalue = false;
4231       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4232       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4233       ICS.Standard.CopyConstructor = 0;
4234 
4235       // Nothing more to do: the inaccessibility/ambiguity check for
4236       // derived-to-base conversions is suppressed when we're
4237       // computing the implicit conversion sequence (C++
4238       // [over.best.ics]p2).
4239       return ICS;
4240     }
4241 
4242     //       -- has a class type (i.e., T2 is a class type), where T1 is
4243     //          not reference-related to T2, and can be implicitly
4244     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4245     //          is reference-compatible with "cv3 T3" 92) (this
4246     //          conversion is selected by enumerating the applicable
4247     //          conversion functions (13.3.1.6) and choosing the best
4248     //          one through overload resolution (13.3)),
4249     if (!SuppressUserConversions && T2->isRecordType() &&
4250         !S.RequireCompleteType(DeclLoc, T2, 0) &&
4251         RefRelationship == Sema::Ref_Incompatible) {
4252       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4253                                    Init, T2, /*AllowRvalues=*/false,
4254                                    AllowExplicit))
4255         return ICS;
4256     }
4257   }
4258 
4259   //     -- Otherwise, the reference shall be an lvalue reference to a
4260   //        non-volatile const type (i.e., cv1 shall be const), or the reference
4261   //        shall be an rvalue reference.
4262   //
4263   // We actually handle one oddity of C++ [over.ics.ref] at this
4264   // point, which is that, due to p2 (which short-circuits reference
4265   // binding by only attempting a simple conversion for non-direct
4266   // bindings) and p3's strange wording, we allow a const volatile
4267   // reference to bind to an rvalue. Hence the check for the presence
4268   // of "const" rather than checking for "const" being the only
4269   // qualifier.
4270   // This is also the point where rvalue references and lvalue inits no longer
4271   // go together.
4272   if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4273     return ICS;
4274 
4275   //       -- If the initializer expression
4276   //
4277   //            -- is an xvalue, class prvalue, array prvalue or function
4278   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4279   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4280       (InitCategory.isXValue() ||
4281       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4282       (InitCategory.isLValue() && T2->isFunctionType()))) {
4283     ICS.setStandard();
4284     ICS.Standard.First = ICK_Identity;
4285     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4286                       : ObjCConversion? ICK_Compatible_Conversion
4287                       : ICK_Identity;
4288     ICS.Standard.Third = ICK_Identity;
4289     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4290     ICS.Standard.setToType(0, T2);
4291     ICS.Standard.setToType(1, T1);
4292     ICS.Standard.setToType(2, T1);
4293     ICS.Standard.ReferenceBinding = true;
4294     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4295     // binding unless we're binding to a class prvalue.
4296     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4297     // allow the use of rvalue references in C++98/03 for the benefit of
4298     // standard library implementors; therefore, we need the xvalue check here.
4299     ICS.Standard.DirectBinding =
4300       S.getLangOpts().CPlusPlus11 ||
4301       (InitCategory.isPRValue() && !T2->isRecordType());
4302     ICS.Standard.IsLvalueReference = !isRValRef;
4303     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4304     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4305     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4306     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4307     ICS.Standard.CopyConstructor = 0;
4308     return ICS;
4309   }
4310 
4311   //            -- has a class type (i.e., T2 is a class type), where T1 is not
4312   //               reference-related to T2, and can be implicitly converted to
4313   //               an xvalue, class prvalue, or function lvalue of type
4314   //               "cv3 T3", where "cv1 T1" is reference-compatible with
4315   //               "cv3 T3",
4316   //
4317   //          then the reference is bound to the value of the initializer
4318   //          expression in the first case and to the result of the conversion
4319   //          in the second case (or, in either case, to an appropriate base
4320   //          class subobject).
4321   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4322       T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4323       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4324                                Init, T2, /*AllowRvalues=*/true,
4325                                AllowExplicit)) {
4326     // In the second case, if the reference is an rvalue reference
4327     // and the second standard conversion sequence of the
4328     // user-defined conversion sequence includes an lvalue-to-rvalue
4329     // conversion, the program is ill-formed.
4330     if (ICS.isUserDefined() && isRValRef &&
4331         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4332       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4333 
4334     return ICS;
4335   }
4336 
4337   //       -- Otherwise, a temporary of type "cv1 T1" is created and
4338   //          initialized from the initializer expression using the
4339   //          rules for a non-reference copy initialization (8.5). The
4340   //          reference is then bound to the temporary. If T1 is
4341   //          reference-related to T2, cv1 must be the same
4342   //          cv-qualification as, or greater cv-qualification than,
4343   //          cv2; otherwise, the program is ill-formed.
4344   if (RefRelationship == Sema::Ref_Related) {
4345     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4346     // we would be reference-compatible or reference-compatible with
4347     // added qualification. But that wasn't the case, so the reference
4348     // initialization fails.
4349     //
4350     // Note that we only want to check address spaces and cvr-qualifiers here.
4351     // ObjC GC and lifetime qualifiers aren't important.
4352     Qualifiers T1Quals = T1.getQualifiers();
4353     Qualifiers T2Quals = T2.getQualifiers();
4354     T1Quals.removeObjCGCAttr();
4355     T1Quals.removeObjCLifetime();
4356     T2Quals.removeObjCGCAttr();
4357     T2Quals.removeObjCLifetime();
4358     if (!T1Quals.compatiblyIncludes(T2Quals))
4359       return ICS;
4360   }
4361 
4362   // If at least one of the types is a class type, the types are not
4363   // related, and we aren't allowed any user conversions, the
4364   // reference binding fails. This case is important for breaking
4365   // recursion, since TryImplicitConversion below will attempt to
4366   // create a temporary through the use of a copy constructor.
4367   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4368       (T1->isRecordType() || T2->isRecordType()))
4369     return ICS;
4370 
4371   // If T1 is reference-related to T2 and the reference is an rvalue
4372   // reference, the initializer expression shall not be an lvalue.
4373   if (RefRelationship >= Sema::Ref_Related &&
4374       isRValRef && Init->Classify(S.Context).isLValue())
4375     return ICS;
4376 
4377   // C++ [over.ics.ref]p2:
4378   //   When a parameter of reference type is not bound directly to
4379   //   an argument expression, the conversion sequence is the one
4380   //   required to convert the argument expression to the
4381   //   underlying type of the reference according to
4382   //   13.3.3.1. Conceptually, this conversion sequence corresponds
4383   //   to copy-initializing a temporary of the underlying type with
4384   //   the argument expression. Any difference in top-level
4385   //   cv-qualification is subsumed by the initialization itself
4386   //   and does not constitute a conversion.
4387   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4388                               /*AllowExplicit=*/false,
4389                               /*InOverloadResolution=*/false,
4390                               /*CStyle=*/false,
4391                               /*AllowObjCWritebackConversion=*/false);
4392 
4393   // Of course, that's still a reference binding.
4394   if (ICS.isStandard()) {
4395     ICS.Standard.ReferenceBinding = true;
4396     ICS.Standard.IsLvalueReference = !isRValRef;
4397     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4398     ICS.Standard.BindsToRvalue = true;
4399     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4400     ICS.Standard.ObjCLifetimeConversionBinding = false;
4401   } else if (ICS.isUserDefined()) {
4402     // Don't allow rvalue references to bind to lvalues.
4403     if (DeclType->isRValueReferenceType()) {
4404       if (const ReferenceType *RefType
4405             = ICS.UserDefined.ConversionFunction->getResultType()
4406                 ->getAs<LValueReferenceType>()) {
4407         if (!RefType->getPointeeType()->isFunctionType()) {
4408           ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4409                      DeclType);
4410           return ICS;
4411         }
4412       }
4413     }
4414 
4415     ICS.UserDefined.After.ReferenceBinding = true;
4416     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4417     ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4418     ICS.UserDefined.After.BindsToRvalue = true;
4419     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4420     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4421   }
4422 
4423   return ICS;
4424 }
4425 
4426 static ImplicitConversionSequence
4427 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4428                       bool SuppressUserConversions,
4429                       bool InOverloadResolution,
4430                       bool AllowObjCWritebackConversion,
4431                       bool AllowExplicit = false);
4432 
4433 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4434 /// initializer list From.
4435 static ImplicitConversionSequence
4436 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4437                   bool SuppressUserConversions,
4438                   bool InOverloadResolution,
4439                   bool AllowObjCWritebackConversion) {
4440   // C++11 [over.ics.list]p1:
4441   //   When an argument is an initializer list, it is not an expression and
4442   //   special rules apply for converting it to a parameter type.
4443 
4444   ImplicitConversionSequence Result;
4445   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4446   Result.setListInitializationSequence();
4447 
4448   // We need a complete type for what follows. Incomplete types can never be
4449   // initialized from init lists.
4450   if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4451     return Result;
4452 
4453   // C++11 [over.ics.list]p2:
4454   //   If the parameter type is std::initializer_list<X> or "array of X" and
4455   //   all the elements can be implicitly converted to X, the implicit
4456   //   conversion sequence is the worst conversion necessary to convert an
4457   //   element of the list to X.
4458   bool toStdInitializerList = false;
4459   QualType X;
4460   if (ToType->isArrayType())
4461     X = S.Context.getAsArrayType(ToType)->getElementType();
4462   else
4463     toStdInitializerList = S.isStdInitializerList(ToType, &X);
4464   if (!X.isNull()) {
4465     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4466       Expr *Init = From->getInit(i);
4467       ImplicitConversionSequence ICS =
4468           TryCopyInitialization(S, Init, X, SuppressUserConversions,
4469                                 InOverloadResolution,
4470                                 AllowObjCWritebackConversion);
4471       // If a single element isn't convertible, fail.
4472       if (ICS.isBad()) {
4473         Result = ICS;
4474         break;
4475       }
4476       // Otherwise, look for the worst conversion.
4477       if (Result.isBad() ||
4478           CompareImplicitConversionSequences(S, ICS, Result) ==
4479               ImplicitConversionSequence::Worse)
4480         Result = ICS;
4481     }
4482 
4483     // For an empty list, we won't have computed any conversion sequence.
4484     // Introduce the identity conversion sequence.
4485     if (From->getNumInits() == 0) {
4486       Result.setStandard();
4487       Result.Standard.setAsIdentityConversion();
4488       Result.Standard.setFromType(ToType);
4489       Result.Standard.setAllToTypes(ToType);
4490     }
4491 
4492     Result.setListInitializationSequence();
4493     Result.setStdInitializerListElement(toStdInitializerList);
4494     return Result;
4495   }
4496 
4497   // C++11 [over.ics.list]p3:
4498   //   Otherwise, if the parameter is a non-aggregate class X and overload
4499   //   resolution chooses a single best constructor [...] the implicit
4500   //   conversion sequence is a user-defined conversion sequence. If multiple
4501   //   constructors are viable but none is better than the others, the
4502   //   implicit conversion sequence is a user-defined conversion sequence.
4503   if (ToType->isRecordType() && !ToType->isAggregateType()) {
4504     // This function can deal with initializer lists.
4505     Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4506                                       /*AllowExplicit=*/false,
4507                                       InOverloadResolution, /*CStyle=*/false,
4508                                       AllowObjCWritebackConversion);
4509     Result.setListInitializationSequence();
4510     return Result;
4511   }
4512 
4513   // C++11 [over.ics.list]p4:
4514   //   Otherwise, if the parameter has an aggregate type which can be
4515   //   initialized from the initializer list [...] the implicit conversion
4516   //   sequence is a user-defined conversion sequence.
4517   if (ToType->isAggregateType()) {
4518     // Type is an aggregate, argument is an init list. At this point it comes
4519     // down to checking whether the initialization works.
4520     // FIXME: Find out whether this parameter is consumed or not.
4521     InitializedEntity Entity =
4522         InitializedEntity::InitializeParameter(S.Context, ToType,
4523                                                /*Consumed=*/false);
4524     if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4525       Result.setUserDefined();
4526       Result.UserDefined.Before.setAsIdentityConversion();
4527       // Initializer lists don't have a type.
4528       Result.UserDefined.Before.setFromType(QualType());
4529       Result.UserDefined.Before.setAllToTypes(QualType());
4530 
4531       Result.UserDefined.After.setAsIdentityConversion();
4532       Result.UserDefined.After.setFromType(ToType);
4533       Result.UserDefined.After.setAllToTypes(ToType);
4534       Result.UserDefined.ConversionFunction = 0;
4535     }
4536     return Result;
4537   }
4538 
4539   // C++11 [over.ics.list]p5:
4540   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4541   if (ToType->isReferenceType()) {
4542     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4543     // mention initializer lists in any way. So we go by what list-
4544     // initialization would do and try to extrapolate from that.
4545 
4546     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4547 
4548     // If the initializer list has a single element that is reference-related
4549     // to the parameter type, we initialize the reference from that.
4550     if (From->getNumInits() == 1) {
4551       Expr *Init = From->getInit(0);
4552 
4553       QualType T2 = Init->getType();
4554 
4555       // If the initializer is the address of an overloaded function, try
4556       // to resolve the overloaded function. If all goes well, T2 is the
4557       // type of the resulting function.
4558       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4559         DeclAccessPair Found;
4560         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4561                                    Init, ToType, false, Found))
4562           T2 = Fn->getType();
4563       }
4564 
4565       // Compute some basic properties of the types and the initializer.
4566       bool dummy1 = false;
4567       bool dummy2 = false;
4568       bool dummy3 = false;
4569       Sema::ReferenceCompareResult RefRelationship
4570         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4571                                          dummy2, dummy3);
4572 
4573       if (RefRelationship >= Sema::Ref_Related)
4574         return TryReferenceInit(S, Init, ToType,
4575                                 /*FIXME:*/From->getLocStart(),
4576                                 SuppressUserConversions,
4577                                 /*AllowExplicit=*/false);
4578     }
4579 
4580     // Otherwise, we bind the reference to a temporary created from the
4581     // initializer list.
4582     Result = TryListConversion(S, From, T1, SuppressUserConversions,
4583                                InOverloadResolution,
4584                                AllowObjCWritebackConversion);
4585     if (Result.isFailure())
4586       return Result;
4587     assert(!Result.isEllipsis() &&
4588            "Sub-initialization cannot result in ellipsis conversion.");
4589 
4590     // Can we even bind to a temporary?
4591     if (ToType->isRValueReferenceType() ||
4592         (T1.isConstQualified() && !T1.isVolatileQualified())) {
4593       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4594                                             Result.UserDefined.After;
4595       SCS.ReferenceBinding = true;
4596       SCS.IsLvalueReference = ToType->isLValueReferenceType();
4597       SCS.BindsToRvalue = true;
4598       SCS.BindsToFunctionLvalue = false;
4599       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4600       SCS.ObjCLifetimeConversionBinding = false;
4601     } else
4602       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4603                     From, ToType);
4604     return Result;
4605   }
4606 
4607   // C++11 [over.ics.list]p6:
4608   //   Otherwise, if the parameter type is not a class:
4609   if (!ToType->isRecordType()) {
4610     //    - if the initializer list has one element, the implicit conversion
4611     //      sequence is the one required to convert the element to the
4612     //      parameter type.
4613     unsigned NumInits = From->getNumInits();
4614     if (NumInits == 1)
4615       Result = TryCopyInitialization(S, From->getInit(0), ToType,
4616                                      SuppressUserConversions,
4617                                      InOverloadResolution,
4618                                      AllowObjCWritebackConversion);
4619     //    - if the initializer list has no elements, the implicit conversion
4620     //      sequence is the identity conversion.
4621     else if (NumInits == 0) {
4622       Result.setStandard();
4623       Result.Standard.setAsIdentityConversion();
4624       Result.Standard.setFromType(ToType);
4625       Result.Standard.setAllToTypes(ToType);
4626     }
4627     Result.setListInitializationSequence();
4628     return Result;
4629   }
4630 
4631   // C++11 [over.ics.list]p7:
4632   //   In all cases other than those enumerated above, no conversion is possible
4633   return Result;
4634 }
4635 
4636 /// TryCopyInitialization - Try to copy-initialize a value of type
4637 /// ToType from the expression From. Return the implicit conversion
4638 /// sequence required to pass this argument, which may be a bad
4639 /// conversion sequence (meaning that the argument cannot be passed to
4640 /// a parameter of this type). If @p SuppressUserConversions, then we
4641 /// do not permit any user-defined conversion sequences.
4642 static ImplicitConversionSequence
4643 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4644                       bool SuppressUserConversions,
4645                       bool InOverloadResolution,
4646                       bool AllowObjCWritebackConversion,
4647                       bool AllowExplicit) {
4648   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4649     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4650                              InOverloadResolution,AllowObjCWritebackConversion);
4651 
4652   if (ToType->isReferenceType())
4653     return TryReferenceInit(S, From, ToType,
4654                             /*FIXME:*/From->getLocStart(),
4655                             SuppressUserConversions,
4656                             AllowExplicit);
4657 
4658   return TryImplicitConversion(S, From, ToType,
4659                                SuppressUserConversions,
4660                                /*AllowExplicit=*/false,
4661                                InOverloadResolution,
4662                                /*CStyle=*/false,
4663                                AllowObjCWritebackConversion);
4664 }
4665 
4666 static bool TryCopyInitialization(const CanQualType FromQTy,
4667                                   const CanQualType ToQTy,
4668                                   Sema &S,
4669                                   SourceLocation Loc,
4670                                   ExprValueKind FromVK) {
4671   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4672   ImplicitConversionSequence ICS =
4673     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4674 
4675   return !ICS.isBad();
4676 }
4677 
4678 /// TryObjectArgumentInitialization - Try to initialize the object
4679 /// parameter of the given member function (@c Method) from the
4680 /// expression @p From.
4681 static ImplicitConversionSequence
4682 TryObjectArgumentInitialization(Sema &S, QualType FromType,
4683                                 Expr::Classification FromClassification,
4684                                 CXXMethodDecl *Method,
4685                                 CXXRecordDecl *ActingContext) {
4686   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4687   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4688   //                 const volatile object.
4689   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4690     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4691   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4692 
4693   // Set up the conversion sequence as a "bad" conversion, to allow us
4694   // to exit early.
4695   ImplicitConversionSequence ICS;
4696 
4697   // We need to have an object of class type.
4698   if (const PointerType *PT = FromType->getAs<PointerType>()) {
4699     FromType = PT->getPointeeType();
4700 
4701     // When we had a pointer, it's implicitly dereferenced, so we
4702     // better have an lvalue.
4703     assert(FromClassification.isLValue());
4704   }
4705 
4706   assert(FromType->isRecordType());
4707 
4708   // C++0x [over.match.funcs]p4:
4709   //   For non-static member functions, the type of the implicit object
4710   //   parameter is
4711   //
4712   //     - "lvalue reference to cv X" for functions declared without a
4713   //        ref-qualifier or with the & ref-qualifier
4714   //     - "rvalue reference to cv X" for functions declared with the &&
4715   //        ref-qualifier
4716   //
4717   // where X is the class of which the function is a member and cv is the
4718   // cv-qualification on the member function declaration.
4719   //
4720   // However, when finding an implicit conversion sequence for the argument, we
4721   // are not allowed to create temporaries or perform user-defined conversions
4722   // (C++ [over.match.funcs]p5). We perform a simplified version of
4723   // reference binding here, that allows class rvalues to bind to
4724   // non-constant references.
4725 
4726   // First check the qualifiers.
4727   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4728   if (ImplicitParamType.getCVRQualifiers()
4729                                     != FromTypeCanon.getLocalCVRQualifiers() &&
4730       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4731     ICS.setBad(BadConversionSequence::bad_qualifiers,
4732                FromType, ImplicitParamType);
4733     return ICS;
4734   }
4735 
4736   // Check that we have either the same type or a derived type. It
4737   // affects the conversion rank.
4738   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4739   ImplicitConversionKind SecondKind;
4740   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4741     SecondKind = ICK_Identity;
4742   } else if (S.IsDerivedFrom(FromType, ClassType))
4743     SecondKind = ICK_Derived_To_Base;
4744   else {
4745     ICS.setBad(BadConversionSequence::unrelated_class,
4746                FromType, ImplicitParamType);
4747     return ICS;
4748   }
4749 
4750   // Check the ref-qualifier.
4751   switch (Method->getRefQualifier()) {
4752   case RQ_None:
4753     // Do nothing; we don't care about lvalueness or rvalueness.
4754     break;
4755 
4756   case RQ_LValue:
4757     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4758       // non-const lvalue reference cannot bind to an rvalue
4759       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4760                  ImplicitParamType);
4761       return ICS;
4762     }
4763     break;
4764 
4765   case RQ_RValue:
4766     if (!FromClassification.isRValue()) {
4767       // rvalue reference cannot bind to an lvalue
4768       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4769                  ImplicitParamType);
4770       return ICS;
4771     }
4772     break;
4773   }
4774 
4775   // Success. Mark this as a reference binding.
4776   ICS.setStandard();
4777   ICS.Standard.setAsIdentityConversion();
4778   ICS.Standard.Second = SecondKind;
4779   ICS.Standard.setFromType(FromType);
4780   ICS.Standard.setAllToTypes(ImplicitParamType);
4781   ICS.Standard.ReferenceBinding = true;
4782   ICS.Standard.DirectBinding = true;
4783   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4784   ICS.Standard.BindsToFunctionLvalue = false;
4785   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4786   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4787     = (Method->getRefQualifier() == RQ_None);
4788   return ICS;
4789 }
4790 
4791 /// PerformObjectArgumentInitialization - Perform initialization of
4792 /// the implicit object parameter for the given Method with the given
4793 /// expression.
4794 ExprResult
4795 Sema::PerformObjectArgumentInitialization(Expr *From,
4796                                           NestedNameSpecifier *Qualifier,
4797                                           NamedDecl *FoundDecl,
4798                                           CXXMethodDecl *Method) {
4799   QualType FromRecordType, DestType;
4800   QualType ImplicitParamRecordType  =
4801     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4802 
4803   Expr::Classification FromClassification;
4804   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4805     FromRecordType = PT->getPointeeType();
4806     DestType = Method->getThisType(Context);
4807     FromClassification = Expr::Classification::makeSimpleLValue();
4808   } else {
4809     FromRecordType = From->getType();
4810     DestType = ImplicitParamRecordType;
4811     FromClassification = From->Classify(Context);
4812   }
4813 
4814   // Note that we always use the true parent context when performing
4815   // the actual argument initialization.
4816   ImplicitConversionSequence ICS
4817     = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4818                                       Method, Method->getParent());
4819   if (ICS.isBad()) {
4820     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4821       Qualifiers FromQs = FromRecordType.getQualifiers();
4822       Qualifiers ToQs = DestType.getQualifiers();
4823       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4824       if (CVR) {
4825         Diag(From->getLocStart(),
4826              diag::err_member_function_call_bad_cvr)
4827           << Method->getDeclName() << FromRecordType << (CVR - 1)
4828           << From->getSourceRange();
4829         Diag(Method->getLocation(), diag::note_previous_decl)
4830           << Method->getDeclName();
4831         return ExprError();
4832       }
4833     }
4834 
4835     return Diag(From->getLocStart(),
4836                 diag::err_implicit_object_parameter_init)
4837        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4838   }
4839 
4840   if (ICS.Standard.Second == ICK_Derived_To_Base) {
4841     ExprResult FromRes =
4842       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4843     if (FromRes.isInvalid())
4844       return ExprError();
4845     From = FromRes.take();
4846   }
4847 
4848   if (!Context.hasSameType(From->getType(), DestType))
4849     From = ImpCastExprToType(From, DestType, CK_NoOp,
4850                              From->getValueKind()).take();
4851   return Owned(From);
4852 }
4853 
4854 /// TryContextuallyConvertToBool - Attempt to contextually convert the
4855 /// expression From to bool (C++0x [conv]p3).
4856 static ImplicitConversionSequence
4857 TryContextuallyConvertToBool(Sema &S, Expr *From) {
4858   // FIXME: This is pretty broken.
4859   return TryImplicitConversion(S, From, S.Context.BoolTy,
4860                                // FIXME: Are these flags correct?
4861                                /*SuppressUserConversions=*/false,
4862                                /*AllowExplicit=*/true,
4863                                /*InOverloadResolution=*/false,
4864                                /*CStyle=*/false,
4865                                /*AllowObjCWritebackConversion=*/false);
4866 }
4867 
4868 /// PerformContextuallyConvertToBool - Perform a contextual conversion
4869 /// of the expression From to bool (C++0x [conv]p3).
4870 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4871   if (checkPlaceholderForOverload(*this, From))
4872     return ExprError();
4873 
4874   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4875   if (!ICS.isBad())
4876     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4877 
4878   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4879     return Diag(From->getLocStart(),
4880                 diag::err_typecheck_bool_condition)
4881                   << From->getType() << From->getSourceRange();
4882   return ExprError();
4883 }
4884 
4885 /// Check that the specified conversion is permitted in a converted constant
4886 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
4887 /// is acceptable.
4888 static bool CheckConvertedConstantConversions(Sema &S,
4889                                               StandardConversionSequence &SCS) {
4890   // Since we know that the target type is an integral or unscoped enumeration
4891   // type, most conversion kinds are impossible. All possible First and Third
4892   // conversions are fine.
4893   switch (SCS.Second) {
4894   case ICK_Identity:
4895   case ICK_Integral_Promotion:
4896   case ICK_Integral_Conversion:
4897   case ICK_Zero_Event_Conversion:
4898     return true;
4899 
4900   case ICK_Boolean_Conversion:
4901     // Conversion from an integral or unscoped enumeration type to bool is
4902     // classified as ICK_Boolean_Conversion, but it's also an integral
4903     // conversion, so it's permitted in a converted constant expression.
4904     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4905            SCS.getToType(2)->isBooleanType();
4906 
4907   case ICK_Floating_Integral:
4908   case ICK_Complex_Real:
4909     return false;
4910 
4911   case ICK_Lvalue_To_Rvalue:
4912   case ICK_Array_To_Pointer:
4913   case ICK_Function_To_Pointer:
4914   case ICK_NoReturn_Adjustment:
4915   case ICK_Qualification:
4916   case ICK_Compatible_Conversion:
4917   case ICK_Vector_Conversion:
4918   case ICK_Vector_Splat:
4919   case ICK_Derived_To_Base:
4920   case ICK_Pointer_Conversion:
4921   case ICK_Pointer_Member:
4922   case ICK_Block_Pointer_Conversion:
4923   case ICK_Writeback_Conversion:
4924   case ICK_Floating_Promotion:
4925   case ICK_Complex_Promotion:
4926   case ICK_Complex_Conversion:
4927   case ICK_Floating_Conversion:
4928   case ICK_TransparentUnionConversion:
4929     llvm_unreachable("unexpected second conversion kind");
4930 
4931   case ICK_Num_Conversion_Kinds:
4932     break;
4933   }
4934 
4935   llvm_unreachable("unknown conversion kind");
4936 }
4937 
4938 /// CheckConvertedConstantExpression - Check that the expression From is a
4939 /// converted constant expression of type T, perform the conversion and produce
4940 /// the converted expression, per C++11 [expr.const]p3.
4941 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4942                                                   llvm::APSInt &Value,
4943                                                   CCEKind CCE) {
4944   assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
4945   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4946 
4947   if (checkPlaceholderForOverload(*this, From))
4948     return ExprError();
4949 
4950   // C++11 [expr.const]p3 with proposed wording fixes:
4951   //  A converted constant expression of type T is a core constant expression,
4952   //  implicitly converted to a prvalue of type T, where the converted
4953   //  expression is a literal constant expression and the implicit conversion
4954   //  sequence contains only user-defined conversions, lvalue-to-rvalue
4955   //  conversions, integral promotions, and integral conversions other than
4956   //  narrowing conversions.
4957   ImplicitConversionSequence ICS =
4958     TryImplicitConversion(From, T,
4959                           /*SuppressUserConversions=*/false,
4960                           /*AllowExplicit=*/false,
4961                           /*InOverloadResolution=*/false,
4962                           /*CStyle=*/false,
4963                           /*AllowObjcWritebackConversion=*/false);
4964   StandardConversionSequence *SCS = 0;
4965   switch (ICS.getKind()) {
4966   case ImplicitConversionSequence::StandardConversion:
4967     if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4968       return Diag(From->getLocStart(),
4969                   diag::err_typecheck_converted_constant_expression_disallowed)
4970                << From->getType() << From->getSourceRange() << T;
4971     SCS = &ICS.Standard;
4972     break;
4973   case ImplicitConversionSequence::UserDefinedConversion:
4974     // We are converting from class type to an integral or enumeration type, so
4975     // the Before sequence must be trivial.
4976     if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4977       return Diag(From->getLocStart(),
4978                   diag::err_typecheck_converted_constant_expression_disallowed)
4979                << From->getType() << From->getSourceRange() << T;
4980     SCS = &ICS.UserDefined.After;
4981     break;
4982   case ImplicitConversionSequence::AmbiguousConversion:
4983   case ImplicitConversionSequence::BadConversion:
4984     if (!DiagnoseMultipleUserDefinedConversion(From, T))
4985       return Diag(From->getLocStart(),
4986                   diag::err_typecheck_converted_constant_expression)
4987                     << From->getType() << From->getSourceRange() << T;
4988     return ExprError();
4989 
4990   case ImplicitConversionSequence::EllipsisConversion:
4991     llvm_unreachable("ellipsis conversion in converted constant expression");
4992   }
4993 
4994   ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4995   if (Result.isInvalid())
4996     return Result;
4997 
4998   // Check for a narrowing implicit conversion.
4999   APValue PreNarrowingValue;
5000   QualType PreNarrowingType;
5001   switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
5002                                 PreNarrowingType)) {
5003   case NK_Variable_Narrowing:
5004     // Implicit conversion to a narrower type, and the value is not a constant
5005     // expression. We'll diagnose this in a moment.
5006   case NK_Not_Narrowing:
5007     break;
5008 
5009   case NK_Constant_Narrowing:
5010     Diag(From->getLocStart(),
5011          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
5012                              diag::err_cce_narrowing)
5013       << CCE << /*Constant*/1
5014       << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
5015     break;
5016 
5017   case NK_Type_Narrowing:
5018     Diag(From->getLocStart(),
5019          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
5020                              diag::err_cce_narrowing)
5021       << CCE << /*Constant*/0 << From->getType() << T;
5022     break;
5023   }
5024 
5025   // Check the expression is a constant expression.
5026   SmallVector<PartialDiagnosticAt, 8> Notes;
5027   Expr::EvalResult Eval;
5028   Eval.Diag = &Notes;
5029 
5030   if (!Result.get()->EvaluateAsRValue(Eval, Context) || !Eval.Val.isInt()) {
5031     // The expression can't be folded, so we can't keep it at this position in
5032     // the AST.
5033     Result = ExprError();
5034   } else {
5035     Value = Eval.Val.getInt();
5036 
5037     if (Notes.empty()) {
5038       // It's a constant expression.
5039       return Result;
5040     }
5041   }
5042 
5043   // It's not a constant expression. Produce an appropriate diagnostic.
5044   if (Notes.size() == 1 &&
5045       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
5046     Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
5047   else {
5048     Diag(From->getLocStart(), diag::err_expr_not_cce)
5049       << CCE << From->getSourceRange();
5050     for (unsigned I = 0; I < Notes.size(); ++I)
5051       Diag(Notes[I].first, Notes[I].second);
5052   }
5053   return Result;
5054 }
5055 
5056 /// dropPointerConversions - If the given standard conversion sequence
5057 /// involves any pointer conversions, remove them.  This may change
5058 /// the result type of the conversion sequence.
5059 static void dropPointerConversion(StandardConversionSequence &SCS) {
5060   if (SCS.Second == ICK_Pointer_Conversion) {
5061     SCS.Second = ICK_Identity;
5062     SCS.Third = ICK_Identity;
5063     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
5064   }
5065 }
5066 
5067 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
5068 /// convert the expression From to an Objective-C pointer type.
5069 static ImplicitConversionSequence
5070 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
5071   // Do an implicit conversion to 'id'.
5072   QualType Ty = S.Context.getObjCIdType();
5073   ImplicitConversionSequence ICS
5074     = TryImplicitConversion(S, From, Ty,
5075                             // FIXME: Are these flags correct?
5076                             /*SuppressUserConversions=*/false,
5077                             /*AllowExplicit=*/true,
5078                             /*InOverloadResolution=*/false,
5079                             /*CStyle=*/false,
5080                             /*AllowObjCWritebackConversion=*/false);
5081 
5082   // Strip off any final conversions to 'id'.
5083   switch (ICS.getKind()) {
5084   case ImplicitConversionSequence::BadConversion:
5085   case ImplicitConversionSequence::AmbiguousConversion:
5086   case ImplicitConversionSequence::EllipsisConversion:
5087     break;
5088 
5089   case ImplicitConversionSequence::UserDefinedConversion:
5090     dropPointerConversion(ICS.UserDefined.After);
5091     break;
5092 
5093   case ImplicitConversionSequence::StandardConversion:
5094     dropPointerConversion(ICS.Standard);
5095     break;
5096   }
5097 
5098   return ICS;
5099 }
5100 
5101 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
5102 /// conversion of the expression From to an Objective-C pointer type.
5103 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5104   if (checkPlaceholderForOverload(*this, From))
5105     return ExprError();
5106 
5107   QualType Ty = Context.getObjCIdType();
5108   ImplicitConversionSequence ICS =
5109     TryContextuallyConvertToObjCPointer(*this, From);
5110   if (!ICS.isBad())
5111     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5112   return ExprError();
5113 }
5114 
5115 /// Determine whether the provided type is an integral type, or an enumeration
5116 /// type of a permitted flavor.
5117 static bool isIntegralOrEnumerationType(QualType T, bool AllowScopedEnum) {
5118   return AllowScopedEnum ? T->isIntegralOrEnumerationType()
5119                          : T->isIntegralOrUnscopedEnumerationType();
5120 }
5121 
5122 /// \brief Attempt to convert the given expression to an integral or
5123 /// enumeration type.
5124 ///
5125 /// This routine will attempt to convert an expression of class type to an
5126 /// integral or enumeration type, if that class type only has a single
5127 /// conversion to an integral or enumeration type.
5128 ///
5129 /// \param Loc The source location of the construct that requires the
5130 /// conversion.
5131 ///
5132 /// \param From The expression we're converting from.
5133 ///
5134 /// \param Diagnoser Used to output any diagnostics.
5135 ///
5136 /// \param AllowScopedEnumerations Specifies whether conversions to scoped
5137 /// enumerations should be considered.
5138 ///
5139 /// \returns The expression, converted to an integral or enumeration type if
5140 /// successful.
5141 ExprResult
5142 Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From,
5143                                          ICEConvertDiagnoser &Diagnoser,
5144                                          bool AllowScopedEnumerations) {
5145   // We can't perform any more checking for type-dependent expressions.
5146   if (From->isTypeDependent())
5147     return Owned(From);
5148 
5149   // Process placeholders immediately.
5150   if (From->hasPlaceholderType()) {
5151     ExprResult result = CheckPlaceholderExpr(From);
5152     if (result.isInvalid()) return result;
5153     From = result.take();
5154   }
5155 
5156   // If the expression already has integral or enumeration type, we're golden.
5157   QualType T = From->getType();
5158   if (isIntegralOrEnumerationType(T, AllowScopedEnumerations))
5159     return DefaultLvalueConversion(From);
5160 
5161   // FIXME: Check for missing '()' if T is a function type?
5162 
5163   // If we don't have a class type in C++, there's no way we can get an
5164   // expression of integral or enumeration type.
5165   const RecordType *RecordTy = T->getAs<RecordType>();
5166   if (!RecordTy || !getLangOpts().CPlusPlus) {
5167     if (!Diagnoser.Suppress)
5168       Diagnoser.diagnoseNotInt(*this, Loc, T) << From->getSourceRange();
5169     return Owned(From);
5170   }
5171 
5172   // We must have a complete class type.
5173   struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5174     ICEConvertDiagnoser &Diagnoser;
5175     Expr *From;
5176 
5177     TypeDiagnoserPartialDiag(ICEConvertDiagnoser &Diagnoser, Expr *From)
5178       : TypeDiagnoser(Diagnoser.Suppress), Diagnoser(Diagnoser), From(From) {}
5179 
5180     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5181       Diagnoser.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5182     }
5183   } IncompleteDiagnoser(Diagnoser, From);
5184 
5185   if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5186     return Owned(From);
5187 
5188   // Look for a conversion to an integral or enumeration type.
5189   UnresolvedSet<4> ViableConversions;
5190   UnresolvedSet<4> ExplicitConversions;
5191   std::pair<CXXRecordDecl::conversion_iterator,
5192             CXXRecordDecl::conversion_iterator> Conversions
5193     = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5194 
5195   bool HadMultipleCandidates
5196     = (std::distance(Conversions.first, Conversions.second) > 1);
5197 
5198   for (CXXRecordDecl::conversion_iterator
5199          I = Conversions.first, E = Conversions.second; I != E; ++I) {
5200     if (CXXConversionDecl *Conversion
5201           = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl())) {
5202       if (isIntegralOrEnumerationType(
5203             Conversion->getConversionType().getNonReferenceType(),
5204             AllowScopedEnumerations)) {
5205         if (Conversion->isExplicit())
5206           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5207         else
5208           ViableConversions.addDecl(I.getDecl(), I.getAccess());
5209       }
5210     }
5211   }
5212 
5213   switch (ViableConversions.size()) {
5214   case 0:
5215     if (ExplicitConversions.size() == 1 && !Diagnoser.Suppress) {
5216       DeclAccessPair Found = ExplicitConversions[0];
5217       CXXConversionDecl *Conversion
5218         = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5219 
5220       // The user probably meant to invoke the given explicit
5221       // conversion; use it.
5222       QualType ConvTy
5223         = Conversion->getConversionType().getNonReferenceType();
5224       std::string TypeStr;
5225       ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy());
5226 
5227       Diagnoser.diagnoseExplicitConv(*this, Loc, T, ConvTy)
5228         << FixItHint::CreateInsertion(From->getLocStart(),
5229                                       "static_cast<" + TypeStr + ">(")
5230         << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()),
5231                                       ")");
5232       Diagnoser.noteExplicitConv(*this, Conversion, ConvTy);
5233 
5234       // If we aren't in a SFINAE context, build a call to the
5235       // explicit conversion function.
5236       if (isSFINAEContext())
5237         return ExprError();
5238 
5239       CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5240       ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5241                                                  HadMultipleCandidates);
5242       if (Result.isInvalid())
5243         return ExprError();
5244       // Record usage of conversion in an implicit cast.
5245       From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5246                                       CK_UserDefinedConversion,
5247                                       Result.get(), 0,
5248                                       Result.get()->getValueKind());
5249     }
5250 
5251     // We'll complain below about a non-integral condition type.
5252     break;
5253 
5254   case 1: {
5255     // Apply this conversion.
5256     DeclAccessPair Found = ViableConversions[0];
5257     CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5258 
5259     CXXConversionDecl *Conversion
5260       = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5261     QualType ConvTy
5262       = Conversion->getConversionType().getNonReferenceType();
5263     if (!Diagnoser.SuppressConversion) {
5264       if (isSFINAEContext())
5265         return ExprError();
5266 
5267       Diagnoser.diagnoseConversion(*this, Loc, T, ConvTy)
5268         << From->getSourceRange();
5269     }
5270 
5271     ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5272                                                HadMultipleCandidates);
5273     if (Result.isInvalid())
5274       return ExprError();
5275     // Record usage of conversion in an implicit cast.
5276     From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5277                                     CK_UserDefinedConversion,
5278                                     Result.get(), 0,
5279                                     Result.get()->getValueKind());
5280     break;
5281   }
5282 
5283   default:
5284     if (Diagnoser.Suppress)
5285       return ExprError();
5286 
5287     Diagnoser.diagnoseAmbiguous(*this, Loc, T) << From->getSourceRange();
5288     for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5289       CXXConversionDecl *Conv
5290         = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5291       QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5292       Diagnoser.noteAmbiguous(*this, Conv, ConvTy);
5293     }
5294     return Owned(From);
5295   }
5296 
5297   if (!isIntegralOrEnumerationType(From->getType(), AllowScopedEnumerations) &&
5298       !Diagnoser.Suppress) {
5299     Diagnoser.diagnoseNotInt(*this, Loc, From->getType())
5300       << From->getSourceRange();
5301   }
5302 
5303   return DefaultLvalueConversion(From);
5304 }
5305 
5306 /// AddOverloadCandidate - Adds the given function to the set of
5307 /// candidate functions, using the given function call arguments.  If
5308 /// @p SuppressUserConversions, then don't allow user-defined
5309 /// conversions via constructors or conversion operators.
5310 ///
5311 /// \param PartialOverloading true if we are performing "partial" overloading
5312 /// based on an incomplete set of function arguments. This feature is used by
5313 /// code completion.
5314 void
5315 Sema::AddOverloadCandidate(FunctionDecl *Function,
5316                            DeclAccessPair FoundDecl,
5317                            ArrayRef<Expr *> Args,
5318                            OverloadCandidateSet& CandidateSet,
5319                            bool SuppressUserConversions,
5320                            bool PartialOverloading,
5321                            bool AllowExplicit) {
5322   const FunctionProtoType* Proto
5323     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5324   assert(Proto && "Functions without a prototype cannot be overloaded");
5325   assert(!Function->getDescribedFunctionTemplate() &&
5326          "Use AddTemplateOverloadCandidate for function templates");
5327 
5328   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5329     if (!isa<CXXConstructorDecl>(Method)) {
5330       // If we get here, it's because we're calling a member function
5331       // that is named without a member access expression (e.g.,
5332       // "this->f") that was either written explicitly or created
5333       // implicitly. This can happen with a qualified call to a member
5334       // function, e.g., X::f(). We use an empty type for the implied
5335       // object argument (C++ [over.call.func]p3), and the acting context
5336       // is irrelevant.
5337       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5338                          QualType(), Expr::Classification::makeSimpleLValue(),
5339                          Args, CandidateSet, SuppressUserConversions);
5340       return;
5341     }
5342     // We treat a constructor like a non-member function, since its object
5343     // argument doesn't participate in overload resolution.
5344   }
5345 
5346   if (!CandidateSet.isNewCandidate(Function))
5347     return;
5348 
5349   // Overload resolution is always an unevaluated context.
5350   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5351 
5352   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5353     // C++ [class.copy]p3:
5354     //   A member function template is never instantiated to perform the copy
5355     //   of a class object to an object of its class type.
5356     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5357     if (Args.size() == 1 &&
5358         Constructor->isSpecializationCopyingObject() &&
5359         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5360          IsDerivedFrom(Args[0]->getType(), ClassType)))
5361       return;
5362   }
5363 
5364   // Add this candidate
5365   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5366   Candidate.FoundDecl = FoundDecl;
5367   Candidate.Function = Function;
5368   Candidate.Viable = true;
5369   Candidate.IsSurrogate = false;
5370   Candidate.IgnoreObjectArgument = false;
5371   Candidate.ExplicitCallArguments = Args.size();
5372 
5373   unsigned NumArgsInProto = Proto->getNumArgs();
5374 
5375   // (C++ 13.3.2p2): A candidate function having fewer than m
5376   // parameters is viable only if it has an ellipsis in its parameter
5377   // list (8.3.5).
5378   if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5379       !Proto->isVariadic()) {
5380     Candidate.Viable = false;
5381     Candidate.FailureKind = ovl_fail_too_many_arguments;
5382     return;
5383   }
5384 
5385   // (C++ 13.3.2p2): A candidate function having more than m parameters
5386   // is viable only if the (m+1)st parameter has a default argument
5387   // (8.3.6). For the purposes of overload resolution, the
5388   // parameter list is truncated on the right, so that there are
5389   // exactly m parameters.
5390   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5391   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5392     // Not enough arguments.
5393     Candidate.Viable = false;
5394     Candidate.FailureKind = ovl_fail_too_few_arguments;
5395     return;
5396   }
5397 
5398   // (CUDA B.1): Check for invalid calls between targets.
5399   if (getLangOpts().CUDA)
5400     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5401       if (CheckCUDATarget(Caller, Function)) {
5402         Candidate.Viable = false;
5403         Candidate.FailureKind = ovl_fail_bad_target;
5404         return;
5405       }
5406 
5407   // Determine the implicit conversion sequences for each of the
5408   // arguments.
5409   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5410     if (ArgIdx < NumArgsInProto) {
5411       // (C++ 13.3.2p3): for F to be a viable function, there shall
5412       // exist for each argument an implicit conversion sequence
5413       // (13.3.3.1) that converts that argument to the corresponding
5414       // parameter of F.
5415       QualType ParamType = Proto->getArgType(ArgIdx);
5416       Candidate.Conversions[ArgIdx]
5417         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5418                                 SuppressUserConversions,
5419                                 /*InOverloadResolution=*/true,
5420                                 /*AllowObjCWritebackConversion=*/
5421                                   getLangOpts().ObjCAutoRefCount,
5422                                 AllowExplicit);
5423       if (Candidate.Conversions[ArgIdx].isBad()) {
5424         Candidate.Viable = false;
5425         Candidate.FailureKind = ovl_fail_bad_conversion;
5426         break;
5427       }
5428     } else {
5429       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5430       // argument for which there is no corresponding parameter is
5431       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5432       Candidate.Conversions[ArgIdx].setEllipsis();
5433     }
5434   }
5435 }
5436 
5437 /// \brief Add all of the function declarations in the given function set to
5438 /// the overload canddiate set.
5439 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5440                                  ArrayRef<Expr *> Args,
5441                                  OverloadCandidateSet& CandidateSet,
5442                                  bool SuppressUserConversions,
5443                                TemplateArgumentListInfo *ExplicitTemplateArgs) {
5444   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5445     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5446     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5447       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5448         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5449                            cast<CXXMethodDecl>(FD)->getParent(),
5450                            Args[0]->getType(), Args[0]->Classify(Context),
5451                            Args.slice(1), CandidateSet,
5452                            SuppressUserConversions);
5453       else
5454         AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5455                              SuppressUserConversions);
5456     } else {
5457       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5458       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5459           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5460         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5461                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5462                                    ExplicitTemplateArgs,
5463                                    Args[0]->getType(),
5464                                    Args[0]->Classify(Context), Args.slice(1),
5465                                    CandidateSet, SuppressUserConversions);
5466       else
5467         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5468                                      ExplicitTemplateArgs, Args,
5469                                      CandidateSet, SuppressUserConversions);
5470     }
5471   }
5472 }
5473 
5474 /// AddMethodCandidate - Adds a named decl (which is some kind of
5475 /// method) as a method candidate to the given overload set.
5476 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5477                               QualType ObjectType,
5478                               Expr::Classification ObjectClassification,
5479                               Expr **Args, unsigned NumArgs,
5480                               OverloadCandidateSet& CandidateSet,
5481                               bool SuppressUserConversions) {
5482   NamedDecl *Decl = FoundDecl.getDecl();
5483   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5484 
5485   if (isa<UsingShadowDecl>(Decl))
5486     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5487 
5488   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5489     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5490            "Expected a member function template");
5491     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5492                                /*ExplicitArgs*/ 0,
5493                                ObjectType, ObjectClassification,
5494                                llvm::makeArrayRef(Args, NumArgs), CandidateSet,
5495                                SuppressUserConversions);
5496   } else {
5497     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5498                        ObjectType, ObjectClassification,
5499                        llvm::makeArrayRef(Args, NumArgs),
5500                        CandidateSet, SuppressUserConversions);
5501   }
5502 }
5503 
5504 /// AddMethodCandidate - Adds the given C++ member function to the set
5505 /// of candidate functions, using the given function call arguments
5506 /// and the object argument (@c Object). For example, in a call
5507 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5508 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5509 /// allow user-defined conversions via constructors or conversion
5510 /// operators.
5511 void
5512 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5513                          CXXRecordDecl *ActingContext, QualType ObjectType,
5514                          Expr::Classification ObjectClassification,
5515                          ArrayRef<Expr *> Args,
5516                          OverloadCandidateSet& CandidateSet,
5517                          bool SuppressUserConversions) {
5518   const FunctionProtoType* Proto
5519     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5520   assert(Proto && "Methods without a prototype cannot be overloaded");
5521   assert(!isa<CXXConstructorDecl>(Method) &&
5522          "Use AddOverloadCandidate for constructors");
5523 
5524   if (!CandidateSet.isNewCandidate(Method))
5525     return;
5526 
5527   // Overload resolution is always an unevaluated context.
5528   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5529 
5530   // Add this candidate
5531   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5532   Candidate.FoundDecl = FoundDecl;
5533   Candidate.Function = Method;
5534   Candidate.IsSurrogate = false;
5535   Candidate.IgnoreObjectArgument = false;
5536   Candidate.ExplicitCallArguments = Args.size();
5537 
5538   unsigned NumArgsInProto = Proto->getNumArgs();
5539 
5540   // (C++ 13.3.2p2): A candidate function having fewer than m
5541   // parameters is viable only if it has an ellipsis in its parameter
5542   // list (8.3.5).
5543   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5544     Candidate.Viable = false;
5545     Candidate.FailureKind = ovl_fail_too_many_arguments;
5546     return;
5547   }
5548 
5549   // (C++ 13.3.2p2): A candidate function having more than m parameters
5550   // is viable only if the (m+1)st parameter has a default argument
5551   // (8.3.6). For the purposes of overload resolution, the
5552   // parameter list is truncated on the right, so that there are
5553   // exactly m parameters.
5554   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5555   if (Args.size() < MinRequiredArgs) {
5556     // Not enough arguments.
5557     Candidate.Viable = false;
5558     Candidate.FailureKind = ovl_fail_too_few_arguments;
5559     return;
5560   }
5561 
5562   Candidate.Viable = true;
5563 
5564   if (Method->isStatic() || ObjectType.isNull())
5565     // The implicit object argument is ignored.
5566     Candidate.IgnoreObjectArgument = true;
5567   else {
5568     // Determine the implicit conversion sequence for the object
5569     // parameter.
5570     Candidate.Conversions[0]
5571       = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5572                                         Method, ActingContext);
5573     if (Candidate.Conversions[0].isBad()) {
5574       Candidate.Viable = false;
5575       Candidate.FailureKind = ovl_fail_bad_conversion;
5576       return;
5577     }
5578   }
5579 
5580   // Determine the implicit conversion sequences for each of the
5581   // arguments.
5582   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5583     if (ArgIdx < NumArgsInProto) {
5584       // (C++ 13.3.2p3): for F to be a viable function, there shall
5585       // exist for each argument an implicit conversion sequence
5586       // (13.3.3.1) that converts that argument to the corresponding
5587       // parameter of F.
5588       QualType ParamType = Proto->getArgType(ArgIdx);
5589       Candidate.Conversions[ArgIdx + 1]
5590         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5591                                 SuppressUserConversions,
5592                                 /*InOverloadResolution=*/true,
5593                                 /*AllowObjCWritebackConversion=*/
5594                                   getLangOpts().ObjCAutoRefCount);
5595       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5596         Candidate.Viable = false;
5597         Candidate.FailureKind = ovl_fail_bad_conversion;
5598         break;
5599       }
5600     } else {
5601       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5602       // argument for which there is no corresponding parameter is
5603       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5604       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5605     }
5606   }
5607 }
5608 
5609 /// \brief Add a C++ member function template as a candidate to the candidate
5610 /// set, using template argument deduction to produce an appropriate member
5611 /// function template specialization.
5612 void
5613 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5614                                  DeclAccessPair FoundDecl,
5615                                  CXXRecordDecl *ActingContext,
5616                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5617                                  QualType ObjectType,
5618                                  Expr::Classification ObjectClassification,
5619                                  ArrayRef<Expr *> Args,
5620                                  OverloadCandidateSet& CandidateSet,
5621                                  bool SuppressUserConversions) {
5622   if (!CandidateSet.isNewCandidate(MethodTmpl))
5623     return;
5624 
5625   // C++ [over.match.funcs]p7:
5626   //   In each case where a candidate is a function template, candidate
5627   //   function template specializations are generated using template argument
5628   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5629   //   candidate functions in the usual way.113) A given name can refer to one
5630   //   or more function templates and also to a set of overloaded non-template
5631   //   functions. In such a case, the candidate functions generated from each
5632   //   function template are combined with the set of non-template candidate
5633   //   functions.
5634   TemplateDeductionInfo Info(CandidateSet.getLocation());
5635   FunctionDecl *Specialization = 0;
5636   if (TemplateDeductionResult Result
5637       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5638                                 Specialization, Info)) {
5639     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5640     Candidate.FoundDecl = FoundDecl;
5641     Candidate.Function = MethodTmpl->getTemplatedDecl();
5642     Candidate.Viable = false;
5643     Candidate.FailureKind = ovl_fail_bad_deduction;
5644     Candidate.IsSurrogate = false;
5645     Candidate.IgnoreObjectArgument = false;
5646     Candidate.ExplicitCallArguments = Args.size();
5647     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5648                                                           Info);
5649     return;
5650   }
5651 
5652   // Add the function template specialization produced by template argument
5653   // deduction as a candidate.
5654   assert(Specialization && "Missing member function template specialization?");
5655   assert(isa<CXXMethodDecl>(Specialization) &&
5656          "Specialization is not a member function?");
5657   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5658                      ActingContext, ObjectType, ObjectClassification, Args,
5659                      CandidateSet, SuppressUserConversions);
5660 }
5661 
5662 /// \brief Add a C++ function template specialization as a candidate
5663 /// in the candidate set, using template argument deduction to produce
5664 /// an appropriate function template specialization.
5665 void
5666 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5667                                    DeclAccessPair FoundDecl,
5668                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5669                                    ArrayRef<Expr *> Args,
5670                                    OverloadCandidateSet& CandidateSet,
5671                                    bool SuppressUserConversions) {
5672   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5673     return;
5674 
5675   // C++ [over.match.funcs]p7:
5676   //   In each case where a candidate is a function template, candidate
5677   //   function template specializations are generated using template argument
5678   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5679   //   candidate functions in the usual way.113) A given name can refer to one
5680   //   or more function templates and also to a set of overloaded non-template
5681   //   functions. In such a case, the candidate functions generated from each
5682   //   function template are combined with the set of non-template candidate
5683   //   functions.
5684   TemplateDeductionInfo Info(CandidateSet.getLocation());
5685   FunctionDecl *Specialization = 0;
5686   if (TemplateDeductionResult Result
5687         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5688                                   Specialization, Info)) {
5689     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5690     Candidate.FoundDecl = FoundDecl;
5691     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5692     Candidate.Viable = false;
5693     Candidate.FailureKind = ovl_fail_bad_deduction;
5694     Candidate.IsSurrogate = false;
5695     Candidate.IgnoreObjectArgument = false;
5696     Candidate.ExplicitCallArguments = Args.size();
5697     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5698                                                           Info);
5699     return;
5700   }
5701 
5702   // Add the function template specialization produced by template argument
5703   // deduction as a candidate.
5704   assert(Specialization && "Missing function template specialization?");
5705   AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5706                        SuppressUserConversions);
5707 }
5708 
5709 /// AddConversionCandidate - Add a C++ conversion function as a
5710 /// candidate in the candidate set (C++ [over.match.conv],
5711 /// C++ [over.match.copy]). From is the expression we're converting from,
5712 /// and ToType is the type that we're eventually trying to convert to
5713 /// (which may or may not be the same type as the type that the
5714 /// conversion function produces).
5715 void
5716 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5717                              DeclAccessPair FoundDecl,
5718                              CXXRecordDecl *ActingContext,
5719                              Expr *From, QualType ToType,
5720                              OverloadCandidateSet& CandidateSet) {
5721   assert(!Conversion->getDescribedFunctionTemplate() &&
5722          "Conversion function templates use AddTemplateConversionCandidate");
5723   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5724   if (!CandidateSet.isNewCandidate(Conversion))
5725     return;
5726 
5727   // Overload resolution is always an unevaluated context.
5728   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5729 
5730   // Add this candidate
5731   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5732   Candidate.FoundDecl = FoundDecl;
5733   Candidate.Function = Conversion;
5734   Candidate.IsSurrogate = false;
5735   Candidate.IgnoreObjectArgument = false;
5736   Candidate.FinalConversion.setAsIdentityConversion();
5737   Candidate.FinalConversion.setFromType(ConvType);
5738   Candidate.FinalConversion.setAllToTypes(ToType);
5739   Candidate.Viable = true;
5740   Candidate.ExplicitCallArguments = 1;
5741 
5742   // C++ [over.match.funcs]p4:
5743   //   For conversion functions, the function is considered to be a member of
5744   //   the class of the implicit implied object argument for the purpose of
5745   //   defining the type of the implicit object parameter.
5746   //
5747   // Determine the implicit conversion sequence for the implicit
5748   // object parameter.
5749   QualType ImplicitParamType = From->getType();
5750   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5751     ImplicitParamType = FromPtrType->getPointeeType();
5752   CXXRecordDecl *ConversionContext
5753     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5754 
5755   Candidate.Conversions[0]
5756     = TryObjectArgumentInitialization(*this, From->getType(),
5757                                       From->Classify(Context),
5758                                       Conversion, ConversionContext);
5759 
5760   if (Candidate.Conversions[0].isBad()) {
5761     Candidate.Viable = false;
5762     Candidate.FailureKind = ovl_fail_bad_conversion;
5763     return;
5764   }
5765 
5766   // We won't go through a user-define type conversion function to convert a
5767   // derived to base as such conversions are given Conversion Rank. They only
5768   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5769   QualType FromCanon
5770     = Context.getCanonicalType(From->getType().getUnqualifiedType());
5771   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5772   if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5773     Candidate.Viable = false;
5774     Candidate.FailureKind = ovl_fail_trivial_conversion;
5775     return;
5776   }
5777 
5778   // To determine what the conversion from the result of calling the
5779   // conversion function to the type we're eventually trying to
5780   // convert to (ToType), we need to synthesize a call to the
5781   // conversion function and attempt copy initialization from it. This
5782   // makes sure that we get the right semantics with respect to
5783   // lvalues/rvalues and the type. Fortunately, we can allocate this
5784   // call on the stack and we don't need its arguments to be
5785   // well-formed.
5786   DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5787                             VK_LValue, From->getLocStart());
5788   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5789                                 Context.getPointerType(Conversion->getType()),
5790                                 CK_FunctionToPointerDecay,
5791                                 &ConversionRef, VK_RValue);
5792 
5793   QualType ConversionType = Conversion->getConversionType();
5794   if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5795     Candidate.Viable = false;
5796     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5797     return;
5798   }
5799 
5800   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5801 
5802   // Note that it is safe to allocate CallExpr on the stack here because
5803   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5804   // allocator).
5805   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5806   CallExpr Call(Context, &ConversionFn, MultiExprArg(), CallResultType, VK,
5807                 From->getLocStart());
5808   ImplicitConversionSequence ICS =
5809     TryCopyInitialization(*this, &Call, ToType,
5810                           /*SuppressUserConversions=*/true,
5811                           /*InOverloadResolution=*/false,
5812                           /*AllowObjCWritebackConversion=*/false);
5813 
5814   switch (ICS.getKind()) {
5815   case ImplicitConversionSequence::StandardConversion:
5816     Candidate.FinalConversion = ICS.Standard;
5817 
5818     // C++ [over.ics.user]p3:
5819     //   If the user-defined conversion is specified by a specialization of a
5820     //   conversion function template, the second standard conversion sequence
5821     //   shall have exact match rank.
5822     if (Conversion->getPrimaryTemplate() &&
5823         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5824       Candidate.Viable = false;
5825       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5826     }
5827 
5828     // C++0x [dcl.init.ref]p5:
5829     //    In the second case, if the reference is an rvalue reference and
5830     //    the second standard conversion sequence of the user-defined
5831     //    conversion sequence includes an lvalue-to-rvalue conversion, the
5832     //    program is ill-formed.
5833     if (ToType->isRValueReferenceType() &&
5834         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5835       Candidate.Viable = false;
5836       Candidate.FailureKind = ovl_fail_bad_final_conversion;
5837     }
5838     break;
5839 
5840   case ImplicitConversionSequence::BadConversion:
5841     Candidate.Viable = false;
5842     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5843     break;
5844 
5845   default:
5846     llvm_unreachable(
5847            "Can only end up with a standard conversion sequence or failure");
5848   }
5849 }
5850 
5851 /// \brief Adds a conversion function template specialization
5852 /// candidate to the overload set, using template argument deduction
5853 /// to deduce the template arguments of the conversion function
5854 /// template from the type that we are converting to (C++
5855 /// [temp.deduct.conv]).
5856 void
5857 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5858                                      DeclAccessPair FoundDecl,
5859                                      CXXRecordDecl *ActingDC,
5860                                      Expr *From, QualType ToType,
5861                                      OverloadCandidateSet &CandidateSet) {
5862   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5863          "Only conversion function templates permitted here");
5864 
5865   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5866     return;
5867 
5868   TemplateDeductionInfo Info(CandidateSet.getLocation());
5869   CXXConversionDecl *Specialization = 0;
5870   if (TemplateDeductionResult Result
5871         = DeduceTemplateArguments(FunctionTemplate, ToType,
5872                                   Specialization, Info)) {
5873     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5874     Candidate.FoundDecl = FoundDecl;
5875     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5876     Candidate.Viable = false;
5877     Candidate.FailureKind = ovl_fail_bad_deduction;
5878     Candidate.IsSurrogate = false;
5879     Candidate.IgnoreObjectArgument = false;
5880     Candidate.ExplicitCallArguments = 1;
5881     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5882                                                           Info);
5883     return;
5884   }
5885 
5886   // Add the conversion function template specialization produced by
5887   // template argument deduction as a candidate.
5888   assert(Specialization && "Missing function template specialization?");
5889   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5890                          CandidateSet);
5891 }
5892 
5893 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5894 /// converts the given @c Object to a function pointer via the
5895 /// conversion function @c Conversion, and then attempts to call it
5896 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
5897 /// the type of function that we'll eventually be calling.
5898 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
5899                                  DeclAccessPair FoundDecl,
5900                                  CXXRecordDecl *ActingContext,
5901                                  const FunctionProtoType *Proto,
5902                                  Expr *Object,
5903                                  ArrayRef<Expr *> Args,
5904                                  OverloadCandidateSet& CandidateSet) {
5905   if (!CandidateSet.isNewCandidate(Conversion))
5906     return;
5907 
5908   // Overload resolution is always an unevaluated context.
5909   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5910 
5911   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5912   Candidate.FoundDecl = FoundDecl;
5913   Candidate.Function = 0;
5914   Candidate.Surrogate = Conversion;
5915   Candidate.Viable = true;
5916   Candidate.IsSurrogate = true;
5917   Candidate.IgnoreObjectArgument = false;
5918   Candidate.ExplicitCallArguments = Args.size();
5919 
5920   // Determine the implicit conversion sequence for the implicit
5921   // object parameter.
5922   ImplicitConversionSequence ObjectInit
5923     = TryObjectArgumentInitialization(*this, Object->getType(),
5924                                       Object->Classify(Context),
5925                                       Conversion, ActingContext);
5926   if (ObjectInit.isBad()) {
5927     Candidate.Viable = false;
5928     Candidate.FailureKind = ovl_fail_bad_conversion;
5929     Candidate.Conversions[0] = ObjectInit;
5930     return;
5931   }
5932 
5933   // The first conversion is actually a user-defined conversion whose
5934   // first conversion is ObjectInit's standard conversion (which is
5935   // effectively a reference binding). Record it as such.
5936   Candidate.Conversions[0].setUserDefined();
5937   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
5938   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
5939   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
5940   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
5941   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
5942   Candidate.Conversions[0].UserDefined.After
5943     = Candidate.Conversions[0].UserDefined.Before;
5944   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
5945 
5946   // Find the
5947   unsigned NumArgsInProto = Proto->getNumArgs();
5948 
5949   // (C++ 13.3.2p2): A candidate function having fewer than m
5950   // parameters is viable only if it has an ellipsis in its parameter
5951   // list (8.3.5).
5952   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5953     Candidate.Viable = false;
5954     Candidate.FailureKind = ovl_fail_too_many_arguments;
5955     return;
5956   }
5957 
5958   // Function types don't have any default arguments, so just check if
5959   // we have enough arguments.
5960   if (Args.size() < NumArgsInProto) {
5961     // Not enough arguments.
5962     Candidate.Viable = false;
5963     Candidate.FailureKind = ovl_fail_too_few_arguments;
5964     return;
5965   }
5966 
5967   // Determine the implicit conversion sequences for each of the
5968   // arguments.
5969   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5970     if (ArgIdx < NumArgsInProto) {
5971       // (C++ 13.3.2p3): for F to be a viable function, there shall
5972       // exist for each argument an implicit conversion sequence
5973       // (13.3.3.1) that converts that argument to the corresponding
5974       // parameter of F.
5975       QualType ParamType = Proto->getArgType(ArgIdx);
5976       Candidate.Conversions[ArgIdx + 1]
5977         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5978                                 /*SuppressUserConversions=*/false,
5979                                 /*InOverloadResolution=*/false,
5980                                 /*AllowObjCWritebackConversion=*/
5981                                   getLangOpts().ObjCAutoRefCount);
5982       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5983         Candidate.Viable = false;
5984         Candidate.FailureKind = ovl_fail_bad_conversion;
5985         break;
5986       }
5987     } else {
5988       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5989       // argument for which there is no corresponding parameter is
5990       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5991       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5992     }
5993   }
5994 }
5995 
5996 /// \brief Add overload candidates for overloaded operators that are
5997 /// member functions.
5998 ///
5999 /// Add the overloaded operator candidates that are member functions
6000 /// for the operator Op that was used in an operator expression such
6001 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
6002 /// CandidateSet will store the added overload candidates. (C++
6003 /// [over.match.oper]).
6004 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
6005                                        SourceLocation OpLoc,
6006                                        Expr **Args, unsigned NumArgs,
6007                                        OverloadCandidateSet& CandidateSet,
6008                                        SourceRange OpRange) {
6009   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6010 
6011   // C++ [over.match.oper]p3:
6012   //   For a unary operator @ with an operand of a type whose
6013   //   cv-unqualified version is T1, and for a binary operator @ with
6014   //   a left operand of a type whose cv-unqualified version is T1 and
6015   //   a right operand of a type whose cv-unqualified version is T2,
6016   //   three sets of candidate functions, designated member
6017   //   candidates, non-member candidates and built-in candidates, are
6018   //   constructed as follows:
6019   QualType T1 = Args[0]->getType();
6020 
6021   //     -- If T1 is a complete class type or a class currently being
6022   //        defined, the set of member candidates is the result of the
6023   //        qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
6024   //        the set of member candidates is empty.
6025   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
6026     // Complete the type if it can be completed.
6027     RequireCompleteType(OpLoc, T1, 0);
6028     // If the type is neither complete nor being defined, bail out now.
6029     if (!T1Rec->getDecl()->getDefinition())
6030       return;
6031 
6032     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
6033     LookupQualifiedName(Operators, T1Rec->getDecl());
6034     Operators.suppressDiagnostics();
6035 
6036     for (LookupResult::iterator Oper = Operators.begin(),
6037                              OperEnd = Operators.end();
6038          Oper != OperEnd;
6039          ++Oper)
6040       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
6041                          Args[0]->Classify(Context), Args + 1, NumArgs - 1,
6042                          CandidateSet,
6043                          /* SuppressUserConversions = */ false);
6044   }
6045 }
6046 
6047 /// AddBuiltinCandidate - Add a candidate for a built-in
6048 /// operator. ResultTy and ParamTys are the result and parameter types
6049 /// of the built-in candidate, respectively. Args and NumArgs are the
6050 /// arguments being passed to the candidate. IsAssignmentOperator
6051 /// should be true when this built-in candidate is an assignment
6052 /// operator. NumContextualBoolArguments is the number of arguments
6053 /// (at the beginning of the argument list) that will be contextually
6054 /// converted to bool.
6055 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
6056                                Expr **Args, unsigned NumArgs,
6057                                OverloadCandidateSet& CandidateSet,
6058                                bool IsAssignmentOperator,
6059                                unsigned NumContextualBoolArguments) {
6060   // Overload resolution is always an unevaluated context.
6061   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6062 
6063   // Add this candidate
6064   OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs);
6065   Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
6066   Candidate.Function = 0;
6067   Candidate.IsSurrogate = false;
6068   Candidate.IgnoreObjectArgument = false;
6069   Candidate.BuiltinTypes.ResultTy = ResultTy;
6070   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
6071     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
6072 
6073   // Determine the implicit conversion sequences for each of the
6074   // arguments.
6075   Candidate.Viable = true;
6076   Candidate.ExplicitCallArguments = NumArgs;
6077   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6078     // C++ [over.match.oper]p4:
6079     //   For the built-in assignment operators, conversions of the
6080     //   left operand are restricted as follows:
6081     //     -- no temporaries are introduced to hold the left operand, and
6082     //     -- no user-defined conversions are applied to the left
6083     //        operand to achieve a type match with the left-most
6084     //        parameter of a built-in candidate.
6085     //
6086     // We block these conversions by turning off user-defined
6087     // conversions, since that is the only way that initialization of
6088     // a reference to a non-class type can occur from something that
6089     // is not of the same type.
6090     if (ArgIdx < NumContextualBoolArguments) {
6091       assert(ParamTys[ArgIdx] == Context.BoolTy &&
6092              "Contextual conversion to bool requires bool type");
6093       Candidate.Conversions[ArgIdx]
6094         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6095     } else {
6096       Candidate.Conversions[ArgIdx]
6097         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6098                                 ArgIdx == 0 && IsAssignmentOperator,
6099                                 /*InOverloadResolution=*/false,
6100                                 /*AllowObjCWritebackConversion=*/
6101                                   getLangOpts().ObjCAutoRefCount);
6102     }
6103     if (Candidate.Conversions[ArgIdx].isBad()) {
6104       Candidate.Viable = false;
6105       Candidate.FailureKind = ovl_fail_bad_conversion;
6106       break;
6107     }
6108   }
6109 }
6110 
6111 /// BuiltinCandidateTypeSet - A set of types that will be used for the
6112 /// candidate operator functions for built-in operators (C++
6113 /// [over.built]). The types are separated into pointer types and
6114 /// enumeration types.
6115 class BuiltinCandidateTypeSet  {
6116   /// TypeSet - A set of types.
6117   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6118 
6119   /// PointerTypes - The set of pointer types that will be used in the
6120   /// built-in candidates.
6121   TypeSet PointerTypes;
6122 
6123   /// MemberPointerTypes - The set of member pointer types that will be
6124   /// used in the built-in candidates.
6125   TypeSet MemberPointerTypes;
6126 
6127   /// EnumerationTypes - The set of enumeration types that will be
6128   /// used in the built-in candidates.
6129   TypeSet EnumerationTypes;
6130 
6131   /// \brief The set of vector types that will be used in the built-in
6132   /// candidates.
6133   TypeSet VectorTypes;
6134 
6135   /// \brief A flag indicating non-record types are viable candidates
6136   bool HasNonRecordTypes;
6137 
6138   /// \brief A flag indicating whether either arithmetic or enumeration types
6139   /// were present in the candidate set.
6140   bool HasArithmeticOrEnumeralTypes;
6141 
6142   /// \brief A flag indicating whether the nullptr type was present in the
6143   /// candidate set.
6144   bool HasNullPtrType;
6145 
6146   /// Sema - The semantic analysis instance where we are building the
6147   /// candidate type set.
6148   Sema &SemaRef;
6149 
6150   /// Context - The AST context in which we will build the type sets.
6151   ASTContext &Context;
6152 
6153   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6154                                                const Qualifiers &VisibleQuals);
6155   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6156 
6157 public:
6158   /// iterator - Iterates through the types that are part of the set.
6159   typedef TypeSet::iterator iterator;
6160 
6161   BuiltinCandidateTypeSet(Sema &SemaRef)
6162     : HasNonRecordTypes(false),
6163       HasArithmeticOrEnumeralTypes(false),
6164       HasNullPtrType(false),
6165       SemaRef(SemaRef),
6166       Context(SemaRef.Context) { }
6167 
6168   void AddTypesConvertedFrom(QualType Ty,
6169                              SourceLocation Loc,
6170                              bool AllowUserConversions,
6171                              bool AllowExplicitConversions,
6172                              const Qualifiers &VisibleTypeConversionsQuals);
6173 
6174   /// pointer_begin - First pointer type found;
6175   iterator pointer_begin() { return PointerTypes.begin(); }
6176 
6177   /// pointer_end - Past the last pointer type found;
6178   iterator pointer_end() { return PointerTypes.end(); }
6179 
6180   /// member_pointer_begin - First member pointer type found;
6181   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6182 
6183   /// member_pointer_end - Past the last member pointer type found;
6184   iterator member_pointer_end() { return MemberPointerTypes.end(); }
6185 
6186   /// enumeration_begin - First enumeration type found;
6187   iterator enumeration_begin() { return EnumerationTypes.begin(); }
6188 
6189   /// enumeration_end - Past the last enumeration type found;
6190   iterator enumeration_end() { return EnumerationTypes.end(); }
6191 
6192   iterator vector_begin() { return VectorTypes.begin(); }
6193   iterator vector_end() { return VectorTypes.end(); }
6194 
6195   bool hasNonRecordTypes() { return HasNonRecordTypes; }
6196   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6197   bool hasNullPtrType() const { return HasNullPtrType; }
6198 };
6199 
6200 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6201 /// the set of pointer types along with any more-qualified variants of
6202 /// that type. For example, if @p Ty is "int const *", this routine
6203 /// will add "int const *", "int const volatile *", "int const
6204 /// restrict *", and "int const volatile restrict *" to the set of
6205 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6206 /// false otherwise.
6207 ///
6208 /// FIXME: what to do about extended qualifiers?
6209 bool
6210 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6211                                              const Qualifiers &VisibleQuals) {
6212 
6213   // Insert this type.
6214   if (!PointerTypes.insert(Ty))
6215     return false;
6216 
6217   QualType PointeeTy;
6218   const PointerType *PointerTy = Ty->getAs<PointerType>();
6219   bool buildObjCPtr = false;
6220   if (!PointerTy) {
6221     const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6222     PointeeTy = PTy->getPointeeType();
6223     buildObjCPtr = true;
6224   } else {
6225     PointeeTy = PointerTy->getPointeeType();
6226   }
6227 
6228   // Don't add qualified variants of arrays. For one, they're not allowed
6229   // (the qualifier would sink to the element type), and for another, the
6230   // only overload situation where it matters is subscript or pointer +- int,
6231   // and those shouldn't have qualifier variants anyway.
6232   if (PointeeTy->isArrayType())
6233     return true;
6234 
6235   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6236   bool hasVolatile = VisibleQuals.hasVolatile();
6237   bool hasRestrict = VisibleQuals.hasRestrict();
6238 
6239   // Iterate through all strict supersets of BaseCVR.
6240   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6241     if ((CVR | BaseCVR) != CVR) continue;
6242     // Skip over volatile if no volatile found anywhere in the types.
6243     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6244 
6245     // Skip over restrict if no restrict found anywhere in the types, or if
6246     // the type cannot be restrict-qualified.
6247     if ((CVR & Qualifiers::Restrict) &&
6248         (!hasRestrict ||
6249          (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6250       continue;
6251 
6252     // Build qualified pointee type.
6253     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6254 
6255     // Build qualified pointer type.
6256     QualType QPointerTy;
6257     if (!buildObjCPtr)
6258       QPointerTy = Context.getPointerType(QPointeeTy);
6259     else
6260       QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6261 
6262     // Insert qualified pointer type.
6263     PointerTypes.insert(QPointerTy);
6264   }
6265 
6266   return true;
6267 }
6268 
6269 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6270 /// to the set of pointer types along with any more-qualified variants of
6271 /// that type. For example, if @p Ty is "int const *", this routine
6272 /// will add "int const *", "int const volatile *", "int const
6273 /// restrict *", and "int const volatile restrict *" to the set of
6274 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6275 /// false otherwise.
6276 ///
6277 /// FIXME: what to do about extended qualifiers?
6278 bool
6279 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6280     QualType Ty) {
6281   // Insert this type.
6282   if (!MemberPointerTypes.insert(Ty))
6283     return false;
6284 
6285   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6286   assert(PointerTy && "type was not a member pointer type!");
6287 
6288   QualType PointeeTy = PointerTy->getPointeeType();
6289   // Don't add qualified variants of arrays. For one, they're not allowed
6290   // (the qualifier would sink to the element type), and for another, the
6291   // only overload situation where it matters is subscript or pointer +- int,
6292   // and those shouldn't have qualifier variants anyway.
6293   if (PointeeTy->isArrayType())
6294     return true;
6295   const Type *ClassTy = PointerTy->getClass();
6296 
6297   // Iterate through all strict supersets of the pointee type's CVR
6298   // qualifiers.
6299   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6300   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6301     if ((CVR | BaseCVR) != CVR) continue;
6302 
6303     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6304     MemberPointerTypes.insert(
6305       Context.getMemberPointerType(QPointeeTy, ClassTy));
6306   }
6307 
6308   return true;
6309 }
6310 
6311 /// AddTypesConvertedFrom - Add each of the types to which the type @p
6312 /// Ty can be implicit converted to the given set of @p Types. We're
6313 /// primarily interested in pointer types and enumeration types. We also
6314 /// take member pointer types, for the conditional operator.
6315 /// AllowUserConversions is true if we should look at the conversion
6316 /// functions of a class type, and AllowExplicitConversions if we
6317 /// should also include the explicit conversion functions of a class
6318 /// type.
6319 void
6320 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6321                                                SourceLocation Loc,
6322                                                bool AllowUserConversions,
6323                                                bool AllowExplicitConversions,
6324                                                const Qualifiers &VisibleQuals) {
6325   // Only deal with canonical types.
6326   Ty = Context.getCanonicalType(Ty);
6327 
6328   // Look through reference types; they aren't part of the type of an
6329   // expression for the purposes of conversions.
6330   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6331     Ty = RefTy->getPointeeType();
6332 
6333   // If we're dealing with an array type, decay to the pointer.
6334   if (Ty->isArrayType())
6335     Ty = SemaRef.Context.getArrayDecayedType(Ty);
6336 
6337   // Otherwise, we don't care about qualifiers on the type.
6338   Ty = Ty.getLocalUnqualifiedType();
6339 
6340   // Flag if we ever add a non-record type.
6341   const RecordType *TyRec = Ty->getAs<RecordType>();
6342   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6343 
6344   // Flag if we encounter an arithmetic type.
6345   HasArithmeticOrEnumeralTypes =
6346     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6347 
6348   if (Ty->isObjCIdType() || Ty->isObjCClassType())
6349     PointerTypes.insert(Ty);
6350   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6351     // Insert our type, and its more-qualified variants, into the set
6352     // of types.
6353     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6354       return;
6355   } else if (Ty->isMemberPointerType()) {
6356     // Member pointers are far easier, since the pointee can't be converted.
6357     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6358       return;
6359   } else if (Ty->isEnumeralType()) {
6360     HasArithmeticOrEnumeralTypes = true;
6361     EnumerationTypes.insert(Ty);
6362   } else if (Ty->isVectorType()) {
6363     // We treat vector types as arithmetic types in many contexts as an
6364     // extension.
6365     HasArithmeticOrEnumeralTypes = true;
6366     VectorTypes.insert(Ty);
6367   } else if (Ty->isNullPtrType()) {
6368     HasNullPtrType = true;
6369   } else if (AllowUserConversions && TyRec) {
6370     // No conversion functions in incomplete types.
6371     if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6372       return;
6373 
6374     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6375     std::pair<CXXRecordDecl::conversion_iterator,
6376               CXXRecordDecl::conversion_iterator>
6377       Conversions = ClassDecl->getVisibleConversionFunctions();
6378     for (CXXRecordDecl::conversion_iterator
6379            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6380       NamedDecl *D = I.getDecl();
6381       if (isa<UsingShadowDecl>(D))
6382         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6383 
6384       // Skip conversion function templates; they don't tell us anything
6385       // about which builtin types we can convert to.
6386       if (isa<FunctionTemplateDecl>(D))
6387         continue;
6388 
6389       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6390       if (AllowExplicitConversions || !Conv->isExplicit()) {
6391         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6392                               VisibleQuals);
6393       }
6394     }
6395   }
6396 }
6397 
6398 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6399 /// the volatile- and non-volatile-qualified assignment operators for the
6400 /// given type to the candidate set.
6401 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6402                                                    QualType T,
6403                                                    Expr **Args,
6404                                                    unsigned NumArgs,
6405                                     OverloadCandidateSet &CandidateSet) {
6406   QualType ParamTypes[2];
6407 
6408   // T& operator=(T&, T)
6409   ParamTypes[0] = S.Context.getLValueReferenceType(T);
6410   ParamTypes[1] = T;
6411   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6412                         /*IsAssignmentOperator=*/true);
6413 
6414   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6415     // volatile T& operator=(volatile T&, T)
6416     ParamTypes[0]
6417       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6418     ParamTypes[1] = T;
6419     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6420                           /*IsAssignmentOperator=*/true);
6421   }
6422 }
6423 
6424 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6425 /// if any, found in visible type conversion functions found in ArgExpr's type.
6426 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6427     Qualifiers VRQuals;
6428     const RecordType *TyRec;
6429     if (const MemberPointerType *RHSMPType =
6430         ArgExpr->getType()->getAs<MemberPointerType>())
6431       TyRec = RHSMPType->getClass()->getAs<RecordType>();
6432     else
6433       TyRec = ArgExpr->getType()->getAs<RecordType>();
6434     if (!TyRec) {
6435       // Just to be safe, assume the worst case.
6436       VRQuals.addVolatile();
6437       VRQuals.addRestrict();
6438       return VRQuals;
6439     }
6440 
6441     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6442     if (!ClassDecl->hasDefinition())
6443       return VRQuals;
6444 
6445     std::pair<CXXRecordDecl::conversion_iterator,
6446               CXXRecordDecl::conversion_iterator>
6447       Conversions = ClassDecl->getVisibleConversionFunctions();
6448 
6449     for (CXXRecordDecl::conversion_iterator
6450            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6451       NamedDecl *D = I.getDecl();
6452       if (isa<UsingShadowDecl>(D))
6453         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6454       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6455         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6456         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6457           CanTy = ResTypeRef->getPointeeType();
6458         // Need to go down the pointer/mempointer chain and add qualifiers
6459         // as see them.
6460         bool done = false;
6461         while (!done) {
6462           if (CanTy.isRestrictQualified())
6463             VRQuals.addRestrict();
6464           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6465             CanTy = ResTypePtr->getPointeeType();
6466           else if (const MemberPointerType *ResTypeMPtr =
6467                 CanTy->getAs<MemberPointerType>())
6468             CanTy = ResTypeMPtr->getPointeeType();
6469           else
6470             done = true;
6471           if (CanTy.isVolatileQualified())
6472             VRQuals.addVolatile();
6473           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6474             return VRQuals;
6475         }
6476       }
6477     }
6478     return VRQuals;
6479 }
6480 
6481 namespace {
6482 
6483 /// \brief Helper class to manage the addition of builtin operator overload
6484 /// candidates. It provides shared state and utility methods used throughout
6485 /// the process, as well as a helper method to add each group of builtin
6486 /// operator overloads from the standard to a candidate set.
6487 class BuiltinOperatorOverloadBuilder {
6488   // Common instance state available to all overload candidate addition methods.
6489   Sema &S;
6490   Expr **Args;
6491   unsigned NumArgs;
6492   Qualifiers VisibleTypeConversionsQuals;
6493   bool HasArithmeticOrEnumeralCandidateType;
6494   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6495   OverloadCandidateSet &CandidateSet;
6496 
6497   // Define some constants used to index and iterate over the arithemetic types
6498   // provided via the getArithmeticType() method below.
6499   // The "promoted arithmetic types" are the arithmetic
6500   // types are that preserved by promotion (C++ [over.built]p2).
6501   static const unsigned FirstIntegralType = 3;
6502   static const unsigned LastIntegralType = 20;
6503   static const unsigned FirstPromotedIntegralType = 3,
6504                         LastPromotedIntegralType = 11;
6505   static const unsigned FirstPromotedArithmeticType = 0,
6506                         LastPromotedArithmeticType = 11;
6507   static const unsigned NumArithmeticTypes = 20;
6508 
6509   /// \brief Get the canonical type for a given arithmetic type index.
6510   CanQualType getArithmeticType(unsigned index) {
6511     assert(index < NumArithmeticTypes);
6512     static CanQualType ASTContext::* const
6513       ArithmeticTypes[NumArithmeticTypes] = {
6514       // Start of promoted types.
6515       &ASTContext::FloatTy,
6516       &ASTContext::DoubleTy,
6517       &ASTContext::LongDoubleTy,
6518 
6519       // Start of integral types.
6520       &ASTContext::IntTy,
6521       &ASTContext::LongTy,
6522       &ASTContext::LongLongTy,
6523       &ASTContext::Int128Ty,
6524       &ASTContext::UnsignedIntTy,
6525       &ASTContext::UnsignedLongTy,
6526       &ASTContext::UnsignedLongLongTy,
6527       &ASTContext::UnsignedInt128Ty,
6528       // End of promoted types.
6529 
6530       &ASTContext::BoolTy,
6531       &ASTContext::CharTy,
6532       &ASTContext::WCharTy,
6533       &ASTContext::Char16Ty,
6534       &ASTContext::Char32Ty,
6535       &ASTContext::SignedCharTy,
6536       &ASTContext::ShortTy,
6537       &ASTContext::UnsignedCharTy,
6538       &ASTContext::UnsignedShortTy,
6539       // End of integral types.
6540       // FIXME: What about complex? What about half?
6541     };
6542     return S.Context.*ArithmeticTypes[index];
6543   }
6544 
6545   /// \brief Gets the canonical type resulting from the usual arithemetic
6546   /// converions for the given arithmetic types.
6547   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6548     // Accelerator table for performing the usual arithmetic conversions.
6549     // The rules are basically:
6550     //   - if either is floating-point, use the wider floating-point
6551     //   - if same signedness, use the higher rank
6552     //   - if same size, use unsigned of the higher rank
6553     //   - use the larger type
6554     // These rules, together with the axiom that higher ranks are
6555     // never smaller, are sufficient to precompute all of these results
6556     // *except* when dealing with signed types of higher rank.
6557     // (we could precompute SLL x UI for all known platforms, but it's
6558     // better not to make any assumptions).
6559     // We assume that int128 has a higher rank than long long on all platforms.
6560     enum PromotedType {
6561             Dep=-1,
6562             Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6563     };
6564     static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6565                                         [LastPromotedArithmeticType] = {
6566 /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6567 /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6568 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6569 /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6570 /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6571 /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6572 /*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6573 /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6574 /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6575 /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6576 /*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6577     };
6578 
6579     assert(L < LastPromotedArithmeticType);
6580     assert(R < LastPromotedArithmeticType);
6581     int Idx = ConversionsTable[L][R];
6582 
6583     // Fast path: the table gives us a concrete answer.
6584     if (Idx != Dep) return getArithmeticType(Idx);
6585 
6586     // Slow path: we need to compare widths.
6587     // An invariant is that the signed type has higher rank.
6588     CanQualType LT = getArithmeticType(L),
6589                 RT = getArithmeticType(R);
6590     unsigned LW = S.Context.getIntWidth(LT),
6591              RW = S.Context.getIntWidth(RT);
6592 
6593     // If they're different widths, use the signed type.
6594     if (LW > RW) return LT;
6595     else if (LW < RW) return RT;
6596 
6597     // Otherwise, use the unsigned type of the signed type's rank.
6598     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6599     assert(L == SLL || R == SLL);
6600     return S.Context.UnsignedLongLongTy;
6601   }
6602 
6603   /// \brief Helper method to factor out the common pattern of adding overloads
6604   /// for '++' and '--' builtin operators.
6605   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6606                                            bool HasVolatile,
6607                                            bool HasRestrict) {
6608     QualType ParamTypes[2] = {
6609       S.Context.getLValueReferenceType(CandidateTy),
6610       S.Context.IntTy
6611     };
6612 
6613     // Non-volatile version.
6614     if (NumArgs == 1)
6615       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6616     else
6617       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6618 
6619     // Use a heuristic to reduce number of builtin candidates in the set:
6620     // add volatile version only if there are conversions to a volatile type.
6621     if (HasVolatile) {
6622       ParamTypes[0] =
6623         S.Context.getLValueReferenceType(
6624           S.Context.getVolatileType(CandidateTy));
6625       if (NumArgs == 1)
6626         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6627       else
6628         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6629     }
6630 
6631     // Add restrict version only if there are conversions to a restrict type
6632     // and our candidate type is a non-restrict-qualified pointer.
6633     if (HasRestrict && CandidateTy->isAnyPointerType() &&
6634         !CandidateTy.isRestrictQualified()) {
6635       ParamTypes[0]
6636         = S.Context.getLValueReferenceType(
6637             S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6638       if (NumArgs == 1)
6639         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6640       else
6641         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6642 
6643       if (HasVolatile) {
6644         ParamTypes[0]
6645           = S.Context.getLValueReferenceType(
6646               S.Context.getCVRQualifiedType(CandidateTy,
6647                                             (Qualifiers::Volatile |
6648                                              Qualifiers::Restrict)));
6649         if (NumArgs == 1)
6650           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1,
6651                                 CandidateSet);
6652         else
6653           S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6654       }
6655     }
6656 
6657   }
6658 
6659 public:
6660   BuiltinOperatorOverloadBuilder(
6661     Sema &S, Expr **Args, unsigned NumArgs,
6662     Qualifiers VisibleTypeConversionsQuals,
6663     bool HasArithmeticOrEnumeralCandidateType,
6664     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6665     OverloadCandidateSet &CandidateSet)
6666     : S(S), Args(Args), NumArgs(NumArgs),
6667       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6668       HasArithmeticOrEnumeralCandidateType(
6669         HasArithmeticOrEnumeralCandidateType),
6670       CandidateTypes(CandidateTypes),
6671       CandidateSet(CandidateSet) {
6672     // Validate some of our static helper constants in debug builds.
6673     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6674            "Invalid first promoted integral type");
6675     assert(getArithmeticType(LastPromotedIntegralType - 1)
6676              == S.Context.UnsignedInt128Ty &&
6677            "Invalid last promoted integral type");
6678     assert(getArithmeticType(FirstPromotedArithmeticType)
6679              == S.Context.FloatTy &&
6680            "Invalid first promoted arithmetic type");
6681     assert(getArithmeticType(LastPromotedArithmeticType - 1)
6682              == S.Context.UnsignedInt128Ty &&
6683            "Invalid last promoted arithmetic type");
6684   }
6685 
6686   // C++ [over.built]p3:
6687   //
6688   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6689   //   is either volatile or empty, there exist candidate operator
6690   //   functions of the form
6691   //
6692   //       VQ T&      operator++(VQ T&);
6693   //       T          operator++(VQ T&, int);
6694   //
6695   // C++ [over.built]p4:
6696   //
6697   //   For every pair (T, VQ), where T is an arithmetic type other
6698   //   than bool, and VQ is either volatile or empty, there exist
6699   //   candidate operator functions of the form
6700   //
6701   //       VQ T&      operator--(VQ T&);
6702   //       T          operator--(VQ T&, int);
6703   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6704     if (!HasArithmeticOrEnumeralCandidateType)
6705       return;
6706 
6707     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6708          Arith < NumArithmeticTypes; ++Arith) {
6709       addPlusPlusMinusMinusStyleOverloads(
6710         getArithmeticType(Arith),
6711         VisibleTypeConversionsQuals.hasVolatile(),
6712         VisibleTypeConversionsQuals.hasRestrict());
6713     }
6714   }
6715 
6716   // C++ [over.built]p5:
6717   //
6718   //   For every pair (T, VQ), where T is a cv-qualified or
6719   //   cv-unqualified object type, and VQ is either volatile or
6720   //   empty, there exist candidate operator functions of the form
6721   //
6722   //       T*VQ&      operator++(T*VQ&);
6723   //       T*VQ&      operator--(T*VQ&);
6724   //       T*         operator++(T*VQ&, int);
6725   //       T*         operator--(T*VQ&, int);
6726   void addPlusPlusMinusMinusPointerOverloads() {
6727     for (BuiltinCandidateTypeSet::iterator
6728               Ptr = CandidateTypes[0].pointer_begin(),
6729            PtrEnd = CandidateTypes[0].pointer_end();
6730          Ptr != PtrEnd; ++Ptr) {
6731       // Skip pointer types that aren't pointers to object types.
6732       if (!(*Ptr)->getPointeeType()->isObjectType())
6733         continue;
6734 
6735       addPlusPlusMinusMinusStyleOverloads(*Ptr,
6736         (!(*Ptr).isVolatileQualified() &&
6737          VisibleTypeConversionsQuals.hasVolatile()),
6738         (!(*Ptr).isRestrictQualified() &&
6739          VisibleTypeConversionsQuals.hasRestrict()));
6740     }
6741   }
6742 
6743   // C++ [over.built]p6:
6744   //   For every cv-qualified or cv-unqualified object type T, there
6745   //   exist candidate operator functions of the form
6746   //
6747   //       T&         operator*(T*);
6748   //
6749   // C++ [over.built]p7:
6750   //   For every function type T that does not have cv-qualifiers or a
6751   //   ref-qualifier, there exist candidate operator functions of the form
6752   //       T&         operator*(T*);
6753   void addUnaryStarPointerOverloads() {
6754     for (BuiltinCandidateTypeSet::iterator
6755               Ptr = CandidateTypes[0].pointer_begin(),
6756            PtrEnd = CandidateTypes[0].pointer_end();
6757          Ptr != PtrEnd; ++Ptr) {
6758       QualType ParamTy = *Ptr;
6759       QualType PointeeTy = ParamTy->getPointeeType();
6760       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6761         continue;
6762 
6763       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6764         if (Proto->getTypeQuals() || Proto->getRefQualifier())
6765           continue;
6766 
6767       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6768                             &ParamTy, Args, 1, CandidateSet);
6769     }
6770   }
6771 
6772   // C++ [over.built]p9:
6773   //  For every promoted arithmetic type T, there exist candidate
6774   //  operator functions of the form
6775   //
6776   //       T         operator+(T);
6777   //       T         operator-(T);
6778   void addUnaryPlusOrMinusArithmeticOverloads() {
6779     if (!HasArithmeticOrEnumeralCandidateType)
6780       return;
6781 
6782     for (unsigned Arith = FirstPromotedArithmeticType;
6783          Arith < LastPromotedArithmeticType; ++Arith) {
6784       QualType ArithTy = getArithmeticType(Arith);
6785       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
6786     }
6787 
6788     // Extension: We also add these operators for vector types.
6789     for (BuiltinCandidateTypeSet::iterator
6790               Vec = CandidateTypes[0].vector_begin(),
6791            VecEnd = CandidateTypes[0].vector_end();
6792          Vec != VecEnd; ++Vec) {
6793       QualType VecTy = *Vec;
6794       S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6795     }
6796   }
6797 
6798   // C++ [over.built]p8:
6799   //   For every type T, there exist candidate operator functions of
6800   //   the form
6801   //
6802   //       T*         operator+(T*);
6803   void addUnaryPlusPointerOverloads() {
6804     for (BuiltinCandidateTypeSet::iterator
6805               Ptr = CandidateTypes[0].pointer_begin(),
6806            PtrEnd = CandidateTypes[0].pointer_end();
6807          Ptr != PtrEnd; ++Ptr) {
6808       QualType ParamTy = *Ptr;
6809       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
6810     }
6811   }
6812 
6813   // C++ [over.built]p10:
6814   //   For every promoted integral type T, there exist candidate
6815   //   operator functions of the form
6816   //
6817   //        T         operator~(T);
6818   void addUnaryTildePromotedIntegralOverloads() {
6819     if (!HasArithmeticOrEnumeralCandidateType)
6820       return;
6821 
6822     for (unsigned Int = FirstPromotedIntegralType;
6823          Int < LastPromotedIntegralType; ++Int) {
6824       QualType IntTy = getArithmeticType(Int);
6825       S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
6826     }
6827 
6828     // Extension: We also add this operator for vector types.
6829     for (BuiltinCandidateTypeSet::iterator
6830               Vec = CandidateTypes[0].vector_begin(),
6831            VecEnd = CandidateTypes[0].vector_end();
6832          Vec != VecEnd; ++Vec) {
6833       QualType VecTy = *Vec;
6834       S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6835     }
6836   }
6837 
6838   // C++ [over.match.oper]p16:
6839   //   For every pointer to member type T, there exist candidate operator
6840   //   functions of the form
6841   //
6842   //        bool operator==(T,T);
6843   //        bool operator!=(T,T);
6844   void addEqualEqualOrNotEqualMemberPointerOverloads() {
6845     /// Set of (canonical) types that we've already handled.
6846     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6847 
6848     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6849       for (BuiltinCandidateTypeSet::iterator
6850                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6851              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6852            MemPtr != MemPtrEnd;
6853            ++MemPtr) {
6854         // Don't add the same builtin candidate twice.
6855         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6856           continue;
6857 
6858         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6859         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6860                               CandidateSet);
6861       }
6862     }
6863   }
6864 
6865   // C++ [over.built]p15:
6866   //
6867   //   For every T, where T is an enumeration type, a pointer type, or
6868   //   std::nullptr_t, there exist candidate operator functions of the form
6869   //
6870   //        bool       operator<(T, T);
6871   //        bool       operator>(T, T);
6872   //        bool       operator<=(T, T);
6873   //        bool       operator>=(T, T);
6874   //        bool       operator==(T, T);
6875   //        bool       operator!=(T, T);
6876   void addRelationalPointerOrEnumeralOverloads() {
6877     // C++ [over.match.oper]p3:
6878     //   [...]the built-in candidates include all of the candidate operator
6879     //   functions defined in 13.6 that, compared to the given operator, [...]
6880     //   do not have the same parameter-type-list as any non-template non-member
6881     //   candidate.
6882     //
6883     // Note that in practice, this only affects enumeration types because there
6884     // aren't any built-in candidates of record type, and a user-defined operator
6885     // must have an operand of record or enumeration type. Also, the only other
6886     // overloaded operator with enumeration arguments, operator=,
6887     // cannot be overloaded for enumeration types, so this is the only place
6888     // where we must suppress candidates like this.
6889     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6890       UserDefinedBinaryOperators;
6891 
6892     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6893       if (CandidateTypes[ArgIdx].enumeration_begin() !=
6894           CandidateTypes[ArgIdx].enumeration_end()) {
6895         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
6896                                          CEnd = CandidateSet.end();
6897              C != CEnd; ++C) {
6898           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
6899             continue;
6900 
6901           if (C->Function->isFunctionTemplateSpecialization())
6902             continue;
6903 
6904           QualType FirstParamType =
6905             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
6906           QualType SecondParamType =
6907             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
6908 
6909           // Skip if either parameter isn't of enumeral type.
6910           if (!FirstParamType->isEnumeralType() ||
6911               !SecondParamType->isEnumeralType())
6912             continue;
6913 
6914           // Add this operator to the set of known user-defined operators.
6915           UserDefinedBinaryOperators.insert(
6916             std::make_pair(S.Context.getCanonicalType(FirstParamType),
6917                            S.Context.getCanonicalType(SecondParamType)));
6918         }
6919       }
6920     }
6921 
6922     /// Set of (canonical) types that we've already handled.
6923     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6924 
6925     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6926       for (BuiltinCandidateTypeSet::iterator
6927                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
6928              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
6929            Ptr != PtrEnd; ++Ptr) {
6930         // Don't add the same builtin candidate twice.
6931         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6932           continue;
6933 
6934         QualType ParamTypes[2] = { *Ptr, *Ptr };
6935         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6936                               CandidateSet);
6937       }
6938       for (BuiltinCandidateTypeSet::iterator
6939                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
6940              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
6941            Enum != EnumEnd; ++Enum) {
6942         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
6943 
6944         // Don't add the same builtin candidate twice, or if a user defined
6945         // candidate exists.
6946         if (!AddedTypes.insert(CanonType) ||
6947             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
6948                                                             CanonType)))
6949           continue;
6950 
6951         QualType ParamTypes[2] = { *Enum, *Enum };
6952         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6953                               CandidateSet);
6954       }
6955 
6956       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
6957         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
6958         if (AddedTypes.insert(NullPtrTy) &&
6959             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
6960                                                              NullPtrTy))) {
6961           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
6962           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6963                                 CandidateSet);
6964         }
6965       }
6966     }
6967   }
6968 
6969   // C++ [over.built]p13:
6970   //
6971   //   For every cv-qualified or cv-unqualified object type T
6972   //   there exist candidate operator functions of the form
6973   //
6974   //      T*         operator+(T*, ptrdiff_t);
6975   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
6976   //      T*         operator-(T*, ptrdiff_t);
6977   //      T*         operator+(ptrdiff_t, T*);
6978   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
6979   //
6980   // C++ [over.built]p14:
6981   //
6982   //   For every T, where T is a pointer to object type, there
6983   //   exist candidate operator functions of the form
6984   //
6985   //      ptrdiff_t  operator-(T, T);
6986   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
6987     /// Set of (canonical) types that we've already handled.
6988     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6989 
6990     for (int Arg = 0; Arg < 2; ++Arg) {
6991       QualType AsymetricParamTypes[2] = {
6992         S.Context.getPointerDiffType(),
6993         S.Context.getPointerDiffType(),
6994       };
6995       for (BuiltinCandidateTypeSet::iterator
6996                 Ptr = CandidateTypes[Arg].pointer_begin(),
6997              PtrEnd = CandidateTypes[Arg].pointer_end();
6998            Ptr != PtrEnd; ++Ptr) {
6999         QualType PointeeTy = (*Ptr)->getPointeeType();
7000         if (!PointeeTy->isObjectType())
7001           continue;
7002 
7003         AsymetricParamTypes[Arg] = *Ptr;
7004         if (Arg == 0 || Op == OO_Plus) {
7005           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
7006           // T* operator+(ptrdiff_t, T*);
7007           S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2,
7008                                 CandidateSet);
7009         }
7010         if (Op == OO_Minus) {
7011           // ptrdiff_t operator-(T, T);
7012           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7013             continue;
7014 
7015           QualType ParamTypes[2] = { *Ptr, *Ptr };
7016           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
7017                                 Args, 2, CandidateSet);
7018         }
7019       }
7020     }
7021   }
7022 
7023   // C++ [over.built]p12:
7024   //
7025   //   For every pair of promoted arithmetic types L and R, there
7026   //   exist candidate operator functions of the form
7027   //
7028   //        LR         operator*(L, R);
7029   //        LR         operator/(L, R);
7030   //        LR         operator+(L, R);
7031   //        LR         operator-(L, R);
7032   //        bool       operator<(L, R);
7033   //        bool       operator>(L, R);
7034   //        bool       operator<=(L, R);
7035   //        bool       operator>=(L, R);
7036   //        bool       operator==(L, R);
7037   //        bool       operator!=(L, R);
7038   //
7039   //   where LR is the result of the usual arithmetic conversions
7040   //   between types L and R.
7041   //
7042   // C++ [over.built]p24:
7043   //
7044   //   For every pair of promoted arithmetic types L and R, there exist
7045   //   candidate operator functions of the form
7046   //
7047   //        LR       operator?(bool, L, R);
7048   //
7049   //   where LR is the result of the usual arithmetic conversions
7050   //   between types L and R.
7051   // Our candidates ignore the first parameter.
7052   void addGenericBinaryArithmeticOverloads(bool isComparison) {
7053     if (!HasArithmeticOrEnumeralCandidateType)
7054       return;
7055 
7056     for (unsigned Left = FirstPromotedArithmeticType;
7057          Left < LastPromotedArithmeticType; ++Left) {
7058       for (unsigned Right = FirstPromotedArithmeticType;
7059            Right < LastPromotedArithmeticType; ++Right) {
7060         QualType LandR[2] = { getArithmeticType(Left),
7061                               getArithmeticType(Right) };
7062         QualType Result =
7063           isComparison ? S.Context.BoolTy
7064                        : getUsualArithmeticConversions(Left, Right);
7065         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7066       }
7067     }
7068 
7069     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
7070     // conditional operator for vector types.
7071     for (BuiltinCandidateTypeSet::iterator
7072               Vec1 = CandidateTypes[0].vector_begin(),
7073            Vec1End = CandidateTypes[0].vector_end();
7074          Vec1 != Vec1End; ++Vec1) {
7075       for (BuiltinCandidateTypeSet::iterator
7076                 Vec2 = CandidateTypes[1].vector_begin(),
7077              Vec2End = CandidateTypes[1].vector_end();
7078            Vec2 != Vec2End; ++Vec2) {
7079         QualType LandR[2] = { *Vec1, *Vec2 };
7080         QualType Result = S.Context.BoolTy;
7081         if (!isComparison) {
7082           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7083             Result = *Vec1;
7084           else
7085             Result = *Vec2;
7086         }
7087 
7088         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7089       }
7090     }
7091   }
7092 
7093   // C++ [over.built]p17:
7094   //
7095   //   For every pair of promoted integral types L and R, there
7096   //   exist candidate operator functions of the form
7097   //
7098   //      LR         operator%(L, R);
7099   //      LR         operator&(L, R);
7100   //      LR         operator^(L, R);
7101   //      LR         operator|(L, R);
7102   //      L          operator<<(L, R);
7103   //      L          operator>>(L, R);
7104   //
7105   //   where LR is the result of the usual arithmetic conversions
7106   //   between types L and R.
7107   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7108     if (!HasArithmeticOrEnumeralCandidateType)
7109       return;
7110 
7111     for (unsigned Left = FirstPromotedIntegralType;
7112          Left < LastPromotedIntegralType; ++Left) {
7113       for (unsigned Right = FirstPromotedIntegralType;
7114            Right < LastPromotedIntegralType; ++Right) {
7115         QualType LandR[2] = { getArithmeticType(Left),
7116                               getArithmeticType(Right) };
7117         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7118             ? LandR[0]
7119             : getUsualArithmeticConversions(Left, Right);
7120         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7121       }
7122     }
7123   }
7124 
7125   // C++ [over.built]p20:
7126   //
7127   //   For every pair (T, VQ), where T is an enumeration or
7128   //   pointer to member type and VQ is either volatile or
7129   //   empty, there exist candidate operator functions of the form
7130   //
7131   //        VQ T&      operator=(VQ T&, T);
7132   void addAssignmentMemberPointerOrEnumeralOverloads() {
7133     /// Set of (canonical) types that we've already handled.
7134     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7135 
7136     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7137       for (BuiltinCandidateTypeSet::iterator
7138                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7139              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7140            Enum != EnumEnd; ++Enum) {
7141         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7142           continue;
7143 
7144         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2,
7145                                                CandidateSet);
7146       }
7147 
7148       for (BuiltinCandidateTypeSet::iterator
7149                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7150              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7151            MemPtr != MemPtrEnd; ++MemPtr) {
7152         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7153           continue;
7154 
7155         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2,
7156                                                CandidateSet);
7157       }
7158     }
7159   }
7160 
7161   // C++ [over.built]p19:
7162   //
7163   //   For every pair (T, VQ), where T is any type and VQ is either
7164   //   volatile or empty, there exist candidate operator functions
7165   //   of the form
7166   //
7167   //        T*VQ&      operator=(T*VQ&, T*);
7168   //
7169   // C++ [over.built]p21:
7170   //
7171   //   For every pair (T, VQ), where T is a cv-qualified or
7172   //   cv-unqualified object type and VQ is either volatile or
7173   //   empty, there exist candidate operator functions of the form
7174   //
7175   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7176   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7177   void addAssignmentPointerOverloads(bool isEqualOp) {
7178     /// Set of (canonical) types that we've already handled.
7179     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7180 
7181     for (BuiltinCandidateTypeSet::iterator
7182               Ptr = CandidateTypes[0].pointer_begin(),
7183            PtrEnd = CandidateTypes[0].pointer_end();
7184          Ptr != PtrEnd; ++Ptr) {
7185       // If this is operator=, keep track of the builtin candidates we added.
7186       if (isEqualOp)
7187         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7188       else if (!(*Ptr)->getPointeeType()->isObjectType())
7189         continue;
7190 
7191       // non-volatile version
7192       QualType ParamTypes[2] = {
7193         S.Context.getLValueReferenceType(*Ptr),
7194         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7195       };
7196       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7197                             /*IsAssigmentOperator=*/ isEqualOp);
7198 
7199       bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7200                           VisibleTypeConversionsQuals.hasVolatile();
7201       if (NeedVolatile) {
7202         // volatile version
7203         ParamTypes[0] =
7204           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7205         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7206                               /*IsAssigmentOperator=*/isEqualOp);
7207       }
7208 
7209       if (!(*Ptr).isRestrictQualified() &&
7210           VisibleTypeConversionsQuals.hasRestrict()) {
7211         // restrict version
7212         ParamTypes[0]
7213           = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7214         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7215                               /*IsAssigmentOperator=*/isEqualOp);
7216 
7217         if (NeedVolatile) {
7218           // volatile restrict version
7219           ParamTypes[0]
7220             = S.Context.getLValueReferenceType(
7221                 S.Context.getCVRQualifiedType(*Ptr,
7222                                               (Qualifiers::Volatile |
7223                                                Qualifiers::Restrict)));
7224           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7225                                 CandidateSet,
7226                                 /*IsAssigmentOperator=*/isEqualOp);
7227         }
7228       }
7229     }
7230 
7231     if (isEqualOp) {
7232       for (BuiltinCandidateTypeSet::iterator
7233                 Ptr = CandidateTypes[1].pointer_begin(),
7234              PtrEnd = CandidateTypes[1].pointer_end();
7235            Ptr != PtrEnd; ++Ptr) {
7236         // Make sure we don't add the same candidate twice.
7237         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7238           continue;
7239 
7240         QualType ParamTypes[2] = {
7241           S.Context.getLValueReferenceType(*Ptr),
7242           *Ptr,
7243         };
7244 
7245         // non-volatile version
7246         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7247                               /*IsAssigmentOperator=*/true);
7248 
7249         bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7250                            VisibleTypeConversionsQuals.hasVolatile();
7251         if (NeedVolatile) {
7252           // volatile version
7253           ParamTypes[0] =
7254             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7255           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7256                                 CandidateSet, /*IsAssigmentOperator=*/true);
7257         }
7258 
7259         if (!(*Ptr).isRestrictQualified() &&
7260             VisibleTypeConversionsQuals.hasRestrict()) {
7261           // restrict version
7262           ParamTypes[0]
7263             = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7264           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7265                                 CandidateSet, /*IsAssigmentOperator=*/true);
7266 
7267           if (NeedVolatile) {
7268             // volatile restrict version
7269             ParamTypes[0]
7270               = S.Context.getLValueReferenceType(
7271                   S.Context.getCVRQualifiedType(*Ptr,
7272                                                 (Qualifiers::Volatile |
7273                                                  Qualifiers::Restrict)));
7274             S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7275                                   CandidateSet, /*IsAssigmentOperator=*/true);
7276 
7277           }
7278         }
7279       }
7280     }
7281   }
7282 
7283   // C++ [over.built]p18:
7284   //
7285   //   For every triple (L, VQ, R), where L is an arithmetic type,
7286   //   VQ is either volatile or empty, and R is a promoted
7287   //   arithmetic type, there exist candidate operator functions of
7288   //   the form
7289   //
7290   //        VQ L&      operator=(VQ L&, R);
7291   //        VQ L&      operator*=(VQ L&, R);
7292   //        VQ L&      operator/=(VQ L&, R);
7293   //        VQ L&      operator+=(VQ L&, R);
7294   //        VQ L&      operator-=(VQ L&, R);
7295   void addAssignmentArithmeticOverloads(bool isEqualOp) {
7296     if (!HasArithmeticOrEnumeralCandidateType)
7297       return;
7298 
7299     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7300       for (unsigned Right = FirstPromotedArithmeticType;
7301            Right < LastPromotedArithmeticType; ++Right) {
7302         QualType ParamTypes[2];
7303         ParamTypes[1] = getArithmeticType(Right);
7304 
7305         // Add this built-in operator as a candidate (VQ is empty).
7306         ParamTypes[0] =
7307           S.Context.getLValueReferenceType(getArithmeticType(Left));
7308         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7309                               /*IsAssigmentOperator=*/isEqualOp);
7310 
7311         // Add this built-in operator as a candidate (VQ is 'volatile').
7312         if (VisibleTypeConversionsQuals.hasVolatile()) {
7313           ParamTypes[0] =
7314             S.Context.getVolatileType(getArithmeticType(Left));
7315           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7316           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7317                                 CandidateSet,
7318                                 /*IsAssigmentOperator=*/isEqualOp);
7319         }
7320       }
7321     }
7322 
7323     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7324     for (BuiltinCandidateTypeSet::iterator
7325               Vec1 = CandidateTypes[0].vector_begin(),
7326            Vec1End = CandidateTypes[0].vector_end();
7327          Vec1 != Vec1End; ++Vec1) {
7328       for (BuiltinCandidateTypeSet::iterator
7329                 Vec2 = CandidateTypes[1].vector_begin(),
7330              Vec2End = CandidateTypes[1].vector_end();
7331            Vec2 != Vec2End; ++Vec2) {
7332         QualType ParamTypes[2];
7333         ParamTypes[1] = *Vec2;
7334         // Add this built-in operator as a candidate (VQ is empty).
7335         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7336         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7337                               /*IsAssigmentOperator=*/isEqualOp);
7338 
7339         // Add this built-in operator as a candidate (VQ is 'volatile').
7340         if (VisibleTypeConversionsQuals.hasVolatile()) {
7341           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7342           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7343           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7344                                 CandidateSet,
7345                                 /*IsAssigmentOperator=*/isEqualOp);
7346         }
7347       }
7348     }
7349   }
7350 
7351   // C++ [over.built]p22:
7352   //
7353   //   For every triple (L, VQ, R), where L is an integral type, VQ
7354   //   is either volatile or empty, and R is a promoted integral
7355   //   type, there exist candidate operator functions of the form
7356   //
7357   //        VQ L&       operator%=(VQ L&, R);
7358   //        VQ L&       operator<<=(VQ L&, R);
7359   //        VQ L&       operator>>=(VQ L&, R);
7360   //        VQ L&       operator&=(VQ L&, R);
7361   //        VQ L&       operator^=(VQ L&, R);
7362   //        VQ L&       operator|=(VQ L&, R);
7363   void addAssignmentIntegralOverloads() {
7364     if (!HasArithmeticOrEnumeralCandidateType)
7365       return;
7366 
7367     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7368       for (unsigned Right = FirstPromotedIntegralType;
7369            Right < LastPromotedIntegralType; ++Right) {
7370         QualType ParamTypes[2];
7371         ParamTypes[1] = getArithmeticType(Right);
7372 
7373         // Add this built-in operator as a candidate (VQ is empty).
7374         ParamTypes[0] =
7375           S.Context.getLValueReferenceType(getArithmeticType(Left));
7376         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
7377         if (VisibleTypeConversionsQuals.hasVolatile()) {
7378           // Add this built-in operator as a candidate (VQ is 'volatile').
7379           ParamTypes[0] = getArithmeticType(Left);
7380           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7381           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7382           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7383                                 CandidateSet);
7384         }
7385       }
7386     }
7387   }
7388 
7389   // C++ [over.operator]p23:
7390   //
7391   //   There also exist candidate operator functions of the form
7392   //
7393   //        bool        operator!(bool);
7394   //        bool        operator&&(bool, bool);
7395   //        bool        operator||(bool, bool);
7396   void addExclaimOverload() {
7397     QualType ParamTy = S.Context.BoolTy;
7398     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
7399                           /*IsAssignmentOperator=*/false,
7400                           /*NumContextualBoolArguments=*/1);
7401   }
7402   void addAmpAmpOrPipePipeOverload() {
7403     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7404     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
7405                           /*IsAssignmentOperator=*/false,
7406                           /*NumContextualBoolArguments=*/2);
7407   }
7408 
7409   // C++ [over.built]p13:
7410   //
7411   //   For every cv-qualified or cv-unqualified object type T there
7412   //   exist candidate operator functions of the form
7413   //
7414   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7415   //        T&         operator[](T*, ptrdiff_t);
7416   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7417   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7418   //        T&         operator[](ptrdiff_t, T*);
7419   void addSubscriptOverloads() {
7420     for (BuiltinCandidateTypeSet::iterator
7421               Ptr = CandidateTypes[0].pointer_begin(),
7422            PtrEnd = CandidateTypes[0].pointer_end();
7423          Ptr != PtrEnd; ++Ptr) {
7424       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7425       QualType PointeeType = (*Ptr)->getPointeeType();
7426       if (!PointeeType->isObjectType())
7427         continue;
7428 
7429       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7430 
7431       // T& operator[](T*, ptrdiff_t)
7432       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7433     }
7434 
7435     for (BuiltinCandidateTypeSet::iterator
7436               Ptr = CandidateTypes[1].pointer_begin(),
7437            PtrEnd = CandidateTypes[1].pointer_end();
7438          Ptr != PtrEnd; ++Ptr) {
7439       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7440       QualType PointeeType = (*Ptr)->getPointeeType();
7441       if (!PointeeType->isObjectType())
7442         continue;
7443 
7444       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7445 
7446       // T& operator[](ptrdiff_t, T*)
7447       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7448     }
7449   }
7450 
7451   // C++ [over.built]p11:
7452   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7453   //    C1 is the same type as C2 or is a derived class of C2, T is an object
7454   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7455   //    there exist candidate operator functions of the form
7456   //
7457   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7458   //
7459   //    where CV12 is the union of CV1 and CV2.
7460   void addArrowStarOverloads() {
7461     for (BuiltinCandidateTypeSet::iterator
7462              Ptr = CandidateTypes[0].pointer_begin(),
7463            PtrEnd = CandidateTypes[0].pointer_end();
7464          Ptr != PtrEnd; ++Ptr) {
7465       QualType C1Ty = (*Ptr);
7466       QualType C1;
7467       QualifierCollector Q1;
7468       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7469       if (!isa<RecordType>(C1))
7470         continue;
7471       // heuristic to reduce number of builtin candidates in the set.
7472       // Add volatile/restrict version only if there are conversions to a
7473       // volatile/restrict type.
7474       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7475         continue;
7476       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7477         continue;
7478       for (BuiltinCandidateTypeSet::iterator
7479                 MemPtr = CandidateTypes[1].member_pointer_begin(),
7480              MemPtrEnd = CandidateTypes[1].member_pointer_end();
7481            MemPtr != MemPtrEnd; ++MemPtr) {
7482         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7483         QualType C2 = QualType(mptr->getClass(), 0);
7484         C2 = C2.getUnqualifiedType();
7485         if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7486           break;
7487         QualType ParamTypes[2] = { *Ptr, *MemPtr };
7488         // build CV12 T&
7489         QualType T = mptr->getPointeeType();
7490         if (!VisibleTypeConversionsQuals.hasVolatile() &&
7491             T.isVolatileQualified())
7492           continue;
7493         if (!VisibleTypeConversionsQuals.hasRestrict() &&
7494             T.isRestrictQualified())
7495           continue;
7496         T = Q1.apply(S.Context, T);
7497         QualType ResultTy = S.Context.getLValueReferenceType(T);
7498         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7499       }
7500     }
7501   }
7502 
7503   // Note that we don't consider the first argument, since it has been
7504   // contextually converted to bool long ago. The candidates below are
7505   // therefore added as binary.
7506   //
7507   // C++ [over.built]p25:
7508   //   For every type T, where T is a pointer, pointer-to-member, or scoped
7509   //   enumeration type, there exist candidate operator functions of the form
7510   //
7511   //        T        operator?(bool, T, T);
7512   //
7513   void addConditionalOperatorOverloads() {
7514     /// Set of (canonical) types that we've already handled.
7515     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7516 
7517     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7518       for (BuiltinCandidateTypeSet::iterator
7519                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7520              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7521            Ptr != PtrEnd; ++Ptr) {
7522         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7523           continue;
7524 
7525         QualType ParamTypes[2] = { *Ptr, *Ptr };
7526         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
7527       }
7528 
7529       for (BuiltinCandidateTypeSet::iterator
7530                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7531              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7532            MemPtr != MemPtrEnd; ++MemPtr) {
7533         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7534           continue;
7535 
7536         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7537         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet);
7538       }
7539 
7540       if (S.getLangOpts().CPlusPlus11) {
7541         for (BuiltinCandidateTypeSet::iterator
7542                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7543                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7544              Enum != EnumEnd; ++Enum) {
7545           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7546             continue;
7547 
7548           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7549             continue;
7550 
7551           QualType ParamTypes[2] = { *Enum, *Enum };
7552           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet);
7553         }
7554       }
7555     }
7556   }
7557 };
7558 
7559 } // end anonymous namespace
7560 
7561 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
7562 /// operator overloads to the candidate set (C++ [over.built]), based
7563 /// on the operator @p Op and the arguments given. For example, if the
7564 /// operator is a binary '+', this routine might add "int
7565 /// operator+(int, int)" to cover integer addition.
7566 void
7567 Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7568                                    SourceLocation OpLoc,
7569                                    Expr **Args, unsigned NumArgs,
7570                                    OverloadCandidateSet& CandidateSet) {
7571   // Find all of the types that the arguments can convert to, but only
7572   // if the operator we're looking at has built-in operator candidates
7573   // that make use of these types. Also record whether we encounter non-record
7574   // candidate types or either arithmetic or enumeral candidate types.
7575   Qualifiers VisibleTypeConversionsQuals;
7576   VisibleTypeConversionsQuals.addConst();
7577   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7578     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7579 
7580   bool HasNonRecordCandidateType = false;
7581   bool HasArithmeticOrEnumeralCandidateType = false;
7582   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7583   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
7584     CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7585     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7586                                                  OpLoc,
7587                                                  true,
7588                                                  (Op == OO_Exclaim ||
7589                                                   Op == OO_AmpAmp ||
7590                                                   Op == OO_PipePipe),
7591                                                  VisibleTypeConversionsQuals);
7592     HasNonRecordCandidateType = HasNonRecordCandidateType ||
7593         CandidateTypes[ArgIdx].hasNonRecordTypes();
7594     HasArithmeticOrEnumeralCandidateType =
7595         HasArithmeticOrEnumeralCandidateType ||
7596         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7597   }
7598 
7599   // Exit early when no non-record types have been added to the candidate set
7600   // for any of the arguments to the operator.
7601   //
7602   // We can't exit early for !, ||, or &&, since there we have always have
7603   // 'bool' overloads.
7604   if (!HasNonRecordCandidateType &&
7605       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7606     return;
7607 
7608   // Setup an object to manage the common state for building overloads.
7609   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs,
7610                                            VisibleTypeConversionsQuals,
7611                                            HasArithmeticOrEnumeralCandidateType,
7612                                            CandidateTypes, CandidateSet);
7613 
7614   // Dispatch over the operation to add in only those overloads which apply.
7615   switch (Op) {
7616   case OO_None:
7617   case NUM_OVERLOADED_OPERATORS:
7618     llvm_unreachable("Expected an overloaded operator");
7619 
7620   case OO_New:
7621   case OO_Delete:
7622   case OO_Array_New:
7623   case OO_Array_Delete:
7624   case OO_Call:
7625     llvm_unreachable(
7626                     "Special operators don't use AddBuiltinOperatorCandidates");
7627 
7628   case OO_Comma:
7629   case OO_Arrow:
7630     // C++ [over.match.oper]p3:
7631     //   -- For the operator ',', the unary operator '&', or the
7632     //      operator '->', the built-in candidates set is empty.
7633     break;
7634 
7635   case OO_Plus: // '+' is either unary or binary
7636     if (NumArgs == 1)
7637       OpBuilder.addUnaryPlusPointerOverloads();
7638     // Fall through.
7639 
7640   case OO_Minus: // '-' is either unary or binary
7641     if (NumArgs == 1) {
7642       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7643     } else {
7644       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7645       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7646     }
7647     break;
7648 
7649   case OO_Star: // '*' is either unary or binary
7650     if (NumArgs == 1)
7651       OpBuilder.addUnaryStarPointerOverloads();
7652     else
7653       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7654     break;
7655 
7656   case OO_Slash:
7657     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7658     break;
7659 
7660   case OO_PlusPlus:
7661   case OO_MinusMinus:
7662     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7663     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7664     break;
7665 
7666   case OO_EqualEqual:
7667   case OO_ExclaimEqual:
7668     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7669     // Fall through.
7670 
7671   case OO_Less:
7672   case OO_Greater:
7673   case OO_LessEqual:
7674   case OO_GreaterEqual:
7675     OpBuilder.addRelationalPointerOrEnumeralOverloads();
7676     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7677     break;
7678 
7679   case OO_Percent:
7680   case OO_Caret:
7681   case OO_Pipe:
7682   case OO_LessLess:
7683   case OO_GreaterGreater:
7684     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7685     break;
7686 
7687   case OO_Amp: // '&' is either unary or binary
7688     if (NumArgs == 1)
7689       // C++ [over.match.oper]p3:
7690       //   -- For the operator ',', the unary operator '&', or the
7691       //      operator '->', the built-in candidates set is empty.
7692       break;
7693 
7694     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7695     break;
7696 
7697   case OO_Tilde:
7698     OpBuilder.addUnaryTildePromotedIntegralOverloads();
7699     break;
7700 
7701   case OO_Equal:
7702     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7703     // Fall through.
7704 
7705   case OO_PlusEqual:
7706   case OO_MinusEqual:
7707     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7708     // Fall through.
7709 
7710   case OO_StarEqual:
7711   case OO_SlashEqual:
7712     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7713     break;
7714 
7715   case OO_PercentEqual:
7716   case OO_LessLessEqual:
7717   case OO_GreaterGreaterEqual:
7718   case OO_AmpEqual:
7719   case OO_CaretEqual:
7720   case OO_PipeEqual:
7721     OpBuilder.addAssignmentIntegralOverloads();
7722     break;
7723 
7724   case OO_Exclaim:
7725     OpBuilder.addExclaimOverload();
7726     break;
7727 
7728   case OO_AmpAmp:
7729   case OO_PipePipe:
7730     OpBuilder.addAmpAmpOrPipePipeOverload();
7731     break;
7732 
7733   case OO_Subscript:
7734     OpBuilder.addSubscriptOverloads();
7735     break;
7736 
7737   case OO_ArrowStar:
7738     OpBuilder.addArrowStarOverloads();
7739     break;
7740 
7741   case OO_Conditional:
7742     OpBuilder.addConditionalOperatorOverloads();
7743     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7744     break;
7745   }
7746 }
7747 
7748 /// \brief Add function candidates found via argument-dependent lookup
7749 /// to the set of overloading candidates.
7750 ///
7751 /// This routine performs argument-dependent name lookup based on the
7752 /// given function name (which may also be an operator name) and adds
7753 /// all of the overload candidates found by ADL to the overload
7754 /// candidate set (C++ [basic.lookup.argdep]).
7755 void
7756 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7757                                            bool Operator, SourceLocation Loc,
7758                                            ArrayRef<Expr *> Args,
7759                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
7760                                            OverloadCandidateSet& CandidateSet,
7761                                            bool PartialOverloading) {
7762   ADLResult Fns;
7763 
7764   // FIXME: This approach for uniquing ADL results (and removing
7765   // redundant candidates from the set) relies on pointer-equality,
7766   // which means we need to key off the canonical decl.  However,
7767   // always going back to the canonical decl might not get us the
7768   // right set of default arguments.  What default arguments are
7769   // we supposed to consider on ADL candidates, anyway?
7770 
7771   // FIXME: Pass in the explicit template arguments?
7772   ArgumentDependentLookup(Name, Operator, Loc, Args, Fns);
7773 
7774   // Erase all of the candidates we already knew about.
7775   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7776                                    CandEnd = CandidateSet.end();
7777        Cand != CandEnd; ++Cand)
7778     if (Cand->Function) {
7779       Fns.erase(Cand->Function);
7780       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7781         Fns.erase(FunTmpl);
7782     }
7783 
7784   // For each of the ADL candidates we found, add it to the overload
7785   // set.
7786   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7787     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7788     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7789       if (ExplicitTemplateArgs)
7790         continue;
7791 
7792       AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7793                            PartialOverloading);
7794     } else
7795       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7796                                    FoundDecl, ExplicitTemplateArgs,
7797                                    Args, CandidateSet);
7798   }
7799 }
7800 
7801 /// isBetterOverloadCandidate - Determines whether the first overload
7802 /// candidate is a better candidate than the second (C++ 13.3.3p1).
7803 bool
7804 isBetterOverloadCandidate(Sema &S,
7805                           const OverloadCandidate &Cand1,
7806                           const OverloadCandidate &Cand2,
7807                           SourceLocation Loc,
7808                           bool UserDefinedConversion) {
7809   // Define viable functions to be better candidates than non-viable
7810   // functions.
7811   if (!Cand2.Viable)
7812     return Cand1.Viable;
7813   else if (!Cand1.Viable)
7814     return false;
7815 
7816   // C++ [over.match.best]p1:
7817   //
7818   //   -- if F is a static member function, ICS1(F) is defined such
7819   //      that ICS1(F) is neither better nor worse than ICS1(G) for
7820   //      any function G, and, symmetrically, ICS1(G) is neither
7821   //      better nor worse than ICS1(F).
7822   unsigned StartArg = 0;
7823   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7824     StartArg = 1;
7825 
7826   // C++ [over.match.best]p1:
7827   //   A viable function F1 is defined to be a better function than another
7828   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7829   //   conversion sequence than ICSi(F2), and then...
7830   unsigned NumArgs = Cand1.NumConversions;
7831   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7832   bool HasBetterConversion = false;
7833   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7834     switch (CompareImplicitConversionSequences(S,
7835                                                Cand1.Conversions[ArgIdx],
7836                                                Cand2.Conversions[ArgIdx])) {
7837     case ImplicitConversionSequence::Better:
7838       // Cand1 has a better conversion sequence.
7839       HasBetterConversion = true;
7840       break;
7841 
7842     case ImplicitConversionSequence::Worse:
7843       // Cand1 can't be better than Cand2.
7844       return false;
7845 
7846     case ImplicitConversionSequence::Indistinguishable:
7847       // Do nothing.
7848       break;
7849     }
7850   }
7851 
7852   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7853   //       ICSj(F2), or, if not that,
7854   if (HasBetterConversion)
7855     return true;
7856 
7857   //     - F1 is a non-template function and F2 is a function template
7858   //       specialization, or, if not that,
7859   if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7860       Cand2.Function && Cand2.Function->getPrimaryTemplate())
7861     return true;
7862 
7863   //   -- F1 and F2 are function template specializations, and the function
7864   //      template for F1 is more specialized than the template for F2
7865   //      according to the partial ordering rules described in 14.5.5.2, or,
7866   //      if not that,
7867   if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7868       Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7869     if (FunctionTemplateDecl *BetterTemplate
7870           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7871                                          Cand2.Function->getPrimaryTemplate(),
7872                                          Loc,
7873                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7874                                                              : TPOC_Call,
7875                                          Cand1.ExplicitCallArguments))
7876       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7877   }
7878 
7879   //   -- the context is an initialization by user-defined conversion
7880   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7881   //      from the return type of F1 to the destination type (i.e.,
7882   //      the type of the entity being initialized) is a better
7883   //      conversion sequence than the standard conversion sequence
7884   //      from the return type of F2 to the destination type.
7885   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7886       isa<CXXConversionDecl>(Cand1.Function) &&
7887       isa<CXXConversionDecl>(Cand2.Function)) {
7888     // First check whether we prefer one of the conversion functions over the
7889     // other. This only distinguishes the results in non-standard, extension
7890     // cases such as the conversion from a lambda closure type to a function
7891     // pointer or block.
7892     ImplicitConversionSequence::CompareKind FuncResult
7893       = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7894     if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7895       return FuncResult;
7896 
7897     switch (CompareStandardConversionSequences(S,
7898                                                Cand1.FinalConversion,
7899                                                Cand2.FinalConversion)) {
7900     case ImplicitConversionSequence::Better:
7901       // Cand1 has a better conversion sequence.
7902       return true;
7903 
7904     case ImplicitConversionSequence::Worse:
7905       // Cand1 can't be better than Cand2.
7906       return false;
7907 
7908     case ImplicitConversionSequence::Indistinguishable:
7909       // Do nothing
7910       break;
7911     }
7912   }
7913 
7914   return false;
7915 }
7916 
7917 /// \brief Computes the best viable function (C++ 13.3.3)
7918 /// within an overload candidate set.
7919 ///
7920 /// \param Loc The location of the function name (or operator symbol) for
7921 /// which overload resolution occurs.
7922 ///
7923 /// \param Best If overload resolution was successful or found a deleted
7924 /// function, \p Best points to the candidate function found.
7925 ///
7926 /// \returns The result of overload resolution.
7927 OverloadingResult
7928 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
7929                                          iterator &Best,
7930                                          bool UserDefinedConversion) {
7931   // Find the best viable function.
7932   Best = end();
7933   for (iterator Cand = begin(); Cand != end(); ++Cand) {
7934     if (Cand->Viable)
7935       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
7936                                                      UserDefinedConversion))
7937         Best = Cand;
7938   }
7939 
7940   // If we didn't find any viable functions, abort.
7941   if (Best == end())
7942     return OR_No_Viable_Function;
7943 
7944   // Make sure that this function is better than every other viable
7945   // function. If not, we have an ambiguity.
7946   for (iterator Cand = begin(); Cand != end(); ++Cand) {
7947     if (Cand->Viable &&
7948         Cand != Best &&
7949         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
7950                                    UserDefinedConversion)) {
7951       Best = end();
7952       return OR_Ambiguous;
7953     }
7954   }
7955 
7956   // Best is the best viable function.
7957   if (Best->Function &&
7958       (Best->Function->isDeleted() ||
7959        S.isFunctionConsideredUnavailable(Best->Function)))
7960     return OR_Deleted;
7961 
7962   return OR_Success;
7963 }
7964 
7965 namespace {
7966 
7967 enum OverloadCandidateKind {
7968   oc_function,
7969   oc_method,
7970   oc_constructor,
7971   oc_function_template,
7972   oc_method_template,
7973   oc_constructor_template,
7974   oc_implicit_default_constructor,
7975   oc_implicit_copy_constructor,
7976   oc_implicit_move_constructor,
7977   oc_implicit_copy_assignment,
7978   oc_implicit_move_assignment,
7979   oc_implicit_inherited_constructor
7980 };
7981 
7982 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
7983                                                 FunctionDecl *Fn,
7984                                                 std::string &Description) {
7985   bool isTemplate = false;
7986 
7987   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
7988     isTemplate = true;
7989     Description = S.getTemplateArgumentBindingsText(
7990       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
7991   }
7992 
7993   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
7994     if (!Ctor->isImplicit())
7995       return isTemplate ? oc_constructor_template : oc_constructor;
7996 
7997     if (Ctor->getInheritedConstructor())
7998       return oc_implicit_inherited_constructor;
7999 
8000     if (Ctor->isDefaultConstructor())
8001       return oc_implicit_default_constructor;
8002 
8003     if (Ctor->isMoveConstructor())
8004       return oc_implicit_move_constructor;
8005 
8006     assert(Ctor->isCopyConstructor() &&
8007            "unexpected sort of implicit constructor");
8008     return oc_implicit_copy_constructor;
8009   }
8010 
8011   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
8012     // This actually gets spelled 'candidate function' for now, but
8013     // it doesn't hurt to split it out.
8014     if (!Meth->isImplicit())
8015       return isTemplate ? oc_method_template : oc_method;
8016 
8017     if (Meth->isMoveAssignmentOperator())
8018       return oc_implicit_move_assignment;
8019 
8020     if (Meth->isCopyAssignmentOperator())
8021       return oc_implicit_copy_assignment;
8022 
8023     assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
8024     return oc_method;
8025   }
8026 
8027   return isTemplate ? oc_function_template : oc_function;
8028 }
8029 
8030 void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) {
8031   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
8032   if (!Ctor) return;
8033 
8034   Ctor = Ctor->getInheritedConstructor();
8035   if (!Ctor) return;
8036 
8037   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
8038 }
8039 
8040 } // end anonymous namespace
8041 
8042 // Notes the location of an overload candidate.
8043 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
8044   std::string FnDesc;
8045   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
8046   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
8047                              << (unsigned) K << FnDesc;
8048   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
8049   Diag(Fn->getLocation(), PD);
8050   MaybeEmitInheritedConstructorNote(*this, Fn);
8051 }
8052 
8053 //Notes the location of all overload candidates designated through
8054 // OverloadedExpr
8055 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
8056   assert(OverloadedExpr->getType() == Context.OverloadTy);
8057 
8058   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
8059   OverloadExpr *OvlExpr = Ovl.Expression;
8060 
8061   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8062                             IEnd = OvlExpr->decls_end();
8063        I != IEnd; ++I) {
8064     if (FunctionTemplateDecl *FunTmpl =
8065                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
8066       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
8067     } else if (FunctionDecl *Fun
8068                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
8069       NoteOverloadCandidate(Fun, DestType);
8070     }
8071   }
8072 }
8073 
8074 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
8075 /// "lead" diagnostic; it will be given two arguments, the source and
8076 /// target types of the conversion.
8077 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8078                                  Sema &S,
8079                                  SourceLocation CaretLoc,
8080                                  const PartialDiagnostic &PDiag) const {
8081   S.Diag(CaretLoc, PDiag)
8082     << Ambiguous.getFromType() << Ambiguous.getToType();
8083   // FIXME: The note limiting machinery is borrowed from
8084   // OverloadCandidateSet::NoteCandidates; there's an opportunity for
8085   // refactoring here.
8086   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8087   unsigned CandsShown = 0;
8088   AmbiguousConversionSequence::const_iterator I, E;
8089   for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8090     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
8091       break;
8092     ++CandsShown;
8093     S.NoteOverloadCandidate(*I);
8094   }
8095   if (I != E)
8096     S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
8097 }
8098 
8099 namespace {
8100 
8101 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8102   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8103   assert(Conv.isBad());
8104   assert(Cand->Function && "for now, candidate must be a function");
8105   FunctionDecl *Fn = Cand->Function;
8106 
8107   // There's a conversion slot for the object argument if this is a
8108   // non-constructor method.  Note that 'I' corresponds the
8109   // conversion-slot index.
8110   bool isObjectArgument = false;
8111   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8112     if (I == 0)
8113       isObjectArgument = true;
8114     else
8115       I--;
8116   }
8117 
8118   std::string FnDesc;
8119   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8120 
8121   Expr *FromExpr = Conv.Bad.FromExpr;
8122   QualType FromTy = Conv.Bad.getFromType();
8123   QualType ToTy = Conv.Bad.getToType();
8124 
8125   if (FromTy == S.Context.OverloadTy) {
8126     assert(FromExpr && "overload set argument came from implicit argument?");
8127     Expr *E = FromExpr->IgnoreParens();
8128     if (isa<UnaryOperator>(E))
8129       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8130     DeclarationName Name = cast<OverloadExpr>(E)->getName();
8131 
8132     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8133       << (unsigned) FnKind << FnDesc
8134       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8135       << ToTy << Name << I+1;
8136     MaybeEmitInheritedConstructorNote(S, Fn);
8137     return;
8138   }
8139 
8140   // Do some hand-waving analysis to see if the non-viability is due
8141   // to a qualifier mismatch.
8142   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8143   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8144   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8145     CToTy = RT->getPointeeType();
8146   else {
8147     // TODO: detect and diagnose the full richness of const mismatches.
8148     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8149       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8150         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8151   }
8152 
8153   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8154       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8155     Qualifiers FromQs = CFromTy.getQualifiers();
8156     Qualifiers ToQs = CToTy.getQualifiers();
8157 
8158     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8159       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8160         << (unsigned) FnKind << FnDesc
8161         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8162         << FromTy
8163         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8164         << (unsigned) isObjectArgument << I+1;
8165       MaybeEmitInheritedConstructorNote(S, Fn);
8166       return;
8167     }
8168 
8169     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8170       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8171         << (unsigned) FnKind << FnDesc
8172         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8173         << FromTy
8174         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8175         << (unsigned) isObjectArgument << I+1;
8176       MaybeEmitInheritedConstructorNote(S, Fn);
8177       return;
8178     }
8179 
8180     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8181       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8182       << (unsigned) FnKind << FnDesc
8183       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8184       << FromTy
8185       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8186       << (unsigned) isObjectArgument << I+1;
8187       MaybeEmitInheritedConstructorNote(S, Fn);
8188       return;
8189     }
8190 
8191     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8192     assert(CVR && "unexpected qualifiers mismatch");
8193 
8194     if (isObjectArgument) {
8195       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8196         << (unsigned) FnKind << FnDesc
8197         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8198         << FromTy << (CVR - 1);
8199     } else {
8200       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8201         << (unsigned) FnKind << FnDesc
8202         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8203         << FromTy << (CVR - 1) << I+1;
8204     }
8205     MaybeEmitInheritedConstructorNote(S, Fn);
8206     return;
8207   }
8208 
8209   // Special diagnostic for failure to convert an initializer list, since
8210   // telling the user that it has type void is not useful.
8211   if (FromExpr && isa<InitListExpr>(FromExpr)) {
8212     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8213       << (unsigned) FnKind << FnDesc
8214       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8215       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8216     MaybeEmitInheritedConstructorNote(S, Fn);
8217     return;
8218   }
8219 
8220   // Diagnose references or pointers to incomplete types differently,
8221   // since it's far from impossible that the incompleteness triggered
8222   // the failure.
8223   QualType TempFromTy = FromTy.getNonReferenceType();
8224   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8225     TempFromTy = PTy->getPointeeType();
8226   if (TempFromTy->isIncompleteType()) {
8227     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8228       << (unsigned) FnKind << FnDesc
8229       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8230       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8231     MaybeEmitInheritedConstructorNote(S, Fn);
8232     return;
8233   }
8234 
8235   // Diagnose base -> derived pointer conversions.
8236   unsigned BaseToDerivedConversion = 0;
8237   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8238     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8239       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8240                                                FromPtrTy->getPointeeType()) &&
8241           !FromPtrTy->getPointeeType()->isIncompleteType() &&
8242           !ToPtrTy->getPointeeType()->isIncompleteType() &&
8243           S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8244                           FromPtrTy->getPointeeType()))
8245         BaseToDerivedConversion = 1;
8246     }
8247   } else if (const ObjCObjectPointerType *FromPtrTy
8248                                     = FromTy->getAs<ObjCObjectPointerType>()) {
8249     if (const ObjCObjectPointerType *ToPtrTy
8250                                         = ToTy->getAs<ObjCObjectPointerType>())
8251       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8252         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8253           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8254                                                 FromPtrTy->getPointeeType()) &&
8255               FromIface->isSuperClassOf(ToIface))
8256             BaseToDerivedConversion = 2;
8257   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8258     if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8259         !FromTy->isIncompleteType() &&
8260         !ToRefTy->getPointeeType()->isIncompleteType() &&
8261         S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8262       BaseToDerivedConversion = 3;
8263     } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8264                ToTy.getNonReferenceType().getCanonicalType() ==
8265                FromTy.getNonReferenceType().getCanonicalType()) {
8266       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8267         << (unsigned) FnKind << FnDesc
8268         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8269         << (unsigned) isObjectArgument << I + 1;
8270       MaybeEmitInheritedConstructorNote(S, Fn);
8271       return;
8272     }
8273   }
8274 
8275   if (BaseToDerivedConversion) {
8276     S.Diag(Fn->getLocation(),
8277            diag::note_ovl_candidate_bad_base_to_derived_conv)
8278       << (unsigned) FnKind << FnDesc
8279       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8280       << (BaseToDerivedConversion - 1)
8281       << FromTy << ToTy << I+1;
8282     MaybeEmitInheritedConstructorNote(S, Fn);
8283     return;
8284   }
8285 
8286   if (isa<ObjCObjectPointerType>(CFromTy) &&
8287       isa<PointerType>(CToTy)) {
8288       Qualifiers FromQs = CFromTy.getQualifiers();
8289       Qualifiers ToQs = CToTy.getQualifiers();
8290       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8291         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8292         << (unsigned) FnKind << FnDesc
8293         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8294         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8295         MaybeEmitInheritedConstructorNote(S, Fn);
8296         return;
8297       }
8298   }
8299 
8300   // Emit the generic diagnostic and, optionally, add the hints to it.
8301   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8302   FDiag << (unsigned) FnKind << FnDesc
8303     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8304     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8305     << (unsigned) (Cand->Fix.Kind);
8306 
8307   // If we can fix the conversion, suggest the FixIts.
8308   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8309        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8310     FDiag << *HI;
8311   S.Diag(Fn->getLocation(), FDiag);
8312 
8313   MaybeEmitInheritedConstructorNote(S, Fn);
8314 }
8315 
8316 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8317                            unsigned NumFormalArgs) {
8318   // TODO: treat calls to a missing default constructor as a special case
8319 
8320   FunctionDecl *Fn = Cand->Function;
8321   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8322 
8323   unsigned MinParams = Fn->getMinRequiredArguments();
8324 
8325   // With invalid overloaded operators, it's possible that we think we
8326   // have an arity mismatch when it fact it looks like we have the
8327   // right number of arguments, because only overloaded operators have
8328   // the weird behavior of overloading member and non-member functions.
8329   // Just don't report anything.
8330   if (Fn->isInvalidDecl() &&
8331       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8332     return;
8333 
8334   // at least / at most / exactly
8335   unsigned mode, modeCount;
8336   if (NumFormalArgs < MinParams) {
8337     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8338            (Cand->FailureKind == ovl_fail_bad_deduction &&
8339             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8340     if (MinParams != FnTy->getNumArgs() ||
8341         FnTy->isVariadic() || FnTy->isTemplateVariadic())
8342       mode = 0; // "at least"
8343     else
8344       mode = 2; // "exactly"
8345     modeCount = MinParams;
8346   } else {
8347     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8348            (Cand->FailureKind == ovl_fail_bad_deduction &&
8349             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8350     if (MinParams != FnTy->getNumArgs())
8351       mode = 1; // "at most"
8352     else
8353       mode = 2; // "exactly"
8354     modeCount = FnTy->getNumArgs();
8355   }
8356 
8357   std::string Description;
8358   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8359 
8360   if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8361     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8362       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8363       << Fn->getParamDecl(0) << NumFormalArgs;
8364   else
8365     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8366       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8367       << modeCount << NumFormalArgs;
8368   MaybeEmitInheritedConstructorNote(S, Fn);
8369 }
8370 
8371 /// Diagnose a failed template-argument deduction.
8372 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
8373                           unsigned NumArgs) {
8374   FunctionDecl *Fn = Cand->Function; // pattern
8375 
8376   TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
8377   NamedDecl *ParamD;
8378   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8379   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8380   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8381   switch (Cand->DeductionFailure.Result) {
8382   case Sema::TDK_Success:
8383     llvm_unreachable("TDK_success while diagnosing bad deduction");
8384 
8385   case Sema::TDK_Incomplete: {
8386     assert(ParamD && "no parameter found for incomplete deduction result");
8387     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
8388       << ParamD->getDeclName();
8389     MaybeEmitInheritedConstructorNote(S, Fn);
8390     return;
8391   }
8392 
8393   case Sema::TDK_Underqualified: {
8394     assert(ParamD && "no parameter found for bad qualifiers deduction result");
8395     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8396 
8397     QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType();
8398 
8399     // Param will have been canonicalized, but it should just be a
8400     // qualified version of ParamD, so move the qualifiers to that.
8401     QualifierCollector Qs;
8402     Qs.strip(Param);
8403     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8404     assert(S.Context.hasSameType(Param, NonCanonParam));
8405 
8406     // Arg has also been canonicalized, but there's nothing we can do
8407     // about that.  It also doesn't matter as much, because it won't
8408     // have any template parameters in it (because deduction isn't
8409     // done on dependent types).
8410     QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType();
8411 
8412     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified)
8413       << ParamD->getDeclName() << Arg << NonCanonParam;
8414     MaybeEmitInheritedConstructorNote(S, Fn);
8415     return;
8416   }
8417 
8418   case Sema::TDK_Inconsistent: {
8419     assert(ParamD && "no parameter found for inconsistent deduction result");
8420     int which = 0;
8421     if (isa<TemplateTypeParmDecl>(ParamD))
8422       which = 0;
8423     else if (isa<NonTypeTemplateParmDecl>(ParamD))
8424       which = 1;
8425     else {
8426       which = 2;
8427     }
8428 
8429     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
8430       << which << ParamD->getDeclName()
8431       << *Cand->DeductionFailure.getFirstArg()
8432       << *Cand->DeductionFailure.getSecondArg();
8433     MaybeEmitInheritedConstructorNote(S, Fn);
8434     return;
8435   }
8436 
8437   case Sema::TDK_InvalidExplicitArguments:
8438     assert(ParamD && "no parameter found for invalid explicit arguments");
8439     if (ParamD->getDeclName())
8440       S.Diag(Fn->getLocation(),
8441              diag::note_ovl_candidate_explicit_arg_mismatch_named)
8442         << ParamD->getDeclName();
8443     else {
8444       int index = 0;
8445       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8446         index = TTP->getIndex();
8447       else if (NonTypeTemplateParmDecl *NTTP
8448                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8449         index = NTTP->getIndex();
8450       else
8451         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8452       S.Diag(Fn->getLocation(),
8453              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8454         << (index + 1);
8455     }
8456     MaybeEmitInheritedConstructorNote(S, Fn);
8457     return;
8458 
8459   case Sema::TDK_TooManyArguments:
8460   case Sema::TDK_TooFewArguments:
8461     DiagnoseArityMismatch(S, Cand, NumArgs);
8462     return;
8463 
8464   case Sema::TDK_InstantiationDepth:
8465     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
8466     MaybeEmitInheritedConstructorNote(S, Fn);
8467     return;
8468 
8469   case Sema::TDK_SubstitutionFailure: {
8470     // Format the template argument list into the argument string.
8471     SmallString<128> TemplateArgString;
8472     if (TemplateArgumentList *Args =
8473           Cand->DeductionFailure.getTemplateArgumentList()) {
8474       TemplateArgString = " ";
8475       TemplateArgString += S.getTemplateArgumentBindingsText(
8476           Fn->getDescribedFunctionTemplate()->getTemplateParameters(), *Args);
8477     }
8478 
8479     // If this candidate was disabled by enable_if, say so.
8480     PartialDiagnosticAt *PDiag = Cand->DeductionFailure.getSFINAEDiagnostic();
8481     if (PDiag && PDiag->second.getDiagID() ==
8482           diag::err_typename_nested_not_found_enable_if) {
8483       // FIXME: Use the source range of the condition, and the fully-qualified
8484       //        name of the enable_if template. These are both present in PDiag.
8485       S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8486         << "'enable_if'" << TemplateArgString;
8487       return;
8488     }
8489 
8490     // Format the SFINAE diagnostic into the argument string.
8491     // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8492     //        formatted message in another diagnostic.
8493     SmallString<128> SFINAEArgString;
8494     SourceRange R;
8495     if (PDiag) {
8496       SFINAEArgString = ": ";
8497       R = SourceRange(PDiag->first, PDiag->first);
8498       PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8499     }
8500 
8501     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
8502       << TemplateArgString << SFINAEArgString << R;
8503     MaybeEmitInheritedConstructorNote(S, Fn);
8504     return;
8505   }
8506 
8507   case Sema::TDK_FailedOverloadResolution: {
8508     OverloadExpr::FindResult R =
8509         OverloadExpr::find(Cand->DeductionFailure.getExpr());
8510     S.Diag(Fn->getLocation(),
8511            diag::note_ovl_candidate_failed_overload_resolution)
8512       << R.Expression->getName();
8513     return;
8514   }
8515 
8516   case Sema::TDK_NonDeducedMismatch: {
8517     // FIXME: Provide a source location to indicate what we couldn't match.
8518     TemplateArgument FirstTA = *Cand->DeductionFailure.getFirstArg();
8519     TemplateArgument SecondTA = *Cand->DeductionFailure.getSecondArg();
8520     if (FirstTA.getKind() == TemplateArgument::Template &&
8521         SecondTA.getKind() == TemplateArgument::Template) {
8522       TemplateName FirstTN = FirstTA.getAsTemplate();
8523       TemplateName SecondTN = SecondTA.getAsTemplate();
8524       if (FirstTN.getKind() == TemplateName::Template &&
8525           SecondTN.getKind() == TemplateName::Template) {
8526         if (FirstTN.getAsTemplateDecl()->getName() ==
8527             SecondTN.getAsTemplateDecl()->getName()) {
8528           // FIXME: This fixes a bad diagnostic where both templates are named
8529           // the same.  This particular case is a bit difficult since:
8530           // 1) It is passed as a string to the diagnostic printer.
8531           // 2) The diagnostic printer only attempts to find a better
8532           //    name for types, not decls.
8533           // Ideally, this should folded into the diagnostic printer.
8534           S.Diag(Fn->getLocation(),
8535                  diag::note_ovl_candidate_non_deduced_mismatch_qualified)
8536               << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
8537           return;
8538         }
8539       }
8540     }
8541     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch)
8542       << FirstTA << SecondTA;
8543     return;
8544   }
8545   // TODO: diagnose these individually, then kill off
8546   // note_ovl_candidate_bad_deduction, which is uselessly vague.
8547   case Sema::TDK_MiscellaneousDeductionFailure:
8548     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
8549     MaybeEmitInheritedConstructorNote(S, Fn);
8550     return;
8551   }
8552 }
8553 
8554 /// CUDA: diagnose an invalid call across targets.
8555 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8556   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8557   FunctionDecl *Callee = Cand->Function;
8558 
8559   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8560                            CalleeTarget = S.IdentifyCUDATarget(Callee);
8561 
8562   std::string FnDesc;
8563   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8564 
8565   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8566       << (unsigned) FnKind << CalleeTarget << CallerTarget;
8567 }
8568 
8569 /// Generates a 'note' diagnostic for an overload candidate.  We've
8570 /// already generated a primary error at the call site.
8571 ///
8572 /// It really does need to be a single diagnostic with its caret
8573 /// pointed at the candidate declaration.  Yes, this creates some
8574 /// major challenges of technical writing.  Yes, this makes pointing
8575 /// out problems with specific arguments quite awkward.  It's still
8576 /// better than generating twenty screens of text for every failed
8577 /// overload.
8578 ///
8579 /// It would be great to be able to express per-candidate problems
8580 /// more richly for those diagnostic clients that cared, but we'd
8581 /// still have to be just as careful with the default diagnostics.
8582 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8583                            unsigned NumArgs) {
8584   FunctionDecl *Fn = Cand->Function;
8585 
8586   // Note deleted candidates, but only if they're viable.
8587   if (Cand->Viable && (Fn->isDeleted() ||
8588       S.isFunctionConsideredUnavailable(Fn))) {
8589     std::string FnDesc;
8590     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8591 
8592     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8593       << FnKind << FnDesc
8594       << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8595     MaybeEmitInheritedConstructorNote(S, Fn);
8596     return;
8597   }
8598 
8599   // We don't really have anything else to say about viable candidates.
8600   if (Cand->Viable) {
8601     S.NoteOverloadCandidate(Fn);
8602     return;
8603   }
8604 
8605   switch (Cand->FailureKind) {
8606   case ovl_fail_too_many_arguments:
8607   case ovl_fail_too_few_arguments:
8608     return DiagnoseArityMismatch(S, Cand, NumArgs);
8609 
8610   case ovl_fail_bad_deduction:
8611     return DiagnoseBadDeduction(S, Cand, NumArgs);
8612 
8613   case ovl_fail_trivial_conversion:
8614   case ovl_fail_bad_final_conversion:
8615   case ovl_fail_final_conversion_not_exact:
8616     return S.NoteOverloadCandidate(Fn);
8617 
8618   case ovl_fail_bad_conversion: {
8619     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8620     for (unsigned N = Cand->NumConversions; I != N; ++I)
8621       if (Cand->Conversions[I].isBad())
8622         return DiagnoseBadConversion(S, Cand, I);
8623 
8624     // FIXME: this currently happens when we're called from SemaInit
8625     // when user-conversion overload fails.  Figure out how to handle
8626     // those conditions and diagnose them well.
8627     return S.NoteOverloadCandidate(Fn);
8628   }
8629 
8630   case ovl_fail_bad_target:
8631     return DiagnoseBadTarget(S, Cand);
8632   }
8633 }
8634 
8635 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8636   // Desugar the type of the surrogate down to a function type,
8637   // retaining as many typedefs as possible while still showing
8638   // the function type (and, therefore, its parameter types).
8639   QualType FnType = Cand->Surrogate->getConversionType();
8640   bool isLValueReference = false;
8641   bool isRValueReference = false;
8642   bool isPointer = false;
8643   if (const LValueReferenceType *FnTypeRef =
8644         FnType->getAs<LValueReferenceType>()) {
8645     FnType = FnTypeRef->getPointeeType();
8646     isLValueReference = true;
8647   } else if (const RValueReferenceType *FnTypeRef =
8648                FnType->getAs<RValueReferenceType>()) {
8649     FnType = FnTypeRef->getPointeeType();
8650     isRValueReference = true;
8651   }
8652   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8653     FnType = FnTypePtr->getPointeeType();
8654     isPointer = true;
8655   }
8656   // Desugar down to a function type.
8657   FnType = QualType(FnType->getAs<FunctionType>(), 0);
8658   // Reconstruct the pointer/reference as appropriate.
8659   if (isPointer) FnType = S.Context.getPointerType(FnType);
8660   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8661   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8662 
8663   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8664     << FnType;
8665   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8666 }
8667 
8668 void NoteBuiltinOperatorCandidate(Sema &S,
8669                                   StringRef Opc,
8670                                   SourceLocation OpLoc,
8671                                   OverloadCandidate *Cand) {
8672   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8673   std::string TypeStr("operator");
8674   TypeStr += Opc;
8675   TypeStr += "(";
8676   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8677   if (Cand->NumConversions == 1) {
8678     TypeStr += ")";
8679     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8680   } else {
8681     TypeStr += ", ";
8682     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8683     TypeStr += ")";
8684     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8685   }
8686 }
8687 
8688 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8689                                   OverloadCandidate *Cand) {
8690   unsigned NoOperands = Cand->NumConversions;
8691   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8692     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8693     if (ICS.isBad()) break; // all meaningless after first invalid
8694     if (!ICS.isAmbiguous()) continue;
8695 
8696     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8697                               S.PDiag(diag::note_ambiguous_type_conversion));
8698   }
8699 }
8700 
8701 SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8702   if (Cand->Function)
8703     return Cand->Function->getLocation();
8704   if (Cand->IsSurrogate)
8705     return Cand->Surrogate->getLocation();
8706   return SourceLocation();
8707 }
8708 
8709 static unsigned
8710 RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) {
8711   switch ((Sema::TemplateDeductionResult)DFI.Result) {
8712   case Sema::TDK_Success:
8713     llvm_unreachable("TDK_success while diagnosing bad deduction");
8714 
8715   case Sema::TDK_Invalid:
8716   case Sema::TDK_Incomplete:
8717     return 1;
8718 
8719   case Sema::TDK_Underqualified:
8720   case Sema::TDK_Inconsistent:
8721     return 2;
8722 
8723   case Sema::TDK_SubstitutionFailure:
8724   case Sema::TDK_NonDeducedMismatch:
8725   case Sema::TDK_MiscellaneousDeductionFailure:
8726     return 3;
8727 
8728   case Sema::TDK_InstantiationDepth:
8729   case Sema::TDK_FailedOverloadResolution:
8730     return 4;
8731 
8732   case Sema::TDK_InvalidExplicitArguments:
8733     return 5;
8734 
8735   case Sema::TDK_TooManyArguments:
8736   case Sema::TDK_TooFewArguments:
8737     return 6;
8738   }
8739   llvm_unreachable("Unhandled deduction result");
8740 }
8741 
8742 struct CompareOverloadCandidatesForDisplay {
8743   Sema &S;
8744   CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8745 
8746   bool operator()(const OverloadCandidate *L,
8747                   const OverloadCandidate *R) {
8748     // Fast-path this check.
8749     if (L == R) return false;
8750 
8751     // Order first by viability.
8752     if (L->Viable) {
8753       if (!R->Viable) return true;
8754 
8755       // TODO: introduce a tri-valued comparison for overload
8756       // candidates.  Would be more worthwhile if we had a sort
8757       // that could exploit it.
8758       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8759       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8760     } else if (R->Viable)
8761       return false;
8762 
8763     assert(L->Viable == R->Viable);
8764 
8765     // Criteria by which we can sort non-viable candidates:
8766     if (!L->Viable) {
8767       // 1. Arity mismatches come after other candidates.
8768       if (L->FailureKind == ovl_fail_too_many_arguments ||
8769           L->FailureKind == ovl_fail_too_few_arguments)
8770         return false;
8771       if (R->FailureKind == ovl_fail_too_many_arguments ||
8772           R->FailureKind == ovl_fail_too_few_arguments)
8773         return true;
8774 
8775       // 2. Bad conversions come first and are ordered by the number
8776       // of bad conversions and quality of good conversions.
8777       if (L->FailureKind == ovl_fail_bad_conversion) {
8778         if (R->FailureKind != ovl_fail_bad_conversion)
8779           return true;
8780 
8781         // The conversion that can be fixed with a smaller number of changes,
8782         // comes first.
8783         unsigned numLFixes = L->Fix.NumConversionsFixed;
8784         unsigned numRFixes = R->Fix.NumConversionsFixed;
8785         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8786         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8787         if (numLFixes != numRFixes) {
8788           if (numLFixes < numRFixes)
8789             return true;
8790           else
8791             return false;
8792         }
8793 
8794         // If there's any ordering between the defined conversions...
8795         // FIXME: this might not be transitive.
8796         assert(L->NumConversions == R->NumConversions);
8797 
8798         int leftBetter = 0;
8799         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8800         for (unsigned E = L->NumConversions; I != E; ++I) {
8801           switch (CompareImplicitConversionSequences(S,
8802                                                      L->Conversions[I],
8803                                                      R->Conversions[I])) {
8804           case ImplicitConversionSequence::Better:
8805             leftBetter++;
8806             break;
8807 
8808           case ImplicitConversionSequence::Worse:
8809             leftBetter--;
8810             break;
8811 
8812           case ImplicitConversionSequence::Indistinguishable:
8813             break;
8814           }
8815         }
8816         if (leftBetter > 0) return true;
8817         if (leftBetter < 0) return false;
8818 
8819       } else if (R->FailureKind == ovl_fail_bad_conversion)
8820         return false;
8821 
8822       if (L->FailureKind == ovl_fail_bad_deduction) {
8823         if (R->FailureKind != ovl_fail_bad_deduction)
8824           return true;
8825 
8826         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8827           return RankDeductionFailure(L->DeductionFailure)
8828                < RankDeductionFailure(R->DeductionFailure);
8829       } else if (R->FailureKind == ovl_fail_bad_deduction)
8830         return false;
8831 
8832       // TODO: others?
8833     }
8834 
8835     // Sort everything else by location.
8836     SourceLocation LLoc = GetLocationForCandidate(L);
8837     SourceLocation RLoc = GetLocationForCandidate(R);
8838 
8839     // Put candidates without locations (e.g. builtins) at the end.
8840     if (LLoc.isInvalid()) return false;
8841     if (RLoc.isInvalid()) return true;
8842 
8843     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8844   }
8845 };
8846 
8847 /// CompleteNonViableCandidate - Normally, overload resolution only
8848 /// computes up to the first. Produces the FixIt set if possible.
8849 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8850                                 ArrayRef<Expr *> Args) {
8851   assert(!Cand->Viable);
8852 
8853   // Don't do anything on failures other than bad conversion.
8854   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8855 
8856   // We only want the FixIts if all the arguments can be corrected.
8857   bool Unfixable = false;
8858   // Use a implicit copy initialization to check conversion fixes.
8859   Cand->Fix.setConversionChecker(TryCopyInitialization);
8860 
8861   // Skip forward to the first bad conversion.
8862   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
8863   unsigned ConvCount = Cand->NumConversions;
8864   while (true) {
8865     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
8866     ConvIdx++;
8867     if (Cand->Conversions[ConvIdx - 1].isBad()) {
8868       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
8869       break;
8870     }
8871   }
8872 
8873   if (ConvIdx == ConvCount)
8874     return;
8875 
8876   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
8877          "remaining conversion is initialized?");
8878 
8879   // FIXME: this should probably be preserved from the overload
8880   // operation somehow.
8881   bool SuppressUserConversions = false;
8882 
8883   const FunctionProtoType* Proto;
8884   unsigned ArgIdx = ConvIdx;
8885 
8886   if (Cand->IsSurrogate) {
8887     QualType ConvType
8888       = Cand->Surrogate->getConversionType().getNonReferenceType();
8889     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
8890       ConvType = ConvPtrType->getPointeeType();
8891     Proto = ConvType->getAs<FunctionProtoType>();
8892     ArgIdx--;
8893   } else if (Cand->Function) {
8894     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
8895     if (isa<CXXMethodDecl>(Cand->Function) &&
8896         !isa<CXXConstructorDecl>(Cand->Function))
8897       ArgIdx--;
8898   } else {
8899     // Builtin binary operator with a bad first conversion.
8900     assert(ConvCount <= 3);
8901     for (; ConvIdx != ConvCount; ++ConvIdx)
8902       Cand->Conversions[ConvIdx]
8903         = TryCopyInitialization(S, Args[ConvIdx],
8904                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
8905                                 SuppressUserConversions,
8906                                 /*InOverloadResolution*/ true,
8907                                 /*AllowObjCWritebackConversion=*/
8908                                   S.getLangOpts().ObjCAutoRefCount);
8909     return;
8910   }
8911 
8912   // Fill in the rest of the conversions.
8913   unsigned NumArgsInProto = Proto->getNumArgs();
8914   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
8915     if (ArgIdx < NumArgsInProto) {
8916       Cand->Conversions[ConvIdx]
8917         = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
8918                                 SuppressUserConversions,
8919                                 /*InOverloadResolution=*/true,
8920                                 /*AllowObjCWritebackConversion=*/
8921                                   S.getLangOpts().ObjCAutoRefCount);
8922       // Store the FixIt in the candidate if it exists.
8923       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
8924         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
8925     }
8926     else
8927       Cand->Conversions[ConvIdx].setEllipsis();
8928   }
8929 }
8930 
8931 } // end anonymous namespace
8932 
8933 /// PrintOverloadCandidates - When overload resolution fails, prints
8934 /// diagnostic messages containing the candidates in the candidate
8935 /// set.
8936 void OverloadCandidateSet::NoteCandidates(Sema &S,
8937                                           OverloadCandidateDisplayKind OCD,
8938                                           ArrayRef<Expr *> Args,
8939                                           StringRef Opc,
8940                                           SourceLocation OpLoc) {
8941   // Sort the candidates by viability and position.  Sorting directly would
8942   // be prohibitive, so we make a set of pointers and sort those.
8943   SmallVector<OverloadCandidate*, 32> Cands;
8944   if (OCD == OCD_AllCandidates) Cands.reserve(size());
8945   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
8946     if (Cand->Viable)
8947       Cands.push_back(Cand);
8948     else if (OCD == OCD_AllCandidates) {
8949       CompleteNonViableCandidate(S, Cand, Args);
8950       if (Cand->Function || Cand->IsSurrogate)
8951         Cands.push_back(Cand);
8952       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
8953       // want to list every possible builtin candidate.
8954     }
8955   }
8956 
8957   std::sort(Cands.begin(), Cands.end(),
8958             CompareOverloadCandidatesForDisplay(S));
8959 
8960   bool ReportedAmbiguousConversions = false;
8961 
8962   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
8963   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8964   unsigned CandsShown = 0;
8965   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
8966     OverloadCandidate *Cand = *I;
8967 
8968     // Set an arbitrary limit on the number of candidate functions we'll spam
8969     // the user with.  FIXME: This limit should depend on details of the
8970     // candidate list.
8971     if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
8972       break;
8973     }
8974     ++CandsShown;
8975 
8976     if (Cand->Function)
8977       NoteFunctionCandidate(S, Cand, Args.size());
8978     else if (Cand->IsSurrogate)
8979       NoteSurrogateCandidate(S, Cand);
8980     else {
8981       assert(Cand->Viable &&
8982              "Non-viable built-in candidates are not added to Cands.");
8983       // Generally we only see ambiguities including viable builtin
8984       // operators if overload resolution got screwed up by an
8985       // ambiguous user-defined conversion.
8986       //
8987       // FIXME: It's quite possible for different conversions to see
8988       // different ambiguities, though.
8989       if (!ReportedAmbiguousConversions) {
8990         NoteAmbiguousUserConversions(S, OpLoc, Cand);
8991         ReportedAmbiguousConversions = true;
8992       }
8993 
8994       // If this is a viable builtin, print it.
8995       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
8996     }
8997   }
8998 
8999   if (I != E)
9000     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
9001 }
9002 
9003 // [PossiblyAFunctionType]  -->   [Return]
9004 // NonFunctionType --> NonFunctionType
9005 // R (A) --> R(A)
9006 // R (*)(A) --> R (A)
9007 // R (&)(A) --> R (A)
9008 // R (S::*)(A) --> R (A)
9009 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
9010   QualType Ret = PossiblyAFunctionType;
9011   if (const PointerType *ToTypePtr =
9012     PossiblyAFunctionType->getAs<PointerType>())
9013     Ret = ToTypePtr->getPointeeType();
9014   else if (const ReferenceType *ToTypeRef =
9015     PossiblyAFunctionType->getAs<ReferenceType>())
9016     Ret = ToTypeRef->getPointeeType();
9017   else if (const MemberPointerType *MemTypePtr =
9018     PossiblyAFunctionType->getAs<MemberPointerType>())
9019     Ret = MemTypePtr->getPointeeType();
9020   Ret =
9021     Context.getCanonicalType(Ret).getUnqualifiedType();
9022   return Ret;
9023 }
9024 
9025 // A helper class to help with address of function resolution
9026 // - allows us to avoid passing around all those ugly parameters
9027 class AddressOfFunctionResolver
9028 {
9029   Sema& S;
9030   Expr* SourceExpr;
9031   const QualType& TargetType;
9032   QualType TargetFunctionType; // Extracted function type from target type
9033 
9034   bool Complain;
9035   //DeclAccessPair& ResultFunctionAccessPair;
9036   ASTContext& Context;
9037 
9038   bool TargetTypeIsNonStaticMemberFunction;
9039   bool FoundNonTemplateFunction;
9040 
9041   OverloadExpr::FindResult OvlExprInfo;
9042   OverloadExpr *OvlExpr;
9043   TemplateArgumentListInfo OvlExplicitTemplateArgs;
9044   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
9045 
9046 public:
9047   AddressOfFunctionResolver(Sema &S, Expr* SourceExpr,
9048                             const QualType& TargetType, bool Complain)
9049     : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
9050       Complain(Complain), Context(S.getASTContext()),
9051       TargetTypeIsNonStaticMemberFunction(
9052                                     !!TargetType->getAs<MemberPointerType>()),
9053       FoundNonTemplateFunction(false),
9054       OvlExprInfo(OverloadExpr::find(SourceExpr)),
9055       OvlExpr(OvlExprInfo.Expression)
9056   {
9057     ExtractUnqualifiedFunctionTypeFromTargetType();
9058 
9059     if (!TargetFunctionType->isFunctionType()) {
9060       if (OvlExpr->hasExplicitTemplateArgs()) {
9061         DeclAccessPair dap;
9062         if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization(
9063                                             OvlExpr, false, &dap) ) {
9064 
9065           if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9066             if (!Method->isStatic()) {
9067               // If the target type is a non-function type and the function
9068               // found is a non-static member function, pretend as if that was
9069               // the target, it's the only possible type to end up with.
9070               TargetTypeIsNonStaticMemberFunction = true;
9071 
9072               // And skip adding the function if its not in the proper form.
9073               // We'll diagnose this due to an empty set of functions.
9074               if (!OvlExprInfo.HasFormOfMemberPointer)
9075                 return;
9076             }
9077           }
9078 
9079           Matches.push_back(std::make_pair(dap,Fn));
9080         }
9081       }
9082       return;
9083     }
9084 
9085     if (OvlExpr->hasExplicitTemplateArgs())
9086       OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
9087 
9088     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
9089       // C++ [over.over]p4:
9090       //   If more than one function is selected, [...]
9091       if (Matches.size() > 1) {
9092         if (FoundNonTemplateFunction)
9093           EliminateAllTemplateMatches();
9094         else
9095           EliminateAllExceptMostSpecializedTemplate();
9096       }
9097     }
9098   }
9099 
9100 private:
9101   bool isTargetTypeAFunction() const {
9102     return TargetFunctionType->isFunctionType();
9103   }
9104 
9105   // [ToType]     [Return]
9106 
9107   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
9108   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
9109   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
9110   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
9111     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
9112   }
9113 
9114   // return true if any matching specializations were found
9115   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
9116                                    const DeclAccessPair& CurAccessFunPair) {
9117     if (CXXMethodDecl *Method
9118               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
9119       // Skip non-static function templates when converting to pointer, and
9120       // static when converting to member pointer.
9121       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9122         return false;
9123     }
9124     else if (TargetTypeIsNonStaticMemberFunction)
9125       return false;
9126 
9127     // C++ [over.over]p2:
9128     //   If the name is a function template, template argument deduction is
9129     //   done (14.8.2.2), and if the argument deduction succeeds, the
9130     //   resulting template argument list is used to generate a single
9131     //   function template specialization, which is added to the set of
9132     //   overloaded functions considered.
9133     FunctionDecl *Specialization = 0;
9134     TemplateDeductionInfo Info(OvlExpr->getNameLoc());
9135     if (Sema::TemplateDeductionResult Result
9136           = S.DeduceTemplateArguments(FunctionTemplate,
9137                                       &OvlExplicitTemplateArgs,
9138                                       TargetFunctionType, Specialization,
9139                                       Info, /*InOverloadResolution=*/true)) {
9140       // FIXME: make a note of the failed deduction for diagnostics.
9141       (void)Result;
9142       return false;
9143     }
9144 
9145     // Template argument deduction ensures that we have an exact match or
9146     // compatible pointer-to-function arguments that would be adjusted by ICS.
9147     // This function template specicalization works.
9148     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
9149     assert(S.isSameOrCompatibleFunctionType(
9150               Context.getCanonicalType(Specialization->getType()),
9151               Context.getCanonicalType(TargetFunctionType)));
9152     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9153     return true;
9154   }
9155 
9156   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9157                                       const DeclAccessPair& CurAccessFunPair) {
9158     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9159       // Skip non-static functions when converting to pointer, and static
9160       // when converting to member pointer.
9161       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9162         return false;
9163     }
9164     else if (TargetTypeIsNonStaticMemberFunction)
9165       return false;
9166 
9167     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9168       if (S.getLangOpts().CUDA)
9169         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9170           if (S.CheckCUDATarget(Caller, FunDecl))
9171             return false;
9172 
9173       QualType ResultTy;
9174       if (Context.hasSameUnqualifiedType(TargetFunctionType,
9175                                          FunDecl->getType()) ||
9176           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9177                                  ResultTy)) {
9178         Matches.push_back(std::make_pair(CurAccessFunPair,
9179           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9180         FoundNonTemplateFunction = true;
9181         return true;
9182       }
9183     }
9184 
9185     return false;
9186   }
9187 
9188   bool FindAllFunctionsThatMatchTargetTypeExactly() {
9189     bool Ret = false;
9190 
9191     // If the overload expression doesn't have the form of a pointer to
9192     // member, don't try to convert it to a pointer-to-member type.
9193     if (IsInvalidFormOfPointerToMemberFunction())
9194       return false;
9195 
9196     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9197                                E = OvlExpr->decls_end();
9198          I != E; ++I) {
9199       // Look through any using declarations to find the underlying function.
9200       NamedDecl *Fn = (*I)->getUnderlyingDecl();
9201 
9202       // C++ [over.over]p3:
9203       //   Non-member functions and static member functions match
9204       //   targets of type "pointer-to-function" or "reference-to-function."
9205       //   Nonstatic member functions match targets of
9206       //   type "pointer-to-member-function."
9207       // Note that according to DR 247, the containing class does not matter.
9208       if (FunctionTemplateDecl *FunctionTemplate
9209                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
9210         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9211           Ret = true;
9212       }
9213       // If we have explicit template arguments supplied, skip non-templates.
9214       else if (!OvlExpr->hasExplicitTemplateArgs() &&
9215                AddMatchingNonTemplateFunction(Fn, I.getPair()))
9216         Ret = true;
9217     }
9218     assert(Ret || Matches.empty());
9219     return Ret;
9220   }
9221 
9222   void EliminateAllExceptMostSpecializedTemplate() {
9223     //   [...] and any given function template specialization F1 is
9224     //   eliminated if the set contains a second function template
9225     //   specialization whose function template is more specialized
9226     //   than the function template of F1 according to the partial
9227     //   ordering rules of 14.5.5.2.
9228 
9229     // The algorithm specified above is quadratic. We instead use a
9230     // two-pass algorithm (similar to the one used to identify the
9231     // best viable function in an overload set) that identifies the
9232     // best function template (if it exists).
9233 
9234     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9235     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9236       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9237 
9238     UnresolvedSetIterator Result =
9239       S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
9240                            TPOC_Other, 0, SourceExpr->getLocStart(),
9241                            S.PDiag(),
9242                            S.PDiag(diag::err_addr_ovl_ambiguous)
9243                              << Matches[0].second->getDeclName(),
9244                            S.PDiag(diag::note_ovl_candidate)
9245                              << (unsigned) oc_function_template,
9246                            Complain, TargetFunctionType);
9247 
9248     if (Result != MatchesCopy.end()) {
9249       // Make it the first and only element
9250       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9251       Matches[0].second = cast<FunctionDecl>(*Result);
9252       Matches.resize(1);
9253     }
9254   }
9255 
9256   void EliminateAllTemplateMatches() {
9257     //   [...] any function template specializations in the set are
9258     //   eliminated if the set also contains a non-template function, [...]
9259     for (unsigned I = 0, N = Matches.size(); I != N; ) {
9260       if (Matches[I].second->getPrimaryTemplate() == 0)
9261         ++I;
9262       else {
9263         Matches[I] = Matches[--N];
9264         Matches.set_size(N);
9265       }
9266     }
9267   }
9268 
9269 public:
9270   void ComplainNoMatchesFound() const {
9271     assert(Matches.empty());
9272     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9273         << OvlExpr->getName() << TargetFunctionType
9274         << OvlExpr->getSourceRange();
9275     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9276   }
9277 
9278   bool IsInvalidFormOfPointerToMemberFunction() const {
9279     return TargetTypeIsNonStaticMemberFunction &&
9280       !OvlExprInfo.HasFormOfMemberPointer;
9281   }
9282 
9283   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9284       // TODO: Should we condition this on whether any functions might
9285       // have matched, or is it more appropriate to do that in callers?
9286       // TODO: a fixit wouldn't hurt.
9287       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9288         << TargetType << OvlExpr->getSourceRange();
9289   }
9290 
9291   void ComplainOfInvalidConversion() const {
9292     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9293       << OvlExpr->getName() << TargetType;
9294   }
9295 
9296   void ComplainMultipleMatchesFound() const {
9297     assert(Matches.size() > 1);
9298     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9299       << OvlExpr->getName()
9300       << OvlExpr->getSourceRange();
9301     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9302   }
9303 
9304   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9305 
9306   int getNumMatches() const { return Matches.size(); }
9307 
9308   FunctionDecl* getMatchingFunctionDecl() const {
9309     if (Matches.size() != 1) return 0;
9310     return Matches[0].second;
9311   }
9312 
9313   const DeclAccessPair* getMatchingFunctionAccessPair() const {
9314     if (Matches.size() != 1) return 0;
9315     return &Matches[0].first;
9316   }
9317 };
9318 
9319 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9320 /// an overloaded function (C++ [over.over]), where @p From is an
9321 /// expression with overloaded function type and @p ToType is the type
9322 /// we're trying to resolve to. For example:
9323 ///
9324 /// @code
9325 /// int f(double);
9326 /// int f(int);
9327 ///
9328 /// int (*pfd)(double) = f; // selects f(double)
9329 /// @endcode
9330 ///
9331 /// This routine returns the resulting FunctionDecl if it could be
9332 /// resolved, and NULL otherwise. When @p Complain is true, this
9333 /// routine will emit diagnostics if there is an error.
9334 FunctionDecl *
9335 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9336                                          QualType TargetType,
9337                                          bool Complain,
9338                                          DeclAccessPair &FoundResult,
9339                                          bool *pHadMultipleCandidates) {
9340   assert(AddressOfExpr->getType() == Context.OverloadTy);
9341 
9342   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9343                                      Complain);
9344   int NumMatches = Resolver.getNumMatches();
9345   FunctionDecl* Fn = 0;
9346   if (NumMatches == 0 && Complain) {
9347     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9348       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9349     else
9350       Resolver.ComplainNoMatchesFound();
9351   }
9352   else if (NumMatches > 1 && Complain)
9353     Resolver.ComplainMultipleMatchesFound();
9354   else if (NumMatches == 1) {
9355     Fn = Resolver.getMatchingFunctionDecl();
9356     assert(Fn);
9357     FoundResult = *Resolver.getMatchingFunctionAccessPair();
9358     if (Complain)
9359       CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9360   }
9361 
9362   if (pHadMultipleCandidates)
9363     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9364   return Fn;
9365 }
9366 
9367 /// \brief Given an expression that refers to an overloaded function, try to
9368 /// resolve that overloaded function expression down to a single function.
9369 ///
9370 /// This routine can only resolve template-ids that refer to a single function
9371 /// template, where that template-id refers to a single template whose template
9372 /// arguments are either provided by the template-id or have defaults,
9373 /// as described in C++0x [temp.arg.explicit]p3.
9374 FunctionDecl *
9375 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9376                                                   bool Complain,
9377                                                   DeclAccessPair *FoundResult) {
9378   // C++ [over.over]p1:
9379   //   [...] [Note: any redundant set of parentheses surrounding the
9380   //   overloaded function name is ignored (5.1). ]
9381   // C++ [over.over]p1:
9382   //   [...] The overloaded function name can be preceded by the &
9383   //   operator.
9384 
9385   // If we didn't actually find any template-ids, we're done.
9386   if (!ovl->hasExplicitTemplateArgs())
9387     return 0;
9388 
9389   TemplateArgumentListInfo ExplicitTemplateArgs;
9390   ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9391 
9392   // Look through all of the overloaded functions, searching for one
9393   // whose type matches exactly.
9394   FunctionDecl *Matched = 0;
9395   for (UnresolvedSetIterator I = ovl->decls_begin(),
9396          E = ovl->decls_end(); I != E; ++I) {
9397     // C++0x [temp.arg.explicit]p3:
9398     //   [...] In contexts where deduction is done and fails, or in contexts
9399     //   where deduction is not done, if a template argument list is
9400     //   specified and it, along with any default template arguments,
9401     //   identifies a single function template specialization, then the
9402     //   template-id is an lvalue for the function template specialization.
9403     FunctionTemplateDecl *FunctionTemplate
9404       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9405 
9406     // C++ [over.over]p2:
9407     //   If the name is a function template, template argument deduction is
9408     //   done (14.8.2.2), and if the argument deduction succeeds, the
9409     //   resulting template argument list is used to generate a single
9410     //   function template specialization, which is added to the set of
9411     //   overloaded functions considered.
9412     FunctionDecl *Specialization = 0;
9413     TemplateDeductionInfo Info(ovl->getNameLoc());
9414     if (TemplateDeductionResult Result
9415           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9416                                     Specialization, Info,
9417                                     /*InOverloadResolution=*/true)) {
9418       // FIXME: make a note of the failed deduction for diagnostics.
9419       (void)Result;
9420       continue;
9421     }
9422 
9423     assert(Specialization && "no specialization and no error?");
9424 
9425     // Multiple matches; we can't resolve to a single declaration.
9426     if (Matched) {
9427       if (Complain) {
9428         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9429           << ovl->getName();
9430         NoteAllOverloadCandidates(ovl);
9431       }
9432       return 0;
9433     }
9434 
9435     Matched = Specialization;
9436     if (FoundResult) *FoundResult = I.getPair();
9437   }
9438 
9439   return Matched;
9440 }
9441 
9442 
9443 
9444 
9445 // Resolve and fix an overloaded expression that can be resolved
9446 // because it identifies a single function template specialization.
9447 //
9448 // Last three arguments should only be supplied if Complain = true
9449 //
9450 // Return true if it was logically possible to so resolve the
9451 // expression, regardless of whether or not it succeeded.  Always
9452 // returns true if 'complain' is set.
9453 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9454                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
9455                    bool complain, const SourceRange& OpRangeForComplaining,
9456                                            QualType DestTypeForComplaining,
9457                                             unsigned DiagIDForComplaining) {
9458   assert(SrcExpr.get()->getType() == Context.OverloadTy);
9459 
9460   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9461 
9462   DeclAccessPair found;
9463   ExprResult SingleFunctionExpression;
9464   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9465                            ovl.Expression, /*complain*/ false, &found)) {
9466     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9467       SrcExpr = ExprError();
9468       return true;
9469     }
9470 
9471     // It is only correct to resolve to an instance method if we're
9472     // resolving a form that's permitted to be a pointer to member.
9473     // Otherwise we'll end up making a bound member expression, which
9474     // is illegal in all the contexts we resolve like this.
9475     if (!ovl.HasFormOfMemberPointer &&
9476         isa<CXXMethodDecl>(fn) &&
9477         cast<CXXMethodDecl>(fn)->isInstance()) {
9478       if (!complain) return false;
9479 
9480       Diag(ovl.Expression->getExprLoc(),
9481            diag::err_bound_member_function)
9482         << 0 << ovl.Expression->getSourceRange();
9483 
9484       // TODO: I believe we only end up here if there's a mix of
9485       // static and non-static candidates (otherwise the expression
9486       // would have 'bound member' type, not 'overload' type).
9487       // Ideally we would note which candidate was chosen and why
9488       // the static candidates were rejected.
9489       SrcExpr = ExprError();
9490       return true;
9491     }
9492 
9493     // Fix the expression to refer to 'fn'.
9494     SingleFunctionExpression =
9495       Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9496 
9497     // If desired, do function-to-pointer decay.
9498     if (doFunctionPointerConverion) {
9499       SingleFunctionExpression =
9500         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9501       if (SingleFunctionExpression.isInvalid()) {
9502         SrcExpr = ExprError();
9503         return true;
9504       }
9505     }
9506   }
9507 
9508   if (!SingleFunctionExpression.isUsable()) {
9509     if (complain) {
9510       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9511         << ovl.Expression->getName()
9512         << DestTypeForComplaining
9513         << OpRangeForComplaining
9514         << ovl.Expression->getQualifierLoc().getSourceRange();
9515       NoteAllOverloadCandidates(SrcExpr.get());
9516 
9517       SrcExpr = ExprError();
9518       return true;
9519     }
9520 
9521     return false;
9522   }
9523 
9524   SrcExpr = SingleFunctionExpression;
9525   return true;
9526 }
9527 
9528 /// \brief Add a single candidate to the overload set.
9529 static void AddOverloadedCallCandidate(Sema &S,
9530                                        DeclAccessPair FoundDecl,
9531                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
9532                                        ArrayRef<Expr *> Args,
9533                                        OverloadCandidateSet &CandidateSet,
9534                                        bool PartialOverloading,
9535                                        bool KnownValid) {
9536   NamedDecl *Callee = FoundDecl.getDecl();
9537   if (isa<UsingShadowDecl>(Callee))
9538     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9539 
9540   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9541     if (ExplicitTemplateArgs) {
9542       assert(!KnownValid && "Explicit template arguments?");
9543       return;
9544     }
9545     S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9546                            PartialOverloading);
9547     return;
9548   }
9549 
9550   if (FunctionTemplateDecl *FuncTemplate
9551       = dyn_cast<FunctionTemplateDecl>(Callee)) {
9552     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9553                                    ExplicitTemplateArgs, Args, CandidateSet);
9554     return;
9555   }
9556 
9557   assert(!KnownValid && "unhandled case in overloaded call candidate");
9558 }
9559 
9560 /// \brief Add the overload candidates named by callee and/or found by argument
9561 /// dependent lookup to the given overload set.
9562 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9563                                        ArrayRef<Expr *> Args,
9564                                        OverloadCandidateSet &CandidateSet,
9565                                        bool PartialOverloading) {
9566 
9567 #ifndef NDEBUG
9568   // Verify that ArgumentDependentLookup is consistent with the rules
9569   // in C++0x [basic.lookup.argdep]p3:
9570   //
9571   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9572   //   and let Y be the lookup set produced by argument dependent
9573   //   lookup (defined as follows). If X contains
9574   //
9575   //     -- a declaration of a class member, or
9576   //
9577   //     -- a block-scope function declaration that is not a
9578   //        using-declaration, or
9579   //
9580   //     -- a declaration that is neither a function or a function
9581   //        template
9582   //
9583   //   then Y is empty.
9584 
9585   if (ULE->requiresADL()) {
9586     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9587            E = ULE->decls_end(); I != E; ++I) {
9588       assert(!(*I)->getDeclContext()->isRecord());
9589       assert(isa<UsingShadowDecl>(*I) ||
9590              !(*I)->getDeclContext()->isFunctionOrMethod());
9591       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9592     }
9593   }
9594 #endif
9595 
9596   // It would be nice to avoid this copy.
9597   TemplateArgumentListInfo TABuffer;
9598   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9599   if (ULE->hasExplicitTemplateArgs()) {
9600     ULE->copyTemplateArgumentsInto(TABuffer);
9601     ExplicitTemplateArgs = &TABuffer;
9602   }
9603 
9604   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9605          E = ULE->decls_end(); I != E; ++I)
9606     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9607                                CandidateSet, PartialOverloading,
9608                                /*KnownValid*/ true);
9609 
9610   if (ULE->requiresADL())
9611     AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9612                                          ULE->getExprLoc(),
9613                                          Args, ExplicitTemplateArgs,
9614                                          CandidateSet, PartialOverloading);
9615 }
9616 
9617 /// Attempt to recover from an ill-formed use of a non-dependent name in a
9618 /// template, where the non-dependent name was declared after the template
9619 /// was defined. This is common in code written for a compilers which do not
9620 /// correctly implement two-stage name lookup.
9621 ///
9622 /// Returns true if a viable candidate was found and a diagnostic was issued.
9623 static bool
9624 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9625                        const CXXScopeSpec &SS, LookupResult &R,
9626                        TemplateArgumentListInfo *ExplicitTemplateArgs,
9627                        ArrayRef<Expr *> Args) {
9628   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9629     return false;
9630 
9631   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9632     if (DC->isTransparentContext())
9633       continue;
9634 
9635     SemaRef.LookupQualifiedName(R, DC);
9636 
9637     if (!R.empty()) {
9638       R.suppressDiagnostics();
9639 
9640       if (isa<CXXRecordDecl>(DC)) {
9641         // Don't diagnose names we find in classes; we get much better
9642         // diagnostics for these from DiagnoseEmptyLookup.
9643         R.clear();
9644         return false;
9645       }
9646 
9647       OverloadCandidateSet Candidates(FnLoc);
9648       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9649         AddOverloadedCallCandidate(SemaRef, I.getPair(),
9650                                    ExplicitTemplateArgs, Args,
9651                                    Candidates, false, /*KnownValid*/ false);
9652 
9653       OverloadCandidateSet::iterator Best;
9654       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9655         // No viable functions. Don't bother the user with notes for functions
9656         // which don't work and shouldn't be found anyway.
9657         R.clear();
9658         return false;
9659       }
9660 
9661       // Find the namespaces where ADL would have looked, and suggest
9662       // declaring the function there instead.
9663       Sema::AssociatedNamespaceSet AssociatedNamespaces;
9664       Sema::AssociatedClassSet AssociatedClasses;
9665       SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9666                                                  AssociatedNamespaces,
9667                                                  AssociatedClasses);
9668       Sema::AssociatedNamespaceSet SuggestedNamespaces;
9669       DeclContext *Std = SemaRef.getStdNamespace();
9670       for (Sema::AssociatedNamespaceSet::iterator
9671              it = AssociatedNamespaces.begin(),
9672              end = AssociatedNamespaces.end(); it != end; ++it) {
9673         // Never suggest declaring a function within namespace 'std'.
9674         if (Std && Std->Encloses(*it))
9675           continue;
9676 
9677         // Never suggest declaring a function within a namespace with a reserved
9678         // name, like __gnu_cxx.
9679         NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
9680         if (NS &&
9681             NS->getQualifiedNameAsString().find("__") != std::string::npos)
9682           continue;
9683 
9684         SuggestedNamespaces.insert(*it);
9685       }
9686 
9687       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9688         << R.getLookupName();
9689       if (SuggestedNamespaces.empty()) {
9690         SemaRef.Diag(Best->Function->getLocation(),
9691                      diag::note_not_found_by_two_phase_lookup)
9692           << R.getLookupName() << 0;
9693       } else if (SuggestedNamespaces.size() == 1) {
9694         SemaRef.Diag(Best->Function->getLocation(),
9695                      diag::note_not_found_by_two_phase_lookup)
9696           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9697       } else {
9698         // FIXME: It would be useful to list the associated namespaces here,
9699         // but the diagnostics infrastructure doesn't provide a way to produce
9700         // a localized representation of a list of items.
9701         SemaRef.Diag(Best->Function->getLocation(),
9702                      diag::note_not_found_by_two_phase_lookup)
9703           << R.getLookupName() << 2;
9704       }
9705 
9706       // Try to recover by calling this function.
9707       return true;
9708     }
9709 
9710     R.clear();
9711   }
9712 
9713   return false;
9714 }
9715 
9716 /// Attempt to recover from ill-formed use of a non-dependent operator in a
9717 /// template, where the non-dependent operator was declared after the template
9718 /// was defined.
9719 ///
9720 /// Returns true if a viable candidate was found and a diagnostic was issued.
9721 static bool
9722 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
9723                                SourceLocation OpLoc,
9724                                ArrayRef<Expr *> Args) {
9725   DeclarationName OpName =
9726     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
9727   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
9728   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
9729                                 /*ExplicitTemplateArgs=*/0, Args);
9730 }
9731 
9732 namespace {
9733 // Callback to limit the allowed keywords and to only accept typo corrections
9734 // that are keywords or whose decls refer to functions (or template functions)
9735 // that accept the given number of arguments.
9736 class RecoveryCallCCC : public CorrectionCandidateCallback {
9737  public:
9738   RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs)
9739       : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) {
9740     WantTypeSpecifiers = SemaRef.getLangOpts().CPlusPlus;
9741     WantRemainingKeywords = false;
9742   }
9743 
9744   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9745     if (!candidate.getCorrectionDecl())
9746       return candidate.isKeyword();
9747 
9748     for (TypoCorrection::const_decl_iterator DI = candidate.begin(),
9749            DIEnd = candidate.end(); DI != DIEnd; ++DI) {
9750       FunctionDecl *FD = 0;
9751       NamedDecl *ND = (*DI)->getUnderlyingDecl();
9752       if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9753         FD = FTD->getTemplatedDecl();
9754       if (!HasExplicitTemplateArgs && !FD) {
9755         if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) {
9756           // If the Decl is neither a function nor a template function,
9757           // determine if it is a pointer or reference to a function. If so,
9758           // check against the number of arguments expected for the pointee.
9759           QualType ValType = cast<ValueDecl>(ND)->getType();
9760           if (ValType->isAnyPointerType() || ValType->isReferenceType())
9761             ValType = ValType->getPointeeType();
9762           if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
9763             if (FPT->getNumArgs() == NumArgs)
9764               return true;
9765         }
9766       }
9767       if (FD && FD->getNumParams() >= NumArgs &&
9768           FD->getMinRequiredArguments() <= NumArgs)
9769         return true;
9770     }
9771     return false;
9772   }
9773 
9774  private:
9775   unsigned NumArgs;
9776   bool HasExplicitTemplateArgs;
9777 };
9778 
9779 // Callback that effectively disabled typo correction
9780 class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
9781  public:
9782   NoTypoCorrectionCCC() {
9783     WantTypeSpecifiers = false;
9784     WantExpressionKeywords = false;
9785     WantCXXNamedCasts = false;
9786     WantRemainingKeywords = false;
9787   }
9788 
9789   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9790     return false;
9791   }
9792 };
9793 
9794 class BuildRecoveryCallExprRAII {
9795   Sema &SemaRef;
9796 public:
9797   BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
9798     assert(SemaRef.IsBuildingRecoveryCallExpr == false);
9799     SemaRef.IsBuildingRecoveryCallExpr = true;
9800   }
9801 
9802   ~BuildRecoveryCallExprRAII() {
9803     SemaRef.IsBuildingRecoveryCallExpr = false;
9804   }
9805 };
9806 
9807 }
9808 
9809 /// Attempts to recover from a call where no functions were found.
9810 ///
9811 /// Returns true if new candidates were found.
9812 static ExprResult
9813 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9814                       UnresolvedLookupExpr *ULE,
9815                       SourceLocation LParenLoc,
9816                       llvm::MutableArrayRef<Expr *> Args,
9817                       SourceLocation RParenLoc,
9818                       bool EmptyLookup, bool AllowTypoCorrection) {
9819   // Do not try to recover if it is already building a recovery call.
9820   // This stops infinite loops for template instantiations like
9821   //
9822   // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
9823   // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
9824   //
9825   if (SemaRef.IsBuildingRecoveryCallExpr)
9826     return ExprError();
9827   BuildRecoveryCallExprRAII RCE(SemaRef);
9828 
9829   CXXScopeSpec SS;
9830   SS.Adopt(ULE->getQualifierLoc());
9831   SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
9832 
9833   TemplateArgumentListInfo TABuffer;
9834   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9835   if (ULE->hasExplicitTemplateArgs()) {
9836     ULE->copyTemplateArgumentsInto(TABuffer);
9837     ExplicitTemplateArgs = &TABuffer;
9838   }
9839 
9840   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
9841                  Sema::LookupOrdinaryName);
9842   RecoveryCallCCC Validator(SemaRef, Args.size(), ExplicitTemplateArgs != 0);
9843   NoTypoCorrectionCCC RejectAll;
9844   CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
9845       (CorrectionCandidateCallback*)&Validator :
9846       (CorrectionCandidateCallback*)&RejectAll;
9847   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
9848                               ExplicitTemplateArgs, Args) &&
9849       (!EmptyLookup ||
9850        SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
9851                                    ExplicitTemplateArgs, Args)))
9852     return ExprError();
9853 
9854   assert(!R.empty() && "lookup results empty despite recovery");
9855 
9856   // Build an implicit member call if appropriate.  Just drop the
9857   // casts and such from the call, we don't really care.
9858   ExprResult NewFn = ExprError();
9859   if ((*R.begin())->isCXXClassMember())
9860     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
9861                                                     R, ExplicitTemplateArgs);
9862   else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
9863     NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
9864                                         ExplicitTemplateArgs);
9865   else
9866     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
9867 
9868   if (NewFn.isInvalid())
9869     return ExprError();
9870 
9871   // This shouldn't cause an infinite loop because we're giving it
9872   // an expression with viable lookup results, which should never
9873   // end up here.
9874   return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
9875                                MultiExprArg(Args.data(), Args.size()),
9876                                RParenLoc);
9877 }
9878 
9879 /// \brief Constructs and populates an OverloadedCandidateSet from
9880 /// the given function.
9881 /// \returns true when an the ExprResult output parameter has been set.
9882 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
9883                                   UnresolvedLookupExpr *ULE,
9884                                   Expr **Args, unsigned NumArgs,
9885                                   SourceLocation RParenLoc,
9886                                   OverloadCandidateSet *CandidateSet,
9887                                   ExprResult *Result) {
9888 #ifndef NDEBUG
9889   if (ULE->requiresADL()) {
9890     // To do ADL, we must have found an unqualified name.
9891     assert(!ULE->getQualifier() && "qualified name with ADL");
9892 
9893     // We don't perform ADL for implicit declarations of builtins.
9894     // Verify that this was correctly set up.
9895     FunctionDecl *F;
9896     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
9897         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
9898         F->getBuiltinID() && F->isImplicit())
9899       llvm_unreachable("performing ADL for builtin");
9900 
9901     // We don't perform ADL in C.
9902     assert(getLangOpts().CPlusPlus && "ADL enabled in C");
9903   }
9904 #endif
9905 
9906   UnbridgedCastsSet UnbridgedCasts;
9907   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) {
9908     *Result = ExprError();
9909     return true;
9910   }
9911 
9912   // Add the functions denoted by the callee to the set of candidate
9913   // functions, including those from argument-dependent lookup.
9914   AddOverloadedCallCandidates(ULE, llvm::makeArrayRef(Args, NumArgs),
9915                               *CandidateSet);
9916 
9917   // If we found nothing, try to recover.
9918   // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
9919   // out if it fails.
9920   if (CandidateSet->empty()) {
9921     // In Microsoft mode, if we are inside a template class member function then
9922     // create a type dependent CallExpr. The goal is to postpone name lookup
9923     // to instantiation time to be able to search into type dependent base
9924     // classes.
9925     if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
9926         (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
9927       CallExpr *CE = new (Context) CallExpr(Context, Fn,
9928                                             llvm::makeArrayRef(Args, NumArgs),
9929                                             Context.DependentTy, VK_RValue,
9930                                             RParenLoc);
9931       CE->setTypeDependent(true);
9932       *Result = Owned(CE);
9933       return true;
9934     }
9935     return false;
9936   }
9937 
9938   UnbridgedCasts.restore();
9939   return false;
9940 }
9941 
9942 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
9943 /// the completed call expression. If overload resolution fails, emits
9944 /// diagnostics and returns ExprError()
9945 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9946                                            UnresolvedLookupExpr *ULE,
9947                                            SourceLocation LParenLoc,
9948                                            Expr **Args, unsigned NumArgs,
9949                                            SourceLocation RParenLoc,
9950                                            Expr *ExecConfig,
9951                                            OverloadCandidateSet *CandidateSet,
9952                                            OverloadCandidateSet::iterator *Best,
9953                                            OverloadingResult OverloadResult,
9954                                            bool AllowTypoCorrection) {
9955   if (CandidateSet->empty())
9956     return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9957                                  llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9958                                  RParenLoc, /*EmptyLookup=*/true,
9959                                  AllowTypoCorrection);
9960 
9961   switch (OverloadResult) {
9962   case OR_Success: {
9963     FunctionDecl *FDecl = (*Best)->Function;
9964     SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
9965     SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc());
9966     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
9967     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9968                                          RParenLoc, ExecConfig);
9969   }
9970 
9971   case OR_No_Viable_Function: {
9972     // Try to recover by looking for viable functions which the user might
9973     // have meant to call.
9974     ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9975                                   llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9976                                                 RParenLoc,
9977                                                 /*EmptyLookup=*/false,
9978                                                 AllowTypoCorrection);
9979     if (!Recovery.isInvalid())
9980       return Recovery;
9981 
9982     SemaRef.Diag(Fn->getLocStart(),
9983          diag::err_ovl_no_viable_function_in_call)
9984       << ULE->getName() << Fn->getSourceRange();
9985     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
9986                                  llvm::makeArrayRef(Args, NumArgs));
9987     break;
9988   }
9989 
9990   case OR_Ambiguous:
9991     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
9992       << ULE->getName() << Fn->getSourceRange();
9993     CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates,
9994                                  llvm::makeArrayRef(Args, NumArgs));
9995     break;
9996 
9997   case OR_Deleted: {
9998     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
9999       << (*Best)->Function->isDeleted()
10000       << ULE->getName()
10001       << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
10002       << Fn->getSourceRange();
10003     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
10004                                  llvm::makeArrayRef(Args, NumArgs));
10005 
10006     // We emitted an error for the unvailable/deleted function call but keep
10007     // the call in the AST.
10008     FunctionDecl *FDecl = (*Best)->Function;
10009     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10010     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
10011                                  RParenLoc, ExecConfig);
10012   }
10013   }
10014 
10015   // Overload resolution failed.
10016   return ExprError();
10017 }
10018 
10019 /// BuildOverloadedCallExpr - Given the call expression that calls Fn
10020 /// (which eventually refers to the declaration Func) and the call
10021 /// arguments Args/NumArgs, attempt to resolve the function call down
10022 /// to a specific function. If overload resolution succeeds, returns
10023 /// the call expression produced by overload resolution.
10024 /// Otherwise, emits diagnostics and returns ExprError.
10025 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
10026                                          UnresolvedLookupExpr *ULE,
10027                                          SourceLocation LParenLoc,
10028                                          Expr **Args, unsigned NumArgs,
10029                                          SourceLocation RParenLoc,
10030                                          Expr *ExecConfig,
10031                                          bool AllowTypoCorrection) {
10032   OverloadCandidateSet CandidateSet(Fn->getExprLoc());
10033   ExprResult result;
10034 
10035   if (buildOverloadedCallSet(S, Fn, ULE, Args, NumArgs, LParenLoc,
10036                              &CandidateSet, &result))
10037     return result;
10038 
10039   OverloadCandidateSet::iterator Best;
10040   OverloadingResult OverloadResult =
10041       CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
10042 
10043   return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs,
10044                                   RParenLoc, ExecConfig, &CandidateSet,
10045                                   &Best, OverloadResult,
10046                                   AllowTypoCorrection);
10047 }
10048 
10049 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
10050   return Functions.size() > 1 ||
10051     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
10052 }
10053 
10054 /// \brief Create a unary operation that may resolve to an overloaded
10055 /// operator.
10056 ///
10057 /// \param OpLoc The location of the operator itself (e.g., '*').
10058 ///
10059 /// \param OpcIn The UnaryOperator::Opcode that describes this
10060 /// operator.
10061 ///
10062 /// \param Fns The set of non-member functions that will be
10063 /// considered by overload resolution. The caller needs to build this
10064 /// set based on the context using, e.g.,
10065 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10066 /// set should not contain any member functions; those will be added
10067 /// by CreateOverloadedUnaryOp().
10068 ///
10069 /// \param Input The input argument.
10070 ExprResult
10071 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
10072                               const UnresolvedSetImpl &Fns,
10073                               Expr *Input) {
10074   UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
10075 
10076   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
10077   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
10078   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10079   // TODO: provide better source location info.
10080   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10081 
10082   if (checkPlaceholderForOverload(*this, Input))
10083     return ExprError();
10084 
10085   Expr *Args[2] = { Input, 0 };
10086   unsigned NumArgs = 1;
10087 
10088   // For post-increment and post-decrement, add the implicit '0' as
10089   // the second argument, so that we know this is a post-increment or
10090   // post-decrement.
10091   if (Opc == UO_PostInc || Opc == UO_PostDec) {
10092     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
10093     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
10094                                      SourceLocation());
10095     NumArgs = 2;
10096   }
10097 
10098   if (Input->isTypeDependent()) {
10099     if (Fns.empty())
10100       return Owned(new (Context) UnaryOperator(Input,
10101                                                Opc,
10102                                                Context.DependentTy,
10103                                                VK_RValue, OK_Ordinary,
10104                                                OpLoc));
10105 
10106     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10107     UnresolvedLookupExpr *Fn
10108       = UnresolvedLookupExpr::Create(Context, NamingClass,
10109                                      NestedNameSpecifierLoc(), OpNameInfo,
10110                                      /*ADL*/ true, IsOverloaded(Fns),
10111                                      Fns.begin(), Fns.end());
10112     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
10113                                               llvm::makeArrayRef(Args, NumArgs),
10114                                                    Context.DependentTy,
10115                                                    VK_RValue,
10116                                                    OpLoc, false));
10117   }
10118 
10119   // Build an empty overload set.
10120   OverloadCandidateSet CandidateSet(OpLoc);
10121 
10122   // Add the candidates from the given function set.
10123   AddFunctionCandidates(Fns, llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10124                         false);
10125 
10126   // Add operator candidates that are member functions.
10127   AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
10128 
10129   // Add candidates from ADL.
10130   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10131                                        OpLoc, llvm::makeArrayRef(Args, NumArgs),
10132                                        /*ExplicitTemplateArgs*/ 0,
10133                                        CandidateSet);
10134 
10135   // Add builtin operator candidates.
10136   AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
10137 
10138   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10139 
10140   // Perform overload resolution.
10141   OverloadCandidateSet::iterator Best;
10142   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10143   case OR_Success: {
10144     // We found a built-in operator or an overloaded operator.
10145     FunctionDecl *FnDecl = Best->Function;
10146 
10147     if (FnDecl) {
10148       // We matched an overloaded operator. Build a call to that
10149       // operator.
10150 
10151       // Convert the arguments.
10152       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10153         CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
10154 
10155         ExprResult InputRes =
10156           PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
10157                                               Best->FoundDecl, Method);
10158         if (InputRes.isInvalid())
10159           return ExprError();
10160         Input = InputRes.take();
10161       } else {
10162         // Convert the arguments.
10163         ExprResult InputInit
10164           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10165                                                       Context,
10166                                                       FnDecl->getParamDecl(0)),
10167                                       SourceLocation(),
10168                                       Input);
10169         if (InputInit.isInvalid())
10170           return ExprError();
10171         Input = InputInit.take();
10172       }
10173 
10174       // Determine the result type.
10175       QualType ResultTy = FnDecl->getResultType();
10176       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10177       ResultTy = ResultTy.getNonLValueExprType(Context);
10178 
10179       // Build the actual expression node.
10180       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
10181                                                 HadMultipleCandidates, OpLoc);
10182       if (FnExpr.isInvalid())
10183         return ExprError();
10184 
10185       Args[0] = Input;
10186       CallExpr *TheCall =
10187         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10188                                           llvm::makeArrayRef(Args, NumArgs),
10189                                           ResultTy, VK, OpLoc, false);
10190 
10191       if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10192                               FnDecl))
10193         return ExprError();
10194 
10195       return MaybeBindToTemporary(TheCall);
10196     } else {
10197       // We matched a built-in operator. Convert the arguments, then
10198       // break out so that we will build the appropriate built-in
10199       // operator node.
10200       ExprResult InputRes =
10201         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10202                                   Best->Conversions[0], AA_Passing);
10203       if (InputRes.isInvalid())
10204         return ExprError();
10205       Input = InputRes.take();
10206       break;
10207     }
10208   }
10209 
10210   case OR_No_Viable_Function:
10211     // This is an erroneous use of an operator which can be overloaded by
10212     // a non-member function. Check for non-member operators which were
10213     // defined too late to be candidates.
10214     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc,
10215                                        llvm::makeArrayRef(Args, NumArgs)))
10216       // FIXME: Recover by calling the found function.
10217       return ExprError();
10218 
10219     // No viable function; fall through to handling this as a
10220     // built-in operator, which will produce an error message for us.
10221     break;
10222 
10223   case OR_Ambiguous:
10224     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10225         << UnaryOperator::getOpcodeStr(Opc)
10226         << Input->getType()
10227         << Input->getSourceRange();
10228     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10229                                 llvm::makeArrayRef(Args, NumArgs),
10230                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10231     return ExprError();
10232 
10233   case OR_Deleted:
10234     Diag(OpLoc, diag::err_ovl_deleted_oper)
10235       << Best->Function->isDeleted()
10236       << UnaryOperator::getOpcodeStr(Opc)
10237       << getDeletedOrUnavailableSuffix(Best->Function)
10238       << Input->getSourceRange();
10239     CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10240                                 llvm::makeArrayRef(Args, NumArgs),
10241                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10242     return ExprError();
10243   }
10244 
10245   // Either we found no viable overloaded operator or we matched a
10246   // built-in operator. In either case, fall through to trying to
10247   // build a built-in operation.
10248   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10249 }
10250 
10251 /// \brief Create a binary operation that may resolve to an overloaded
10252 /// operator.
10253 ///
10254 /// \param OpLoc The location of the operator itself (e.g., '+').
10255 ///
10256 /// \param OpcIn The BinaryOperator::Opcode that describes this
10257 /// operator.
10258 ///
10259 /// \param Fns The set of non-member functions that will be
10260 /// considered by overload resolution. The caller needs to build this
10261 /// set based on the context using, e.g.,
10262 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10263 /// set should not contain any member functions; those will be added
10264 /// by CreateOverloadedBinOp().
10265 ///
10266 /// \param LHS Left-hand argument.
10267 /// \param RHS Right-hand argument.
10268 ExprResult
10269 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10270                             unsigned OpcIn,
10271                             const UnresolvedSetImpl &Fns,
10272                             Expr *LHS, Expr *RHS) {
10273   Expr *Args[2] = { LHS, RHS };
10274   LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10275 
10276   BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10277   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10278   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10279 
10280   // If either side is type-dependent, create an appropriate dependent
10281   // expression.
10282   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10283     if (Fns.empty()) {
10284       // If there are no functions to store, just build a dependent
10285       // BinaryOperator or CompoundAssignment.
10286       if (Opc <= BO_Assign || Opc > BO_OrAssign)
10287         return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10288                                                   Context.DependentTy,
10289                                                   VK_RValue, OK_Ordinary,
10290                                                   OpLoc,
10291                                                   FPFeatures.fp_contract));
10292 
10293       return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10294                                                         Context.DependentTy,
10295                                                         VK_LValue,
10296                                                         OK_Ordinary,
10297                                                         Context.DependentTy,
10298                                                         Context.DependentTy,
10299                                                         OpLoc,
10300                                                         FPFeatures.fp_contract));
10301     }
10302 
10303     // FIXME: save results of ADL from here?
10304     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10305     // TODO: provide better source location info in DNLoc component.
10306     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10307     UnresolvedLookupExpr *Fn
10308       = UnresolvedLookupExpr::Create(Context, NamingClass,
10309                                      NestedNameSpecifierLoc(), OpNameInfo,
10310                                      /*ADL*/ true, IsOverloaded(Fns),
10311                                      Fns.begin(), Fns.end());
10312     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
10313                                                 Context.DependentTy, VK_RValue,
10314                                                 OpLoc, FPFeatures.fp_contract));
10315   }
10316 
10317   // Always do placeholder-like conversions on the RHS.
10318   if (checkPlaceholderForOverload(*this, Args[1]))
10319     return ExprError();
10320 
10321   // Do placeholder-like conversion on the LHS; note that we should
10322   // not get here with a PseudoObject LHS.
10323   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10324   if (checkPlaceholderForOverload(*this, Args[0]))
10325     return ExprError();
10326 
10327   // If this is the assignment operator, we only perform overload resolution
10328   // if the left-hand side is a class or enumeration type. This is actually
10329   // a hack. The standard requires that we do overload resolution between the
10330   // various built-in candidates, but as DR507 points out, this can lead to
10331   // problems. So we do it this way, which pretty much follows what GCC does.
10332   // Note that we go the traditional code path for compound assignment forms.
10333   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10334     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10335 
10336   // If this is the .* operator, which is not overloadable, just
10337   // create a built-in binary operator.
10338   if (Opc == BO_PtrMemD)
10339     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10340 
10341   // Build an empty overload set.
10342   OverloadCandidateSet CandidateSet(OpLoc);
10343 
10344   // Add the candidates from the given function set.
10345   AddFunctionCandidates(Fns, Args, CandidateSet, false);
10346 
10347   // Add operator candidates that are member functions.
10348   AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10349 
10350   // Add candidates from ADL.
10351   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10352                                        OpLoc, Args,
10353                                        /*ExplicitTemplateArgs*/ 0,
10354                                        CandidateSet);
10355 
10356   // Add builtin operator candidates.
10357   AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10358 
10359   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10360 
10361   // Perform overload resolution.
10362   OverloadCandidateSet::iterator Best;
10363   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10364     case OR_Success: {
10365       // We found a built-in operator or an overloaded operator.
10366       FunctionDecl *FnDecl = Best->Function;
10367 
10368       if (FnDecl) {
10369         // We matched an overloaded operator. Build a call to that
10370         // operator.
10371 
10372         // Convert the arguments.
10373         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10374           // Best->Access is only meaningful for class members.
10375           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10376 
10377           ExprResult Arg1 =
10378             PerformCopyInitialization(
10379               InitializedEntity::InitializeParameter(Context,
10380                                                      FnDecl->getParamDecl(0)),
10381               SourceLocation(), Owned(Args[1]));
10382           if (Arg1.isInvalid())
10383             return ExprError();
10384 
10385           ExprResult Arg0 =
10386             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10387                                                 Best->FoundDecl, Method);
10388           if (Arg0.isInvalid())
10389             return ExprError();
10390           Args[0] = Arg0.takeAs<Expr>();
10391           Args[1] = RHS = Arg1.takeAs<Expr>();
10392         } else {
10393           // Convert the arguments.
10394           ExprResult Arg0 = PerformCopyInitialization(
10395             InitializedEntity::InitializeParameter(Context,
10396                                                    FnDecl->getParamDecl(0)),
10397             SourceLocation(), Owned(Args[0]));
10398           if (Arg0.isInvalid())
10399             return ExprError();
10400 
10401           ExprResult Arg1 =
10402             PerformCopyInitialization(
10403               InitializedEntity::InitializeParameter(Context,
10404                                                      FnDecl->getParamDecl(1)),
10405               SourceLocation(), Owned(Args[1]));
10406           if (Arg1.isInvalid())
10407             return ExprError();
10408           Args[0] = LHS = Arg0.takeAs<Expr>();
10409           Args[1] = RHS = Arg1.takeAs<Expr>();
10410         }
10411 
10412         // Determine the result type.
10413         QualType ResultTy = FnDecl->getResultType();
10414         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10415         ResultTy = ResultTy.getNonLValueExprType(Context);
10416 
10417         // Build the actual expression node.
10418         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10419                                                   Best->FoundDecl,
10420                                                   HadMultipleCandidates, OpLoc);
10421         if (FnExpr.isInvalid())
10422           return ExprError();
10423 
10424         CXXOperatorCallExpr *TheCall =
10425           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10426                                             Args, ResultTy, VK, OpLoc,
10427                                             FPFeatures.fp_contract);
10428 
10429         if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10430                                 FnDecl))
10431           return ExprError();
10432 
10433         ArrayRef<const Expr *> ArgsArray(Args, 2);
10434         // Cut off the implicit 'this'.
10435         if (isa<CXXMethodDecl>(FnDecl))
10436           ArgsArray = ArgsArray.slice(1);
10437         checkCall(FnDecl, ArgsArray, 0, isa<CXXMethodDecl>(FnDecl), OpLoc,
10438                   TheCall->getSourceRange(), VariadicDoesNotApply);
10439 
10440         return MaybeBindToTemporary(TheCall);
10441       } else {
10442         // We matched a built-in operator. Convert the arguments, then
10443         // break out so that we will build the appropriate built-in
10444         // operator node.
10445         ExprResult ArgsRes0 =
10446           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10447                                     Best->Conversions[0], AA_Passing);
10448         if (ArgsRes0.isInvalid())
10449           return ExprError();
10450         Args[0] = ArgsRes0.take();
10451 
10452         ExprResult ArgsRes1 =
10453           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10454                                     Best->Conversions[1], AA_Passing);
10455         if (ArgsRes1.isInvalid())
10456           return ExprError();
10457         Args[1] = ArgsRes1.take();
10458         break;
10459       }
10460     }
10461 
10462     case OR_No_Viable_Function: {
10463       // C++ [over.match.oper]p9:
10464       //   If the operator is the operator , [...] and there are no
10465       //   viable functions, then the operator is assumed to be the
10466       //   built-in operator and interpreted according to clause 5.
10467       if (Opc == BO_Comma)
10468         break;
10469 
10470       // For class as left operand for assignment or compound assigment
10471       // operator do not fall through to handling in built-in, but report that
10472       // no overloaded assignment operator found
10473       ExprResult Result = ExprError();
10474       if (Args[0]->getType()->isRecordType() &&
10475           Opc >= BO_Assign && Opc <= BO_OrAssign) {
10476         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10477              << BinaryOperator::getOpcodeStr(Opc)
10478              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10479       } else {
10480         // This is an erroneous use of an operator which can be overloaded by
10481         // a non-member function. Check for non-member operators which were
10482         // defined too late to be candidates.
10483         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10484           // FIXME: Recover by calling the found function.
10485           return ExprError();
10486 
10487         // No viable function; try to create a built-in operation, which will
10488         // produce an error. Then, show the non-viable candidates.
10489         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10490       }
10491       assert(Result.isInvalid() &&
10492              "C++ binary operator overloading is missing candidates!");
10493       if (Result.isInvalid())
10494         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10495                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
10496       return Result;
10497     }
10498 
10499     case OR_Ambiguous:
10500       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10501           << BinaryOperator::getOpcodeStr(Opc)
10502           << Args[0]->getType() << Args[1]->getType()
10503           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10504       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10505                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10506       return ExprError();
10507 
10508     case OR_Deleted:
10509       if (isImplicitlyDeleted(Best->Function)) {
10510         CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10511         Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10512           << Context.getRecordType(Method->getParent())
10513           << getSpecialMember(Method);
10514 
10515         // The user probably meant to call this special member. Just
10516         // explain why it's deleted.
10517         NoteDeletedFunction(Method);
10518         return ExprError();
10519       } else {
10520         Diag(OpLoc, diag::err_ovl_deleted_oper)
10521           << Best->Function->isDeleted()
10522           << BinaryOperator::getOpcodeStr(Opc)
10523           << getDeletedOrUnavailableSuffix(Best->Function)
10524           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10525       }
10526       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10527                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10528       return ExprError();
10529   }
10530 
10531   // We matched a built-in operator; build it.
10532   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10533 }
10534 
10535 ExprResult
10536 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10537                                          SourceLocation RLoc,
10538                                          Expr *Base, Expr *Idx) {
10539   Expr *Args[2] = { Base, Idx };
10540   DeclarationName OpName =
10541       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10542 
10543   // If either side is type-dependent, create an appropriate dependent
10544   // expression.
10545   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10546 
10547     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10548     // CHECKME: no 'operator' keyword?
10549     DeclarationNameInfo OpNameInfo(OpName, LLoc);
10550     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10551     UnresolvedLookupExpr *Fn
10552       = UnresolvedLookupExpr::Create(Context, NamingClass,
10553                                      NestedNameSpecifierLoc(), OpNameInfo,
10554                                      /*ADL*/ true, /*Overloaded*/ false,
10555                                      UnresolvedSetIterator(),
10556                                      UnresolvedSetIterator());
10557     // Can't add any actual overloads yet
10558 
10559     return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10560                                                    Args,
10561                                                    Context.DependentTy,
10562                                                    VK_RValue,
10563                                                    RLoc, false));
10564   }
10565 
10566   // Handle placeholders on both operands.
10567   if (checkPlaceholderForOverload(*this, Args[0]))
10568     return ExprError();
10569   if (checkPlaceholderForOverload(*this, Args[1]))
10570     return ExprError();
10571 
10572   // Build an empty overload set.
10573   OverloadCandidateSet CandidateSet(LLoc);
10574 
10575   // Subscript can only be overloaded as a member function.
10576 
10577   // Add operator candidates that are member functions.
10578   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10579 
10580   // Add builtin operator candidates.
10581   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10582 
10583   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10584 
10585   // Perform overload resolution.
10586   OverloadCandidateSet::iterator Best;
10587   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10588     case OR_Success: {
10589       // We found a built-in operator or an overloaded operator.
10590       FunctionDecl *FnDecl = Best->Function;
10591 
10592       if (FnDecl) {
10593         // We matched an overloaded operator. Build a call to that
10594         // operator.
10595 
10596         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10597 
10598         // Convert the arguments.
10599         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10600         ExprResult Arg0 =
10601           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10602                                               Best->FoundDecl, Method);
10603         if (Arg0.isInvalid())
10604           return ExprError();
10605         Args[0] = Arg0.take();
10606 
10607         // Convert the arguments.
10608         ExprResult InputInit
10609           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10610                                                       Context,
10611                                                       FnDecl->getParamDecl(0)),
10612                                       SourceLocation(),
10613                                       Owned(Args[1]));
10614         if (InputInit.isInvalid())
10615           return ExprError();
10616 
10617         Args[1] = InputInit.takeAs<Expr>();
10618 
10619         // Determine the result type
10620         QualType ResultTy = FnDecl->getResultType();
10621         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10622         ResultTy = ResultTy.getNonLValueExprType(Context);
10623 
10624         // Build the actual expression node.
10625         DeclarationNameInfo OpLocInfo(OpName, LLoc);
10626         OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10627         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10628                                                   Best->FoundDecl,
10629                                                   HadMultipleCandidates,
10630                                                   OpLocInfo.getLoc(),
10631                                                   OpLocInfo.getInfo());
10632         if (FnExpr.isInvalid())
10633           return ExprError();
10634 
10635         CXXOperatorCallExpr *TheCall =
10636           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10637                                             FnExpr.take(), Args,
10638                                             ResultTy, VK, RLoc,
10639                                             false);
10640 
10641         if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10642                                 FnDecl))
10643           return ExprError();
10644 
10645         return MaybeBindToTemporary(TheCall);
10646       } else {
10647         // We matched a built-in operator. Convert the arguments, then
10648         // break out so that we will build the appropriate built-in
10649         // operator node.
10650         ExprResult ArgsRes0 =
10651           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10652                                     Best->Conversions[0], AA_Passing);
10653         if (ArgsRes0.isInvalid())
10654           return ExprError();
10655         Args[0] = ArgsRes0.take();
10656 
10657         ExprResult ArgsRes1 =
10658           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10659                                     Best->Conversions[1], AA_Passing);
10660         if (ArgsRes1.isInvalid())
10661           return ExprError();
10662         Args[1] = ArgsRes1.take();
10663 
10664         break;
10665       }
10666     }
10667 
10668     case OR_No_Viable_Function: {
10669       if (CandidateSet.empty())
10670         Diag(LLoc, diag::err_ovl_no_oper)
10671           << Args[0]->getType() << /*subscript*/ 0
10672           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10673       else
10674         Diag(LLoc, diag::err_ovl_no_viable_subscript)
10675           << Args[0]->getType()
10676           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10677       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10678                                   "[]", LLoc);
10679       return ExprError();
10680     }
10681 
10682     case OR_Ambiguous:
10683       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10684           << "[]"
10685           << Args[0]->getType() << Args[1]->getType()
10686           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10687       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10688                                   "[]", LLoc);
10689       return ExprError();
10690 
10691     case OR_Deleted:
10692       Diag(LLoc, diag::err_ovl_deleted_oper)
10693         << Best->Function->isDeleted() << "[]"
10694         << getDeletedOrUnavailableSuffix(Best->Function)
10695         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10696       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10697                                   "[]", LLoc);
10698       return ExprError();
10699     }
10700 
10701   // We matched a built-in operator; build it.
10702   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10703 }
10704 
10705 /// BuildCallToMemberFunction - Build a call to a member
10706 /// function. MemExpr is the expression that refers to the member
10707 /// function (and includes the object parameter), Args/NumArgs are the
10708 /// arguments to the function call (not including the object
10709 /// parameter). The caller needs to validate that the member
10710 /// expression refers to a non-static member function or an overloaded
10711 /// member function.
10712 ExprResult
10713 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10714                                 SourceLocation LParenLoc, Expr **Args,
10715                                 unsigned NumArgs, SourceLocation RParenLoc) {
10716   assert(MemExprE->getType() == Context.BoundMemberTy ||
10717          MemExprE->getType() == Context.OverloadTy);
10718 
10719   // Dig out the member expression. This holds both the object
10720   // argument and the member function we're referring to.
10721   Expr *NakedMemExpr = MemExprE->IgnoreParens();
10722 
10723   // Determine whether this is a call to a pointer-to-member function.
10724   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10725     assert(op->getType() == Context.BoundMemberTy);
10726     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10727 
10728     QualType fnType =
10729       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10730 
10731     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10732     QualType resultType = proto->getCallResultType(Context);
10733     ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10734 
10735     // Check that the object type isn't more qualified than the
10736     // member function we're calling.
10737     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10738 
10739     QualType objectType = op->getLHS()->getType();
10740     if (op->getOpcode() == BO_PtrMemI)
10741       objectType = objectType->castAs<PointerType>()->getPointeeType();
10742     Qualifiers objectQuals = objectType.getQualifiers();
10743 
10744     Qualifiers difference = objectQuals - funcQuals;
10745     difference.removeObjCGCAttr();
10746     difference.removeAddressSpace();
10747     if (difference) {
10748       std::string qualsString = difference.getAsString();
10749       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10750         << fnType.getUnqualifiedType()
10751         << qualsString
10752         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10753     }
10754 
10755     CXXMemberCallExpr *call
10756       = new (Context) CXXMemberCallExpr(Context, MemExprE,
10757                                         llvm::makeArrayRef(Args, NumArgs),
10758                                         resultType, valueKind, RParenLoc);
10759 
10760     if (CheckCallReturnType(proto->getResultType(),
10761                             op->getRHS()->getLocStart(),
10762                             call, 0))
10763       return ExprError();
10764 
10765     if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc))
10766       return ExprError();
10767 
10768     return MaybeBindToTemporary(call);
10769   }
10770 
10771   UnbridgedCastsSet UnbridgedCasts;
10772   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10773     return ExprError();
10774 
10775   MemberExpr *MemExpr;
10776   CXXMethodDecl *Method = 0;
10777   DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
10778   NestedNameSpecifier *Qualifier = 0;
10779   if (isa<MemberExpr>(NakedMemExpr)) {
10780     MemExpr = cast<MemberExpr>(NakedMemExpr);
10781     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
10782     FoundDecl = MemExpr->getFoundDecl();
10783     Qualifier = MemExpr->getQualifier();
10784     UnbridgedCasts.restore();
10785   } else {
10786     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
10787     Qualifier = UnresExpr->getQualifier();
10788 
10789     QualType ObjectType = UnresExpr->getBaseType();
10790     Expr::Classification ObjectClassification
10791       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
10792                             : UnresExpr->getBase()->Classify(Context);
10793 
10794     // Add overload candidates
10795     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
10796 
10797     // FIXME: avoid copy.
10798     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10799     if (UnresExpr->hasExplicitTemplateArgs()) {
10800       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10801       TemplateArgs = &TemplateArgsBuffer;
10802     }
10803 
10804     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
10805            E = UnresExpr->decls_end(); I != E; ++I) {
10806 
10807       NamedDecl *Func = *I;
10808       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
10809       if (isa<UsingShadowDecl>(Func))
10810         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
10811 
10812 
10813       // Microsoft supports direct constructor calls.
10814       if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
10815         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
10816                              llvm::makeArrayRef(Args, NumArgs), CandidateSet);
10817       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
10818         // If explicit template arguments were provided, we can't call a
10819         // non-template member function.
10820         if (TemplateArgs)
10821           continue;
10822 
10823         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
10824                            ObjectClassification,
10825                            llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10826                            /*SuppressUserConversions=*/false);
10827       } else {
10828         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
10829                                    I.getPair(), ActingDC, TemplateArgs,
10830                                    ObjectType,  ObjectClassification,
10831                                    llvm::makeArrayRef(Args, NumArgs),
10832                                    CandidateSet,
10833                                    /*SuppressUsedConversions=*/false);
10834       }
10835     }
10836 
10837     DeclarationName DeclName = UnresExpr->getMemberName();
10838 
10839     UnbridgedCasts.restore();
10840 
10841     OverloadCandidateSet::iterator Best;
10842     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
10843                                             Best)) {
10844     case OR_Success:
10845       Method = cast<CXXMethodDecl>(Best->Function);
10846       FoundDecl = Best->FoundDecl;
10847       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
10848       DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc());
10849       break;
10850 
10851     case OR_No_Viable_Function:
10852       Diag(UnresExpr->getMemberLoc(),
10853            diag::err_ovl_no_viable_member_function_in_call)
10854         << DeclName << MemExprE->getSourceRange();
10855       CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10856                                   llvm::makeArrayRef(Args, NumArgs));
10857       // FIXME: Leaking incoming expressions!
10858       return ExprError();
10859 
10860     case OR_Ambiguous:
10861       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
10862         << DeclName << MemExprE->getSourceRange();
10863       CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10864                                   llvm::makeArrayRef(Args, NumArgs));
10865       // FIXME: Leaking incoming expressions!
10866       return ExprError();
10867 
10868     case OR_Deleted:
10869       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
10870         << Best->Function->isDeleted()
10871         << DeclName
10872         << getDeletedOrUnavailableSuffix(Best->Function)
10873         << MemExprE->getSourceRange();
10874       CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10875                                   llvm::makeArrayRef(Args, NumArgs));
10876       // FIXME: Leaking incoming expressions!
10877       return ExprError();
10878     }
10879 
10880     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
10881 
10882     // If overload resolution picked a static member, build a
10883     // non-member call based on that function.
10884     if (Method->isStatic()) {
10885       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
10886                                    Args, NumArgs, RParenLoc);
10887     }
10888 
10889     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
10890   }
10891 
10892   QualType ResultType = Method->getResultType();
10893   ExprValueKind VK = Expr::getValueKindForType(ResultType);
10894   ResultType = ResultType.getNonLValueExprType(Context);
10895 
10896   assert(Method && "Member call to something that isn't a method?");
10897   CXXMemberCallExpr *TheCall =
10898     new (Context) CXXMemberCallExpr(Context, MemExprE,
10899                                     llvm::makeArrayRef(Args, NumArgs),
10900                                     ResultType, VK, RParenLoc);
10901 
10902   // Check for a valid return type.
10903   if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
10904                           TheCall, Method))
10905     return ExprError();
10906 
10907   // Convert the object argument (for a non-static member function call).
10908   // We only need to do this if there was actually an overload; otherwise
10909   // it was done at lookup.
10910   if (!Method->isStatic()) {
10911     ExprResult ObjectArg =
10912       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
10913                                           FoundDecl, Method);
10914     if (ObjectArg.isInvalid())
10915       return ExprError();
10916     MemExpr->setBase(ObjectArg.take());
10917   }
10918 
10919   // Convert the rest of the arguments
10920   const FunctionProtoType *Proto =
10921     Method->getType()->getAs<FunctionProtoType>();
10922   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs,
10923                               RParenLoc))
10924     return ExprError();
10925 
10926   DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
10927 
10928   if (CheckFunctionCall(Method, TheCall, Proto))
10929     return ExprError();
10930 
10931   if ((isa<CXXConstructorDecl>(CurContext) ||
10932        isa<CXXDestructorDecl>(CurContext)) &&
10933       TheCall->getMethodDecl()->isPure()) {
10934     const CXXMethodDecl *MD = TheCall->getMethodDecl();
10935 
10936     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
10937       Diag(MemExpr->getLocStart(),
10938            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
10939         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
10940         << MD->getParent()->getDeclName();
10941 
10942       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
10943     }
10944   }
10945   return MaybeBindToTemporary(TheCall);
10946 }
10947 
10948 /// BuildCallToObjectOfClassType - Build a call to an object of class
10949 /// type (C++ [over.call.object]), which can end up invoking an
10950 /// overloaded function call operator (@c operator()) or performing a
10951 /// user-defined conversion on the object argument.
10952 ExprResult
10953 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
10954                                    SourceLocation LParenLoc,
10955                                    Expr **Args, unsigned NumArgs,
10956                                    SourceLocation RParenLoc) {
10957   if (checkPlaceholderForOverload(*this, Obj))
10958     return ExprError();
10959   ExprResult Object = Owned(Obj);
10960 
10961   UnbridgedCastsSet UnbridgedCasts;
10962   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10963     return ExprError();
10964 
10965   assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
10966   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
10967 
10968   // C++ [over.call.object]p1:
10969   //  If the primary-expression E in the function call syntax
10970   //  evaluates to a class object of type "cv T", then the set of
10971   //  candidate functions includes at least the function call
10972   //  operators of T. The function call operators of T are obtained by
10973   //  ordinary lookup of the name operator() in the context of
10974   //  (E).operator().
10975   OverloadCandidateSet CandidateSet(LParenLoc);
10976   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
10977 
10978   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
10979                           diag::err_incomplete_object_call, Object.get()))
10980     return true;
10981 
10982   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
10983   LookupQualifiedName(R, Record->getDecl());
10984   R.suppressDiagnostics();
10985 
10986   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
10987        Oper != OperEnd; ++Oper) {
10988     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
10989                        Object.get()->Classify(Context), Args, NumArgs, CandidateSet,
10990                        /*SuppressUserConversions=*/ false);
10991   }
10992 
10993   // C++ [over.call.object]p2:
10994   //   In addition, for each (non-explicit in C++0x) conversion function
10995   //   declared in T of the form
10996   //
10997   //        operator conversion-type-id () cv-qualifier;
10998   //
10999   //   where cv-qualifier is the same cv-qualification as, or a
11000   //   greater cv-qualification than, cv, and where conversion-type-id
11001   //   denotes the type "pointer to function of (P1,...,Pn) returning
11002   //   R", or the type "reference to pointer to function of
11003   //   (P1,...,Pn) returning R", or the type "reference to function
11004   //   of (P1,...,Pn) returning R", a surrogate call function [...]
11005   //   is also considered as a candidate function. Similarly,
11006   //   surrogate call functions are added to the set of candidate
11007   //   functions for each conversion function declared in an
11008   //   accessible base class provided the function is not hidden
11009   //   within T by another intervening declaration.
11010   std::pair<CXXRecordDecl::conversion_iterator,
11011             CXXRecordDecl::conversion_iterator> Conversions
11012     = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
11013   for (CXXRecordDecl::conversion_iterator
11014          I = Conversions.first, E = Conversions.second; I != E; ++I) {
11015     NamedDecl *D = *I;
11016     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
11017     if (isa<UsingShadowDecl>(D))
11018       D = cast<UsingShadowDecl>(D)->getTargetDecl();
11019 
11020     // Skip over templated conversion functions; they aren't
11021     // surrogates.
11022     if (isa<FunctionTemplateDecl>(D))
11023       continue;
11024 
11025     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
11026     if (!Conv->isExplicit()) {
11027       // Strip the reference type (if any) and then the pointer type (if
11028       // any) to get down to what might be a function type.
11029       QualType ConvType = Conv->getConversionType().getNonReferenceType();
11030       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
11031         ConvType = ConvPtrType->getPointeeType();
11032 
11033       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
11034       {
11035         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
11036                               Object.get(), llvm::makeArrayRef(Args, NumArgs),
11037                               CandidateSet);
11038       }
11039     }
11040   }
11041 
11042   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11043 
11044   // Perform overload resolution.
11045   OverloadCandidateSet::iterator Best;
11046   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
11047                              Best)) {
11048   case OR_Success:
11049     // Overload resolution succeeded; we'll build the appropriate call
11050     // below.
11051     break;
11052 
11053   case OR_No_Viable_Function:
11054     if (CandidateSet.empty())
11055       Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
11056         << Object.get()->getType() << /*call*/ 1
11057         << Object.get()->getSourceRange();
11058     else
11059       Diag(Object.get()->getLocStart(),
11060            diag::err_ovl_no_viable_object_call)
11061         << Object.get()->getType() << Object.get()->getSourceRange();
11062     CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
11063                                 llvm::makeArrayRef(Args, NumArgs));
11064     break;
11065 
11066   case OR_Ambiguous:
11067     Diag(Object.get()->getLocStart(),
11068          diag::err_ovl_ambiguous_object_call)
11069       << Object.get()->getType() << Object.get()->getSourceRange();
11070     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
11071                                 llvm::makeArrayRef(Args, NumArgs));
11072     break;
11073 
11074   case OR_Deleted:
11075     Diag(Object.get()->getLocStart(),
11076          diag::err_ovl_deleted_object_call)
11077       << Best->Function->isDeleted()
11078       << Object.get()->getType()
11079       << getDeletedOrUnavailableSuffix(Best->Function)
11080       << Object.get()->getSourceRange();
11081     CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
11082                                 llvm::makeArrayRef(Args, NumArgs));
11083     break;
11084   }
11085 
11086   if (Best == CandidateSet.end())
11087     return true;
11088 
11089   UnbridgedCasts.restore();
11090 
11091   if (Best->Function == 0) {
11092     // Since there is no function declaration, this is one of the
11093     // surrogate candidates. Dig out the conversion function.
11094     CXXConversionDecl *Conv
11095       = cast<CXXConversionDecl>(
11096                          Best->Conversions[0].UserDefined.ConversionFunction);
11097 
11098     CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11099     DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
11100 
11101     // We selected one of the surrogate functions that converts the
11102     // object parameter to a function pointer. Perform the conversion
11103     // on the object argument, then let ActOnCallExpr finish the job.
11104 
11105     // Create an implicit member expr to refer to the conversion operator.
11106     // and then call it.
11107     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
11108                                              Conv, HadMultipleCandidates);
11109     if (Call.isInvalid())
11110       return ExprError();
11111     // Record usage of conversion in an implicit cast.
11112     Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
11113                                           CK_UserDefinedConversion,
11114                                           Call.get(), 0, VK_RValue));
11115 
11116     return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs),
11117                          RParenLoc);
11118   }
11119 
11120   CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11121 
11122   // We found an overloaded operator(). Build a CXXOperatorCallExpr
11123   // that calls this method, using Object for the implicit object
11124   // parameter and passing along the remaining arguments.
11125   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11126 
11127   // An error diagnostic has already been printed when parsing the declaration.
11128   if (Method->isInvalidDecl())
11129     return ExprError();
11130 
11131   const FunctionProtoType *Proto =
11132     Method->getType()->getAs<FunctionProtoType>();
11133 
11134   unsigned NumArgsInProto = Proto->getNumArgs();
11135   unsigned NumArgsToCheck = NumArgs;
11136 
11137   // Build the full argument list for the method call (the
11138   // implicit object parameter is placed at the beginning of the
11139   // list).
11140   Expr **MethodArgs;
11141   if (NumArgs < NumArgsInProto) {
11142     NumArgsToCheck = NumArgsInProto;
11143     MethodArgs = new Expr*[NumArgsInProto + 1];
11144   } else {
11145     MethodArgs = new Expr*[NumArgs + 1];
11146   }
11147   MethodArgs[0] = Object.get();
11148   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
11149     MethodArgs[ArgIdx + 1] = Args[ArgIdx];
11150 
11151   DeclarationNameInfo OpLocInfo(
11152                Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
11153   OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
11154   ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11155                                            HadMultipleCandidates,
11156                                            OpLocInfo.getLoc(),
11157                                            OpLocInfo.getInfo());
11158   if (NewFn.isInvalid())
11159     return true;
11160 
11161   // Once we've built TheCall, all of the expressions are properly
11162   // owned.
11163   QualType ResultTy = Method->getResultType();
11164   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11165   ResultTy = ResultTy.getNonLValueExprType(Context);
11166 
11167   CXXOperatorCallExpr *TheCall =
11168     new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
11169                                       llvm::makeArrayRef(MethodArgs, NumArgs+1),
11170                                       ResultTy, VK, RParenLoc, false);
11171   delete [] MethodArgs;
11172 
11173   if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
11174                           Method))
11175     return true;
11176 
11177   // We may have default arguments. If so, we need to allocate more
11178   // slots in the call for them.
11179   if (NumArgs < NumArgsInProto)
11180     TheCall->setNumArgs(Context, NumArgsInProto + 1);
11181   else if (NumArgs > NumArgsInProto)
11182     NumArgsToCheck = NumArgsInProto;
11183 
11184   bool IsError = false;
11185 
11186   // Initialize the implicit object parameter.
11187   ExprResult ObjRes =
11188     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11189                                         Best->FoundDecl, Method);
11190   if (ObjRes.isInvalid())
11191     IsError = true;
11192   else
11193     Object = ObjRes;
11194   TheCall->setArg(0, Object.take());
11195 
11196   // Check the argument types.
11197   for (unsigned i = 0; i != NumArgsToCheck; i++) {
11198     Expr *Arg;
11199     if (i < NumArgs) {
11200       Arg = Args[i];
11201 
11202       // Pass the argument.
11203 
11204       ExprResult InputInit
11205         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11206                                                     Context,
11207                                                     Method->getParamDecl(i)),
11208                                     SourceLocation(), Arg);
11209 
11210       IsError |= InputInit.isInvalid();
11211       Arg = InputInit.takeAs<Expr>();
11212     } else {
11213       ExprResult DefArg
11214         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11215       if (DefArg.isInvalid()) {
11216         IsError = true;
11217         break;
11218       }
11219 
11220       Arg = DefArg.takeAs<Expr>();
11221     }
11222 
11223     TheCall->setArg(i + 1, Arg);
11224   }
11225 
11226   // If this is a variadic call, handle args passed through "...".
11227   if (Proto->isVariadic()) {
11228     // Promote the arguments (C99 6.5.2.2p7).
11229     for (unsigned i = NumArgsInProto; i < NumArgs; i++) {
11230       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11231       IsError |= Arg.isInvalid();
11232       TheCall->setArg(i + 1, Arg.take());
11233     }
11234   }
11235 
11236   if (IsError) return true;
11237 
11238   DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
11239 
11240   if (CheckFunctionCall(Method, TheCall, Proto))
11241     return true;
11242 
11243   return MaybeBindToTemporary(TheCall);
11244 }
11245 
11246 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11247 ///  (if one exists), where @c Base is an expression of class type and
11248 /// @c Member is the name of the member we're trying to find.
11249 ExprResult
11250 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
11251   assert(Base->getType()->isRecordType() &&
11252          "left-hand side must have class type");
11253 
11254   if (checkPlaceholderForOverload(*this, Base))
11255     return ExprError();
11256 
11257   SourceLocation Loc = Base->getExprLoc();
11258 
11259   // C++ [over.ref]p1:
11260   //
11261   //   [...] An expression x->m is interpreted as (x.operator->())->m
11262   //   for a class object x of type T if T::operator->() exists and if
11263   //   the operator is selected as the best match function by the
11264   //   overload resolution mechanism (13.3).
11265   DeclarationName OpName =
11266     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11267   OverloadCandidateSet CandidateSet(Loc);
11268   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11269 
11270   if (RequireCompleteType(Loc, Base->getType(),
11271                           diag::err_typecheck_incomplete_tag, Base))
11272     return ExprError();
11273 
11274   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11275   LookupQualifiedName(R, BaseRecord->getDecl());
11276   R.suppressDiagnostics();
11277 
11278   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11279        Oper != OperEnd; ++Oper) {
11280     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11281                        0, 0, CandidateSet, /*SuppressUserConversions=*/false);
11282   }
11283 
11284   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11285 
11286   // Perform overload resolution.
11287   OverloadCandidateSet::iterator Best;
11288   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11289   case OR_Success:
11290     // Overload resolution succeeded; we'll build the call below.
11291     break;
11292 
11293   case OR_No_Viable_Function:
11294     if (CandidateSet.empty())
11295       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11296         << Base->getType() << Base->getSourceRange();
11297     else
11298       Diag(OpLoc, diag::err_ovl_no_viable_oper)
11299         << "operator->" << Base->getSourceRange();
11300     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11301     return ExprError();
11302 
11303   case OR_Ambiguous:
11304     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11305       << "->" << Base->getType() << Base->getSourceRange();
11306     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11307     return ExprError();
11308 
11309   case OR_Deleted:
11310     Diag(OpLoc,  diag::err_ovl_deleted_oper)
11311       << Best->Function->isDeleted()
11312       << "->"
11313       << getDeletedOrUnavailableSuffix(Best->Function)
11314       << Base->getSourceRange();
11315     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11316     return ExprError();
11317   }
11318 
11319   CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11320 
11321   // Convert the object parameter.
11322   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11323   ExprResult BaseResult =
11324     PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11325                                         Best->FoundDecl, Method);
11326   if (BaseResult.isInvalid())
11327     return ExprError();
11328   Base = BaseResult.take();
11329 
11330   // Build the operator call.
11331   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11332                                             HadMultipleCandidates, OpLoc);
11333   if (FnExpr.isInvalid())
11334     return ExprError();
11335 
11336   QualType ResultTy = Method->getResultType();
11337   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11338   ResultTy = ResultTy.getNonLValueExprType(Context);
11339   CXXOperatorCallExpr *TheCall =
11340     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11341                                       Base, ResultTy, VK, OpLoc, false);
11342 
11343   if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11344                           Method))
11345           return ExprError();
11346 
11347   return MaybeBindToTemporary(TheCall);
11348 }
11349 
11350 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11351 /// a literal operator described by the provided lookup results.
11352 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11353                                           DeclarationNameInfo &SuffixInfo,
11354                                           ArrayRef<Expr*> Args,
11355                                           SourceLocation LitEndLoc,
11356                                        TemplateArgumentListInfo *TemplateArgs) {
11357   SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11358 
11359   OverloadCandidateSet CandidateSet(UDSuffixLoc);
11360   AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11361                         TemplateArgs);
11362 
11363   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11364 
11365   // Perform overload resolution. This will usually be trivial, but might need
11366   // to perform substitutions for a literal operator template.
11367   OverloadCandidateSet::iterator Best;
11368   switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11369   case OR_Success:
11370   case OR_Deleted:
11371     break;
11372 
11373   case OR_No_Viable_Function:
11374     Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11375       << R.getLookupName();
11376     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11377     return ExprError();
11378 
11379   case OR_Ambiguous:
11380     Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11381     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11382     return ExprError();
11383   }
11384 
11385   FunctionDecl *FD = Best->Function;
11386   ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
11387                                         HadMultipleCandidates,
11388                                         SuffixInfo.getLoc(),
11389                                         SuffixInfo.getInfo());
11390   if (Fn.isInvalid())
11391     return true;
11392 
11393   // Check the argument types. This should almost always be a no-op, except
11394   // that array-to-pointer decay is applied to string literals.
11395   Expr *ConvArgs[2];
11396   for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) {
11397     ExprResult InputInit = PerformCopyInitialization(
11398       InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11399       SourceLocation(), Args[ArgIdx]);
11400     if (InputInit.isInvalid())
11401       return true;
11402     ConvArgs[ArgIdx] = InputInit.take();
11403   }
11404 
11405   QualType ResultTy = FD->getResultType();
11406   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11407   ResultTy = ResultTy.getNonLValueExprType(Context);
11408 
11409   UserDefinedLiteral *UDL =
11410     new (Context) UserDefinedLiteral(Context, Fn.take(),
11411                                      llvm::makeArrayRef(ConvArgs, Args.size()),
11412                                      ResultTy, VK, LitEndLoc, UDSuffixLoc);
11413 
11414   if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11415     return ExprError();
11416 
11417   if (CheckFunctionCall(FD, UDL, NULL))
11418     return ExprError();
11419 
11420   return MaybeBindToTemporary(UDL);
11421 }
11422 
11423 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11424 /// given LookupResult is non-empty, it is assumed to describe a member which
11425 /// will be invoked. Otherwise, the function will be found via argument
11426 /// dependent lookup.
11427 /// CallExpr is set to a valid expression and FRS_Success returned on success,
11428 /// otherwise CallExpr is set to ExprError() and some non-success value
11429 /// is returned.
11430 Sema::ForRangeStatus
11431 Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11432                                 SourceLocation RangeLoc, VarDecl *Decl,
11433                                 BeginEndFunction BEF,
11434                                 const DeclarationNameInfo &NameInfo,
11435                                 LookupResult &MemberLookup,
11436                                 OverloadCandidateSet *CandidateSet,
11437                                 Expr *Range, ExprResult *CallExpr) {
11438   CandidateSet->clear();
11439   if (!MemberLookup.empty()) {
11440     ExprResult MemberRef =
11441         BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11442                                  /*IsPtr=*/false, CXXScopeSpec(),
11443                                  /*TemplateKWLoc=*/SourceLocation(),
11444                                  /*FirstQualifierInScope=*/0,
11445                                  MemberLookup,
11446                                  /*TemplateArgs=*/0);
11447     if (MemberRef.isInvalid()) {
11448       *CallExpr = ExprError();
11449       Diag(Range->getLocStart(), diag::note_in_for_range)
11450           << RangeLoc << BEF << Range->getType();
11451       return FRS_DiagnosticIssued;
11452     }
11453     *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, MultiExprArg(), Loc, 0);
11454     if (CallExpr->isInvalid()) {
11455       *CallExpr = ExprError();
11456       Diag(Range->getLocStart(), diag::note_in_for_range)
11457           << RangeLoc << BEF << Range->getType();
11458       return FRS_DiagnosticIssued;
11459     }
11460   } else {
11461     UnresolvedSet<0> FoundNames;
11462     UnresolvedLookupExpr *Fn =
11463       UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11464                                    NestedNameSpecifierLoc(), NameInfo,
11465                                    /*NeedsADL=*/true, /*Overloaded=*/false,
11466                                    FoundNames.begin(), FoundNames.end());
11467 
11468     bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, &Range, 1, Loc,
11469                                                     CandidateSet, CallExpr);
11470     if (CandidateSet->empty() || CandidateSetError) {
11471       *CallExpr = ExprError();
11472       return FRS_NoViableFunction;
11473     }
11474     OverloadCandidateSet::iterator Best;
11475     OverloadingResult OverloadResult =
11476         CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11477 
11478     if (OverloadResult == OR_No_Viable_Function) {
11479       *CallExpr = ExprError();
11480       return FRS_NoViableFunction;
11481     }
11482     *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, &Range, 1,
11483                                          Loc, 0, CandidateSet, &Best,
11484                                          OverloadResult,
11485                                          /*AllowTypoCorrection=*/false);
11486     if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11487       *CallExpr = ExprError();
11488       Diag(Range->getLocStart(), diag::note_in_for_range)
11489           << RangeLoc << BEF << Range->getType();
11490       return FRS_DiagnosticIssued;
11491     }
11492   }
11493   return FRS_Success;
11494 }
11495 
11496 
11497 /// FixOverloadedFunctionReference - E is an expression that refers to
11498 /// a C++ overloaded function (possibly with some parentheses and
11499 /// perhaps a '&' around it). We have resolved the overloaded function
11500 /// to the function declaration Fn, so patch up the expression E to
11501 /// refer (possibly indirectly) to Fn. Returns the new expr.
11502 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11503                                            FunctionDecl *Fn) {
11504   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11505     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11506                                                    Found, Fn);
11507     if (SubExpr == PE->getSubExpr())
11508       return PE;
11509 
11510     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11511   }
11512 
11513   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11514     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11515                                                    Found, Fn);
11516     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11517                                SubExpr->getType()) &&
11518            "Implicit cast type cannot be determined from overload");
11519     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11520     if (SubExpr == ICE->getSubExpr())
11521       return ICE;
11522 
11523     return ImplicitCastExpr::Create(Context, ICE->getType(),
11524                                     ICE->getCastKind(),
11525                                     SubExpr, 0,
11526                                     ICE->getValueKind());
11527   }
11528 
11529   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11530     assert(UnOp->getOpcode() == UO_AddrOf &&
11531            "Can only take the address of an overloaded function");
11532     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11533       if (Method->isStatic()) {
11534         // Do nothing: static member functions aren't any different
11535         // from non-member functions.
11536       } else {
11537         // Fix the sub expression, which really has to be an
11538         // UnresolvedLookupExpr holding an overloaded member function
11539         // or template.
11540         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11541                                                        Found, Fn);
11542         if (SubExpr == UnOp->getSubExpr())
11543           return UnOp;
11544 
11545         assert(isa<DeclRefExpr>(SubExpr)
11546                && "fixed to something other than a decl ref");
11547         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11548                && "fixed to a member ref with no nested name qualifier");
11549 
11550         // We have taken the address of a pointer to member
11551         // function. Perform the computation here so that we get the
11552         // appropriate pointer to member type.
11553         QualType ClassType
11554           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11555         QualType MemPtrType
11556           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11557 
11558         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11559                                            VK_RValue, OK_Ordinary,
11560                                            UnOp->getOperatorLoc());
11561       }
11562     }
11563     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11564                                                    Found, Fn);
11565     if (SubExpr == UnOp->getSubExpr())
11566       return UnOp;
11567 
11568     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11569                                      Context.getPointerType(SubExpr->getType()),
11570                                        VK_RValue, OK_Ordinary,
11571                                        UnOp->getOperatorLoc());
11572   }
11573 
11574   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11575     // FIXME: avoid copy.
11576     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11577     if (ULE->hasExplicitTemplateArgs()) {
11578       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11579       TemplateArgs = &TemplateArgsBuffer;
11580     }
11581 
11582     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11583                                            ULE->getQualifierLoc(),
11584                                            ULE->getTemplateKeywordLoc(),
11585                                            Fn,
11586                                            /*enclosing*/ false, // FIXME?
11587                                            ULE->getNameLoc(),
11588                                            Fn->getType(),
11589                                            VK_LValue,
11590                                            Found.getDecl(),
11591                                            TemplateArgs);
11592     MarkDeclRefReferenced(DRE);
11593     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11594     return DRE;
11595   }
11596 
11597   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11598     // FIXME: avoid copy.
11599     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11600     if (MemExpr->hasExplicitTemplateArgs()) {
11601       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11602       TemplateArgs = &TemplateArgsBuffer;
11603     }
11604 
11605     Expr *Base;
11606 
11607     // If we're filling in a static method where we used to have an
11608     // implicit member access, rewrite to a simple decl ref.
11609     if (MemExpr->isImplicitAccess()) {
11610       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11611         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11612                                                MemExpr->getQualifierLoc(),
11613                                                MemExpr->getTemplateKeywordLoc(),
11614                                                Fn,
11615                                                /*enclosing*/ false,
11616                                                MemExpr->getMemberLoc(),
11617                                                Fn->getType(),
11618                                                VK_LValue,
11619                                                Found.getDecl(),
11620                                                TemplateArgs);
11621         MarkDeclRefReferenced(DRE);
11622         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11623         return DRE;
11624       } else {
11625         SourceLocation Loc = MemExpr->getMemberLoc();
11626         if (MemExpr->getQualifier())
11627           Loc = MemExpr->getQualifierLoc().getBeginLoc();
11628         CheckCXXThisCapture(Loc);
11629         Base = new (Context) CXXThisExpr(Loc,
11630                                          MemExpr->getBaseType(),
11631                                          /*isImplicit=*/true);
11632       }
11633     } else
11634       Base = MemExpr->getBase();
11635 
11636     ExprValueKind valueKind;
11637     QualType type;
11638     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11639       valueKind = VK_LValue;
11640       type = Fn->getType();
11641     } else {
11642       valueKind = VK_RValue;
11643       type = Context.BoundMemberTy;
11644     }
11645 
11646     MemberExpr *ME = MemberExpr::Create(Context, Base,
11647                                         MemExpr->isArrow(),
11648                                         MemExpr->getQualifierLoc(),
11649                                         MemExpr->getTemplateKeywordLoc(),
11650                                         Fn,
11651                                         Found,
11652                                         MemExpr->getMemberNameInfo(),
11653                                         TemplateArgs,
11654                                         type, valueKind, OK_Ordinary);
11655     ME->setHadMultipleCandidates(true);
11656     MarkMemberReferenced(ME);
11657     return ME;
11658   }
11659 
11660   llvm_unreachable("Invalid reference to overloaded function");
11661 }
11662 
11663 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11664                                                 DeclAccessPair Found,
11665                                                 FunctionDecl *Fn) {
11666   return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11667 }
11668 
11669 } // end namespace clang
11670