1 //===--- SemaOverload.cpp - C++ Overloading ---------------------*- C++ -*-===//
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/SemaInternal.h"
15 #include "clang/Sema/Lookup.h"
16 #include "clang/Sema/Initialization.h"
17 #include "clang/Sema/Template.h"
18 #include "clang/Sema/TemplateDeduction.h"
19 #include "clang/Basic/Diagnostic.h"
20 #include "clang/Lex/Preprocessor.h"
21 #include "clang/AST/ASTContext.h"
22 #include "clang/AST/CXXInheritance.h"
23 #include "clang/AST/DeclObjC.h"
24 #include "clang/AST/Expr.h"
25 #include "clang/AST/ExprCXX.h"
26 #include "clang/AST/ExprObjC.h"
27 #include "clang/AST/TypeOrdering.h"
28 #include "clang/Basic/PartialDiagnostic.h"
29 #include "llvm/ADT/DenseSet.h"
30 #include "llvm/ADT/SmallPtrSet.h"
31 #include "llvm/ADT/SmallString.h"
32 #include "llvm/ADT/STLExtras.h"
33 #include <algorithm>
34 
35 namespace clang {
36 using namespace sema;
37 
38 /// A convenience routine for creating a decayed reference to a
39 /// function.
40 static ExprResult
41 CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, bool HadMultipleCandidates,
42                       SourceLocation Loc = SourceLocation(),
43                       const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
44   DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
45                                                  VK_LValue, Loc, LocInfo);
46   if (HadMultipleCandidates)
47     DRE->setHadMultipleCandidates(true);
48   ExprResult E = S.Owned(DRE);
49   E = S.DefaultFunctionArrayConversion(E.take());
50   if (E.isInvalid())
51     return ExprError();
52   return move(E);
53 }
54 
55 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
56                                  bool InOverloadResolution,
57                                  StandardConversionSequence &SCS,
58                                  bool CStyle,
59                                  bool AllowObjCWritebackConversion);
60 
61 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
62                                                  QualType &ToType,
63                                                  bool InOverloadResolution,
64                                                  StandardConversionSequence &SCS,
65                                                  bool CStyle);
66 static OverloadingResult
67 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
68                         UserDefinedConversionSequence& User,
69                         OverloadCandidateSet& Conversions,
70                         bool AllowExplicit);
71 
72 
73 static ImplicitConversionSequence::CompareKind
74 CompareStandardConversionSequences(Sema &S,
75                                    const StandardConversionSequence& SCS1,
76                                    const StandardConversionSequence& SCS2);
77 
78 static ImplicitConversionSequence::CompareKind
79 CompareQualificationConversions(Sema &S,
80                                 const StandardConversionSequence& SCS1,
81                                 const StandardConversionSequence& SCS2);
82 
83 static ImplicitConversionSequence::CompareKind
84 CompareDerivedToBaseConversions(Sema &S,
85                                 const StandardConversionSequence& SCS1,
86                                 const StandardConversionSequence& SCS2);
87 
88 
89 
90 /// GetConversionCategory - Retrieve the implicit conversion
91 /// category corresponding to the given implicit conversion kind.
92 ImplicitConversionCategory
93 GetConversionCategory(ImplicitConversionKind Kind) {
94   static const ImplicitConversionCategory
95     Category[(int)ICK_Num_Conversion_Kinds] = {
96     ICC_Identity,
97     ICC_Lvalue_Transformation,
98     ICC_Lvalue_Transformation,
99     ICC_Lvalue_Transformation,
100     ICC_Identity,
101     ICC_Qualification_Adjustment,
102     ICC_Promotion,
103     ICC_Promotion,
104     ICC_Promotion,
105     ICC_Conversion,
106     ICC_Conversion,
107     ICC_Conversion,
108     ICC_Conversion,
109     ICC_Conversion,
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   };
119   return Category[(int)Kind];
120 }
121 
122 /// GetConversionRank - Retrieve the implicit conversion rank
123 /// corresponding to the given implicit conversion kind.
124 ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
125   static const ImplicitConversionRank
126     Rank[(int)ICK_Num_Conversion_Kinds] = {
127     ICR_Exact_Match,
128     ICR_Exact_Match,
129     ICR_Exact_Match,
130     ICR_Exact_Match,
131     ICR_Exact_Match,
132     ICR_Exact_Match,
133     ICR_Promotion,
134     ICR_Promotion,
135     ICR_Promotion,
136     ICR_Conversion,
137     ICR_Conversion,
138     ICR_Conversion,
139     ICR_Conversion,
140     ICR_Conversion,
141     ICR_Conversion,
142     ICR_Conversion,
143     ICR_Conversion,
144     ICR_Conversion,
145     ICR_Conversion,
146     ICR_Conversion,
147     ICR_Complex_Real_Conversion,
148     ICR_Conversion,
149     ICR_Conversion,
150     ICR_Writeback_Conversion
151   };
152   return Rank[(int)Kind];
153 }
154 
155 /// GetImplicitConversionName - Return the name of this kind of
156 /// implicit conversion.
157 const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
158   static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
159     "No conversion",
160     "Lvalue-to-rvalue",
161     "Array-to-pointer",
162     "Function-to-pointer",
163     "Noreturn adjustment",
164     "Qualification",
165     "Integral promotion",
166     "Floating point promotion",
167     "Complex promotion",
168     "Integral conversion",
169     "Floating conversion",
170     "Complex conversion",
171     "Floating-integral conversion",
172     "Pointer conversion",
173     "Pointer-to-member conversion",
174     "Boolean conversion",
175     "Compatible-types conversion",
176     "Derived-to-base conversion",
177     "Vector conversion",
178     "Vector splat",
179     "Complex-real conversion",
180     "Block Pointer conversion",
181     "Transparent Union Conversion"
182     "Writeback conversion"
183   };
184   return Name[Kind];
185 }
186 
187 /// StandardConversionSequence - Set the standard conversion
188 /// sequence to the identity conversion.
189 void StandardConversionSequence::setAsIdentityConversion() {
190   First = ICK_Identity;
191   Second = ICK_Identity;
192   Third = ICK_Identity;
193   DeprecatedStringLiteralToCharPtr = false;
194   QualificationIncludesObjCLifetime = false;
195   ReferenceBinding = false;
196   DirectBinding = false;
197   IsLvalueReference = true;
198   BindsToFunctionLvalue = false;
199   BindsToRvalue = false;
200   BindsImplicitObjectArgumentWithoutRefQualifier = false;
201   ObjCLifetimeConversionBinding = false;
202   CopyConstructor = 0;
203 }
204 
205 /// getRank - Retrieve the rank of this standard conversion sequence
206 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
207 /// implicit conversions.
208 ImplicitConversionRank StandardConversionSequence::getRank() const {
209   ImplicitConversionRank Rank = ICR_Exact_Match;
210   if  (GetConversionRank(First) > Rank)
211     Rank = GetConversionRank(First);
212   if  (GetConversionRank(Second) > Rank)
213     Rank = GetConversionRank(Second);
214   if  (GetConversionRank(Third) > Rank)
215     Rank = GetConversionRank(Third);
216   return Rank;
217 }
218 
219 /// isPointerConversionToBool - Determines whether this conversion is
220 /// a conversion of a pointer or pointer-to-member to bool. This is
221 /// used as part of the ranking of standard conversion sequences
222 /// (C++ 13.3.3.2p4).
223 bool StandardConversionSequence::isPointerConversionToBool() const {
224   // Note that FromType has not necessarily been transformed by the
225   // array-to-pointer or function-to-pointer implicit conversions, so
226   // check for their presence as well as checking whether FromType is
227   // a pointer.
228   if (getToType(1)->isBooleanType() &&
229       (getFromType()->isPointerType() ||
230        getFromType()->isObjCObjectPointerType() ||
231        getFromType()->isBlockPointerType() ||
232        getFromType()->isNullPtrType() ||
233        First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
234     return true;
235 
236   return false;
237 }
238 
239 /// isPointerConversionToVoidPointer - Determines whether this
240 /// conversion is a conversion of a pointer to a void pointer. This is
241 /// used as part of the ranking of standard conversion sequences (C++
242 /// 13.3.3.2p4).
243 bool
244 StandardConversionSequence::
245 isPointerConversionToVoidPointer(ASTContext& Context) const {
246   QualType FromType = getFromType();
247   QualType ToType = getToType(1);
248 
249   // Note that FromType has not necessarily been transformed by the
250   // array-to-pointer implicit conversion, so check for its presence
251   // and redo the conversion to get a pointer.
252   if (First == ICK_Array_To_Pointer)
253     FromType = Context.getArrayDecayedType(FromType);
254 
255   if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
256     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
257       return ToPtrType->getPointeeType()->isVoidType();
258 
259   return false;
260 }
261 
262 /// Skip any implicit casts which could be either part of a narrowing conversion
263 /// or after one in an implicit conversion.
264 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
265   while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
266     switch (ICE->getCastKind()) {
267     case CK_NoOp:
268     case CK_IntegralCast:
269     case CK_IntegralToBoolean:
270     case CK_IntegralToFloating:
271     case CK_FloatingToIntegral:
272     case CK_FloatingToBoolean:
273     case CK_FloatingCast:
274       Converted = ICE->getSubExpr();
275       continue;
276 
277     default:
278       return Converted;
279     }
280   }
281 
282   return Converted;
283 }
284 
285 /// Check if this standard conversion sequence represents a narrowing
286 /// conversion, according to C++11 [dcl.init.list]p7.
287 ///
288 /// \param Ctx  The AST context.
289 /// \param Converted  The result of applying this standard conversion sequence.
290 /// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
291 ///        value of the expression prior to the narrowing conversion.
292 /// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
293 ///        type of the expression prior to the narrowing conversion.
294 NarrowingKind
295 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
296                                              const Expr *Converted,
297                                              APValue &ConstantValue,
298                                              QualType &ConstantType) const {
299   assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
300 
301   // C++11 [dcl.init.list]p7:
302   //   A narrowing conversion is an implicit conversion ...
303   QualType FromType = getToType(0);
304   QualType ToType = getToType(1);
305   switch (Second) {
306   // -- from a floating-point type to an integer type, or
307   //
308   // -- from an integer type or unscoped enumeration type to a floating-point
309   //    type, except where the source is a constant expression and the actual
310   //    value after conversion will fit into the target type and will produce
311   //    the original value when converted back to the original type, or
312   case ICK_Floating_Integral:
313     if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
314       return NK_Type_Narrowing;
315     } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
316       llvm::APSInt IntConstantValue;
317       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
318       if (Initializer &&
319           Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
320         // Convert the integer to the floating type.
321         llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
322         Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
323                                 llvm::APFloat::rmNearestTiesToEven);
324         // And back.
325         llvm::APSInt ConvertedValue = IntConstantValue;
326         bool ignored;
327         Result.convertToInteger(ConvertedValue,
328                                 llvm::APFloat::rmTowardZero, &ignored);
329         // If the resulting value is different, this was a narrowing conversion.
330         if (IntConstantValue != ConvertedValue) {
331           ConstantValue = APValue(IntConstantValue);
332           ConstantType = Initializer->getType();
333           return NK_Constant_Narrowing;
334         }
335       } else {
336         // Variables are always narrowings.
337         return NK_Variable_Narrowing;
338       }
339     }
340     return NK_Not_Narrowing;
341 
342   // -- from long double to double or float, or from double to float, except
343   //    where the source is a constant expression and the actual value after
344   //    conversion is within the range of values that can be represented (even
345   //    if it cannot be represented exactly), or
346   case ICK_Floating_Conversion:
347     if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
348         Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
349       // FromType is larger than ToType.
350       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
351       if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
352         // Constant!
353         assert(ConstantValue.isFloat());
354         llvm::APFloat FloatVal = ConstantValue.getFloat();
355         // Convert the source value into the target type.
356         bool ignored;
357         llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
358           Ctx.getFloatTypeSemantics(ToType),
359           llvm::APFloat::rmNearestTiesToEven, &ignored);
360         // If there was no overflow, the source value is within the range of
361         // values that can be represented.
362         if (ConvertStatus & llvm::APFloat::opOverflow) {
363           ConstantType = Initializer->getType();
364           return NK_Constant_Narrowing;
365         }
366       } else {
367         return NK_Variable_Narrowing;
368       }
369     }
370     return NK_Not_Narrowing;
371 
372   // -- from an integer type or unscoped enumeration type to an integer type
373   //    that cannot represent all the values of the original type, except where
374   //    the source is a constant expression and the actual value after
375   //    conversion will fit into the target type and will produce the original
376   //    value when converted back to the original type.
377   case ICK_Boolean_Conversion:  // Bools are integers too.
378     if (!FromType->isIntegralOrUnscopedEnumerationType()) {
379       // Boolean conversions can be from pointers and pointers to members
380       // [conv.bool], and those aren't considered narrowing conversions.
381       return NK_Not_Narrowing;
382     }  // Otherwise, fall through to the integral case.
383   case ICK_Integral_Conversion: {
384     assert(FromType->isIntegralOrUnscopedEnumerationType());
385     assert(ToType->isIntegralOrUnscopedEnumerationType());
386     const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
387     const unsigned FromWidth = Ctx.getIntWidth(FromType);
388     const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
389     const unsigned ToWidth = Ctx.getIntWidth(ToType);
390 
391     if (FromWidth > ToWidth ||
392         (FromWidth == ToWidth && FromSigned != ToSigned) ||
393         (FromSigned && !ToSigned)) {
394       // Not all values of FromType can be represented in ToType.
395       llvm::APSInt InitializerValue;
396       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
397       if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
398         // Such conversions on variables are always narrowing.
399         return NK_Variable_Narrowing;
400       } else if (FromWidth < ToWidth) {
401         // Negative -> unsigned is narrowing. Otherwise, more bits is never
402         // narrowing.
403         if (InitializerValue.isSigned() && InitializerValue.isNegative())
404           return NK_Constant_Narrowing;
405       } else {
406         ConstantValue = APValue(InitializerValue);
407 
408         // Add a bit to the InitializerValue so we don't have to worry about
409         // signed vs. unsigned comparisons.
410         InitializerValue = InitializerValue.extend(
411           InitializerValue.getBitWidth() + 1);
412         // Convert the initializer to and from the target width and signed-ness.
413         llvm::APSInt ConvertedValue = InitializerValue;
414         ConvertedValue = ConvertedValue.trunc(ToWidth);
415         ConvertedValue.setIsSigned(ToSigned);
416         ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
417         ConvertedValue.setIsSigned(InitializerValue.isSigned());
418         // If the result is different, this was a narrowing conversion.
419         if (ConvertedValue != InitializerValue) {
420           ConstantType = Initializer->getType();
421           return NK_Constant_Narrowing;
422         }
423       }
424     }
425     return NK_Not_Narrowing;
426   }
427 
428   default:
429     // Other kinds of conversions are not narrowings.
430     return NK_Not_Narrowing;
431   }
432 }
433 
434 /// DebugPrint - Print this standard conversion sequence to standard
435 /// error. Useful for debugging overloading issues.
436 void StandardConversionSequence::DebugPrint() const {
437   raw_ostream &OS = llvm::errs();
438   bool PrintedSomething = false;
439   if (First != ICK_Identity) {
440     OS << GetImplicitConversionName(First);
441     PrintedSomething = true;
442   }
443 
444   if (Second != ICK_Identity) {
445     if (PrintedSomething) {
446       OS << " -> ";
447     }
448     OS << GetImplicitConversionName(Second);
449 
450     if (CopyConstructor) {
451       OS << " (by copy constructor)";
452     } else if (DirectBinding) {
453       OS << " (direct reference binding)";
454     } else if (ReferenceBinding) {
455       OS << " (reference binding)";
456     }
457     PrintedSomething = true;
458   }
459 
460   if (Third != ICK_Identity) {
461     if (PrintedSomething) {
462       OS << " -> ";
463     }
464     OS << GetImplicitConversionName(Third);
465     PrintedSomething = true;
466   }
467 
468   if (!PrintedSomething) {
469     OS << "No conversions required";
470   }
471 }
472 
473 /// DebugPrint - Print this user-defined conversion sequence to standard
474 /// error. Useful for debugging overloading issues.
475 void UserDefinedConversionSequence::DebugPrint() const {
476   raw_ostream &OS = llvm::errs();
477   if (Before.First || Before.Second || Before.Third) {
478     Before.DebugPrint();
479     OS << " -> ";
480   }
481   if (ConversionFunction)
482     OS << '\'' << *ConversionFunction << '\'';
483   else
484     OS << "aggregate initialization";
485   if (After.First || After.Second || After.Third) {
486     OS << " -> ";
487     After.DebugPrint();
488   }
489 }
490 
491 /// DebugPrint - Print this implicit conversion sequence to standard
492 /// error. Useful for debugging overloading issues.
493 void ImplicitConversionSequence::DebugPrint() const {
494   raw_ostream &OS = llvm::errs();
495   switch (ConversionKind) {
496   case StandardConversion:
497     OS << "Standard conversion: ";
498     Standard.DebugPrint();
499     break;
500   case UserDefinedConversion:
501     OS << "User-defined conversion: ";
502     UserDefined.DebugPrint();
503     break;
504   case EllipsisConversion:
505     OS << "Ellipsis conversion";
506     break;
507   case AmbiguousConversion:
508     OS << "Ambiguous conversion";
509     break;
510   case BadConversion:
511     OS << "Bad conversion";
512     break;
513   }
514 
515   OS << "\n";
516 }
517 
518 void AmbiguousConversionSequence::construct() {
519   new (&conversions()) ConversionSet();
520 }
521 
522 void AmbiguousConversionSequence::destruct() {
523   conversions().~ConversionSet();
524 }
525 
526 void
527 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
528   FromTypePtr = O.FromTypePtr;
529   ToTypePtr = O.ToTypePtr;
530   new (&conversions()) ConversionSet(O.conversions());
531 }
532 
533 namespace {
534   // Structure used by OverloadCandidate::DeductionFailureInfo to store
535   // template parameter and template argument information.
536   struct DFIParamWithArguments {
537     TemplateParameter Param;
538     TemplateArgument FirstArg;
539     TemplateArgument SecondArg;
540   };
541 }
542 
543 /// \brief Convert from Sema's representation of template deduction information
544 /// to the form used in overload-candidate information.
545 OverloadCandidate::DeductionFailureInfo
546 static MakeDeductionFailureInfo(ASTContext &Context,
547                                 Sema::TemplateDeductionResult TDK,
548                                 TemplateDeductionInfo &Info) {
549   OverloadCandidate::DeductionFailureInfo Result;
550   Result.Result = static_cast<unsigned>(TDK);
551   Result.HasDiagnostic = false;
552   Result.Data = 0;
553   switch (TDK) {
554   case Sema::TDK_Success:
555   case Sema::TDK_InstantiationDepth:
556   case Sema::TDK_TooManyArguments:
557   case Sema::TDK_TooFewArguments:
558     break;
559 
560   case Sema::TDK_Incomplete:
561   case Sema::TDK_InvalidExplicitArguments:
562     Result.Data = Info.Param.getOpaqueValue();
563     break;
564 
565   case Sema::TDK_Inconsistent:
566   case Sema::TDK_Underqualified: {
567     // FIXME: Should allocate from normal heap so that we can free this later.
568     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
569     Saved->Param = Info.Param;
570     Saved->FirstArg = Info.FirstArg;
571     Saved->SecondArg = Info.SecondArg;
572     Result.Data = Saved;
573     break;
574   }
575 
576   case Sema::TDK_SubstitutionFailure:
577     Result.Data = Info.take();
578     if (Info.hasSFINAEDiagnostic()) {
579       PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
580           SourceLocation(), PartialDiagnostic::NullDiagnostic());
581       Info.takeSFINAEDiagnostic(*Diag);
582       Result.HasDiagnostic = true;
583     }
584     break;
585 
586   case Sema::TDK_NonDeducedMismatch:
587   case Sema::TDK_FailedOverloadResolution:
588     break;
589   }
590 
591   return Result;
592 }
593 
594 void OverloadCandidate::DeductionFailureInfo::Destroy() {
595   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
596   case Sema::TDK_Success:
597   case Sema::TDK_InstantiationDepth:
598   case Sema::TDK_Incomplete:
599   case Sema::TDK_TooManyArguments:
600   case Sema::TDK_TooFewArguments:
601   case Sema::TDK_InvalidExplicitArguments:
602     break;
603 
604   case Sema::TDK_Inconsistent:
605   case Sema::TDK_Underqualified:
606     // FIXME: Destroy the data?
607     Data = 0;
608     break;
609 
610   case Sema::TDK_SubstitutionFailure:
611     // FIXME: Destroy the template argument list?
612     Data = 0;
613     if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
614       Diag->~PartialDiagnosticAt();
615       HasDiagnostic = false;
616     }
617     break;
618 
619   // Unhandled
620   case Sema::TDK_NonDeducedMismatch:
621   case Sema::TDK_FailedOverloadResolution:
622     break;
623   }
624 }
625 
626 PartialDiagnosticAt *
627 OverloadCandidate::DeductionFailureInfo::getSFINAEDiagnostic() {
628   if (HasDiagnostic)
629     return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
630   return 0;
631 }
632 
633 TemplateParameter
634 OverloadCandidate::DeductionFailureInfo::getTemplateParameter() {
635   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
636   case Sema::TDK_Success:
637   case Sema::TDK_InstantiationDepth:
638   case Sema::TDK_TooManyArguments:
639   case Sema::TDK_TooFewArguments:
640   case Sema::TDK_SubstitutionFailure:
641     return TemplateParameter();
642 
643   case Sema::TDK_Incomplete:
644   case Sema::TDK_InvalidExplicitArguments:
645     return TemplateParameter::getFromOpaqueValue(Data);
646 
647   case Sema::TDK_Inconsistent:
648   case Sema::TDK_Underqualified:
649     return static_cast<DFIParamWithArguments*>(Data)->Param;
650 
651   // Unhandled
652   case Sema::TDK_NonDeducedMismatch:
653   case Sema::TDK_FailedOverloadResolution:
654     break;
655   }
656 
657   return TemplateParameter();
658 }
659 
660 TemplateArgumentList *
661 OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() {
662   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
663     case Sema::TDK_Success:
664     case Sema::TDK_InstantiationDepth:
665     case Sema::TDK_TooManyArguments:
666     case Sema::TDK_TooFewArguments:
667     case Sema::TDK_Incomplete:
668     case Sema::TDK_InvalidExplicitArguments:
669     case Sema::TDK_Inconsistent:
670     case Sema::TDK_Underqualified:
671       return 0;
672 
673     case Sema::TDK_SubstitutionFailure:
674       return static_cast<TemplateArgumentList*>(Data);
675 
676     // Unhandled
677     case Sema::TDK_NonDeducedMismatch:
678     case Sema::TDK_FailedOverloadResolution:
679       break;
680   }
681 
682   return 0;
683 }
684 
685 const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() {
686   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
687   case Sema::TDK_Success:
688   case Sema::TDK_InstantiationDepth:
689   case Sema::TDK_Incomplete:
690   case Sema::TDK_TooManyArguments:
691   case Sema::TDK_TooFewArguments:
692   case Sema::TDK_InvalidExplicitArguments:
693   case Sema::TDK_SubstitutionFailure:
694     return 0;
695 
696   case Sema::TDK_Inconsistent:
697   case Sema::TDK_Underqualified:
698     return &static_cast<DFIParamWithArguments*>(Data)->FirstArg;
699 
700   // Unhandled
701   case Sema::TDK_NonDeducedMismatch:
702   case Sema::TDK_FailedOverloadResolution:
703     break;
704   }
705 
706   return 0;
707 }
708 
709 const TemplateArgument *
710 OverloadCandidate::DeductionFailureInfo::getSecondArg() {
711   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
712   case Sema::TDK_Success:
713   case Sema::TDK_InstantiationDepth:
714   case Sema::TDK_Incomplete:
715   case Sema::TDK_TooManyArguments:
716   case Sema::TDK_TooFewArguments:
717   case Sema::TDK_InvalidExplicitArguments:
718   case Sema::TDK_SubstitutionFailure:
719     return 0;
720 
721   case Sema::TDK_Inconsistent:
722   case Sema::TDK_Underqualified:
723     return &static_cast<DFIParamWithArguments*>(Data)->SecondArg;
724 
725   // Unhandled
726   case Sema::TDK_NonDeducedMismatch:
727   case Sema::TDK_FailedOverloadResolution:
728     break;
729   }
730 
731   return 0;
732 }
733 
734 void OverloadCandidateSet::clear() {
735   for (iterator i = begin(), e = end(); i != e; ++i)
736     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
737       i->Conversions[ii].~ImplicitConversionSequence();
738   NumInlineSequences = 0;
739   Candidates.clear();
740   Functions.clear();
741 }
742 
743 namespace {
744   class UnbridgedCastsSet {
745     struct Entry {
746       Expr **Addr;
747       Expr *Saved;
748     };
749     SmallVector<Entry, 2> Entries;
750 
751   public:
752     void save(Sema &S, Expr *&E) {
753       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
754       Entry entry = { &E, E };
755       Entries.push_back(entry);
756       E = S.stripARCUnbridgedCast(E);
757     }
758 
759     void restore() {
760       for (SmallVectorImpl<Entry>::iterator
761              i = Entries.begin(), e = Entries.end(); i != e; ++i)
762         *i->Addr = i->Saved;
763     }
764   };
765 }
766 
767 /// checkPlaceholderForOverload - Do any interesting placeholder-like
768 /// preprocessing on the given expression.
769 ///
770 /// \param unbridgedCasts a collection to which to add unbridged casts;
771 ///   without this, they will be immediately diagnosed as errors
772 ///
773 /// Return true on unrecoverable error.
774 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
775                                         UnbridgedCastsSet *unbridgedCasts = 0) {
776   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
777     // We can't handle overloaded expressions here because overload
778     // resolution might reasonably tweak them.
779     if (placeholder->getKind() == BuiltinType::Overload) return false;
780 
781     // If the context potentially accepts unbridged ARC casts, strip
782     // the unbridged cast and add it to the collection for later restoration.
783     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
784         unbridgedCasts) {
785       unbridgedCasts->save(S, E);
786       return false;
787     }
788 
789     // Go ahead and check everything else.
790     ExprResult result = S.CheckPlaceholderExpr(E);
791     if (result.isInvalid())
792       return true;
793 
794     E = result.take();
795     return false;
796   }
797 
798   // Nothing to do.
799   return false;
800 }
801 
802 /// checkArgPlaceholdersForOverload - Check a set of call operands for
803 /// placeholders.
804 static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args,
805                                             unsigned numArgs,
806                                             UnbridgedCastsSet &unbridged) {
807   for (unsigned i = 0; i != numArgs; ++i)
808     if (checkPlaceholderForOverload(S, args[i], &unbridged))
809       return true;
810 
811   return false;
812 }
813 
814 // IsOverload - Determine whether the given New declaration is an
815 // overload of the declarations in Old. This routine returns false if
816 // New and Old cannot be overloaded, e.g., if New has the same
817 // signature as some function in Old (C++ 1.3.10) or if the Old
818 // declarations aren't functions (or function templates) at all. When
819 // it does return false, MatchedDecl will point to the decl that New
820 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
821 // top of the underlying declaration.
822 //
823 // Example: Given the following input:
824 //
825 //   void f(int, float); // #1
826 //   void f(int, int); // #2
827 //   int f(int, int); // #3
828 //
829 // When we process #1, there is no previous declaration of "f",
830 // so IsOverload will not be used.
831 //
832 // When we process #2, Old contains only the FunctionDecl for #1.  By
833 // comparing the parameter types, we see that #1 and #2 are overloaded
834 // (since they have different signatures), so this routine returns
835 // false; MatchedDecl is unchanged.
836 //
837 // When we process #3, Old is an overload set containing #1 and #2. We
838 // compare the signatures of #3 to #1 (they're overloaded, so we do
839 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
840 // identical (return types of functions are not part of the
841 // signature), IsOverload returns false and MatchedDecl will be set to
842 // point to the FunctionDecl for #2.
843 //
844 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
845 // into a class by a using declaration.  The rules for whether to hide
846 // shadow declarations ignore some properties which otherwise figure
847 // into a function template's signature.
848 Sema::OverloadKind
849 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
850                     NamedDecl *&Match, bool NewIsUsingDecl) {
851   for (LookupResult::iterator I = Old.begin(), E = Old.end();
852          I != E; ++I) {
853     NamedDecl *OldD = *I;
854 
855     bool OldIsUsingDecl = false;
856     if (isa<UsingShadowDecl>(OldD)) {
857       OldIsUsingDecl = true;
858 
859       // We can always introduce two using declarations into the same
860       // context, even if they have identical signatures.
861       if (NewIsUsingDecl) continue;
862 
863       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
864     }
865 
866     // If either declaration was introduced by a using declaration,
867     // we'll need to use slightly different rules for matching.
868     // Essentially, these rules are the normal rules, except that
869     // function templates hide function templates with different
870     // return types or template parameter lists.
871     bool UseMemberUsingDeclRules =
872       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord();
873 
874     if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
875       if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
876         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
877           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
878           continue;
879         }
880 
881         Match = *I;
882         return Ovl_Match;
883       }
884     } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
885       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
886         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
887           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
888           continue;
889         }
890 
891         Match = *I;
892         return Ovl_Match;
893       }
894     } else if (isa<UsingDecl>(OldD)) {
895       // We can overload with these, which can show up when doing
896       // redeclaration checks for UsingDecls.
897       assert(Old.getLookupKind() == LookupUsingDeclName);
898     } else if (isa<TagDecl>(OldD)) {
899       // We can always overload with tags by hiding them.
900     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
901       // Optimistically assume that an unresolved using decl will
902       // overload; if it doesn't, we'll have to diagnose during
903       // template instantiation.
904     } else {
905       // (C++ 13p1):
906       //   Only function declarations can be overloaded; object and type
907       //   declarations cannot be overloaded.
908       Match = *I;
909       return Ovl_NonFunction;
910     }
911   }
912 
913   return Ovl_Overload;
914 }
915 
916 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
917                       bool UseUsingDeclRules) {
918   // If both of the functions are extern "C", then they are not
919   // overloads.
920   if (Old->isExternC() && New->isExternC())
921     return false;
922 
923   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
924   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
925 
926   // C++ [temp.fct]p2:
927   //   A function template can be overloaded with other function templates
928   //   and with normal (non-template) functions.
929   if ((OldTemplate == 0) != (NewTemplate == 0))
930     return true;
931 
932   // Is the function New an overload of the function Old?
933   QualType OldQType = Context.getCanonicalType(Old->getType());
934   QualType NewQType = Context.getCanonicalType(New->getType());
935 
936   // Compare the signatures (C++ 1.3.10) of the two functions to
937   // determine whether they are overloads. If we find any mismatch
938   // in the signature, they are overloads.
939 
940   // If either of these functions is a K&R-style function (no
941   // prototype), then we consider them to have matching signatures.
942   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
943       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
944     return false;
945 
946   const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
947   const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
948 
949   // The signature of a function includes the types of its
950   // parameters (C++ 1.3.10), which includes the presence or absence
951   // of the ellipsis; see C++ DR 357).
952   if (OldQType != NewQType &&
953       (OldType->getNumArgs() != NewType->getNumArgs() ||
954        OldType->isVariadic() != NewType->isVariadic() ||
955        !FunctionArgTypesAreEqual(OldType, NewType)))
956     return true;
957 
958   // C++ [temp.over.link]p4:
959   //   The signature of a function template consists of its function
960   //   signature, its return type and its template parameter list. The names
961   //   of the template parameters are significant only for establishing the
962   //   relationship between the template parameters and the rest of the
963   //   signature.
964   //
965   // We check the return type and template parameter lists for function
966   // templates first; the remaining checks follow.
967   //
968   // However, we don't consider either of these when deciding whether
969   // a member introduced by a shadow declaration is hidden.
970   if (!UseUsingDeclRules && NewTemplate &&
971       (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
972                                        OldTemplate->getTemplateParameters(),
973                                        false, TPL_TemplateMatch) ||
974        OldType->getResultType() != NewType->getResultType()))
975     return true;
976 
977   // If the function is a class member, its signature includes the
978   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
979   //
980   // As part of this, also check whether one of the member functions
981   // is static, in which case they are not overloads (C++
982   // 13.1p2). While not part of the definition of the signature,
983   // this check is important to determine whether these functions
984   // can be overloaded.
985   CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
986   CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
987   if (OldMethod && NewMethod &&
988       !OldMethod->isStatic() && !NewMethod->isStatic() &&
989       (OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers() ||
990        OldMethod->getRefQualifier() != NewMethod->getRefQualifier())) {
991     if (!UseUsingDeclRules &&
992         OldMethod->getRefQualifier() != NewMethod->getRefQualifier() &&
993         (OldMethod->getRefQualifier() == RQ_None ||
994          NewMethod->getRefQualifier() == RQ_None)) {
995       // C++0x [over.load]p2:
996       //   - Member function declarations with the same name and the same
997       //     parameter-type-list as well as member function template
998       //     declarations with the same name, the same parameter-type-list, and
999       //     the same template parameter lists cannot be overloaded if any of
1000       //     them, but not all, have a ref-qualifier (8.3.5).
1001       Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1002         << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1003       Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1004     }
1005 
1006     return true;
1007   }
1008 
1009   // The signatures match; this is not an overload.
1010   return false;
1011 }
1012 
1013 /// \brief Checks availability of the function depending on the current
1014 /// function context. Inside an unavailable function, unavailability is ignored.
1015 ///
1016 /// \returns true if \arg FD is unavailable and current context is inside
1017 /// an available function, false otherwise.
1018 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1019   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1020 }
1021 
1022 /// \brief Tries a user-defined conversion from From to ToType.
1023 ///
1024 /// Produces an implicit conversion sequence for when a standard conversion
1025 /// is not an option. See TryImplicitConversion for more information.
1026 static ImplicitConversionSequence
1027 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1028                          bool SuppressUserConversions,
1029                          bool AllowExplicit,
1030                          bool InOverloadResolution,
1031                          bool CStyle,
1032                          bool AllowObjCWritebackConversion) {
1033   ImplicitConversionSequence ICS;
1034 
1035   if (SuppressUserConversions) {
1036     // We're not in the case above, so there is no conversion that
1037     // we can perform.
1038     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1039     return ICS;
1040   }
1041 
1042   // Attempt user-defined conversion.
1043   OverloadCandidateSet Conversions(From->getExprLoc());
1044   OverloadingResult UserDefResult
1045     = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1046                               AllowExplicit);
1047 
1048   if (UserDefResult == OR_Success) {
1049     ICS.setUserDefined();
1050     // C++ [over.ics.user]p4:
1051     //   A conversion of an expression of class type to the same class
1052     //   type is given Exact Match rank, and a conversion of an
1053     //   expression of class type to a base class of that type is
1054     //   given Conversion rank, in spite of the fact that a copy
1055     //   constructor (i.e., a user-defined conversion function) is
1056     //   called for those cases.
1057     if (CXXConstructorDecl *Constructor
1058           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1059       QualType FromCanon
1060         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1061       QualType ToCanon
1062         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1063       if (Constructor->isCopyConstructor() &&
1064           (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1065         // Turn this into a "standard" conversion sequence, so that it
1066         // gets ranked with standard conversion sequences.
1067         ICS.setStandard();
1068         ICS.Standard.setAsIdentityConversion();
1069         ICS.Standard.setFromType(From->getType());
1070         ICS.Standard.setAllToTypes(ToType);
1071         ICS.Standard.CopyConstructor = Constructor;
1072         if (ToCanon != FromCanon)
1073           ICS.Standard.Second = ICK_Derived_To_Base;
1074       }
1075     }
1076 
1077     // C++ [over.best.ics]p4:
1078     //   However, when considering the argument of a user-defined
1079     //   conversion function that is a candidate by 13.3.1.3 when
1080     //   invoked for the copying of the temporary in the second step
1081     //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1082     //   13.3.1.6 in all cases, only standard conversion sequences and
1083     //   ellipsis conversion sequences are allowed.
1084     if (SuppressUserConversions && ICS.isUserDefined()) {
1085       ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1086     }
1087   } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1088     ICS.setAmbiguous();
1089     ICS.Ambiguous.setFromType(From->getType());
1090     ICS.Ambiguous.setToType(ToType);
1091     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1092          Cand != Conversions.end(); ++Cand)
1093       if (Cand->Viable)
1094         ICS.Ambiguous.addConversion(Cand->Function);
1095   } else {
1096     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1097   }
1098 
1099   return ICS;
1100 }
1101 
1102 /// TryImplicitConversion - Attempt to perform an implicit conversion
1103 /// from the given expression (Expr) to the given type (ToType). This
1104 /// function returns an implicit conversion sequence that can be used
1105 /// to perform the initialization. Given
1106 ///
1107 ///   void f(float f);
1108 ///   void g(int i) { f(i); }
1109 ///
1110 /// this routine would produce an implicit conversion sequence to
1111 /// describe the initialization of f from i, which will be a standard
1112 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1113 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1114 //
1115 /// Note that this routine only determines how the conversion can be
1116 /// performed; it does not actually perform the conversion. As such,
1117 /// it will not produce any diagnostics if no conversion is available,
1118 /// but will instead return an implicit conversion sequence of kind
1119 /// "BadConversion".
1120 ///
1121 /// If @p SuppressUserConversions, then user-defined conversions are
1122 /// not permitted.
1123 /// If @p AllowExplicit, then explicit user-defined conversions are
1124 /// permitted.
1125 ///
1126 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1127 /// writeback conversion, which allows __autoreleasing id* parameters to
1128 /// be initialized with __strong id* or __weak id* arguments.
1129 static ImplicitConversionSequence
1130 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1131                       bool SuppressUserConversions,
1132                       bool AllowExplicit,
1133                       bool InOverloadResolution,
1134                       bool CStyle,
1135                       bool AllowObjCWritebackConversion) {
1136   ImplicitConversionSequence ICS;
1137   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1138                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1139     ICS.setStandard();
1140     return ICS;
1141   }
1142 
1143   if (!S.getLangOpts().CPlusPlus) {
1144     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1145     return ICS;
1146   }
1147 
1148   // C++ [over.ics.user]p4:
1149   //   A conversion of an expression of class type to the same class
1150   //   type is given Exact Match rank, and a conversion of an
1151   //   expression of class type to a base class of that type is
1152   //   given Conversion rank, in spite of the fact that a copy/move
1153   //   constructor (i.e., a user-defined conversion function) is
1154   //   called for those cases.
1155   QualType FromType = From->getType();
1156   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1157       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1158        S.IsDerivedFrom(FromType, ToType))) {
1159     ICS.setStandard();
1160     ICS.Standard.setAsIdentityConversion();
1161     ICS.Standard.setFromType(FromType);
1162     ICS.Standard.setAllToTypes(ToType);
1163 
1164     // We don't actually check at this point whether there is a valid
1165     // copy/move constructor, since overloading just assumes that it
1166     // exists. When we actually perform initialization, we'll find the
1167     // appropriate constructor to copy the returned object, if needed.
1168     ICS.Standard.CopyConstructor = 0;
1169 
1170     // Determine whether this is considered a derived-to-base conversion.
1171     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1172       ICS.Standard.Second = ICK_Derived_To_Base;
1173 
1174     return ICS;
1175   }
1176 
1177   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1178                                   AllowExplicit, InOverloadResolution, CStyle,
1179                                   AllowObjCWritebackConversion);
1180 }
1181 
1182 ImplicitConversionSequence
1183 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1184                             bool SuppressUserConversions,
1185                             bool AllowExplicit,
1186                             bool InOverloadResolution,
1187                             bool CStyle,
1188                             bool AllowObjCWritebackConversion) {
1189   return clang::TryImplicitConversion(*this, From, ToType,
1190                                       SuppressUserConversions, AllowExplicit,
1191                                       InOverloadResolution, CStyle,
1192                                       AllowObjCWritebackConversion);
1193 }
1194 
1195 /// PerformImplicitConversion - Perform an implicit conversion of the
1196 /// expression From to the type ToType. Returns the
1197 /// converted expression. Flavor is the kind of conversion we're
1198 /// performing, used in the error message. If @p AllowExplicit,
1199 /// explicit user-defined conversions are permitted.
1200 ExprResult
1201 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1202                                 AssignmentAction Action, bool AllowExplicit) {
1203   ImplicitConversionSequence ICS;
1204   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1205 }
1206 
1207 ExprResult
1208 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1209                                 AssignmentAction Action, bool AllowExplicit,
1210                                 ImplicitConversionSequence& ICS) {
1211   if (checkPlaceholderForOverload(*this, From))
1212     return ExprError();
1213 
1214   // Objective-C ARC: Determine whether we will allow the writeback conversion.
1215   bool AllowObjCWritebackConversion
1216     = getLangOpts().ObjCAutoRefCount &&
1217       (Action == AA_Passing || Action == AA_Sending);
1218 
1219   ICS = clang::TryImplicitConversion(*this, From, ToType,
1220                                      /*SuppressUserConversions=*/false,
1221                                      AllowExplicit,
1222                                      /*InOverloadResolution=*/false,
1223                                      /*CStyle=*/false,
1224                                      AllowObjCWritebackConversion);
1225   return PerformImplicitConversion(From, ToType, ICS, Action);
1226 }
1227 
1228 /// \brief Determine whether the conversion from FromType to ToType is a valid
1229 /// conversion that strips "noreturn" off the nested function type.
1230 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1231                                 QualType &ResultTy) {
1232   if (Context.hasSameUnqualifiedType(FromType, ToType))
1233     return false;
1234 
1235   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1236   // where F adds one of the following at most once:
1237   //   - a pointer
1238   //   - a member pointer
1239   //   - a block pointer
1240   CanQualType CanTo = Context.getCanonicalType(ToType);
1241   CanQualType CanFrom = Context.getCanonicalType(FromType);
1242   Type::TypeClass TyClass = CanTo->getTypeClass();
1243   if (TyClass != CanFrom->getTypeClass()) return false;
1244   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1245     if (TyClass == Type::Pointer) {
1246       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1247       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1248     } else if (TyClass == Type::BlockPointer) {
1249       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1250       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1251     } else if (TyClass == Type::MemberPointer) {
1252       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1253       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1254     } else {
1255       return false;
1256     }
1257 
1258     TyClass = CanTo->getTypeClass();
1259     if (TyClass != CanFrom->getTypeClass()) return false;
1260     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1261       return false;
1262   }
1263 
1264   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1265   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1266   if (!EInfo.getNoReturn()) return false;
1267 
1268   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1269   assert(QualType(FromFn, 0).isCanonical());
1270   if (QualType(FromFn, 0) != CanTo) return false;
1271 
1272   ResultTy = ToType;
1273   return true;
1274 }
1275 
1276 /// \brief Determine whether the conversion from FromType to ToType is a valid
1277 /// vector conversion.
1278 ///
1279 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1280 /// conversion.
1281 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1282                                QualType ToType, ImplicitConversionKind &ICK) {
1283   // We need at least one of these types to be a vector type to have a vector
1284   // conversion.
1285   if (!ToType->isVectorType() && !FromType->isVectorType())
1286     return false;
1287 
1288   // Identical types require no conversions.
1289   if (Context.hasSameUnqualifiedType(FromType, ToType))
1290     return false;
1291 
1292   // There are no conversions between extended vector types, only identity.
1293   if (ToType->isExtVectorType()) {
1294     // There are no conversions between extended vector types other than the
1295     // identity conversion.
1296     if (FromType->isExtVectorType())
1297       return false;
1298 
1299     // Vector splat from any arithmetic type to a vector.
1300     if (FromType->isArithmeticType()) {
1301       ICK = ICK_Vector_Splat;
1302       return true;
1303     }
1304   }
1305 
1306   // We can perform the conversion between vector types in the following cases:
1307   // 1)vector types are equivalent AltiVec and GCC vector types
1308   // 2)lax vector conversions are permitted and the vector types are of the
1309   //   same size
1310   if (ToType->isVectorType() && FromType->isVectorType()) {
1311     if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1312         (Context.getLangOpts().LaxVectorConversions &&
1313          (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1314       ICK = ICK_Vector_Conversion;
1315       return true;
1316     }
1317   }
1318 
1319   return false;
1320 }
1321 
1322 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1323                                 bool InOverloadResolution,
1324                                 StandardConversionSequence &SCS,
1325                                 bool CStyle);
1326 
1327 /// IsStandardConversion - Determines whether there is a standard
1328 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1329 /// expression From to the type ToType. Standard conversion sequences
1330 /// only consider non-class types; for conversions that involve class
1331 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1332 /// contain the standard conversion sequence required to perform this
1333 /// conversion and this routine will return true. Otherwise, this
1334 /// routine will return false and the value of SCS is unspecified.
1335 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1336                                  bool InOverloadResolution,
1337                                  StandardConversionSequence &SCS,
1338                                  bool CStyle,
1339                                  bool AllowObjCWritebackConversion) {
1340   QualType FromType = From->getType();
1341 
1342   // Standard conversions (C++ [conv])
1343   SCS.setAsIdentityConversion();
1344   SCS.DeprecatedStringLiteralToCharPtr = false;
1345   SCS.IncompatibleObjC = false;
1346   SCS.setFromType(FromType);
1347   SCS.CopyConstructor = 0;
1348 
1349   // There are no standard conversions for class types in C++, so
1350   // abort early. When overloading in C, however, we do permit
1351   if (FromType->isRecordType() || ToType->isRecordType()) {
1352     if (S.getLangOpts().CPlusPlus)
1353       return false;
1354 
1355     // When we're overloading in C, we allow, as standard conversions,
1356   }
1357 
1358   // The first conversion can be an lvalue-to-rvalue conversion,
1359   // array-to-pointer conversion, or function-to-pointer conversion
1360   // (C++ 4p1).
1361 
1362   if (FromType == S.Context.OverloadTy) {
1363     DeclAccessPair AccessPair;
1364     if (FunctionDecl *Fn
1365           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1366                                                  AccessPair)) {
1367       // We were able to resolve the address of the overloaded function,
1368       // so we can convert to the type of that function.
1369       FromType = Fn->getType();
1370 
1371       // we can sometimes resolve &foo<int> regardless of ToType, so check
1372       // if the type matches (identity) or we are converting to bool
1373       if (!S.Context.hasSameUnqualifiedType(
1374                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1375         QualType resultTy;
1376         // if the function type matches except for [[noreturn]], it's ok
1377         if (!S.IsNoReturnConversion(FromType,
1378               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1379           // otherwise, only a boolean conversion is standard
1380           if (!ToType->isBooleanType())
1381             return false;
1382       }
1383 
1384       // Check if the "from" expression is taking the address of an overloaded
1385       // function and recompute the FromType accordingly. Take advantage of the
1386       // fact that non-static member functions *must* have such an address-of
1387       // expression.
1388       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1389       if (Method && !Method->isStatic()) {
1390         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1391                "Non-unary operator on non-static member address");
1392         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1393                == UO_AddrOf &&
1394                "Non-address-of operator on non-static member address");
1395         const Type *ClassType
1396           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1397         FromType = S.Context.getMemberPointerType(FromType, ClassType);
1398       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1399         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1400                UO_AddrOf &&
1401                "Non-address-of operator for overloaded function expression");
1402         FromType = S.Context.getPointerType(FromType);
1403       }
1404 
1405       // Check that we've computed the proper type after overload resolution.
1406       assert(S.Context.hasSameType(
1407         FromType,
1408         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1409     } else {
1410       return false;
1411     }
1412   }
1413   // Lvalue-to-rvalue conversion (C++11 4.1):
1414   //   A glvalue (3.10) of a non-function, non-array type T can
1415   //   be converted to a prvalue.
1416   bool argIsLValue = From->isGLValue();
1417   if (argIsLValue &&
1418       !FromType->isFunctionType() && !FromType->isArrayType() &&
1419       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1420     SCS.First = ICK_Lvalue_To_Rvalue;
1421 
1422     // C11 6.3.2.1p2:
1423     //   ... if the lvalue has atomic type, the value has the non-atomic version
1424     //   of the type of the lvalue ...
1425     if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1426       FromType = Atomic->getValueType();
1427 
1428     // If T is a non-class type, the type of the rvalue is the
1429     // cv-unqualified version of T. Otherwise, the type of the rvalue
1430     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1431     // just strip the qualifiers because they don't matter.
1432     FromType = FromType.getUnqualifiedType();
1433   } else if (FromType->isArrayType()) {
1434     // Array-to-pointer conversion (C++ 4.2)
1435     SCS.First = ICK_Array_To_Pointer;
1436 
1437     // An lvalue or rvalue of type "array of N T" or "array of unknown
1438     // bound of T" can be converted to an rvalue of type "pointer to
1439     // T" (C++ 4.2p1).
1440     FromType = S.Context.getArrayDecayedType(FromType);
1441 
1442     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1443       // This conversion is deprecated. (C++ D.4).
1444       SCS.DeprecatedStringLiteralToCharPtr = true;
1445 
1446       // For the purpose of ranking in overload resolution
1447       // (13.3.3.1.1), this conversion is considered an
1448       // array-to-pointer conversion followed by a qualification
1449       // conversion (4.4). (C++ 4.2p2)
1450       SCS.Second = ICK_Identity;
1451       SCS.Third = ICK_Qualification;
1452       SCS.QualificationIncludesObjCLifetime = false;
1453       SCS.setAllToTypes(FromType);
1454       return true;
1455     }
1456   } else if (FromType->isFunctionType() && argIsLValue) {
1457     // Function-to-pointer conversion (C++ 4.3).
1458     SCS.First = ICK_Function_To_Pointer;
1459 
1460     // An lvalue of function type T can be converted to an rvalue of
1461     // type "pointer to T." The result is a pointer to the
1462     // function. (C++ 4.3p1).
1463     FromType = S.Context.getPointerType(FromType);
1464   } else {
1465     // We don't require any conversions for the first step.
1466     SCS.First = ICK_Identity;
1467   }
1468   SCS.setToType(0, FromType);
1469 
1470   // The second conversion can be an integral promotion, floating
1471   // point promotion, integral conversion, floating point conversion,
1472   // floating-integral conversion, pointer conversion,
1473   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1474   // For overloading in C, this can also be a "compatible-type"
1475   // conversion.
1476   bool IncompatibleObjC = false;
1477   ImplicitConversionKind SecondICK = ICK_Identity;
1478   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1479     // The unqualified versions of the types are the same: there's no
1480     // conversion to do.
1481     SCS.Second = ICK_Identity;
1482   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1483     // Integral promotion (C++ 4.5).
1484     SCS.Second = ICK_Integral_Promotion;
1485     FromType = ToType.getUnqualifiedType();
1486   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1487     // Floating point promotion (C++ 4.6).
1488     SCS.Second = ICK_Floating_Promotion;
1489     FromType = ToType.getUnqualifiedType();
1490   } else if (S.IsComplexPromotion(FromType, ToType)) {
1491     // Complex promotion (Clang extension)
1492     SCS.Second = ICK_Complex_Promotion;
1493     FromType = ToType.getUnqualifiedType();
1494   } else if (ToType->isBooleanType() &&
1495              (FromType->isArithmeticType() ||
1496               FromType->isAnyPointerType() ||
1497               FromType->isBlockPointerType() ||
1498               FromType->isMemberPointerType() ||
1499               FromType->isNullPtrType())) {
1500     // Boolean conversions (C++ 4.12).
1501     SCS.Second = ICK_Boolean_Conversion;
1502     FromType = S.Context.BoolTy;
1503   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1504              ToType->isIntegralType(S.Context)) {
1505     // Integral conversions (C++ 4.7).
1506     SCS.Second = ICK_Integral_Conversion;
1507     FromType = ToType.getUnqualifiedType();
1508   } else if (FromType->isAnyComplexType() && ToType->isComplexType()) {
1509     // Complex conversions (C99 6.3.1.6)
1510     SCS.Second = ICK_Complex_Conversion;
1511     FromType = ToType.getUnqualifiedType();
1512   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1513              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1514     // Complex-real conversions (C99 6.3.1.7)
1515     SCS.Second = ICK_Complex_Real;
1516     FromType = ToType.getUnqualifiedType();
1517   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1518     // Floating point conversions (C++ 4.8).
1519     SCS.Second = ICK_Floating_Conversion;
1520     FromType = ToType.getUnqualifiedType();
1521   } else if ((FromType->isRealFloatingType() &&
1522               ToType->isIntegralType(S.Context)) ||
1523              (FromType->isIntegralOrUnscopedEnumerationType() &&
1524               ToType->isRealFloatingType())) {
1525     // Floating-integral conversions (C++ 4.9).
1526     SCS.Second = ICK_Floating_Integral;
1527     FromType = ToType.getUnqualifiedType();
1528   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1529     SCS.Second = ICK_Block_Pointer_Conversion;
1530   } else if (AllowObjCWritebackConversion &&
1531              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1532     SCS.Second = ICK_Writeback_Conversion;
1533   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1534                                    FromType, IncompatibleObjC)) {
1535     // Pointer conversions (C++ 4.10).
1536     SCS.Second = ICK_Pointer_Conversion;
1537     SCS.IncompatibleObjC = IncompatibleObjC;
1538     FromType = FromType.getUnqualifiedType();
1539   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1540                                          InOverloadResolution, FromType)) {
1541     // Pointer to member conversions (4.11).
1542     SCS.Second = ICK_Pointer_Member;
1543   } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1544     SCS.Second = SecondICK;
1545     FromType = ToType.getUnqualifiedType();
1546   } else if (!S.getLangOpts().CPlusPlus &&
1547              S.Context.typesAreCompatible(ToType, FromType)) {
1548     // Compatible conversions (Clang extension for C function overloading)
1549     SCS.Second = ICK_Compatible_Conversion;
1550     FromType = ToType.getUnqualifiedType();
1551   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1552     // Treat a conversion that strips "noreturn" as an identity conversion.
1553     SCS.Second = ICK_NoReturn_Adjustment;
1554   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1555                                              InOverloadResolution,
1556                                              SCS, CStyle)) {
1557     SCS.Second = ICK_TransparentUnionConversion;
1558     FromType = ToType;
1559   } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1560                                  CStyle)) {
1561     // tryAtomicConversion has updated the standard conversion sequence
1562     // appropriately.
1563     return true;
1564   } else {
1565     // No second conversion required.
1566     SCS.Second = ICK_Identity;
1567   }
1568   SCS.setToType(1, FromType);
1569 
1570   QualType CanonFrom;
1571   QualType CanonTo;
1572   // The third conversion can be a qualification conversion (C++ 4p1).
1573   bool ObjCLifetimeConversion;
1574   if (S.IsQualificationConversion(FromType, ToType, CStyle,
1575                                   ObjCLifetimeConversion)) {
1576     SCS.Third = ICK_Qualification;
1577     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1578     FromType = ToType;
1579     CanonFrom = S.Context.getCanonicalType(FromType);
1580     CanonTo = S.Context.getCanonicalType(ToType);
1581   } else {
1582     // No conversion required
1583     SCS.Third = ICK_Identity;
1584 
1585     // C++ [over.best.ics]p6:
1586     //   [...] Any difference in top-level cv-qualification is
1587     //   subsumed by the initialization itself and does not constitute
1588     //   a conversion. [...]
1589     CanonFrom = S.Context.getCanonicalType(FromType);
1590     CanonTo = S.Context.getCanonicalType(ToType);
1591     if (CanonFrom.getLocalUnqualifiedType()
1592                                        == CanonTo.getLocalUnqualifiedType() &&
1593         (CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers()
1594          || CanonFrom.getObjCGCAttr() != CanonTo.getObjCGCAttr()
1595          || CanonFrom.getObjCLifetime() != CanonTo.getObjCLifetime())) {
1596       FromType = ToType;
1597       CanonFrom = CanonTo;
1598     }
1599   }
1600   SCS.setToType(2, FromType);
1601 
1602   // If we have not converted the argument type to the parameter type,
1603   // this is a bad conversion sequence.
1604   if (CanonFrom != CanonTo)
1605     return false;
1606 
1607   return true;
1608 }
1609 
1610 static bool
1611 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1612                                      QualType &ToType,
1613                                      bool InOverloadResolution,
1614                                      StandardConversionSequence &SCS,
1615                                      bool CStyle) {
1616 
1617   const RecordType *UT = ToType->getAsUnionType();
1618   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1619     return false;
1620   // The field to initialize within the transparent union.
1621   RecordDecl *UD = UT->getDecl();
1622   // It's compatible if the expression matches any of the fields.
1623   for (RecordDecl::field_iterator it = UD->field_begin(),
1624        itend = UD->field_end();
1625        it != itend; ++it) {
1626     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1627                              CStyle, /*ObjCWritebackConversion=*/false)) {
1628       ToType = it->getType();
1629       return true;
1630     }
1631   }
1632   return false;
1633 }
1634 
1635 /// IsIntegralPromotion - Determines whether the conversion from the
1636 /// expression From (whose potentially-adjusted type is FromType) to
1637 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1638 /// sets PromotedType to the promoted type.
1639 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1640   const BuiltinType *To = ToType->getAs<BuiltinType>();
1641   // All integers are built-in.
1642   if (!To) {
1643     return false;
1644   }
1645 
1646   // An rvalue of type char, signed char, unsigned char, short int, or
1647   // unsigned short int can be converted to an rvalue of type int if
1648   // int can represent all the values of the source type; otherwise,
1649   // the source rvalue can be converted to an rvalue of type unsigned
1650   // int (C++ 4.5p1).
1651   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1652       !FromType->isEnumeralType()) {
1653     if (// We can promote any signed, promotable integer type to an int
1654         (FromType->isSignedIntegerType() ||
1655          // We can promote any unsigned integer type whose size is
1656          // less than int to an int.
1657          (!FromType->isSignedIntegerType() &&
1658           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1659       return To->getKind() == BuiltinType::Int;
1660     }
1661 
1662     return To->getKind() == BuiltinType::UInt;
1663   }
1664 
1665   // C++0x [conv.prom]p3:
1666   //   A prvalue of an unscoped enumeration type whose underlying type is not
1667   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1668   //   following types that can represent all the values of the enumeration
1669   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1670   //   unsigned int, long int, unsigned long int, long long int, or unsigned
1671   //   long long int. If none of the types in that list can represent all the
1672   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1673   //   type can be converted to an rvalue a prvalue of the extended integer type
1674   //   with lowest integer conversion rank (4.13) greater than the rank of long
1675   //   long in which all the values of the enumeration can be represented. If
1676   //   there are two such extended types, the signed one is chosen.
1677   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1678     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1679     // provided for a scoped enumeration.
1680     if (FromEnumType->getDecl()->isScoped())
1681       return false;
1682 
1683     // We have already pre-calculated the promotion type, so this is trivial.
1684     if (ToType->isIntegerType() &&
1685         !RequireCompleteType(From->getLocStart(), FromType, 0))
1686       return Context.hasSameUnqualifiedType(ToType,
1687                                 FromEnumType->getDecl()->getPromotionType());
1688   }
1689 
1690   // C++0x [conv.prom]p2:
1691   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1692   //   to an rvalue a prvalue of the first of the following types that can
1693   //   represent all the values of its underlying type: int, unsigned int,
1694   //   long int, unsigned long int, long long int, or unsigned long long int.
1695   //   If none of the types in that list can represent all the values of its
1696   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1697   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1698   //   type.
1699   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1700       ToType->isIntegerType()) {
1701     // Determine whether the type we're converting from is signed or
1702     // unsigned.
1703     bool FromIsSigned = FromType->isSignedIntegerType();
1704     uint64_t FromSize = Context.getTypeSize(FromType);
1705 
1706     // The types we'll try to promote to, in the appropriate
1707     // order. Try each of these types.
1708     QualType PromoteTypes[6] = {
1709       Context.IntTy, Context.UnsignedIntTy,
1710       Context.LongTy, Context.UnsignedLongTy ,
1711       Context.LongLongTy, Context.UnsignedLongLongTy
1712     };
1713     for (int Idx = 0; Idx < 6; ++Idx) {
1714       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1715       if (FromSize < ToSize ||
1716           (FromSize == ToSize &&
1717            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1718         // We found the type that we can promote to. If this is the
1719         // type we wanted, we have a promotion. Otherwise, no
1720         // promotion.
1721         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1722       }
1723     }
1724   }
1725 
1726   // An rvalue for an integral bit-field (9.6) can be converted to an
1727   // rvalue of type int if int can represent all the values of the
1728   // bit-field; otherwise, it can be converted to unsigned int if
1729   // unsigned int can represent all the values of the bit-field. If
1730   // the bit-field is larger yet, no integral promotion applies to
1731   // it. If the bit-field has an enumerated type, it is treated as any
1732   // other value of that type for promotion purposes (C++ 4.5p3).
1733   // FIXME: We should delay checking of bit-fields until we actually perform the
1734   // conversion.
1735   using llvm::APSInt;
1736   if (From)
1737     if (FieldDecl *MemberDecl = From->getBitField()) {
1738       APSInt BitWidth;
1739       if (FromType->isIntegralType(Context) &&
1740           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1741         APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1742         ToSize = Context.getTypeSize(ToType);
1743 
1744         // Are we promoting to an int from a bitfield that fits in an int?
1745         if (BitWidth < ToSize ||
1746             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1747           return To->getKind() == BuiltinType::Int;
1748         }
1749 
1750         // Are we promoting to an unsigned int from an unsigned bitfield
1751         // that fits into an unsigned int?
1752         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1753           return To->getKind() == BuiltinType::UInt;
1754         }
1755 
1756         return false;
1757       }
1758     }
1759 
1760   // An rvalue of type bool can be converted to an rvalue of type int,
1761   // with false becoming zero and true becoming one (C++ 4.5p4).
1762   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1763     return true;
1764   }
1765 
1766   return false;
1767 }
1768 
1769 /// IsFloatingPointPromotion - Determines whether the conversion from
1770 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1771 /// returns true and sets PromotedType to the promoted type.
1772 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1773   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1774     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1775       /// An rvalue of type float can be converted to an rvalue of type
1776       /// double. (C++ 4.6p1).
1777       if (FromBuiltin->getKind() == BuiltinType::Float &&
1778           ToBuiltin->getKind() == BuiltinType::Double)
1779         return true;
1780 
1781       // C99 6.3.1.5p1:
1782       //   When a float is promoted to double or long double, or a
1783       //   double is promoted to long double [...].
1784       if (!getLangOpts().CPlusPlus &&
1785           (FromBuiltin->getKind() == BuiltinType::Float ||
1786            FromBuiltin->getKind() == BuiltinType::Double) &&
1787           (ToBuiltin->getKind() == BuiltinType::LongDouble))
1788         return true;
1789 
1790       // Half can be promoted to float.
1791       if (FromBuiltin->getKind() == BuiltinType::Half &&
1792           ToBuiltin->getKind() == BuiltinType::Float)
1793         return true;
1794     }
1795 
1796   return false;
1797 }
1798 
1799 /// \brief Determine if a conversion is a complex promotion.
1800 ///
1801 /// A complex promotion is defined as a complex -> complex conversion
1802 /// where the conversion between the underlying real types is a
1803 /// floating-point or integral promotion.
1804 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1805   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1806   if (!FromComplex)
1807     return false;
1808 
1809   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1810   if (!ToComplex)
1811     return false;
1812 
1813   return IsFloatingPointPromotion(FromComplex->getElementType(),
1814                                   ToComplex->getElementType()) ||
1815     IsIntegralPromotion(0, FromComplex->getElementType(),
1816                         ToComplex->getElementType());
1817 }
1818 
1819 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1820 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1821 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1822 /// if non-empty, will be a pointer to ToType that may or may not have
1823 /// the right set of qualifiers on its pointee.
1824 ///
1825 static QualType
1826 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1827                                    QualType ToPointee, QualType ToType,
1828                                    ASTContext &Context,
1829                                    bool StripObjCLifetime = false) {
1830   assert((FromPtr->getTypeClass() == Type::Pointer ||
1831           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1832          "Invalid similarly-qualified pointer type");
1833 
1834   /// Conversions to 'id' subsume cv-qualifier conversions.
1835   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1836     return ToType.getUnqualifiedType();
1837 
1838   QualType CanonFromPointee
1839     = Context.getCanonicalType(FromPtr->getPointeeType());
1840   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1841   Qualifiers Quals = CanonFromPointee.getQualifiers();
1842 
1843   if (StripObjCLifetime)
1844     Quals.removeObjCLifetime();
1845 
1846   // Exact qualifier match -> return the pointer type we're converting to.
1847   if (CanonToPointee.getLocalQualifiers() == Quals) {
1848     // ToType is exactly what we need. Return it.
1849     if (!ToType.isNull())
1850       return ToType.getUnqualifiedType();
1851 
1852     // Build a pointer to ToPointee. It has the right qualifiers
1853     // already.
1854     if (isa<ObjCObjectPointerType>(ToType))
1855       return Context.getObjCObjectPointerType(ToPointee);
1856     return Context.getPointerType(ToPointee);
1857   }
1858 
1859   // Just build a canonical type that has the right qualifiers.
1860   QualType QualifiedCanonToPointee
1861     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1862 
1863   if (isa<ObjCObjectPointerType>(ToType))
1864     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1865   return Context.getPointerType(QualifiedCanonToPointee);
1866 }
1867 
1868 static bool isNullPointerConstantForConversion(Expr *Expr,
1869                                                bool InOverloadResolution,
1870                                                ASTContext &Context) {
1871   // Handle value-dependent integral null pointer constants correctly.
1872   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1873   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1874       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1875     return !InOverloadResolution;
1876 
1877   return Expr->isNullPointerConstant(Context,
1878                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1879                                         : Expr::NPC_ValueDependentIsNull);
1880 }
1881 
1882 /// IsPointerConversion - Determines whether the conversion of the
1883 /// expression From, which has the (possibly adjusted) type FromType,
1884 /// can be converted to the type ToType via a pointer conversion (C++
1885 /// 4.10). If so, returns true and places the converted type (that
1886 /// might differ from ToType in its cv-qualifiers at some level) into
1887 /// ConvertedType.
1888 ///
1889 /// This routine also supports conversions to and from block pointers
1890 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
1891 /// pointers to interfaces. FIXME: Once we've determined the
1892 /// appropriate overloading rules for Objective-C, we may want to
1893 /// split the Objective-C checks into a different routine; however,
1894 /// GCC seems to consider all of these conversions to be pointer
1895 /// conversions, so for now they live here. IncompatibleObjC will be
1896 /// set if the conversion is an allowed Objective-C conversion that
1897 /// should result in a warning.
1898 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
1899                                bool InOverloadResolution,
1900                                QualType& ConvertedType,
1901                                bool &IncompatibleObjC) {
1902   IncompatibleObjC = false;
1903   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
1904                               IncompatibleObjC))
1905     return true;
1906 
1907   // Conversion from a null pointer constant to any Objective-C pointer type.
1908   if (ToType->isObjCObjectPointerType() &&
1909       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1910     ConvertedType = ToType;
1911     return true;
1912   }
1913 
1914   // Blocks: Block pointers can be converted to void*.
1915   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
1916       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
1917     ConvertedType = ToType;
1918     return true;
1919   }
1920   // Blocks: A null pointer constant can be converted to a block
1921   // pointer type.
1922   if (ToType->isBlockPointerType() &&
1923       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1924     ConvertedType = ToType;
1925     return true;
1926   }
1927 
1928   // If the left-hand-side is nullptr_t, the right side can be a null
1929   // pointer constant.
1930   if (ToType->isNullPtrType() &&
1931       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1932     ConvertedType = ToType;
1933     return true;
1934   }
1935 
1936   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
1937   if (!ToTypePtr)
1938     return false;
1939 
1940   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
1941   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1942     ConvertedType = ToType;
1943     return true;
1944   }
1945 
1946   // Beyond this point, both types need to be pointers
1947   // , including objective-c pointers.
1948   QualType ToPointeeType = ToTypePtr->getPointeeType();
1949   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
1950       !getLangOpts().ObjCAutoRefCount) {
1951     ConvertedType = BuildSimilarlyQualifiedPointerType(
1952                                       FromType->getAs<ObjCObjectPointerType>(),
1953                                                        ToPointeeType,
1954                                                        ToType, Context);
1955     return true;
1956   }
1957   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
1958   if (!FromTypePtr)
1959     return false;
1960 
1961   QualType FromPointeeType = FromTypePtr->getPointeeType();
1962 
1963   // If the unqualified pointee types are the same, this can't be a
1964   // pointer conversion, so don't do all of the work below.
1965   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
1966     return false;
1967 
1968   // An rvalue of type "pointer to cv T," where T is an object type,
1969   // can be converted to an rvalue of type "pointer to cv void" (C++
1970   // 4.10p2).
1971   if (FromPointeeType->isIncompleteOrObjectType() &&
1972       ToPointeeType->isVoidType()) {
1973     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1974                                                        ToPointeeType,
1975                                                        ToType, Context,
1976                                                    /*StripObjCLifetime=*/true);
1977     return true;
1978   }
1979 
1980   // MSVC allows implicit function to void* type conversion.
1981   if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
1982       ToPointeeType->isVoidType()) {
1983     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1984                                                        ToPointeeType,
1985                                                        ToType, Context);
1986     return true;
1987   }
1988 
1989   // When we're overloading in C, we allow a special kind of pointer
1990   // conversion for compatible-but-not-identical pointee types.
1991   if (!getLangOpts().CPlusPlus &&
1992       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
1993     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1994                                                        ToPointeeType,
1995                                                        ToType, Context);
1996     return true;
1997   }
1998 
1999   // C++ [conv.ptr]p3:
2000   //
2001   //   An rvalue of type "pointer to cv D," where D is a class type,
2002   //   can be converted to an rvalue of type "pointer to cv B," where
2003   //   B is a base class (clause 10) of D. If B is an inaccessible
2004   //   (clause 11) or ambiguous (10.2) base class of D, a program that
2005   //   necessitates this conversion is ill-formed. The result of the
2006   //   conversion is a pointer to the base class sub-object of the
2007   //   derived class object. The null pointer value is converted to
2008   //   the null pointer value of the destination type.
2009   //
2010   // Note that we do not check for ambiguity or inaccessibility
2011   // here. That is handled by CheckPointerConversion.
2012   if (getLangOpts().CPlusPlus &&
2013       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2014       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2015       !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2016       IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2017     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2018                                                        ToPointeeType,
2019                                                        ToType, Context);
2020     return true;
2021   }
2022 
2023   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2024       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2025     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2026                                                        ToPointeeType,
2027                                                        ToType, Context);
2028     return true;
2029   }
2030 
2031   return false;
2032 }
2033 
2034 /// \brief Adopt the given qualifiers for the given type.
2035 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2036   Qualifiers TQs = T.getQualifiers();
2037 
2038   // Check whether qualifiers already match.
2039   if (TQs == Qs)
2040     return T;
2041 
2042   if (Qs.compatiblyIncludes(TQs))
2043     return Context.getQualifiedType(T, Qs);
2044 
2045   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2046 }
2047 
2048 /// isObjCPointerConversion - Determines whether this is an
2049 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2050 /// with the same arguments and return values.
2051 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2052                                    QualType& ConvertedType,
2053                                    bool &IncompatibleObjC) {
2054   if (!getLangOpts().ObjC1)
2055     return false;
2056 
2057   // The set of qualifiers on the type we're converting from.
2058   Qualifiers FromQualifiers = FromType.getQualifiers();
2059 
2060   // First, we handle all conversions on ObjC object pointer types.
2061   const ObjCObjectPointerType* ToObjCPtr =
2062     ToType->getAs<ObjCObjectPointerType>();
2063   const ObjCObjectPointerType *FromObjCPtr =
2064     FromType->getAs<ObjCObjectPointerType>();
2065 
2066   if (ToObjCPtr && FromObjCPtr) {
2067     // If the pointee types are the same (ignoring qualifications),
2068     // then this is not a pointer conversion.
2069     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2070                                        FromObjCPtr->getPointeeType()))
2071       return false;
2072 
2073     // Check for compatible
2074     // Objective C++: We're able to convert between "id" or "Class" and a
2075     // pointer to any interface (in both directions).
2076     if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2077       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2078       return true;
2079     }
2080     // Conversions with Objective-C's id<...>.
2081     if ((FromObjCPtr->isObjCQualifiedIdType() ||
2082          ToObjCPtr->isObjCQualifiedIdType()) &&
2083         Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2084                                                   /*compare=*/false)) {
2085       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2086       return true;
2087     }
2088     // Objective C++: We're able to convert from a pointer to an
2089     // interface to a pointer to a different interface.
2090     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2091       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2092       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2093       if (getLangOpts().CPlusPlus && LHS && RHS &&
2094           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2095                                                 FromObjCPtr->getPointeeType()))
2096         return false;
2097       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2098                                                    ToObjCPtr->getPointeeType(),
2099                                                          ToType, Context);
2100       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2101       return true;
2102     }
2103 
2104     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2105       // Okay: this is some kind of implicit downcast of Objective-C
2106       // interfaces, which is permitted. However, we're going to
2107       // complain about it.
2108       IncompatibleObjC = true;
2109       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2110                                                    ToObjCPtr->getPointeeType(),
2111                                                          ToType, Context);
2112       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2113       return true;
2114     }
2115   }
2116   // Beyond this point, both types need to be C pointers or block pointers.
2117   QualType ToPointeeType;
2118   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2119     ToPointeeType = ToCPtr->getPointeeType();
2120   else if (const BlockPointerType *ToBlockPtr =
2121             ToType->getAs<BlockPointerType>()) {
2122     // Objective C++: We're able to convert from a pointer to any object
2123     // to a block pointer type.
2124     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2125       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2126       return true;
2127     }
2128     ToPointeeType = ToBlockPtr->getPointeeType();
2129   }
2130   else if (FromType->getAs<BlockPointerType>() &&
2131            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2132     // Objective C++: We're able to convert from a block pointer type to a
2133     // pointer to any object.
2134     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2135     return true;
2136   }
2137   else
2138     return false;
2139 
2140   QualType FromPointeeType;
2141   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2142     FromPointeeType = FromCPtr->getPointeeType();
2143   else if (const BlockPointerType *FromBlockPtr =
2144            FromType->getAs<BlockPointerType>())
2145     FromPointeeType = FromBlockPtr->getPointeeType();
2146   else
2147     return false;
2148 
2149   // If we have pointers to pointers, recursively check whether this
2150   // is an Objective-C conversion.
2151   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2152       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2153                               IncompatibleObjC)) {
2154     // We always complain about this conversion.
2155     IncompatibleObjC = true;
2156     ConvertedType = Context.getPointerType(ConvertedType);
2157     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2158     return true;
2159   }
2160   // Allow conversion of pointee being objective-c pointer to another one;
2161   // as in I* to id.
2162   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2163       ToPointeeType->getAs<ObjCObjectPointerType>() &&
2164       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2165                               IncompatibleObjC)) {
2166 
2167     ConvertedType = Context.getPointerType(ConvertedType);
2168     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2169     return true;
2170   }
2171 
2172   // If we have pointers to functions or blocks, check whether the only
2173   // differences in the argument and result types are in Objective-C
2174   // pointer conversions. If so, we permit the conversion (but
2175   // complain about it).
2176   const FunctionProtoType *FromFunctionType
2177     = FromPointeeType->getAs<FunctionProtoType>();
2178   const FunctionProtoType *ToFunctionType
2179     = ToPointeeType->getAs<FunctionProtoType>();
2180   if (FromFunctionType && ToFunctionType) {
2181     // If the function types are exactly the same, this isn't an
2182     // Objective-C pointer conversion.
2183     if (Context.getCanonicalType(FromPointeeType)
2184           == Context.getCanonicalType(ToPointeeType))
2185       return false;
2186 
2187     // Perform the quick checks that will tell us whether these
2188     // function types are obviously different.
2189     if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2190         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2191         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2192       return false;
2193 
2194     bool HasObjCConversion = false;
2195     if (Context.getCanonicalType(FromFunctionType->getResultType())
2196           == Context.getCanonicalType(ToFunctionType->getResultType())) {
2197       // Okay, the types match exactly. Nothing to do.
2198     } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2199                                        ToFunctionType->getResultType(),
2200                                        ConvertedType, IncompatibleObjC)) {
2201       // Okay, we have an Objective-C pointer conversion.
2202       HasObjCConversion = true;
2203     } else {
2204       // Function types are too different. Abort.
2205       return false;
2206     }
2207 
2208     // Check argument types.
2209     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2210          ArgIdx != NumArgs; ++ArgIdx) {
2211       QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2212       QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2213       if (Context.getCanonicalType(FromArgType)
2214             == Context.getCanonicalType(ToArgType)) {
2215         // Okay, the types match exactly. Nothing to do.
2216       } else if (isObjCPointerConversion(FromArgType, ToArgType,
2217                                          ConvertedType, IncompatibleObjC)) {
2218         // Okay, we have an Objective-C pointer conversion.
2219         HasObjCConversion = true;
2220       } else {
2221         // Argument types are too different. Abort.
2222         return false;
2223       }
2224     }
2225 
2226     if (HasObjCConversion) {
2227       // We had an Objective-C conversion. Allow this pointer
2228       // conversion, but complain about it.
2229       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2230       IncompatibleObjC = true;
2231       return true;
2232     }
2233   }
2234 
2235   return false;
2236 }
2237 
2238 /// \brief Determine whether this is an Objective-C writeback conversion,
2239 /// used for parameter passing when performing automatic reference counting.
2240 ///
2241 /// \param FromType The type we're converting form.
2242 ///
2243 /// \param ToType The type we're converting to.
2244 ///
2245 /// \param ConvertedType The type that will be produced after applying
2246 /// this conversion.
2247 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2248                                      QualType &ConvertedType) {
2249   if (!getLangOpts().ObjCAutoRefCount ||
2250       Context.hasSameUnqualifiedType(FromType, ToType))
2251     return false;
2252 
2253   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2254   QualType ToPointee;
2255   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2256     ToPointee = ToPointer->getPointeeType();
2257   else
2258     return false;
2259 
2260   Qualifiers ToQuals = ToPointee.getQualifiers();
2261   if (!ToPointee->isObjCLifetimeType() ||
2262       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2263       !ToQuals.withoutObjCLifetime().empty())
2264     return false;
2265 
2266   // Argument must be a pointer to __strong to __weak.
2267   QualType FromPointee;
2268   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2269     FromPointee = FromPointer->getPointeeType();
2270   else
2271     return false;
2272 
2273   Qualifiers FromQuals = FromPointee.getQualifiers();
2274   if (!FromPointee->isObjCLifetimeType() ||
2275       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2276        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2277     return false;
2278 
2279   // Make sure that we have compatible qualifiers.
2280   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2281   if (!ToQuals.compatiblyIncludes(FromQuals))
2282     return false;
2283 
2284   // Remove qualifiers from the pointee type we're converting from; they
2285   // aren't used in the compatibility check belong, and we'll be adding back
2286   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2287   FromPointee = FromPointee.getUnqualifiedType();
2288 
2289   // The unqualified form of the pointee types must be compatible.
2290   ToPointee = ToPointee.getUnqualifiedType();
2291   bool IncompatibleObjC;
2292   if (Context.typesAreCompatible(FromPointee, ToPointee))
2293     FromPointee = ToPointee;
2294   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2295                                     IncompatibleObjC))
2296     return false;
2297 
2298   /// \brief Construct the type we're converting to, which is a pointer to
2299   /// __autoreleasing pointee.
2300   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2301   ConvertedType = Context.getPointerType(FromPointee);
2302   return true;
2303 }
2304 
2305 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2306                                     QualType& ConvertedType) {
2307   QualType ToPointeeType;
2308   if (const BlockPointerType *ToBlockPtr =
2309         ToType->getAs<BlockPointerType>())
2310     ToPointeeType = ToBlockPtr->getPointeeType();
2311   else
2312     return false;
2313 
2314   QualType FromPointeeType;
2315   if (const BlockPointerType *FromBlockPtr =
2316       FromType->getAs<BlockPointerType>())
2317     FromPointeeType = FromBlockPtr->getPointeeType();
2318   else
2319     return false;
2320   // We have pointer to blocks, check whether the only
2321   // differences in the argument and result types are in Objective-C
2322   // pointer conversions. If so, we permit the conversion.
2323 
2324   const FunctionProtoType *FromFunctionType
2325     = FromPointeeType->getAs<FunctionProtoType>();
2326   const FunctionProtoType *ToFunctionType
2327     = ToPointeeType->getAs<FunctionProtoType>();
2328 
2329   if (!FromFunctionType || !ToFunctionType)
2330     return false;
2331 
2332   if (Context.hasSameType(FromPointeeType, ToPointeeType))
2333     return true;
2334 
2335   // Perform the quick checks that will tell us whether these
2336   // function types are obviously different.
2337   if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2338       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2339     return false;
2340 
2341   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2342   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2343   if (FromEInfo != ToEInfo)
2344     return false;
2345 
2346   bool IncompatibleObjC = false;
2347   if (Context.hasSameType(FromFunctionType->getResultType(),
2348                           ToFunctionType->getResultType())) {
2349     // Okay, the types match exactly. Nothing to do.
2350   } else {
2351     QualType RHS = FromFunctionType->getResultType();
2352     QualType LHS = ToFunctionType->getResultType();
2353     if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2354         !RHS.hasQualifiers() && LHS.hasQualifiers())
2355        LHS = LHS.getUnqualifiedType();
2356 
2357      if (Context.hasSameType(RHS,LHS)) {
2358        // OK exact match.
2359      } else if (isObjCPointerConversion(RHS, LHS,
2360                                         ConvertedType, IncompatibleObjC)) {
2361      if (IncompatibleObjC)
2362        return false;
2363      // Okay, we have an Objective-C pointer conversion.
2364      }
2365      else
2366        return false;
2367    }
2368 
2369    // Check argument types.
2370    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2371         ArgIdx != NumArgs; ++ArgIdx) {
2372      IncompatibleObjC = false;
2373      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2374      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2375      if (Context.hasSameType(FromArgType, ToArgType)) {
2376        // Okay, the types match exactly. Nothing to do.
2377      } else if (isObjCPointerConversion(ToArgType, FromArgType,
2378                                         ConvertedType, IncompatibleObjC)) {
2379        if (IncompatibleObjC)
2380          return false;
2381        // Okay, we have an Objective-C pointer conversion.
2382      } else
2383        // Argument types are too different. Abort.
2384        return false;
2385    }
2386    if (LangOpts.ObjCAutoRefCount &&
2387        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2388                                                     ToFunctionType))
2389      return false;
2390 
2391    ConvertedType = ToType;
2392    return true;
2393 }
2394 
2395 enum {
2396   ft_default,
2397   ft_different_class,
2398   ft_parameter_arity,
2399   ft_parameter_mismatch,
2400   ft_return_type,
2401   ft_qualifer_mismatch
2402 };
2403 
2404 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2405 /// function types.  Catches different number of parameter, mismatch in
2406 /// parameter types, and different return types.
2407 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2408                                       QualType FromType, QualType ToType) {
2409   // If either type is not valid, include no extra info.
2410   if (FromType.isNull() || ToType.isNull()) {
2411     PDiag << ft_default;
2412     return;
2413   }
2414 
2415   // Get the function type from the pointers.
2416   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2417     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2418                             *ToMember = ToType->getAs<MemberPointerType>();
2419     if (FromMember->getClass() != ToMember->getClass()) {
2420       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2421             << QualType(FromMember->getClass(), 0);
2422       return;
2423     }
2424     FromType = FromMember->getPointeeType();
2425     ToType = ToMember->getPointeeType();
2426   }
2427 
2428   if (FromType->isPointerType())
2429     FromType = FromType->getPointeeType();
2430   if (ToType->isPointerType())
2431     ToType = ToType->getPointeeType();
2432 
2433   // Remove references.
2434   FromType = FromType.getNonReferenceType();
2435   ToType = ToType.getNonReferenceType();
2436 
2437   // Don't print extra info for non-specialized template functions.
2438   if (FromType->isInstantiationDependentType() &&
2439       !FromType->getAs<TemplateSpecializationType>()) {
2440     PDiag << ft_default;
2441     return;
2442   }
2443 
2444   // No extra info for same types.
2445   if (Context.hasSameType(FromType, ToType)) {
2446     PDiag << ft_default;
2447     return;
2448   }
2449 
2450   const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2451                           *ToFunction = ToType->getAs<FunctionProtoType>();
2452 
2453   // Both types need to be function types.
2454   if (!FromFunction || !ToFunction) {
2455     PDiag << ft_default;
2456     return;
2457   }
2458 
2459   if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2460     PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2461           << FromFunction->getNumArgs();
2462     return;
2463   }
2464 
2465   // Handle different parameter types.
2466   unsigned ArgPos;
2467   if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2468     PDiag << ft_parameter_mismatch << ArgPos + 1
2469           << ToFunction->getArgType(ArgPos)
2470           << FromFunction->getArgType(ArgPos);
2471     return;
2472   }
2473 
2474   // Handle different return type.
2475   if (!Context.hasSameType(FromFunction->getResultType(),
2476                            ToFunction->getResultType())) {
2477     PDiag << ft_return_type << ToFunction->getResultType()
2478           << FromFunction->getResultType();
2479     return;
2480   }
2481 
2482   unsigned FromQuals = FromFunction->getTypeQuals(),
2483            ToQuals = ToFunction->getTypeQuals();
2484   if (FromQuals != ToQuals) {
2485     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2486     return;
2487   }
2488 
2489   // Unable to find a difference, so add no extra info.
2490   PDiag << ft_default;
2491 }
2492 
2493 /// FunctionArgTypesAreEqual - This routine checks two function proto types
2494 /// for equality of their argument types. Caller has already checked that
2495 /// they have same number of arguments. This routine assumes that Objective-C
2496 /// pointer types which only differ in their protocol qualifiers are equal.
2497 /// If the parameters are different, ArgPos will have the the parameter index
2498 /// of the first different parameter.
2499 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2500                                     const FunctionProtoType *NewType,
2501                                     unsigned *ArgPos) {
2502   if (!getLangOpts().ObjC1) {
2503     for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2504          N = NewType->arg_type_begin(),
2505          E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2506       if (!Context.hasSameType(*O, *N)) {
2507         if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2508         return false;
2509       }
2510     }
2511     return true;
2512   }
2513 
2514   for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2515        N = NewType->arg_type_begin(),
2516        E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2517     QualType ToType = (*O);
2518     QualType FromType = (*N);
2519     if (!Context.hasSameType(ToType, FromType)) {
2520       if (const PointerType *PTTo = ToType->getAs<PointerType>()) {
2521         if (const PointerType *PTFr = FromType->getAs<PointerType>())
2522           if ((PTTo->getPointeeType()->isObjCQualifiedIdType() &&
2523                PTFr->getPointeeType()->isObjCQualifiedIdType()) ||
2524               (PTTo->getPointeeType()->isObjCQualifiedClassType() &&
2525                PTFr->getPointeeType()->isObjCQualifiedClassType()))
2526             continue;
2527       }
2528       else if (const ObjCObjectPointerType *PTTo =
2529                  ToType->getAs<ObjCObjectPointerType>()) {
2530         if (const ObjCObjectPointerType *PTFr =
2531               FromType->getAs<ObjCObjectPointerType>())
2532           if (Context.hasSameUnqualifiedType(
2533                 PTTo->getObjectType()->getBaseType(),
2534                 PTFr->getObjectType()->getBaseType()))
2535             continue;
2536       }
2537       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2538       return false;
2539     }
2540   }
2541   return true;
2542 }
2543 
2544 /// CheckPointerConversion - Check the pointer conversion from the
2545 /// expression From to the type ToType. This routine checks for
2546 /// ambiguous or inaccessible derived-to-base pointer
2547 /// conversions for which IsPointerConversion has already returned
2548 /// true. It returns true and produces a diagnostic if there was an
2549 /// error, or returns false otherwise.
2550 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2551                                   CastKind &Kind,
2552                                   CXXCastPath& BasePath,
2553                                   bool IgnoreBaseAccess) {
2554   QualType FromType = From->getType();
2555   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2556 
2557   Kind = CK_BitCast;
2558 
2559   if (!IsCStyleOrFunctionalCast &&
2560       Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy) &&
2561       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
2562     DiagRuntimeBehavior(From->getExprLoc(), From,
2563                         PDiag(diag::warn_impcast_bool_to_null_pointer)
2564                           << ToType << From->getSourceRange());
2565 
2566   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2567     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2568       QualType FromPointeeType = FromPtrType->getPointeeType(),
2569                ToPointeeType   = ToPtrType->getPointeeType();
2570 
2571       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2572           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2573         // We must have a derived-to-base conversion. Check an
2574         // ambiguous or inaccessible conversion.
2575         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2576                                          From->getExprLoc(),
2577                                          From->getSourceRange(), &BasePath,
2578                                          IgnoreBaseAccess))
2579           return true;
2580 
2581         // The conversion was successful.
2582         Kind = CK_DerivedToBase;
2583       }
2584     }
2585   } else if (const ObjCObjectPointerType *ToPtrType =
2586                ToType->getAs<ObjCObjectPointerType>()) {
2587     if (const ObjCObjectPointerType *FromPtrType =
2588           FromType->getAs<ObjCObjectPointerType>()) {
2589       // Objective-C++ conversions are always okay.
2590       // FIXME: We should have a different class of conversions for the
2591       // Objective-C++ implicit conversions.
2592       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2593         return false;
2594     } else if (FromType->isBlockPointerType()) {
2595       Kind = CK_BlockPointerToObjCPointerCast;
2596     } else {
2597       Kind = CK_CPointerToObjCPointerCast;
2598     }
2599   } else if (ToType->isBlockPointerType()) {
2600     if (!FromType->isBlockPointerType())
2601       Kind = CK_AnyPointerToBlockPointerCast;
2602   }
2603 
2604   // We shouldn't fall into this case unless it's valid for other
2605   // reasons.
2606   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2607     Kind = CK_NullToPointer;
2608 
2609   return false;
2610 }
2611 
2612 /// IsMemberPointerConversion - Determines whether the conversion of the
2613 /// expression From, which has the (possibly adjusted) type FromType, can be
2614 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2615 /// If so, returns true and places the converted type (that might differ from
2616 /// ToType in its cv-qualifiers at some level) into ConvertedType.
2617 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2618                                      QualType ToType,
2619                                      bool InOverloadResolution,
2620                                      QualType &ConvertedType) {
2621   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2622   if (!ToTypePtr)
2623     return false;
2624 
2625   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2626   if (From->isNullPointerConstant(Context,
2627                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2628                                         : Expr::NPC_ValueDependentIsNull)) {
2629     ConvertedType = ToType;
2630     return true;
2631   }
2632 
2633   // Otherwise, both types have to be member pointers.
2634   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2635   if (!FromTypePtr)
2636     return false;
2637 
2638   // A pointer to member of B can be converted to a pointer to member of D,
2639   // where D is derived from B (C++ 4.11p2).
2640   QualType FromClass(FromTypePtr->getClass(), 0);
2641   QualType ToClass(ToTypePtr->getClass(), 0);
2642 
2643   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2644       !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2645       IsDerivedFrom(ToClass, FromClass)) {
2646     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2647                                                  ToClass.getTypePtr());
2648     return true;
2649   }
2650 
2651   return false;
2652 }
2653 
2654 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2655 /// expression From to the type ToType. This routine checks for ambiguous or
2656 /// virtual or inaccessible base-to-derived member pointer conversions
2657 /// for which IsMemberPointerConversion has already returned true. It returns
2658 /// true and produces a diagnostic if there was an error, or returns false
2659 /// otherwise.
2660 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2661                                         CastKind &Kind,
2662                                         CXXCastPath &BasePath,
2663                                         bool IgnoreBaseAccess) {
2664   QualType FromType = From->getType();
2665   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2666   if (!FromPtrType) {
2667     // This must be a null pointer to member pointer conversion
2668     assert(From->isNullPointerConstant(Context,
2669                                        Expr::NPC_ValueDependentIsNull) &&
2670            "Expr must be null pointer constant!");
2671     Kind = CK_NullToMemberPointer;
2672     return false;
2673   }
2674 
2675   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2676   assert(ToPtrType && "No member pointer cast has a target type "
2677                       "that is not a member pointer.");
2678 
2679   QualType FromClass = QualType(FromPtrType->getClass(), 0);
2680   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2681 
2682   // FIXME: What about dependent types?
2683   assert(FromClass->isRecordType() && "Pointer into non-class.");
2684   assert(ToClass->isRecordType() && "Pointer into non-class.");
2685 
2686   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2687                      /*DetectVirtual=*/true);
2688   bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2689   assert(DerivationOkay &&
2690          "Should not have been called if derivation isn't OK.");
2691   (void)DerivationOkay;
2692 
2693   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2694                                   getUnqualifiedType())) {
2695     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2696     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2697       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2698     return true;
2699   }
2700 
2701   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2702     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2703       << FromClass << ToClass << QualType(VBase, 0)
2704       << From->getSourceRange();
2705     return true;
2706   }
2707 
2708   if (!IgnoreBaseAccess)
2709     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2710                          Paths.front(),
2711                          diag::err_downcast_from_inaccessible_base);
2712 
2713   // Must be a base to derived member conversion.
2714   BuildBasePathArray(Paths, BasePath);
2715   Kind = CK_BaseToDerivedMemberPointer;
2716   return false;
2717 }
2718 
2719 /// IsQualificationConversion - Determines whether the conversion from
2720 /// an rvalue of type FromType to ToType is a qualification conversion
2721 /// (C++ 4.4).
2722 ///
2723 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2724 /// when the qualification conversion involves a change in the Objective-C
2725 /// object lifetime.
2726 bool
2727 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2728                                 bool CStyle, bool &ObjCLifetimeConversion) {
2729   FromType = Context.getCanonicalType(FromType);
2730   ToType = Context.getCanonicalType(ToType);
2731   ObjCLifetimeConversion = false;
2732 
2733   // If FromType and ToType are the same type, this is not a
2734   // qualification conversion.
2735   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2736     return false;
2737 
2738   // (C++ 4.4p4):
2739   //   A conversion can add cv-qualifiers at levels other than the first
2740   //   in multi-level pointers, subject to the following rules: [...]
2741   bool PreviousToQualsIncludeConst = true;
2742   bool UnwrappedAnyPointer = false;
2743   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2744     // Within each iteration of the loop, we check the qualifiers to
2745     // determine if this still looks like a qualification
2746     // conversion. Then, if all is well, we unwrap one more level of
2747     // pointers or pointers-to-members and do it all again
2748     // until there are no more pointers or pointers-to-members left to
2749     // unwrap.
2750     UnwrappedAnyPointer = true;
2751 
2752     Qualifiers FromQuals = FromType.getQualifiers();
2753     Qualifiers ToQuals = ToType.getQualifiers();
2754 
2755     // Objective-C ARC:
2756     //   Check Objective-C lifetime conversions.
2757     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2758         UnwrappedAnyPointer) {
2759       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2760         ObjCLifetimeConversion = true;
2761         FromQuals.removeObjCLifetime();
2762         ToQuals.removeObjCLifetime();
2763       } else {
2764         // Qualification conversions cannot cast between different
2765         // Objective-C lifetime qualifiers.
2766         return false;
2767       }
2768     }
2769 
2770     // Allow addition/removal of GC attributes but not changing GC attributes.
2771     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2772         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2773       FromQuals.removeObjCGCAttr();
2774       ToQuals.removeObjCGCAttr();
2775     }
2776 
2777     //   -- for every j > 0, if const is in cv 1,j then const is in cv
2778     //      2,j, and similarly for volatile.
2779     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2780       return false;
2781 
2782     //   -- if the cv 1,j and cv 2,j are different, then const is in
2783     //      every cv for 0 < k < j.
2784     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2785         && !PreviousToQualsIncludeConst)
2786       return false;
2787 
2788     // Keep track of whether all prior cv-qualifiers in the "to" type
2789     // include const.
2790     PreviousToQualsIncludeConst
2791       = PreviousToQualsIncludeConst && ToQuals.hasConst();
2792   }
2793 
2794   // We are left with FromType and ToType being the pointee types
2795   // after unwrapping the original FromType and ToType the same number
2796   // of types. If we unwrapped any pointers, and if FromType and
2797   // ToType have the same unqualified type (since we checked
2798   // qualifiers above), then this is a qualification conversion.
2799   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2800 }
2801 
2802 /// \brief - Determine whether this is a conversion from a scalar type to an
2803 /// atomic type.
2804 ///
2805 /// If successful, updates \c SCS's second and third steps in the conversion
2806 /// sequence to finish the conversion.
2807 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2808                                 bool InOverloadResolution,
2809                                 StandardConversionSequence &SCS,
2810                                 bool CStyle) {
2811   const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2812   if (!ToAtomic)
2813     return false;
2814 
2815   StandardConversionSequence InnerSCS;
2816   if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2817                             InOverloadResolution, InnerSCS,
2818                             CStyle, /*AllowObjCWritebackConversion=*/false))
2819     return false;
2820 
2821   SCS.Second = InnerSCS.Second;
2822   SCS.setToType(1, InnerSCS.getToType(1));
2823   SCS.Third = InnerSCS.Third;
2824   SCS.QualificationIncludesObjCLifetime
2825     = InnerSCS.QualificationIncludesObjCLifetime;
2826   SCS.setToType(2, InnerSCS.getToType(2));
2827   return true;
2828 }
2829 
2830 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2831                                               CXXConstructorDecl *Constructor,
2832                                               QualType Type) {
2833   const FunctionProtoType *CtorType =
2834       Constructor->getType()->getAs<FunctionProtoType>();
2835   if (CtorType->getNumArgs() > 0) {
2836     QualType FirstArg = CtorType->getArgType(0);
2837     if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2838       return true;
2839   }
2840   return false;
2841 }
2842 
2843 static OverloadingResult
2844 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2845                                        CXXRecordDecl *To,
2846                                        UserDefinedConversionSequence &User,
2847                                        OverloadCandidateSet &CandidateSet,
2848                                        bool AllowExplicit) {
2849   DeclContext::lookup_iterator Con, ConEnd;
2850   for (llvm::tie(Con, ConEnd) = S.LookupConstructors(To);
2851        Con != ConEnd; ++Con) {
2852     NamedDecl *D = *Con;
2853     DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2854 
2855     // Find the constructor (which may be a template).
2856     CXXConstructorDecl *Constructor = 0;
2857     FunctionTemplateDecl *ConstructorTmpl
2858       = dyn_cast<FunctionTemplateDecl>(D);
2859     if (ConstructorTmpl)
2860       Constructor
2861         = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2862     else
2863       Constructor = cast<CXXConstructorDecl>(D);
2864 
2865     bool Usable = !Constructor->isInvalidDecl() &&
2866                   S.isInitListConstructor(Constructor) &&
2867                   (AllowExplicit || !Constructor->isExplicit());
2868     if (Usable) {
2869       // If the first argument is (a reference to) the target type,
2870       // suppress conversions.
2871       bool SuppressUserConversions =
2872           isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2873       if (ConstructorTmpl)
2874         S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2875                                        /*ExplicitArgs*/ 0,
2876                                        From, CandidateSet,
2877                                        SuppressUserConversions);
2878       else
2879         S.AddOverloadCandidate(Constructor, FoundDecl,
2880                                From, CandidateSet,
2881                                SuppressUserConversions);
2882     }
2883   }
2884 
2885   bool HadMultipleCandidates = (CandidateSet.size() > 1);
2886 
2887   OverloadCandidateSet::iterator Best;
2888   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2889   case OR_Success: {
2890     // Record the standard conversion we used and the conversion function.
2891     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2892     S.MarkFunctionReferenced(From->getLocStart(), Constructor);
2893 
2894     QualType ThisType = Constructor->getThisType(S.Context);
2895     // Initializer lists don't have conversions as such.
2896     User.Before.setAsIdentityConversion();
2897     User.HadMultipleCandidates = HadMultipleCandidates;
2898     User.ConversionFunction = Constructor;
2899     User.FoundConversionFunction = Best->FoundDecl;
2900     User.After.setAsIdentityConversion();
2901     User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
2902     User.After.setAllToTypes(ToType);
2903     return OR_Success;
2904   }
2905 
2906   case OR_No_Viable_Function:
2907     return OR_No_Viable_Function;
2908   case OR_Deleted:
2909     return OR_Deleted;
2910   case OR_Ambiguous:
2911     return OR_Ambiguous;
2912   }
2913 
2914   llvm_unreachable("Invalid OverloadResult!");
2915 }
2916 
2917 /// Determines whether there is a user-defined conversion sequence
2918 /// (C++ [over.ics.user]) that converts expression From to the type
2919 /// ToType. If such a conversion exists, User will contain the
2920 /// user-defined conversion sequence that performs such a conversion
2921 /// and this routine will return true. Otherwise, this routine returns
2922 /// false and User is unspecified.
2923 ///
2924 /// \param AllowExplicit  true if the conversion should consider C++0x
2925 /// "explicit" conversion functions as well as non-explicit conversion
2926 /// functions (C++0x [class.conv.fct]p2).
2927 static OverloadingResult
2928 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
2929                         UserDefinedConversionSequence &User,
2930                         OverloadCandidateSet &CandidateSet,
2931                         bool AllowExplicit) {
2932   // Whether we will only visit constructors.
2933   bool ConstructorsOnly = false;
2934 
2935   // If the type we are conversion to is a class type, enumerate its
2936   // constructors.
2937   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
2938     // C++ [over.match.ctor]p1:
2939     //   When objects of class type are direct-initialized (8.5), or
2940     //   copy-initialized from an expression of the same or a
2941     //   derived class type (8.5), overload resolution selects the
2942     //   constructor. [...] For copy-initialization, the candidate
2943     //   functions are all the converting constructors (12.3.1) of
2944     //   that class. The argument list is the expression-list within
2945     //   the parentheses of the initializer.
2946     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
2947         (From->getType()->getAs<RecordType>() &&
2948          S.IsDerivedFrom(From->getType(), ToType)))
2949       ConstructorsOnly = true;
2950 
2951     S.RequireCompleteType(From->getLocStart(), ToType, 0);
2952     // RequireCompleteType may have returned true due to some invalid decl
2953     // during template instantiation, but ToType may be complete enough now
2954     // to try to recover.
2955     if (ToType->isIncompleteType()) {
2956       // We're not going to find any constructors.
2957     } else if (CXXRecordDecl *ToRecordDecl
2958                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
2959 
2960       Expr **Args = &From;
2961       unsigned NumArgs = 1;
2962       bool ListInitializing = false;
2963       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
2964         // But first, see if there is an init-list-contructor that will work.
2965         OverloadingResult Result = IsInitializerListConstructorConversion(
2966             S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
2967         if (Result != OR_No_Viable_Function)
2968           return Result;
2969         // Never mind.
2970         CandidateSet.clear();
2971 
2972         // If we're list-initializing, we pass the individual elements as
2973         // arguments, not the entire list.
2974         Args = InitList->getInits();
2975         NumArgs = InitList->getNumInits();
2976         ListInitializing = true;
2977       }
2978 
2979       DeclContext::lookup_iterator Con, ConEnd;
2980       for (llvm::tie(Con, ConEnd) = S.LookupConstructors(ToRecordDecl);
2981            Con != ConEnd; ++Con) {
2982         NamedDecl *D = *Con;
2983         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2984 
2985         // Find the constructor (which may be a template).
2986         CXXConstructorDecl *Constructor = 0;
2987         FunctionTemplateDecl *ConstructorTmpl
2988           = dyn_cast<FunctionTemplateDecl>(D);
2989         if (ConstructorTmpl)
2990           Constructor
2991             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2992         else
2993           Constructor = cast<CXXConstructorDecl>(D);
2994 
2995         bool Usable = !Constructor->isInvalidDecl();
2996         if (ListInitializing)
2997           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
2998         else
2999           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3000         if (Usable) {
3001           bool SuppressUserConversions = !ConstructorsOnly;
3002           if (SuppressUserConversions && ListInitializing) {
3003             SuppressUserConversions = false;
3004             if (NumArgs == 1) {
3005               // If the first argument is (a reference to) the target type,
3006               // suppress conversions.
3007               SuppressUserConversions = isFirstArgumentCompatibleWithType(
3008                                                 S.Context, Constructor, ToType);
3009             }
3010           }
3011           if (ConstructorTmpl)
3012             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3013                                            /*ExplicitArgs*/ 0,
3014                                            llvm::makeArrayRef(Args, NumArgs),
3015                                            CandidateSet, SuppressUserConversions);
3016           else
3017             // Allow one user-defined conversion when user specifies a
3018             // From->ToType conversion via an static cast (c-style, etc).
3019             S.AddOverloadCandidate(Constructor, FoundDecl,
3020                                    llvm::makeArrayRef(Args, NumArgs),
3021                                    CandidateSet, SuppressUserConversions);
3022         }
3023       }
3024     }
3025   }
3026 
3027   // Enumerate conversion functions, if we're allowed to.
3028   if (ConstructorsOnly || isa<InitListExpr>(From)) {
3029   } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3030     // No conversion functions from incomplete types.
3031   } else if (const RecordType *FromRecordType
3032                                    = From->getType()->getAs<RecordType>()) {
3033     if (CXXRecordDecl *FromRecordDecl
3034          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3035       // Add all of the conversion functions as candidates.
3036       const UnresolvedSetImpl *Conversions
3037         = FromRecordDecl->getVisibleConversionFunctions();
3038       for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3039              E = Conversions->end(); I != E; ++I) {
3040         DeclAccessPair FoundDecl = I.getPair();
3041         NamedDecl *D = FoundDecl.getDecl();
3042         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3043         if (isa<UsingShadowDecl>(D))
3044           D = cast<UsingShadowDecl>(D)->getTargetDecl();
3045 
3046         CXXConversionDecl *Conv;
3047         FunctionTemplateDecl *ConvTemplate;
3048         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3049           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3050         else
3051           Conv = cast<CXXConversionDecl>(D);
3052 
3053         if (AllowExplicit || !Conv->isExplicit()) {
3054           if (ConvTemplate)
3055             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3056                                              ActingContext, From, ToType,
3057                                              CandidateSet);
3058           else
3059             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3060                                      From, ToType, CandidateSet);
3061         }
3062       }
3063     }
3064   }
3065 
3066   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3067 
3068   OverloadCandidateSet::iterator Best;
3069   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3070   case OR_Success:
3071     // Record the standard conversion we used and the conversion function.
3072     if (CXXConstructorDecl *Constructor
3073           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3074       S.MarkFunctionReferenced(From->getLocStart(), Constructor);
3075 
3076       // C++ [over.ics.user]p1:
3077       //   If the user-defined conversion is specified by a
3078       //   constructor (12.3.1), the initial standard conversion
3079       //   sequence converts the source type to the type required by
3080       //   the argument of the constructor.
3081       //
3082       QualType ThisType = Constructor->getThisType(S.Context);
3083       if (isa<InitListExpr>(From)) {
3084         // Initializer lists don't have conversions as such.
3085         User.Before.setAsIdentityConversion();
3086       } else {
3087         if (Best->Conversions[0].isEllipsis())
3088           User.EllipsisConversion = true;
3089         else {
3090           User.Before = Best->Conversions[0].Standard;
3091           User.EllipsisConversion = false;
3092         }
3093       }
3094       User.HadMultipleCandidates = HadMultipleCandidates;
3095       User.ConversionFunction = Constructor;
3096       User.FoundConversionFunction = Best->FoundDecl;
3097       User.After.setAsIdentityConversion();
3098       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3099       User.After.setAllToTypes(ToType);
3100       return OR_Success;
3101     }
3102     if (CXXConversionDecl *Conversion
3103                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
3104       S.MarkFunctionReferenced(From->getLocStart(), Conversion);
3105 
3106       // C++ [over.ics.user]p1:
3107       //
3108       //   [...] If the user-defined conversion is specified by a
3109       //   conversion function (12.3.2), the initial standard
3110       //   conversion sequence converts the source type to the
3111       //   implicit object parameter of the conversion function.
3112       User.Before = Best->Conversions[0].Standard;
3113       User.HadMultipleCandidates = HadMultipleCandidates;
3114       User.ConversionFunction = Conversion;
3115       User.FoundConversionFunction = Best->FoundDecl;
3116       User.EllipsisConversion = false;
3117 
3118       // C++ [over.ics.user]p2:
3119       //   The second standard conversion sequence converts the
3120       //   result of the user-defined conversion to the target type
3121       //   for the sequence. Since an implicit conversion sequence
3122       //   is an initialization, the special rules for
3123       //   initialization by user-defined conversion apply when
3124       //   selecting the best user-defined conversion for a
3125       //   user-defined conversion sequence (see 13.3.3 and
3126       //   13.3.3.1).
3127       User.After = Best->FinalConversion;
3128       return OR_Success;
3129     }
3130     llvm_unreachable("Not a constructor or conversion function?");
3131 
3132   case OR_No_Viable_Function:
3133     return OR_No_Viable_Function;
3134   case OR_Deleted:
3135     // No conversion here! We're done.
3136     return OR_Deleted;
3137 
3138   case OR_Ambiguous:
3139     return OR_Ambiguous;
3140   }
3141 
3142   llvm_unreachable("Invalid OverloadResult!");
3143 }
3144 
3145 bool
3146 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3147   ImplicitConversionSequence ICS;
3148   OverloadCandidateSet CandidateSet(From->getExprLoc());
3149   OverloadingResult OvResult =
3150     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3151                             CandidateSet, false);
3152   if (OvResult == OR_Ambiguous)
3153     Diag(From->getLocStart(),
3154          diag::err_typecheck_ambiguous_condition)
3155           << From->getType() << ToType << From->getSourceRange();
3156   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
3157     Diag(From->getLocStart(),
3158          diag::err_typecheck_nonviable_condition)
3159     << From->getType() << ToType << From->getSourceRange();
3160   else
3161     return false;
3162   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3163   return true;
3164 }
3165 
3166 /// \brief Compare the user-defined conversion functions or constructors
3167 /// of two user-defined conversion sequences to determine whether any ordering
3168 /// is possible.
3169 static ImplicitConversionSequence::CompareKind
3170 compareConversionFunctions(Sema &S,
3171                            FunctionDecl *Function1,
3172                            FunctionDecl *Function2) {
3173   if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus0x)
3174     return ImplicitConversionSequence::Indistinguishable;
3175 
3176   // Objective-C++:
3177   //   If both conversion functions are implicitly-declared conversions from
3178   //   a lambda closure type to a function pointer and a block pointer,
3179   //   respectively, always prefer the conversion to a function pointer,
3180   //   because the function pointer is more lightweight and is more likely
3181   //   to keep code working.
3182   CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3183   if (!Conv1)
3184     return ImplicitConversionSequence::Indistinguishable;
3185 
3186   CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3187   if (!Conv2)
3188     return ImplicitConversionSequence::Indistinguishable;
3189 
3190   if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3191     bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3192     bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3193     if (Block1 != Block2)
3194       return Block1? ImplicitConversionSequence::Worse
3195                    : ImplicitConversionSequence::Better;
3196   }
3197 
3198   return ImplicitConversionSequence::Indistinguishable;
3199 }
3200 
3201 /// CompareImplicitConversionSequences - Compare two implicit
3202 /// conversion sequences to determine whether one is better than the
3203 /// other or if they are indistinguishable (C++ 13.3.3.2).
3204 static ImplicitConversionSequence::CompareKind
3205 CompareImplicitConversionSequences(Sema &S,
3206                                    const ImplicitConversionSequence& ICS1,
3207                                    const ImplicitConversionSequence& ICS2)
3208 {
3209   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3210   // conversion sequences (as defined in 13.3.3.1)
3211   //   -- a standard conversion sequence (13.3.3.1.1) is a better
3212   //      conversion sequence than a user-defined conversion sequence or
3213   //      an ellipsis conversion sequence, and
3214   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3215   //      conversion sequence than an ellipsis conversion sequence
3216   //      (13.3.3.1.3).
3217   //
3218   // C++0x [over.best.ics]p10:
3219   //   For the purpose of ranking implicit conversion sequences as
3220   //   described in 13.3.3.2, the ambiguous conversion sequence is
3221   //   treated as a user-defined sequence that is indistinguishable
3222   //   from any other user-defined conversion sequence.
3223   if (ICS1.getKindRank() < ICS2.getKindRank())
3224     return ImplicitConversionSequence::Better;
3225   if (ICS2.getKindRank() < ICS1.getKindRank())
3226     return ImplicitConversionSequence::Worse;
3227 
3228   // The following checks require both conversion sequences to be of
3229   // the same kind.
3230   if (ICS1.getKind() != ICS2.getKind())
3231     return ImplicitConversionSequence::Indistinguishable;
3232 
3233   ImplicitConversionSequence::CompareKind Result =
3234       ImplicitConversionSequence::Indistinguishable;
3235 
3236   // Two implicit conversion sequences of the same form are
3237   // indistinguishable conversion sequences unless one of the
3238   // following rules apply: (C++ 13.3.3.2p3):
3239   if (ICS1.isStandard())
3240     Result = CompareStandardConversionSequences(S,
3241                                                 ICS1.Standard, ICS2.Standard);
3242   else if (ICS1.isUserDefined()) {
3243     // User-defined conversion sequence U1 is a better conversion
3244     // sequence than another user-defined conversion sequence U2 if
3245     // they contain the same user-defined conversion function or
3246     // constructor and if the second standard conversion sequence of
3247     // U1 is better than the second standard conversion sequence of
3248     // U2 (C++ 13.3.3.2p3).
3249     if (ICS1.UserDefined.ConversionFunction ==
3250           ICS2.UserDefined.ConversionFunction)
3251       Result = CompareStandardConversionSequences(S,
3252                                                   ICS1.UserDefined.After,
3253                                                   ICS2.UserDefined.After);
3254     else
3255       Result = compareConversionFunctions(S,
3256                                           ICS1.UserDefined.ConversionFunction,
3257                                           ICS2.UserDefined.ConversionFunction);
3258   }
3259 
3260   // List-initialization sequence L1 is a better conversion sequence than
3261   // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3262   // for some X and L2 does not.
3263   if (Result == ImplicitConversionSequence::Indistinguishable &&
3264       !ICS1.isBad() &&
3265       ICS1.isListInitializationSequence() &&
3266       ICS2.isListInitializationSequence()) {
3267     if (ICS1.isStdInitializerListElement() &&
3268         !ICS2.isStdInitializerListElement())
3269       return ImplicitConversionSequence::Better;
3270     if (!ICS1.isStdInitializerListElement() &&
3271         ICS2.isStdInitializerListElement())
3272       return ImplicitConversionSequence::Worse;
3273   }
3274 
3275   return Result;
3276 }
3277 
3278 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3279   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3280     Qualifiers Quals;
3281     T1 = Context.getUnqualifiedArrayType(T1, Quals);
3282     T2 = Context.getUnqualifiedArrayType(T2, Quals);
3283   }
3284 
3285   return Context.hasSameUnqualifiedType(T1, T2);
3286 }
3287 
3288 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3289 // determine if one is a proper subset of the other.
3290 static ImplicitConversionSequence::CompareKind
3291 compareStandardConversionSubsets(ASTContext &Context,
3292                                  const StandardConversionSequence& SCS1,
3293                                  const StandardConversionSequence& SCS2) {
3294   ImplicitConversionSequence::CompareKind Result
3295     = ImplicitConversionSequence::Indistinguishable;
3296 
3297   // the identity conversion sequence is considered to be a subsequence of
3298   // any non-identity conversion sequence
3299   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3300     return ImplicitConversionSequence::Better;
3301   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3302     return ImplicitConversionSequence::Worse;
3303 
3304   if (SCS1.Second != SCS2.Second) {
3305     if (SCS1.Second == ICK_Identity)
3306       Result = ImplicitConversionSequence::Better;
3307     else if (SCS2.Second == ICK_Identity)
3308       Result = ImplicitConversionSequence::Worse;
3309     else
3310       return ImplicitConversionSequence::Indistinguishable;
3311   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3312     return ImplicitConversionSequence::Indistinguishable;
3313 
3314   if (SCS1.Third == SCS2.Third) {
3315     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3316                              : ImplicitConversionSequence::Indistinguishable;
3317   }
3318 
3319   if (SCS1.Third == ICK_Identity)
3320     return Result == ImplicitConversionSequence::Worse
3321              ? ImplicitConversionSequence::Indistinguishable
3322              : ImplicitConversionSequence::Better;
3323 
3324   if (SCS2.Third == ICK_Identity)
3325     return Result == ImplicitConversionSequence::Better
3326              ? ImplicitConversionSequence::Indistinguishable
3327              : ImplicitConversionSequence::Worse;
3328 
3329   return ImplicitConversionSequence::Indistinguishable;
3330 }
3331 
3332 /// \brief Determine whether one of the given reference bindings is better
3333 /// than the other based on what kind of bindings they are.
3334 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3335                                        const StandardConversionSequence &SCS2) {
3336   // C++0x [over.ics.rank]p3b4:
3337   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3338   //      implicit object parameter of a non-static member function declared
3339   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3340   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3341   //      lvalue reference to a function lvalue and S2 binds an rvalue
3342   //      reference*.
3343   //
3344   // FIXME: Rvalue references. We're going rogue with the above edits,
3345   // because the semantics in the current C++0x working paper (N3225 at the
3346   // time of this writing) break the standard definition of std::forward
3347   // and std::reference_wrapper when dealing with references to functions.
3348   // Proposed wording changes submitted to CWG for consideration.
3349   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3350       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3351     return false;
3352 
3353   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3354           SCS2.IsLvalueReference) ||
3355          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3356           !SCS2.IsLvalueReference);
3357 }
3358 
3359 /// CompareStandardConversionSequences - Compare two standard
3360 /// conversion sequences to determine whether one is better than the
3361 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3362 static ImplicitConversionSequence::CompareKind
3363 CompareStandardConversionSequences(Sema &S,
3364                                    const StandardConversionSequence& SCS1,
3365                                    const StandardConversionSequence& SCS2)
3366 {
3367   // Standard conversion sequence S1 is a better conversion sequence
3368   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3369 
3370   //  -- S1 is a proper subsequence of S2 (comparing the conversion
3371   //     sequences in the canonical form defined by 13.3.3.1.1,
3372   //     excluding any Lvalue Transformation; the identity conversion
3373   //     sequence is considered to be a subsequence of any
3374   //     non-identity conversion sequence) or, if not that,
3375   if (ImplicitConversionSequence::CompareKind CK
3376         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3377     return CK;
3378 
3379   //  -- the rank of S1 is better than the rank of S2 (by the rules
3380   //     defined below), or, if not that,
3381   ImplicitConversionRank Rank1 = SCS1.getRank();
3382   ImplicitConversionRank Rank2 = SCS2.getRank();
3383   if (Rank1 < Rank2)
3384     return ImplicitConversionSequence::Better;
3385   else if (Rank2 < Rank1)
3386     return ImplicitConversionSequence::Worse;
3387 
3388   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3389   // are indistinguishable unless one of the following rules
3390   // applies:
3391 
3392   //   A conversion that is not a conversion of a pointer, or
3393   //   pointer to member, to bool is better than another conversion
3394   //   that is such a conversion.
3395   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3396     return SCS2.isPointerConversionToBool()
3397              ? ImplicitConversionSequence::Better
3398              : ImplicitConversionSequence::Worse;
3399 
3400   // C++ [over.ics.rank]p4b2:
3401   //
3402   //   If class B is derived directly or indirectly from class A,
3403   //   conversion of B* to A* is better than conversion of B* to
3404   //   void*, and conversion of A* to void* is better than conversion
3405   //   of B* to void*.
3406   bool SCS1ConvertsToVoid
3407     = SCS1.isPointerConversionToVoidPointer(S.Context);
3408   bool SCS2ConvertsToVoid
3409     = SCS2.isPointerConversionToVoidPointer(S.Context);
3410   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3411     // Exactly one of the conversion sequences is a conversion to
3412     // a void pointer; it's the worse conversion.
3413     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3414                               : ImplicitConversionSequence::Worse;
3415   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3416     // Neither conversion sequence converts to a void pointer; compare
3417     // their derived-to-base conversions.
3418     if (ImplicitConversionSequence::CompareKind DerivedCK
3419           = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3420       return DerivedCK;
3421   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3422              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3423     // Both conversion sequences are conversions to void
3424     // pointers. Compare the source types to determine if there's an
3425     // inheritance relationship in their sources.
3426     QualType FromType1 = SCS1.getFromType();
3427     QualType FromType2 = SCS2.getFromType();
3428 
3429     // Adjust the types we're converting from via the array-to-pointer
3430     // conversion, if we need to.
3431     if (SCS1.First == ICK_Array_To_Pointer)
3432       FromType1 = S.Context.getArrayDecayedType(FromType1);
3433     if (SCS2.First == ICK_Array_To_Pointer)
3434       FromType2 = S.Context.getArrayDecayedType(FromType2);
3435 
3436     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3437     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3438 
3439     if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3440       return ImplicitConversionSequence::Better;
3441     else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3442       return ImplicitConversionSequence::Worse;
3443 
3444     // Objective-C++: If one interface is more specific than the
3445     // other, it is the better one.
3446     const ObjCObjectPointerType* FromObjCPtr1
3447       = FromType1->getAs<ObjCObjectPointerType>();
3448     const ObjCObjectPointerType* FromObjCPtr2
3449       = FromType2->getAs<ObjCObjectPointerType>();
3450     if (FromObjCPtr1 && FromObjCPtr2) {
3451       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3452                                                           FromObjCPtr2);
3453       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3454                                                            FromObjCPtr1);
3455       if (AssignLeft != AssignRight) {
3456         return AssignLeft? ImplicitConversionSequence::Better
3457                          : ImplicitConversionSequence::Worse;
3458       }
3459     }
3460   }
3461 
3462   // Compare based on qualification conversions (C++ 13.3.3.2p3,
3463   // bullet 3).
3464   if (ImplicitConversionSequence::CompareKind QualCK
3465         = CompareQualificationConversions(S, SCS1, SCS2))
3466     return QualCK;
3467 
3468   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3469     // Check for a better reference binding based on the kind of bindings.
3470     if (isBetterReferenceBindingKind(SCS1, SCS2))
3471       return ImplicitConversionSequence::Better;
3472     else if (isBetterReferenceBindingKind(SCS2, SCS1))
3473       return ImplicitConversionSequence::Worse;
3474 
3475     // C++ [over.ics.rank]p3b4:
3476     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3477     //      which the references refer are the same type except for
3478     //      top-level cv-qualifiers, and the type to which the reference
3479     //      initialized by S2 refers is more cv-qualified than the type
3480     //      to which the reference initialized by S1 refers.
3481     QualType T1 = SCS1.getToType(2);
3482     QualType T2 = SCS2.getToType(2);
3483     T1 = S.Context.getCanonicalType(T1);
3484     T2 = S.Context.getCanonicalType(T2);
3485     Qualifiers T1Quals, T2Quals;
3486     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3487     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3488     if (UnqualT1 == UnqualT2) {
3489       // Objective-C++ ARC: If the references refer to objects with different
3490       // lifetimes, prefer bindings that don't change lifetime.
3491       if (SCS1.ObjCLifetimeConversionBinding !=
3492                                           SCS2.ObjCLifetimeConversionBinding) {
3493         return SCS1.ObjCLifetimeConversionBinding
3494                                            ? ImplicitConversionSequence::Worse
3495                                            : ImplicitConversionSequence::Better;
3496       }
3497 
3498       // If the type is an array type, promote the element qualifiers to the
3499       // type for comparison.
3500       if (isa<ArrayType>(T1) && T1Quals)
3501         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3502       if (isa<ArrayType>(T2) && T2Quals)
3503         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3504       if (T2.isMoreQualifiedThan(T1))
3505         return ImplicitConversionSequence::Better;
3506       else if (T1.isMoreQualifiedThan(T2))
3507         return ImplicitConversionSequence::Worse;
3508     }
3509   }
3510 
3511   // In Microsoft mode, prefer an integral conversion to a
3512   // floating-to-integral conversion if the integral conversion
3513   // is between types of the same size.
3514   // For example:
3515   // void f(float);
3516   // void f(int);
3517   // int main {
3518   //    long a;
3519   //    f(a);
3520   // }
3521   // Here, MSVC will call f(int) instead of generating a compile error
3522   // as clang will do in standard mode.
3523   if (S.getLangOpts().MicrosoftMode &&
3524       SCS1.Second == ICK_Integral_Conversion &&
3525       SCS2.Second == ICK_Floating_Integral &&
3526       S.Context.getTypeSize(SCS1.getFromType()) ==
3527       S.Context.getTypeSize(SCS1.getToType(2)))
3528     return ImplicitConversionSequence::Better;
3529 
3530   return ImplicitConversionSequence::Indistinguishable;
3531 }
3532 
3533 /// CompareQualificationConversions - Compares two standard conversion
3534 /// sequences to determine whether they can be ranked based on their
3535 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3536 ImplicitConversionSequence::CompareKind
3537 CompareQualificationConversions(Sema &S,
3538                                 const StandardConversionSequence& SCS1,
3539                                 const StandardConversionSequence& SCS2) {
3540   // C++ 13.3.3.2p3:
3541   //  -- S1 and S2 differ only in their qualification conversion and
3542   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3543   //     cv-qualification signature of type T1 is a proper subset of
3544   //     the cv-qualification signature of type T2, and S1 is not the
3545   //     deprecated string literal array-to-pointer conversion (4.2).
3546   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3547       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3548     return ImplicitConversionSequence::Indistinguishable;
3549 
3550   // FIXME: the example in the standard doesn't use a qualification
3551   // conversion (!)
3552   QualType T1 = SCS1.getToType(2);
3553   QualType T2 = SCS2.getToType(2);
3554   T1 = S.Context.getCanonicalType(T1);
3555   T2 = S.Context.getCanonicalType(T2);
3556   Qualifiers T1Quals, T2Quals;
3557   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3558   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3559 
3560   // If the types are the same, we won't learn anything by unwrapped
3561   // them.
3562   if (UnqualT1 == UnqualT2)
3563     return ImplicitConversionSequence::Indistinguishable;
3564 
3565   // If the type is an array type, promote the element qualifiers to the type
3566   // for comparison.
3567   if (isa<ArrayType>(T1) && T1Quals)
3568     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3569   if (isa<ArrayType>(T2) && T2Quals)
3570     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3571 
3572   ImplicitConversionSequence::CompareKind Result
3573     = ImplicitConversionSequence::Indistinguishable;
3574 
3575   // Objective-C++ ARC:
3576   //   Prefer qualification conversions not involving a change in lifetime
3577   //   to qualification conversions that do not change lifetime.
3578   if (SCS1.QualificationIncludesObjCLifetime !=
3579                                       SCS2.QualificationIncludesObjCLifetime) {
3580     Result = SCS1.QualificationIncludesObjCLifetime
3581                ? ImplicitConversionSequence::Worse
3582                : ImplicitConversionSequence::Better;
3583   }
3584 
3585   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3586     // Within each iteration of the loop, we check the qualifiers to
3587     // determine if this still looks like a qualification
3588     // conversion. Then, if all is well, we unwrap one more level of
3589     // pointers or pointers-to-members and do it all again
3590     // until there are no more pointers or pointers-to-members left
3591     // to unwrap. This essentially mimics what
3592     // IsQualificationConversion does, but here we're checking for a
3593     // strict subset of qualifiers.
3594     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3595       // The qualifiers are the same, so this doesn't tell us anything
3596       // about how the sequences rank.
3597       ;
3598     else if (T2.isMoreQualifiedThan(T1)) {
3599       // T1 has fewer qualifiers, so it could be the better sequence.
3600       if (Result == ImplicitConversionSequence::Worse)
3601         // Neither has qualifiers that are a subset of the other's
3602         // qualifiers.
3603         return ImplicitConversionSequence::Indistinguishable;
3604 
3605       Result = ImplicitConversionSequence::Better;
3606     } else if (T1.isMoreQualifiedThan(T2)) {
3607       // T2 has fewer qualifiers, so it could be the better sequence.
3608       if (Result == ImplicitConversionSequence::Better)
3609         // Neither has qualifiers that are a subset of the other's
3610         // qualifiers.
3611         return ImplicitConversionSequence::Indistinguishable;
3612 
3613       Result = ImplicitConversionSequence::Worse;
3614     } else {
3615       // Qualifiers are disjoint.
3616       return ImplicitConversionSequence::Indistinguishable;
3617     }
3618 
3619     // If the types after this point are equivalent, we're done.
3620     if (S.Context.hasSameUnqualifiedType(T1, T2))
3621       break;
3622   }
3623 
3624   // Check that the winning standard conversion sequence isn't using
3625   // the deprecated string literal array to pointer conversion.
3626   switch (Result) {
3627   case ImplicitConversionSequence::Better:
3628     if (SCS1.DeprecatedStringLiteralToCharPtr)
3629       Result = ImplicitConversionSequence::Indistinguishable;
3630     break;
3631 
3632   case ImplicitConversionSequence::Indistinguishable:
3633     break;
3634 
3635   case ImplicitConversionSequence::Worse:
3636     if (SCS2.DeprecatedStringLiteralToCharPtr)
3637       Result = ImplicitConversionSequence::Indistinguishable;
3638     break;
3639   }
3640 
3641   return Result;
3642 }
3643 
3644 /// CompareDerivedToBaseConversions - Compares two standard conversion
3645 /// sequences to determine whether they can be ranked based on their
3646 /// various kinds of derived-to-base conversions (C++
3647 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
3648 /// conversions between Objective-C interface types.
3649 ImplicitConversionSequence::CompareKind
3650 CompareDerivedToBaseConversions(Sema &S,
3651                                 const StandardConversionSequence& SCS1,
3652                                 const StandardConversionSequence& SCS2) {
3653   QualType FromType1 = SCS1.getFromType();
3654   QualType ToType1 = SCS1.getToType(1);
3655   QualType FromType2 = SCS2.getFromType();
3656   QualType ToType2 = SCS2.getToType(1);
3657 
3658   // Adjust the types we're converting from via the array-to-pointer
3659   // conversion, if we need to.
3660   if (SCS1.First == ICK_Array_To_Pointer)
3661     FromType1 = S.Context.getArrayDecayedType(FromType1);
3662   if (SCS2.First == ICK_Array_To_Pointer)
3663     FromType2 = S.Context.getArrayDecayedType(FromType2);
3664 
3665   // Canonicalize all of the types.
3666   FromType1 = S.Context.getCanonicalType(FromType1);
3667   ToType1 = S.Context.getCanonicalType(ToType1);
3668   FromType2 = S.Context.getCanonicalType(FromType2);
3669   ToType2 = S.Context.getCanonicalType(ToType2);
3670 
3671   // C++ [over.ics.rank]p4b3:
3672   //
3673   //   If class B is derived directly or indirectly from class A and
3674   //   class C is derived directly or indirectly from B,
3675   //
3676   // Compare based on pointer conversions.
3677   if (SCS1.Second == ICK_Pointer_Conversion &&
3678       SCS2.Second == ICK_Pointer_Conversion &&
3679       /*FIXME: Remove if Objective-C id conversions get their own rank*/
3680       FromType1->isPointerType() && FromType2->isPointerType() &&
3681       ToType1->isPointerType() && ToType2->isPointerType()) {
3682     QualType FromPointee1
3683       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3684     QualType ToPointee1
3685       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3686     QualType FromPointee2
3687       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3688     QualType ToPointee2
3689       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3690 
3691     //   -- conversion of C* to B* is better than conversion of C* to A*,
3692     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3693       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3694         return ImplicitConversionSequence::Better;
3695       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3696         return ImplicitConversionSequence::Worse;
3697     }
3698 
3699     //   -- conversion of B* to A* is better than conversion of C* to A*,
3700     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3701       if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3702         return ImplicitConversionSequence::Better;
3703       else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3704         return ImplicitConversionSequence::Worse;
3705     }
3706   } else if (SCS1.Second == ICK_Pointer_Conversion &&
3707              SCS2.Second == ICK_Pointer_Conversion) {
3708     const ObjCObjectPointerType *FromPtr1
3709       = FromType1->getAs<ObjCObjectPointerType>();
3710     const ObjCObjectPointerType *FromPtr2
3711       = FromType2->getAs<ObjCObjectPointerType>();
3712     const ObjCObjectPointerType *ToPtr1
3713       = ToType1->getAs<ObjCObjectPointerType>();
3714     const ObjCObjectPointerType *ToPtr2
3715       = ToType2->getAs<ObjCObjectPointerType>();
3716 
3717     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3718       // Apply the same conversion ranking rules for Objective-C pointer types
3719       // that we do for C++ pointers to class types. However, we employ the
3720       // Objective-C pseudo-subtyping relationship used for assignment of
3721       // Objective-C pointer types.
3722       bool FromAssignLeft
3723         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3724       bool FromAssignRight
3725         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3726       bool ToAssignLeft
3727         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3728       bool ToAssignRight
3729         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3730 
3731       // A conversion to an a non-id object pointer type or qualified 'id'
3732       // type is better than a conversion to 'id'.
3733       if (ToPtr1->isObjCIdType() &&
3734           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3735         return ImplicitConversionSequence::Worse;
3736       if (ToPtr2->isObjCIdType() &&
3737           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3738         return ImplicitConversionSequence::Better;
3739 
3740       // A conversion to a non-id object pointer type is better than a
3741       // conversion to a qualified 'id' type
3742       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3743         return ImplicitConversionSequence::Worse;
3744       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3745         return ImplicitConversionSequence::Better;
3746 
3747       // A conversion to an a non-Class object pointer type or qualified 'Class'
3748       // type is better than a conversion to 'Class'.
3749       if (ToPtr1->isObjCClassType() &&
3750           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3751         return ImplicitConversionSequence::Worse;
3752       if (ToPtr2->isObjCClassType() &&
3753           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3754         return ImplicitConversionSequence::Better;
3755 
3756       // A conversion to a non-Class object pointer type is better than a
3757       // conversion to a qualified 'Class' type.
3758       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3759         return ImplicitConversionSequence::Worse;
3760       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3761         return ImplicitConversionSequence::Better;
3762 
3763       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3764       if (S.Context.hasSameType(FromType1, FromType2) &&
3765           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3766           (ToAssignLeft != ToAssignRight))
3767         return ToAssignLeft? ImplicitConversionSequence::Worse
3768                            : ImplicitConversionSequence::Better;
3769 
3770       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3771       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3772           (FromAssignLeft != FromAssignRight))
3773         return FromAssignLeft? ImplicitConversionSequence::Better
3774         : ImplicitConversionSequence::Worse;
3775     }
3776   }
3777 
3778   // Ranking of member-pointer types.
3779   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3780       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3781       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3782     const MemberPointerType * FromMemPointer1 =
3783                                         FromType1->getAs<MemberPointerType>();
3784     const MemberPointerType * ToMemPointer1 =
3785                                           ToType1->getAs<MemberPointerType>();
3786     const MemberPointerType * FromMemPointer2 =
3787                                           FromType2->getAs<MemberPointerType>();
3788     const MemberPointerType * ToMemPointer2 =
3789                                           ToType2->getAs<MemberPointerType>();
3790     const Type *FromPointeeType1 = FromMemPointer1->getClass();
3791     const Type *ToPointeeType1 = ToMemPointer1->getClass();
3792     const Type *FromPointeeType2 = FromMemPointer2->getClass();
3793     const Type *ToPointeeType2 = ToMemPointer2->getClass();
3794     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3795     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3796     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3797     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3798     // conversion of A::* to B::* is better than conversion of A::* to C::*,
3799     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3800       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3801         return ImplicitConversionSequence::Worse;
3802       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3803         return ImplicitConversionSequence::Better;
3804     }
3805     // conversion of B::* to C::* is better than conversion of A::* to C::*
3806     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3807       if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3808         return ImplicitConversionSequence::Better;
3809       else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3810         return ImplicitConversionSequence::Worse;
3811     }
3812   }
3813 
3814   if (SCS1.Second == ICK_Derived_To_Base) {
3815     //   -- conversion of C to B is better than conversion of C to A,
3816     //   -- binding of an expression of type C to a reference of type
3817     //      B& is better than binding an expression of type C to a
3818     //      reference of type A&,
3819     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3820         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3821       if (S.IsDerivedFrom(ToType1, ToType2))
3822         return ImplicitConversionSequence::Better;
3823       else if (S.IsDerivedFrom(ToType2, ToType1))
3824         return ImplicitConversionSequence::Worse;
3825     }
3826 
3827     //   -- conversion of B to A is better than conversion of C to A.
3828     //   -- binding of an expression of type B to a reference of type
3829     //      A& is better than binding an expression of type C to a
3830     //      reference of type A&,
3831     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3832         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3833       if (S.IsDerivedFrom(FromType2, FromType1))
3834         return ImplicitConversionSequence::Better;
3835       else if (S.IsDerivedFrom(FromType1, FromType2))
3836         return ImplicitConversionSequence::Worse;
3837     }
3838   }
3839 
3840   return ImplicitConversionSequence::Indistinguishable;
3841 }
3842 
3843 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
3844 /// determine whether they are reference-related,
3845 /// reference-compatible, reference-compatible with added
3846 /// qualification, or incompatible, for use in C++ initialization by
3847 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3848 /// type, and the first type (T1) is the pointee type of the reference
3849 /// type being initialized.
3850 Sema::ReferenceCompareResult
3851 Sema::CompareReferenceRelationship(SourceLocation Loc,
3852                                    QualType OrigT1, QualType OrigT2,
3853                                    bool &DerivedToBase,
3854                                    bool &ObjCConversion,
3855                                    bool &ObjCLifetimeConversion) {
3856   assert(!OrigT1->isReferenceType() &&
3857     "T1 must be the pointee type of the reference type");
3858   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3859 
3860   QualType T1 = Context.getCanonicalType(OrigT1);
3861   QualType T2 = Context.getCanonicalType(OrigT2);
3862   Qualifiers T1Quals, T2Quals;
3863   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3864   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3865 
3866   // C++ [dcl.init.ref]p4:
3867   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3868   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3869   //   T1 is a base class of T2.
3870   DerivedToBase = false;
3871   ObjCConversion = false;
3872   ObjCLifetimeConversion = false;
3873   if (UnqualT1 == UnqualT2) {
3874     // Nothing to do.
3875   } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3876            IsDerivedFrom(UnqualT2, UnqualT1))
3877     DerivedToBase = true;
3878   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3879            UnqualT2->isObjCObjectOrInterfaceType() &&
3880            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3881     ObjCConversion = true;
3882   else
3883     return Ref_Incompatible;
3884 
3885   // At this point, we know that T1 and T2 are reference-related (at
3886   // least).
3887 
3888   // If the type is an array type, promote the element qualifiers to the type
3889   // for comparison.
3890   if (isa<ArrayType>(T1) && T1Quals)
3891     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
3892   if (isa<ArrayType>(T2) && T2Quals)
3893     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
3894 
3895   // C++ [dcl.init.ref]p4:
3896   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
3897   //   reference-related to T2 and cv1 is the same cv-qualification
3898   //   as, or greater cv-qualification than, cv2. For purposes of
3899   //   overload resolution, cases for which cv1 is greater
3900   //   cv-qualification than cv2 are identified as
3901   //   reference-compatible with added qualification (see 13.3.3.2).
3902   //
3903   // Note that we also require equivalence of Objective-C GC and address-space
3904   // qualifiers when performing these computations, so that e.g., an int in
3905   // address space 1 is not reference-compatible with an int in address
3906   // space 2.
3907   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
3908       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
3909     T1Quals.removeObjCLifetime();
3910     T2Quals.removeObjCLifetime();
3911     ObjCLifetimeConversion = true;
3912   }
3913 
3914   if (T1Quals == T2Quals)
3915     return Ref_Compatible;
3916   else if (T1Quals.compatiblyIncludes(T2Quals))
3917     return Ref_Compatible_With_Added_Qualification;
3918   else
3919     return Ref_Related;
3920 }
3921 
3922 /// \brief Look for a user-defined conversion to an value reference-compatible
3923 ///        with DeclType. Return true if something definite is found.
3924 static bool
3925 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
3926                          QualType DeclType, SourceLocation DeclLoc,
3927                          Expr *Init, QualType T2, bool AllowRvalues,
3928                          bool AllowExplicit) {
3929   assert(T2->isRecordType() && "Can only find conversions of record types.");
3930   CXXRecordDecl *T2RecordDecl
3931     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
3932 
3933   OverloadCandidateSet CandidateSet(DeclLoc);
3934   const UnresolvedSetImpl *Conversions
3935     = T2RecordDecl->getVisibleConversionFunctions();
3936   for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3937          E = Conversions->end(); I != E; ++I) {
3938     NamedDecl *D = *I;
3939     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
3940     if (isa<UsingShadowDecl>(D))
3941       D = cast<UsingShadowDecl>(D)->getTargetDecl();
3942 
3943     FunctionTemplateDecl *ConvTemplate
3944       = dyn_cast<FunctionTemplateDecl>(D);
3945     CXXConversionDecl *Conv;
3946     if (ConvTemplate)
3947       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3948     else
3949       Conv = cast<CXXConversionDecl>(D);
3950 
3951     // If this is an explicit conversion, and we're not allowed to consider
3952     // explicit conversions, skip it.
3953     if (!AllowExplicit && Conv->isExplicit())
3954       continue;
3955 
3956     if (AllowRvalues) {
3957       bool DerivedToBase = false;
3958       bool ObjCConversion = false;
3959       bool ObjCLifetimeConversion = false;
3960 
3961       // If we are initializing an rvalue reference, don't permit conversion
3962       // functions that return lvalues.
3963       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
3964         const ReferenceType *RefType
3965           = Conv->getConversionType()->getAs<LValueReferenceType>();
3966         if (RefType && !RefType->getPointeeType()->isFunctionType())
3967           continue;
3968       }
3969 
3970       if (!ConvTemplate &&
3971           S.CompareReferenceRelationship(
3972             DeclLoc,
3973             Conv->getConversionType().getNonReferenceType()
3974               .getUnqualifiedType(),
3975             DeclType.getNonReferenceType().getUnqualifiedType(),
3976             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
3977           Sema::Ref_Incompatible)
3978         continue;
3979     } else {
3980       // If the conversion function doesn't return a reference type,
3981       // it can't be considered for this conversion. An rvalue reference
3982       // is only acceptable if its referencee is a function type.
3983 
3984       const ReferenceType *RefType =
3985         Conv->getConversionType()->getAs<ReferenceType>();
3986       if (!RefType ||
3987           (!RefType->isLValueReferenceType() &&
3988            !RefType->getPointeeType()->isFunctionType()))
3989         continue;
3990     }
3991 
3992     if (ConvTemplate)
3993       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
3994                                        Init, DeclType, CandidateSet);
3995     else
3996       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
3997                                DeclType, CandidateSet);
3998   }
3999 
4000   bool HadMultipleCandidates = (CandidateSet.size() > 1);
4001 
4002   OverloadCandidateSet::iterator Best;
4003   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4004   case OR_Success:
4005     // C++ [over.ics.ref]p1:
4006     //
4007     //   [...] If the parameter binds directly to the result of
4008     //   applying a conversion function to the argument
4009     //   expression, the implicit conversion sequence is a
4010     //   user-defined conversion sequence (13.3.3.1.2), with the
4011     //   second standard conversion sequence either an identity
4012     //   conversion or, if the conversion function returns an
4013     //   entity of a type that is a derived class of the parameter
4014     //   type, a derived-to-base Conversion.
4015     if (!Best->FinalConversion.DirectBinding)
4016       return false;
4017 
4018     if (Best->Function)
4019       S.MarkFunctionReferenced(DeclLoc, Best->Function);
4020     ICS.setUserDefined();
4021     ICS.UserDefined.Before = Best->Conversions[0].Standard;
4022     ICS.UserDefined.After = Best->FinalConversion;
4023     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4024     ICS.UserDefined.ConversionFunction = Best->Function;
4025     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4026     ICS.UserDefined.EllipsisConversion = false;
4027     assert(ICS.UserDefined.After.ReferenceBinding &&
4028            ICS.UserDefined.After.DirectBinding &&
4029            "Expected a direct reference binding!");
4030     return true;
4031 
4032   case OR_Ambiguous:
4033     ICS.setAmbiguous();
4034     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4035          Cand != CandidateSet.end(); ++Cand)
4036       if (Cand->Viable)
4037         ICS.Ambiguous.addConversion(Cand->Function);
4038     return true;
4039 
4040   case OR_No_Viable_Function:
4041   case OR_Deleted:
4042     // There was no suitable conversion, or we found a deleted
4043     // conversion; continue with other checks.
4044     return false;
4045   }
4046 
4047   llvm_unreachable("Invalid OverloadResult!");
4048 }
4049 
4050 /// \brief Compute an implicit conversion sequence for reference
4051 /// initialization.
4052 static ImplicitConversionSequence
4053 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4054                  SourceLocation DeclLoc,
4055                  bool SuppressUserConversions,
4056                  bool AllowExplicit) {
4057   assert(DeclType->isReferenceType() && "Reference init needs a reference");
4058 
4059   // Most paths end in a failed conversion.
4060   ImplicitConversionSequence ICS;
4061   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4062 
4063   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4064   QualType T2 = Init->getType();
4065 
4066   // If the initializer is the address of an overloaded function, try
4067   // to resolve the overloaded function. If all goes well, T2 is the
4068   // type of the resulting function.
4069   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4070     DeclAccessPair Found;
4071     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4072                                                                 false, Found))
4073       T2 = Fn->getType();
4074   }
4075 
4076   // Compute some basic properties of the types and the initializer.
4077   bool isRValRef = DeclType->isRValueReferenceType();
4078   bool DerivedToBase = false;
4079   bool ObjCConversion = false;
4080   bool ObjCLifetimeConversion = false;
4081   Expr::Classification InitCategory = Init->Classify(S.Context);
4082   Sema::ReferenceCompareResult RefRelationship
4083     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4084                                      ObjCConversion, ObjCLifetimeConversion);
4085 
4086 
4087   // C++0x [dcl.init.ref]p5:
4088   //   A reference to type "cv1 T1" is initialized by an expression
4089   //   of type "cv2 T2" as follows:
4090 
4091   //     -- If reference is an lvalue reference and the initializer expression
4092   if (!isRValRef) {
4093     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4094     //        reference-compatible with "cv2 T2," or
4095     //
4096     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4097     if (InitCategory.isLValue() &&
4098         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4099       // C++ [over.ics.ref]p1:
4100       //   When a parameter of reference type binds directly (8.5.3)
4101       //   to an argument expression, the implicit conversion sequence
4102       //   is the identity conversion, unless the argument expression
4103       //   has a type that is a derived class of the parameter type,
4104       //   in which case the implicit conversion sequence is a
4105       //   derived-to-base Conversion (13.3.3.1).
4106       ICS.setStandard();
4107       ICS.Standard.First = ICK_Identity;
4108       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4109                          : ObjCConversion? ICK_Compatible_Conversion
4110                          : ICK_Identity;
4111       ICS.Standard.Third = ICK_Identity;
4112       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4113       ICS.Standard.setToType(0, T2);
4114       ICS.Standard.setToType(1, T1);
4115       ICS.Standard.setToType(2, T1);
4116       ICS.Standard.ReferenceBinding = true;
4117       ICS.Standard.DirectBinding = true;
4118       ICS.Standard.IsLvalueReference = !isRValRef;
4119       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4120       ICS.Standard.BindsToRvalue = false;
4121       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4122       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4123       ICS.Standard.CopyConstructor = 0;
4124 
4125       // Nothing more to do: the inaccessibility/ambiguity check for
4126       // derived-to-base conversions is suppressed when we're
4127       // computing the implicit conversion sequence (C++
4128       // [over.best.ics]p2).
4129       return ICS;
4130     }
4131 
4132     //       -- has a class type (i.e., T2 is a class type), where T1 is
4133     //          not reference-related to T2, and can be implicitly
4134     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4135     //          is reference-compatible with "cv3 T3" 92) (this
4136     //          conversion is selected by enumerating the applicable
4137     //          conversion functions (13.3.1.6) and choosing the best
4138     //          one through overload resolution (13.3)),
4139     if (!SuppressUserConversions && T2->isRecordType() &&
4140         !S.RequireCompleteType(DeclLoc, T2, 0) &&
4141         RefRelationship == Sema::Ref_Incompatible) {
4142       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4143                                    Init, T2, /*AllowRvalues=*/false,
4144                                    AllowExplicit))
4145         return ICS;
4146     }
4147   }
4148 
4149   //     -- Otherwise, the reference shall be an lvalue reference to a
4150   //        non-volatile const type (i.e., cv1 shall be const), or the reference
4151   //        shall be an rvalue reference.
4152   //
4153   // We actually handle one oddity of C++ [over.ics.ref] at this
4154   // point, which is that, due to p2 (which short-circuits reference
4155   // binding by only attempting a simple conversion for non-direct
4156   // bindings) and p3's strange wording, we allow a const volatile
4157   // reference to bind to an rvalue. Hence the check for the presence
4158   // of "const" rather than checking for "const" being the only
4159   // qualifier.
4160   // This is also the point where rvalue references and lvalue inits no longer
4161   // go together.
4162   if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4163     return ICS;
4164 
4165   //       -- If the initializer expression
4166   //
4167   //            -- is an xvalue, class prvalue, array prvalue or function
4168   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4169   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4170       (InitCategory.isXValue() ||
4171       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4172       (InitCategory.isLValue() && T2->isFunctionType()))) {
4173     ICS.setStandard();
4174     ICS.Standard.First = ICK_Identity;
4175     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4176                       : ObjCConversion? ICK_Compatible_Conversion
4177                       : ICK_Identity;
4178     ICS.Standard.Third = ICK_Identity;
4179     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4180     ICS.Standard.setToType(0, T2);
4181     ICS.Standard.setToType(1, T1);
4182     ICS.Standard.setToType(2, T1);
4183     ICS.Standard.ReferenceBinding = true;
4184     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4185     // binding unless we're binding to a class prvalue.
4186     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4187     // allow the use of rvalue references in C++98/03 for the benefit of
4188     // standard library implementors; therefore, we need the xvalue check here.
4189     ICS.Standard.DirectBinding =
4190       S.getLangOpts().CPlusPlus0x ||
4191       (InitCategory.isPRValue() && !T2->isRecordType());
4192     ICS.Standard.IsLvalueReference = !isRValRef;
4193     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4194     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4195     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4196     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4197     ICS.Standard.CopyConstructor = 0;
4198     return ICS;
4199   }
4200 
4201   //            -- has a class type (i.e., T2 is a class type), where T1 is not
4202   //               reference-related to T2, and can be implicitly converted to
4203   //               an xvalue, class prvalue, or function lvalue of type
4204   //               "cv3 T3", where "cv1 T1" is reference-compatible with
4205   //               "cv3 T3",
4206   //
4207   //          then the reference is bound to the value of the initializer
4208   //          expression in the first case and to the result of the conversion
4209   //          in the second case (or, in either case, to an appropriate base
4210   //          class subobject).
4211   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4212       T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4213       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4214                                Init, T2, /*AllowRvalues=*/true,
4215                                AllowExplicit)) {
4216     // In the second case, if the reference is an rvalue reference
4217     // and the second standard conversion sequence of the
4218     // user-defined conversion sequence includes an lvalue-to-rvalue
4219     // conversion, the program is ill-formed.
4220     if (ICS.isUserDefined() && isRValRef &&
4221         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4222       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4223 
4224     return ICS;
4225   }
4226 
4227   //       -- Otherwise, a temporary of type "cv1 T1" is created and
4228   //          initialized from the initializer expression using the
4229   //          rules for a non-reference copy initialization (8.5). The
4230   //          reference is then bound to the temporary. If T1 is
4231   //          reference-related to T2, cv1 must be the same
4232   //          cv-qualification as, or greater cv-qualification than,
4233   //          cv2; otherwise, the program is ill-formed.
4234   if (RefRelationship == Sema::Ref_Related) {
4235     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4236     // we would be reference-compatible or reference-compatible with
4237     // added qualification. But that wasn't the case, so the reference
4238     // initialization fails.
4239     //
4240     // Note that we only want to check address spaces and cvr-qualifiers here.
4241     // ObjC GC and lifetime qualifiers aren't important.
4242     Qualifiers T1Quals = T1.getQualifiers();
4243     Qualifiers T2Quals = T2.getQualifiers();
4244     T1Quals.removeObjCGCAttr();
4245     T1Quals.removeObjCLifetime();
4246     T2Quals.removeObjCGCAttr();
4247     T2Quals.removeObjCLifetime();
4248     if (!T1Quals.compatiblyIncludes(T2Quals))
4249       return ICS;
4250   }
4251 
4252   // If at least one of the types is a class type, the types are not
4253   // related, and we aren't allowed any user conversions, the
4254   // reference binding fails. This case is important for breaking
4255   // recursion, since TryImplicitConversion below will attempt to
4256   // create a temporary through the use of a copy constructor.
4257   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4258       (T1->isRecordType() || T2->isRecordType()))
4259     return ICS;
4260 
4261   // If T1 is reference-related to T2 and the reference is an rvalue
4262   // reference, the initializer expression shall not be an lvalue.
4263   if (RefRelationship >= Sema::Ref_Related &&
4264       isRValRef && Init->Classify(S.Context).isLValue())
4265     return ICS;
4266 
4267   // C++ [over.ics.ref]p2:
4268   //   When a parameter of reference type is not bound directly to
4269   //   an argument expression, the conversion sequence is the one
4270   //   required to convert the argument expression to the
4271   //   underlying type of the reference according to
4272   //   13.3.3.1. Conceptually, this conversion sequence corresponds
4273   //   to copy-initializing a temporary of the underlying type with
4274   //   the argument expression. Any difference in top-level
4275   //   cv-qualification is subsumed by the initialization itself
4276   //   and does not constitute a conversion.
4277   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4278                               /*AllowExplicit=*/false,
4279                               /*InOverloadResolution=*/false,
4280                               /*CStyle=*/false,
4281                               /*AllowObjCWritebackConversion=*/false);
4282 
4283   // Of course, that's still a reference binding.
4284   if (ICS.isStandard()) {
4285     ICS.Standard.ReferenceBinding = true;
4286     ICS.Standard.IsLvalueReference = !isRValRef;
4287     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4288     ICS.Standard.BindsToRvalue = true;
4289     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4290     ICS.Standard.ObjCLifetimeConversionBinding = false;
4291   } else if (ICS.isUserDefined()) {
4292     // Don't allow rvalue references to bind to lvalues.
4293     if (DeclType->isRValueReferenceType()) {
4294       if (const ReferenceType *RefType
4295             = ICS.UserDefined.ConversionFunction->getResultType()
4296                 ->getAs<LValueReferenceType>()) {
4297         if (!RefType->getPointeeType()->isFunctionType()) {
4298           ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4299                      DeclType);
4300           return ICS;
4301         }
4302       }
4303     }
4304 
4305     ICS.UserDefined.After.ReferenceBinding = true;
4306     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4307     ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4308     ICS.UserDefined.After.BindsToRvalue = true;
4309     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4310     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4311   }
4312 
4313   return ICS;
4314 }
4315 
4316 static ImplicitConversionSequence
4317 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4318                       bool SuppressUserConversions,
4319                       bool InOverloadResolution,
4320                       bool AllowObjCWritebackConversion,
4321                       bool AllowExplicit = false);
4322 
4323 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4324 /// initializer list From.
4325 static ImplicitConversionSequence
4326 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4327                   bool SuppressUserConversions,
4328                   bool InOverloadResolution,
4329                   bool AllowObjCWritebackConversion) {
4330   // C++11 [over.ics.list]p1:
4331   //   When an argument is an initializer list, it is not an expression and
4332   //   special rules apply for converting it to a parameter type.
4333 
4334   ImplicitConversionSequence Result;
4335   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4336   Result.setListInitializationSequence();
4337 
4338   // We need a complete type for what follows. Incomplete types can never be
4339   // initialized from init lists.
4340   if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4341     return Result;
4342 
4343   // C++11 [over.ics.list]p2:
4344   //   If the parameter type is std::initializer_list<X> or "array of X" and
4345   //   all the elements can be implicitly converted to X, the implicit
4346   //   conversion sequence is the worst conversion necessary to convert an
4347   //   element of the list to X.
4348   bool toStdInitializerList = false;
4349   QualType X;
4350   if (ToType->isArrayType())
4351     X = S.Context.getBaseElementType(ToType);
4352   else
4353     toStdInitializerList = S.isStdInitializerList(ToType, &X);
4354   if (!X.isNull()) {
4355     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4356       Expr *Init = From->getInit(i);
4357       ImplicitConversionSequence ICS =
4358           TryCopyInitialization(S, Init, X, SuppressUserConversions,
4359                                 InOverloadResolution,
4360                                 AllowObjCWritebackConversion);
4361       // If a single element isn't convertible, fail.
4362       if (ICS.isBad()) {
4363         Result = ICS;
4364         break;
4365       }
4366       // Otherwise, look for the worst conversion.
4367       if (Result.isBad() ||
4368           CompareImplicitConversionSequences(S, ICS, Result) ==
4369               ImplicitConversionSequence::Worse)
4370         Result = ICS;
4371     }
4372 
4373     // For an empty list, we won't have computed any conversion sequence.
4374     // Introduce the identity conversion sequence.
4375     if (From->getNumInits() == 0) {
4376       Result.setStandard();
4377       Result.Standard.setAsIdentityConversion();
4378       Result.Standard.setFromType(ToType);
4379       Result.Standard.setAllToTypes(ToType);
4380     }
4381 
4382     Result.setListInitializationSequence();
4383     Result.setStdInitializerListElement(toStdInitializerList);
4384     return Result;
4385   }
4386 
4387   // C++11 [over.ics.list]p3:
4388   //   Otherwise, if the parameter is a non-aggregate class X and overload
4389   //   resolution chooses a single best constructor [...] the implicit
4390   //   conversion sequence is a user-defined conversion sequence. If multiple
4391   //   constructors are viable but none is better than the others, the
4392   //   implicit conversion sequence is a user-defined conversion sequence.
4393   if (ToType->isRecordType() && !ToType->isAggregateType()) {
4394     // This function can deal with initializer lists.
4395     Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4396                                       /*AllowExplicit=*/false,
4397                                       InOverloadResolution, /*CStyle=*/false,
4398                                       AllowObjCWritebackConversion);
4399     Result.setListInitializationSequence();
4400     return Result;
4401   }
4402 
4403   // C++11 [over.ics.list]p4:
4404   //   Otherwise, if the parameter has an aggregate type which can be
4405   //   initialized from the initializer list [...] the implicit conversion
4406   //   sequence is a user-defined conversion sequence.
4407   if (ToType->isAggregateType()) {
4408     // Type is an aggregate, argument is an init list. At this point it comes
4409     // down to checking whether the initialization works.
4410     // FIXME: Find out whether this parameter is consumed or not.
4411     InitializedEntity Entity =
4412         InitializedEntity::InitializeParameter(S.Context, ToType,
4413                                                /*Consumed=*/false);
4414     if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4415       Result.setUserDefined();
4416       Result.UserDefined.Before.setAsIdentityConversion();
4417       // Initializer lists don't have a type.
4418       Result.UserDefined.Before.setFromType(QualType());
4419       Result.UserDefined.Before.setAllToTypes(QualType());
4420 
4421       Result.UserDefined.After.setAsIdentityConversion();
4422       Result.UserDefined.After.setFromType(ToType);
4423       Result.UserDefined.After.setAllToTypes(ToType);
4424       Result.UserDefined.ConversionFunction = 0;
4425     }
4426     return Result;
4427   }
4428 
4429   // C++11 [over.ics.list]p5:
4430   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4431   if (ToType->isReferenceType()) {
4432     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4433     // mention initializer lists in any way. So we go by what list-
4434     // initialization would do and try to extrapolate from that.
4435 
4436     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4437 
4438     // If the initializer list has a single element that is reference-related
4439     // to the parameter type, we initialize the reference from that.
4440     if (From->getNumInits() == 1) {
4441       Expr *Init = From->getInit(0);
4442 
4443       QualType T2 = Init->getType();
4444 
4445       // If the initializer is the address of an overloaded function, try
4446       // to resolve the overloaded function. If all goes well, T2 is the
4447       // type of the resulting function.
4448       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4449         DeclAccessPair Found;
4450         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4451                                    Init, ToType, false, Found))
4452           T2 = Fn->getType();
4453       }
4454 
4455       // Compute some basic properties of the types and the initializer.
4456       bool dummy1 = false;
4457       bool dummy2 = false;
4458       bool dummy3 = false;
4459       Sema::ReferenceCompareResult RefRelationship
4460         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4461                                          dummy2, dummy3);
4462 
4463       if (RefRelationship >= Sema::Ref_Related)
4464         return TryReferenceInit(S, Init, ToType,
4465                                 /*FIXME:*/From->getLocStart(),
4466                                 SuppressUserConversions,
4467                                 /*AllowExplicit=*/false);
4468     }
4469 
4470     // Otherwise, we bind the reference to a temporary created from the
4471     // initializer list.
4472     Result = TryListConversion(S, From, T1, SuppressUserConversions,
4473                                InOverloadResolution,
4474                                AllowObjCWritebackConversion);
4475     if (Result.isFailure())
4476       return Result;
4477     assert(!Result.isEllipsis() &&
4478            "Sub-initialization cannot result in ellipsis conversion.");
4479 
4480     // Can we even bind to a temporary?
4481     if (ToType->isRValueReferenceType() ||
4482         (T1.isConstQualified() && !T1.isVolatileQualified())) {
4483       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4484                                             Result.UserDefined.After;
4485       SCS.ReferenceBinding = true;
4486       SCS.IsLvalueReference = ToType->isLValueReferenceType();
4487       SCS.BindsToRvalue = true;
4488       SCS.BindsToFunctionLvalue = false;
4489       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4490       SCS.ObjCLifetimeConversionBinding = false;
4491     } else
4492       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4493                     From, ToType);
4494     return Result;
4495   }
4496 
4497   // C++11 [over.ics.list]p6:
4498   //   Otherwise, if the parameter type is not a class:
4499   if (!ToType->isRecordType()) {
4500     //    - if the initializer list has one element, the implicit conversion
4501     //      sequence is the one required to convert the element to the
4502     //      parameter type.
4503     unsigned NumInits = From->getNumInits();
4504     if (NumInits == 1)
4505       Result = TryCopyInitialization(S, From->getInit(0), ToType,
4506                                      SuppressUserConversions,
4507                                      InOverloadResolution,
4508                                      AllowObjCWritebackConversion);
4509     //    - if the initializer list has no elements, the implicit conversion
4510     //      sequence is the identity conversion.
4511     else if (NumInits == 0) {
4512       Result.setStandard();
4513       Result.Standard.setAsIdentityConversion();
4514       Result.Standard.setFromType(ToType);
4515       Result.Standard.setAllToTypes(ToType);
4516     }
4517     Result.setListInitializationSequence();
4518     return Result;
4519   }
4520 
4521   // C++11 [over.ics.list]p7:
4522   //   In all cases other than those enumerated above, no conversion is possible
4523   return Result;
4524 }
4525 
4526 /// TryCopyInitialization - Try to copy-initialize a value of type
4527 /// ToType from the expression From. Return the implicit conversion
4528 /// sequence required to pass this argument, which may be a bad
4529 /// conversion sequence (meaning that the argument cannot be passed to
4530 /// a parameter of this type). If @p SuppressUserConversions, then we
4531 /// do not permit any user-defined conversion sequences.
4532 static ImplicitConversionSequence
4533 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4534                       bool SuppressUserConversions,
4535                       bool InOverloadResolution,
4536                       bool AllowObjCWritebackConversion,
4537                       bool AllowExplicit) {
4538   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4539     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4540                              InOverloadResolution,AllowObjCWritebackConversion);
4541 
4542   if (ToType->isReferenceType())
4543     return TryReferenceInit(S, From, ToType,
4544                             /*FIXME:*/From->getLocStart(),
4545                             SuppressUserConversions,
4546                             AllowExplicit);
4547 
4548   return TryImplicitConversion(S, From, ToType,
4549                                SuppressUserConversions,
4550                                /*AllowExplicit=*/false,
4551                                InOverloadResolution,
4552                                /*CStyle=*/false,
4553                                AllowObjCWritebackConversion);
4554 }
4555 
4556 static bool TryCopyInitialization(const CanQualType FromQTy,
4557                                   const CanQualType ToQTy,
4558                                   Sema &S,
4559                                   SourceLocation Loc,
4560                                   ExprValueKind FromVK) {
4561   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4562   ImplicitConversionSequence ICS =
4563     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4564 
4565   return !ICS.isBad();
4566 }
4567 
4568 /// TryObjectArgumentInitialization - Try to initialize the object
4569 /// parameter of the given member function (@c Method) from the
4570 /// expression @p From.
4571 static ImplicitConversionSequence
4572 TryObjectArgumentInitialization(Sema &S, QualType OrigFromType,
4573                                 Expr::Classification FromClassification,
4574                                 CXXMethodDecl *Method,
4575                                 CXXRecordDecl *ActingContext) {
4576   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4577   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4578   //                 const volatile object.
4579   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4580     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4581   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4582 
4583   // Set up the conversion sequence as a "bad" conversion, to allow us
4584   // to exit early.
4585   ImplicitConversionSequence ICS;
4586 
4587   // We need to have an object of class type.
4588   QualType FromType = OrigFromType;
4589   if (const PointerType *PT = FromType->getAs<PointerType>()) {
4590     FromType = PT->getPointeeType();
4591 
4592     // When we had a pointer, it's implicitly dereferenced, so we
4593     // better have an lvalue.
4594     assert(FromClassification.isLValue());
4595   }
4596 
4597   assert(FromType->isRecordType());
4598 
4599   // C++0x [over.match.funcs]p4:
4600   //   For non-static member functions, the type of the implicit object
4601   //   parameter is
4602   //
4603   //     - "lvalue reference to cv X" for functions declared without a
4604   //        ref-qualifier or with the & ref-qualifier
4605   //     - "rvalue reference to cv X" for functions declared with the &&
4606   //        ref-qualifier
4607   //
4608   // where X is the class of which the function is a member and cv is the
4609   // cv-qualification on the member function declaration.
4610   //
4611   // However, when finding an implicit conversion sequence for the argument, we
4612   // are not allowed to create temporaries or perform user-defined conversions
4613   // (C++ [over.match.funcs]p5). We perform a simplified version of
4614   // reference binding here, that allows class rvalues to bind to
4615   // non-constant references.
4616 
4617   // First check the qualifiers.
4618   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4619   if (ImplicitParamType.getCVRQualifiers()
4620                                     != FromTypeCanon.getLocalCVRQualifiers() &&
4621       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4622     ICS.setBad(BadConversionSequence::bad_qualifiers,
4623                OrigFromType, ImplicitParamType);
4624     return ICS;
4625   }
4626 
4627   // Check that we have either the same type or a derived type. It
4628   // affects the conversion rank.
4629   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4630   ImplicitConversionKind SecondKind;
4631   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4632     SecondKind = ICK_Identity;
4633   } else if (S.IsDerivedFrom(FromType, ClassType))
4634     SecondKind = ICK_Derived_To_Base;
4635   else {
4636     ICS.setBad(BadConversionSequence::unrelated_class,
4637                FromType, ImplicitParamType);
4638     return ICS;
4639   }
4640 
4641   // Check the ref-qualifier.
4642   switch (Method->getRefQualifier()) {
4643   case RQ_None:
4644     // Do nothing; we don't care about lvalueness or rvalueness.
4645     break;
4646 
4647   case RQ_LValue:
4648     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4649       // non-const lvalue reference cannot bind to an rvalue
4650       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4651                  ImplicitParamType);
4652       return ICS;
4653     }
4654     break;
4655 
4656   case RQ_RValue:
4657     if (!FromClassification.isRValue()) {
4658       // rvalue reference cannot bind to an lvalue
4659       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4660                  ImplicitParamType);
4661       return ICS;
4662     }
4663     break;
4664   }
4665 
4666   // Success. Mark this as a reference binding.
4667   ICS.setStandard();
4668   ICS.Standard.setAsIdentityConversion();
4669   ICS.Standard.Second = SecondKind;
4670   ICS.Standard.setFromType(FromType);
4671   ICS.Standard.setAllToTypes(ImplicitParamType);
4672   ICS.Standard.ReferenceBinding = true;
4673   ICS.Standard.DirectBinding = true;
4674   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4675   ICS.Standard.BindsToFunctionLvalue = false;
4676   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4677   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4678     = (Method->getRefQualifier() == RQ_None);
4679   return ICS;
4680 }
4681 
4682 /// PerformObjectArgumentInitialization - Perform initialization of
4683 /// the implicit object parameter for the given Method with the given
4684 /// expression.
4685 ExprResult
4686 Sema::PerformObjectArgumentInitialization(Expr *From,
4687                                           NestedNameSpecifier *Qualifier,
4688                                           NamedDecl *FoundDecl,
4689                                           CXXMethodDecl *Method) {
4690   QualType FromRecordType, DestType;
4691   QualType ImplicitParamRecordType  =
4692     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4693 
4694   Expr::Classification FromClassification;
4695   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4696     FromRecordType = PT->getPointeeType();
4697     DestType = Method->getThisType(Context);
4698     FromClassification = Expr::Classification::makeSimpleLValue();
4699   } else {
4700     FromRecordType = From->getType();
4701     DestType = ImplicitParamRecordType;
4702     FromClassification = From->Classify(Context);
4703   }
4704 
4705   // Note that we always use the true parent context when performing
4706   // the actual argument initialization.
4707   ImplicitConversionSequence ICS
4708     = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4709                                       Method, Method->getParent());
4710   if (ICS.isBad()) {
4711     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4712       Qualifiers FromQs = FromRecordType.getQualifiers();
4713       Qualifiers ToQs = DestType.getQualifiers();
4714       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4715       if (CVR) {
4716         Diag(From->getLocStart(),
4717              diag::err_member_function_call_bad_cvr)
4718           << Method->getDeclName() << FromRecordType << (CVR - 1)
4719           << From->getSourceRange();
4720         Diag(Method->getLocation(), diag::note_previous_decl)
4721           << Method->getDeclName();
4722         return ExprError();
4723       }
4724     }
4725 
4726     return Diag(From->getLocStart(),
4727                 diag::err_implicit_object_parameter_init)
4728        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4729   }
4730 
4731   if (ICS.Standard.Second == ICK_Derived_To_Base) {
4732     ExprResult FromRes =
4733       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4734     if (FromRes.isInvalid())
4735       return ExprError();
4736     From = FromRes.take();
4737   }
4738 
4739   if (!Context.hasSameType(From->getType(), DestType))
4740     From = ImpCastExprToType(From, DestType, CK_NoOp,
4741                              From->getValueKind()).take();
4742   return Owned(From);
4743 }
4744 
4745 /// TryContextuallyConvertToBool - Attempt to contextually convert the
4746 /// expression From to bool (C++0x [conv]p3).
4747 static ImplicitConversionSequence
4748 TryContextuallyConvertToBool(Sema &S, Expr *From) {
4749   // FIXME: This is pretty broken.
4750   return TryImplicitConversion(S, From, S.Context.BoolTy,
4751                                // FIXME: Are these flags correct?
4752                                /*SuppressUserConversions=*/false,
4753                                /*AllowExplicit=*/true,
4754                                /*InOverloadResolution=*/false,
4755                                /*CStyle=*/false,
4756                                /*AllowObjCWritebackConversion=*/false);
4757 }
4758 
4759 /// PerformContextuallyConvertToBool - Perform a contextual conversion
4760 /// of the expression From to bool (C++0x [conv]p3).
4761 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4762   if (checkPlaceholderForOverload(*this, From))
4763     return ExprError();
4764 
4765   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4766   if (!ICS.isBad())
4767     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4768 
4769   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4770     return Diag(From->getLocStart(),
4771                 diag::err_typecheck_bool_condition)
4772                   << From->getType() << From->getSourceRange();
4773   return ExprError();
4774 }
4775 
4776 /// Check that the specified conversion is permitted in a converted constant
4777 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
4778 /// is acceptable.
4779 static bool CheckConvertedConstantConversions(Sema &S,
4780                                               StandardConversionSequence &SCS) {
4781   // Since we know that the target type is an integral or unscoped enumeration
4782   // type, most conversion kinds are impossible. All possible First and Third
4783   // conversions are fine.
4784   switch (SCS.Second) {
4785   case ICK_Identity:
4786   case ICK_Integral_Promotion:
4787   case ICK_Integral_Conversion:
4788     return true;
4789 
4790   case ICK_Boolean_Conversion:
4791     // Conversion from an integral or unscoped enumeration type to bool is
4792     // classified as ICK_Boolean_Conversion, but it's also an integral
4793     // conversion, so it's permitted in a converted constant expression.
4794     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4795            SCS.getToType(2)->isBooleanType();
4796 
4797   case ICK_Floating_Integral:
4798   case ICK_Complex_Real:
4799     return false;
4800 
4801   case ICK_Lvalue_To_Rvalue:
4802   case ICK_Array_To_Pointer:
4803   case ICK_Function_To_Pointer:
4804   case ICK_NoReturn_Adjustment:
4805   case ICK_Qualification:
4806   case ICK_Compatible_Conversion:
4807   case ICK_Vector_Conversion:
4808   case ICK_Vector_Splat:
4809   case ICK_Derived_To_Base:
4810   case ICK_Pointer_Conversion:
4811   case ICK_Pointer_Member:
4812   case ICK_Block_Pointer_Conversion:
4813   case ICK_Writeback_Conversion:
4814   case ICK_Floating_Promotion:
4815   case ICK_Complex_Promotion:
4816   case ICK_Complex_Conversion:
4817   case ICK_Floating_Conversion:
4818   case ICK_TransparentUnionConversion:
4819     llvm_unreachable("unexpected second conversion kind");
4820 
4821   case ICK_Num_Conversion_Kinds:
4822     break;
4823   }
4824 
4825   llvm_unreachable("unknown conversion kind");
4826 }
4827 
4828 /// CheckConvertedConstantExpression - Check that the expression From is a
4829 /// converted constant expression of type T, perform the conversion and produce
4830 /// the converted expression, per C++11 [expr.const]p3.
4831 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4832                                                   llvm::APSInt &Value,
4833                                                   CCEKind CCE) {
4834   assert(LangOpts.CPlusPlus0x && "converted constant expression outside C++11");
4835   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4836 
4837   if (checkPlaceholderForOverload(*this, From))
4838     return ExprError();
4839 
4840   // C++11 [expr.const]p3 with proposed wording fixes:
4841   //  A converted constant expression of type T is a core constant expression,
4842   //  implicitly converted to a prvalue of type T, where the converted
4843   //  expression is a literal constant expression and the implicit conversion
4844   //  sequence contains only user-defined conversions, lvalue-to-rvalue
4845   //  conversions, integral promotions, and integral conversions other than
4846   //  narrowing conversions.
4847   ImplicitConversionSequence ICS =
4848     TryImplicitConversion(From, T,
4849                           /*SuppressUserConversions=*/false,
4850                           /*AllowExplicit=*/false,
4851                           /*InOverloadResolution=*/false,
4852                           /*CStyle=*/false,
4853                           /*AllowObjcWritebackConversion=*/false);
4854   StandardConversionSequence *SCS = 0;
4855   switch (ICS.getKind()) {
4856   case ImplicitConversionSequence::StandardConversion:
4857     if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4858       return Diag(From->getLocStart(),
4859                   diag::err_typecheck_converted_constant_expression_disallowed)
4860                << From->getType() << From->getSourceRange() << T;
4861     SCS = &ICS.Standard;
4862     break;
4863   case ImplicitConversionSequence::UserDefinedConversion:
4864     // We are converting from class type to an integral or enumeration type, so
4865     // the Before sequence must be trivial.
4866     if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4867       return Diag(From->getLocStart(),
4868                   diag::err_typecheck_converted_constant_expression_disallowed)
4869                << From->getType() << From->getSourceRange() << T;
4870     SCS = &ICS.UserDefined.After;
4871     break;
4872   case ImplicitConversionSequence::AmbiguousConversion:
4873   case ImplicitConversionSequence::BadConversion:
4874     if (!DiagnoseMultipleUserDefinedConversion(From, T))
4875       return Diag(From->getLocStart(),
4876                   diag::err_typecheck_converted_constant_expression)
4877                     << From->getType() << From->getSourceRange() << T;
4878     return ExprError();
4879 
4880   case ImplicitConversionSequence::EllipsisConversion:
4881     llvm_unreachable("ellipsis conversion in converted constant expression");
4882   }
4883 
4884   ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4885   if (Result.isInvalid())
4886     return Result;
4887 
4888   // Check for a narrowing implicit conversion.
4889   APValue PreNarrowingValue;
4890   QualType PreNarrowingType;
4891   switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
4892                                 PreNarrowingType)) {
4893   case NK_Variable_Narrowing:
4894     // Implicit conversion to a narrower type, and the value is not a constant
4895     // expression. We'll diagnose this in a moment.
4896   case NK_Not_Narrowing:
4897     break;
4898 
4899   case NK_Constant_Narrowing:
4900     Diag(From->getLocStart(),
4901          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4902                              diag::err_cce_narrowing)
4903       << CCE << /*Constant*/1
4904       << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
4905     break;
4906 
4907   case NK_Type_Narrowing:
4908     Diag(From->getLocStart(),
4909          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4910                              diag::err_cce_narrowing)
4911       << CCE << /*Constant*/0 << From->getType() << T;
4912     break;
4913   }
4914 
4915   // Check the expression is a constant expression.
4916   llvm::SmallVector<PartialDiagnosticAt, 8> Notes;
4917   Expr::EvalResult Eval;
4918   Eval.Diag = &Notes;
4919 
4920   if (!Result.get()->EvaluateAsRValue(Eval, Context)) {
4921     // The expression can't be folded, so we can't keep it at this position in
4922     // the AST.
4923     Result = ExprError();
4924   } else {
4925     Value = Eval.Val.getInt();
4926 
4927     if (Notes.empty()) {
4928       // It's a constant expression.
4929       return Result;
4930     }
4931   }
4932 
4933   // It's not a constant expression. Produce an appropriate diagnostic.
4934   if (Notes.size() == 1 &&
4935       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
4936     Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
4937   else {
4938     Diag(From->getLocStart(), diag::err_expr_not_cce)
4939       << CCE << From->getSourceRange();
4940     for (unsigned I = 0; I < Notes.size(); ++I)
4941       Diag(Notes[I].first, Notes[I].second);
4942   }
4943   return Result;
4944 }
4945 
4946 /// dropPointerConversions - If the given standard conversion sequence
4947 /// involves any pointer conversions, remove them.  This may change
4948 /// the result type of the conversion sequence.
4949 static void dropPointerConversion(StandardConversionSequence &SCS) {
4950   if (SCS.Second == ICK_Pointer_Conversion) {
4951     SCS.Second = ICK_Identity;
4952     SCS.Third = ICK_Identity;
4953     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
4954   }
4955 }
4956 
4957 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
4958 /// convert the expression From to an Objective-C pointer type.
4959 static ImplicitConversionSequence
4960 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
4961   // Do an implicit conversion to 'id'.
4962   QualType Ty = S.Context.getObjCIdType();
4963   ImplicitConversionSequence ICS
4964     = TryImplicitConversion(S, From, Ty,
4965                             // FIXME: Are these flags correct?
4966                             /*SuppressUserConversions=*/false,
4967                             /*AllowExplicit=*/true,
4968                             /*InOverloadResolution=*/false,
4969                             /*CStyle=*/false,
4970                             /*AllowObjCWritebackConversion=*/false);
4971 
4972   // Strip off any final conversions to 'id'.
4973   switch (ICS.getKind()) {
4974   case ImplicitConversionSequence::BadConversion:
4975   case ImplicitConversionSequence::AmbiguousConversion:
4976   case ImplicitConversionSequence::EllipsisConversion:
4977     break;
4978 
4979   case ImplicitConversionSequence::UserDefinedConversion:
4980     dropPointerConversion(ICS.UserDefined.After);
4981     break;
4982 
4983   case ImplicitConversionSequence::StandardConversion:
4984     dropPointerConversion(ICS.Standard);
4985     break;
4986   }
4987 
4988   return ICS;
4989 }
4990 
4991 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
4992 /// conversion of the expression From to an Objective-C pointer type.
4993 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
4994   if (checkPlaceholderForOverload(*this, From))
4995     return ExprError();
4996 
4997   QualType Ty = Context.getObjCIdType();
4998   ImplicitConversionSequence ICS =
4999     TryContextuallyConvertToObjCPointer(*this, From);
5000   if (!ICS.isBad())
5001     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5002   return ExprError();
5003 }
5004 
5005 /// Determine whether the provided type is an integral type, or an enumeration
5006 /// type of a permitted flavor.
5007 static bool isIntegralOrEnumerationType(QualType T, bool AllowScopedEnum) {
5008   return AllowScopedEnum ? T->isIntegralOrEnumerationType()
5009                          : T->isIntegralOrUnscopedEnumerationType();
5010 }
5011 
5012 /// \brief Attempt to convert the given expression to an integral or
5013 /// enumeration type.
5014 ///
5015 /// This routine will attempt to convert an expression of class type to an
5016 /// integral or enumeration type, if that class type only has a single
5017 /// conversion to an integral or enumeration type.
5018 ///
5019 /// \param Loc The source location of the construct that requires the
5020 /// conversion.
5021 ///
5022 /// \param FromE The expression we're converting from.
5023 ///
5024 /// \param NotIntDiag The diagnostic to be emitted if the expression does not
5025 /// have integral or enumeration type.
5026 ///
5027 /// \param IncompleteDiag The diagnostic to be emitted if the expression has
5028 /// incomplete class type.
5029 ///
5030 /// \param ExplicitConvDiag The diagnostic to be emitted if we're calling an
5031 /// explicit conversion function (because no implicit conversion functions
5032 /// were available). This is a recovery mode.
5033 ///
5034 /// \param ExplicitConvNote The note to be emitted with \p ExplicitConvDiag,
5035 /// showing which conversion was picked.
5036 ///
5037 /// \param AmbigDiag The diagnostic to be emitted if there is more than one
5038 /// conversion function that could convert to integral or enumeration type.
5039 ///
5040 /// \param AmbigNote The note to be emitted with \p AmbigDiag for each
5041 /// usable conversion function.
5042 ///
5043 /// \param ConvDiag The diagnostic to be emitted if we are calling a conversion
5044 /// function, which may be an extension in this case.
5045 ///
5046 /// \param AllowScopedEnumerations Specifies whether conversions to scoped
5047 /// enumerations should be considered.
5048 ///
5049 /// \returns The expression, converted to an integral or enumeration type if
5050 /// successful.
5051 ExprResult
5052 Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From,
5053                                          ICEConvertDiagnoser &Diagnoser,
5054                                          bool AllowScopedEnumerations) {
5055   // We can't perform any more checking for type-dependent expressions.
5056   if (From->isTypeDependent())
5057     return Owned(From);
5058 
5059   // Process placeholders immediately.
5060   if (From->hasPlaceholderType()) {
5061     ExprResult result = CheckPlaceholderExpr(From);
5062     if (result.isInvalid()) return result;
5063     From = result.take();
5064   }
5065 
5066   // If the expression already has integral or enumeration type, we're golden.
5067   QualType T = From->getType();
5068   if (isIntegralOrEnumerationType(T, AllowScopedEnumerations))
5069     return DefaultLvalueConversion(From);
5070 
5071   // FIXME: Check for missing '()' if T is a function type?
5072 
5073   // If we don't have a class type in C++, there's no way we can get an
5074   // expression of integral or enumeration type.
5075   const RecordType *RecordTy = T->getAs<RecordType>();
5076   if (!RecordTy || !getLangOpts().CPlusPlus) {
5077     if (!Diagnoser.Suppress)
5078       Diagnoser.diagnoseNotInt(*this, Loc, T) << From->getSourceRange();
5079     return Owned(From);
5080   }
5081 
5082   // We must have a complete class type.
5083   struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5084     ICEConvertDiagnoser &Diagnoser;
5085     Expr *From;
5086 
5087     TypeDiagnoserPartialDiag(ICEConvertDiagnoser &Diagnoser, Expr *From)
5088       : TypeDiagnoser(Diagnoser.Suppress), Diagnoser(Diagnoser), From(From) {}
5089 
5090     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5091       Diagnoser.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5092     }
5093   } IncompleteDiagnoser(Diagnoser, From);
5094 
5095   if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5096     return Owned(From);
5097 
5098   // Look for a conversion to an integral or enumeration type.
5099   UnresolvedSet<4> ViableConversions;
5100   UnresolvedSet<4> ExplicitConversions;
5101   const UnresolvedSetImpl *Conversions
5102     = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5103 
5104   bool HadMultipleCandidates = (Conversions->size() > 1);
5105 
5106   for (UnresolvedSetImpl::iterator I = Conversions->begin(),
5107                                    E = Conversions->end();
5108        I != E;
5109        ++I) {
5110     if (CXXConversionDecl *Conversion
5111           = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl())) {
5112       if (isIntegralOrEnumerationType(
5113             Conversion->getConversionType().getNonReferenceType(),
5114             AllowScopedEnumerations)) {
5115         if (Conversion->isExplicit())
5116           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5117         else
5118           ViableConversions.addDecl(I.getDecl(), I.getAccess());
5119       }
5120     }
5121   }
5122 
5123   switch (ViableConversions.size()) {
5124   case 0:
5125     if (ExplicitConversions.size() == 1 && !Diagnoser.Suppress) {
5126       DeclAccessPair Found = ExplicitConversions[0];
5127       CXXConversionDecl *Conversion
5128         = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5129 
5130       // The user probably meant to invoke the given explicit
5131       // conversion; use it.
5132       QualType ConvTy
5133         = Conversion->getConversionType().getNonReferenceType();
5134       std::string TypeStr;
5135       ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy());
5136 
5137       Diagnoser.diagnoseExplicitConv(*this, Loc, T, ConvTy)
5138         << FixItHint::CreateInsertion(From->getLocStart(),
5139                                       "static_cast<" + TypeStr + ">(")
5140         << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()),
5141                                       ")");
5142       Diagnoser.noteExplicitConv(*this, Conversion, ConvTy);
5143 
5144       // If we aren't in a SFINAE context, build a call to the
5145       // explicit conversion function.
5146       if (isSFINAEContext())
5147         return ExprError();
5148 
5149       CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5150       ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5151                                                  HadMultipleCandidates);
5152       if (Result.isInvalid())
5153         return ExprError();
5154       // Record usage of conversion in an implicit cast.
5155       From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5156                                       CK_UserDefinedConversion,
5157                                       Result.get(), 0,
5158                                       Result.get()->getValueKind());
5159     }
5160 
5161     // We'll complain below about a non-integral condition type.
5162     break;
5163 
5164   case 1: {
5165     // Apply this conversion.
5166     DeclAccessPair Found = ViableConversions[0];
5167     CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5168 
5169     CXXConversionDecl *Conversion
5170       = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5171     QualType ConvTy
5172       = Conversion->getConversionType().getNonReferenceType();
5173     if (!Diagnoser.SuppressConversion) {
5174       if (isSFINAEContext())
5175         return ExprError();
5176 
5177       Diagnoser.diagnoseConversion(*this, Loc, T, ConvTy)
5178         << From->getSourceRange();
5179     }
5180 
5181     ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5182                                                HadMultipleCandidates);
5183     if (Result.isInvalid())
5184       return ExprError();
5185     // Record usage of conversion in an implicit cast.
5186     From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5187                                     CK_UserDefinedConversion,
5188                                     Result.get(), 0,
5189                                     Result.get()->getValueKind());
5190     break;
5191   }
5192 
5193   default:
5194     if (Diagnoser.Suppress)
5195       return ExprError();
5196 
5197     Diagnoser.diagnoseAmbiguous(*this, Loc, T) << From->getSourceRange();
5198     for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5199       CXXConversionDecl *Conv
5200         = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5201       QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5202       Diagnoser.noteAmbiguous(*this, Conv, ConvTy);
5203     }
5204     return Owned(From);
5205   }
5206 
5207   if (!isIntegralOrEnumerationType(From->getType(), AllowScopedEnumerations) &&
5208       !Diagnoser.Suppress) {
5209     Diagnoser.diagnoseNotInt(*this, Loc, From->getType())
5210       << From->getSourceRange();
5211   }
5212 
5213   return DefaultLvalueConversion(From);
5214 }
5215 
5216 /// AddOverloadCandidate - Adds the given function to the set of
5217 /// candidate functions, using the given function call arguments.  If
5218 /// @p SuppressUserConversions, then don't allow user-defined
5219 /// conversions via constructors or conversion operators.
5220 ///
5221 /// \para PartialOverloading true if we are performing "partial" overloading
5222 /// based on an incomplete set of function arguments. This feature is used by
5223 /// code completion.
5224 void
5225 Sema::AddOverloadCandidate(FunctionDecl *Function,
5226                            DeclAccessPair FoundDecl,
5227                            llvm::ArrayRef<Expr *> Args,
5228                            OverloadCandidateSet& CandidateSet,
5229                            bool SuppressUserConversions,
5230                            bool PartialOverloading,
5231                            bool AllowExplicit) {
5232   const FunctionProtoType* Proto
5233     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5234   assert(Proto && "Functions without a prototype cannot be overloaded");
5235   assert(!Function->getDescribedFunctionTemplate() &&
5236          "Use AddTemplateOverloadCandidate for function templates");
5237 
5238   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5239     if (!isa<CXXConstructorDecl>(Method)) {
5240       // If we get here, it's because we're calling a member function
5241       // that is named without a member access expression (e.g.,
5242       // "this->f") that was either written explicitly or created
5243       // implicitly. This can happen with a qualified call to a member
5244       // function, e.g., X::f(). We use an empty type for the implied
5245       // object argument (C++ [over.call.func]p3), and the acting context
5246       // is irrelevant.
5247       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5248                          QualType(), Expr::Classification::makeSimpleLValue(),
5249                          Args, CandidateSet, SuppressUserConversions);
5250       return;
5251     }
5252     // We treat a constructor like a non-member function, since its object
5253     // argument doesn't participate in overload resolution.
5254   }
5255 
5256   if (!CandidateSet.isNewCandidate(Function))
5257     return;
5258 
5259   // Overload resolution is always an unevaluated context.
5260   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5261 
5262   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5263     // C++ [class.copy]p3:
5264     //   A member function template is never instantiated to perform the copy
5265     //   of a class object to an object of its class type.
5266     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5267     if (Args.size() == 1 &&
5268         Constructor->isSpecializationCopyingObject() &&
5269         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5270          IsDerivedFrom(Args[0]->getType(), ClassType)))
5271       return;
5272   }
5273 
5274   // Add this candidate
5275   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5276   Candidate.FoundDecl = FoundDecl;
5277   Candidate.Function = Function;
5278   Candidate.Viable = true;
5279   Candidate.IsSurrogate = false;
5280   Candidate.IgnoreObjectArgument = false;
5281   Candidate.ExplicitCallArguments = Args.size();
5282 
5283   unsigned NumArgsInProto = Proto->getNumArgs();
5284 
5285   // (C++ 13.3.2p2): A candidate function having fewer than m
5286   // parameters is viable only if it has an ellipsis in its parameter
5287   // list (8.3.5).
5288   if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5289       !Proto->isVariadic()) {
5290     Candidate.Viable = false;
5291     Candidate.FailureKind = ovl_fail_too_many_arguments;
5292     return;
5293   }
5294 
5295   // (C++ 13.3.2p2): A candidate function having more than m parameters
5296   // is viable only if the (m+1)st parameter has a default argument
5297   // (8.3.6). For the purposes of overload resolution, the
5298   // parameter list is truncated on the right, so that there are
5299   // exactly m parameters.
5300   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5301   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5302     // Not enough arguments.
5303     Candidate.Viable = false;
5304     Candidate.FailureKind = ovl_fail_too_few_arguments;
5305     return;
5306   }
5307 
5308   // (CUDA B.1): Check for invalid calls between targets.
5309   if (getLangOpts().CUDA)
5310     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5311       if (CheckCUDATarget(Caller, Function)) {
5312         Candidate.Viable = false;
5313         Candidate.FailureKind = ovl_fail_bad_target;
5314         return;
5315       }
5316 
5317   // Determine the implicit conversion sequences for each of the
5318   // arguments.
5319   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5320     if (ArgIdx < NumArgsInProto) {
5321       // (C++ 13.3.2p3): for F to be a viable function, there shall
5322       // exist for each argument an implicit conversion sequence
5323       // (13.3.3.1) that converts that argument to the corresponding
5324       // parameter of F.
5325       QualType ParamType = Proto->getArgType(ArgIdx);
5326       Candidate.Conversions[ArgIdx]
5327         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5328                                 SuppressUserConversions,
5329                                 /*InOverloadResolution=*/true,
5330                                 /*AllowObjCWritebackConversion=*/
5331                                   getLangOpts().ObjCAutoRefCount,
5332                                 AllowExplicit);
5333       if (Candidate.Conversions[ArgIdx].isBad()) {
5334         Candidate.Viable = false;
5335         Candidate.FailureKind = ovl_fail_bad_conversion;
5336         break;
5337       }
5338     } else {
5339       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5340       // argument for which there is no corresponding parameter is
5341       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5342       Candidate.Conversions[ArgIdx].setEllipsis();
5343     }
5344   }
5345 }
5346 
5347 /// \brief Add all of the function declarations in the given function set to
5348 /// the overload canddiate set.
5349 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5350                                  llvm::ArrayRef<Expr *> Args,
5351                                  OverloadCandidateSet& CandidateSet,
5352                                  bool SuppressUserConversions,
5353                                TemplateArgumentListInfo *ExplicitTemplateArgs) {
5354   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5355     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5356     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5357       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5358         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5359                            cast<CXXMethodDecl>(FD)->getParent(),
5360                            Args[0]->getType(), Args[0]->Classify(Context),
5361                            Args.slice(1), CandidateSet,
5362                            SuppressUserConversions);
5363       else
5364         AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5365                              SuppressUserConversions);
5366     } else {
5367       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5368       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5369           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5370         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5371                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5372                                    ExplicitTemplateArgs,
5373                                    Args[0]->getType(),
5374                                    Args[0]->Classify(Context), Args.slice(1),
5375                                    CandidateSet, SuppressUserConversions);
5376       else
5377         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5378                                      ExplicitTemplateArgs, Args,
5379                                      CandidateSet, SuppressUserConversions);
5380     }
5381   }
5382 }
5383 
5384 /// AddMethodCandidate - Adds a named decl (which is some kind of
5385 /// method) as a method candidate to the given overload set.
5386 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5387                               QualType ObjectType,
5388                               Expr::Classification ObjectClassification,
5389                               Expr **Args, unsigned NumArgs,
5390                               OverloadCandidateSet& CandidateSet,
5391                               bool SuppressUserConversions) {
5392   NamedDecl *Decl = FoundDecl.getDecl();
5393   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5394 
5395   if (isa<UsingShadowDecl>(Decl))
5396     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5397 
5398   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5399     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5400            "Expected a member function template");
5401     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5402                                /*ExplicitArgs*/ 0,
5403                                ObjectType, ObjectClassification,
5404                                llvm::makeArrayRef(Args, NumArgs), CandidateSet,
5405                                SuppressUserConversions);
5406   } else {
5407     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5408                        ObjectType, ObjectClassification,
5409                        llvm::makeArrayRef(Args, NumArgs),
5410                        CandidateSet, SuppressUserConversions);
5411   }
5412 }
5413 
5414 /// AddMethodCandidate - Adds the given C++ member function to the set
5415 /// of candidate functions, using the given function call arguments
5416 /// and the object argument (@c Object). For example, in a call
5417 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5418 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5419 /// allow user-defined conversions via constructors or conversion
5420 /// operators.
5421 void
5422 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5423                          CXXRecordDecl *ActingContext, QualType ObjectType,
5424                          Expr::Classification ObjectClassification,
5425                          llvm::ArrayRef<Expr *> Args,
5426                          OverloadCandidateSet& CandidateSet,
5427                          bool SuppressUserConversions) {
5428   const FunctionProtoType* Proto
5429     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5430   assert(Proto && "Methods without a prototype cannot be overloaded");
5431   assert(!isa<CXXConstructorDecl>(Method) &&
5432          "Use AddOverloadCandidate for constructors");
5433 
5434   if (!CandidateSet.isNewCandidate(Method))
5435     return;
5436 
5437   // Overload resolution is always an unevaluated context.
5438   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5439 
5440   // Add this candidate
5441   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5442   Candidate.FoundDecl = FoundDecl;
5443   Candidate.Function = Method;
5444   Candidate.IsSurrogate = false;
5445   Candidate.IgnoreObjectArgument = false;
5446   Candidate.ExplicitCallArguments = Args.size();
5447 
5448   unsigned NumArgsInProto = Proto->getNumArgs();
5449 
5450   // (C++ 13.3.2p2): A candidate function having fewer than m
5451   // parameters is viable only if it has an ellipsis in its parameter
5452   // list (8.3.5).
5453   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5454     Candidate.Viable = false;
5455     Candidate.FailureKind = ovl_fail_too_many_arguments;
5456     return;
5457   }
5458 
5459   // (C++ 13.3.2p2): A candidate function having more than m parameters
5460   // is viable only if the (m+1)st parameter has a default argument
5461   // (8.3.6). For the purposes of overload resolution, the
5462   // parameter list is truncated on the right, so that there are
5463   // exactly m parameters.
5464   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5465   if (Args.size() < MinRequiredArgs) {
5466     // Not enough arguments.
5467     Candidate.Viable = false;
5468     Candidate.FailureKind = ovl_fail_too_few_arguments;
5469     return;
5470   }
5471 
5472   Candidate.Viable = true;
5473 
5474   if (Method->isStatic() || ObjectType.isNull())
5475     // The implicit object argument is ignored.
5476     Candidate.IgnoreObjectArgument = true;
5477   else {
5478     // Determine the implicit conversion sequence for the object
5479     // parameter.
5480     Candidate.Conversions[0]
5481       = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5482                                         Method, ActingContext);
5483     if (Candidate.Conversions[0].isBad()) {
5484       Candidate.Viable = false;
5485       Candidate.FailureKind = ovl_fail_bad_conversion;
5486       return;
5487     }
5488   }
5489 
5490   // Determine the implicit conversion sequences for each of the
5491   // arguments.
5492   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5493     if (ArgIdx < NumArgsInProto) {
5494       // (C++ 13.3.2p3): for F to be a viable function, there shall
5495       // exist for each argument an implicit conversion sequence
5496       // (13.3.3.1) that converts that argument to the corresponding
5497       // parameter of F.
5498       QualType ParamType = Proto->getArgType(ArgIdx);
5499       Candidate.Conversions[ArgIdx + 1]
5500         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5501                                 SuppressUserConversions,
5502                                 /*InOverloadResolution=*/true,
5503                                 /*AllowObjCWritebackConversion=*/
5504                                   getLangOpts().ObjCAutoRefCount);
5505       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5506         Candidate.Viable = false;
5507         Candidate.FailureKind = ovl_fail_bad_conversion;
5508         break;
5509       }
5510     } else {
5511       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5512       // argument for which there is no corresponding parameter is
5513       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5514       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5515     }
5516   }
5517 }
5518 
5519 /// \brief Add a C++ member function template as a candidate to the candidate
5520 /// set, using template argument deduction to produce an appropriate member
5521 /// function template specialization.
5522 void
5523 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5524                                  DeclAccessPair FoundDecl,
5525                                  CXXRecordDecl *ActingContext,
5526                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5527                                  QualType ObjectType,
5528                                  Expr::Classification ObjectClassification,
5529                                  llvm::ArrayRef<Expr *> Args,
5530                                  OverloadCandidateSet& CandidateSet,
5531                                  bool SuppressUserConversions) {
5532   if (!CandidateSet.isNewCandidate(MethodTmpl))
5533     return;
5534 
5535   // C++ [over.match.funcs]p7:
5536   //   In each case where a candidate is a function template, candidate
5537   //   function template specializations are generated using template argument
5538   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5539   //   candidate functions in the usual way.113) A given name can refer to one
5540   //   or more function templates and also to a set of overloaded non-template
5541   //   functions. In such a case, the candidate functions generated from each
5542   //   function template are combined with the set of non-template candidate
5543   //   functions.
5544   TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5545   FunctionDecl *Specialization = 0;
5546   if (TemplateDeductionResult Result
5547       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5548                                 Specialization, Info)) {
5549     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5550     Candidate.FoundDecl = FoundDecl;
5551     Candidate.Function = MethodTmpl->getTemplatedDecl();
5552     Candidate.Viable = false;
5553     Candidate.FailureKind = ovl_fail_bad_deduction;
5554     Candidate.IsSurrogate = false;
5555     Candidate.IgnoreObjectArgument = false;
5556     Candidate.ExplicitCallArguments = Args.size();
5557     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5558                                                           Info);
5559     return;
5560   }
5561 
5562   // Add the function template specialization produced by template argument
5563   // deduction as a candidate.
5564   assert(Specialization && "Missing member function template specialization?");
5565   assert(isa<CXXMethodDecl>(Specialization) &&
5566          "Specialization is not a member function?");
5567   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5568                      ActingContext, ObjectType, ObjectClassification, Args,
5569                      CandidateSet, SuppressUserConversions);
5570 }
5571 
5572 /// \brief Add a C++ function template specialization as a candidate
5573 /// in the candidate set, using template argument deduction to produce
5574 /// an appropriate function template specialization.
5575 void
5576 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5577                                    DeclAccessPair FoundDecl,
5578                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5579                                    llvm::ArrayRef<Expr *> Args,
5580                                    OverloadCandidateSet& CandidateSet,
5581                                    bool SuppressUserConversions) {
5582   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5583     return;
5584 
5585   // C++ [over.match.funcs]p7:
5586   //   In each case where a candidate is a function template, candidate
5587   //   function template specializations are generated using template argument
5588   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5589   //   candidate functions in the usual way.113) A given name can refer to one
5590   //   or more function templates and also to a set of overloaded non-template
5591   //   functions. In such a case, the candidate functions generated from each
5592   //   function template are combined with the set of non-template candidate
5593   //   functions.
5594   TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5595   FunctionDecl *Specialization = 0;
5596   if (TemplateDeductionResult Result
5597         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5598                                   Specialization, Info)) {
5599     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5600     Candidate.FoundDecl = FoundDecl;
5601     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5602     Candidate.Viable = false;
5603     Candidate.FailureKind = ovl_fail_bad_deduction;
5604     Candidate.IsSurrogate = false;
5605     Candidate.IgnoreObjectArgument = false;
5606     Candidate.ExplicitCallArguments = Args.size();
5607     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5608                                                           Info);
5609     return;
5610   }
5611 
5612   // Add the function template specialization produced by template argument
5613   // deduction as a candidate.
5614   assert(Specialization && "Missing function template specialization?");
5615   AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5616                        SuppressUserConversions);
5617 }
5618 
5619 /// AddConversionCandidate - Add a C++ conversion function as a
5620 /// candidate in the candidate set (C++ [over.match.conv],
5621 /// C++ [over.match.copy]). From is the expression we're converting from,
5622 /// and ToType is the type that we're eventually trying to convert to
5623 /// (which may or may not be the same type as the type that the
5624 /// conversion function produces).
5625 void
5626 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5627                              DeclAccessPair FoundDecl,
5628                              CXXRecordDecl *ActingContext,
5629                              Expr *From, QualType ToType,
5630                              OverloadCandidateSet& CandidateSet) {
5631   assert(!Conversion->getDescribedFunctionTemplate() &&
5632          "Conversion function templates use AddTemplateConversionCandidate");
5633   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5634   if (!CandidateSet.isNewCandidate(Conversion))
5635     return;
5636 
5637   // Overload resolution is always an unevaluated context.
5638   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5639 
5640   // Add this candidate
5641   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5642   Candidate.FoundDecl = FoundDecl;
5643   Candidate.Function = Conversion;
5644   Candidate.IsSurrogate = false;
5645   Candidate.IgnoreObjectArgument = false;
5646   Candidate.FinalConversion.setAsIdentityConversion();
5647   Candidate.FinalConversion.setFromType(ConvType);
5648   Candidate.FinalConversion.setAllToTypes(ToType);
5649   Candidate.Viable = true;
5650   Candidate.ExplicitCallArguments = 1;
5651 
5652   // C++ [over.match.funcs]p4:
5653   //   For conversion functions, the function is considered to be a member of
5654   //   the class of the implicit implied object argument for the purpose of
5655   //   defining the type of the implicit object parameter.
5656   //
5657   // Determine the implicit conversion sequence for the implicit
5658   // object parameter.
5659   QualType ImplicitParamType = From->getType();
5660   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5661     ImplicitParamType = FromPtrType->getPointeeType();
5662   CXXRecordDecl *ConversionContext
5663     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5664 
5665   Candidate.Conversions[0]
5666     = TryObjectArgumentInitialization(*this, From->getType(),
5667                                       From->Classify(Context),
5668                                       Conversion, ConversionContext);
5669 
5670   if (Candidate.Conversions[0].isBad()) {
5671     Candidate.Viable = false;
5672     Candidate.FailureKind = ovl_fail_bad_conversion;
5673     return;
5674   }
5675 
5676   // We won't go through a user-define type conversion function to convert a
5677   // derived to base as such conversions are given Conversion Rank. They only
5678   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5679   QualType FromCanon
5680     = Context.getCanonicalType(From->getType().getUnqualifiedType());
5681   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5682   if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5683     Candidate.Viable = false;
5684     Candidate.FailureKind = ovl_fail_trivial_conversion;
5685     return;
5686   }
5687 
5688   // To determine what the conversion from the result of calling the
5689   // conversion function to the type we're eventually trying to
5690   // convert to (ToType), we need to synthesize a call to the
5691   // conversion function and attempt copy initialization from it. This
5692   // makes sure that we get the right semantics with respect to
5693   // lvalues/rvalues and the type. Fortunately, we can allocate this
5694   // call on the stack and we don't need its arguments to be
5695   // well-formed.
5696   DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5697                             VK_LValue, From->getLocStart());
5698   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5699                                 Context.getPointerType(Conversion->getType()),
5700                                 CK_FunctionToPointerDecay,
5701                                 &ConversionRef, VK_RValue);
5702 
5703   QualType ConversionType = Conversion->getConversionType();
5704   if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5705     Candidate.Viable = false;
5706     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5707     return;
5708   }
5709 
5710   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5711 
5712   // Note that it is safe to allocate CallExpr on the stack here because
5713   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5714   // allocator).
5715   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5716   CallExpr Call(Context, &ConversionFn, 0, 0, CallResultType, VK,
5717                 From->getLocStart());
5718   ImplicitConversionSequence ICS =
5719     TryCopyInitialization(*this, &Call, ToType,
5720                           /*SuppressUserConversions=*/true,
5721                           /*InOverloadResolution=*/false,
5722                           /*AllowObjCWritebackConversion=*/false);
5723 
5724   switch (ICS.getKind()) {
5725   case ImplicitConversionSequence::StandardConversion:
5726     Candidate.FinalConversion = ICS.Standard;
5727 
5728     // C++ [over.ics.user]p3:
5729     //   If the user-defined conversion is specified by a specialization of a
5730     //   conversion function template, the second standard conversion sequence
5731     //   shall have exact match rank.
5732     if (Conversion->getPrimaryTemplate() &&
5733         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5734       Candidate.Viable = false;
5735       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5736     }
5737 
5738     // C++0x [dcl.init.ref]p5:
5739     //    In the second case, if the reference is an rvalue reference and
5740     //    the second standard conversion sequence of the user-defined
5741     //    conversion sequence includes an lvalue-to-rvalue conversion, the
5742     //    program is ill-formed.
5743     if (ToType->isRValueReferenceType() &&
5744         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5745       Candidate.Viable = false;
5746       Candidate.FailureKind = ovl_fail_bad_final_conversion;
5747     }
5748     break;
5749 
5750   case ImplicitConversionSequence::BadConversion:
5751     Candidate.Viable = false;
5752     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5753     break;
5754 
5755   default:
5756     llvm_unreachable(
5757            "Can only end up with a standard conversion sequence or failure");
5758   }
5759 }
5760 
5761 /// \brief Adds a conversion function template specialization
5762 /// candidate to the overload set, using template argument deduction
5763 /// to deduce the template arguments of the conversion function
5764 /// template from the type that we are converting to (C++
5765 /// [temp.deduct.conv]).
5766 void
5767 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5768                                      DeclAccessPair FoundDecl,
5769                                      CXXRecordDecl *ActingDC,
5770                                      Expr *From, QualType ToType,
5771                                      OverloadCandidateSet &CandidateSet) {
5772   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5773          "Only conversion function templates permitted here");
5774 
5775   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5776     return;
5777 
5778   TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5779   CXXConversionDecl *Specialization = 0;
5780   if (TemplateDeductionResult Result
5781         = DeduceTemplateArguments(FunctionTemplate, ToType,
5782                                   Specialization, Info)) {
5783     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5784     Candidate.FoundDecl = FoundDecl;
5785     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5786     Candidate.Viable = false;
5787     Candidate.FailureKind = ovl_fail_bad_deduction;
5788     Candidate.IsSurrogate = false;
5789     Candidate.IgnoreObjectArgument = false;
5790     Candidate.ExplicitCallArguments = 1;
5791     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5792                                                           Info);
5793     return;
5794   }
5795 
5796   // Add the conversion function template specialization produced by
5797   // template argument deduction as a candidate.
5798   assert(Specialization && "Missing function template specialization?");
5799   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5800                          CandidateSet);
5801 }
5802 
5803 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5804 /// converts the given @c Object to a function pointer via the
5805 /// conversion function @c Conversion, and then attempts to call it
5806 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
5807 /// the type of function that we'll eventually be calling.
5808 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
5809                                  DeclAccessPair FoundDecl,
5810                                  CXXRecordDecl *ActingContext,
5811                                  const FunctionProtoType *Proto,
5812                                  Expr *Object,
5813                                  llvm::ArrayRef<Expr *> Args,
5814                                  OverloadCandidateSet& CandidateSet) {
5815   if (!CandidateSet.isNewCandidate(Conversion))
5816     return;
5817 
5818   // Overload resolution is always an unevaluated context.
5819   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5820 
5821   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5822   Candidate.FoundDecl = FoundDecl;
5823   Candidate.Function = 0;
5824   Candidate.Surrogate = Conversion;
5825   Candidate.Viable = true;
5826   Candidate.IsSurrogate = true;
5827   Candidate.IgnoreObjectArgument = false;
5828   Candidate.ExplicitCallArguments = Args.size();
5829 
5830   // Determine the implicit conversion sequence for the implicit
5831   // object parameter.
5832   ImplicitConversionSequence ObjectInit
5833     = TryObjectArgumentInitialization(*this, Object->getType(),
5834                                       Object->Classify(Context),
5835                                       Conversion, ActingContext);
5836   if (ObjectInit.isBad()) {
5837     Candidate.Viable = false;
5838     Candidate.FailureKind = ovl_fail_bad_conversion;
5839     Candidate.Conversions[0] = ObjectInit;
5840     return;
5841   }
5842 
5843   // The first conversion is actually a user-defined conversion whose
5844   // first conversion is ObjectInit's standard conversion (which is
5845   // effectively a reference binding). Record it as such.
5846   Candidate.Conversions[0].setUserDefined();
5847   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
5848   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
5849   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
5850   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
5851   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
5852   Candidate.Conversions[0].UserDefined.After
5853     = Candidate.Conversions[0].UserDefined.Before;
5854   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
5855 
5856   // Find the
5857   unsigned NumArgsInProto = Proto->getNumArgs();
5858 
5859   // (C++ 13.3.2p2): A candidate function having fewer than m
5860   // parameters is viable only if it has an ellipsis in its parameter
5861   // list (8.3.5).
5862   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5863     Candidate.Viable = false;
5864     Candidate.FailureKind = ovl_fail_too_many_arguments;
5865     return;
5866   }
5867 
5868   // Function types don't have any default arguments, so just check if
5869   // we have enough arguments.
5870   if (Args.size() < NumArgsInProto) {
5871     // Not enough arguments.
5872     Candidate.Viable = false;
5873     Candidate.FailureKind = ovl_fail_too_few_arguments;
5874     return;
5875   }
5876 
5877   // Determine the implicit conversion sequences for each of the
5878   // arguments.
5879   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5880     if (ArgIdx < NumArgsInProto) {
5881       // (C++ 13.3.2p3): for F to be a viable function, there shall
5882       // exist for each argument an implicit conversion sequence
5883       // (13.3.3.1) that converts that argument to the corresponding
5884       // parameter of F.
5885       QualType ParamType = Proto->getArgType(ArgIdx);
5886       Candidate.Conversions[ArgIdx + 1]
5887         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5888                                 /*SuppressUserConversions=*/false,
5889                                 /*InOverloadResolution=*/false,
5890                                 /*AllowObjCWritebackConversion=*/
5891                                   getLangOpts().ObjCAutoRefCount);
5892       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5893         Candidate.Viable = false;
5894         Candidate.FailureKind = ovl_fail_bad_conversion;
5895         break;
5896       }
5897     } else {
5898       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5899       // argument for which there is no corresponding parameter is
5900       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5901       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5902     }
5903   }
5904 }
5905 
5906 /// \brief Add overload candidates for overloaded operators that are
5907 /// member functions.
5908 ///
5909 /// Add the overloaded operator candidates that are member functions
5910 /// for the operator Op that was used in an operator expression such
5911 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
5912 /// CandidateSet will store the added overload candidates. (C++
5913 /// [over.match.oper]).
5914 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
5915                                        SourceLocation OpLoc,
5916                                        Expr **Args, unsigned NumArgs,
5917                                        OverloadCandidateSet& CandidateSet,
5918                                        SourceRange OpRange) {
5919   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5920 
5921   // C++ [over.match.oper]p3:
5922   //   For a unary operator @ with an operand of a type whose
5923   //   cv-unqualified version is T1, and for a binary operator @ with
5924   //   a left operand of a type whose cv-unqualified version is T1 and
5925   //   a right operand of a type whose cv-unqualified version is T2,
5926   //   three sets of candidate functions, designated member
5927   //   candidates, non-member candidates and built-in candidates, are
5928   //   constructed as follows:
5929   QualType T1 = Args[0]->getType();
5930 
5931   //     -- If T1 is a class type, the set of member candidates is the
5932   //        result of the qualified lookup of T1::operator@
5933   //        (13.3.1.1.1); otherwise, the set of member candidates is
5934   //        empty.
5935   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
5936     // Complete the type if it can be completed. Otherwise, we're done.
5937     if (RequireCompleteType(OpLoc, T1, 0))
5938       return;
5939 
5940     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
5941     LookupQualifiedName(Operators, T1Rec->getDecl());
5942     Operators.suppressDiagnostics();
5943 
5944     for (LookupResult::iterator Oper = Operators.begin(),
5945                              OperEnd = Operators.end();
5946          Oper != OperEnd;
5947          ++Oper)
5948       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
5949                          Args[0]->Classify(Context), Args + 1, NumArgs - 1,
5950                          CandidateSet,
5951                          /* SuppressUserConversions = */ false);
5952   }
5953 }
5954 
5955 /// AddBuiltinCandidate - Add a candidate for a built-in
5956 /// operator. ResultTy and ParamTys are the result and parameter types
5957 /// of the built-in candidate, respectively. Args and NumArgs are the
5958 /// arguments being passed to the candidate. IsAssignmentOperator
5959 /// should be true when this built-in candidate is an assignment
5960 /// operator. NumContextualBoolArguments is the number of arguments
5961 /// (at the beginning of the argument list) that will be contextually
5962 /// converted to bool.
5963 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
5964                                Expr **Args, unsigned NumArgs,
5965                                OverloadCandidateSet& CandidateSet,
5966                                bool IsAssignmentOperator,
5967                                unsigned NumContextualBoolArguments) {
5968   // Overload resolution is always an unevaluated context.
5969   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5970 
5971   // Add this candidate
5972   OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs);
5973   Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
5974   Candidate.Function = 0;
5975   Candidate.IsSurrogate = false;
5976   Candidate.IgnoreObjectArgument = false;
5977   Candidate.BuiltinTypes.ResultTy = ResultTy;
5978   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
5979     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
5980 
5981   // Determine the implicit conversion sequences for each of the
5982   // arguments.
5983   Candidate.Viable = true;
5984   Candidate.ExplicitCallArguments = NumArgs;
5985   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
5986     // C++ [over.match.oper]p4:
5987     //   For the built-in assignment operators, conversions of the
5988     //   left operand are restricted as follows:
5989     //     -- no temporaries are introduced to hold the left operand, and
5990     //     -- no user-defined conversions are applied to the left
5991     //        operand to achieve a type match with the left-most
5992     //        parameter of a built-in candidate.
5993     //
5994     // We block these conversions by turning off user-defined
5995     // conversions, since that is the only way that initialization of
5996     // a reference to a non-class type can occur from something that
5997     // is not of the same type.
5998     if (ArgIdx < NumContextualBoolArguments) {
5999       assert(ParamTys[ArgIdx] == Context.BoolTy &&
6000              "Contextual conversion to bool requires bool type");
6001       Candidate.Conversions[ArgIdx]
6002         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6003     } else {
6004       Candidate.Conversions[ArgIdx]
6005         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6006                                 ArgIdx == 0 && IsAssignmentOperator,
6007                                 /*InOverloadResolution=*/false,
6008                                 /*AllowObjCWritebackConversion=*/
6009                                   getLangOpts().ObjCAutoRefCount);
6010     }
6011     if (Candidate.Conversions[ArgIdx].isBad()) {
6012       Candidate.Viable = false;
6013       Candidate.FailureKind = ovl_fail_bad_conversion;
6014       break;
6015     }
6016   }
6017 }
6018 
6019 /// BuiltinCandidateTypeSet - A set of types that will be used for the
6020 /// candidate operator functions for built-in operators (C++
6021 /// [over.built]). The types are separated into pointer types and
6022 /// enumeration types.
6023 class BuiltinCandidateTypeSet  {
6024   /// TypeSet - A set of types.
6025   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6026 
6027   /// PointerTypes - The set of pointer types that will be used in the
6028   /// built-in candidates.
6029   TypeSet PointerTypes;
6030 
6031   /// MemberPointerTypes - The set of member pointer types that will be
6032   /// used in the built-in candidates.
6033   TypeSet MemberPointerTypes;
6034 
6035   /// EnumerationTypes - The set of enumeration types that will be
6036   /// used in the built-in candidates.
6037   TypeSet EnumerationTypes;
6038 
6039   /// \brief The set of vector types that will be used in the built-in
6040   /// candidates.
6041   TypeSet VectorTypes;
6042 
6043   /// \brief A flag indicating non-record types are viable candidates
6044   bool HasNonRecordTypes;
6045 
6046   /// \brief A flag indicating whether either arithmetic or enumeration types
6047   /// were present in the candidate set.
6048   bool HasArithmeticOrEnumeralTypes;
6049 
6050   /// \brief A flag indicating whether the nullptr type was present in the
6051   /// candidate set.
6052   bool HasNullPtrType;
6053 
6054   /// Sema - The semantic analysis instance where we are building the
6055   /// candidate type set.
6056   Sema &SemaRef;
6057 
6058   /// Context - The AST context in which we will build the type sets.
6059   ASTContext &Context;
6060 
6061   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6062                                                const Qualifiers &VisibleQuals);
6063   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6064 
6065 public:
6066   /// iterator - Iterates through the types that are part of the set.
6067   typedef TypeSet::iterator iterator;
6068 
6069   BuiltinCandidateTypeSet(Sema &SemaRef)
6070     : HasNonRecordTypes(false),
6071       HasArithmeticOrEnumeralTypes(false),
6072       HasNullPtrType(false),
6073       SemaRef(SemaRef),
6074       Context(SemaRef.Context) { }
6075 
6076   void AddTypesConvertedFrom(QualType Ty,
6077                              SourceLocation Loc,
6078                              bool AllowUserConversions,
6079                              bool AllowExplicitConversions,
6080                              const Qualifiers &VisibleTypeConversionsQuals);
6081 
6082   /// pointer_begin - First pointer type found;
6083   iterator pointer_begin() { return PointerTypes.begin(); }
6084 
6085   /// pointer_end - Past the last pointer type found;
6086   iterator pointer_end() { return PointerTypes.end(); }
6087 
6088   /// member_pointer_begin - First member pointer type found;
6089   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6090 
6091   /// member_pointer_end - Past the last member pointer type found;
6092   iterator member_pointer_end() { return MemberPointerTypes.end(); }
6093 
6094   /// enumeration_begin - First enumeration type found;
6095   iterator enumeration_begin() { return EnumerationTypes.begin(); }
6096 
6097   /// enumeration_end - Past the last enumeration type found;
6098   iterator enumeration_end() { return EnumerationTypes.end(); }
6099 
6100   iterator vector_begin() { return VectorTypes.begin(); }
6101   iterator vector_end() { return VectorTypes.end(); }
6102 
6103   bool hasNonRecordTypes() { return HasNonRecordTypes; }
6104   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6105   bool hasNullPtrType() const { return HasNullPtrType; }
6106 };
6107 
6108 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6109 /// the set of pointer types along with any more-qualified variants of
6110 /// that type. For example, if @p Ty is "int const *", this routine
6111 /// will add "int const *", "int const volatile *", "int const
6112 /// restrict *", and "int const volatile restrict *" to the set of
6113 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6114 /// false otherwise.
6115 ///
6116 /// FIXME: what to do about extended qualifiers?
6117 bool
6118 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6119                                              const Qualifiers &VisibleQuals) {
6120 
6121   // Insert this type.
6122   if (!PointerTypes.insert(Ty))
6123     return false;
6124 
6125   QualType PointeeTy;
6126   const PointerType *PointerTy = Ty->getAs<PointerType>();
6127   bool buildObjCPtr = false;
6128   if (!PointerTy) {
6129     const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6130     PointeeTy = PTy->getPointeeType();
6131     buildObjCPtr = true;
6132   } else {
6133     PointeeTy = PointerTy->getPointeeType();
6134   }
6135 
6136   // Don't add qualified variants of arrays. For one, they're not allowed
6137   // (the qualifier would sink to the element type), and for another, the
6138   // only overload situation where it matters is subscript or pointer +- int,
6139   // and those shouldn't have qualifier variants anyway.
6140   if (PointeeTy->isArrayType())
6141     return true;
6142 
6143   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6144   bool hasVolatile = VisibleQuals.hasVolatile();
6145   bool hasRestrict = VisibleQuals.hasRestrict();
6146 
6147   // Iterate through all strict supersets of BaseCVR.
6148   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6149     if ((CVR | BaseCVR) != CVR) continue;
6150     // Skip over volatile if no volatile found anywhere in the types.
6151     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6152 
6153     // Skip over restrict if no restrict found anywhere in the types, or if
6154     // the type cannot be restrict-qualified.
6155     if ((CVR & Qualifiers::Restrict) &&
6156         (!hasRestrict ||
6157          (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6158       continue;
6159 
6160     // Build qualified pointee type.
6161     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6162 
6163     // Build qualified pointer type.
6164     QualType QPointerTy;
6165     if (!buildObjCPtr)
6166       QPointerTy = Context.getPointerType(QPointeeTy);
6167     else
6168       QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6169 
6170     // Insert qualified pointer type.
6171     PointerTypes.insert(QPointerTy);
6172   }
6173 
6174   return true;
6175 }
6176 
6177 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6178 /// to the set of pointer types along with any more-qualified variants of
6179 /// that type. For example, if @p Ty is "int const *", this routine
6180 /// will add "int const *", "int const volatile *", "int const
6181 /// restrict *", and "int const volatile restrict *" to the set of
6182 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6183 /// false otherwise.
6184 ///
6185 /// FIXME: what to do about extended qualifiers?
6186 bool
6187 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6188     QualType Ty) {
6189   // Insert this type.
6190   if (!MemberPointerTypes.insert(Ty))
6191     return false;
6192 
6193   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6194   assert(PointerTy && "type was not a member pointer type!");
6195 
6196   QualType PointeeTy = PointerTy->getPointeeType();
6197   // Don't add qualified variants of arrays. For one, they're not allowed
6198   // (the qualifier would sink to the element type), and for another, the
6199   // only overload situation where it matters is subscript or pointer +- int,
6200   // and those shouldn't have qualifier variants anyway.
6201   if (PointeeTy->isArrayType())
6202     return true;
6203   const Type *ClassTy = PointerTy->getClass();
6204 
6205   // Iterate through all strict supersets of the pointee type's CVR
6206   // qualifiers.
6207   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6208   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6209     if ((CVR | BaseCVR) != CVR) continue;
6210 
6211     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6212     MemberPointerTypes.insert(
6213       Context.getMemberPointerType(QPointeeTy, ClassTy));
6214   }
6215 
6216   return true;
6217 }
6218 
6219 /// AddTypesConvertedFrom - Add each of the types to which the type @p
6220 /// Ty can be implicit converted to the given set of @p Types. We're
6221 /// primarily interested in pointer types and enumeration types. We also
6222 /// take member pointer types, for the conditional operator.
6223 /// AllowUserConversions is true if we should look at the conversion
6224 /// functions of a class type, and AllowExplicitConversions if we
6225 /// should also include the explicit conversion functions of a class
6226 /// type.
6227 void
6228 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6229                                                SourceLocation Loc,
6230                                                bool AllowUserConversions,
6231                                                bool AllowExplicitConversions,
6232                                                const Qualifiers &VisibleQuals) {
6233   // Only deal with canonical types.
6234   Ty = Context.getCanonicalType(Ty);
6235 
6236   // Look through reference types; they aren't part of the type of an
6237   // expression for the purposes of conversions.
6238   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6239     Ty = RefTy->getPointeeType();
6240 
6241   // If we're dealing with an array type, decay to the pointer.
6242   if (Ty->isArrayType())
6243     Ty = SemaRef.Context.getArrayDecayedType(Ty);
6244 
6245   // Otherwise, we don't care about qualifiers on the type.
6246   Ty = Ty.getLocalUnqualifiedType();
6247 
6248   // Flag if we ever add a non-record type.
6249   const RecordType *TyRec = Ty->getAs<RecordType>();
6250   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6251 
6252   // Flag if we encounter an arithmetic type.
6253   HasArithmeticOrEnumeralTypes =
6254     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6255 
6256   if (Ty->isObjCIdType() || Ty->isObjCClassType())
6257     PointerTypes.insert(Ty);
6258   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6259     // Insert our type, and its more-qualified variants, into the set
6260     // of types.
6261     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6262       return;
6263   } else if (Ty->isMemberPointerType()) {
6264     // Member pointers are far easier, since the pointee can't be converted.
6265     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6266       return;
6267   } else if (Ty->isEnumeralType()) {
6268     HasArithmeticOrEnumeralTypes = true;
6269     EnumerationTypes.insert(Ty);
6270   } else if (Ty->isVectorType()) {
6271     // We treat vector types as arithmetic types in many contexts as an
6272     // extension.
6273     HasArithmeticOrEnumeralTypes = true;
6274     VectorTypes.insert(Ty);
6275   } else if (Ty->isNullPtrType()) {
6276     HasNullPtrType = true;
6277   } else if (AllowUserConversions && TyRec) {
6278     // No conversion functions in incomplete types.
6279     if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6280       return;
6281 
6282     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6283     const UnresolvedSetImpl *Conversions
6284       = ClassDecl->getVisibleConversionFunctions();
6285     for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6286            E = Conversions->end(); I != E; ++I) {
6287       NamedDecl *D = I.getDecl();
6288       if (isa<UsingShadowDecl>(D))
6289         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6290 
6291       // Skip conversion function templates; they don't tell us anything
6292       // about which builtin types we can convert to.
6293       if (isa<FunctionTemplateDecl>(D))
6294         continue;
6295 
6296       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6297       if (AllowExplicitConversions || !Conv->isExplicit()) {
6298         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6299                               VisibleQuals);
6300       }
6301     }
6302   }
6303 }
6304 
6305 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6306 /// the volatile- and non-volatile-qualified assignment operators for the
6307 /// given type to the candidate set.
6308 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6309                                                    QualType T,
6310                                                    Expr **Args,
6311                                                    unsigned NumArgs,
6312                                     OverloadCandidateSet &CandidateSet) {
6313   QualType ParamTypes[2];
6314 
6315   // T& operator=(T&, T)
6316   ParamTypes[0] = S.Context.getLValueReferenceType(T);
6317   ParamTypes[1] = T;
6318   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6319                         /*IsAssignmentOperator=*/true);
6320 
6321   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6322     // volatile T& operator=(volatile T&, T)
6323     ParamTypes[0]
6324       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6325     ParamTypes[1] = T;
6326     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6327                           /*IsAssignmentOperator=*/true);
6328   }
6329 }
6330 
6331 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6332 /// if any, found in visible type conversion functions found in ArgExpr's type.
6333 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6334     Qualifiers VRQuals;
6335     const RecordType *TyRec;
6336     if (const MemberPointerType *RHSMPType =
6337         ArgExpr->getType()->getAs<MemberPointerType>())
6338       TyRec = RHSMPType->getClass()->getAs<RecordType>();
6339     else
6340       TyRec = ArgExpr->getType()->getAs<RecordType>();
6341     if (!TyRec) {
6342       // Just to be safe, assume the worst case.
6343       VRQuals.addVolatile();
6344       VRQuals.addRestrict();
6345       return VRQuals;
6346     }
6347 
6348     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6349     if (!ClassDecl->hasDefinition())
6350       return VRQuals;
6351 
6352     const UnresolvedSetImpl *Conversions =
6353       ClassDecl->getVisibleConversionFunctions();
6354 
6355     for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6356            E = Conversions->end(); I != E; ++I) {
6357       NamedDecl *D = I.getDecl();
6358       if (isa<UsingShadowDecl>(D))
6359         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6360       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6361         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6362         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6363           CanTy = ResTypeRef->getPointeeType();
6364         // Need to go down the pointer/mempointer chain and add qualifiers
6365         // as see them.
6366         bool done = false;
6367         while (!done) {
6368           if (CanTy.isRestrictQualified())
6369             VRQuals.addRestrict();
6370           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6371             CanTy = ResTypePtr->getPointeeType();
6372           else if (const MemberPointerType *ResTypeMPtr =
6373                 CanTy->getAs<MemberPointerType>())
6374             CanTy = ResTypeMPtr->getPointeeType();
6375           else
6376             done = true;
6377           if (CanTy.isVolatileQualified())
6378             VRQuals.addVolatile();
6379           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6380             return VRQuals;
6381         }
6382       }
6383     }
6384     return VRQuals;
6385 }
6386 
6387 namespace {
6388 
6389 /// \brief Helper class to manage the addition of builtin operator overload
6390 /// candidates. It provides shared state and utility methods used throughout
6391 /// the process, as well as a helper method to add each group of builtin
6392 /// operator overloads from the standard to a candidate set.
6393 class BuiltinOperatorOverloadBuilder {
6394   // Common instance state available to all overload candidate addition methods.
6395   Sema &S;
6396   Expr **Args;
6397   unsigned NumArgs;
6398   Qualifiers VisibleTypeConversionsQuals;
6399   bool HasArithmeticOrEnumeralCandidateType;
6400   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6401   OverloadCandidateSet &CandidateSet;
6402 
6403   // Define some constants used to index and iterate over the arithemetic types
6404   // provided via the getArithmeticType() method below.
6405   // The "promoted arithmetic types" are the arithmetic
6406   // types are that preserved by promotion (C++ [over.built]p2).
6407   static const unsigned FirstIntegralType = 3;
6408   static const unsigned LastIntegralType = 20;
6409   static const unsigned FirstPromotedIntegralType = 3,
6410                         LastPromotedIntegralType = 11;
6411   static const unsigned FirstPromotedArithmeticType = 0,
6412                         LastPromotedArithmeticType = 11;
6413   static const unsigned NumArithmeticTypes = 20;
6414 
6415   /// \brief Get the canonical type for a given arithmetic type index.
6416   CanQualType getArithmeticType(unsigned index) {
6417     assert(index < NumArithmeticTypes);
6418     static CanQualType ASTContext::* const
6419       ArithmeticTypes[NumArithmeticTypes] = {
6420       // Start of promoted types.
6421       &ASTContext::FloatTy,
6422       &ASTContext::DoubleTy,
6423       &ASTContext::LongDoubleTy,
6424 
6425       // Start of integral types.
6426       &ASTContext::IntTy,
6427       &ASTContext::LongTy,
6428       &ASTContext::LongLongTy,
6429       &ASTContext::Int128Ty,
6430       &ASTContext::UnsignedIntTy,
6431       &ASTContext::UnsignedLongTy,
6432       &ASTContext::UnsignedLongLongTy,
6433       &ASTContext::UnsignedInt128Ty,
6434       // End of promoted types.
6435 
6436       &ASTContext::BoolTy,
6437       &ASTContext::CharTy,
6438       &ASTContext::WCharTy,
6439       &ASTContext::Char16Ty,
6440       &ASTContext::Char32Ty,
6441       &ASTContext::SignedCharTy,
6442       &ASTContext::ShortTy,
6443       &ASTContext::UnsignedCharTy,
6444       &ASTContext::UnsignedShortTy,
6445       // End of integral types.
6446       // FIXME: What about complex? What about half?
6447     };
6448     return S.Context.*ArithmeticTypes[index];
6449   }
6450 
6451   /// \brief Gets the canonical type resulting from the usual arithemetic
6452   /// converions for the given arithmetic types.
6453   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6454     // Accelerator table for performing the usual arithmetic conversions.
6455     // The rules are basically:
6456     //   - if either is floating-point, use the wider floating-point
6457     //   - if same signedness, use the higher rank
6458     //   - if same size, use unsigned of the higher rank
6459     //   - use the larger type
6460     // These rules, together with the axiom that higher ranks are
6461     // never smaller, are sufficient to precompute all of these results
6462     // *except* when dealing with signed types of higher rank.
6463     // (we could precompute SLL x UI for all known platforms, but it's
6464     // better not to make any assumptions).
6465     // We assume that int128 has a higher rank than long long on all platforms.
6466     enum PromotedType {
6467             Dep=-1,
6468             Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6469     };
6470     static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6471                                         [LastPromotedArithmeticType] = {
6472 /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6473 /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6474 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6475 /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6476 /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6477 /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6478 /*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6479 /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6480 /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6481 /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6482 /*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6483     };
6484 
6485     assert(L < LastPromotedArithmeticType);
6486     assert(R < LastPromotedArithmeticType);
6487     int Idx = ConversionsTable[L][R];
6488 
6489     // Fast path: the table gives us a concrete answer.
6490     if (Idx != Dep) return getArithmeticType(Idx);
6491 
6492     // Slow path: we need to compare widths.
6493     // An invariant is that the signed type has higher rank.
6494     CanQualType LT = getArithmeticType(L),
6495                 RT = getArithmeticType(R);
6496     unsigned LW = S.Context.getIntWidth(LT),
6497              RW = S.Context.getIntWidth(RT);
6498 
6499     // If they're different widths, use the signed type.
6500     if (LW > RW) return LT;
6501     else if (LW < RW) return RT;
6502 
6503     // Otherwise, use the unsigned type of the signed type's rank.
6504     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6505     assert(L == SLL || R == SLL);
6506     return S.Context.UnsignedLongLongTy;
6507   }
6508 
6509   /// \brief Helper method to factor out the common pattern of adding overloads
6510   /// for '++' and '--' builtin operators.
6511   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6512                                            bool HasVolatile,
6513                                            bool HasRestrict) {
6514     QualType ParamTypes[2] = {
6515       S.Context.getLValueReferenceType(CandidateTy),
6516       S.Context.IntTy
6517     };
6518 
6519     // Non-volatile version.
6520     if (NumArgs == 1)
6521       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6522     else
6523       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6524 
6525     // Use a heuristic to reduce number of builtin candidates in the set:
6526     // add volatile version only if there are conversions to a volatile type.
6527     if (HasVolatile) {
6528       ParamTypes[0] =
6529         S.Context.getLValueReferenceType(
6530           S.Context.getVolatileType(CandidateTy));
6531       if (NumArgs == 1)
6532         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6533       else
6534         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6535     }
6536 
6537     // Add restrict version only if there are conversions to a restrict type
6538     // and our candidate type is a non-restrict-qualified pointer.
6539     if (HasRestrict && CandidateTy->isAnyPointerType() &&
6540         !CandidateTy.isRestrictQualified()) {
6541       ParamTypes[0]
6542         = S.Context.getLValueReferenceType(
6543             S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6544       if (NumArgs == 1)
6545         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6546       else
6547         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6548 
6549       if (HasVolatile) {
6550         ParamTypes[0]
6551           = S.Context.getLValueReferenceType(
6552               S.Context.getCVRQualifiedType(CandidateTy,
6553                                             (Qualifiers::Volatile |
6554                                              Qualifiers::Restrict)));
6555         if (NumArgs == 1)
6556           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1,
6557                                 CandidateSet);
6558         else
6559           S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6560       }
6561     }
6562 
6563   }
6564 
6565 public:
6566   BuiltinOperatorOverloadBuilder(
6567     Sema &S, Expr **Args, unsigned NumArgs,
6568     Qualifiers VisibleTypeConversionsQuals,
6569     bool HasArithmeticOrEnumeralCandidateType,
6570     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6571     OverloadCandidateSet &CandidateSet)
6572     : S(S), Args(Args), NumArgs(NumArgs),
6573       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6574       HasArithmeticOrEnumeralCandidateType(
6575         HasArithmeticOrEnumeralCandidateType),
6576       CandidateTypes(CandidateTypes),
6577       CandidateSet(CandidateSet) {
6578     // Validate some of our static helper constants in debug builds.
6579     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6580            "Invalid first promoted integral type");
6581     assert(getArithmeticType(LastPromotedIntegralType - 1)
6582              == S.Context.UnsignedInt128Ty &&
6583            "Invalid last promoted integral type");
6584     assert(getArithmeticType(FirstPromotedArithmeticType)
6585              == S.Context.FloatTy &&
6586            "Invalid first promoted arithmetic type");
6587     assert(getArithmeticType(LastPromotedArithmeticType - 1)
6588              == S.Context.UnsignedInt128Ty &&
6589            "Invalid last promoted arithmetic type");
6590   }
6591 
6592   // C++ [over.built]p3:
6593   //
6594   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6595   //   is either volatile or empty, there exist candidate operator
6596   //   functions of the form
6597   //
6598   //       VQ T&      operator++(VQ T&);
6599   //       T          operator++(VQ T&, int);
6600   //
6601   // C++ [over.built]p4:
6602   //
6603   //   For every pair (T, VQ), where T is an arithmetic type other
6604   //   than bool, and VQ is either volatile or empty, there exist
6605   //   candidate operator functions of the form
6606   //
6607   //       VQ T&      operator--(VQ T&);
6608   //       T          operator--(VQ T&, int);
6609   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6610     if (!HasArithmeticOrEnumeralCandidateType)
6611       return;
6612 
6613     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6614          Arith < NumArithmeticTypes; ++Arith) {
6615       addPlusPlusMinusMinusStyleOverloads(
6616         getArithmeticType(Arith),
6617         VisibleTypeConversionsQuals.hasVolatile(),
6618         VisibleTypeConversionsQuals.hasRestrict());
6619     }
6620   }
6621 
6622   // C++ [over.built]p5:
6623   //
6624   //   For every pair (T, VQ), where T is a cv-qualified or
6625   //   cv-unqualified object type, and VQ is either volatile or
6626   //   empty, there exist candidate operator functions of the form
6627   //
6628   //       T*VQ&      operator++(T*VQ&);
6629   //       T*VQ&      operator--(T*VQ&);
6630   //       T*         operator++(T*VQ&, int);
6631   //       T*         operator--(T*VQ&, int);
6632   void addPlusPlusMinusMinusPointerOverloads() {
6633     for (BuiltinCandidateTypeSet::iterator
6634               Ptr = CandidateTypes[0].pointer_begin(),
6635            PtrEnd = CandidateTypes[0].pointer_end();
6636          Ptr != PtrEnd; ++Ptr) {
6637       // Skip pointer types that aren't pointers to object types.
6638       if (!(*Ptr)->getPointeeType()->isObjectType())
6639         continue;
6640 
6641       addPlusPlusMinusMinusStyleOverloads(*Ptr,
6642         (!(*Ptr).isVolatileQualified() &&
6643          VisibleTypeConversionsQuals.hasVolatile()),
6644         (!(*Ptr).isRestrictQualified() &&
6645          VisibleTypeConversionsQuals.hasRestrict()));
6646     }
6647   }
6648 
6649   // C++ [over.built]p6:
6650   //   For every cv-qualified or cv-unqualified object type T, there
6651   //   exist candidate operator functions of the form
6652   //
6653   //       T&         operator*(T*);
6654   //
6655   // C++ [over.built]p7:
6656   //   For every function type T that does not have cv-qualifiers or a
6657   //   ref-qualifier, there exist candidate operator functions of the form
6658   //       T&         operator*(T*);
6659   void addUnaryStarPointerOverloads() {
6660     for (BuiltinCandidateTypeSet::iterator
6661               Ptr = CandidateTypes[0].pointer_begin(),
6662            PtrEnd = CandidateTypes[0].pointer_end();
6663          Ptr != PtrEnd; ++Ptr) {
6664       QualType ParamTy = *Ptr;
6665       QualType PointeeTy = ParamTy->getPointeeType();
6666       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6667         continue;
6668 
6669       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6670         if (Proto->getTypeQuals() || Proto->getRefQualifier())
6671           continue;
6672 
6673       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6674                             &ParamTy, Args, 1, CandidateSet);
6675     }
6676   }
6677 
6678   // C++ [over.built]p9:
6679   //  For every promoted arithmetic type T, there exist candidate
6680   //  operator functions of the form
6681   //
6682   //       T         operator+(T);
6683   //       T         operator-(T);
6684   void addUnaryPlusOrMinusArithmeticOverloads() {
6685     if (!HasArithmeticOrEnumeralCandidateType)
6686       return;
6687 
6688     for (unsigned Arith = FirstPromotedArithmeticType;
6689          Arith < LastPromotedArithmeticType; ++Arith) {
6690       QualType ArithTy = getArithmeticType(Arith);
6691       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
6692     }
6693 
6694     // Extension: We also add these operators for vector types.
6695     for (BuiltinCandidateTypeSet::iterator
6696               Vec = CandidateTypes[0].vector_begin(),
6697            VecEnd = CandidateTypes[0].vector_end();
6698          Vec != VecEnd; ++Vec) {
6699       QualType VecTy = *Vec;
6700       S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6701     }
6702   }
6703 
6704   // C++ [over.built]p8:
6705   //   For every type T, there exist candidate operator functions of
6706   //   the form
6707   //
6708   //       T*         operator+(T*);
6709   void addUnaryPlusPointerOverloads() {
6710     for (BuiltinCandidateTypeSet::iterator
6711               Ptr = CandidateTypes[0].pointer_begin(),
6712            PtrEnd = CandidateTypes[0].pointer_end();
6713          Ptr != PtrEnd; ++Ptr) {
6714       QualType ParamTy = *Ptr;
6715       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
6716     }
6717   }
6718 
6719   // C++ [over.built]p10:
6720   //   For every promoted integral type T, there exist candidate
6721   //   operator functions of the form
6722   //
6723   //        T         operator~(T);
6724   void addUnaryTildePromotedIntegralOverloads() {
6725     if (!HasArithmeticOrEnumeralCandidateType)
6726       return;
6727 
6728     for (unsigned Int = FirstPromotedIntegralType;
6729          Int < LastPromotedIntegralType; ++Int) {
6730       QualType IntTy = getArithmeticType(Int);
6731       S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
6732     }
6733 
6734     // Extension: We also add this operator for vector types.
6735     for (BuiltinCandidateTypeSet::iterator
6736               Vec = CandidateTypes[0].vector_begin(),
6737            VecEnd = CandidateTypes[0].vector_end();
6738          Vec != VecEnd; ++Vec) {
6739       QualType VecTy = *Vec;
6740       S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6741     }
6742   }
6743 
6744   // C++ [over.match.oper]p16:
6745   //   For every pointer to member type T, there exist candidate operator
6746   //   functions of the form
6747   //
6748   //        bool operator==(T,T);
6749   //        bool operator!=(T,T);
6750   void addEqualEqualOrNotEqualMemberPointerOverloads() {
6751     /// Set of (canonical) types that we've already handled.
6752     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6753 
6754     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6755       for (BuiltinCandidateTypeSet::iterator
6756                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6757              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6758            MemPtr != MemPtrEnd;
6759            ++MemPtr) {
6760         // Don't add the same builtin candidate twice.
6761         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6762           continue;
6763 
6764         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6765         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6766                               CandidateSet);
6767       }
6768     }
6769   }
6770 
6771   // C++ [over.built]p15:
6772   //
6773   //   For every T, where T is an enumeration type, a pointer type, or
6774   //   std::nullptr_t, there exist candidate operator functions of the form
6775   //
6776   //        bool       operator<(T, T);
6777   //        bool       operator>(T, T);
6778   //        bool       operator<=(T, T);
6779   //        bool       operator>=(T, T);
6780   //        bool       operator==(T, T);
6781   //        bool       operator!=(T, T);
6782   void addRelationalPointerOrEnumeralOverloads() {
6783     // C++ [over.built]p1:
6784     //   If there is a user-written candidate with the same name and parameter
6785     //   types as a built-in candidate operator function, the built-in operator
6786     //   function is hidden and is not included in the set of candidate
6787     //   functions.
6788     //
6789     // The text is actually in a note, but if we don't implement it then we end
6790     // up with ambiguities when the user provides an overloaded operator for
6791     // an enumeration type. Note that only enumeration types have this problem,
6792     // so we track which enumeration types we've seen operators for. Also, the
6793     // only other overloaded operator with enumeration argumenst, operator=,
6794     // cannot be overloaded for enumeration types, so this is the only place
6795     // where we must suppress candidates like this.
6796     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6797       UserDefinedBinaryOperators;
6798 
6799     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6800       if (CandidateTypes[ArgIdx].enumeration_begin() !=
6801           CandidateTypes[ArgIdx].enumeration_end()) {
6802         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
6803                                          CEnd = CandidateSet.end();
6804              C != CEnd; ++C) {
6805           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
6806             continue;
6807 
6808           QualType FirstParamType =
6809             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
6810           QualType SecondParamType =
6811             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
6812 
6813           // Skip if either parameter isn't of enumeral type.
6814           if (!FirstParamType->isEnumeralType() ||
6815               !SecondParamType->isEnumeralType())
6816             continue;
6817 
6818           // Add this operator to the set of known user-defined operators.
6819           UserDefinedBinaryOperators.insert(
6820             std::make_pair(S.Context.getCanonicalType(FirstParamType),
6821                            S.Context.getCanonicalType(SecondParamType)));
6822         }
6823       }
6824     }
6825 
6826     /// Set of (canonical) types that we've already handled.
6827     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6828 
6829     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6830       for (BuiltinCandidateTypeSet::iterator
6831                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
6832              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
6833            Ptr != PtrEnd; ++Ptr) {
6834         // Don't add the same builtin candidate twice.
6835         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6836           continue;
6837 
6838         QualType ParamTypes[2] = { *Ptr, *Ptr };
6839         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6840                               CandidateSet);
6841       }
6842       for (BuiltinCandidateTypeSet::iterator
6843                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
6844              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
6845            Enum != EnumEnd; ++Enum) {
6846         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
6847 
6848         // Don't add the same builtin candidate twice, or if a user defined
6849         // candidate exists.
6850         if (!AddedTypes.insert(CanonType) ||
6851             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
6852                                                             CanonType)))
6853           continue;
6854 
6855         QualType ParamTypes[2] = { *Enum, *Enum };
6856         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6857                               CandidateSet);
6858       }
6859 
6860       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
6861         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
6862         if (AddedTypes.insert(NullPtrTy) &&
6863             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
6864                                                              NullPtrTy))) {
6865           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
6866           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6867                                 CandidateSet);
6868         }
6869       }
6870     }
6871   }
6872 
6873   // C++ [over.built]p13:
6874   //
6875   //   For every cv-qualified or cv-unqualified object type T
6876   //   there exist candidate operator functions of the form
6877   //
6878   //      T*         operator+(T*, ptrdiff_t);
6879   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
6880   //      T*         operator-(T*, ptrdiff_t);
6881   //      T*         operator+(ptrdiff_t, T*);
6882   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
6883   //
6884   // C++ [over.built]p14:
6885   //
6886   //   For every T, where T is a pointer to object type, there
6887   //   exist candidate operator functions of the form
6888   //
6889   //      ptrdiff_t  operator-(T, T);
6890   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
6891     /// Set of (canonical) types that we've already handled.
6892     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6893 
6894     for (int Arg = 0; Arg < 2; ++Arg) {
6895       QualType AsymetricParamTypes[2] = {
6896         S.Context.getPointerDiffType(),
6897         S.Context.getPointerDiffType(),
6898       };
6899       for (BuiltinCandidateTypeSet::iterator
6900                 Ptr = CandidateTypes[Arg].pointer_begin(),
6901              PtrEnd = CandidateTypes[Arg].pointer_end();
6902            Ptr != PtrEnd; ++Ptr) {
6903         QualType PointeeTy = (*Ptr)->getPointeeType();
6904         if (!PointeeTy->isObjectType())
6905           continue;
6906 
6907         AsymetricParamTypes[Arg] = *Ptr;
6908         if (Arg == 0 || Op == OO_Plus) {
6909           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
6910           // T* operator+(ptrdiff_t, T*);
6911           S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2,
6912                                 CandidateSet);
6913         }
6914         if (Op == OO_Minus) {
6915           // ptrdiff_t operator-(T, T);
6916           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6917             continue;
6918 
6919           QualType ParamTypes[2] = { *Ptr, *Ptr };
6920           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
6921                                 Args, 2, CandidateSet);
6922         }
6923       }
6924     }
6925   }
6926 
6927   // C++ [over.built]p12:
6928   //
6929   //   For every pair of promoted arithmetic types L and R, there
6930   //   exist candidate operator functions of the form
6931   //
6932   //        LR         operator*(L, R);
6933   //        LR         operator/(L, R);
6934   //        LR         operator+(L, R);
6935   //        LR         operator-(L, R);
6936   //        bool       operator<(L, R);
6937   //        bool       operator>(L, R);
6938   //        bool       operator<=(L, R);
6939   //        bool       operator>=(L, R);
6940   //        bool       operator==(L, R);
6941   //        bool       operator!=(L, R);
6942   //
6943   //   where LR is the result of the usual arithmetic conversions
6944   //   between types L and R.
6945   //
6946   // C++ [over.built]p24:
6947   //
6948   //   For every pair of promoted arithmetic types L and R, there exist
6949   //   candidate operator functions of the form
6950   //
6951   //        LR       operator?(bool, L, R);
6952   //
6953   //   where LR is the result of the usual arithmetic conversions
6954   //   between types L and R.
6955   // Our candidates ignore the first parameter.
6956   void addGenericBinaryArithmeticOverloads(bool isComparison) {
6957     if (!HasArithmeticOrEnumeralCandidateType)
6958       return;
6959 
6960     for (unsigned Left = FirstPromotedArithmeticType;
6961          Left < LastPromotedArithmeticType; ++Left) {
6962       for (unsigned Right = FirstPromotedArithmeticType;
6963            Right < LastPromotedArithmeticType; ++Right) {
6964         QualType LandR[2] = { getArithmeticType(Left),
6965                               getArithmeticType(Right) };
6966         QualType Result =
6967           isComparison ? S.Context.BoolTy
6968                        : getUsualArithmeticConversions(Left, Right);
6969         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6970       }
6971     }
6972 
6973     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
6974     // conditional operator for vector types.
6975     for (BuiltinCandidateTypeSet::iterator
6976               Vec1 = CandidateTypes[0].vector_begin(),
6977            Vec1End = CandidateTypes[0].vector_end();
6978          Vec1 != Vec1End; ++Vec1) {
6979       for (BuiltinCandidateTypeSet::iterator
6980                 Vec2 = CandidateTypes[1].vector_begin(),
6981              Vec2End = CandidateTypes[1].vector_end();
6982            Vec2 != Vec2End; ++Vec2) {
6983         QualType LandR[2] = { *Vec1, *Vec2 };
6984         QualType Result = S.Context.BoolTy;
6985         if (!isComparison) {
6986           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
6987             Result = *Vec1;
6988           else
6989             Result = *Vec2;
6990         }
6991 
6992         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6993       }
6994     }
6995   }
6996 
6997   // C++ [over.built]p17:
6998   //
6999   //   For every pair of promoted integral types L and R, there
7000   //   exist candidate operator functions of the form
7001   //
7002   //      LR         operator%(L, R);
7003   //      LR         operator&(L, R);
7004   //      LR         operator^(L, R);
7005   //      LR         operator|(L, R);
7006   //      L          operator<<(L, R);
7007   //      L          operator>>(L, R);
7008   //
7009   //   where LR is the result of the usual arithmetic conversions
7010   //   between types L and R.
7011   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7012     if (!HasArithmeticOrEnumeralCandidateType)
7013       return;
7014 
7015     for (unsigned Left = FirstPromotedIntegralType;
7016          Left < LastPromotedIntegralType; ++Left) {
7017       for (unsigned Right = FirstPromotedIntegralType;
7018            Right < LastPromotedIntegralType; ++Right) {
7019         QualType LandR[2] = { getArithmeticType(Left),
7020                               getArithmeticType(Right) };
7021         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7022             ? LandR[0]
7023             : getUsualArithmeticConversions(Left, Right);
7024         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7025       }
7026     }
7027   }
7028 
7029   // C++ [over.built]p20:
7030   //
7031   //   For every pair (T, VQ), where T is an enumeration or
7032   //   pointer to member type and VQ is either volatile or
7033   //   empty, there exist candidate operator functions of the form
7034   //
7035   //        VQ T&      operator=(VQ T&, T);
7036   void addAssignmentMemberPointerOrEnumeralOverloads() {
7037     /// Set of (canonical) types that we've already handled.
7038     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7039 
7040     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7041       for (BuiltinCandidateTypeSet::iterator
7042                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7043              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7044            Enum != EnumEnd; ++Enum) {
7045         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7046           continue;
7047 
7048         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2,
7049                                                CandidateSet);
7050       }
7051 
7052       for (BuiltinCandidateTypeSet::iterator
7053                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7054              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7055            MemPtr != MemPtrEnd; ++MemPtr) {
7056         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7057           continue;
7058 
7059         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2,
7060                                                CandidateSet);
7061       }
7062     }
7063   }
7064 
7065   // C++ [over.built]p19:
7066   //
7067   //   For every pair (T, VQ), where T is any type and VQ is either
7068   //   volatile or empty, there exist candidate operator functions
7069   //   of the form
7070   //
7071   //        T*VQ&      operator=(T*VQ&, T*);
7072   //
7073   // C++ [over.built]p21:
7074   //
7075   //   For every pair (T, VQ), where T is a cv-qualified or
7076   //   cv-unqualified object type and VQ is either volatile or
7077   //   empty, there exist candidate operator functions of the form
7078   //
7079   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7080   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7081   void addAssignmentPointerOverloads(bool isEqualOp) {
7082     /// Set of (canonical) types that we've already handled.
7083     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7084 
7085     for (BuiltinCandidateTypeSet::iterator
7086               Ptr = CandidateTypes[0].pointer_begin(),
7087            PtrEnd = CandidateTypes[0].pointer_end();
7088          Ptr != PtrEnd; ++Ptr) {
7089       // If this is operator=, keep track of the builtin candidates we added.
7090       if (isEqualOp)
7091         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7092       else if (!(*Ptr)->getPointeeType()->isObjectType())
7093         continue;
7094 
7095       // non-volatile version
7096       QualType ParamTypes[2] = {
7097         S.Context.getLValueReferenceType(*Ptr),
7098         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7099       };
7100       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7101                             /*IsAssigmentOperator=*/ isEqualOp);
7102 
7103       bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7104                           VisibleTypeConversionsQuals.hasVolatile();
7105       if (NeedVolatile) {
7106         // volatile version
7107         ParamTypes[0] =
7108           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7109         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7110                               /*IsAssigmentOperator=*/isEqualOp);
7111       }
7112 
7113       if (!(*Ptr).isRestrictQualified() &&
7114           VisibleTypeConversionsQuals.hasRestrict()) {
7115         // restrict version
7116         ParamTypes[0]
7117           = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7118         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7119                               /*IsAssigmentOperator=*/isEqualOp);
7120 
7121         if (NeedVolatile) {
7122           // volatile restrict version
7123           ParamTypes[0]
7124             = S.Context.getLValueReferenceType(
7125                 S.Context.getCVRQualifiedType(*Ptr,
7126                                               (Qualifiers::Volatile |
7127                                                Qualifiers::Restrict)));
7128           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7129                                 CandidateSet,
7130                                 /*IsAssigmentOperator=*/isEqualOp);
7131         }
7132       }
7133     }
7134 
7135     if (isEqualOp) {
7136       for (BuiltinCandidateTypeSet::iterator
7137                 Ptr = CandidateTypes[1].pointer_begin(),
7138              PtrEnd = CandidateTypes[1].pointer_end();
7139            Ptr != PtrEnd; ++Ptr) {
7140         // Make sure we don't add the same candidate twice.
7141         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7142           continue;
7143 
7144         QualType ParamTypes[2] = {
7145           S.Context.getLValueReferenceType(*Ptr),
7146           *Ptr,
7147         };
7148 
7149         // non-volatile version
7150         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7151                               /*IsAssigmentOperator=*/true);
7152 
7153         bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7154                            VisibleTypeConversionsQuals.hasVolatile();
7155         if (NeedVolatile) {
7156           // volatile version
7157           ParamTypes[0] =
7158             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7159           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7160                                 CandidateSet, /*IsAssigmentOperator=*/true);
7161         }
7162 
7163         if (!(*Ptr).isRestrictQualified() &&
7164             VisibleTypeConversionsQuals.hasRestrict()) {
7165           // restrict version
7166           ParamTypes[0]
7167             = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7168           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7169                                 CandidateSet, /*IsAssigmentOperator=*/true);
7170 
7171           if (NeedVolatile) {
7172             // volatile restrict version
7173             ParamTypes[0]
7174               = S.Context.getLValueReferenceType(
7175                   S.Context.getCVRQualifiedType(*Ptr,
7176                                                 (Qualifiers::Volatile |
7177                                                  Qualifiers::Restrict)));
7178             S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7179                                   CandidateSet, /*IsAssigmentOperator=*/true);
7180 
7181           }
7182         }
7183       }
7184     }
7185   }
7186 
7187   // C++ [over.built]p18:
7188   //
7189   //   For every triple (L, VQ, R), where L is an arithmetic type,
7190   //   VQ is either volatile or empty, and R is a promoted
7191   //   arithmetic type, there exist candidate operator functions of
7192   //   the form
7193   //
7194   //        VQ L&      operator=(VQ L&, R);
7195   //        VQ L&      operator*=(VQ L&, R);
7196   //        VQ L&      operator/=(VQ L&, R);
7197   //        VQ L&      operator+=(VQ L&, R);
7198   //        VQ L&      operator-=(VQ L&, R);
7199   void addAssignmentArithmeticOverloads(bool isEqualOp) {
7200     if (!HasArithmeticOrEnumeralCandidateType)
7201       return;
7202 
7203     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7204       for (unsigned Right = FirstPromotedArithmeticType;
7205            Right < LastPromotedArithmeticType; ++Right) {
7206         QualType ParamTypes[2];
7207         ParamTypes[1] = getArithmeticType(Right);
7208 
7209         // Add this built-in operator as a candidate (VQ is empty).
7210         ParamTypes[0] =
7211           S.Context.getLValueReferenceType(getArithmeticType(Left));
7212         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7213                               /*IsAssigmentOperator=*/isEqualOp);
7214 
7215         // Add this built-in operator as a candidate (VQ is 'volatile').
7216         if (VisibleTypeConversionsQuals.hasVolatile()) {
7217           ParamTypes[0] =
7218             S.Context.getVolatileType(getArithmeticType(Left));
7219           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7220           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7221                                 CandidateSet,
7222                                 /*IsAssigmentOperator=*/isEqualOp);
7223         }
7224       }
7225     }
7226 
7227     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7228     for (BuiltinCandidateTypeSet::iterator
7229               Vec1 = CandidateTypes[0].vector_begin(),
7230            Vec1End = CandidateTypes[0].vector_end();
7231          Vec1 != Vec1End; ++Vec1) {
7232       for (BuiltinCandidateTypeSet::iterator
7233                 Vec2 = CandidateTypes[1].vector_begin(),
7234              Vec2End = CandidateTypes[1].vector_end();
7235            Vec2 != Vec2End; ++Vec2) {
7236         QualType ParamTypes[2];
7237         ParamTypes[1] = *Vec2;
7238         // Add this built-in operator as a candidate (VQ is empty).
7239         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7240         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7241                               /*IsAssigmentOperator=*/isEqualOp);
7242 
7243         // Add this built-in operator as a candidate (VQ is 'volatile').
7244         if (VisibleTypeConversionsQuals.hasVolatile()) {
7245           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7246           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7247           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7248                                 CandidateSet,
7249                                 /*IsAssigmentOperator=*/isEqualOp);
7250         }
7251       }
7252     }
7253   }
7254 
7255   // C++ [over.built]p22:
7256   //
7257   //   For every triple (L, VQ, R), where L is an integral type, VQ
7258   //   is either volatile or empty, and R is a promoted integral
7259   //   type, there exist candidate operator functions of the form
7260   //
7261   //        VQ L&       operator%=(VQ L&, R);
7262   //        VQ L&       operator<<=(VQ L&, R);
7263   //        VQ L&       operator>>=(VQ L&, R);
7264   //        VQ L&       operator&=(VQ L&, R);
7265   //        VQ L&       operator^=(VQ L&, R);
7266   //        VQ L&       operator|=(VQ L&, R);
7267   void addAssignmentIntegralOverloads() {
7268     if (!HasArithmeticOrEnumeralCandidateType)
7269       return;
7270 
7271     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7272       for (unsigned Right = FirstPromotedIntegralType;
7273            Right < LastPromotedIntegralType; ++Right) {
7274         QualType ParamTypes[2];
7275         ParamTypes[1] = getArithmeticType(Right);
7276 
7277         // Add this built-in operator as a candidate (VQ is empty).
7278         ParamTypes[0] =
7279           S.Context.getLValueReferenceType(getArithmeticType(Left));
7280         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
7281         if (VisibleTypeConversionsQuals.hasVolatile()) {
7282           // Add this built-in operator as a candidate (VQ is 'volatile').
7283           ParamTypes[0] = getArithmeticType(Left);
7284           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7285           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7286           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7287                                 CandidateSet);
7288         }
7289       }
7290     }
7291   }
7292 
7293   // C++ [over.operator]p23:
7294   //
7295   //   There also exist candidate operator functions of the form
7296   //
7297   //        bool        operator!(bool);
7298   //        bool        operator&&(bool, bool);
7299   //        bool        operator||(bool, bool);
7300   void addExclaimOverload() {
7301     QualType ParamTy = S.Context.BoolTy;
7302     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
7303                           /*IsAssignmentOperator=*/false,
7304                           /*NumContextualBoolArguments=*/1);
7305   }
7306   void addAmpAmpOrPipePipeOverload() {
7307     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7308     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
7309                           /*IsAssignmentOperator=*/false,
7310                           /*NumContextualBoolArguments=*/2);
7311   }
7312 
7313   // C++ [over.built]p13:
7314   //
7315   //   For every cv-qualified or cv-unqualified object type T there
7316   //   exist candidate operator functions of the form
7317   //
7318   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7319   //        T&         operator[](T*, ptrdiff_t);
7320   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7321   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7322   //        T&         operator[](ptrdiff_t, T*);
7323   void addSubscriptOverloads() {
7324     for (BuiltinCandidateTypeSet::iterator
7325               Ptr = CandidateTypes[0].pointer_begin(),
7326            PtrEnd = CandidateTypes[0].pointer_end();
7327          Ptr != PtrEnd; ++Ptr) {
7328       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7329       QualType PointeeType = (*Ptr)->getPointeeType();
7330       if (!PointeeType->isObjectType())
7331         continue;
7332 
7333       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7334 
7335       // T& operator[](T*, ptrdiff_t)
7336       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7337     }
7338 
7339     for (BuiltinCandidateTypeSet::iterator
7340               Ptr = CandidateTypes[1].pointer_begin(),
7341            PtrEnd = CandidateTypes[1].pointer_end();
7342          Ptr != PtrEnd; ++Ptr) {
7343       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7344       QualType PointeeType = (*Ptr)->getPointeeType();
7345       if (!PointeeType->isObjectType())
7346         continue;
7347 
7348       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7349 
7350       // T& operator[](ptrdiff_t, T*)
7351       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7352     }
7353   }
7354 
7355   // C++ [over.built]p11:
7356   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7357   //    C1 is the same type as C2 or is a derived class of C2, T is an object
7358   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7359   //    there exist candidate operator functions of the form
7360   //
7361   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7362   //
7363   //    where CV12 is the union of CV1 and CV2.
7364   void addArrowStarOverloads() {
7365     for (BuiltinCandidateTypeSet::iterator
7366              Ptr = CandidateTypes[0].pointer_begin(),
7367            PtrEnd = CandidateTypes[0].pointer_end();
7368          Ptr != PtrEnd; ++Ptr) {
7369       QualType C1Ty = (*Ptr);
7370       QualType C1;
7371       QualifierCollector Q1;
7372       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7373       if (!isa<RecordType>(C1))
7374         continue;
7375       // heuristic to reduce number of builtin candidates in the set.
7376       // Add volatile/restrict version only if there are conversions to a
7377       // volatile/restrict type.
7378       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7379         continue;
7380       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7381         continue;
7382       for (BuiltinCandidateTypeSet::iterator
7383                 MemPtr = CandidateTypes[1].member_pointer_begin(),
7384              MemPtrEnd = CandidateTypes[1].member_pointer_end();
7385            MemPtr != MemPtrEnd; ++MemPtr) {
7386         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7387         QualType C2 = QualType(mptr->getClass(), 0);
7388         C2 = C2.getUnqualifiedType();
7389         if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7390           break;
7391         QualType ParamTypes[2] = { *Ptr, *MemPtr };
7392         // build CV12 T&
7393         QualType T = mptr->getPointeeType();
7394         if (!VisibleTypeConversionsQuals.hasVolatile() &&
7395             T.isVolatileQualified())
7396           continue;
7397         if (!VisibleTypeConversionsQuals.hasRestrict() &&
7398             T.isRestrictQualified())
7399           continue;
7400         T = Q1.apply(S.Context, T);
7401         QualType ResultTy = S.Context.getLValueReferenceType(T);
7402         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7403       }
7404     }
7405   }
7406 
7407   // Note that we don't consider the first argument, since it has been
7408   // contextually converted to bool long ago. The candidates below are
7409   // therefore added as binary.
7410   //
7411   // C++ [over.built]p25:
7412   //   For every type T, where T is a pointer, pointer-to-member, or scoped
7413   //   enumeration type, there exist candidate operator functions of the form
7414   //
7415   //        T        operator?(bool, T, T);
7416   //
7417   void addConditionalOperatorOverloads() {
7418     /// Set of (canonical) types that we've already handled.
7419     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7420 
7421     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7422       for (BuiltinCandidateTypeSet::iterator
7423                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7424              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7425            Ptr != PtrEnd; ++Ptr) {
7426         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7427           continue;
7428 
7429         QualType ParamTypes[2] = { *Ptr, *Ptr };
7430         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
7431       }
7432 
7433       for (BuiltinCandidateTypeSet::iterator
7434                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7435              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7436            MemPtr != MemPtrEnd; ++MemPtr) {
7437         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7438           continue;
7439 
7440         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7441         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet);
7442       }
7443 
7444       if (S.getLangOpts().CPlusPlus0x) {
7445         for (BuiltinCandidateTypeSet::iterator
7446                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7447                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7448              Enum != EnumEnd; ++Enum) {
7449           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7450             continue;
7451 
7452           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7453             continue;
7454 
7455           QualType ParamTypes[2] = { *Enum, *Enum };
7456           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet);
7457         }
7458       }
7459     }
7460   }
7461 };
7462 
7463 } // end anonymous namespace
7464 
7465 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
7466 /// operator overloads to the candidate set (C++ [over.built]), based
7467 /// on the operator @p Op and the arguments given. For example, if the
7468 /// operator is a binary '+', this routine might add "int
7469 /// operator+(int, int)" to cover integer addition.
7470 void
7471 Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7472                                    SourceLocation OpLoc,
7473                                    Expr **Args, unsigned NumArgs,
7474                                    OverloadCandidateSet& CandidateSet) {
7475   // Find all of the types that the arguments can convert to, but only
7476   // if the operator we're looking at has built-in operator candidates
7477   // that make use of these types. Also record whether we encounter non-record
7478   // candidate types or either arithmetic or enumeral candidate types.
7479   Qualifiers VisibleTypeConversionsQuals;
7480   VisibleTypeConversionsQuals.addConst();
7481   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7482     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7483 
7484   bool HasNonRecordCandidateType = false;
7485   bool HasArithmeticOrEnumeralCandidateType = false;
7486   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7487   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
7488     CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7489     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7490                                                  OpLoc,
7491                                                  true,
7492                                                  (Op == OO_Exclaim ||
7493                                                   Op == OO_AmpAmp ||
7494                                                   Op == OO_PipePipe),
7495                                                  VisibleTypeConversionsQuals);
7496     HasNonRecordCandidateType = HasNonRecordCandidateType ||
7497         CandidateTypes[ArgIdx].hasNonRecordTypes();
7498     HasArithmeticOrEnumeralCandidateType =
7499         HasArithmeticOrEnumeralCandidateType ||
7500         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7501   }
7502 
7503   // Exit early when no non-record types have been added to the candidate set
7504   // for any of the arguments to the operator.
7505   //
7506   // We can't exit early for !, ||, or &&, since there we have always have
7507   // 'bool' overloads.
7508   if (!HasNonRecordCandidateType &&
7509       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7510     return;
7511 
7512   // Setup an object to manage the common state for building overloads.
7513   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs,
7514                                            VisibleTypeConversionsQuals,
7515                                            HasArithmeticOrEnumeralCandidateType,
7516                                            CandidateTypes, CandidateSet);
7517 
7518   // Dispatch over the operation to add in only those overloads which apply.
7519   switch (Op) {
7520   case OO_None:
7521   case NUM_OVERLOADED_OPERATORS:
7522     llvm_unreachable("Expected an overloaded operator");
7523 
7524   case OO_New:
7525   case OO_Delete:
7526   case OO_Array_New:
7527   case OO_Array_Delete:
7528   case OO_Call:
7529     llvm_unreachable(
7530                     "Special operators don't use AddBuiltinOperatorCandidates");
7531 
7532   case OO_Comma:
7533   case OO_Arrow:
7534     // C++ [over.match.oper]p3:
7535     //   -- For the operator ',', the unary operator '&', or the
7536     //      operator '->', the built-in candidates set is empty.
7537     break;
7538 
7539   case OO_Plus: // '+' is either unary or binary
7540     if (NumArgs == 1)
7541       OpBuilder.addUnaryPlusPointerOverloads();
7542     // Fall through.
7543 
7544   case OO_Minus: // '-' is either unary or binary
7545     if (NumArgs == 1) {
7546       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7547     } else {
7548       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7549       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7550     }
7551     break;
7552 
7553   case OO_Star: // '*' is either unary or binary
7554     if (NumArgs == 1)
7555       OpBuilder.addUnaryStarPointerOverloads();
7556     else
7557       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7558     break;
7559 
7560   case OO_Slash:
7561     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7562     break;
7563 
7564   case OO_PlusPlus:
7565   case OO_MinusMinus:
7566     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7567     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7568     break;
7569 
7570   case OO_EqualEqual:
7571   case OO_ExclaimEqual:
7572     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7573     // Fall through.
7574 
7575   case OO_Less:
7576   case OO_Greater:
7577   case OO_LessEqual:
7578   case OO_GreaterEqual:
7579     OpBuilder.addRelationalPointerOrEnumeralOverloads();
7580     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7581     break;
7582 
7583   case OO_Percent:
7584   case OO_Caret:
7585   case OO_Pipe:
7586   case OO_LessLess:
7587   case OO_GreaterGreater:
7588     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7589     break;
7590 
7591   case OO_Amp: // '&' is either unary or binary
7592     if (NumArgs == 1)
7593       // C++ [over.match.oper]p3:
7594       //   -- For the operator ',', the unary operator '&', or the
7595       //      operator '->', the built-in candidates set is empty.
7596       break;
7597 
7598     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7599     break;
7600 
7601   case OO_Tilde:
7602     OpBuilder.addUnaryTildePromotedIntegralOverloads();
7603     break;
7604 
7605   case OO_Equal:
7606     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7607     // Fall through.
7608 
7609   case OO_PlusEqual:
7610   case OO_MinusEqual:
7611     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7612     // Fall through.
7613 
7614   case OO_StarEqual:
7615   case OO_SlashEqual:
7616     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7617     break;
7618 
7619   case OO_PercentEqual:
7620   case OO_LessLessEqual:
7621   case OO_GreaterGreaterEqual:
7622   case OO_AmpEqual:
7623   case OO_CaretEqual:
7624   case OO_PipeEqual:
7625     OpBuilder.addAssignmentIntegralOverloads();
7626     break;
7627 
7628   case OO_Exclaim:
7629     OpBuilder.addExclaimOverload();
7630     break;
7631 
7632   case OO_AmpAmp:
7633   case OO_PipePipe:
7634     OpBuilder.addAmpAmpOrPipePipeOverload();
7635     break;
7636 
7637   case OO_Subscript:
7638     OpBuilder.addSubscriptOverloads();
7639     break;
7640 
7641   case OO_ArrowStar:
7642     OpBuilder.addArrowStarOverloads();
7643     break;
7644 
7645   case OO_Conditional:
7646     OpBuilder.addConditionalOperatorOverloads();
7647     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7648     break;
7649   }
7650 }
7651 
7652 /// \brief Add function candidates found via argument-dependent lookup
7653 /// to the set of overloading candidates.
7654 ///
7655 /// This routine performs argument-dependent name lookup based on the
7656 /// given function name (which may also be an operator name) and adds
7657 /// all of the overload candidates found by ADL to the overload
7658 /// candidate set (C++ [basic.lookup.argdep]).
7659 void
7660 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7661                                            bool Operator, SourceLocation Loc,
7662                                            llvm::ArrayRef<Expr *> Args,
7663                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
7664                                            OverloadCandidateSet& CandidateSet,
7665                                            bool PartialOverloading,
7666                                            bool StdNamespaceIsAssociated) {
7667   ADLResult Fns;
7668 
7669   // FIXME: This approach for uniquing ADL results (and removing
7670   // redundant candidates from the set) relies on pointer-equality,
7671   // which means we need to key off the canonical decl.  However,
7672   // always going back to the canonical decl might not get us the
7673   // right set of default arguments.  What default arguments are
7674   // we supposed to consider on ADL candidates, anyway?
7675 
7676   // FIXME: Pass in the explicit template arguments?
7677   ArgumentDependentLookup(Name, Operator, Loc, Args, Fns,
7678                           StdNamespaceIsAssociated);
7679 
7680   // Erase all of the candidates we already knew about.
7681   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7682                                    CandEnd = CandidateSet.end();
7683        Cand != CandEnd; ++Cand)
7684     if (Cand->Function) {
7685       Fns.erase(Cand->Function);
7686       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7687         Fns.erase(FunTmpl);
7688     }
7689 
7690   // For each of the ADL candidates we found, add it to the overload
7691   // set.
7692   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7693     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7694     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7695       if (ExplicitTemplateArgs)
7696         continue;
7697 
7698       AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7699                            PartialOverloading);
7700     } else
7701       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7702                                    FoundDecl, ExplicitTemplateArgs,
7703                                    Args, CandidateSet);
7704   }
7705 }
7706 
7707 /// isBetterOverloadCandidate - Determines whether the first overload
7708 /// candidate is a better candidate than the second (C++ 13.3.3p1).
7709 bool
7710 isBetterOverloadCandidate(Sema &S,
7711                           const OverloadCandidate &Cand1,
7712                           const OverloadCandidate &Cand2,
7713                           SourceLocation Loc,
7714                           bool UserDefinedConversion) {
7715   // Define viable functions to be better candidates than non-viable
7716   // functions.
7717   if (!Cand2.Viable)
7718     return Cand1.Viable;
7719   else if (!Cand1.Viable)
7720     return false;
7721 
7722   // C++ [over.match.best]p1:
7723   //
7724   //   -- if F is a static member function, ICS1(F) is defined such
7725   //      that ICS1(F) is neither better nor worse than ICS1(G) for
7726   //      any function G, and, symmetrically, ICS1(G) is neither
7727   //      better nor worse than ICS1(F).
7728   unsigned StartArg = 0;
7729   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7730     StartArg = 1;
7731 
7732   // C++ [over.match.best]p1:
7733   //   A viable function F1 is defined to be a better function than another
7734   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7735   //   conversion sequence than ICSi(F2), and then...
7736   unsigned NumArgs = Cand1.NumConversions;
7737   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7738   bool HasBetterConversion = false;
7739   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7740     switch (CompareImplicitConversionSequences(S,
7741                                                Cand1.Conversions[ArgIdx],
7742                                                Cand2.Conversions[ArgIdx])) {
7743     case ImplicitConversionSequence::Better:
7744       // Cand1 has a better conversion sequence.
7745       HasBetterConversion = true;
7746       break;
7747 
7748     case ImplicitConversionSequence::Worse:
7749       // Cand1 can't be better than Cand2.
7750       return false;
7751 
7752     case ImplicitConversionSequence::Indistinguishable:
7753       // Do nothing.
7754       break;
7755     }
7756   }
7757 
7758   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7759   //       ICSj(F2), or, if not that,
7760   if (HasBetterConversion)
7761     return true;
7762 
7763   //     - F1 is a non-template function and F2 is a function template
7764   //       specialization, or, if not that,
7765   if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7766       Cand2.Function && Cand2.Function->getPrimaryTemplate())
7767     return true;
7768 
7769   //   -- F1 and F2 are function template specializations, and the function
7770   //      template for F1 is more specialized than the template for F2
7771   //      according to the partial ordering rules described in 14.5.5.2, or,
7772   //      if not that,
7773   if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7774       Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7775     if (FunctionTemplateDecl *BetterTemplate
7776           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7777                                          Cand2.Function->getPrimaryTemplate(),
7778                                          Loc,
7779                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7780                                                              : TPOC_Call,
7781                                          Cand1.ExplicitCallArguments))
7782       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7783   }
7784 
7785   //   -- the context is an initialization by user-defined conversion
7786   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7787   //      from the return type of F1 to the destination type (i.e.,
7788   //      the type of the entity being initialized) is a better
7789   //      conversion sequence than the standard conversion sequence
7790   //      from the return type of F2 to the destination type.
7791   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7792       isa<CXXConversionDecl>(Cand1.Function) &&
7793       isa<CXXConversionDecl>(Cand2.Function)) {
7794     // First check whether we prefer one of the conversion functions over the
7795     // other. This only distinguishes the results in non-standard, extension
7796     // cases such as the conversion from a lambda closure type to a function
7797     // pointer or block.
7798     ImplicitConversionSequence::CompareKind FuncResult
7799       = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7800     if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7801       return FuncResult;
7802 
7803     switch (CompareStandardConversionSequences(S,
7804                                                Cand1.FinalConversion,
7805                                                Cand2.FinalConversion)) {
7806     case ImplicitConversionSequence::Better:
7807       // Cand1 has a better conversion sequence.
7808       return true;
7809 
7810     case ImplicitConversionSequence::Worse:
7811       // Cand1 can't be better than Cand2.
7812       return false;
7813 
7814     case ImplicitConversionSequence::Indistinguishable:
7815       // Do nothing
7816       break;
7817     }
7818   }
7819 
7820   return false;
7821 }
7822 
7823 /// \brief Computes the best viable function (C++ 13.3.3)
7824 /// within an overload candidate set.
7825 ///
7826 /// \param CandidateSet the set of candidate functions.
7827 ///
7828 /// \param Loc the location of the function name (or operator symbol) for
7829 /// which overload resolution occurs.
7830 ///
7831 /// \param Best f overload resolution was successful or found a deleted
7832 /// function, Best points to the candidate function found.
7833 ///
7834 /// \returns The result of overload resolution.
7835 OverloadingResult
7836 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
7837                                          iterator &Best,
7838                                          bool UserDefinedConversion) {
7839   // Find the best viable function.
7840   Best = end();
7841   for (iterator Cand = begin(); Cand != end(); ++Cand) {
7842     if (Cand->Viable)
7843       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
7844                                                      UserDefinedConversion))
7845         Best = Cand;
7846   }
7847 
7848   // If we didn't find any viable functions, abort.
7849   if (Best == end())
7850     return OR_No_Viable_Function;
7851 
7852   // Make sure that this function is better than every other viable
7853   // function. If not, we have an ambiguity.
7854   for (iterator Cand = begin(); Cand != end(); ++Cand) {
7855     if (Cand->Viable &&
7856         Cand != Best &&
7857         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
7858                                    UserDefinedConversion)) {
7859       Best = end();
7860       return OR_Ambiguous;
7861     }
7862   }
7863 
7864   // Best is the best viable function.
7865   if (Best->Function &&
7866       (Best->Function->isDeleted() ||
7867        S.isFunctionConsideredUnavailable(Best->Function)))
7868     return OR_Deleted;
7869 
7870   return OR_Success;
7871 }
7872 
7873 namespace {
7874 
7875 enum OverloadCandidateKind {
7876   oc_function,
7877   oc_method,
7878   oc_constructor,
7879   oc_function_template,
7880   oc_method_template,
7881   oc_constructor_template,
7882   oc_implicit_default_constructor,
7883   oc_implicit_copy_constructor,
7884   oc_implicit_move_constructor,
7885   oc_implicit_copy_assignment,
7886   oc_implicit_move_assignment,
7887   oc_implicit_inherited_constructor
7888 };
7889 
7890 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
7891                                                 FunctionDecl *Fn,
7892                                                 std::string &Description) {
7893   bool isTemplate = false;
7894 
7895   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
7896     isTemplate = true;
7897     Description = S.getTemplateArgumentBindingsText(
7898       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
7899   }
7900 
7901   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
7902     if (!Ctor->isImplicit())
7903       return isTemplate ? oc_constructor_template : oc_constructor;
7904 
7905     if (Ctor->getInheritedConstructor())
7906       return oc_implicit_inherited_constructor;
7907 
7908     if (Ctor->isDefaultConstructor())
7909       return oc_implicit_default_constructor;
7910 
7911     if (Ctor->isMoveConstructor())
7912       return oc_implicit_move_constructor;
7913 
7914     assert(Ctor->isCopyConstructor() &&
7915            "unexpected sort of implicit constructor");
7916     return oc_implicit_copy_constructor;
7917   }
7918 
7919   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
7920     // This actually gets spelled 'candidate function' for now, but
7921     // it doesn't hurt to split it out.
7922     if (!Meth->isImplicit())
7923       return isTemplate ? oc_method_template : oc_method;
7924 
7925     if (Meth->isMoveAssignmentOperator())
7926       return oc_implicit_move_assignment;
7927 
7928     if (Meth->isCopyAssignmentOperator())
7929       return oc_implicit_copy_assignment;
7930 
7931     assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
7932     return oc_method;
7933   }
7934 
7935   return isTemplate ? oc_function_template : oc_function;
7936 }
7937 
7938 void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) {
7939   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
7940   if (!Ctor) return;
7941 
7942   Ctor = Ctor->getInheritedConstructor();
7943   if (!Ctor) return;
7944 
7945   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
7946 }
7947 
7948 } // end anonymous namespace
7949 
7950 // Notes the location of an overload candidate.
7951 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
7952   std::string FnDesc;
7953   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
7954   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
7955                              << (unsigned) K << FnDesc;
7956   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
7957   Diag(Fn->getLocation(), PD);
7958   MaybeEmitInheritedConstructorNote(*this, Fn);
7959 }
7960 
7961 //Notes the location of all overload candidates designated through
7962 // OverloadedExpr
7963 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
7964   assert(OverloadedExpr->getType() == Context.OverloadTy);
7965 
7966   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
7967   OverloadExpr *OvlExpr = Ovl.Expression;
7968 
7969   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
7970                             IEnd = OvlExpr->decls_end();
7971        I != IEnd; ++I) {
7972     if (FunctionTemplateDecl *FunTmpl =
7973                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
7974       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
7975     } else if (FunctionDecl *Fun
7976                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
7977       NoteOverloadCandidate(Fun, DestType);
7978     }
7979   }
7980 }
7981 
7982 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
7983 /// "lead" diagnostic; it will be given two arguments, the source and
7984 /// target types of the conversion.
7985 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
7986                                  Sema &S,
7987                                  SourceLocation CaretLoc,
7988                                  const PartialDiagnostic &PDiag) const {
7989   S.Diag(CaretLoc, PDiag)
7990     << Ambiguous.getFromType() << Ambiguous.getToType();
7991   for (AmbiguousConversionSequence::const_iterator
7992          I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
7993     S.NoteOverloadCandidate(*I);
7994   }
7995 }
7996 
7997 namespace {
7998 
7999 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8000   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8001   assert(Conv.isBad());
8002   assert(Cand->Function && "for now, candidate must be a function");
8003   FunctionDecl *Fn = Cand->Function;
8004 
8005   // There's a conversion slot for the object argument if this is a
8006   // non-constructor method.  Note that 'I' corresponds the
8007   // conversion-slot index.
8008   bool isObjectArgument = false;
8009   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8010     if (I == 0)
8011       isObjectArgument = true;
8012     else
8013       I--;
8014   }
8015 
8016   std::string FnDesc;
8017   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8018 
8019   Expr *FromExpr = Conv.Bad.FromExpr;
8020   QualType FromTy = Conv.Bad.getFromType();
8021   QualType ToTy = Conv.Bad.getToType();
8022 
8023   if (FromTy == S.Context.OverloadTy) {
8024     assert(FromExpr && "overload set argument came from implicit argument?");
8025     Expr *E = FromExpr->IgnoreParens();
8026     if (isa<UnaryOperator>(E))
8027       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8028     DeclarationName Name = cast<OverloadExpr>(E)->getName();
8029 
8030     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8031       << (unsigned) FnKind << FnDesc
8032       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8033       << ToTy << Name << I+1;
8034     MaybeEmitInheritedConstructorNote(S, Fn);
8035     return;
8036   }
8037 
8038   // Do some hand-waving analysis to see if the non-viability is due
8039   // to a qualifier mismatch.
8040   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8041   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8042   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8043     CToTy = RT->getPointeeType();
8044   else {
8045     // TODO: detect and diagnose the full richness of const mismatches.
8046     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8047       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8048         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8049   }
8050 
8051   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8052       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8053     Qualifiers FromQs = CFromTy.getQualifiers();
8054     Qualifiers ToQs = CToTy.getQualifiers();
8055 
8056     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8057       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8058         << (unsigned) FnKind << FnDesc
8059         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8060         << FromTy
8061         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8062         << (unsigned) isObjectArgument << I+1;
8063       MaybeEmitInheritedConstructorNote(S, Fn);
8064       return;
8065     }
8066 
8067     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8068       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8069         << (unsigned) FnKind << FnDesc
8070         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8071         << FromTy
8072         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8073         << (unsigned) isObjectArgument << I+1;
8074       MaybeEmitInheritedConstructorNote(S, Fn);
8075       return;
8076     }
8077 
8078     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8079       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8080       << (unsigned) FnKind << FnDesc
8081       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8082       << FromTy
8083       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8084       << (unsigned) isObjectArgument << I+1;
8085       MaybeEmitInheritedConstructorNote(S, Fn);
8086       return;
8087     }
8088 
8089     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8090     assert(CVR && "unexpected qualifiers mismatch");
8091 
8092     if (isObjectArgument) {
8093       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8094         << (unsigned) FnKind << FnDesc
8095         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8096         << FromTy << (CVR - 1);
8097     } else {
8098       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8099         << (unsigned) FnKind << FnDesc
8100         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8101         << FromTy << (CVR - 1) << I+1;
8102     }
8103     MaybeEmitInheritedConstructorNote(S, Fn);
8104     return;
8105   }
8106 
8107   // Special diagnostic for failure to convert an initializer list, since
8108   // telling the user that it has type void is not useful.
8109   if (FromExpr && isa<InitListExpr>(FromExpr)) {
8110     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8111       << (unsigned) FnKind << FnDesc
8112       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8113       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8114     MaybeEmitInheritedConstructorNote(S, Fn);
8115     return;
8116   }
8117 
8118   // Diagnose references or pointers to incomplete types differently,
8119   // since it's far from impossible that the incompleteness triggered
8120   // the failure.
8121   QualType TempFromTy = FromTy.getNonReferenceType();
8122   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8123     TempFromTy = PTy->getPointeeType();
8124   if (TempFromTy->isIncompleteType()) {
8125     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8126       << (unsigned) FnKind << FnDesc
8127       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8128       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8129     MaybeEmitInheritedConstructorNote(S, Fn);
8130     return;
8131   }
8132 
8133   // Diagnose base -> derived pointer conversions.
8134   unsigned BaseToDerivedConversion = 0;
8135   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8136     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8137       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8138                                                FromPtrTy->getPointeeType()) &&
8139           !FromPtrTy->getPointeeType()->isIncompleteType() &&
8140           !ToPtrTy->getPointeeType()->isIncompleteType() &&
8141           S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8142                           FromPtrTy->getPointeeType()))
8143         BaseToDerivedConversion = 1;
8144     }
8145   } else if (const ObjCObjectPointerType *FromPtrTy
8146                                     = FromTy->getAs<ObjCObjectPointerType>()) {
8147     if (const ObjCObjectPointerType *ToPtrTy
8148                                         = ToTy->getAs<ObjCObjectPointerType>())
8149       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8150         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8151           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8152                                                 FromPtrTy->getPointeeType()) &&
8153               FromIface->isSuperClassOf(ToIface))
8154             BaseToDerivedConversion = 2;
8155   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8156       if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8157           !FromTy->isIncompleteType() &&
8158           !ToRefTy->getPointeeType()->isIncompleteType() &&
8159           S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy))
8160         BaseToDerivedConversion = 3;
8161     }
8162 
8163   if (BaseToDerivedConversion) {
8164     S.Diag(Fn->getLocation(),
8165            diag::note_ovl_candidate_bad_base_to_derived_conv)
8166       << (unsigned) FnKind << FnDesc
8167       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8168       << (BaseToDerivedConversion - 1)
8169       << FromTy << ToTy << I+1;
8170     MaybeEmitInheritedConstructorNote(S, Fn);
8171     return;
8172   }
8173 
8174   if (isa<ObjCObjectPointerType>(CFromTy) &&
8175       isa<PointerType>(CToTy)) {
8176       Qualifiers FromQs = CFromTy.getQualifiers();
8177       Qualifiers ToQs = CToTy.getQualifiers();
8178       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8179         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8180         << (unsigned) FnKind << FnDesc
8181         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8182         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8183         MaybeEmitInheritedConstructorNote(S, Fn);
8184         return;
8185       }
8186   }
8187 
8188   // Emit the generic diagnostic and, optionally, add the hints to it.
8189   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8190   FDiag << (unsigned) FnKind << FnDesc
8191     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8192     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8193     << (unsigned) (Cand->Fix.Kind);
8194 
8195   // If we can fix the conversion, suggest the FixIts.
8196   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8197        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8198     FDiag << *HI;
8199   S.Diag(Fn->getLocation(), FDiag);
8200 
8201   MaybeEmitInheritedConstructorNote(S, Fn);
8202 }
8203 
8204 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8205                            unsigned NumFormalArgs) {
8206   // TODO: treat calls to a missing default constructor as a special case
8207 
8208   FunctionDecl *Fn = Cand->Function;
8209   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8210 
8211   unsigned MinParams = Fn->getMinRequiredArguments();
8212 
8213   // With invalid overloaded operators, it's possible that we think we
8214   // have an arity mismatch when it fact it looks like we have the
8215   // right number of arguments, because only overloaded operators have
8216   // the weird behavior of overloading member and non-member functions.
8217   // Just don't report anything.
8218   if (Fn->isInvalidDecl() &&
8219       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8220     return;
8221 
8222   // at least / at most / exactly
8223   unsigned mode, modeCount;
8224   if (NumFormalArgs < MinParams) {
8225     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8226            (Cand->FailureKind == ovl_fail_bad_deduction &&
8227             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8228     if (MinParams != FnTy->getNumArgs() ||
8229         FnTy->isVariadic() || FnTy->isTemplateVariadic())
8230       mode = 0; // "at least"
8231     else
8232       mode = 2; // "exactly"
8233     modeCount = MinParams;
8234   } else {
8235     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8236            (Cand->FailureKind == ovl_fail_bad_deduction &&
8237             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8238     if (MinParams != FnTy->getNumArgs())
8239       mode = 1; // "at most"
8240     else
8241       mode = 2; // "exactly"
8242     modeCount = FnTy->getNumArgs();
8243   }
8244 
8245   std::string Description;
8246   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8247 
8248   if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8249     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8250       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8251       << Fn->getParamDecl(0) << NumFormalArgs;
8252   else
8253     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8254       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8255       << modeCount << NumFormalArgs;
8256   MaybeEmitInheritedConstructorNote(S, Fn);
8257 }
8258 
8259 /// Diagnose a failed template-argument deduction.
8260 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
8261                           unsigned NumArgs) {
8262   FunctionDecl *Fn = Cand->Function; // pattern
8263 
8264   TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
8265   NamedDecl *ParamD;
8266   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8267   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8268   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8269   switch (Cand->DeductionFailure.Result) {
8270   case Sema::TDK_Success:
8271     llvm_unreachable("TDK_success while diagnosing bad deduction");
8272 
8273   case Sema::TDK_Incomplete: {
8274     assert(ParamD && "no parameter found for incomplete deduction result");
8275     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
8276       << ParamD->getDeclName();
8277     MaybeEmitInheritedConstructorNote(S, Fn);
8278     return;
8279   }
8280 
8281   case Sema::TDK_Underqualified: {
8282     assert(ParamD && "no parameter found for bad qualifiers deduction result");
8283     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8284 
8285     QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType();
8286 
8287     // Param will have been canonicalized, but it should just be a
8288     // qualified version of ParamD, so move the qualifiers to that.
8289     QualifierCollector Qs;
8290     Qs.strip(Param);
8291     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8292     assert(S.Context.hasSameType(Param, NonCanonParam));
8293 
8294     // Arg has also been canonicalized, but there's nothing we can do
8295     // about that.  It also doesn't matter as much, because it won't
8296     // have any template parameters in it (because deduction isn't
8297     // done on dependent types).
8298     QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType();
8299 
8300     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified)
8301       << ParamD->getDeclName() << Arg << NonCanonParam;
8302     MaybeEmitInheritedConstructorNote(S, Fn);
8303     return;
8304   }
8305 
8306   case Sema::TDK_Inconsistent: {
8307     assert(ParamD && "no parameter found for inconsistent deduction result");
8308     int which = 0;
8309     if (isa<TemplateTypeParmDecl>(ParamD))
8310       which = 0;
8311     else if (isa<NonTypeTemplateParmDecl>(ParamD))
8312       which = 1;
8313     else {
8314       which = 2;
8315     }
8316 
8317     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
8318       << which << ParamD->getDeclName()
8319       << *Cand->DeductionFailure.getFirstArg()
8320       << *Cand->DeductionFailure.getSecondArg();
8321     MaybeEmitInheritedConstructorNote(S, Fn);
8322     return;
8323   }
8324 
8325   case Sema::TDK_InvalidExplicitArguments:
8326     assert(ParamD && "no parameter found for invalid explicit arguments");
8327     if (ParamD->getDeclName())
8328       S.Diag(Fn->getLocation(),
8329              diag::note_ovl_candidate_explicit_arg_mismatch_named)
8330         << ParamD->getDeclName();
8331     else {
8332       int index = 0;
8333       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8334         index = TTP->getIndex();
8335       else if (NonTypeTemplateParmDecl *NTTP
8336                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8337         index = NTTP->getIndex();
8338       else
8339         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8340       S.Diag(Fn->getLocation(),
8341              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8342         << (index + 1);
8343     }
8344     MaybeEmitInheritedConstructorNote(S, Fn);
8345     return;
8346 
8347   case Sema::TDK_TooManyArguments:
8348   case Sema::TDK_TooFewArguments:
8349     DiagnoseArityMismatch(S, Cand, NumArgs);
8350     return;
8351 
8352   case Sema::TDK_InstantiationDepth:
8353     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
8354     MaybeEmitInheritedConstructorNote(S, Fn);
8355     return;
8356 
8357   case Sema::TDK_SubstitutionFailure: {
8358     // Format the template argument list into the argument string.
8359     llvm::SmallString<128> TemplateArgString;
8360     if (TemplateArgumentList *Args =
8361           Cand->DeductionFailure.getTemplateArgumentList()) {
8362       TemplateArgString = " ";
8363       TemplateArgString += S.getTemplateArgumentBindingsText(
8364           Fn->getDescribedFunctionTemplate()->getTemplateParameters(), *Args);
8365     }
8366 
8367     // If this candidate was disabled by enable_if, say so.
8368     PartialDiagnosticAt *PDiag = Cand->DeductionFailure.getSFINAEDiagnostic();
8369     if (PDiag && PDiag->second.getDiagID() ==
8370           diag::err_typename_nested_not_found_enable_if) {
8371       // FIXME: Use the source range of the condition, and the fully-qualified
8372       //        name of the enable_if template. These are both present in PDiag.
8373       S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8374         << "'enable_if'" << TemplateArgString;
8375       return;
8376     }
8377 
8378     // Format the SFINAE diagnostic into the argument string.
8379     // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8380     //        formatted message in another diagnostic.
8381     llvm::SmallString<128> SFINAEArgString;
8382     SourceRange R;
8383     if (PDiag) {
8384       SFINAEArgString = ": ";
8385       R = SourceRange(PDiag->first, PDiag->first);
8386       PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8387     }
8388 
8389     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
8390       << TemplateArgString << SFINAEArgString << R;
8391     MaybeEmitInheritedConstructorNote(S, Fn);
8392     return;
8393   }
8394 
8395   // TODO: diagnose these individually, then kill off
8396   // note_ovl_candidate_bad_deduction, which is uselessly vague.
8397   case Sema::TDK_NonDeducedMismatch:
8398   case Sema::TDK_FailedOverloadResolution:
8399     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
8400     MaybeEmitInheritedConstructorNote(S, Fn);
8401     return;
8402   }
8403 }
8404 
8405 /// CUDA: diagnose an invalid call across targets.
8406 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8407   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8408   FunctionDecl *Callee = Cand->Function;
8409 
8410   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8411                            CalleeTarget = S.IdentifyCUDATarget(Callee);
8412 
8413   std::string FnDesc;
8414   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8415 
8416   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8417       << (unsigned) FnKind << CalleeTarget << CallerTarget;
8418 }
8419 
8420 /// Generates a 'note' diagnostic for an overload candidate.  We've
8421 /// already generated a primary error at the call site.
8422 ///
8423 /// It really does need to be a single diagnostic with its caret
8424 /// pointed at the candidate declaration.  Yes, this creates some
8425 /// major challenges of technical writing.  Yes, this makes pointing
8426 /// out problems with specific arguments quite awkward.  It's still
8427 /// better than generating twenty screens of text for every failed
8428 /// overload.
8429 ///
8430 /// It would be great to be able to express per-candidate problems
8431 /// more richly for those diagnostic clients that cared, but we'd
8432 /// still have to be just as careful with the default diagnostics.
8433 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8434                            unsigned NumArgs) {
8435   FunctionDecl *Fn = Cand->Function;
8436 
8437   // Note deleted candidates, but only if they're viable.
8438   if (Cand->Viable && (Fn->isDeleted() ||
8439       S.isFunctionConsideredUnavailable(Fn))) {
8440     std::string FnDesc;
8441     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8442 
8443     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8444       << FnKind << FnDesc
8445       << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8446     MaybeEmitInheritedConstructorNote(S, Fn);
8447     return;
8448   }
8449 
8450   // We don't really have anything else to say about viable candidates.
8451   if (Cand->Viable) {
8452     S.NoteOverloadCandidate(Fn);
8453     return;
8454   }
8455 
8456   switch (Cand->FailureKind) {
8457   case ovl_fail_too_many_arguments:
8458   case ovl_fail_too_few_arguments:
8459     return DiagnoseArityMismatch(S, Cand, NumArgs);
8460 
8461   case ovl_fail_bad_deduction:
8462     return DiagnoseBadDeduction(S, Cand, NumArgs);
8463 
8464   case ovl_fail_trivial_conversion:
8465   case ovl_fail_bad_final_conversion:
8466   case ovl_fail_final_conversion_not_exact:
8467     return S.NoteOverloadCandidate(Fn);
8468 
8469   case ovl_fail_bad_conversion: {
8470     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8471     for (unsigned N = Cand->NumConversions; I != N; ++I)
8472       if (Cand->Conversions[I].isBad())
8473         return DiagnoseBadConversion(S, Cand, I);
8474 
8475     // FIXME: this currently happens when we're called from SemaInit
8476     // when user-conversion overload fails.  Figure out how to handle
8477     // those conditions and diagnose them well.
8478     return S.NoteOverloadCandidate(Fn);
8479   }
8480 
8481   case ovl_fail_bad_target:
8482     return DiagnoseBadTarget(S, Cand);
8483   }
8484 }
8485 
8486 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8487   // Desugar the type of the surrogate down to a function type,
8488   // retaining as many typedefs as possible while still showing
8489   // the function type (and, therefore, its parameter types).
8490   QualType FnType = Cand->Surrogate->getConversionType();
8491   bool isLValueReference = false;
8492   bool isRValueReference = false;
8493   bool isPointer = false;
8494   if (const LValueReferenceType *FnTypeRef =
8495         FnType->getAs<LValueReferenceType>()) {
8496     FnType = FnTypeRef->getPointeeType();
8497     isLValueReference = true;
8498   } else if (const RValueReferenceType *FnTypeRef =
8499                FnType->getAs<RValueReferenceType>()) {
8500     FnType = FnTypeRef->getPointeeType();
8501     isRValueReference = true;
8502   }
8503   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8504     FnType = FnTypePtr->getPointeeType();
8505     isPointer = true;
8506   }
8507   // Desugar down to a function type.
8508   FnType = QualType(FnType->getAs<FunctionType>(), 0);
8509   // Reconstruct the pointer/reference as appropriate.
8510   if (isPointer) FnType = S.Context.getPointerType(FnType);
8511   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8512   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8513 
8514   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8515     << FnType;
8516   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8517 }
8518 
8519 void NoteBuiltinOperatorCandidate(Sema &S,
8520                                   const char *Opc,
8521                                   SourceLocation OpLoc,
8522                                   OverloadCandidate *Cand) {
8523   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8524   std::string TypeStr("operator");
8525   TypeStr += Opc;
8526   TypeStr += "(";
8527   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8528   if (Cand->NumConversions == 1) {
8529     TypeStr += ")";
8530     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8531   } else {
8532     TypeStr += ", ";
8533     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8534     TypeStr += ")";
8535     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8536   }
8537 }
8538 
8539 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8540                                   OverloadCandidate *Cand) {
8541   unsigned NoOperands = Cand->NumConversions;
8542   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8543     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8544     if (ICS.isBad()) break; // all meaningless after first invalid
8545     if (!ICS.isAmbiguous()) continue;
8546 
8547     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8548                               S.PDiag(diag::note_ambiguous_type_conversion));
8549   }
8550 }
8551 
8552 SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8553   if (Cand->Function)
8554     return Cand->Function->getLocation();
8555   if (Cand->IsSurrogate)
8556     return Cand->Surrogate->getLocation();
8557   return SourceLocation();
8558 }
8559 
8560 static unsigned
8561 RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) {
8562   switch ((Sema::TemplateDeductionResult)DFI.Result) {
8563   case Sema::TDK_Success:
8564     llvm_unreachable("TDK_success while diagnosing bad deduction");
8565 
8566   case Sema::TDK_Incomplete:
8567     return 1;
8568 
8569   case Sema::TDK_Underqualified:
8570   case Sema::TDK_Inconsistent:
8571     return 2;
8572 
8573   case Sema::TDK_SubstitutionFailure:
8574   case Sema::TDK_NonDeducedMismatch:
8575     return 3;
8576 
8577   case Sema::TDK_InstantiationDepth:
8578   case Sema::TDK_FailedOverloadResolution:
8579     return 4;
8580 
8581   case Sema::TDK_InvalidExplicitArguments:
8582     return 5;
8583 
8584   case Sema::TDK_TooManyArguments:
8585   case Sema::TDK_TooFewArguments:
8586     return 6;
8587   }
8588   llvm_unreachable("Unhandled deduction result");
8589 }
8590 
8591 struct CompareOverloadCandidatesForDisplay {
8592   Sema &S;
8593   CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8594 
8595   bool operator()(const OverloadCandidate *L,
8596                   const OverloadCandidate *R) {
8597     // Fast-path this check.
8598     if (L == R) return false;
8599 
8600     // Order first by viability.
8601     if (L->Viable) {
8602       if (!R->Viable) return true;
8603 
8604       // TODO: introduce a tri-valued comparison for overload
8605       // candidates.  Would be more worthwhile if we had a sort
8606       // that could exploit it.
8607       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8608       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8609     } else if (R->Viable)
8610       return false;
8611 
8612     assert(L->Viable == R->Viable);
8613 
8614     // Criteria by which we can sort non-viable candidates:
8615     if (!L->Viable) {
8616       // 1. Arity mismatches come after other candidates.
8617       if (L->FailureKind == ovl_fail_too_many_arguments ||
8618           L->FailureKind == ovl_fail_too_few_arguments)
8619         return false;
8620       if (R->FailureKind == ovl_fail_too_many_arguments ||
8621           R->FailureKind == ovl_fail_too_few_arguments)
8622         return true;
8623 
8624       // 2. Bad conversions come first and are ordered by the number
8625       // of bad conversions and quality of good conversions.
8626       if (L->FailureKind == ovl_fail_bad_conversion) {
8627         if (R->FailureKind != ovl_fail_bad_conversion)
8628           return true;
8629 
8630         // The conversion that can be fixed with a smaller number of changes,
8631         // comes first.
8632         unsigned numLFixes = L->Fix.NumConversionsFixed;
8633         unsigned numRFixes = R->Fix.NumConversionsFixed;
8634         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8635         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8636         if (numLFixes != numRFixes) {
8637           if (numLFixes < numRFixes)
8638             return true;
8639           else
8640             return false;
8641         }
8642 
8643         // If there's any ordering between the defined conversions...
8644         // FIXME: this might not be transitive.
8645         assert(L->NumConversions == R->NumConversions);
8646 
8647         int leftBetter = 0;
8648         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8649         for (unsigned E = L->NumConversions; I != E; ++I) {
8650           switch (CompareImplicitConversionSequences(S,
8651                                                      L->Conversions[I],
8652                                                      R->Conversions[I])) {
8653           case ImplicitConversionSequence::Better:
8654             leftBetter++;
8655             break;
8656 
8657           case ImplicitConversionSequence::Worse:
8658             leftBetter--;
8659             break;
8660 
8661           case ImplicitConversionSequence::Indistinguishable:
8662             break;
8663           }
8664         }
8665         if (leftBetter > 0) return true;
8666         if (leftBetter < 0) return false;
8667 
8668       } else if (R->FailureKind == ovl_fail_bad_conversion)
8669         return false;
8670 
8671       if (L->FailureKind == ovl_fail_bad_deduction) {
8672         if (R->FailureKind != ovl_fail_bad_deduction)
8673           return true;
8674 
8675         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8676           return RankDeductionFailure(L->DeductionFailure)
8677                < RankDeductionFailure(R->DeductionFailure);
8678       } else if (R->FailureKind == ovl_fail_bad_deduction)
8679         return false;
8680 
8681       // TODO: others?
8682     }
8683 
8684     // Sort everything else by location.
8685     SourceLocation LLoc = GetLocationForCandidate(L);
8686     SourceLocation RLoc = GetLocationForCandidate(R);
8687 
8688     // Put candidates without locations (e.g. builtins) at the end.
8689     if (LLoc.isInvalid()) return false;
8690     if (RLoc.isInvalid()) return true;
8691 
8692     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8693   }
8694 };
8695 
8696 /// CompleteNonViableCandidate - Normally, overload resolution only
8697 /// computes up to the first. Produces the FixIt set if possible.
8698 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8699                                 llvm::ArrayRef<Expr *> Args) {
8700   assert(!Cand->Viable);
8701 
8702   // Don't do anything on failures other than bad conversion.
8703   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8704 
8705   // We only want the FixIts if all the arguments can be corrected.
8706   bool Unfixable = false;
8707   // Use a implicit copy initialization to check conversion fixes.
8708   Cand->Fix.setConversionChecker(TryCopyInitialization);
8709 
8710   // Skip forward to the first bad conversion.
8711   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
8712   unsigned ConvCount = Cand->NumConversions;
8713   while (true) {
8714     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
8715     ConvIdx++;
8716     if (Cand->Conversions[ConvIdx - 1].isBad()) {
8717       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
8718       break;
8719     }
8720   }
8721 
8722   if (ConvIdx == ConvCount)
8723     return;
8724 
8725   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
8726          "remaining conversion is initialized?");
8727 
8728   // FIXME: this should probably be preserved from the overload
8729   // operation somehow.
8730   bool SuppressUserConversions = false;
8731 
8732   const FunctionProtoType* Proto;
8733   unsigned ArgIdx = ConvIdx;
8734 
8735   if (Cand->IsSurrogate) {
8736     QualType ConvType
8737       = Cand->Surrogate->getConversionType().getNonReferenceType();
8738     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
8739       ConvType = ConvPtrType->getPointeeType();
8740     Proto = ConvType->getAs<FunctionProtoType>();
8741     ArgIdx--;
8742   } else if (Cand->Function) {
8743     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
8744     if (isa<CXXMethodDecl>(Cand->Function) &&
8745         !isa<CXXConstructorDecl>(Cand->Function))
8746       ArgIdx--;
8747   } else {
8748     // Builtin binary operator with a bad first conversion.
8749     assert(ConvCount <= 3);
8750     for (; ConvIdx != ConvCount; ++ConvIdx)
8751       Cand->Conversions[ConvIdx]
8752         = TryCopyInitialization(S, Args[ConvIdx],
8753                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
8754                                 SuppressUserConversions,
8755                                 /*InOverloadResolution*/ true,
8756                                 /*AllowObjCWritebackConversion=*/
8757                                   S.getLangOpts().ObjCAutoRefCount);
8758     return;
8759   }
8760 
8761   // Fill in the rest of the conversions.
8762   unsigned NumArgsInProto = Proto->getNumArgs();
8763   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
8764     if (ArgIdx < NumArgsInProto) {
8765       Cand->Conversions[ConvIdx]
8766         = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
8767                                 SuppressUserConversions,
8768                                 /*InOverloadResolution=*/true,
8769                                 /*AllowObjCWritebackConversion=*/
8770                                   S.getLangOpts().ObjCAutoRefCount);
8771       // Store the FixIt in the candidate if it exists.
8772       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
8773         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
8774     }
8775     else
8776       Cand->Conversions[ConvIdx].setEllipsis();
8777   }
8778 }
8779 
8780 } // end anonymous namespace
8781 
8782 /// PrintOverloadCandidates - When overload resolution fails, prints
8783 /// diagnostic messages containing the candidates in the candidate
8784 /// set.
8785 void OverloadCandidateSet::NoteCandidates(Sema &S,
8786                                           OverloadCandidateDisplayKind OCD,
8787                                           llvm::ArrayRef<Expr *> Args,
8788                                           const char *Opc,
8789                                           SourceLocation OpLoc) {
8790   // Sort the candidates by viability and position.  Sorting directly would
8791   // be prohibitive, so we make a set of pointers and sort those.
8792   SmallVector<OverloadCandidate*, 32> Cands;
8793   if (OCD == OCD_AllCandidates) Cands.reserve(size());
8794   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
8795     if (Cand->Viable)
8796       Cands.push_back(Cand);
8797     else if (OCD == OCD_AllCandidates) {
8798       CompleteNonViableCandidate(S, Cand, Args);
8799       if (Cand->Function || Cand->IsSurrogate)
8800         Cands.push_back(Cand);
8801       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
8802       // want to list every possible builtin candidate.
8803     }
8804   }
8805 
8806   std::sort(Cands.begin(), Cands.end(),
8807             CompareOverloadCandidatesForDisplay(S));
8808 
8809   bool ReportedAmbiguousConversions = false;
8810 
8811   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
8812   const DiagnosticsEngine::OverloadsShown ShowOverloads =
8813       S.Diags.getShowOverloads();
8814   unsigned CandsShown = 0;
8815   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
8816     OverloadCandidate *Cand = *I;
8817 
8818     // Set an arbitrary limit on the number of candidate functions we'll spam
8819     // the user with.  FIXME: This limit should depend on details of the
8820     // candidate list.
8821     if (CandsShown >= 4 && ShowOverloads == DiagnosticsEngine::Ovl_Best) {
8822       break;
8823     }
8824     ++CandsShown;
8825 
8826     if (Cand->Function)
8827       NoteFunctionCandidate(S, Cand, Args.size());
8828     else if (Cand->IsSurrogate)
8829       NoteSurrogateCandidate(S, Cand);
8830     else {
8831       assert(Cand->Viable &&
8832              "Non-viable built-in candidates are not added to Cands.");
8833       // Generally we only see ambiguities including viable builtin
8834       // operators if overload resolution got screwed up by an
8835       // ambiguous user-defined conversion.
8836       //
8837       // FIXME: It's quite possible for different conversions to see
8838       // different ambiguities, though.
8839       if (!ReportedAmbiguousConversions) {
8840         NoteAmbiguousUserConversions(S, OpLoc, Cand);
8841         ReportedAmbiguousConversions = true;
8842       }
8843 
8844       // If this is a viable builtin, print it.
8845       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
8846     }
8847   }
8848 
8849   if (I != E)
8850     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
8851 }
8852 
8853 // [PossiblyAFunctionType]  -->   [Return]
8854 // NonFunctionType --> NonFunctionType
8855 // R (A) --> R(A)
8856 // R (*)(A) --> R (A)
8857 // R (&)(A) --> R (A)
8858 // R (S::*)(A) --> R (A)
8859 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
8860   QualType Ret = PossiblyAFunctionType;
8861   if (const PointerType *ToTypePtr =
8862     PossiblyAFunctionType->getAs<PointerType>())
8863     Ret = ToTypePtr->getPointeeType();
8864   else if (const ReferenceType *ToTypeRef =
8865     PossiblyAFunctionType->getAs<ReferenceType>())
8866     Ret = ToTypeRef->getPointeeType();
8867   else if (const MemberPointerType *MemTypePtr =
8868     PossiblyAFunctionType->getAs<MemberPointerType>())
8869     Ret = MemTypePtr->getPointeeType();
8870   Ret =
8871     Context.getCanonicalType(Ret).getUnqualifiedType();
8872   return Ret;
8873 }
8874 
8875 // A helper class to help with address of function resolution
8876 // - allows us to avoid passing around all those ugly parameters
8877 class AddressOfFunctionResolver
8878 {
8879   Sema& S;
8880   Expr* SourceExpr;
8881   const QualType& TargetType;
8882   QualType TargetFunctionType; // Extracted function type from target type
8883 
8884   bool Complain;
8885   //DeclAccessPair& ResultFunctionAccessPair;
8886   ASTContext& Context;
8887 
8888   bool TargetTypeIsNonStaticMemberFunction;
8889   bool FoundNonTemplateFunction;
8890 
8891   OverloadExpr::FindResult OvlExprInfo;
8892   OverloadExpr *OvlExpr;
8893   TemplateArgumentListInfo OvlExplicitTemplateArgs;
8894   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
8895 
8896 public:
8897   AddressOfFunctionResolver(Sema &S, Expr* SourceExpr,
8898                             const QualType& TargetType, bool Complain)
8899     : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
8900       Complain(Complain), Context(S.getASTContext()),
8901       TargetTypeIsNonStaticMemberFunction(
8902                                     !!TargetType->getAs<MemberPointerType>()),
8903       FoundNonTemplateFunction(false),
8904       OvlExprInfo(OverloadExpr::find(SourceExpr)),
8905       OvlExpr(OvlExprInfo.Expression)
8906   {
8907     ExtractUnqualifiedFunctionTypeFromTargetType();
8908 
8909     if (!TargetFunctionType->isFunctionType()) {
8910       if (OvlExpr->hasExplicitTemplateArgs()) {
8911         DeclAccessPair dap;
8912         if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization(
8913                                             OvlExpr, false, &dap) ) {
8914 
8915           if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
8916             if (!Method->isStatic()) {
8917               // If the target type is a non-function type and the function
8918               // found is a non-static member function, pretend as if that was
8919               // the target, it's the only possible type to end up with.
8920               TargetTypeIsNonStaticMemberFunction = true;
8921 
8922               // And skip adding the function if its not in the proper form.
8923               // We'll diagnose this due to an empty set of functions.
8924               if (!OvlExprInfo.HasFormOfMemberPointer)
8925                 return;
8926             }
8927           }
8928 
8929           Matches.push_back(std::make_pair(dap,Fn));
8930         }
8931       }
8932       return;
8933     }
8934 
8935     if (OvlExpr->hasExplicitTemplateArgs())
8936       OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
8937 
8938     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
8939       // C++ [over.over]p4:
8940       //   If more than one function is selected, [...]
8941       if (Matches.size() > 1) {
8942         if (FoundNonTemplateFunction)
8943           EliminateAllTemplateMatches();
8944         else
8945           EliminateAllExceptMostSpecializedTemplate();
8946       }
8947     }
8948   }
8949 
8950 private:
8951   bool isTargetTypeAFunction() const {
8952     return TargetFunctionType->isFunctionType();
8953   }
8954 
8955   // [ToType]     [Return]
8956 
8957   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
8958   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
8959   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
8960   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
8961     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
8962   }
8963 
8964   // return true if any matching specializations were found
8965   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
8966                                    const DeclAccessPair& CurAccessFunPair) {
8967     if (CXXMethodDecl *Method
8968               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
8969       // Skip non-static function templates when converting to pointer, and
8970       // static when converting to member pointer.
8971       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
8972         return false;
8973     }
8974     else if (TargetTypeIsNonStaticMemberFunction)
8975       return false;
8976 
8977     // C++ [over.over]p2:
8978     //   If the name is a function template, template argument deduction is
8979     //   done (14.8.2.2), and if the argument deduction succeeds, the
8980     //   resulting template argument list is used to generate a single
8981     //   function template specialization, which is added to the set of
8982     //   overloaded functions considered.
8983     FunctionDecl *Specialization = 0;
8984     TemplateDeductionInfo Info(Context, OvlExpr->getNameLoc());
8985     if (Sema::TemplateDeductionResult Result
8986           = S.DeduceTemplateArguments(FunctionTemplate,
8987                                       &OvlExplicitTemplateArgs,
8988                                       TargetFunctionType, Specialization,
8989                                       Info)) {
8990       // FIXME: make a note of the failed deduction for diagnostics.
8991       (void)Result;
8992       return false;
8993     }
8994 
8995     // Template argument deduction ensures that we have an exact match.
8996     // This function template specicalization works.
8997     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
8998     assert(TargetFunctionType
8999                       == Context.getCanonicalType(Specialization->getType()));
9000     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9001     return true;
9002   }
9003 
9004   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9005                                       const DeclAccessPair& CurAccessFunPair) {
9006     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9007       // Skip non-static functions when converting to pointer, and static
9008       // when converting to member pointer.
9009       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9010         return false;
9011     }
9012     else if (TargetTypeIsNonStaticMemberFunction)
9013       return false;
9014 
9015     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9016       if (S.getLangOpts().CUDA)
9017         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9018           if (S.CheckCUDATarget(Caller, FunDecl))
9019             return false;
9020 
9021       QualType ResultTy;
9022       if (Context.hasSameUnqualifiedType(TargetFunctionType,
9023                                          FunDecl->getType()) ||
9024           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9025                                  ResultTy)) {
9026         Matches.push_back(std::make_pair(CurAccessFunPair,
9027           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9028         FoundNonTemplateFunction = true;
9029         return true;
9030       }
9031     }
9032 
9033     return false;
9034   }
9035 
9036   bool FindAllFunctionsThatMatchTargetTypeExactly() {
9037     bool Ret = false;
9038 
9039     // If the overload expression doesn't have the form of a pointer to
9040     // member, don't try to convert it to a pointer-to-member type.
9041     if (IsInvalidFormOfPointerToMemberFunction())
9042       return false;
9043 
9044     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9045                                E = OvlExpr->decls_end();
9046          I != E; ++I) {
9047       // Look through any using declarations to find the underlying function.
9048       NamedDecl *Fn = (*I)->getUnderlyingDecl();
9049 
9050       // C++ [over.over]p3:
9051       //   Non-member functions and static member functions match
9052       //   targets of type "pointer-to-function" or "reference-to-function."
9053       //   Nonstatic member functions match targets of
9054       //   type "pointer-to-member-function."
9055       // Note that according to DR 247, the containing class does not matter.
9056       if (FunctionTemplateDecl *FunctionTemplate
9057                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
9058         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9059           Ret = true;
9060       }
9061       // If we have explicit template arguments supplied, skip non-templates.
9062       else if (!OvlExpr->hasExplicitTemplateArgs() &&
9063                AddMatchingNonTemplateFunction(Fn, I.getPair()))
9064         Ret = true;
9065     }
9066     assert(Ret || Matches.empty());
9067     return Ret;
9068   }
9069 
9070   void EliminateAllExceptMostSpecializedTemplate() {
9071     //   [...] and any given function template specialization F1 is
9072     //   eliminated if the set contains a second function template
9073     //   specialization whose function template is more specialized
9074     //   than the function template of F1 according to the partial
9075     //   ordering rules of 14.5.5.2.
9076 
9077     // The algorithm specified above is quadratic. We instead use a
9078     // two-pass algorithm (similar to the one used to identify the
9079     // best viable function in an overload set) that identifies the
9080     // best function template (if it exists).
9081 
9082     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9083     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9084       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9085 
9086     UnresolvedSetIterator Result =
9087       S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
9088                            TPOC_Other, 0, SourceExpr->getLocStart(),
9089                            S.PDiag(),
9090                            S.PDiag(diag::err_addr_ovl_ambiguous)
9091                              << Matches[0].second->getDeclName(),
9092                            S.PDiag(diag::note_ovl_candidate)
9093                              << (unsigned) oc_function_template,
9094                            Complain, TargetFunctionType);
9095 
9096     if (Result != MatchesCopy.end()) {
9097       // Make it the first and only element
9098       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9099       Matches[0].second = cast<FunctionDecl>(*Result);
9100       Matches.resize(1);
9101     }
9102   }
9103 
9104   void EliminateAllTemplateMatches() {
9105     //   [...] any function template specializations in the set are
9106     //   eliminated if the set also contains a non-template function, [...]
9107     for (unsigned I = 0, N = Matches.size(); I != N; ) {
9108       if (Matches[I].second->getPrimaryTemplate() == 0)
9109         ++I;
9110       else {
9111         Matches[I] = Matches[--N];
9112         Matches.set_size(N);
9113       }
9114     }
9115   }
9116 
9117 public:
9118   void ComplainNoMatchesFound() const {
9119     assert(Matches.empty());
9120     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9121         << OvlExpr->getName() << TargetFunctionType
9122         << OvlExpr->getSourceRange();
9123     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9124   }
9125 
9126   bool IsInvalidFormOfPointerToMemberFunction() const {
9127     return TargetTypeIsNonStaticMemberFunction &&
9128       !OvlExprInfo.HasFormOfMemberPointer;
9129   }
9130 
9131   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9132       // TODO: Should we condition this on whether any functions might
9133       // have matched, or is it more appropriate to do that in callers?
9134       // TODO: a fixit wouldn't hurt.
9135       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9136         << TargetType << OvlExpr->getSourceRange();
9137   }
9138 
9139   void ComplainOfInvalidConversion() const {
9140     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9141       << OvlExpr->getName() << TargetType;
9142   }
9143 
9144   void ComplainMultipleMatchesFound() const {
9145     assert(Matches.size() > 1);
9146     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9147       << OvlExpr->getName()
9148       << OvlExpr->getSourceRange();
9149     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9150   }
9151 
9152   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9153 
9154   int getNumMatches() const { return Matches.size(); }
9155 
9156   FunctionDecl* getMatchingFunctionDecl() const {
9157     if (Matches.size() != 1) return 0;
9158     return Matches[0].second;
9159   }
9160 
9161   const DeclAccessPair* getMatchingFunctionAccessPair() const {
9162     if (Matches.size() != 1) return 0;
9163     return &Matches[0].first;
9164   }
9165 };
9166 
9167 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9168 /// an overloaded function (C++ [over.over]), where @p From is an
9169 /// expression with overloaded function type and @p ToType is the type
9170 /// we're trying to resolve to. For example:
9171 ///
9172 /// @code
9173 /// int f(double);
9174 /// int f(int);
9175 ///
9176 /// int (*pfd)(double) = f; // selects f(double)
9177 /// @endcode
9178 ///
9179 /// This routine returns the resulting FunctionDecl if it could be
9180 /// resolved, and NULL otherwise. When @p Complain is true, this
9181 /// routine will emit diagnostics if there is an error.
9182 FunctionDecl *
9183 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9184                                          QualType TargetType,
9185                                          bool Complain,
9186                                          DeclAccessPair &FoundResult,
9187                                          bool *pHadMultipleCandidates) {
9188   assert(AddressOfExpr->getType() == Context.OverloadTy);
9189 
9190   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9191                                      Complain);
9192   int NumMatches = Resolver.getNumMatches();
9193   FunctionDecl* Fn = 0;
9194   if (NumMatches == 0 && Complain) {
9195     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9196       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9197     else
9198       Resolver.ComplainNoMatchesFound();
9199   }
9200   else if (NumMatches > 1 && Complain)
9201     Resolver.ComplainMultipleMatchesFound();
9202   else if (NumMatches == 1) {
9203     Fn = Resolver.getMatchingFunctionDecl();
9204     assert(Fn);
9205     FoundResult = *Resolver.getMatchingFunctionAccessPair();
9206     MarkFunctionReferenced(AddressOfExpr->getLocStart(), Fn);
9207     if (Complain)
9208       CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9209   }
9210 
9211   if (pHadMultipleCandidates)
9212     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9213   return Fn;
9214 }
9215 
9216 /// \brief Given an expression that refers to an overloaded function, try to
9217 /// resolve that overloaded function expression down to a single function.
9218 ///
9219 /// This routine can only resolve template-ids that refer to a single function
9220 /// template, where that template-id refers to a single template whose template
9221 /// arguments are either provided by the template-id or have defaults,
9222 /// as described in C++0x [temp.arg.explicit]p3.
9223 FunctionDecl *
9224 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9225                                                   bool Complain,
9226                                                   DeclAccessPair *FoundResult) {
9227   // C++ [over.over]p1:
9228   //   [...] [Note: any redundant set of parentheses surrounding the
9229   //   overloaded function name is ignored (5.1). ]
9230   // C++ [over.over]p1:
9231   //   [...] The overloaded function name can be preceded by the &
9232   //   operator.
9233 
9234   // If we didn't actually find any template-ids, we're done.
9235   if (!ovl->hasExplicitTemplateArgs())
9236     return 0;
9237 
9238   TemplateArgumentListInfo ExplicitTemplateArgs;
9239   ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9240 
9241   // Look through all of the overloaded functions, searching for one
9242   // whose type matches exactly.
9243   FunctionDecl *Matched = 0;
9244   for (UnresolvedSetIterator I = ovl->decls_begin(),
9245          E = ovl->decls_end(); I != E; ++I) {
9246     // C++0x [temp.arg.explicit]p3:
9247     //   [...] In contexts where deduction is done and fails, or in contexts
9248     //   where deduction is not done, if a template argument list is
9249     //   specified and it, along with any default template arguments,
9250     //   identifies a single function template specialization, then the
9251     //   template-id is an lvalue for the function template specialization.
9252     FunctionTemplateDecl *FunctionTemplate
9253       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9254 
9255     // C++ [over.over]p2:
9256     //   If the name is a function template, template argument deduction is
9257     //   done (14.8.2.2), and if the argument deduction succeeds, the
9258     //   resulting template argument list is used to generate a single
9259     //   function template specialization, which is added to the set of
9260     //   overloaded functions considered.
9261     FunctionDecl *Specialization = 0;
9262     TemplateDeductionInfo Info(Context, ovl->getNameLoc());
9263     if (TemplateDeductionResult Result
9264           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9265                                     Specialization, Info)) {
9266       // FIXME: make a note of the failed deduction for diagnostics.
9267       (void)Result;
9268       continue;
9269     }
9270 
9271     assert(Specialization && "no specialization and no error?");
9272 
9273     // Multiple matches; we can't resolve to a single declaration.
9274     if (Matched) {
9275       if (Complain) {
9276         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9277           << ovl->getName();
9278         NoteAllOverloadCandidates(ovl);
9279       }
9280       return 0;
9281     }
9282 
9283     Matched = Specialization;
9284     if (FoundResult) *FoundResult = I.getPair();
9285   }
9286 
9287   return Matched;
9288 }
9289 
9290 
9291 
9292 
9293 // Resolve and fix an overloaded expression that can be resolved
9294 // because it identifies a single function template specialization.
9295 //
9296 // Last three arguments should only be supplied if Complain = true
9297 //
9298 // Return true if it was logically possible to so resolve the
9299 // expression, regardless of whether or not it succeeded.  Always
9300 // returns true if 'complain' is set.
9301 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9302                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
9303                    bool complain, const SourceRange& OpRangeForComplaining,
9304                                            QualType DestTypeForComplaining,
9305                                             unsigned DiagIDForComplaining) {
9306   assert(SrcExpr.get()->getType() == Context.OverloadTy);
9307 
9308   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9309 
9310   DeclAccessPair found;
9311   ExprResult SingleFunctionExpression;
9312   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9313                            ovl.Expression, /*complain*/ false, &found)) {
9314     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9315       SrcExpr = ExprError();
9316       return true;
9317     }
9318 
9319     // It is only correct to resolve to an instance method if we're
9320     // resolving a form that's permitted to be a pointer to member.
9321     // Otherwise we'll end up making a bound member expression, which
9322     // is illegal in all the contexts we resolve like this.
9323     if (!ovl.HasFormOfMemberPointer &&
9324         isa<CXXMethodDecl>(fn) &&
9325         cast<CXXMethodDecl>(fn)->isInstance()) {
9326       if (!complain) return false;
9327 
9328       Diag(ovl.Expression->getExprLoc(),
9329            diag::err_bound_member_function)
9330         << 0 << ovl.Expression->getSourceRange();
9331 
9332       // TODO: I believe we only end up here if there's a mix of
9333       // static and non-static candidates (otherwise the expression
9334       // would have 'bound member' type, not 'overload' type).
9335       // Ideally we would note which candidate was chosen and why
9336       // the static candidates were rejected.
9337       SrcExpr = ExprError();
9338       return true;
9339     }
9340 
9341     // Fix the expresion to refer to 'fn'.
9342     SingleFunctionExpression =
9343       Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9344 
9345     // If desired, do function-to-pointer decay.
9346     if (doFunctionPointerConverion) {
9347       SingleFunctionExpression =
9348         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9349       if (SingleFunctionExpression.isInvalid()) {
9350         SrcExpr = ExprError();
9351         return true;
9352       }
9353     }
9354   }
9355 
9356   if (!SingleFunctionExpression.isUsable()) {
9357     if (complain) {
9358       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9359         << ovl.Expression->getName()
9360         << DestTypeForComplaining
9361         << OpRangeForComplaining
9362         << ovl.Expression->getQualifierLoc().getSourceRange();
9363       NoteAllOverloadCandidates(SrcExpr.get());
9364 
9365       SrcExpr = ExprError();
9366       return true;
9367     }
9368 
9369     return false;
9370   }
9371 
9372   SrcExpr = SingleFunctionExpression;
9373   return true;
9374 }
9375 
9376 /// \brief Add a single candidate to the overload set.
9377 static void AddOverloadedCallCandidate(Sema &S,
9378                                        DeclAccessPair FoundDecl,
9379                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
9380                                        llvm::ArrayRef<Expr *> Args,
9381                                        OverloadCandidateSet &CandidateSet,
9382                                        bool PartialOverloading,
9383                                        bool KnownValid) {
9384   NamedDecl *Callee = FoundDecl.getDecl();
9385   if (isa<UsingShadowDecl>(Callee))
9386     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9387 
9388   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9389     if (ExplicitTemplateArgs) {
9390       assert(!KnownValid && "Explicit template arguments?");
9391       return;
9392     }
9393     S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9394                            PartialOverloading);
9395     return;
9396   }
9397 
9398   if (FunctionTemplateDecl *FuncTemplate
9399       = dyn_cast<FunctionTemplateDecl>(Callee)) {
9400     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9401                                    ExplicitTemplateArgs, Args, CandidateSet);
9402     return;
9403   }
9404 
9405   assert(!KnownValid && "unhandled case in overloaded call candidate");
9406 }
9407 
9408 /// \brief Add the overload candidates named by callee and/or found by argument
9409 /// dependent lookup to the given overload set.
9410 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9411                                        llvm::ArrayRef<Expr *> Args,
9412                                        OverloadCandidateSet &CandidateSet,
9413                                        bool PartialOverloading) {
9414 
9415 #ifndef NDEBUG
9416   // Verify that ArgumentDependentLookup is consistent with the rules
9417   // in C++0x [basic.lookup.argdep]p3:
9418   //
9419   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9420   //   and let Y be the lookup set produced by argument dependent
9421   //   lookup (defined as follows). If X contains
9422   //
9423   //     -- a declaration of a class member, or
9424   //
9425   //     -- a block-scope function declaration that is not a
9426   //        using-declaration, or
9427   //
9428   //     -- a declaration that is neither a function or a function
9429   //        template
9430   //
9431   //   then Y is empty.
9432 
9433   if (ULE->requiresADL()) {
9434     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9435            E = ULE->decls_end(); I != E; ++I) {
9436       assert(!(*I)->getDeclContext()->isRecord());
9437       assert(isa<UsingShadowDecl>(*I) ||
9438              !(*I)->getDeclContext()->isFunctionOrMethod());
9439       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9440     }
9441   }
9442 #endif
9443 
9444   // It would be nice to avoid this copy.
9445   TemplateArgumentListInfo TABuffer;
9446   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9447   if (ULE->hasExplicitTemplateArgs()) {
9448     ULE->copyTemplateArgumentsInto(TABuffer);
9449     ExplicitTemplateArgs = &TABuffer;
9450   }
9451 
9452   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9453          E = ULE->decls_end(); I != E; ++I)
9454     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9455                                CandidateSet, PartialOverloading,
9456                                /*KnownValid*/ true);
9457 
9458   if (ULE->requiresADL())
9459     AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9460                                          ULE->getExprLoc(),
9461                                          Args, ExplicitTemplateArgs,
9462                                          CandidateSet, PartialOverloading,
9463                                          ULE->isStdAssociatedNamespace());
9464 }
9465 
9466 /// Attempt to recover from an ill-formed use of a non-dependent name in a
9467 /// template, where the non-dependent name was declared after the template
9468 /// was defined. This is common in code written for a compilers which do not
9469 /// correctly implement two-stage name lookup.
9470 ///
9471 /// Returns true if a viable candidate was found and a diagnostic was issued.
9472 static bool
9473 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9474                        const CXXScopeSpec &SS, LookupResult &R,
9475                        TemplateArgumentListInfo *ExplicitTemplateArgs,
9476                        llvm::ArrayRef<Expr *> Args) {
9477   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9478     return false;
9479 
9480   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9481     if (DC->isTransparentContext())
9482       continue;
9483 
9484     SemaRef.LookupQualifiedName(R, DC);
9485 
9486     if (!R.empty()) {
9487       R.suppressDiagnostics();
9488 
9489       if (isa<CXXRecordDecl>(DC)) {
9490         // Don't diagnose names we find in classes; we get much better
9491         // diagnostics for these from DiagnoseEmptyLookup.
9492         R.clear();
9493         return false;
9494       }
9495 
9496       OverloadCandidateSet Candidates(FnLoc);
9497       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9498         AddOverloadedCallCandidate(SemaRef, I.getPair(),
9499                                    ExplicitTemplateArgs, Args,
9500                                    Candidates, false, /*KnownValid*/ false);
9501 
9502       OverloadCandidateSet::iterator Best;
9503       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9504         // No viable functions. Don't bother the user with notes for functions
9505         // which don't work and shouldn't be found anyway.
9506         R.clear();
9507         return false;
9508       }
9509 
9510       // Find the namespaces where ADL would have looked, and suggest
9511       // declaring the function there instead.
9512       Sema::AssociatedNamespaceSet AssociatedNamespaces;
9513       Sema::AssociatedClassSet AssociatedClasses;
9514       SemaRef.FindAssociatedClassesAndNamespaces(Args,
9515                                                  AssociatedNamespaces,
9516                                                  AssociatedClasses);
9517       // Never suggest declaring a function within namespace 'std'.
9518       Sema::AssociatedNamespaceSet SuggestedNamespaces;
9519       if (DeclContext *Std = SemaRef.getStdNamespace()) {
9520         for (Sema::AssociatedNamespaceSet::iterator
9521                it = AssociatedNamespaces.begin(),
9522                end = AssociatedNamespaces.end(); it != end; ++it) {
9523           if (!Std->Encloses(*it))
9524             SuggestedNamespaces.insert(*it);
9525         }
9526       } else {
9527         // Lacking the 'std::' namespace, use all of the associated namespaces.
9528         SuggestedNamespaces = AssociatedNamespaces;
9529       }
9530 
9531       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9532         << R.getLookupName();
9533       if (SuggestedNamespaces.empty()) {
9534         SemaRef.Diag(Best->Function->getLocation(),
9535                      diag::note_not_found_by_two_phase_lookup)
9536           << R.getLookupName() << 0;
9537       } else if (SuggestedNamespaces.size() == 1) {
9538         SemaRef.Diag(Best->Function->getLocation(),
9539                      diag::note_not_found_by_two_phase_lookup)
9540           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9541       } else {
9542         // FIXME: It would be useful to list the associated namespaces here,
9543         // but the diagnostics infrastructure doesn't provide a way to produce
9544         // a localized representation of a list of items.
9545         SemaRef.Diag(Best->Function->getLocation(),
9546                      diag::note_not_found_by_two_phase_lookup)
9547           << R.getLookupName() << 2;
9548       }
9549 
9550       // Try to recover by calling this function.
9551       return true;
9552     }
9553 
9554     R.clear();
9555   }
9556 
9557   return false;
9558 }
9559 
9560 /// Attempt to recover from ill-formed use of a non-dependent operator in a
9561 /// template, where the non-dependent operator was declared after the template
9562 /// was defined.
9563 ///
9564 /// Returns true if a viable candidate was found and a diagnostic was issued.
9565 static bool
9566 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
9567                                SourceLocation OpLoc,
9568                                llvm::ArrayRef<Expr *> Args) {
9569   DeclarationName OpName =
9570     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
9571   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
9572   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
9573                                 /*ExplicitTemplateArgs=*/0, Args);
9574 }
9575 
9576 namespace {
9577 // Callback to limit the allowed keywords and to only accept typo corrections
9578 // that are keywords or whose decls refer to functions (or template functions)
9579 // that accept the given number of arguments.
9580 class RecoveryCallCCC : public CorrectionCandidateCallback {
9581  public:
9582   RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs)
9583       : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) {
9584     WantTypeSpecifiers = SemaRef.getLangOpts().CPlusPlus;
9585     WantRemainingKeywords = false;
9586   }
9587 
9588   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9589     if (!candidate.getCorrectionDecl())
9590       return candidate.isKeyword();
9591 
9592     for (TypoCorrection::const_decl_iterator DI = candidate.begin(),
9593            DIEnd = candidate.end(); DI != DIEnd; ++DI) {
9594       FunctionDecl *FD = 0;
9595       NamedDecl *ND = (*DI)->getUnderlyingDecl();
9596       if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9597         FD = FTD->getTemplatedDecl();
9598       if (!HasExplicitTemplateArgs && !FD) {
9599         if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) {
9600           // If the Decl is neither a function nor a template function,
9601           // determine if it is a pointer or reference to a function. If so,
9602           // check against the number of arguments expected for the pointee.
9603           QualType ValType = cast<ValueDecl>(ND)->getType();
9604           if (ValType->isAnyPointerType() || ValType->isReferenceType())
9605             ValType = ValType->getPointeeType();
9606           if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
9607             if (FPT->getNumArgs() == NumArgs)
9608               return true;
9609         }
9610       }
9611       if (FD && FD->getNumParams() >= NumArgs &&
9612           FD->getMinRequiredArguments() <= NumArgs)
9613         return true;
9614     }
9615     return false;
9616   }
9617 
9618  private:
9619   unsigned NumArgs;
9620   bool HasExplicitTemplateArgs;
9621 };
9622 
9623 // Callback that effectively disabled typo correction
9624 class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
9625  public:
9626   NoTypoCorrectionCCC() {
9627     WantTypeSpecifiers = false;
9628     WantExpressionKeywords = false;
9629     WantCXXNamedCasts = false;
9630     WantRemainingKeywords = false;
9631   }
9632 
9633   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9634     return false;
9635   }
9636 };
9637 }
9638 
9639 /// Attempts to recover from a call where no functions were found.
9640 ///
9641 /// Returns true if new candidates were found.
9642 static ExprResult
9643 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9644                       UnresolvedLookupExpr *ULE,
9645                       SourceLocation LParenLoc,
9646                       llvm::MutableArrayRef<Expr *> Args,
9647                       SourceLocation RParenLoc,
9648                       bool EmptyLookup, bool AllowTypoCorrection) {
9649 
9650   CXXScopeSpec SS;
9651   SS.Adopt(ULE->getQualifierLoc());
9652   SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
9653 
9654   TemplateArgumentListInfo TABuffer;
9655   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9656   if (ULE->hasExplicitTemplateArgs()) {
9657     ULE->copyTemplateArgumentsInto(TABuffer);
9658     ExplicitTemplateArgs = &TABuffer;
9659   }
9660 
9661   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
9662                  Sema::LookupOrdinaryName);
9663   RecoveryCallCCC Validator(SemaRef, Args.size(), ExplicitTemplateArgs != 0);
9664   NoTypoCorrectionCCC RejectAll;
9665   CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
9666       (CorrectionCandidateCallback*)&Validator :
9667       (CorrectionCandidateCallback*)&RejectAll;
9668   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
9669                               ExplicitTemplateArgs, Args) &&
9670       (!EmptyLookup ||
9671        SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
9672                                    ExplicitTemplateArgs, Args)))
9673     return ExprError();
9674 
9675   assert(!R.empty() && "lookup results empty despite recovery");
9676 
9677   // Build an implicit member call if appropriate.  Just drop the
9678   // casts and such from the call, we don't really care.
9679   ExprResult NewFn = ExprError();
9680   if ((*R.begin())->isCXXClassMember())
9681     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
9682                                                     R, ExplicitTemplateArgs);
9683   else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
9684     NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
9685                                         ExplicitTemplateArgs);
9686   else
9687     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
9688 
9689   if (NewFn.isInvalid())
9690     return ExprError();
9691 
9692   // This shouldn't cause an infinite loop because we're giving it
9693   // an expression with viable lookup results, which should never
9694   // end up here.
9695   return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
9696                                MultiExprArg(Args.data(), Args.size()),
9697                                RParenLoc);
9698 }
9699 
9700 /// ResolveOverloadedCallFn - Given the call expression that calls Fn
9701 /// (which eventually refers to the declaration Func) and the call
9702 /// arguments Args/NumArgs, attempt to resolve the function call down
9703 /// to a specific function. If overload resolution succeeds, returns
9704 /// the function declaration produced by overload
9705 /// resolution. Otherwise, emits diagnostics, deletes all of the
9706 /// arguments and Fn, and returns NULL.
9707 ExprResult
9708 Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
9709                               SourceLocation LParenLoc,
9710                               Expr **Args, unsigned NumArgs,
9711                               SourceLocation RParenLoc,
9712                               Expr *ExecConfig,
9713                               bool AllowTypoCorrection) {
9714 #ifndef NDEBUG
9715   if (ULE->requiresADL()) {
9716     // To do ADL, we must have found an unqualified name.
9717     assert(!ULE->getQualifier() && "qualified name with ADL");
9718 
9719     // We don't perform ADL for implicit declarations of builtins.
9720     // Verify that this was correctly set up.
9721     FunctionDecl *F;
9722     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
9723         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
9724         F->getBuiltinID() && F->isImplicit())
9725       llvm_unreachable("performing ADL for builtin");
9726 
9727     // We don't perform ADL in C.
9728     assert(getLangOpts().CPlusPlus && "ADL enabled in C");
9729   } else
9730     assert(!ULE->isStdAssociatedNamespace() &&
9731            "std is associated namespace but not doing ADL");
9732 #endif
9733 
9734   UnbridgedCastsSet UnbridgedCasts;
9735   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
9736     return ExprError();
9737 
9738   OverloadCandidateSet CandidateSet(Fn->getExprLoc());
9739 
9740   // Add the functions denoted by the callee to the set of candidate
9741   // functions, including those from argument-dependent lookup.
9742   AddOverloadedCallCandidates(ULE, llvm::makeArrayRef(Args, NumArgs),
9743                               CandidateSet);
9744 
9745   // If we found nothing, try to recover.
9746   // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
9747   // out if it fails.
9748   if (CandidateSet.empty()) {
9749     // In Microsoft mode, if we are inside a template class member function then
9750     // create a type dependent CallExpr. The goal is to postpone name lookup
9751     // to instantiation time to be able to search into type dependent base
9752     // classes.
9753     if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
9754         (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
9755       CallExpr *CE = new (Context) CallExpr(Context, Fn, Args, NumArgs,
9756                                           Context.DependentTy, VK_RValue,
9757                                           RParenLoc);
9758       CE->setTypeDependent(true);
9759       return Owned(CE);
9760     }
9761     return BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc,
9762                                  llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9763                                  RParenLoc, /*EmptyLookup=*/true,
9764                                  AllowTypoCorrection);
9765   }
9766 
9767   UnbridgedCasts.restore();
9768 
9769   OverloadCandidateSet::iterator Best;
9770   switch (CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best)) {
9771   case OR_Success: {
9772     FunctionDecl *FDecl = Best->Function;
9773     MarkFunctionReferenced(Fn->getExprLoc(), FDecl);
9774     CheckUnresolvedLookupAccess(ULE, Best->FoundDecl);
9775     DiagnoseUseOfDecl(FDecl, ULE->getNameLoc());
9776     Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl);
9777     return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc,
9778                                  ExecConfig);
9779   }
9780 
9781   case OR_No_Viable_Function: {
9782     // Try to recover by looking for viable functions which the user might
9783     // have meant to call.
9784     ExprResult Recovery = BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc,
9785                                   llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9786                                                 RParenLoc,
9787                                                 /*EmptyLookup=*/false,
9788                                                 AllowTypoCorrection);
9789     if (!Recovery.isInvalid())
9790       return Recovery;
9791 
9792     Diag(Fn->getLocStart(),
9793          diag::err_ovl_no_viable_function_in_call)
9794       << ULE->getName() << Fn->getSourceRange();
9795     CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
9796                                 llvm::makeArrayRef(Args, NumArgs));
9797     break;
9798   }
9799 
9800   case OR_Ambiguous:
9801     Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
9802       << ULE->getName() << Fn->getSourceRange();
9803     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
9804                                 llvm::makeArrayRef(Args, NumArgs));
9805     break;
9806 
9807   case OR_Deleted:
9808     {
9809       Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
9810         << Best->Function->isDeleted()
9811         << ULE->getName()
9812         << getDeletedOrUnavailableSuffix(Best->Function)
9813         << Fn->getSourceRange();
9814       CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
9815                                   llvm::makeArrayRef(Args, NumArgs));
9816 
9817       // We emitted an error for the unvailable/deleted function call but keep
9818       // the call in the AST.
9819       FunctionDecl *FDecl = Best->Function;
9820       Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl);
9821       return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9822                                    RParenLoc, ExecConfig);
9823     }
9824   }
9825 
9826   // Overload resolution failed.
9827   return ExprError();
9828 }
9829 
9830 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
9831   return Functions.size() > 1 ||
9832     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
9833 }
9834 
9835 /// \brief Create a unary operation that may resolve to an overloaded
9836 /// operator.
9837 ///
9838 /// \param OpLoc The location of the operator itself (e.g., '*').
9839 ///
9840 /// \param OpcIn The UnaryOperator::Opcode that describes this
9841 /// operator.
9842 ///
9843 /// \param Functions The set of non-member functions that will be
9844 /// considered by overload resolution. The caller needs to build this
9845 /// set based on the context using, e.g.,
9846 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
9847 /// set should not contain any member functions; those will be added
9848 /// by CreateOverloadedUnaryOp().
9849 ///
9850 /// \param input The input argument.
9851 ExprResult
9852 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
9853                               const UnresolvedSetImpl &Fns,
9854                               Expr *Input) {
9855   UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
9856 
9857   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
9858   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
9859   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
9860   // TODO: provide better source location info.
9861   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
9862 
9863   if (checkPlaceholderForOverload(*this, Input))
9864     return ExprError();
9865 
9866   Expr *Args[2] = { Input, 0 };
9867   unsigned NumArgs = 1;
9868 
9869   // For post-increment and post-decrement, add the implicit '0' as
9870   // the second argument, so that we know this is a post-increment or
9871   // post-decrement.
9872   if (Opc == UO_PostInc || Opc == UO_PostDec) {
9873     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
9874     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
9875                                      SourceLocation());
9876     NumArgs = 2;
9877   }
9878 
9879   if (Input->isTypeDependent()) {
9880     if (Fns.empty())
9881       return Owned(new (Context) UnaryOperator(Input,
9882                                                Opc,
9883                                                Context.DependentTy,
9884                                                VK_RValue, OK_Ordinary,
9885                                                OpLoc));
9886 
9887     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
9888     UnresolvedLookupExpr *Fn
9889       = UnresolvedLookupExpr::Create(Context, NamingClass,
9890                                      NestedNameSpecifierLoc(), OpNameInfo,
9891                                      /*ADL*/ true, IsOverloaded(Fns),
9892                                      Fns.begin(), Fns.end());
9893     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
9894                                                   &Args[0], NumArgs,
9895                                                    Context.DependentTy,
9896                                                    VK_RValue,
9897                                                    OpLoc));
9898   }
9899 
9900   // Build an empty overload set.
9901   OverloadCandidateSet CandidateSet(OpLoc);
9902 
9903   // Add the candidates from the given function set.
9904   AddFunctionCandidates(Fns, llvm::makeArrayRef(Args, NumArgs), CandidateSet,
9905                         false);
9906 
9907   // Add operator candidates that are member functions.
9908   AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
9909 
9910   // Add candidates from ADL.
9911   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
9912                                        OpLoc, llvm::makeArrayRef(Args, NumArgs),
9913                                        /*ExplicitTemplateArgs*/ 0,
9914                                        CandidateSet);
9915 
9916   // Add builtin operator candidates.
9917   AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
9918 
9919   bool HadMultipleCandidates = (CandidateSet.size() > 1);
9920 
9921   // Perform overload resolution.
9922   OverloadCandidateSet::iterator Best;
9923   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
9924   case OR_Success: {
9925     // We found a built-in operator or an overloaded operator.
9926     FunctionDecl *FnDecl = Best->Function;
9927 
9928     if (FnDecl) {
9929       // We matched an overloaded operator. Build a call to that
9930       // operator.
9931 
9932       MarkFunctionReferenced(OpLoc, FnDecl);
9933 
9934       // Convert the arguments.
9935       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
9936         CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
9937 
9938         ExprResult InputRes =
9939           PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
9940                                               Best->FoundDecl, Method);
9941         if (InputRes.isInvalid())
9942           return ExprError();
9943         Input = InputRes.take();
9944       } else {
9945         // Convert the arguments.
9946         ExprResult InputInit
9947           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
9948                                                       Context,
9949                                                       FnDecl->getParamDecl(0)),
9950                                       SourceLocation(),
9951                                       Input);
9952         if (InputInit.isInvalid())
9953           return ExprError();
9954         Input = InputInit.take();
9955       }
9956 
9957       DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
9958 
9959       // Determine the result type.
9960       QualType ResultTy = FnDecl->getResultType();
9961       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
9962       ResultTy = ResultTy.getNonLValueExprType(Context);
9963 
9964       // Build the actual expression node.
9965       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
9966                                                 HadMultipleCandidates, OpLoc);
9967       if (FnExpr.isInvalid())
9968         return ExprError();
9969 
9970       Args[0] = Input;
9971       CallExpr *TheCall =
9972         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
9973                                           Args, NumArgs, ResultTy, VK, OpLoc);
9974 
9975       if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
9976                               FnDecl))
9977         return ExprError();
9978 
9979       return MaybeBindToTemporary(TheCall);
9980     } else {
9981       // We matched a built-in operator. Convert the arguments, then
9982       // break out so that we will build the appropriate built-in
9983       // operator node.
9984       ExprResult InputRes =
9985         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
9986                                   Best->Conversions[0], AA_Passing);
9987       if (InputRes.isInvalid())
9988         return ExprError();
9989       Input = InputRes.take();
9990       break;
9991     }
9992   }
9993 
9994   case OR_No_Viable_Function:
9995     // This is an erroneous use of an operator which can be overloaded by
9996     // a non-member function. Check for non-member operators which were
9997     // defined too late to be candidates.
9998     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc,
9999                                        llvm::makeArrayRef(Args, NumArgs)))
10000       // FIXME: Recover by calling the found function.
10001       return ExprError();
10002 
10003     // No viable function; fall through to handling this as a
10004     // built-in operator, which will produce an error message for us.
10005     break;
10006 
10007   case OR_Ambiguous:
10008     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10009         << UnaryOperator::getOpcodeStr(Opc)
10010         << Input->getType()
10011         << Input->getSourceRange();
10012     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10013                                 llvm::makeArrayRef(Args, NumArgs),
10014                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10015     return ExprError();
10016 
10017   case OR_Deleted:
10018     Diag(OpLoc, diag::err_ovl_deleted_oper)
10019       << Best->Function->isDeleted()
10020       << UnaryOperator::getOpcodeStr(Opc)
10021       << getDeletedOrUnavailableSuffix(Best->Function)
10022       << Input->getSourceRange();
10023     CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10024                                 llvm::makeArrayRef(Args, NumArgs),
10025                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10026     return ExprError();
10027   }
10028 
10029   // Either we found no viable overloaded operator or we matched a
10030   // built-in operator. In either case, fall through to trying to
10031   // build a built-in operation.
10032   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10033 }
10034 
10035 /// \brief Create a binary operation that may resolve to an overloaded
10036 /// operator.
10037 ///
10038 /// \param OpLoc The location of the operator itself (e.g., '+').
10039 ///
10040 /// \param OpcIn The BinaryOperator::Opcode that describes this
10041 /// operator.
10042 ///
10043 /// \param Functions The set of non-member functions that will be
10044 /// considered by overload resolution. The caller needs to build this
10045 /// set based on the context using, e.g.,
10046 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10047 /// set should not contain any member functions; those will be added
10048 /// by CreateOverloadedBinOp().
10049 ///
10050 /// \param LHS Left-hand argument.
10051 /// \param RHS Right-hand argument.
10052 ExprResult
10053 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10054                             unsigned OpcIn,
10055                             const UnresolvedSetImpl &Fns,
10056                             Expr *LHS, Expr *RHS) {
10057   Expr *Args[2] = { LHS, RHS };
10058   LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10059 
10060   BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10061   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10062   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10063 
10064   // If either side is type-dependent, create an appropriate dependent
10065   // expression.
10066   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10067     if (Fns.empty()) {
10068       // If there are no functions to store, just build a dependent
10069       // BinaryOperator or CompoundAssignment.
10070       if (Opc <= BO_Assign || Opc > BO_OrAssign)
10071         return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10072                                                   Context.DependentTy,
10073                                                   VK_RValue, OK_Ordinary,
10074                                                   OpLoc));
10075 
10076       return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10077                                                         Context.DependentTy,
10078                                                         VK_LValue,
10079                                                         OK_Ordinary,
10080                                                         Context.DependentTy,
10081                                                         Context.DependentTy,
10082                                                         OpLoc));
10083     }
10084 
10085     // FIXME: save results of ADL from here?
10086     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10087     // TODO: provide better source location info in DNLoc component.
10088     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10089     UnresolvedLookupExpr *Fn
10090       = UnresolvedLookupExpr::Create(Context, NamingClass,
10091                                      NestedNameSpecifierLoc(), OpNameInfo,
10092                                      /*ADL*/ true, IsOverloaded(Fns),
10093                                      Fns.begin(), Fns.end());
10094     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
10095                                                    Args, 2,
10096                                                    Context.DependentTy,
10097                                                    VK_RValue,
10098                                                    OpLoc));
10099   }
10100 
10101   // Always do placeholder-like conversions on the RHS.
10102   if (checkPlaceholderForOverload(*this, Args[1]))
10103     return ExprError();
10104 
10105   // Do placeholder-like conversion on the LHS; note that we should
10106   // not get here with a PseudoObject LHS.
10107   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10108   if (checkPlaceholderForOverload(*this, Args[0]))
10109     return ExprError();
10110 
10111   // If this is the assignment operator, we only perform overload resolution
10112   // if the left-hand side is a class or enumeration type. This is actually
10113   // a hack. The standard requires that we do overload resolution between the
10114   // various built-in candidates, but as DR507 points out, this can lead to
10115   // problems. So we do it this way, which pretty much follows what GCC does.
10116   // Note that we go the traditional code path for compound assignment forms.
10117   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10118     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10119 
10120   // If this is the .* operator, which is not overloadable, just
10121   // create a built-in binary operator.
10122   if (Opc == BO_PtrMemD)
10123     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10124 
10125   // Build an empty overload set.
10126   OverloadCandidateSet CandidateSet(OpLoc);
10127 
10128   // Add the candidates from the given function set.
10129   AddFunctionCandidates(Fns, Args, CandidateSet, false);
10130 
10131   // Add operator candidates that are member functions.
10132   AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10133 
10134   // Add candidates from ADL.
10135   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10136                                        OpLoc, Args,
10137                                        /*ExplicitTemplateArgs*/ 0,
10138                                        CandidateSet);
10139 
10140   // Add builtin operator candidates.
10141   AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10142 
10143   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10144 
10145   // Perform overload resolution.
10146   OverloadCandidateSet::iterator Best;
10147   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10148     case OR_Success: {
10149       // We found a built-in operator or an overloaded operator.
10150       FunctionDecl *FnDecl = Best->Function;
10151 
10152       if (FnDecl) {
10153         // We matched an overloaded operator. Build a call to that
10154         // operator.
10155 
10156         MarkFunctionReferenced(OpLoc, FnDecl);
10157 
10158         // Convert the arguments.
10159         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10160           // Best->Access is only meaningful for class members.
10161           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10162 
10163           ExprResult Arg1 =
10164             PerformCopyInitialization(
10165               InitializedEntity::InitializeParameter(Context,
10166                                                      FnDecl->getParamDecl(0)),
10167               SourceLocation(), Owned(Args[1]));
10168           if (Arg1.isInvalid())
10169             return ExprError();
10170 
10171           ExprResult Arg0 =
10172             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10173                                                 Best->FoundDecl, Method);
10174           if (Arg0.isInvalid())
10175             return ExprError();
10176           Args[0] = Arg0.takeAs<Expr>();
10177           Args[1] = RHS = Arg1.takeAs<Expr>();
10178         } else {
10179           // Convert the arguments.
10180           ExprResult Arg0 = PerformCopyInitialization(
10181             InitializedEntity::InitializeParameter(Context,
10182                                                    FnDecl->getParamDecl(0)),
10183             SourceLocation(), Owned(Args[0]));
10184           if (Arg0.isInvalid())
10185             return ExprError();
10186 
10187           ExprResult Arg1 =
10188             PerformCopyInitialization(
10189               InitializedEntity::InitializeParameter(Context,
10190                                                      FnDecl->getParamDecl(1)),
10191               SourceLocation(), Owned(Args[1]));
10192           if (Arg1.isInvalid())
10193             return ExprError();
10194           Args[0] = LHS = Arg0.takeAs<Expr>();
10195           Args[1] = RHS = Arg1.takeAs<Expr>();
10196         }
10197 
10198         DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
10199 
10200         // Determine the result type.
10201         QualType ResultTy = FnDecl->getResultType();
10202         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10203         ResultTy = ResultTy.getNonLValueExprType(Context);
10204 
10205         // Build the actual expression node.
10206         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10207                                                   HadMultipleCandidates, OpLoc);
10208         if (FnExpr.isInvalid())
10209           return ExprError();
10210 
10211         CXXOperatorCallExpr *TheCall =
10212           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10213                                             Args, 2, ResultTy, VK, OpLoc);
10214 
10215         if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10216                                 FnDecl))
10217           return ExprError();
10218 
10219         return MaybeBindToTemporary(TheCall);
10220       } else {
10221         // We matched a built-in operator. Convert the arguments, then
10222         // break out so that we will build the appropriate built-in
10223         // operator node.
10224         ExprResult ArgsRes0 =
10225           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10226                                     Best->Conversions[0], AA_Passing);
10227         if (ArgsRes0.isInvalid())
10228           return ExprError();
10229         Args[0] = ArgsRes0.take();
10230 
10231         ExprResult ArgsRes1 =
10232           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10233                                     Best->Conversions[1], AA_Passing);
10234         if (ArgsRes1.isInvalid())
10235           return ExprError();
10236         Args[1] = ArgsRes1.take();
10237         break;
10238       }
10239     }
10240 
10241     case OR_No_Viable_Function: {
10242       // C++ [over.match.oper]p9:
10243       //   If the operator is the operator , [...] and there are no
10244       //   viable functions, then the operator is assumed to be the
10245       //   built-in operator and interpreted according to clause 5.
10246       if (Opc == BO_Comma)
10247         break;
10248 
10249       // For class as left operand for assignment or compound assigment
10250       // operator do not fall through to handling in built-in, but report that
10251       // no overloaded assignment operator found
10252       ExprResult Result = ExprError();
10253       if (Args[0]->getType()->isRecordType() &&
10254           Opc >= BO_Assign && Opc <= BO_OrAssign) {
10255         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10256              << BinaryOperator::getOpcodeStr(Opc)
10257              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10258       } else {
10259         // This is an erroneous use of an operator which can be overloaded by
10260         // a non-member function. Check for non-member operators which were
10261         // defined too late to be candidates.
10262         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10263           // FIXME: Recover by calling the found function.
10264           return ExprError();
10265 
10266         // No viable function; try to create a built-in operation, which will
10267         // produce an error. Then, show the non-viable candidates.
10268         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10269       }
10270       assert(Result.isInvalid() &&
10271              "C++ binary operator overloading is missing candidates!");
10272       if (Result.isInvalid())
10273         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10274                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
10275       return move(Result);
10276     }
10277 
10278     case OR_Ambiguous:
10279       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10280           << BinaryOperator::getOpcodeStr(Opc)
10281           << Args[0]->getType() << Args[1]->getType()
10282           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10283       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10284                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10285       return ExprError();
10286 
10287     case OR_Deleted:
10288       if (isImplicitlyDeleted(Best->Function)) {
10289         CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10290         Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10291           << getSpecialMember(Method)
10292           << BinaryOperator::getOpcodeStr(Opc)
10293           << getDeletedOrUnavailableSuffix(Best->Function);
10294 
10295         if (getSpecialMember(Method) != CXXInvalid) {
10296           // The user probably meant to call this special member. Just
10297           // explain why it's deleted.
10298           NoteDeletedFunction(Method);
10299           return ExprError();
10300         }
10301       } else {
10302         Diag(OpLoc, diag::err_ovl_deleted_oper)
10303           << Best->Function->isDeleted()
10304           << BinaryOperator::getOpcodeStr(Opc)
10305           << getDeletedOrUnavailableSuffix(Best->Function)
10306           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10307       }
10308       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10309                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10310       return ExprError();
10311   }
10312 
10313   // We matched a built-in operator; build it.
10314   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10315 }
10316 
10317 ExprResult
10318 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10319                                          SourceLocation RLoc,
10320                                          Expr *Base, Expr *Idx) {
10321   Expr *Args[2] = { Base, Idx };
10322   DeclarationName OpName =
10323       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10324 
10325   // If either side is type-dependent, create an appropriate dependent
10326   // expression.
10327   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10328 
10329     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10330     // CHECKME: no 'operator' keyword?
10331     DeclarationNameInfo OpNameInfo(OpName, LLoc);
10332     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10333     UnresolvedLookupExpr *Fn
10334       = UnresolvedLookupExpr::Create(Context, NamingClass,
10335                                      NestedNameSpecifierLoc(), OpNameInfo,
10336                                      /*ADL*/ true, /*Overloaded*/ false,
10337                                      UnresolvedSetIterator(),
10338                                      UnresolvedSetIterator());
10339     // Can't add any actual overloads yet
10340 
10341     return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10342                                                    Args, 2,
10343                                                    Context.DependentTy,
10344                                                    VK_RValue,
10345                                                    RLoc));
10346   }
10347 
10348   // Handle placeholders on both operands.
10349   if (checkPlaceholderForOverload(*this, Args[0]))
10350     return ExprError();
10351   if (checkPlaceholderForOverload(*this, Args[1]))
10352     return ExprError();
10353 
10354   // Build an empty overload set.
10355   OverloadCandidateSet CandidateSet(LLoc);
10356 
10357   // Subscript can only be overloaded as a member function.
10358 
10359   // Add operator candidates that are member functions.
10360   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10361 
10362   // Add builtin operator candidates.
10363   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10364 
10365   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10366 
10367   // Perform overload resolution.
10368   OverloadCandidateSet::iterator Best;
10369   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10370     case OR_Success: {
10371       // We found a built-in operator or an overloaded operator.
10372       FunctionDecl *FnDecl = Best->Function;
10373 
10374       if (FnDecl) {
10375         // We matched an overloaded operator. Build a call to that
10376         // operator.
10377 
10378         MarkFunctionReferenced(LLoc, FnDecl);
10379 
10380         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10381         DiagnoseUseOfDecl(Best->FoundDecl, LLoc);
10382 
10383         // Convert the arguments.
10384         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10385         ExprResult Arg0 =
10386           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10387                                               Best->FoundDecl, Method);
10388         if (Arg0.isInvalid())
10389           return ExprError();
10390         Args[0] = Arg0.take();
10391 
10392         // Convert the arguments.
10393         ExprResult InputInit
10394           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10395                                                       Context,
10396                                                       FnDecl->getParamDecl(0)),
10397                                       SourceLocation(),
10398                                       Owned(Args[1]));
10399         if (InputInit.isInvalid())
10400           return ExprError();
10401 
10402         Args[1] = InputInit.takeAs<Expr>();
10403 
10404         // Determine the result type
10405         QualType ResultTy = FnDecl->getResultType();
10406         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10407         ResultTy = ResultTy.getNonLValueExprType(Context);
10408 
10409         // Build the actual expression node.
10410         DeclarationNameInfo OpLocInfo(OpName, LLoc);
10411         OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10412         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10413                                                   HadMultipleCandidates,
10414                                                   OpLocInfo.getLoc(),
10415                                                   OpLocInfo.getInfo());
10416         if (FnExpr.isInvalid())
10417           return ExprError();
10418 
10419         CXXOperatorCallExpr *TheCall =
10420           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10421                                             FnExpr.take(), Args, 2,
10422                                             ResultTy, VK, RLoc);
10423 
10424         if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10425                                 FnDecl))
10426           return ExprError();
10427 
10428         return MaybeBindToTemporary(TheCall);
10429       } else {
10430         // We matched a built-in operator. Convert the arguments, then
10431         // break out so that we will build the appropriate built-in
10432         // operator node.
10433         ExprResult ArgsRes0 =
10434           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10435                                     Best->Conversions[0], AA_Passing);
10436         if (ArgsRes0.isInvalid())
10437           return ExprError();
10438         Args[0] = ArgsRes0.take();
10439 
10440         ExprResult ArgsRes1 =
10441           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10442                                     Best->Conversions[1], AA_Passing);
10443         if (ArgsRes1.isInvalid())
10444           return ExprError();
10445         Args[1] = ArgsRes1.take();
10446 
10447         break;
10448       }
10449     }
10450 
10451     case OR_No_Viable_Function: {
10452       if (CandidateSet.empty())
10453         Diag(LLoc, diag::err_ovl_no_oper)
10454           << Args[0]->getType() << /*subscript*/ 0
10455           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10456       else
10457         Diag(LLoc, diag::err_ovl_no_viable_subscript)
10458           << Args[0]->getType()
10459           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10460       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10461                                   "[]", LLoc);
10462       return ExprError();
10463     }
10464 
10465     case OR_Ambiguous:
10466       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10467           << "[]"
10468           << Args[0]->getType() << Args[1]->getType()
10469           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10470       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10471                                   "[]", LLoc);
10472       return ExprError();
10473 
10474     case OR_Deleted:
10475       Diag(LLoc, diag::err_ovl_deleted_oper)
10476         << Best->Function->isDeleted() << "[]"
10477         << getDeletedOrUnavailableSuffix(Best->Function)
10478         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10479       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10480                                   "[]", LLoc);
10481       return ExprError();
10482     }
10483 
10484   // We matched a built-in operator; build it.
10485   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10486 }
10487 
10488 /// BuildCallToMemberFunction - Build a call to a member
10489 /// function. MemExpr is the expression that refers to the member
10490 /// function (and includes the object parameter), Args/NumArgs are the
10491 /// arguments to the function call (not including the object
10492 /// parameter). The caller needs to validate that the member
10493 /// expression refers to a non-static member function or an overloaded
10494 /// member function.
10495 ExprResult
10496 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10497                                 SourceLocation LParenLoc, Expr **Args,
10498                                 unsigned NumArgs, SourceLocation RParenLoc) {
10499   assert(MemExprE->getType() == Context.BoundMemberTy ||
10500          MemExprE->getType() == Context.OverloadTy);
10501 
10502   // Dig out the member expression. This holds both the object
10503   // argument and the member function we're referring to.
10504   Expr *NakedMemExpr = MemExprE->IgnoreParens();
10505 
10506   // Determine whether this is a call to a pointer-to-member function.
10507   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10508     assert(op->getType() == Context.BoundMemberTy);
10509     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10510 
10511     QualType fnType =
10512       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10513 
10514     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10515     QualType resultType = proto->getCallResultType(Context);
10516     ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10517 
10518     // Check that the object type isn't more qualified than the
10519     // member function we're calling.
10520     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10521 
10522     QualType objectType = op->getLHS()->getType();
10523     if (op->getOpcode() == BO_PtrMemI)
10524       objectType = objectType->castAs<PointerType>()->getPointeeType();
10525     Qualifiers objectQuals = objectType.getQualifiers();
10526 
10527     Qualifiers difference = objectQuals - funcQuals;
10528     difference.removeObjCGCAttr();
10529     difference.removeAddressSpace();
10530     if (difference) {
10531       std::string qualsString = difference.getAsString();
10532       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10533         << fnType.getUnqualifiedType()
10534         << qualsString
10535         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10536     }
10537 
10538     CXXMemberCallExpr *call
10539       = new (Context) CXXMemberCallExpr(Context, MemExprE, Args, NumArgs,
10540                                         resultType, valueKind, RParenLoc);
10541 
10542     if (CheckCallReturnType(proto->getResultType(),
10543                             op->getRHS()->getLocStart(),
10544                             call, 0))
10545       return ExprError();
10546 
10547     if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc))
10548       return ExprError();
10549 
10550     return MaybeBindToTemporary(call);
10551   }
10552 
10553   UnbridgedCastsSet UnbridgedCasts;
10554   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10555     return ExprError();
10556 
10557   MemberExpr *MemExpr;
10558   CXXMethodDecl *Method = 0;
10559   DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
10560   NestedNameSpecifier *Qualifier = 0;
10561   if (isa<MemberExpr>(NakedMemExpr)) {
10562     MemExpr = cast<MemberExpr>(NakedMemExpr);
10563     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
10564     FoundDecl = MemExpr->getFoundDecl();
10565     Qualifier = MemExpr->getQualifier();
10566     UnbridgedCasts.restore();
10567   } else {
10568     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
10569     Qualifier = UnresExpr->getQualifier();
10570 
10571     QualType ObjectType = UnresExpr->getBaseType();
10572     Expr::Classification ObjectClassification
10573       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
10574                             : UnresExpr->getBase()->Classify(Context);
10575 
10576     // Add overload candidates
10577     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
10578 
10579     // FIXME: avoid copy.
10580     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10581     if (UnresExpr->hasExplicitTemplateArgs()) {
10582       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10583       TemplateArgs = &TemplateArgsBuffer;
10584     }
10585 
10586     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
10587            E = UnresExpr->decls_end(); I != E; ++I) {
10588 
10589       NamedDecl *Func = *I;
10590       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
10591       if (isa<UsingShadowDecl>(Func))
10592         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
10593 
10594 
10595       // Microsoft supports direct constructor calls.
10596       if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
10597         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
10598                              llvm::makeArrayRef(Args, NumArgs), CandidateSet);
10599       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
10600         // If explicit template arguments were provided, we can't call a
10601         // non-template member function.
10602         if (TemplateArgs)
10603           continue;
10604 
10605         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
10606                            ObjectClassification,
10607                            llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10608                            /*SuppressUserConversions=*/false);
10609       } else {
10610         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
10611                                    I.getPair(), ActingDC, TemplateArgs,
10612                                    ObjectType,  ObjectClassification,
10613                                    llvm::makeArrayRef(Args, NumArgs),
10614                                    CandidateSet,
10615                                    /*SuppressUsedConversions=*/false);
10616       }
10617     }
10618 
10619     DeclarationName DeclName = UnresExpr->getMemberName();
10620 
10621     UnbridgedCasts.restore();
10622 
10623     OverloadCandidateSet::iterator Best;
10624     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
10625                                             Best)) {
10626     case OR_Success:
10627       Method = cast<CXXMethodDecl>(Best->Function);
10628       MarkFunctionReferenced(UnresExpr->getMemberLoc(), Method);
10629       FoundDecl = Best->FoundDecl;
10630       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
10631       DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc());
10632       break;
10633 
10634     case OR_No_Viable_Function:
10635       Diag(UnresExpr->getMemberLoc(),
10636            diag::err_ovl_no_viable_member_function_in_call)
10637         << DeclName << MemExprE->getSourceRange();
10638       CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10639                                   llvm::makeArrayRef(Args, NumArgs));
10640       // FIXME: Leaking incoming expressions!
10641       return ExprError();
10642 
10643     case OR_Ambiguous:
10644       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
10645         << DeclName << MemExprE->getSourceRange();
10646       CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10647                                   llvm::makeArrayRef(Args, NumArgs));
10648       // FIXME: Leaking incoming expressions!
10649       return ExprError();
10650 
10651     case OR_Deleted:
10652       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
10653         << Best->Function->isDeleted()
10654         << DeclName
10655         << getDeletedOrUnavailableSuffix(Best->Function)
10656         << MemExprE->getSourceRange();
10657       CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10658                                   llvm::makeArrayRef(Args, NumArgs));
10659       // FIXME: Leaking incoming expressions!
10660       return ExprError();
10661     }
10662 
10663     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
10664 
10665     // If overload resolution picked a static member, build a
10666     // non-member call based on that function.
10667     if (Method->isStatic()) {
10668       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
10669                                    Args, NumArgs, RParenLoc);
10670     }
10671 
10672     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
10673   }
10674 
10675   QualType ResultType = Method->getResultType();
10676   ExprValueKind VK = Expr::getValueKindForType(ResultType);
10677   ResultType = ResultType.getNonLValueExprType(Context);
10678 
10679   assert(Method && "Member call to something that isn't a method?");
10680   CXXMemberCallExpr *TheCall =
10681     new (Context) CXXMemberCallExpr(Context, MemExprE, Args, NumArgs,
10682                                     ResultType, VK, RParenLoc);
10683 
10684   // Check for a valid return type.
10685   if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
10686                           TheCall, Method))
10687     return ExprError();
10688 
10689   // Convert the object argument (for a non-static member function call).
10690   // We only need to do this if there was actually an overload; otherwise
10691   // it was done at lookup.
10692   if (!Method->isStatic()) {
10693     ExprResult ObjectArg =
10694       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
10695                                           FoundDecl, Method);
10696     if (ObjectArg.isInvalid())
10697       return ExprError();
10698     MemExpr->setBase(ObjectArg.take());
10699   }
10700 
10701   // Convert the rest of the arguments
10702   const FunctionProtoType *Proto =
10703     Method->getType()->getAs<FunctionProtoType>();
10704   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs,
10705                               RParenLoc))
10706     return ExprError();
10707 
10708   DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
10709 
10710   if (CheckFunctionCall(Method, TheCall))
10711     return ExprError();
10712 
10713   if ((isa<CXXConstructorDecl>(CurContext) ||
10714        isa<CXXDestructorDecl>(CurContext)) &&
10715       TheCall->getMethodDecl()->isPure()) {
10716     const CXXMethodDecl *MD = TheCall->getMethodDecl();
10717 
10718     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
10719       Diag(MemExpr->getLocStart(),
10720            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
10721         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
10722         << MD->getParent()->getDeclName();
10723 
10724       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
10725     }
10726   }
10727   return MaybeBindToTemporary(TheCall);
10728 }
10729 
10730 /// BuildCallToObjectOfClassType - Build a call to an object of class
10731 /// type (C++ [over.call.object]), which can end up invoking an
10732 /// overloaded function call operator (@c operator()) or performing a
10733 /// user-defined conversion on the object argument.
10734 ExprResult
10735 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
10736                                    SourceLocation LParenLoc,
10737                                    Expr **Args, unsigned NumArgs,
10738                                    SourceLocation RParenLoc) {
10739   if (checkPlaceholderForOverload(*this, Obj))
10740     return ExprError();
10741   ExprResult Object = Owned(Obj);
10742 
10743   UnbridgedCastsSet UnbridgedCasts;
10744   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10745     return ExprError();
10746 
10747   assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
10748   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
10749 
10750   // C++ [over.call.object]p1:
10751   //  If the primary-expression E in the function call syntax
10752   //  evaluates to a class object of type "cv T", then the set of
10753   //  candidate functions includes at least the function call
10754   //  operators of T. The function call operators of T are obtained by
10755   //  ordinary lookup of the name operator() in the context of
10756   //  (E).operator().
10757   OverloadCandidateSet CandidateSet(LParenLoc);
10758   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
10759 
10760   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
10761                           diag::err_incomplete_object_call, Object.get()))
10762     return true;
10763 
10764   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
10765   LookupQualifiedName(R, Record->getDecl());
10766   R.suppressDiagnostics();
10767 
10768   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
10769        Oper != OperEnd; ++Oper) {
10770     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
10771                        Object.get()->Classify(Context), Args, NumArgs, CandidateSet,
10772                        /*SuppressUserConversions=*/ false);
10773   }
10774 
10775   // C++ [over.call.object]p2:
10776   //   In addition, for each (non-explicit in C++0x) conversion function
10777   //   declared in T of the form
10778   //
10779   //        operator conversion-type-id () cv-qualifier;
10780   //
10781   //   where cv-qualifier is the same cv-qualification as, or a
10782   //   greater cv-qualification than, cv, and where conversion-type-id
10783   //   denotes the type "pointer to function of (P1,...,Pn) returning
10784   //   R", or the type "reference to pointer to function of
10785   //   (P1,...,Pn) returning R", or the type "reference to function
10786   //   of (P1,...,Pn) returning R", a surrogate call function [...]
10787   //   is also considered as a candidate function. Similarly,
10788   //   surrogate call functions are added to the set of candidate
10789   //   functions for each conversion function declared in an
10790   //   accessible base class provided the function is not hidden
10791   //   within T by another intervening declaration.
10792   const UnresolvedSetImpl *Conversions
10793     = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
10794   for (UnresolvedSetImpl::iterator I = Conversions->begin(),
10795          E = Conversions->end(); I != E; ++I) {
10796     NamedDecl *D = *I;
10797     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
10798     if (isa<UsingShadowDecl>(D))
10799       D = cast<UsingShadowDecl>(D)->getTargetDecl();
10800 
10801     // Skip over templated conversion functions; they aren't
10802     // surrogates.
10803     if (isa<FunctionTemplateDecl>(D))
10804       continue;
10805 
10806     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
10807     if (!Conv->isExplicit()) {
10808       // Strip the reference type (if any) and then the pointer type (if
10809       // any) to get down to what might be a function type.
10810       QualType ConvType = Conv->getConversionType().getNonReferenceType();
10811       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
10812         ConvType = ConvPtrType->getPointeeType();
10813 
10814       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
10815       {
10816         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
10817                               Object.get(), llvm::makeArrayRef(Args, NumArgs),
10818                               CandidateSet);
10819       }
10820     }
10821   }
10822 
10823   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10824 
10825   // Perform overload resolution.
10826   OverloadCandidateSet::iterator Best;
10827   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
10828                              Best)) {
10829   case OR_Success:
10830     // Overload resolution succeeded; we'll build the appropriate call
10831     // below.
10832     break;
10833 
10834   case OR_No_Viable_Function:
10835     if (CandidateSet.empty())
10836       Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
10837         << Object.get()->getType() << /*call*/ 1
10838         << Object.get()->getSourceRange();
10839     else
10840       Diag(Object.get()->getLocStart(),
10841            diag::err_ovl_no_viable_object_call)
10842         << Object.get()->getType() << Object.get()->getSourceRange();
10843     CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10844                                 llvm::makeArrayRef(Args, NumArgs));
10845     break;
10846 
10847   case OR_Ambiguous:
10848     Diag(Object.get()->getLocStart(),
10849          diag::err_ovl_ambiguous_object_call)
10850       << Object.get()->getType() << Object.get()->getSourceRange();
10851     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10852                                 llvm::makeArrayRef(Args, NumArgs));
10853     break;
10854 
10855   case OR_Deleted:
10856     Diag(Object.get()->getLocStart(),
10857          diag::err_ovl_deleted_object_call)
10858       << Best->Function->isDeleted()
10859       << Object.get()->getType()
10860       << getDeletedOrUnavailableSuffix(Best->Function)
10861       << Object.get()->getSourceRange();
10862     CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10863                                 llvm::makeArrayRef(Args, NumArgs));
10864     break;
10865   }
10866 
10867   if (Best == CandidateSet.end())
10868     return true;
10869 
10870   UnbridgedCasts.restore();
10871 
10872   if (Best->Function == 0) {
10873     // Since there is no function declaration, this is one of the
10874     // surrogate candidates. Dig out the conversion function.
10875     CXXConversionDecl *Conv
10876       = cast<CXXConversionDecl>(
10877                          Best->Conversions[0].UserDefined.ConversionFunction);
10878 
10879     CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10880     DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
10881 
10882     // We selected one of the surrogate functions that converts the
10883     // object parameter to a function pointer. Perform the conversion
10884     // on the object argument, then let ActOnCallExpr finish the job.
10885 
10886     // Create an implicit member expr to refer to the conversion operator.
10887     // and then call it.
10888     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
10889                                              Conv, HadMultipleCandidates);
10890     if (Call.isInvalid())
10891       return ExprError();
10892     // Record usage of conversion in an implicit cast.
10893     Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
10894                                           CK_UserDefinedConversion,
10895                                           Call.get(), 0, VK_RValue));
10896 
10897     return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs),
10898                          RParenLoc);
10899   }
10900 
10901   MarkFunctionReferenced(LParenLoc, Best->Function);
10902   CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10903   DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
10904 
10905   // We found an overloaded operator(). Build a CXXOperatorCallExpr
10906   // that calls this method, using Object for the implicit object
10907   // parameter and passing along the remaining arguments.
10908   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10909   const FunctionProtoType *Proto =
10910     Method->getType()->getAs<FunctionProtoType>();
10911 
10912   unsigned NumArgsInProto = Proto->getNumArgs();
10913   unsigned NumArgsToCheck = NumArgs;
10914 
10915   // Build the full argument list for the method call (the
10916   // implicit object parameter is placed at the beginning of the
10917   // list).
10918   Expr **MethodArgs;
10919   if (NumArgs < NumArgsInProto) {
10920     NumArgsToCheck = NumArgsInProto;
10921     MethodArgs = new Expr*[NumArgsInProto + 1];
10922   } else {
10923     MethodArgs = new Expr*[NumArgs + 1];
10924   }
10925   MethodArgs[0] = Object.get();
10926   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
10927     MethodArgs[ArgIdx + 1] = Args[ArgIdx];
10928 
10929   DeclarationNameInfo OpLocInfo(
10930                Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
10931   OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
10932   ExprResult NewFn = CreateFunctionRefExpr(*this, Method,
10933                                            HadMultipleCandidates,
10934                                            OpLocInfo.getLoc(),
10935                                            OpLocInfo.getInfo());
10936   if (NewFn.isInvalid())
10937     return true;
10938 
10939   // Once we've built TheCall, all of the expressions are properly
10940   // owned.
10941   QualType ResultTy = Method->getResultType();
10942   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10943   ResultTy = ResultTy.getNonLValueExprType(Context);
10944 
10945   CXXOperatorCallExpr *TheCall =
10946     new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
10947                                       MethodArgs, NumArgs + 1,
10948                                       ResultTy, VK, RParenLoc);
10949   delete [] MethodArgs;
10950 
10951   if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
10952                           Method))
10953     return true;
10954 
10955   // We may have default arguments. If so, we need to allocate more
10956   // slots in the call for them.
10957   if (NumArgs < NumArgsInProto)
10958     TheCall->setNumArgs(Context, NumArgsInProto + 1);
10959   else if (NumArgs > NumArgsInProto)
10960     NumArgsToCheck = NumArgsInProto;
10961 
10962   bool IsError = false;
10963 
10964   // Initialize the implicit object parameter.
10965   ExprResult ObjRes =
10966     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
10967                                         Best->FoundDecl, Method);
10968   if (ObjRes.isInvalid())
10969     IsError = true;
10970   else
10971     Object = move(ObjRes);
10972   TheCall->setArg(0, Object.take());
10973 
10974   // Check the argument types.
10975   for (unsigned i = 0; i != NumArgsToCheck; i++) {
10976     Expr *Arg;
10977     if (i < NumArgs) {
10978       Arg = Args[i];
10979 
10980       // Pass the argument.
10981 
10982       ExprResult InputInit
10983         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10984                                                     Context,
10985                                                     Method->getParamDecl(i)),
10986                                     SourceLocation(), Arg);
10987 
10988       IsError |= InputInit.isInvalid();
10989       Arg = InputInit.takeAs<Expr>();
10990     } else {
10991       ExprResult DefArg
10992         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
10993       if (DefArg.isInvalid()) {
10994         IsError = true;
10995         break;
10996       }
10997 
10998       Arg = DefArg.takeAs<Expr>();
10999     }
11000 
11001     TheCall->setArg(i + 1, Arg);
11002   }
11003 
11004   // If this is a variadic call, handle args passed through "...".
11005   if (Proto->isVariadic()) {
11006     // Promote the arguments (C99 6.5.2.2p7).
11007     for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
11008       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11009       IsError |= Arg.isInvalid();
11010       TheCall->setArg(i + 1, Arg.take());
11011     }
11012   }
11013 
11014   if (IsError) return true;
11015 
11016   DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
11017 
11018   if (CheckFunctionCall(Method, TheCall))
11019     return true;
11020 
11021   return MaybeBindToTemporary(TheCall);
11022 }
11023 
11024 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11025 ///  (if one exists), where @c Base is an expression of class type and
11026 /// @c Member is the name of the member we're trying to find.
11027 ExprResult
11028 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
11029   assert(Base->getType()->isRecordType() &&
11030          "left-hand side must have class type");
11031 
11032   if (checkPlaceholderForOverload(*this, Base))
11033     return ExprError();
11034 
11035   SourceLocation Loc = Base->getExprLoc();
11036 
11037   // C++ [over.ref]p1:
11038   //
11039   //   [...] An expression x->m is interpreted as (x.operator->())->m
11040   //   for a class object x of type T if T::operator->() exists and if
11041   //   the operator is selected as the best match function by the
11042   //   overload resolution mechanism (13.3).
11043   DeclarationName OpName =
11044     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11045   OverloadCandidateSet CandidateSet(Loc);
11046   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11047 
11048   if (RequireCompleteType(Loc, Base->getType(),
11049                           diag::err_typecheck_incomplete_tag, Base))
11050     return ExprError();
11051 
11052   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11053   LookupQualifiedName(R, BaseRecord->getDecl());
11054   R.suppressDiagnostics();
11055 
11056   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11057        Oper != OperEnd; ++Oper) {
11058     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11059                        0, 0, CandidateSet, /*SuppressUserConversions=*/false);
11060   }
11061 
11062   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11063 
11064   // Perform overload resolution.
11065   OverloadCandidateSet::iterator Best;
11066   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11067   case OR_Success:
11068     // Overload resolution succeeded; we'll build the call below.
11069     break;
11070 
11071   case OR_No_Viable_Function:
11072     if (CandidateSet.empty())
11073       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11074         << Base->getType() << Base->getSourceRange();
11075     else
11076       Diag(OpLoc, diag::err_ovl_no_viable_oper)
11077         << "operator->" << Base->getSourceRange();
11078     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11079     return ExprError();
11080 
11081   case OR_Ambiguous:
11082     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11083       << "->" << Base->getType() << Base->getSourceRange();
11084     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11085     return ExprError();
11086 
11087   case OR_Deleted:
11088     Diag(OpLoc,  diag::err_ovl_deleted_oper)
11089       << Best->Function->isDeleted()
11090       << "->"
11091       << getDeletedOrUnavailableSuffix(Best->Function)
11092       << Base->getSourceRange();
11093     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11094     return ExprError();
11095   }
11096 
11097   MarkFunctionReferenced(OpLoc, Best->Function);
11098   CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11099   DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
11100 
11101   // Convert the object parameter.
11102   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11103   ExprResult BaseResult =
11104     PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11105                                         Best->FoundDecl, Method);
11106   if (BaseResult.isInvalid())
11107     return ExprError();
11108   Base = BaseResult.take();
11109 
11110   // Build the operator call.
11111   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method,
11112                                             HadMultipleCandidates, OpLoc);
11113   if (FnExpr.isInvalid())
11114     return ExprError();
11115 
11116   QualType ResultTy = Method->getResultType();
11117   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11118   ResultTy = ResultTy.getNonLValueExprType(Context);
11119   CXXOperatorCallExpr *TheCall =
11120     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11121                                       &Base, 1, ResultTy, VK, OpLoc);
11122 
11123   if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11124                           Method))
11125           return ExprError();
11126 
11127   return MaybeBindToTemporary(TheCall);
11128 }
11129 
11130 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11131 /// a literal operator described by the provided lookup results.
11132 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11133                                           DeclarationNameInfo &SuffixInfo,
11134                                           ArrayRef<Expr*> Args,
11135                                           SourceLocation LitEndLoc,
11136                                        TemplateArgumentListInfo *TemplateArgs) {
11137   SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11138 
11139   OverloadCandidateSet CandidateSet(UDSuffixLoc);
11140   AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11141                         TemplateArgs);
11142 
11143   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11144 
11145   // Perform overload resolution. This will usually be trivial, but might need
11146   // to perform substitutions for a literal operator template.
11147   OverloadCandidateSet::iterator Best;
11148   switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11149   case OR_Success:
11150   case OR_Deleted:
11151     break;
11152 
11153   case OR_No_Viable_Function:
11154     Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11155       << R.getLookupName();
11156     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11157     return ExprError();
11158 
11159   case OR_Ambiguous:
11160     Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11161     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11162     return ExprError();
11163   }
11164 
11165   FunctionDecl *FD = Best->Function;
11166   MarkFunctionReferenced(UDSuffixLoc, FD);
11167   DiagnoseUseOfDecl(Best->FoundDecl, UDSuffixLoc);
11168 
11169   ExprResult Fn = CreateFunctionRefExpr(*this, FD, HadMultipleCandidates,
11170                                         SuffixInfo.getLoc(),
11171                                         SuffixInfo.getInfo());
11172   if (Fn.isInvalid())
11173     return true;
11174 
11175   // Check the argument types. This should almost always be a no-op, except
11176   // that array-to-pointer decay is applied to string literals.
11177   Expr *ConvArgs[2];
11178   for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) {
11179     ExprResult InputInit = PerformCopyInitialization(
11180       InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11181       SourceLocation(), Args[ArgIdx]);
11182     if (InputInit.isInvalid())
11183       return true;
11184     ConvArgs[ArgIdx] = InputInit.take();
11185   }
11186 
11187   QualType ResultTy = FD->getResultType();
11188   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11189   ResultTy = ResultTy.getNonLValueExprType(Context);
11190 
11191   UserDefinedLiteral *UDL =
11192     new (Context) UserDefinedLiteral(Context, Fn.take(), ConvArgs, Args.size(),
11193                                      ResultTy, VK, LitEndLoc, UDSuffixLoc);
11194 
11195   if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11196     return ExprError();
11197 
11198   if (CheckFunctionCall(FD, UDL))
11199     return ExprError();
11200 
11201   return MaybeBindToTemporary(UDL);
11202 }
11203 
11204 /// FixOverloadedFunctionReference - E is an expression that refers to
11205 /// a C++ overloaded function (possibly with some parentheses and
11206 /// perhaps a '&' around it). We have resolved the overloaded function
11207 /// to the function declaration Fn, so patch up the expression E to
11208 /// refer (possibly indirectly) to Fn. Returns the new expr.
11209 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11210                                            FunctionDecl *Fn) {
11211   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11212     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11213                                                    Found, Fn);
11214     if (SubExpr == PE->getSubExpr())
11215       return PE;
11216 
11217     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11218   }
11219 
11220   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11221     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11222                                                    Found, Fn);
11223     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11224                                SubExpr->getType()) &&
11225            "Implicit cast type cannot be determined from overload");
11226     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11227     if (SubExpr == ICE->getSubExpr())
11228       return ICE;
11229 
11230     return ImplicitCastExpr::Create(Context, ICE->getType(),
11231                                     ICE->getCastKind(),
11232                                     SubExpr, 0,
11233                                     ICE->getValueKind());
11234   }
11235 
11236   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11237     assert(UnOp->getOpcode() == UO_AddrOf &&
11238            "Can only take the address of an overloaded function");
11239     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11240       if (Method->isStatic()) {
11241         // Do nothing: static member functions aren't any different
11242         // from non-member functions.
11243       } else {
11244         // Fix the sub expression, which really has to be an
11245         // UnresolvedLookupExpr holding an overloaded member function
11246         // or template.
11247         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11248                                                        Found, Fn);
11249         if (SubExpr == UnOp->getSubExpr())
11250           return UnOp;
11251 
11252         assert(isa<DeclRefExpr>(SubExpr)
11253                && "fixed to something other than a decl ref");
11254         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11255                && "fixed to a member ref with no nested name qualifier");
11256 
11257         // We have taken the address of a pointer to member
11258         // function. Perform the computation here so that we get the
11259         // appropriate pointer to member type.
11260         QualType ClassType
11261           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11262         QualType MemPtrType
11263           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11264 
11265         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11266                                            VK_RValue, OK_Ordinary,
11267                                            UnOp->getOperatorLoc());
11268       }
11269     }
11270     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11271                                                    Found, Fn);
11272     if (SubExpr == UnOp->getSubExpr())
11273       return UnOp;
11274 
11275     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11276                                      Context.getPointerType(SubExpr->getType()),
11277                                        VK_RValue, OK_Ordinary,
11278                                        UnOp->getOperatorLoc());
11279   }
11280 
11281   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11282     // FIXME: avoid copy.
11283     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11284     if (ULE->hasExplicitTemplateArgs()) {
11285       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11286       TemplateArgs = &TemplateArgsBuffer;
11287     }
11288 
11289     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11290                                            ULE->getQualifierLoc(),
11291                                            ULE->getTemplateKeywordLoc(),
11292                                            Fn,
11293                                            /*enclosing*/ false, // FIXME?
11294                                            ULE->getNameLoc(),
11295                                            Fn->getType(),
11296                                            VK_LValue,
11297                                            Found.getDecl(),
11298                                            TemplateArgs);
11299     MarkDeclRefReferenced(DRE);
11300     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11301     return DRE;
11302   }
11303 
11304   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11305     // FIXME: avoid copy.
11306     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11307     if (MemExpr->hasExplicitTemplateArgs()) {
11308       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11309       TemplateArgs = &TemplateArgsBuffer;
11310     }
11311 
11312     Expr *Base;
11313 
11314     // If we're filling in a static method where we used to have an
11315     // implicit member access, rewrite to a simple decl ref.
11316     if (MemExpr->isImplicitAccess()) {
11317       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11318         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11319                                                MemExpr->getQualifierLoc(),
11320                                                MemExpr->getTemplateKeywordLoc(),
11321                                                Fn,
11322                                                /*enclosing*/ false,
11323                                                MemExpr->getMemberLoc(),
11324                                                Fn->getType(),
11325                                                VK_LValue,
11326                                                Found.getDecl(),
11327                                                TemplateArgs);
11328         MarkDeclRefReferenced(DRE);
11329         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11330         return DRE;
11331       } else {
11332         SourceLocation Loc = MemExpr->getMemberLoc();
11333         if (MemExpr->getQualifier())
11334           Loc = MemExpr->getQualifierLoc().getBeginLoc();
11335         CheckCXXThisCapture(Loc);
11336         Base = new (Context) CXXThisExpr(Loc,
11337                                          MemExpr->getBaseType(),
11338                                          /*isImplicit=*/true);
11339       }
11340     } else
11341       Base = MemExpr->getBase();
11342 
11343     ExprValueKind valueKind;
11344     QualType type;
11345     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11346       valueKind = VK_LValue;
11347       type = Fn->getType();
11348     } else {
11349       valueKind = VK_RValue;
11350       type = Context.BoundMemberTy;
11351     }
11352 
11353     MemberExpr *ME = MemberExpr::Create(Context, Base,
11354                                         MemExpr->isArrow(),
11355                                         MemExpr->getQualifierLoc(),
11356                                         MemExpr->getTemplateKeywordLoc(),
11357                                         Fn,
11358                                         Found,
11359                                         MemExpr->getMemberNameInfo(),
11360                                         TemplateArgs,
11361                                         type, valueKind, OK_Ordinary);
11362     ME->setHadMultipleCandidates(true);
11363     return ME;
11364   }
11365 
11366   llvm_unreachable("Invalid reference to overloaded function");
11367 }
11368 
11369 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11370                                                 DeclAccessPair Found,
11371                                                 FunctionDecl *Fn) {
11372   return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11373 }
11374 
11375 } // end namespace clang
11376