Home | History | Annotate | Download | only in Sema
      1 //===--- SemaOverload.cpp - C++ Overloading -------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file provides Sema routines for C++ overloading.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "clang/Sema/Overload.h"
     15 #include "clang/AST/ASTContext.h"
     16 #include "clang/AST/CXXInheritance.h"
     17 #include "clang/AST/DeclObjC.h"
     18 #include "clang/AST/Expr.h"
     19 #include "clang/AST/ExprCXX.h"
     20 #include "clang/AST/ExprObjC.h"
     21 #include "clang/AST/TypeOrdering.h"
     22 #include "clang/Basic/Diagnostic.h"
     23 #include "clang/Basic/PartialDiagnostic.h"
     24 #include "clang/Lex/Preprocessor.h"
     25 #include "clang/Sema/Initialization.h"
     26 #include "clang/Sema/Lookup.h"
     27 #include "clang/Sema/SemaInternal.h"
     28 #include "clang/Sema/Template.h"
     29 #include "clang/Sema/TemplateDeduction.h"
     30 #include "llvm/ADT/DenseSet.h"
     31 #include "llvm/ADT/STLExtras.h"
     32 #include "llvm/ADT/SmallPtrSet.h"
     33 #include "llvm/ADT/SmallString.h"
     34 #include <algorithm>
     35 
     36 namespace clang {
     37 using namespace sema;
     38 
     39 /// A convenience routine for creating a decayed reference to a function.
     40 static ExprResult
     41 CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl,
     42                       bool HadMultipleCandidates,
     43                       SourceLocation Loc = SourceLocation(),
     44                       const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
     45   if (S.DiagnoseUseOfDecl(FoundDecl, Loc))
     46     return ExprError();
     47   // If FoundDecl is different from Fn (such as if one is a template
     48   // and the other a specialization), make sure DiagnoseUseOfDecl is
     49   // called on both.
     50   // FIXME: This would be more comprehensively addressed by modifying
     51   // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
     52   // being used.
     53   if (FoundDecl != Fn && S.DiagnoseUseOfDecl(Fn, Loc))
     54     return ExprError();
     55   DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
     56                                                  VK_LValue, Loc, LocInfo);
     57   if (HadMultipleCandidates)
     58     DRE->setHadMultipleCandidates(true);
     59 
     60   S.MarkDeclRefReferenced(DRE);
     61 
     62   ExprResult E = S.Owned(DRE);
     63   E = S.DefaultFunctionArrayConversion(E.take());
     64   if (E.isInvalid())
     65     return ExprError();
     66   return E;
     67 }
     68 
     69 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
     70                                  bool InOverloadResolution,
     71                                  StandardConversionSequence &SCS,
     72                                  bool CStyle,
     73                                  bool AllowObjCWritebackConversion);
     74 
     75 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
     76                                                  QualType &ToType,
     77                                                  bool InOverloadResolution,
     78                                                  StandardConversionSequence &SCS,
     79                                                  bool CStyle);
     80 static OverloadingResult
     81 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
     82                         UserDefinedConversionSequence& User,
     83                         OverloadCandidateSet& Conversions,
     84                         bool AllowExplicit);
     85 
     86 
     87 static ImplicitConversionSequence::CompareKind
     88 CompareStandardConversionSequences(Sema &S,
     89                                    const StandardConversionSequence& SCS1,
     90                                    const StandardConversionSequence& SCS2);
     91 
     92 static ImplicitConversionSequence::CompareKind
     93 CompareQualificationConversions(Sema &S,
     94                                 const StandardConversionSequence& SCS1,
     95                                 const StandardConversionSequence& SCS2);
     96 
     97 static ImplicitConversionSequence::CompareKind
     98 CompareDerivedToBaseConversions(Sema &S,
     99                                 const StandardConversionSequence& SCS1,
    100                                 const StandardConversionSequence& SCS2);
    101 
    102 
    103 
    104 /// GetConversionCategory - Retrieve the implicit conversion
    105 /// category corresponding to the given implicit conversion kind.
    106 ImplicitConversionCategory
    107 GetConversionCategory(ImplicitConversionKind Kind) {
    108   static const ImplicitConversionCategory
    109     Category[(int)ICK_Num_Conversion_Kinds] = {
    110     ICC_Identity,
    111     ICC_Lvalue_Transformation,
    112     ICC_Lvalue_Transformation,
    113     ICC_Lvalue_Transformation,
    114     ICC_Identity,
    115     ICC_Qualification_Adjustment,
    116     ICC_Promotion,
    117     ICC_Promotion,
    118     ICC_Promotion,
    119     ICC_Conversion,
    120     ICC_Conversion,
    121     ICC_Conversion,
    122     ICC_Conversion,
    123     ICC_Conversion,
    124     ICC_Conversion,
    125     ICC_Conversion,
    126     ICC_Conversion,
    127     ICC_Conversion,
    128     ICC_Conversion,
    129     ICC_Conversion,
    130     ICC_Conversion,
    131     ICC_Conversion
    132   };
    133   return Category[(int)Kind];
    134 }
    135 
    136 /// GetConversionRank - Retrieve the implicit conversion rank
    137 /// corresponding to the given implicit conversion kind.
    138 ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
    139   static const ImplicitConversionRank
    140     Rank[(int)ICK_Num_Conversion_Kinds] = {
    141     ICR_Exact_Match,
    142     ICR_Exact_Match,
    143     ICR_Exact_Match,
    144     ICR_Exact_Match,
    145     ICR_Exact_Match,
    146     ICR_Exact_Match,
    147     ICR_Promotion,
    148     ICR_Promotion,
    149     ICR_Promotion,
    150     ICR_Conversion,
    151     ICR_Conversion,
    152     ICR_Conversion,
    153     ICR_Conversion,
    154     ICR_Conversion,
    155     ICR_Conversion,
    156     ICR_Conversion,
    157     ICR_Conversion,
    158     ICR_Conversion,
    159     ICR_Conversion,
    160     ICR_Conversion,
    161     ICR_Complex_Real_Conversion,
    162     ICR_Conversion,
    163     ICR_Conversion,
    164     ICR_Writeback_Conversion
    165   };
    166   return Rank[(int)Kind];
    167 }
    168 
    169 /// GetImplicitConversionName - Return the name of this kind of
    170 /// implicit conversion.
    171 const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
    172   static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
    173     "No conversion",
    174     "Lvalue-to-rvalue",
    175     "Array-to-pointer",
    176     "Function-to-pointer",
    177     "Noreturn adjustment",
    178     "Qualification",
    179     "Integral promotion",
    180     "Floating point promotion",
    181     "Complex promotion",
    182     "Integral conversion",
    183     "Floating conversion",
    184     "Complex conversion",
    185     "Floating-integral conversion",
    186     "Pointer conversion",
    187     "Pointer-to-member conversion",
    188     "Boolean conversion",
    189     "Compatible-types conversion",
    190     "Derived-to-base conversion",
    191     "Vector conversion",
    192     "Vector splat",
    193     "Complex-real conversion",
    194     "Block Pointer conversion",
    195     "Transparent Union Conversion"
    196     "Writeback conversion"
    197   };
    198   return Name[Kind];
    199 }
    200 
    201 /// StandardConversionSequence - Set the standard conversion
    202 /// sequence to the identity conversion.
    203 void StandardConversionSequence::setAsIdentityConversion() {
    204   First = ICK_Identity;
    205   Second = ICK_Identity;
    206   Third = ICK_Identity;
    207   DeprecatedStringLiteralToCharPtr = false;
    208   QualificationIncludesObjCLifetime = false;
    209   ReferenceBinding = false;
    210   DirectBinding = false;
    211   IsLvalueReference = true;
    212   BindsToFunctionLvalue = false;
    213   BindsToRvalue = false;
    214   BindsImplicitObjectArgumentWithoutRefQualifier = false;
    215   ObjCLifetimeConversionBinding = false;
    216   CopyConstructor = 0;
    217 }
    218 
    219 /// getRank - Retrieve the rank of this standard conversion sequence
    220 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
    221 /// implicit conversions.
    222 ImplicitConversionRank StandardConversionSequence::getRank() const {
    223   ImplicitConversionRank Rank = ICR_Exact_Match;
    224   if  (GetConversionRank(First) > Rank)
    225     Rank = GetConversionRank(First);
    226   if  (GetConversionRank(Second) > Rank)
    227     Rank = GetConversionRank(Second);
    228   if  (GetConversionRank(Third) > Rank)
    229     Rank = GetConversionRank(Third);
    230   return Rank;
    231 }
    232 
    233 /// isPointerConversionToBool - Determines whether this conversion is
    234 /// a conversion of a pointer or pointer-to-member to bool. This is
    235 /// used as part of the ranking of standard conversion sequences
    236 /// (C++ 13.3.3.2p4).
    237 bool StandardConversionSequence::isPointerConversionToBool() const {
    238   // Note that FromType has not necessarily been transformed by the
    239   // array-to-pointer or function-to-pointer implicit conversions, so
    240   // check for their presence as well as checking whether FromType is
    241   // a pointer.
    242   if (getToType(1)->isBooleanType() &&
    243       (getFromType()->isPointerType() ||
    244        getFromType()->isObjCObjectPointerType() ||
    245        getFromType()->isBlockPointerType() ||
    246        getFromType()->isNullPtrType() ||
    247        First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
    248     return true;
    249 
    250   return false;
    251 }
    252 
    253 /// isPointerConversionToVoidPointer - Determines whether this
    254 /// conversion is a conversion of a pointer to a void pointer. This is
    255 /// used as part of the ranking of standard conversion sequences (C++
    256 /// 13.3.3.2p4).
    257 bool
    258 StandardConversionSequence::
    259 isPointerConversionToVoidPointer(ASTContext& Context) const {
    260   QualType FromType = getFromType();
    261   QualType ToType = getToType(1);
    262 
    263   // Note that FromType has not necessarily been transformed by the
    264   // array-to-pointer implicit conversion, so check for its presence
    265   // and redo the conversion to get a pointer.
    266   if (First == ICK_Array_To_Pointer)
    267     FromType = Context.getArrayDecayedType(FromType);
    268 
    269   if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
    270     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
    271       return ToPtrType->getPointeeType()->isVoidType();
    272 
    273   return false;
    274 }
    275 
    276 /// Skip any implicit casts which could be either part of a narrowing conversion
    277 /// or after one in an implicit conversion.
    278 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
    279   while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
    280     switch (ICE->getCastKind()) {
    281     case CK_NoOp:
    282     case CK_IntegralCast:
    283     case CK_IntegralToBoolean:
    284     case CK_IntegralToFloating:
    285     case CK_FloatingToIntegral:
    286     case CK_FloatingToBoolean:
    287     case CK_FloatingCast:
    288       Converted = ICE->getSubExpr();
    289       continue;
    290 
    291     default:
    292       return Converted;
    293     }
    294   }
    295 
    296   return Converted;
    297 }
    298 
    299 /// Check if this standard conversion sequence represents a narrowing
    300 /// conversion, according to C++11 [dcl.init.list]p7.
    301 ///
    302 /// \param Ctx  The AST context.
    303 /// \param Converted  The result of applying this standard conversion sequence.
    304 /// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
    305 ///        value of the expression prior to the narrowing conversion.
    306 /// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
    307 ///        type of the expression prior to the narrowing conversion.
    308 NarrowingKind
    309 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
    310                                              const Expr *Converted,
    311                                              APValue &ConstantValue,
    312                                              QualType &ConstantType) const {
    313   assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
    314 
    315   // C++11 [dcl.init.list]p7:
    316   //   A narrowing conversion is an implicit conversion ...
    317   QualType FromType = getToType(0);
    318   QualType ToType = getToType(1);
    319   switch (Second) {
    320   // -- from a floating-point type to an integer type, or
    321   //
    322   // -- from an integer type or unscoped enumeration type to a floating-point
    323   //    type, except where the source is a constant expression and the actual
    324   //    value after conversion will fit into the target type and will produce
    325   //    the original value when converted back to the original type, or
    326   case ICK_Floating_Integral:
    327     if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
    328       return NK_Type_Narrowing;
    329     } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
    330       llvm::APSInt IntConstantValue;
    331       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
    332       if (Initializer &&
    333           Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
    334         // Convert the integer to the floating type.
    335         llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
    336         Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
    337                                 llvm::APFloat::rmNearestTiesToEven);
    338         // And back.
    339         llvm::APSInt ConvertedValue = IntConstantValue;
    340         bool ignored;
    341         Result.convertToInteger(ConvertedValue,
    342                                 llvm::APFloat::rmTowardZero, &ignored);
    343         // If the resulting value is different, this was a narrowing conversion.
    344         if (IntConstantValue != ConvertedValue) {
    345           ConstantValue = APValue(IntConstantValue);
    346           ConstantType = Initializer->getType();
    347           return NK_Constant_Narrowing;
    348         }
    349       } else {
    350         // Variables are always narrowings.
    351         return NK_Variable_Narrowing;
    352       }
    353     }
    354     return NK_Not_Narrowing;
    355 
    356   // -- from long double to double or float, or from double to float, except
    357   //    where the source is a constant expression and the actual value after
    358   //    conversion is within the range of values that can be represented (even
    359   //    if it cannot be represented exactly), or
    360   case ICK_Floating_Conversion:
    361     if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
    362         Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
    363       // FromType is larger than ToType.
    364       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
    365       if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
    366         // Constant!
    367         assert(ConstantValue.isFloat());
    368         llvm::APFloat FloatVal = ConstantValue.getFloat();
    369         // Convert the source value into the target type.
    370         bool ignored;
    371         llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
    372           Ctx.getFloatTypeSemantics(ToType),
    373           llvm::APFloat::rmNearestTiesToEven, &ignored);
    374         // If there was no overflow, the source value is within the range of
    375         // values that can be represented.
    376         if (ConvertStatus & llvm::APFloat::opOverflow) {
    377           ConstantType = Initializer->getType();
    378           return NK_Constant_Narrowing;
    379         }
    380       } else {
    381         return NK_Variable_Narrowing;
    382       }
    383     }
    384     return NK_Not_Narrowing;
    385 
    386   // -- from an integer type or unscoped enumeration type to an integer type
    387   //    that cannot represent all the values of the original type, except where
    388   //    the source is a constant expression and the actual value after
    389   //    conversion will fit into the target type and will produce the original
    390   //    value when converted back to the original type.
    391   case ICK_Boolean_Conversion:  // Bools are integers too.
    392     if (!FromType->isIntegralOrUnscopedEnumerationType()) {
    393       // Boolean conversions can be from pointers and pointers to members
    394       // [conv.bool], and those aren't considered narrowing conversions.
    395       return NK_Not_Narrowing;
    396     }  // Otherwise, fall through to the integral case.
    397   case ICK_Integral_Conversion: {
    398     assert(FromType->isIntegralOrUnscopedEnumerationType());
    399     assert(ToType->isIntegralOrUnscopedEnumerationType());
    400     const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
    401     const unsigned FromWidth = Ctx.getIntWidth(FromType);
    402     const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
    403     const unsigned ToWidth = Ctx.getIntWidth(ToType);
    404 
    405     if (FromWidth > ToWidth ||
    406         (FromWidth == ToWidth && FromSigned != ToSigned) ||
    407         (FromSigned && !ToSigned)) {
    408       // Not all values of FromType can be represented in ToType.
    409       llvm::APSInt InitializerValue;
    410       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
    411       if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
    412         // Such conversions on variables are always narrowing.
    413         return NK_Variable_Narrowing;
    414       }
    415       bool Narrowing = false;
    416       if (FromWidth < ToWidth) {
    417         // Negative -> unsigned is narrowing. Otherwise, more bits is never
    418         // narrowing.
    419         if (InitializerValue.isSigned() && InitializerValue.isNegative())
    420           Narrowing = true;
    421       } else {
    422         // Add a bit to the InitializerValue so we don't have to worry about
    423         // signed vs. unsigned comparisons.
    424         InitializerValue = InitializerValue.extend(
    425           InitializerValue.getBitWidth() + 1);
    426         // Convert the initializer to and from the target width and signed-ness.
    427         llvm::APSInt ConvertedValue = InitializerValue;
    428         ConvertedValue = ConvertedValue.trunc(ToWidth);
    429         ConvertedValue.setIsSigned(ToSigned);
    430         ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
    431         ConvertedValue.setIsSigned(InitializerValue.isSigned());
    432         // If the result is different, this was a narrowing conversion.
    433         if (ConvertedValue != InitializerValue)
    434           Narrowing = true;
    435       }
    436       if (Narrowing) {
    437         ConstantType = Initializer->getType();
    438         ConstantValue = APValue(InitializerValue);
    439         return NK_Constant_Narrowing;
    440       }
    441     }
    442     return NK_Not_Narrowing;
    443   }
    444 
    445   default:
    446     // Other kinds of conversions are not narrowings.
    447     return NK_Not_Narrowing;
    448   }
    449 }
    450 
    451 /// DebugPrint - Print this standard conversion sequence to standard
    452 /// error. Useful for debugging overloading issues.
    453 void StandardConversionSequence::DebugPrint() const {
    454   raw_ostream &OS = llvm::errs();
    455   bool PrintedSomething = false;
    456   if (First != ICK_Identity) {
    457     OS << GetImplicitConversionName(First);
    458     PrintedSomething = true;
    459   }
    460 
    461   if (Second != ICK_Identity) {
    462     if (PrintedSomething) {
    463       OS << " -> ";
    464     }
    465     OS << GetImplicitConversionName(Second);
    466 
    467     if (CopyConstructor) {
    468       OS << " (by copy constructor)";
    469     } else if (DirectBinding) {
    470       OS << " (direct reference binding)";
    471     } else if (ReferenceBinding) {
    472       OS << " (reference binding)";
    473     }
    474     PrintedSomething = true;
    475   }
    476 
    477   if (Third != ICK_Identity) {
    478     if (PrintedSomething) {
    479       OS << " -> ";
    480     }
    481     OS << GetImplicitConversionName(Third);
    482     PrintedSomething = true;
    483   }
    484 
    485   if (!PrintedSomething) {
    486     OS << "No conversions required";
    487   }
    488 }
    489 
    490 /// DebugPrint - Print this user-defined conversion sequence to standard
    491 /// error. Useful for debugging overloading issues.
    492 void UserDefinedConversionSequence::DebugPrint() const {
    493   raw_ostream &OS = llvm::errs();
    494   if (Before.First || Before.Second || Before.Third) {
    495     Before.DebugPrint();
    496     OS << " -> ";
    497   }
    498   if (ConversionFunction)
    499     OS << '\'' << *ConversionFunction << '\'';
    500   else
    501     OS << "aggregate initialization";
    502   if (After.First || After.Second || After.Third) {
    503     OS << " -> ";
    504     After.DebugPrint();
    505   }
    506 }
    507 
    508 /// DebugPrint - Print this implicit conversion sequence to standard
    509 /// error. Useful for debugging overloading issues.
    510 void ImplicitConversionSequence::DebugPrint() const {
    511   raw_ostream &OS = llvm::errs();
    512   switch (ConversionKind) {
    513   case StandardConversion:
    514     OS << "Standard conversion: ";
    515     Standard.DebugPrint();
    516     break;
    517   case UserDefinedConversion:
    518     OS << "User-defined conversion: ";
    519     UserDefined.DebugPrint();
    520     break;
    521   case EllipsisConversion:
    522     OS << "Ellipsis conversion";
    523     break;
    524   case AmbiguousConversion:
    525     OS << "Ambiguous conversion";
    526     break;
    527   case BadConversion:
    528     OS << "Bad conversion";
    529     break;
    530   }
    531 
    532   OS << "\n";
    533 }
    534 
    535 void AmbiguousConversionSequence::construct() {
    536   new (&conversions()) ConversionSet();
    537 }
    538 
    539 void AmbiguousConversionSequence::destruct() {
    540   conversions().~ConversionSet();
    541 }
    542 
    543 void
    544 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
    545   FromTypePtr = O.FromTypePtr;
    546   ToTypePtr = O.ToTypePtr;
    547   new (&conversions()) ConversionSet(O.conversions());
    548 }
    549 
    550 namespace {
    551   // Structure used by DeductionFailureInfo to store
    552   // template argument information.
    553   struct DFIArguments {
    554     TemplateArgument FirstArg;
    555     TemplateArgument SecondArg;
    556   };
    557   // Structure used by DeductionFailureInfo to store
    558   // template parameter and template argument information.
    559   struct DFIParamWithArguments : DFIArguments {
    560     TemplateParameter Param;
    561   };
    562 }
    563 
    564 /// \brief Convert from Sema's representation of template deduction information
    565 /// to the form used in overload-candidate information.
    566 DeductionFailureInfo MakeDeductionFailureInfo(ASTContext &Context,
    567                                               Sema::TemplateDeductionResult TDK,
    568                                               TemplateDeductionInfo &Info) {
    569   DeductionFailureInfo Result;
    570   Result.Result = static_cast<unsigned>(TDK);
    571   Result.HasDiagnostic = false;
    572   Result.Data = 0;
    573   switch (TDK) {
    574   case Sema::TDK_Success:
    575   case Sema::TDK_Invalid:
    576   case Sema::TDK_InstantiationDepth:
    577   case Sema::TDK_TooManyArguments:
    578   case Sema::TDK_TooFewArguments:
    579     break;
    580 
    581   case Sema::TDK_Incomplete:
    582   case Sema::TDK_InvalidExplicitArguments:
    583     Result.Data = Info.Param.getOpaqueValue();
    584     break;
    585 
    586   case Sema::TDK_NonDeducedMismatch: {
    587     // FIXME: Should allocate from normal heap so that we can free this later.
    588     DFIArguments *Saved = new (Context) DFIArguments;
    589     Saved->FirstArg = Info.FirstArg;
    590     Saved->SecondArg = Info.SecondArg;
    591     Result.Data = Saved;
    592     break;
    593   }
    594 
    595   case Sema::TDK_Inconsistent:
    596   case Sema::TDK_Underqualified: {
    597     // FIXME: Should allocate from normal heap so that we can free this later.
    598     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
    599     Saved->Param = Info.Param;
    600     Saved->FirstArg = Info.FirstArg;
    601     Saved->SecondArg = Info.SecondArg;
    602     Result.Data = Saved;
    603     break;
    604   }
    605 
    606   case Sema::TDK_SubstitutionFailure:
    607     Result.Data = Info.take();
    608     if (Info.hasSFINAEDiagnostic()) {
    609       PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
    610           SourceLocation(), PartialDiagnostic::NullDiagnostic());
    611       Info.takeSFINAEDiagnostic(*Diag);
    612       Result.HasDiagnostic = true;
    613     }
    614     break;
    615 
    616   case Sema::TDK_FailedOverloadResolution:
    617     Result.Data = Info.Expression;
    618     break;
    619 
    620   case Sema::TDK_MiscellaneousDeductionFailure:
    621     break;
    622   }
    623 
    624   return Result;
    625 }
    626 
    627 void DeductionFailureInfo::Destroy() {
    628   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
    629   case Sema::TDK_Success:
    630   case Sema::TDK_Invalid:
    631   case Sema::TDK_InstantiationDepth:
    632   case Sema::TDK_Incomplete:
    633   case Sema::TDK_TooManyArguments:
    634   case Sema::TDK_TooFewArguments:
    635   case Sema::TDK_InvalidExplicitArguments:
    636   case Sema::TDK_FailedOverloadResolution:
    637     break;
    638 
    639   case Sema::TDK_Inconsistent:
    640   case Sema::TDK_Underqualified:
    641   case Sema::TDK_NonDeducedMismatch:
    642     // FIXME: Destroy the data?
    643     Data = 0;
    644     break;
    645 
    646   case Sema::TDK_SubstitutionFailure:
    647     // FIXME: Destroy the template argument list?
    648     Data = 0;
    649     if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
    650       Diag->~PartialDiagnosticAt();
    651       HasDiagnostic = false;
    652     }
    653     break;
    654 
    655   // Unhandled
    656   case Sema::TDK_MiscellaneousDeductionFailure:
    657     break;
    658   }
    659 }
    660 
    661 PartialDiagnosticAt *DeductionFailureInfo::getSFINAEDiagnostic() {
    662   if (HasDiagnostic)
    663     return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
    664   return 0;
    665 }
    666 
    667 TemplateParameter DeductionFailureInfo::getTemplateParameter() {
    668   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
    669   case Sema::TDK_Success:
    670   case Sema::TDK_Invalid:
    671   case Sema::TDK_InstantiationDepth:
    672   case Sema::TDK_TooManyArguments:
    673   case Sema::TDK_TooFewArguments:
    674   case Sema::TDK_SubstitutionFailure:
    675   case Sema::TDK_NonDeducedMismatch:
    676   case Sema::TDK_FailedOverloadResolution:
    677     return TemplateParameter();
    678 
    679   case Sema::TDK_Incomplete:
    680   case Sema::TDK_InvalidExplicitArguments:
    681     return TemplateParameter::getFromOpaqueValue(Data);
    682 
    683   case Sema::TDK_Inconsistent:
    684   case Sema::TDK_Underqualified:
    685     return static_cast<DFIParamWithArguments*>(Data)->Param;
    686 
    687   // Unhandled
    688   case Sema::TDK_MiscellaneousDeductionFailure:
    689     break;
    690   }
    691 
    692   return TemplateParameter();
    693 }
    694 
    695 TemplateArgumentList *DeductionFailureInfo::getTemplateArgumentList() {
    696   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
    697   case Sema::TDK_Success:
    698   case Sema::TDK_Invalid:
    699   case Sema::TDK_InstantiationDepth:
    700   case Sema::TDK_TooManyArguments:
    701   case Sema::TDK_TooFewArguments:
    702   case Sema::TDK_Incomplete:
    703   case Sema::TDK_InvalidExplicitArguments:
    704   case Sema::TDK_Inconsistent:
    705   case Sema::TDK_Underqualified:
    706   case Sema::TDK_NonDeducedMismatch:
    707   case Sema::TDK_FailedOverloadResolution:
    708     return 0;
    709 
    710   case Sema::TDK_SubstitutionFailure:
    711     return static_cast<TemplateArgumentList*>(Data);
    712 
    713   // Unhandled
    714   case Sema::TDK_MiscellaneousDeductionFailure:
    715     break;
    716   }
    717 
    718   return 0;
    719 }
    720 
    721 const TemplateArgument *DeductionFailureInfo::getFirstArg() {
    722   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
    723   case Sema::TDK_Success:
    724   case Sema::TDK_Invalid:
    725   case Sema::TDK_InstantiationDepth:
    726   case Sema::TDK_Incomplete:
    727   case Sema::TDK_TooManyArguments:
    728   case Sema::TDK_TooFewArguments:
    729   case Sema::TDK_InvalidExplicitArguments:
    730   case Sema::TDK_SubstitutionFailure:
    731   case Sema::TDK_FailedOverloadResolution:
    732     return 0;
    733 
    734   case Sema::TDK_Inconsistent:
    735   case Sema::TDK_Underqualified:
    736   case Sema::TDK_NonDeducedMismatch:
    737     return &static_cast<DFIArguments*>(Data)->FirstArg;
    738 
    739   // Unhandled
    740   case Sema::TDK_MiscellaneousDeductionFailure:
    741     break;
    742   }
    743 
    744   return 0;
    745 }
    746 
    747 const TemplateArgument *DeductionFailureInfo::getSecondArg() {
    748   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
    749   case Sema::TDK_Success:
    750   case Sema::TDK_Invalid:
    751   case Sema::TDK_InstantiationDepth:
    752   case Sema::TDK_Incomplete:
    753   case Sema::TDK_TooManyArguments:
    754   case Sema::TDK_TooFewArguments:
    755   case Sema::TDK_InvalidExplicitArguments:
    756   case Sema::TDK_SubstitutionFailure:
    757   case Sema::TDK_FailedOverloadResolution:
    758     return 0;
    759 
    760   case Sema::TDK_Inconsistent:
    761   case Sema::TDK_Underqualified:
    762   case Sema::TDK_NonDeducedMismatch:
    763     return &static_cast<DFIArguments*>(Data)->SecondArg;
    764 
    765   // Unhandled
    766   case Sema::TDK_MiscellaneousDeductionFailure:
    767     break;
    768   }
    769 
    770   return 0;
    771 }
    772 
    773 Expr *DeductionFailureInfo::getExpr() {
    774   if (static_cast<Sema::TemplateDeductionResult>(Result) ==
    775         Sema::TDK_FailedOverloadResolution)
    776     return static_cast<Expr*>(Data);
    777 
    778   return 0;
    779 }
    780 
    781 void OverloadCandidateSet::destroyCandidates() {
    782   for (iterator i = begin(), e = end(); i != e; ++i) {
    783     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
    784       i->Conversions[ii].~ImplicitConversionSequence();
    785     if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
    786       i->DeductionFailure.Destroy();
    787   }
    788 }
    789 
    790 void OverloadCandidateSet::clear() {
    791   destroyCandidates();
    792   NumInlineSequences = 0;
    793   Candidates.clear();
    794   Functions.clear();
    795 }
    796 
    797 namespace {
    798   class UnbridgedCastsSet {
    799     struct Entry {
    800       Expr **Addr;
    801       Expr *Saved;
    802     };
    803     SmallVector<Entry, 2> Entries;
    804 
    805   public:
    806     void save(Sema &S, Expr *&E) {
    807       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
    808       Entry entry = { &E, E };
    809       Entries.push_back(entry);
    810       E = S.stripARCUnbridgedCast(E);
    811     }
    812 
    813     void restore() {
    814       for (SmallVectorImpl<Entry>::iterator
    815              i = Entries.begin(), e = Entries.end(); i != e; ++i)
    816         *i->Addr = i->Saved;
    817     }
    818   };
    819 }
    820 
    821 /// checkPlaceholderForOverload - Do any interesting placeholder-like
    822 /// preprocessing on the given expression.
    823 ///
    824 /// \param unbridgedCasts a collection to which to add unbridged casts;
    825 ///   without this, they will be immediately diagnosed as errors
    826 ///
    827 /// Return true on unrecoverable error.
    828 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
    829                                         UnbridgedCastsSet *unbridgedCasts = 0) {
    830   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
    831     // We can't handle overloaded expressions here because overload
    832     // resolution might reasonably tweak them.
    833     if (placeholder->getKind() == BuiltinType::Overload) return false;
    834 
    835     // If the context potentially accepts unbridged ARC casts, strip
    836     // the unbridged cast and add it to the collection for later restoration.
    837     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
    838         unbridgedCasts) {
    839       unbridgedCasts->save(S, E);
    840       return false;
    841     }
    842 
    843     // Go ahead and check everything else.
    844     ExprResult result = S.CheckPlaceholderExpr(E);
    845     if (result.isInvalid())
    846       return true;
    847 
    848     E = result.take();
    849     return false;
    850   }
    851 
    852   // Nothing to do.
    853   return false;
    854 }
    855 
    856 /// checkArgPlaceholdersForOverload - Check a set of call operands for
    857 /// placeholders.
    858 static bool checkArgPlaceholdersForOverload(Sema &S,
    859                                             MultiExprArg Args,
    860                                             UnbridgedCastsSet &unbridged) {
    861   for (unsigned i = 0, e = Args.size(); i != e; ++i)
    862     if (checkPlaceholderForOverload(S, Args[i], &unbridged))
    863       return true;
    864 
    865   return false;
    866 }
    867 
    868 // IsOverload - Determine whether the given New declaration is an
    869 // overload of the declarations in Old. This routine returns false if
    870 // New and Old cannot be overloaded, e.g., if New has the same
    871 // signature as some function in Old (C++ 1.3.10) or if the Old
    872 // declarations aren't functions (or function templates) at all. When
    873 // it does return false, MatchedDecl will point to the decl that New
    874 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
    875 // top of the underlying declaration.
    876 //
    877 // Example: Given the following input:
    878 //
    879 //   void f(int, float); // #1
    880 //   void f(int, int); // #2
    881 //   int f(int, int); // #3
    882 //
    883 // When we process #1, there is no previous declaration of "f",
    884 // so IsOverload will not be used.
    885 //
    886 // When we process #2, Old contains only the FunctionDecl for #1.  By
    887 // comparing the parameter types, we see that #1 and #2 are overloaded
    888 // (since they have different signatures), so this routine returns
    889 // false; MatchedDecl is unchanged.
    890 //
    891 // When we process #3, Old is an overload set containing #1 and #2. We
    892 // compare the signatures of #3 to #1 (they're overloaded, so we do
    893 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
    894 // identical (return types of functions are not part of the
    895 // signature), IsOverload returns false and MatchedDecl will be set to
    896 // point to the FunctionDecl for #2.
    897 //
    898 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
    899 // into a class by a using declaration.  The rules for whether to hide
    900 // shadow declarations ignore some properties which otherwise figure
    901 // into a function template's signature.
    902 Sema::OverloadKind
    903 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
    904                     NamedDecl *&Match, bool NewIsUsingDecl) {
    905   for (LookupResult::iterator I = Old.begin(), E = Old.end();
    906          I != E; ++I) {
    907     NamedDecl *OldD = *I;
    908 
    909     bool OldIsUsingDecl = false;
    910     if (isa<UsingShadowDecl>(OldD)) {
    911       OldIsUsingDecl = true;
    912 
    913       // We can always introduce two using declarations into the same
    914       // context, even if they have identical signatures.
    915       if (NewIsUsingDecl) continue;
    916 
    917       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
    918     }
    919 
    920     // If either declaration was introduced by a using declaration,
    921     // we'll need to use slightly different rules for matching.
    922     // Essentially, these rules are the normal rules, except that
    923     // function templates hide function templates with different
    924     // return types or template parameter lists.
    925     bool UseMemberUsingDeclRules =
    926       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
    927       !New->getFriendObjectKind();
    928 
    929     if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
    930       if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
    931         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
    932           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
    933           continue;
    934         }
    935 
    936         Match = *I;
    937         return Ovl_Match;
    938       }
    939     } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
    940       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
    941         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
    942           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
    943           continue;
    944         }
    945 
    946         if (!shouldLinkPossiblyHiddenDecl(*I, New))
    947           continue;
    948 
    949         Match = *I;
    950         return Ovl_Match;
    951       }
    952     } else if (isa<UsingDecl>(OldD)) {
    953       // We can overload with these, which can show up when doing
    954       // redeclaration checks for UsingDecls.
    955       assert(Old.getLookupKind() == LookupUsingDeclName);
    956     } else if (isa<TagDecl>(OldD)) {
    957       // We can always overload with tags by hiding them.
    958     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
    959       // Optimistically assume that an unresolved using decl will
    960       // overload; if it doesn't, we'll have to diagnose during
    961       // template instantiation.
    962     } else {
    963       // (C++ 13p1):
    964       //   Only function declarations can be overloaded; object and type
    965       //   declarations cannot be overloaded.
    966       Match = *I;
    967       return Ovl_NonFunction;
    968     }
    969   }
    970 
    971   return Ovl_Overload;
    972 }
    973 
    974 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
    975                       bool UseUsingDeclRules) {
    976   // C++ [basic.start.main]p2: This function shall not be overloaded.
    977   if (New->isMain())
    978     return false;
    979 
    980   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
    981   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
    982 
    983   // C++ [temp.fct]p2:
    984   //   A function template can be overloaded with other function templates
    985   //   and with normal (non-template) functions.
    986   if ((OldTemplate == 0) != (NewTemplate == 0))
    987     return true;
    988 
    989   // Is the function New an overload of the function Old?
    990   QualType OldQType = Context.getCanonicalType(Old->getType());
    991   QualType NewQType = Context.getCanonicalType(New->getType());
    992 
    993   // Compare the signatures (C++ 1.3.10) of the two functions to
    994   // determine whether they are overloads. If we find any mismatch
    995   // in the signature, they are overloads.
    996 
    997   // If either of these functions is a K&R-style function (no
    998   // prototype), then we consider them to have matching signatures.
    999   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
   1000       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
   1001     return false;
   1002 
   1003   const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
   1004   const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
   1005 
   1006   // The signature of a function includes the types of its
   1007   // parameters (C++ 1.3.10), which includes the presence or absence
   1008   // of the ellipsis; see C++ DR 357).
   1009   if (OldQType != NewQType &&
   1010       (OldType->getNumArgs() != NewType->getNumArgs() ||
   1011        OldType->isVariadic() != NewType->isVariadic() ||
   1012        !FunctionArgTypesAreEqual(OldType, NewType)))
   1013     return true;
   1014 
   1015   // C++ [temp.over.link]p4:
   1016   //   The signature of a function template consists of its function
   1017   //   signature, its return type and its template parameter list. The names
   1018   //   of the template parameters are significant only for establishing the
   1019   //   relationship between the template parameters and the rest of the
   1020   //   signature.
   1021   //
   1022   // We check the return type and template parameter lists for function
   1023   // templates first; the remaining checks follow.
   1024   //
   1025   // However, we don't consider either of these when deciding whether
   1026   // a member introduced by a shadow declaration is hidden.
   1027   if (!UseUsingDeclRules && NewTemplate &&
   1028       (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
   1029                                        OldTemplate->getTemplateParameters(),
   1030                                        false, TPL_TemplateMatch) ||
   1031        OldType->getResultType() != NewType->getResultType()))
   1032     return true;
   1033 
   1034   // If the function is a class member, its signature includes the
   1035   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
   1036   //
   1037   // As part of this, also check whether one of the member functions
   1038   // is static, in which case they are not overloads (C++
   1039   // 13.1p2). While not part of the definition of the signature,
   1040   // this check is important to determine whether these functions
   1041   // can be overloaded.
   1042   CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
   1043   CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
   1044   if (OldMethod && NewMethod &&
   1045       !OldMethod->isStatic() && !NewMethod->isStatic()) {
   1046     if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
   1047       if (!UseUsingDeclRules &&
   1048           (OldMethod->getRefQualifier() == RQ_None ||
   1049            NewMethod->getRefQualifier() == RQ_None)) {
   1050         // C++0x [over.load]p2:
   1051         //   - Member function declarations with the same name and the same
   1052         //     parameter-type-list as well as member function template
   1053         //     declarations with the same name, the same parameter-type-list, and
   1054         //     the same template parameter lists cannot be overloaded if any of
   1055         //     them, but not all, have a ref-qualifier (8.3.5).
   1056         Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
   1057           << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
   1058         Diag(OldMethod->getLocation(), diag::note_previous_declaration);
   1059       }
   1060       return true;
   1061     }
   1062 
   1063     // We may not have applied the implicit const for a constexpr member
   1064     // function yet (because we haven't yet resolved whether this is a static
   1065     // or non-static member function). Add it now, on the assumption that this
   1066     // is a redeclaration of OldMethod.
   1067     unsigned NewQuals = NewMethod->getTypeQualifiers();
   1068     if (!getLangOpts().CPlusPlus1y && NewMethod->isConstexpr() &&
   1069         !isa<CXXConstructorDecl>(NewMethod))
   1070       NewQuals |= Qualifiers::Const;
   1071     if (OldMethod->getTypeQualifiers() != NewQuals)
   1072       return true;
   1073   }
   1074 
   1075   // The signatures match; this is not an overload.
   1076   return false;
   1077 }
   1078 
   1079 /// \brief Checks availability of the function depending on the current
   1080 /// function context. Inside an unavailable function, unavailability is ignored.
   1081 ///
   1082 /// \returns true if \arg FD is unavailable and current context is inside
   1083 /// an available function, false otherwise.
   1084 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
   1085   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
   1086 }
   1087 
   1088 /// \brief Tries a user-defined conversion from From to ToType.
   1089 ///
   1090 /// Produces an implicit conversion sequence for when a standard conversion
   1091 /// is not an option. See TryImplicitConversion for more information.
   1092 static ImplicitConversionSequence
   1093 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
   1094                          bool SuppressUserConversions,
   1095                          bool AllowExplicit,
   1096                          bool InOverloadResolution,
   1097                          bool CStyle,
   1098                          bool AllowObjCWritebackConversion) {
   1099   ImplicitConversionSequence ICS;
   1100 
   1101   if (SuppressUserConversions) {
   1102     // We're not in the case above, so there is no conversion that
   1103     // we can perform.
   1104     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
   1105     return ICS;
   1106   }
   1107 
   1108   // Attempt user-defined conversion.
   1109   OverloadCandidateSet Conversions(From->getExprLoc());
   1110   OverloadingResult UserDefResult
   1111     = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
   1112                               AllowExplicit);
   1113 
   1114   if (UserDefResult == OR_Success) {
   1115     ICS.setUserDefined();
   1116     // C++ [over.ics.user]p4:
   1117     //   A conversion of an expression of class type to the same class
   1118     //   type is given Exact Match rank, and a conversion of an
   1119     //   expression of class type to a base class of that type is
   1120     //   given Conversion rank, in spite of the fact that a copy
   1121     //   constructor (i.e., a user-defined conversion function) is
   1122     //   called for those cases.
   1123     if (CXXConstructorDecl *Constructor
   1124           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
   1125       QualType FromCanon
   1126         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
   1127       QualType ToCanon
   1128         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
   1129       if (Constructor->isCopyConstructor() &&
   1130           (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
   1131         // Turn this into a "standard" conversion sequence, so that it
   1132         // gets ranked with standard conversion sequences.
   1133         ICS.setStandard();
   1134         ICS.Standard.setAsIdentityConversion();
   1135         ICS.Standard.setFromType(From->getType());
   1136         ICS.Standard.setAllToTypes(ToType);
   1137         ICS.Standard.CopyConstructor = Constructor;
   1138         if (ToCanon != FromCanon)
   1139           ICS.Standard.Second = ICK_Derived_To_Base;
   1140       }
   1141     }
   1142 
   1143     // C++ [over.best.ics]p4:
   1144     //   However, when considering the argument of a user-defined
   1145     //   conversion function that is a candidate by 13.3.1.3 when
   1146     //   invoked for the copying of the temporary in the second step
   1147     //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
   1148     //   13.3.1.6 in all cases, only standard conversion sequences and
   1149     //   ellipsis conversion sequences are allowed.
   1150     if (SuppressUserConversions && ICS.isUserDefined()) {
   1151       ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
   1152     }
   1153   } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
   1154     ICS.setAmbiguous();
   1155     ICS.Ambiguous.setFromType(From->getType());
   1156     ICS.Ambiguous.setToType(ToType);
   1157     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
   1158          Cand != Conversions.end(); ++Cand)
   1159       if (Cand->Viable)
   1160         ICS.Ambiguous.addConversion(Cand->Function);
   1161   } else {
   1162     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
   1163   }
   1164 
   1165   return ICS;
   1166 }
   1167 
   1168 /// TryImplicitConversion - Attempt to perform an implicit conversion
   1169 /// from the given expression (Expr) to the given type (ToType). This
   1170 /// function returns an implicit conversion sequence that can be used
   1171 /// to perform the initialization. Given
   1172 ///
   1173 ///   void f(float f);
   1174 ///   void g(int i) { f(i); }
   1175 ///
   1176 /// this routine would produce an implicit conversion sequence to
   1177 /// describe the initialization of f from i, which will be a standard
   1178 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
   1179 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
   1180 //
   1181 /// Note that this routine only determines how the conversion can be
   1182 /// performed; it does not actually perform the conversion. As such,
   1183 /// it will not produce any diagnostics if no conversion is available,
   1184 /// but will instead return an implicit conversion sequence of kind
   1185 /// "BadConversion".
   1186 ///
   1187 /// If @p SuppressUserConversions, then user-defined conversions are
   1188 /// not permitted.
   1189 /// If @p AllowExplicit, then explicit user-defined conversions are
   1190 /// permitted.
   1191 ///
   1192 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
   1193 /// writeback conversion, which allows __autoreleasing id* parameters to
   1194 /// be initialized with __strong id* or __weak id* arguments.
   1195 static ImplicitConversionSequence
   1196 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
   1197                       bool SuppressUserConversions,
   1198                       bool AllowExplicit,
   1199                       bool InOverloadResolution,
   1200                       bool CStyle,
   1201                       bool AllowObjCWritebackConversion) {
   1202   ImplicitConversionSequence ICS;
   1203   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
   1204                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
   1205     ICS.setStandard();
   1206     return ICS;
   1207   }
   1208 
   1209   if (!S.getLangOpts().CPlusPlus) {
   1210     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
   1211     return ICS;
   1212   }
   1213 
   1214   // C++ [over.ics.user]p4:
   1215   //   A conversion of an expression of class type to the same class
   1216   //   type is given Exact Match rank, and a conversion of an
   1217   //   expression of class type to a base class of that type is
   1218   //   given Conversion rank, in spite of the fact that a copy/move
   1219   //   constructor (i.e., a user-defined conversion function) is
   1220   //   called for those cases.
   1221   QualType FromType = From->getType();
   1222   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
   1223       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
   1224        S.IsDerivedFrom(FromType, ToType))) {
   1225     ICS.setStandard();
   1226     ICS.Standard.setAsIdentityConversion();
   1227     ICS.Standard.setFromType(FromType);
   1228     ICS.Standard.setAllToTypes(ToType);
   1229 
   1230     // We don't actually check at this point whether there is a valid
   1231     // copy/move constructor, since overloading just assumes that it
   1232     // exists. When we actually perform initialization, we'll find the
   1233     // appropriate constructor to copy the returned object, if needed.
   1234     ICS.Standard.CopyConstructor = 0;
   1235 
   1236     // Determine whether this is considered a derived-to-base conversion.
   1237     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
   1238       ICS.Standard.Second = ICK_Derived_To_Base;
   1239 
   1240     return ICS;
   1241   }
   1242 
   1243   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
   1244                                   AllowExplicit, InOverloadResolution, CStyle,
   1245                                   AllowObjCWritebackConversion);
   1246 }
   1247 
   1248 ImplicitConversionSequence
   1249 Sema::TryImplicitConversion(Expr *From, QualType ToType,
   1250                             bool SuppressUserConversions,
   1251                             bool AllowExplicit,
   1252                             bool InOverloadResolution,
   1253                             bool CStyle,
   1254                             bool AllowObjCWritebackConversion) {
   1255   return clang::TryImplicitConversion(*this, From, ToType,
   1256                                       SuppressUserConversions, AllowExplicit,
   1257                                       InOverloadResolution, CStyle,
   1258                                       AllowObjCWritebackConversion);
   1259 }
   1260 
   1261 /// PerformImplicitConversion - Perform an implicit conversion of the
   1262 /// expression From to the type ToType. Returns the
   1263 /// converted expression. Flavor is the kind of conversion we're
   1264 /// performing, used in the error message. If @p AllowExplicit,
   1265 /// explicit user-defined conversions are permitted.
   1266 ExprResult
   1267 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
   1268                                 AssignmentAction Action, bool AllowExplicit) {
   1269   ImplicitConversionSequence ICS;
   1270   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
   1271 }
   1272 
   1273 ExprResult
   1274 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
   1275                                 AssignmentAction Action, bool AllowExplicit,
   1276                                 ImplicitConversionSequence& ICS) {
   1277   if (checkPlaceholderForOverload(*this, From))
   1278     return ExprError();
   1279 
   1280   // Objective-C ARC: Determine whether we will allow the writeback conversion.
   1281   bool AllowObjCWritebackConversion
   1282     = getLangOpts().ObjCAutoRefCount &&
   1283       (Action == AA_Passing || Action == AA_Sending);
   1284 
   1285   ICS = clang::TryImplicitConversion(*this, From, ToType,
   1286                                      /*SuppressUserConversions=*/false,
   1287                                      AllowExplicit,
   1288                                      /*InOverloadResolution=*/false,
   1289                                      /*CStyle=*/false,
   1290                                      AllowObjCWritebackConversion);
   1291   return PerformImplicitConversion(From, ToType, ICS, Action);
   1292 }
   1293 
   1294 /// \brief Determine whether the conversion from FromType to ToType is a valid
   1295 /// conversion that strips "noreturn" off the nested function type.
   1296 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
   1297                                 QualType &ResultTy) {
   1298   if (Context.hasSameUnqualifiedType(FromType, ToType))
   1299     return false;
   1300 
   1301   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
   1302   // where F adds one of the following at most once:
   1303   //   - a pointer
   1304   //   - a member pointer
   1305   //   - a block pointer
   1306   CanQualType CanTo = Context.getCanonicalType(ToType);
   1307   CanQualType CanFrom = Context.getCanonicalType(FromType);
   1308   Type::TypeClass TyClass = CanTo->getTypeClass();
   1309   if (TyClass != CanFrom->getTypeClass()) return false;
   1310   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
   1311     if (TyClass == Type::Pointer) {
   1312       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
   1313       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
   1314     } else if (TyClass == Type::BlockPointer) {
   1315       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
   1316       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
   1317     } else if (TyClass == Type::MemberPointer) {
   1318       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
   1319       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
   1320     } else {
   1321       return false;
   1322     }
   1323 
   1324     TyClass = CanTo->getTypeClass();
   1325     if (TyClass != CanFrom->getTypeClass()) return false;
   1326     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
   1327       return false;
   1328   }
   1329 
   1330   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
   1331   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
   1332   if (!EInfo.getNoReturn()) return false;
   1333 
   1334   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
   1335   assert(QualType(FromFn, 0).isCanonical());
   1336   if (QualType(FromFn, 0) != CanTo) return false;
   1337 
   1338   ResultTy = ToType;
   1339   return true;
   1340 }
   1341 
   1342 /// \brief Determine whether the conversion from FromType to ToType is a valid
   1343 /// vector conversion.
   1344 ///
   1345 /// \param ICK Will be set to the vector conversion kind, if this is a vector
   1346 /// conversion.
   1347 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
   1348                                QualType ToType, ImplicitConversionKind &ICK) {
   1349   // We need at least one of these types to be a vector type to have a vector
   1350   // conversion.
   1351   if (!ToType->isVectorType() && !FromType->isVectorType())
   1352     return false;
   1353 
   1354   // Identical types require no conversions.
   1355   if (Context.hasSameUnqualifiedType(FromType, ToType))
   1356     return false;
   1357 
   1358   // There are no conversions between extended vector types, only identity.
   1359   if (ToType->isExtVectorType()) {
   1360     // There are no conversions between extended vector types other than the
   1361     // identity conversion.
   1362     if (FromType->isExtVectorType())
   1363       return false;
   1364 
   1365     // Vector splat from any arithmetic type to a vector.
   1366     if (FromType->isArithmeticType()) {
   1367       ICK = ICK_Vector_Splat;
   1368       return true;
   1369     }
   1370   }
   1371 
   1372   // We can perform the conversion between vector types in the following cases:
   1373   // 1)vector types are equivalent AltiVec and GCC vector types
   1374   // 2)lax vector conversions are permitted and the vector types are of the
   1375   //   same size
   1376   if (ToType->isVectorType() && FromType->isVectorType()) {
   1377     if (Context.areCompatibleVectorTypes(FromType, ToType) ||
   1378         (Context.getLangOpts().LaxVectorConversions &&
   1379          (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
   1380       ICK = ICK_Vector_Conversion;
   1381       return true;
   1382     }
   1383   }
   1384 
   1385   return false;
   1386 }
   1387 
   1388 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
   1389                                 bool InOverloadResolution,
   1390                                 StandardConversionSequence &SCS,
   1391                                 bool CStyle);
   1392 
   1393 /// IsStandardConversion - Determines whether there is a standard
   1394 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
   1395 /// expression From to the type ToType. Standard conversion sequences
   1396 /// only consider non-class types; for conversions that involve class
   1397 /// types, use TryImplicitConversion. If a conversion exists, SCS will
   1398 /// contain the standard conversion sequence required to perform this
   1399 /// conversion and this routine will return true. Otherwise, this
   1400 /// routine will return false and the value of SCS is unspecified.
   1401 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
   1402                                  bool InOverloadResolution,
   1403                                  StandardConversionSequence &SCS,
   1404                                  bool CStyle,
   1405                                  bool AllowObjCWritebackConversion) {
   1406   QualType FromType = From->getType();
   1407 
   1408   // Standard conversions (C++ [conv])
   1409   SCS.setAsIdentityConversion();
   1410   SCS.DeprecatedStringLiteralToCharPtr = false;
   1411   SCS.IncompatibleObjC = false;
   1412   SCS.setFromType(FromType);
   1413   SCS.CopyConstructor = 0;
   1414 
   1415   // There are no standard conversions for class types in C++, so
   1416   // abort early. When overloading in C, however, we do permit
   1417   if (FromType->isRecordType() || ToType->isRecordType()) {
   1418     if (S.getLangOpts().CPlusPlus)
   1419       return false;
   1420 
   1421     // When we're overloading in C, we allow, as standard conversions,
   1422   }
   1423 
   1424   // The first conversion can be an lvalue-to-rvalue conversion,
   1425   // array-to-pointer conversion, or function-to-pointer conversion
   1426   // (C++ 4p1).
   1427 
   1428   if (FromType == S.Context.OverloadTy) {
   1429     DeclAccessPair AccessPair;
   1430     if (FunctionDecl *Fn
   1431           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
   1432                                                  AccessPair)) {
   1433       // We were able to resolve the address of the overloaded function,
   1434       // so we can convert to the type of that function.
   1435       FromType = Fn->getType();
   1436 
   1437       // we can sometimes resolve &foo<int> regardless of ToType, so check
   1438       // if the type matches (identity) or we are converting to bool
   1439       if (!S.Context.hasSameUnqualifiedType(
   1440                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
   1441         QualType resultTy;
   1442         // if the function type matches except for [[noreturn]], it's ok
   1443         if (!S.IsNoReturnConversion(FromType,
   1444               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
   1445           // otherwise, only a boolean conversion is standard
   1446           if (!ToType->isBooleanType())
   1447             return false;
   1448       }
   1449 
   1450       // Check if the "from" expression is taking the address of an overloaded
   1451       // function and recompute the FromType accordingly. Take advantage of the
   1452       // fact that non-static member functions *must* have such an address-of
   1453       // expression.
   1454       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
   1455       if (Method && !Method->isStatic()) {
   1456         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
   1457                "Non-unary operator on non-static member address");
   1458         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
   1459                == UO_AddrOf &&
   1460                "Non-address-of operator on non-static member address");
   1461         const Type *ClassType
   1462           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
   1463         FromType = S.Context.getMemberPointerType(FromType, ClassType);
   1464       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
   1465         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
   1466                UO_AddrOf &&
   1467                "Non-address-of operator for overloaded function expression");
   1468         FromType = S.Context.getPointerType(FromType);
   1469       }
   1470 
   1471       // Check that we've computed the proper type after overload resolution.
   1472       assert(S.Context.hasSameType(
   1473         FromType,
   1474         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
   1475     } else {
   1476       return false;
   1477     }
   1478   }
   1479   // Lvalue-to-rvalue conversion (C++11 4.1):
   1480   //   A glvalue (3.10) of a non-function, non-array type T can
   1481   //   be converted to a prvalue.
   1482   bool argIsLValue = From->isGLValue();
   1483   if (argIsLValue &&
   1484       !FromType->isFunctionType() && !FromType->isArrayType() &&
   1485       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
   1486     SCS.First = ICK_Lvalue_To_Rvalue;
   1487 
   1488     // C11 6.3.2.1p2:
   1489     //   ... if the lvalue has atomic type, the value has the non-atomic version
   1490     //   of the type of the lvalue ...
   1491     if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
   1492       FromType = Atomic->getValueType();
   1493 
   1494     // If T is a non-class type, the type of the rvalue is the
   1495     // cv-unqualified version of T. Otherwise, the type of the rvalue
   1496     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
   1497     // just strip the qualifiers because they don't matter.
   1498     FromType = FromType.getUnqualifiedType();
   1499   } else if (FromType->isArrayType()) {
   1500     // Array-to-pointer conversion (C++ 4.2)
   1501     SCS.First = ICK_Array_To_Pointer;
   1502 
   1503     // An lvalue or rvalue of type "array of N T" or "array of unknown
   1504     // bound of T" can be converted to an rvalue of type "pointer to
   1505     // T" (C++ 4.2p1).
   1506     FromType = S.Context.getArrayDecayedType(FromType);
   1507 
   1508     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
   1509       // This conversion is deprecated. (C++ D.4).
   1510       SCS.DeprecatedStringLiteralToCharPtr = true;
   1511 
   1512       // For the purpose of ranking in overload resolution
   1513       // (13.3.3.1.1), this conversion is considered an
   1514       // array-to-pointer conversion followed by a qualification
   1515       // conversion (4.4). (C++ 4.2p2)
   1516       SCS.Second = ICK_Identity;
   1517       SCS.Third = ICK_Qualification;
   1518       SCS.QualificationIncludesObjCLifetime = false;
   1519       SCS.setAllToTypes(FromType);
   1520       return true;
   1521     }
   1522   } else if (FromType->isFunctionType() && argIsLValue) {
   1523     // Function-to-pointer conversion (C++ 4.3).
   1524     SCS.First = ICK_Function_To_Pointer;
   1525 
   1526     // An lvalue of function type T can be converted to an rvalue of
   1527     // type "pointer to T." The result is a pointer to the
   1528     // function. (C++ 4.3p1).
   1529     FromType = S.Context.getPointerType(FromType);
   1530   } else {
   1531     // We don't require any conversions for the first step.
   1532     SCS.First = ICK_Identity;
   1533   }
   1534   SCS.setToType(0, FromType);
   1535 
   1536   // The second conversion can be an integral promotion, floating
   1537   // point promotion, integral conversion, floating point conversion,
   1538   // floating-integral conversion, pointer conversion,
   1539   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
   1540   // For overloading in C, this can also be a "compatible-type"
   1541   // conversion.
   1542   bool IncompatibleObjC = false;
   1543   ImplicitConversionKind SecondICK = ICK_Identity;
   1544   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
   1545     // The unqualified versions of the types are the same: there's no
   1546     // conversion to do.
   1547     SCS.Second = ICK_Identity;
   1548   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
   1549     // Integral promotion (C++ 4.5).
   1550     SCS.Second = ICK_Integral_Promotion;
   1551     FromType = ToType.getUnqualifiedType();
   1552   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
   1553     // Floating point promotion (C++ 4.6).
   1554     SCS.Second = ICK_Floating_Promotion;
   1555     FromType = ToType.getUnqualifiedType();
   1556   } else if (S.IsComplexPromotion(FromType, ToType)) {
   1557     // Complex promotion (Clang extension)
   1558     SCS.Second = ICK_Complex_Promotion;
   1559     FromType = ToType.getUnqualifiedType();
   1560   } else if (ToType->isBooleanType() &&
   1561              (FromType->isArithmeticType() ||
   1562               FromType->isAnyPointerType() ||
   1563               FromType->isBlockPointerType() ||
   1564               FromType->isMemberPointerType() ||
   1565               FromType->isNullPtrType())) {
   1566     // Boolean conversions (C++ 4.12).
   1567     SCS.Second = ICK_Boolean_Conversion;
   1568     FromType = S.Context.BoolTy;
   1569   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
   1570              ToType->isIntegralType(S.Context)) {
   1571     // Integral conversions (C++ 4.7).
   1572     SCS.Second = ICK_Integral_Conversion;
   1573     FromType = ToType.getUnqualifiedType();
   1574   } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) {
   1575     // Complex conversions (C99 6.3.1.6)
   1576     SCS.Second = ICK_Complex_Conversion;
   1577     FromType = ToType.getUnqualifiedType();
   1578   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
   1579              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
   1580     // Complex-real conversions (C99 6.3.1.7)
   1581     SCS.Second = ICK_Complex_Real;
   1582     FromType = ToType.getUnqualifiedType();
   1583   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
   1584     // Floating point conversions (C++ 4.8).
   1585     SCS.Second = ICK_Floating_Conversion;
   1586     FromType = ToType.getUnqualifiedType();
   1587   } else if ((FromType->isRealFloatingType() &&
   1588               ToType->isIntegralType(S.Context)) ||
   1589              (FromType->isIntegralOrUnscopedEnumerationType() &&
   1590               ToType->isRealFloatingType())) {
   1591     // Floating-integral conversions (C++ 4.9).
   1592     SCS.Second = ICK_Floating_Integral;
   1593     FromType = ToType.getUnqualifiedType();
   1594   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
   1595     SCS.Second = ICK_Block_Pointer_Conversion;
   1596   } else if (AllowObjCWritebackConversion &&
   1597              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
   1598     SCS.Second = ICK_Writeback_Conversion;
   1599   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
   1600                                    FromType, IncompatibleObjC)) {
   1601     // Pointer conversions (C++ 4.10).
   1602     SCS.Second = ICK_Pointer_Conversion;
   1603     SCS.IncompatibleObjC = IncompatibleObjC;
   1604     FromType = FromType.getUnqualifiedType();
   1605   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
   1606                                          InOverloadResolution, FromType)) {
   1607     // Pointer to member conversions (4.11).
   1608     SCS.Second = ICK_Pointer_Member;
   1609   } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
   1610     SCS.Second = SecondICK;
   1611     FromType = ToType.getUnqualifiedType();
   1612   } else if (!S.getLangOpts().CPlusPlus &&
   1613              S.Context.typesAreCompatible(ToType, FromType)) {
   1614     // Compatible conversions (Clang extension for C function overloading)
   1615     SCS.Second = ICK_Compatible_Conversion;
   1616     FromType = ToType.getUnqualifiedType();
   1617   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
   1618     // Treat a conversion that strips "noreturn" as an identity conversion.
   1619     SCS.Second = ICK_NoReturn_Adjustment;
   1620   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
   1621                                              InOverloadResolution,
   1622                                              SCS, CStyle)) {
   1623     SCS.Second = ICK_TransparentUnionConversion;
   1624     FromType = ToType;
   1625   } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
   1626                                  CStyle)) {
   1627     // tryAtomicConversion has updated the standard conversion sequence
   1628     // appropriately.
   1629     return true;
   1630   } else if (ToType->isEventT() &&
   1631              From->isIntegerConstantExpr(S.getASTContext()) &&
   1632              (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
   1633     SCS.Second = ICK_Zero_Event_Conversion;
   1634     FromType = ToType;
   1635   } else {
   1636     // No second conversion required.
   1637     SCS.Second = ICK_Identity;
   1638   }
   1639   SCS.setToType(1, FromType);
   1640 
   1641   QualType CanonFrom;
   1642   QualType CanonTo;
   1643   // The third conversion can be a qualification conversion (C++ 4p1).
   1644   bool ObjCLifetimeConversion;
   1645   if (S.IsQualificationConversion(FromType, ToType, CStyle,
   1646                                   ObjCLifetimeConversion)) {
   1647     SCS.Third = ICK_Qualification;
   1648     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
   1649     FromType = ToType;
   1650     CanonFrom = S.Context.getCanonicalType(FromType);
   1651     CanonTo = S.Context.getCanonicalType(ToType);
   1652   } else {
   1653     // No conversion required
   1654     SCS.Third = ICK_Identity;
   1655 
   1656     // C++ [over.best.ics]p6:
   1657     //   [...] Any difference in top-level cv-qualification is
   1658     //   subsumed by the initialization itself and does not constitute
   1659     //   a conversion. [...]
   1660     CanonFrom = S.Context.getCanonicalType(FromType);
   1661     CanonTo = S.Context.getCanonicalType(ToType);
   1662     if (CanonFrom.getLocalUnqualifiedType()
   1663                                        == CanonTo.getLocalUnqualifiedType() &&
   1664         CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
   1665       FromType = ToType;
   1666       CanonFrom = CanonTo;
   1667     }
   1668   }
   1669   SCS.setToType(2, FromType);
   1670 
   1671   // If we have not converted the argument type to the parameter type,
   1672   // this is a bad conversion sequence.
   1673   if (CanonFrom != CanonTo)
   1674     return false;
   1675 
   1676   return true;
   1677 }
   1678 
   1679 static bool
   1680 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
   1681                                      QualType &ToType,
   1682                                      bool InOverloadResolution,
   1683                                      StandardConversionSequence &SCS,
   1684                                      bool CStyle) {
   1685 
   1686   const RecordType *UT = ToType->getAsUnionType();
   1687   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
   1688     return false;
   1689   // The field to initialize within the transparent union.
   1690   RecordDecl *UD = UT->getDecl();
   1691   // It's compatible if the expression matches any of the fields.
   1692   for (RecordDecl::field_iterator it = UD->field_begin(),
   1693        itend = UD->field_end();
   1694        it != itend; ++it) {
   1695     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
   1696                              CStyle, /*ObjCWritebackConversion=*/false)) {
   1697       ToType = it->getType();
   1698       return true;
   1699     }
   1700   }
   1701   return false;
   1702 }
   1703 
   1704 /// IsIntegralPromotion - Determines whether the conversion from the
   1705 /// expression From (whose potentially-adjusted type is FromType) to
   1706 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
   1707 /// sets PromotedType to the promoted type.
   1708 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
   1709   const BuiltinType *To = ToType->getAs<BuiltinType>();
   1710   // All integers are built-in.
   1711   if (!To) {
   1712     return false;
   1713   }
   1714 
   1715   // An rvalue of type char, signed char, unsigned char, short int, or
   1716   // unsigned short int can be converted to an rvalue of type int if
   1717   // int can represent all the values of the source type; otherwise,
   1718   // the source rvalue can be converted to an rvalue of type unsigned
   1719   // int (C++ 4.5p1).
   1720   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
   1721       !FromType->isEnumeralType()) {
   1722     if (// We can promote any signed, promotable integer type to an int
   1723         (FromType->isSignedIntegerType() ||
   1724          // We can promote any unsigned integer type whose size is
   1725          // less than int to an int.
   1726          (!FromType->isSignedIntegerType() &&
   1727           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
   1728       return To->getKind() == BuiltinType::Int;
   1729     }
   1730 
   1731     return To->getKind() == BuiltinType::UInt;
   1732   }
   1733 
   1734   // C++11 [conv.prom]p3:
   1735   //   A prvalue of an unscoped enumeration type whose underlying type is not
   1736   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
   1737   //   following types that can represent all the values of the enumeration
   1738   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
   1739   //   unsigned int, long int, unsigned long int, long long int, or unsigned
   1740   //   long long int. If none of the types in that list can represent all the
   1741   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
   1742   //   type can be converted to an rvalue a prvalue of the extended integer type
   1743   //   with lowest integer conversion rank (4.13) greater than the rank of long
   1744   //   long in which all the values of the enumeration can be represented. If
   1745   //   there are two such extended types, the signed one is chosen.
   1746   // C++11 [conv.prom]p4:
   1747   //   A prvalue of an unscoped enumeration type whose underlying type is fixed
   1748   //   can be converted to a prvalue of its underlying type. Moreover, if
   1749   //   integral promotion can be applied to its underlying type, a prvalue of an
   1750   //   unscoped enumeration type whose underlying type is fixed can also be
   1751   //   converted to a prvalue of the promoted underlying type.
   1752   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
   1753     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
   1754     // provided for a scoped enumeration.
   1755     if (FromEnumType->getDecl()->isScoped())
   1756       return false;
   1757 
   1758     // We can perform an integral promotion to the underlying type of the enum,
   1759     // even if that's not the promoted type.
   1760     if (FromEnumType->getDecl()->isFixed()) {
   1761       QualType Underlying = FromEnumType->getDecl()->getIntegerType();
   1762       return Context.hasSameUnqualifiedType(Underlying, ToType) ||
   1763              IsIntegralPromotion(From, Underlying, ToType);
   1764     }
   1765 
   1766     // We have already pre-calculated the promotion type, so this is trivial.
   1767     if (ToType->isIntegerType() &&
   1768         !RequireCompleteType(From->getLocStart(), FromType, 0))
   1769       return Context.hasSameUnqualifiedType(ToType,
   1770                                 FromEnumType->getDecl()->getPromotionType());
   1771   }
   1772 
   1773   // C++0x [conv.prom]p2:
   1774   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
   1775   //   to an rvalue a prvalue of the first of the following types that can
   1776   //   represent all the values of its underlying type: int, unsigned int,
   1777   //   long int, unsigned long int, long long int, or unsigned long long int.
   1778   //   If none of the types in that list can represent all the values of its
   1779   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
   1780   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
   1781   //   type.
   1782   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
   1783       ToType->isIntegerType()) {
   1784     // Determine whether the type we're converting from is signed or
   1785     // unsigned.
   1786     bool FromIsSigned = FromType->isSignedIntegerType();
   1787     uint64_t FromSize = Context.getTypeSize(FromType);
   1788 
   1789     // The types we'll try to promote to, in the appropriate
   1790     // order. Try each of these types.
   1791     QualType PromoteTypes[6] = {
   1792       Context.IntTy, Context.UnsignedIntTy,
   1793       Context.LongTy, Context.UnsignedLongTy ,
   1794       Context.LongLongTy, Context.UnsignedLongLongTy
   1795     };
   1796     for (int Idx = 0; Idx < 6; ++Idx) {
   1797       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
   1798       if (FromSize < ToSize ||
   1799           (FromSize == ToSize &&
   1800            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
   1801         // We found the type that we can promote to. If this is the
   1802         // type we wanted, we have a promotion. Otherwise, no
   1803         // promotion.
   1804         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
   1805       }
   1806     }
   1807   }
   1808 
   1809   // An rvalue for an integral bit-field (9.6) can be converted to an
   1810   // rvalue of type int if int can represent all the values of the
   1811   // bit-field; otherwise, it can be converted to unsigned int if
   1812   // unsigned int can represent all the values of the bit-field. If
   1813   // the bit-field is larger yet, no integral promotion applies to
   1814   // it. If the bit-field has an enumerated type, it is treated as any
   1815   // other value of that type for promotion purposes (C++ 4.5p3).
   1816   // FIXME: We should delay checking of bit-fields until we actually perform the
   1817   // conversion.
   1818   using llvm::APSInt;
   1819   if (From)
   1820     if (FieldDecl *MemberDecl = From->getSourceBitField()) {
   1821       APSInt BitWidth;
   1822       if (FromType->isIntegralType(Context) &&
   1823           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
   1824         APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
   1825         ToSize = Context.getTypeSize(ToType);
   1826 
   1827         // Are we promoting to an int from a bitfield that fits in an int?
   1828         if (BitWidth < ToSize ||
   1829             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
   1830           return To->getKind() == BuiltinType::Int;
   1831         }
   1832 
   1833         // Are we promoting to an unsigned int from an unsigned bitfield
   1834         // that fits into an unsigned int?
   1835         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
   1836           return To->getKind() == BuiltinType::UInt;
   1837         }
   1838 
   1839         return false;
   1840       }
   1841     }
   1842 
   1843   // An rvalue of type bool can be converted to an rvalue of type int,
   1844   // with false becoming zero and true becoming one (C++ 4.5p4).
   1845   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
   1846     return true;
   1847   }
   1848 
   1849   return false;
   1850 }
   1851 
   1852 /// IsFloatingPointPromotion - Determines whether the conversion from
   1853 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
   1854 /// returns true and sets PromotedType to the promoted type.
   1855 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
   1856   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
   1857     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
   1858       /// An rvalue of type float can be converted to an rvalue of type
   1859       /// double. (C++ 4.6p1).
   1860       if (FromBuiltin->getKind() == BuiltinType::Float &&
   1861           ToBuiltin->getKind() == BuiltinType::Double)
   1862         return true;
   1863 
   1864       // C99 6.3.1.5p1:
   1865       //   When a float is promoted to double or long double, or a
   1866       //   double is promoted to long double [...].
   1867       if (!getLangOpts().CPlusPlus &&
   1868           (FromBuiltin->getKind() == BuiltinType::Float ||
   1869            FromBuiltin->getKind() == BuiltinType::Double) &&
   1870           (ToBuiltin->getKind() == BuiltinType::LongDouble))
   1871         return true;
   1872 
   1873       // Half can be promoted to float.
   1874       if (!getLangOpts().NativeHalfType &&
   1875            FromBuiltin->getKind() == BuiltinType::Half &&
   1876           ToBuiltin->getKind() == BuiltinType::Float)
   1877         return true;
   1878     }
   1879 
   1880   return false;
   1881 }
   1882 
   1883 /// \brief Determine if a conversion is a complex promotion.
   1884 ///
   1885 /// A complex promotion is defined as a complex -> complex conversion
   1886 /// where the conversion between the underlying real types is a
   1887 /// floating-point or integral promotion.
   1888 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
   1889   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
   1890   if (!FromComplex)
   1891     return false;
   1892 
   1893   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
   1894   if (!ToComplex)
   1895     return false;
   1896 
   1897   return IsFloatingPointPromotion(FromComplex->getElementType(),
   1898                                   ToComplex->getElementType()) ||
   1899     IsIntegralPromotion(0, FromComplex->getElementType(),
   1900                         ToComplex->getElementType());
   1901 }
   1902 
   1903 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
   1904 /// the pointer type FromPtr to a pointer to type ToPointee, with the
   1905 /// same type qualifiers as FromPtr has on its pointee type. ToType,
   1906 /// if non-empty, will be a pointer to ToType that may or may not have
   1907 /// the right set of qualifiers on its pointee.
   1908 ///
   1909 static QualType
   1910 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
   1911                                    QualType ToPointee, QualType ToType,
   1912                                    ASTContext &Context,
   1913                                    bool StripObjCLifetime = false) {
   1914   assert((FromPtr->getTypeClass() == Type::Pointer ||
   1915           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
   1916          "Invalid similarly-qualified pointer type");
   1917 
   1918   /// Conversions to 'id' subsume cv-qualifier conversions.
   1919   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
   1920     return ToType.getUnqualifiedType();
   1921 
   1922   QualType CanonFromPointee
   1923     = Context.getCanonicalType(FromPtr->getPointeeType());
   1924   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
   1925   Qualifiers Quals = CanonFromPointee.getQualifiers();
   1926 
   1927   if (StripObjCLifetime)
   1928     Quals.removeObjCLifetime();
   1929 
   1930   // Exact qualifier match -> return the pointer type we're converting to.
   1931   if (CanonToPointee.getLocalQualifiers() == Quals) {
   1932     // ToType is exactly what we need. Return it.
   1933     if (!ToType.isNull())
   1934       return ToType.getUnqualifiedType();
   1935 
   1936     // Build a pointer to ToPointee. It has the right qualifiers
   1937     // already.
   1938     if (isa<ObjCObjectPointerType>(ToType))
   1939       return Context.getObjCObjectPointerType(ToPointee);
   1940     return Context.getPointerType(ToPointee);
   1941   }
   1942 
   1943   // Just build a canonical type that has the right qualifiers.
   1944   QualType QualifiedCanonToPointee
   1945     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
   1946 
   1947   if (isa<ObjCObjectPointerType>(ToType))
   1948     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
   1949   return Context.getPointerType(QualifiedCanonToPointee);
   1950 }
   1951 
   1952 static bool isNullPointerConstantForConversion(Expr *Expr,
   1953                                                bool InOverloadResolution,
   1954                                                ASTContext &Context) {
   1955   // Handle value-dependent integral null pointer constants correctly.
   1956   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
   1957   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
   1958       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
   1959     return !InOverloadResolution;
   1960 
   1961   return Expr->isNullPointerConstant(Context,
   1962                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
   1963                                         : Expr::NPC_ValueDependentIsNull);
   1964 }
   1965 
   1966 /// IsPointerConversion - Determines whether the conversion of the
   1967 /// expression From, which has the (possibly adjusted) type FromType,
   1968 /// can be converted to the type ToType via a pointer conversion (C++
   1969 /// 4.10). If so, returns true and places the converted type (that
   1970 /// might differ from ToType in its cv-qualifiers at some level) into
   1971 /// ConvertedType.
   1972 ///
   1973 /// This routine also supports conversions to and from block pointers
   1974 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
   1975 /// pointers to interfaces. FIXME: Once we've determined the
   1976 /// appropriate overloading rules for Objective-C, we may want to
   1977 /// split the Objective-C checks into a different routine; however,
   1978 /// GCC seems to consider all of these conversions to be pointer
   1979 /// conversions, so for now they live here. IncompatibleObjC will be
   1980 /// set if the conversion is an allowed Objective-C conversion that
   1981 /// should result in a warning.
   1982 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
   1983                                bool InOverloadResolution,
   1984                                QualType& ConvertedType,
   1985                                bool &IncompatibleObjC) {
   1986   IncompatibleObjC = false;
   1987   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
   1988                               IncompatibleObjC))
   1989     return true;
   1990 
   1991   // Conversion from a null pointer constant to any Objective-C pointer type.
   1992   if (ToType->isObjCObjectPointerType() &&
   1993       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
   1994     ConvertedType = ToType;
   1995     return true;
   1996   }
   1997 
   1998   // Blocks: Block pointers can be converted to void*.
   1999   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
   2000       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
   2001     ConvertedType = ToType;
   2002     return true;
   2003   }
   2004   // Blocks: A null pointer constant can be converted to a block
   2005   // pointer type.
   2006   if (ToType->isBlockPointerType() &&
   2007       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
   2008     ConvertedType = ToType;
   2009     return true;
   2010   }
   2011 
   2012   // If the left-hand-side is nullptr_t, the right side can be a null
   2013   // pointer constant.
   2014   if (ToType->isNullPtrType() &&
   2015       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
   2016     ConvertedType = ToType;
   2017     return true;
   2018   }
   2019 
   2020   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
   2021   if (!ToTypePtr)
   2022     return false;
   2023 
   2024   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
   2025   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
   2026     ConvertedType = ToType;
   2027     return true;
   2028   }
   2029 
   2030   // Beyond this point, both types need to be pointers
   2031   // , including objective-c pointers.
   2032   QualType ToPointeeType = ToTypePtr->getPointeeType();
   2033   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
   2034       !getLangOpts().ObjCAutoRefCount) {
   2035     ConvertedType = BuildSimilarlyQualifiedPointerType(
   2036                                       FromType->getAs<ObjCObjectPointerType>(),
   2037                                                        ToPointeeType,
   2038                                                        ToType, Context);
   2039     return true;
   2040   }
   2041   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
   2042   if (!FromTypePtr)
   2043     return false;
   2044 
   2045   QualType FromPointeeType = FromTypePtr->getPointeeType();
   2046 
   2047   // If the unqualified pointee types are the same, this can't be a
   2048   // pointer conversion, so don't do all of the work below.
   2049   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
   2050     return false;
   2051 
   2052   // An rvalue of type "pointer to cv T," where T is an object type,
   2053   // can be converted to an rvalue of type "pointer to cv void" (C++
   2054   // 4.10p2).
   2055   if (FromPointeeType->isIncompleteOrObjectType() &&
   2056       ToPointeeType->isVoidType()) {
   2057     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
   2058                                                        ToPointeeType,
   2059                                                        ToType, Context,
   2060                                                    /*StripObjCLifetime=*/true);
   2061     return true;
   2062   }
   2063 
   2064   // MSVC allows implicit function to void* type conversion.
   2065   if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
   2066       ToPointeeType->isVoidType()) {
   2067     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
   2068                                                        ToPointeeType,
   2069                                                        ToType, Context);
   2070     return true;
   2071   }
   2072 
   2073   // When we're overloading in C, we allow a special kind of pointer
   2074   // conversion for compatible-but-not-identical pointee types.
   2075   if (!getLangOpts().CPlusPlus &&
   2076       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
   2077     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
   2078                                                        ToPointeeType,
   2079                                                        ToType, Context);
   2080     return true;
   2081   }
   2082 
   2083   // C++ [conv.ptr]p3:
   2084   //
   2085   //   An rvalue of type "pointer to cv D," where D is a class type,
   2086   //   can be converted to an rvalue of type "pointer to cv B," where
   2087   //   B is a base class (clause 10) of D. If B is an inaccessible
   2088   //   (clause 11) or ambiguous (10.2) base class of D, a program that
   2089   //   necessitates this conversion is ill-formed. The result of the
   2090   //   conversion is a pointer to the base class sub-object of the
   2091   //   derived class object. The null pointer value is converted to
   2092   //   the null pointer value of the destination type.
   2093   //
   2094   // Note that we do not check for ambiguity or inaccessibility
   2095   // here. That is handled by CheckPointerConversion.
   2096   if (getLangOpts().CPlusPlus &&
   2097       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
   2098       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
   2099       !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
   2100       IsDerivedFrom(FromPointeeType, ToPointeeType)) {
   2101     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
   2102                                                        ToPointeeType,
   2103                                                        ToType, Context);
   2104     return true;
   2105   }
   2106 
   2107   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
   2108       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
   2109     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
   2110                                                        ToPointeeType,
   2111                                                        ToType, Context);
   2112     return true;
   2113   }
   2114 
   2115   return false;
   2116 }
   2117 
   2118 /// \brief Adopt the given qualifiers for the given type.
   2119 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
   2120   Qualifiers TQs = T.getQualifiers();
   2121 
   2122   // Check whether qualifiers already match.
   2123   if (TQs == Qs)
   2124     return T;
   2125 
   2126   if (Qs.compatiblyIncludes(TQs))
   2127     return Context.getQualifiedType(T, Qs);
   2128 
   2129   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
   2130 }
   2131 
   2132 /// isObjCPointerConversion - Determines whether this is an
   2133 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
   2134 /// with the same arguments and return values.
   2135 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
   2136                                    QualType& ConvertedType,
   2137                                    bool &IncompatibleObjC) {
   2138   if (!getLangOpts().ObjC1)
   2139     return false;
   2140 
   2141   // The set of qualifiers on the type we're converting from.
   2142   Qualifiers FromQualifiers = FromType.getQualifiers();
   2143 
   2144   // First, we handle all conversions on ObjC object pointer types.
   2145   const ObjCObjectPointerType* ToObjCPtr =
   2146     ToType->getAs<ObjCObjectPointerType>();
   2147   const ObjCObjectPointerType *FromObjCPtr =
   2148     FromType->getAs<ObjCObjectPointerType>();
   2149 
   2150   if (ToObjCPtr && FromObjCPtr) {
   2151     // If the pointee types are the same (ignoring qualifications),
   2152     // then this is not a pointer conversion.
   2153     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
   2154                                        FromObjCPtr->getPointeeType()))
   2155       return false;
   2156 
   2157     // Check for compatible
   2158     // Objective C++: We're able to convert between "id" or "Class" and a
   2159     // pointer to any interface (in both directions).
   2160     if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
   2161       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
   2162       return true;
   2163     }
   2164     // Conversions with Objective-C's id<...>.
   2165     if ((FromObjCPtr->isObjCQualifiedIdType() ||
   2166          ToObjCPtr->isObjCQualifiedIdType()) &&
   2167         Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
   2168                                                   /*compare=*/false)) {
   2169       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
   2170       return true;
   2171     }
   2172     // Objective C++: We're able to convert from a pointer to an
   2173     // interface to a pointer to a different interface.
   2174     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
   2175       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
   2176       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
   2177       if (getLangOpts().CPlusPlus && LHS && RHS &&
   2178           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
   2179                                                 FromObjCPtr->getPointeeType()))
   2180         return false;
   2181       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
   2182                                                    ToObjCPtr->getPointeeType(),
   2183                                                          ToType, Context);
   2184       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
   2185       return true;
   2186     }
   2187 
   2188     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
   2189       // Okay: this is some kind of implicit downcast of Objective-C
   2190       // interfaces, which is permitted. However, we're going to
   2191       // complain about it.
   2192       IncompatibleObjC = true;
   2193       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
   2194                                                    ToObjCPtr->getPointeeType(),
   2195                                                          ToType, Context);
   2196       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
   2197       return true;
   2198     }
   2199   }
   2200   // Beyond this point, both types need to be C pointers or block pointers.
   2201   QualType ToPointeeType;
   2202   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
   2203     ToPointeeType = ToCPtr->getPointeeType();
   2204   else if (const BlockPointerType *ToBlockPtr =
   2205             ToType->getAs<BlockPointerType>()) {
   2206     // Objective C++: We're able to convert from a pointer to any object
   2207     // to a block pointer type.
   2208     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
   2209       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
   2210       return true;
   2211     }
   2212     ToPointeeType = ToBlockPtr->getPointeeType();
   2213   }
   2214   else if (FromType->getAs<BlockPointerType>() &&
   2215            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
   2216     // Objective C++: We're able to convert from a block pointer type to a
   2217     // pointer to any object.
   2218     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
   2219     return true;
   2220   }
   2221   else
   2222     return false;
   2223 
   2224   QualType FromPointeeType;
   2225   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
   2226     FromPointeeType = FromCPtr->getPointeeType();
   2227   else if (const BlockPointerType *FromBlockPtr =
   2228            FromType->getAs<BlockPointerType>())
   2229     FromPointeeType = FromBlockPtr->getPointeeType();
   2230   else
   2231     return false;
   2232 
   2233   // If we have pointers to pointers, recursively check whether this
   2234   // is an Objective-C conversion.
   2235   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
   2236       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
   2237                               IncompatibleObjC)) {
   2238     // We always complain about this conversion.
   2239     IncompatibleObjC = true;
   2240     ConvertedType = Context.getPointerType(ConvertedType);
   2241     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
   2242     return true;
   2243   }
   2244   // Allow conversion of pointee being objective-c pointer to another one;
   2245   // as in I* to id.
   2246   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
   2247       ToPointeeType->getAs<ObjCObjectPointerType>() &&
   2248       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
   2249                               IncompatibleObjC)) {
   2250 
   2251     ConvertedType = Context.getPointerType(ConvertedType);
   2252     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
   2253     return true;
   2254   }
   2255 
   2256   // If we have pointers to functions or blocks, check whether the only
   2257   // differences in the argument and result types are in Objective-C
   2258   // pointer conversions. If so, we permit the conversion (but
   2259   // complain about it).
   2260   const FunctionProtoType *FromFunctionType
   2261     = FromPointeeType->getAs<FunctionProtoType>();
   2262   const FunctionProtoType *ToFunctionType
   2263     = ToPointeeType->getAs<FunctionProtoType>();
   2264   if (FromFunctionType && ToFunctionType) {
   2265     // If the function types are exactly the same, this isn't an
   2266     // Objective-C pointer conversion.
   2267     if (Context.getCanonicalType(FromPointeeType)
   2268           == Context.getCanonicalType(ToPointeeType))
   2269       return false;
   2270 
   2271     // Perform the quick checks that will tell us whether these
   2272     // function types are obviously different.
   2273     if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
   2274         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
   2275         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
   2276       return false;
   2277 
   2278     bool HasObjCConversion = false;
   2279     if (Context.getCanonicalType(FromFunctionType->getResultType())
   2280           == Context.getCanonicalType(ToFunctionType->getResultType())) {
   2281       // Okay, the types match exactly. Nothing to do.
   2282     } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
   2283                                        ToFunctionType->getResultType(),
   2284                                        ConvertedType, IncompatibleObjC)) {
   2285       // Okay, we have an Objective-C pointer conversion.
   2286       HasObjCConversion = true;
   2287     } else {
   2288       // Function types are too different. Abort.
   2289       return false;
   2290     }
   2291 
   2292     // Check argument types.
   2293     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
   2294          ArgIdx != NumArgs; ++ArgIdx) {
   2295       QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
   2296       QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
   2297       if (Context.getCanonicalType(FromArgType)
   2298             == Context.getCanonicalType(ToArgType)) {
   2299         // Okay, the types match exactly. Nothing to do.
   2300       } else if (isObjCPointerConversion(FromArgType, ToArgType,
   2301                                          ConvertedType, IncompatibleObjC)) {
   2302         // Okay, we have an Objective-C pointer conversion.
   2303         HasObjCConversion = true;
   2304       } else {
   2305         // Argument types are too different. Abort.
   2306         return false;
   2307       }
   2308     }
   2309 
   2310     if (HasObjCConversion) {
   2311       // We had an Objective-C conversion. Allow this pointer
   2312       // conversion, but complain about it.
   2313       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
   2314       IncompatibleObjC = true;
   2315       return true;
   2316     }
   2317   }
   2318 
   2319   return false;
   2320 }
   2321 
   2322 /// \brief Determine whether this is an Objective-C writeback conversion,
   2323 /// used for parameter passing when performing automatic reference counting.
   2324 ///
   2325 /// \param FromType The type we're converting form.
   2326 ///
   2327 /// \param ToType The type we're converting to.
   2328 ///
   2329 /// \param ConvertedType The type that will be produced after applying
   2330 /// this conversion.
   2331 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
   2332                                      QualType &ConvertedType) {
   2333   if (!getLangOpts().ObjCAutoRefCount ||
   2334       Context.hasSameUnqualifiedType(FromType, ToType))
   2335     return false;
   2336 
   2337   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
   2338   QualType ToPointee;
   2339   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
   2340     ToPointee = ToPointer->getPointeeType();
   2341   else
   2342     return false;
   2343 
   2344   Qualifiers ToQuals = ToPointee.getQualifiers();
   2345   if (!ToPointee->isObjCLifetimeType() ||
   2346       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
   2347       !ToQuals.withoutObjCLifetime().empty())
   2348     return false;
   2349 
   2350   // Argument must be a pointer to __strong to __weak.
   2351   QualType FromPointee;
   2352   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
   2353     FromPointee = FromPointer->getPointeeType();
   2354   else
   2355     return false;
   2356 
   2357   Qualifiers FromQuals = FromPointee.getQualifiers();
   2358   if (!FromPointee->isObjCLifetimeType() ||
   2359       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
   2360        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
   2361     return false;
   2362 
   2363   // Make sure that we have compatible qualifiers.
   2364   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
   2365   if (!ToQuals.compatiblyIncludes(FromQuals))
   2366     return false;
   2367 
   2368   // Remove qualifiers from the pointee type we're converting from; they
   2369   // aren't used in the compatibility check belong, and we'll be adding back
   2370   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
   2371   FromPointee = FromPointee.getUnqualifiedType();
   2372 
   2373   // The unqualified form of the pointee types must be compatible.
   2374   ToPointee = ToPointee.getUnqualifiedType();
   2375   bool IncompatibleObjC;
   2376   if (Context.typesAreCompatible(FromPointee, ToPointee))
   2377     FromPointee = ToPointee;
   2378   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
   2379                                     IncompatibleObjC))
   2380     return false;
   2381 
   2382   /// \brief Construct the type we're converting to, which is a pointer to
   2383   /// __autoreleasing pointee.
   2384   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
   2385   ConvertedType = Context.getPointerType(FromPointee);
   2386   return true;
   2387 }
   2388 
   2389 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
   2390                                     QualType& ConvertedType) {
   2391   QualType ToPointeeType;
   2392   if (const BlockPointerType *ToBlockPtr =
   2393         ToType->getAs<BlockPointerType>())
   2394     ToPointeeType = ToBlockPtr->getPointeeType();
   2395   else
   2396     return false;
   2397 
   2398   QualType FromPointeeType;
   2399   if (const BlockPointerType *FromBlockPtr =
   2400       FromType->getAs<BlockPointerType>())
   2401     FromPointeeType = FromBlockPtr->getPointeeType();
   2402   else
   2403     return false;
   2404   // We have pointer to blocks, check whether the only
   2405   // differences in the argument and result types are in Objective-C
   2406   // pointer conversions. If so, we permit the conversion.
   2407 
   2408   const FunctionProtoType *FromFunctionType
   2409     = FromPointeeType->getAs<FunctionProtoType>();
   2410   const FunctionProtoType *ToFunctionType
   2411     = ToPointeeType->getAs<FunctionProtoType>();
   2412 
   2413   if (!FromFunctionType || !ToFunctionType)
   2414     return false;
   2415 
   2416   if (Context.hasSameType(FromPointeeType, ToPointeeType))
   2417     return true;
   2418 
   2419   // Perform the quick checks that will tell us whether these
   2420   // function types are obviously different.
   2421   if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
   2422       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
   2423     return false;
   2424 
   2425   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
   2426   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
   2427   if (FromEInfo != ToEInfo)
   2428     return false;
   2429 
   2430   bool IncompatibleObjC = false;
   2431   if (Context.hasSameType(FromFunctionType->getResultType(),
   2432                           ToFunctionType->getResultType())) {
   2433     // Okay, the types match exactly. Nothing to do.
   2434   } else {
   2435     QualType RHS = FromFunctionType->getResultType();
   2436     QualType LHS = ToFunctionType->getResultType();
   2437     if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
   2438         !RHS.hasQualifiers() && LHS.hasQualifiers())
   2439        LHS = LHS.getUnqualifiedType();
   2440 
   2441      if (Context.hasSameType(RHS,LHS)) {
   2442        // OK exact match.
   2443      } else if (isObjCPointerConversion(RHS, LHS,
   2444                                         ConvertedType, IncompatibleObjC)) {
   2445      if (IncompatibleObjC)
   2446        return false;
   2447      // Okay, we have an Objective-C pointer conversion.
   2448      }
   2449      else
   2450        return false;
   2451    }
   2452 
   2453    // Check argument types.
   2454    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
   2455         ArgIdx != NumArgs; ++ArgIdx) {
   2456      IncompatibleObjC = false;
   2457      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
   2458      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
   2459      if (Context.hasSameType(FromArgType, ToArgType)) {
   2460        // Okay, the types match exactly. Nothing to do.
   2461      } else if (isObjCPointerConversion(ToArgType, FromArgType,
   2462                                         ConvertedType, IncompatibleObjC)) {
   2463        if (IncompatibleObjC)
   2464          return false;
   2465        // Okay, we have an Objective-C pointer conversion.
   2466      } else
   2467        // Argument types are too different. Abort.
   2468        return false;
   2469    }
   2470    if (LangOpts.ObjCAutoRefCount &&
   2471        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
   2472                                                     ToFunctionType))
   2473      return false;
   2474 
   2475    ConvertedType = ToType;
   2476    return true;
   2477 }
   2478 
   2479 enum {
   2480   ft_default,
   2481   ft_different_class,
   2482   ft_parameter_arity,
   2483   ft_parameter_mismatch,
   2484   ft_return_type,
   2485   ft_qualifer_mismatch
   2486 };
   2487 
   2488 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
   2489 /// function types.  Catches different number of parameter, mismatch in
   2490 /// parameter types, and different return types.
   2491 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
   2492                                       QualType FromType, QualType ToType) {
   2493   // If either type is not valid, include no extra info.
   2494   if (FromType.isNull() || ToType.isNull()) {
   2495     PDiag << ft_default;
   2496     return;
   2497   }
   2498 
   2499   // Get the function type from the pointers.
   2500   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
   2501     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
   2502                             *ToMember = ToType->getAs<MemberPointerType>();
   2503     if (FromMember->getClass() != ToMember->getClass()) {
   2504       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
   2505             << QualType(FromMember->getClass(), 0);
   2506       return;
   2507     }
   2508     FromType = FromMember->getPointeeType();
   2509     ToType = ToMember->getPointeeType();
   2510   }
   2511 
   2512   if (FromType->isPointerType())
   2513     FromType = FromType->getPointeeType();
   2514   if (ToType->isPointerType())
   2515     ToType = ToType->getPointeeType();
   2516 
   2517   // Remove references.
   2518   FromType = FromType.getNonReferenceType();
   2519   ToType = ToType.getNonReferenceType();
   2520 
   2521   // Don't print extra info for non-specialized template functions.
   2522   if (FromType->isInstantiationDependentType() &&
   2523       !FromType->getAs<TemplateSpecializationType>()) {
   2524     PDiag << ft_default;
   2525     return;
   2526   }
   2527 
   2528   // No extra info for same types.
   2529   if (Context.hasSameType(FromType, ToType)) {
   2530     PDiag << ft_default;
   2531     return;
   2532   }
   2533 
   2534   const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
   2535                           *ToFunction = ToType->getAs<FunctionProtoType>();
   2536 
   2537   // Both types need to be function types.
   2538   if (!FromFunction || !ToFunction) {
   2539     PDiag << ft_default;
   2540     return;
   2541   }
   2542 
   2543   if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
   2544     PDiag << ft_parameter_arity << ToFunction->getNumArgs()
   2545           << FromFunction->getNumArgs();
   2546     return;
   2547   }
   2548 
   2549   // Handle different parameter types.
   2550   unsigned ArgPos;
   2551   if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
   2552     PDiag << ft_parameter_mismatch << ArgPos + 1
   2553           << ToFunction->getArgType(ArgPos)
   2554           << FromFunction->getArgType(ArgPos);
   2555     return;
   2556   }
   2557 
   2558   // Handle different return type.
   2559   if (!Context.hasSameType(FromFunction->getResultType(),
   2560                            ToFunction->getResultType())) {
   2561     PDiag << ft_return_type << ToFunction->getResultType()
   2562           << FromFunction->getResultType();
   2563     return;
   2564   }
   2565 
   2566   unsigned FromQuals = FromFunction->getTypeQuals(),
   2567            ToQuals = ToFunction->getTypeQuals();
   2568   if (FromQuals != ToQuals) {
   2569     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
   2570     return;
   2571   }
   2572 
   2573   // Unable to find a difference, so add no extra info.
   2574   PDiag << ft_default;
   2575 }
   2576 
   2577 /// FunctionArgTypesAreEqual - This routine checks two function proto types
   2578 /// for equality of their argument types. Caller has already checked that
   2579 /// they have same number of arguments.  If the parameters are different,
   2580 /// ArgPos will have the parameter index of the first different parameter.
   2581 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
   2582                                     const FunctionProtoType *NewType,
   2583                                     unsigned *ArgPos) {
   2584   for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
   2585        N = NewType->arg_type_begin(),
   2586        E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
   2587     if (!Context.hasSameType(*O, *N)) {
   2588       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
   2589       return false;
   2590     }
   2591   }
   2592   return true;
   2593 }
   2594 
   2595 /// CheckPointerConversion - Check the pointer conversion from the
   2596 /// expression From to the type ToType. This routine checks for
   2597 /// ambiguous or inaccessible derived-to-base pointer
   2598 /// conversions for which IsPointerConversion has already returned
   2599 /// true. It returns true and produces a diagnostic if there was an
   2600 /// error, or returns false otherwise.
   2601 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
   2602                                   CastKind &Kind,
   2603                                   CXXCastPath& BasePath,
   2604                                   bool IgnoreBaseAccess) {
   2605   QualType FromType = From->getType();
   2606   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
   2607 
   2608   Kind = CK_BitCast;
   2609 
   2610   if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
   2611       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
   2612       Expr::NPCK_ZeroExpression) {
   2613     if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
   2614       DiagRuntimeBehavior(From->getExprLoc(), From,
   2615                           PDiag(diag::warn_impcast_bool_to_null_pointer)
   2616                             << ToType << From->getSourceRange());
   2617     else if (!isUnevaluatedContext())
   2618       Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
   2619         << ToType << From->getSourceRange();
   2620   }
   2621   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
   2622     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
   2623       QualType FromPointeeType = FromPtrType->getPointeeType(),
   2624                ToPointeeType   = ToPtrType->getPointeeType();
   2625 
   2626       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
   2627           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
   2628         // We must have a derived-to-base conversion. Check an
   2629         // ambiguous or inaccessible conversion.
   2630         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
   2631                                          From->getExprLoc(),
   2632                                          From->getSourceRange(), &BasePath,
   2633                                          IgnoreBaseAccess))
   2634           return true;
   2635 
   2636         // The conversion was successful.
   2637         Kind = CK_DerivedToBase;
   2638       }
   2639     }
   2640   } else if (const ObjCObjectPointerType *ToPtrType =
   2641                ToType->getAs<ObjCObjectPointerType>()) {
   2642     if (const ObjCObjectPointerType *FromPtrType =
   2643           FromType->getAs<ObjCObjectPointerType>()) {
   2644       // Objective-C++ conversions are always okay.
   2645       // FIXME: We should have a different class of conversions for the
   2646       // Objective-C++ implicit conversions.
   2647       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
   2648         return false;
   2649     } else if (FromType->isBlockPointerType()) {
   2650       Kind = CK_BlockPointerToObjCPointerCast;
   2651     } else {
   2652       Kind = CK_CPointerToObjCPointerCast;
   2653     }
   2654   } else if (ToType->isBlockPointerType()) {
   2655     if (!FromType->isBlockPointerType())
   2656       Kind = CK_AnyPointerToBlockPointerCast;
   2657   }
   2658 
   2659   // We shouldn't fall into this case unless it's valid for other
   2660   // reasons.
   2661   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
   2662     Kind = CK_NullToPointer;
   2663 
   2664   return false;
   2665 }
   2666 
   2667 /// IsMemberPointerConversion - Determines whether the conversion of the
   2668 /// expression From, which has the (possibly adjusted) type FromType, can be
   2669 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
   2670 /// If so, returns true and places the converted type (that might differ from
   2671 /// ToType in its cv-qualifiers at some level) into ConvertedType.
   2672 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
   2673                                      QualType ToType,
   2674                                      bool InOverloadResolution,
   2675                                      QualType &ConvertedType) {
   2676   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
   2677   if (!ToTypePtr)
   2678     return false;
   2679 
   2680   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
   2681   if (From->isNullPointerConstant(Context,
   2682                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
   2683                                         : Expr::NPC_ValueDependentIsNull)) {
   2684     ConvertedType = ToType;
   2685     return true;
   2686   }
   2687 
   2688   // Otherwise, both types have to be member pointers.
   2689   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
   2690   if (!FromTypePtr)
   2691     return false;
   2692 
   2693   // A pointer to member of B can be converted to a pointer to member of D,
   2694   // where D is derived from B (C++ 4.11p2).
   2695   QualType FromClass(FromTypePtr->getClass(), 0);
   2696   QualType ToClass(ToTypePtr->getClass(), 0);
   2697 
   2698   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
   2699       !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
   2700       IsDerivedFrom(ToClass, FromClass)) {
   2701     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
   2702                                                  ToClass.getTypePtr());
   2703     return true;
   2704   }
   2705 
   2706   return false;
   2707 }
   2708 
   2709 /// CheckMemberPointerConversion - Check the member pointer conversion from the
   2710 /// expression From to the type ToType. This routine checks for ambiguous or
   2711 /// virtual or inaccessible base-to-derived member pointer conversions
   2712 /// for which IsMemberPointerConversion has already returned true. It returns
   2713 /// true and produces a diagnostic if there was an error, or returns false
   2714 /// otherwise.
   2715 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
   2716                                         CastKind &Kind,
   2717                                         CXXCastPath &BasePath,
   2718                                         bool IgnoreBaseAccess) {
   2719   QualType FromType = From->getType();
   2720   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
   2721   if (!FromPtrType) {
   2722     // This must be a null pointer to member pointer conversion
   2723     assert(From->isNullPointerConstant(Context,
   2724                                        Expr::NPC_ValueDependentIsNull) &&
   2725            "Expr must be null pointer constant!");
   2726     Kind = CK_NullToMemberPointer;
   2727     return false;
   2728   }
   2729 
   2730   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
   2731   assert(ToPtrType && "No member pointer cast has a target type "
   2732                       "that is not a member pointer.");
   2733 
   2734   QualType FromClass = QualType(FromPtrType->getClass(), 0);
   2735   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
   2736 
   2737   // FIXME: What about dependent types?
   2738   assert(FromClass->isRecordType() && "Pointer into non-class.");
   2739   assert(ToClass->isRecordType() && "Pointer into non-class.");
   2740 
   2741   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
   2742                      /*DetectVirtual=*/true);
   2743   bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
   2744   assert(DerivationOkay &&
   2745          "Should not have been called if derivation isn't OK.");
   2746   (void)DerivationOkay;
   2747 
   2748   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
   2749                                   getUnqualifiedType())) {
   2750     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
   2751     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
   2752       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
   2753     return true;
   2754   }
   2755 
   2756   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
   2757     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
   2758       << FromClass << ToClass << QualType(VBase, 0)
   2759       << From->getSourceRange();
   2760     return true;
   2761   }
   2762 
   2763   if (!IgnoreBaseAccess)
   2764     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
   2765                          Paths.front(),
   2766                          diag::err_downcast_from_inaccessible_base);
   2767 
   2768   // Must be a base to derived member conversion.
   2769   BuildBasePathArray(Paths, BasePath);
   2770   Kind = CK_BaseToDerivedMemberPointer;
   2771   return false;
   2772 }
   2773 
   2774 /// IsQualificationConversion - Determines whether the conversion from
   2775 /// an rvalue of type FromType to ToType is a qualification conversion
   2776 /// (C++ 4.4).
   2777 ///
   2778 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
   2779 /// when the qualification conversion involves a change in the Objective-C
   2780 /// object lifetime.
   2781 bool
   2782 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
   2783                                 bool CStyle, bool &ObjCLifetimeConversion) {
   2784   FromType = Context.getCanonicalType(FromType);
   2785   ToType = Context.getCanonicalType(ToType);
   2786   ObjCLifetimeConversion = false;
   2787 
   2788   // If FromType and ToType are the same type, this is not a
   2789   // qualification conversion.
   2790   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
   2791     return false;
   2792 
   2793   // (C++ 4.4p4):
   2794   //   A conversion can add cv-qualifiers at levels other than the first
   2795   //   in multi-level pointers, subject to the following rules: [...]
   2796   bool PreviousToQualsIncludeConst = true;
   2797   bool UnwrappedAnyPointer = false;
   2798   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
   2799     // Within each iteration of the loop, we check the qualifiers to
   2800     // determine if this still looks like a qualification
   2801     // conversion. Then, if all is well, we unwrap one more level of
   2802     // pointers or pointers-to-members and do it all again
   2803     // until there are no more pointers or pointers-to-members left to
   2804     // unwrap.
   2805     UnwrappedAnyPointer = true;
   2806 
   2807     Qualifiers FromQuals = FromType.getQualifiers();
   2808     Qualifiers ToQuals = ToType.getQualifiers();
   2809 
   2810     // Objective-C ARC:
   2811     //   Check Objective-C lifetime conversions.
   2812     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
   2813         UnwrappedAnyPointer) {
   2814       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
   2815         ObjCLifetimeConversion = true;
   2816         FromQuals.removeObjCLifetime();
   2817         ToQuals.removeObjCLifetime();
   2818       } else {
   2819         // Qualification conversions cannot cast between different
   2820         // Objective-C lifetime qualifiers.
   2821         return false;
   2822       }
   2823     }
   2824 
   2825     // Allow addition/removal of GC attributes but not changing GC attributes.
   2826     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
   2827         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
   2828       FromQuals.removeObjCGCAttr();
   2829       ToQuals.removeObjCGCAttr();
   2830     }
   2831 
   2832     //   -- for every j > 0, if const is in cv 1,j then const is in cv
   2833     //      2,j, and similarly for volatile.
   2834     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
   2835       return false;
   2836 
   2837     //   -- if the cv 1,j and cv 2,j are different, then const is in
   2838     //      every cv for 0 < k < j.
   2839     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
   2840         && !PreviousToQualsIncludeConst)
   2841       return false;
   2842 
   2843     // Keep track of whether all prior cv-qualifiers in the "to" type
   2844     // include const.
   2845     PreviousToQualsIncludeConst
   2846       = PreviousToQualsIncludeConst && ToQuals.hasConst();
   2847   }
   2848 
   2849   // We are left with FromType and ToType being the pointee types
   2850   // after unwrapping the original FromType and ToType the same number
   2851   // of types. If we unwrapped any pointers, and if FromType and
   2852   // ToType have the same unqualified type (since we checked
   2853   // qualifiers above), then this is a qualification conversion.
   2854   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
   2855 }
   2856 
   2857 /// \brief - Determine whether this is a conversion from a scalar type to an
   2858 /// atomic type.
   2859 ///
   2860 /// If successful, updates \c SCS's second and third steps in the conversion
   2861 /// sequence to finish the conversion.
   2862 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
   2863                                 bool InOverloadResolution,
   2864                                 StandardConversionSequence &SCS,
   2865                                 bool CStyle) {
   2866   const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
   2867   if (!ToAtomic)
   2868     return false;
   2869 
   2870   StandardConversionSequence InnerSCS;
   2871   if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
   2872                             InOverloadResolution, InnerSCS,
   2873                             CStyle, /*AllowObjCWritebackConversion=*/false))
   2874     return false;
   2875 
   2876   SCS.Second = InnerSCS.Second;
   2877   SCS.setToType(1, InnerSCS.getToType(1));
   2878   SCS.Third = InnerSCS.Third;
   2879   SCS.QualificationIncludesObjCLifetime
   2880     = InnerSCS.QualificationIncludesObjCLifetime;
   2881   SCS.setToType(2, InnerSCS.getToType(2));
   2882   return true;
   2883 }
   2884 
   2885 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
   2886                                               CXXConstructorDecl *Constructor,
   2887                                               QualType Type) {
   2888   const FunctionProtoType *CtorType =
   2889       Constructor->getType()->getAs<FunctionProtoType>();
   2890   if (CtorType->getNumArgs() > 0) {
   2891     QualType FirstArg = CtorType->getArgType(0);
   2892     if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
   2893       return true;
   2894   }
   2895   return false;
   2896 }
   2897 
   2898 static OverloadingResult
   2899 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
   2900                                        CXXRecordDecl *To,
   2901                                        UserDefinedConversionSequence &User,
   2902                                        OverloadCandidateSet &CandidateSet,
   2903                                        bool AllowExplicit) {
   2904   DeclContext::lookup_result R = S.LookupConstructors(To);
   2905   for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
   2906        Con != ConEnd; ++Con) {
   2907     NamedDecl *D = *Con;
   2908     DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
   2909 
   2910     // Find the constructor (which may be a template).
   2911     CXXConstructorDecl *Constructor = 0;
   2912     FunctionTemplateDecl *ConstructorTmpl
   2913       = dyn_cast<FunctionTemplateDecl>(D);
   2914     if (ConstructorTmpl)
   2915       Constructor
   2916         = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
   2917     else
   2918       Constructor = cast<CXXConstructorDecl>(D);
   2919 
   2920     bool Usable = !Constructor->isInvalidDecl() &&
   2921                   S.isInitListConstructor(Constructor) &&
   2922                   (AllowExplicit || !Constructor->isExplicit());
   2923     if (Usable) {
   2924       // If the first argument is (a reference to) the target type,
   2925       // suppress conversions.
   2926       bool SuppressUserConversions =
   2927           isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
   2928       if (ConstructorTmpl)
   2929         S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
   2930                                        /*ExplicitArgs*/ 0,
   2931                                        From, CandidateSet,
   2932                                        SuppressUserConversions);
   2933       else
   2934         S.AddOverloadCandidate(Constructor, FoundDecl,
   2935                                From, CandidateSet,
   2936                                SuppressUserConversions);
   2937     }
   2938   }
   2939 
   2940   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   2941 
   2942   OverloadCandidateSet::iterator Best;
   2943   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
   2944   case OR_Success: {
   2945     // Record the standard conversion we used and the conversion function.
   2946     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
   2947     QualType ThisType = Constructor->getThisType(S.Context);
   2948     // Initializer lists don't have conversions as such.
   2949     User.Before.setAsIdentityConversion();
   2950     User.HadMultipleCandidates = HadMultipleCandidates;
   2951     User.ConversionFunction = Constructor;
   2952     User.FoundConversionFunction = Best->FoundDecl;
   2953     User.After.setAsIdentityConversion();
   2954     User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
   2955     User.After.setAllToTypes(ToType);
   2956     return OR_Success;
   2957   }
   2958 
   2959   case OR_No_Viable_Function:
   2960     return OR_No_Viable_Function;
   2961   case OR_Deleted:
   2962     return OR_Deleted;
   2963   case OR_Ambiguous:
   2964     return OR_Ambiguous;
   2965   }
   2966 
   2967   llvm_unreachable("Invalid OverloadResult!");
   2968 }
   2969 
   2970 /// Determines whether there is a user-defined conversion sequence
   2971 /// (C++ [over.ics.user]) that converts expression From to the type
   2972 /// ToType. If such a conversion exists, User will contain the
   2973 /// user-defined conversion sequence that performs such a conversion
   2974 /// and this routine will return true. Otherwise, this routine returns
   2975 /// false and User is unspecified.
   2976 ///
   2977 /// \param AllowExplicit  true if the conversion should consider C++0x
   2978 /// "explicit" conversion functions as well as non-explicit conversion
   2979 /// functions (C++0x [class.conv.fct]p2).
   2980 static OverloadingResult
   2981 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
   2982                         UserDefinedConversionSequence &User,
   2983                         OverloadCandidateSet &CandidateSet,
   2984                         bool AllowExplicit) {
   2985   // Whether we will only visit constructors.
   2986   bool ConstructorsOnly = false;
   2987 
   2988   // If the type we are conversion to is a class type, enumerate its
   2989   // constructors.
   2990   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
   2991     // C++ [over.match.ctor]p1:
   2992     //   When objects of class type are direct-initialized (8.5), or
   2993     //   copy-initialized from an expression of the same or a
   2994     //   derived class type (8.5), overload resolution selects the
   2995     //   constructor. [...] For copy-initialization, the candidate
   2996     //   functions are all the converting constructors (12.3.1) of
   2997     //   that class. The argument list is the expression-list within
   2998     //   the parentheses of the initializer.
   2999     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
   3000         (From->getType()->getAs<RecordType>() &&
   3001          S.IsDerivedFrom(From->getType(), ToType)))
   3002       ConstructorsOnly = true;
   3003 
   3004     S.RequireCompleteType(From->getExprLoc(), ToType, 0);
   3005     // RequireCompleteType may have returned true due to some invalid decl
   3006     // during template instantiation, but ToType may be complete enough now
   3007     // to try to recover.
   3008     if (ToType->isIncompleteType()) {
   3009       // We're not going to find any constructors.
   3010     } else if (CXXRecordDecl *ToRecordDecl
   3011                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
   3012 
   3013       Expr **Args = &From;
   3014       unsigned NumArgs = 1;
   3015       bool ListInitializing = false;
   3016       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
   3017         // But first, see if there is an init-list-contructor that will work.
   3018         OverloadingResult Result = IsInitializerListConstructorConversion(
   3019             S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
   3020         if (Result != OR_No_Viable_Function)
   3021           return Result;
   3022         // Never mind.
   3023         CandidateSet.clear();
   3024 
   3025         // If we're list-initializing, we pass the individual elements as
   3026         // arguments, not the entire list.
   3027         Args = InitList->getInits();
   3028         NumArgs = InitList->getNumInits();
   3029         ListInitializing = true;
   3030       }
   3031 
   3032       DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
   3033       for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
   3034            Con != ConEnd; ++Con) {
   3035         NamedDecl *D = *Con;
   3036         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
   3037 
   3038         // Find the constructor (which may be a template).
   3039         CXXConstructorDecl *Constructor = 0;
   3040         FunctionTemplateDecl *ConstructorTmpl
   3041           = dyn_cast<FunctionTemplateDecl>(D);
   3042         if (ConstructorTmpl)
   3043           Constructor
   3044             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
   3045         else
   3046           Constructor = cast<CXXConstructorDecl>(D);
   3047 
   3048         bool Usable = !Constructor->isInvalidDecl();
   3049         if (ListInitializing)
   3050           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
   3051         else
   3052           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
   3053         if (Usable) {
   3054           bool SuppressUserConversions = !ConstructorsOnly;
   3055           if (SuppressUserConversions && ListInitializing) {
   3056             SuppressUserConversions = false;
   3057             if (NumArgs == 1) {
   3058               // If the first argument is (a reference to) the target type,
   3059               // suppress conversions.
   3060               SuppressUserConversions = isFirstArgumentCompatibleWithType(
   3061                                                 S.Context, Constructor, ToType);
   3062             }
   3063           }
   3064           if (ConstructorTmpl)
   3065             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
   3066                                            /*ExplicitArgs*/ 0,
   3067                                            llvm::makeArrayRef(Args, NumArgs),
   3068                                            CandidateSet, SuppressUserConversions);
   3069           else
   3070             // Allow one user-defined conversion when user specifies a
   3071             // From->ToType conversion via an static cast (c-style, etc).
   3072             S.AddOverloadCandidate(Constructor, FoundDecl,
   3073                                    llvm::makeArrayRef(Args, NumArgs),
   3074                                    CandidateSet, SuppressUserConversions);
   3075         }
   3076       }
   3077     }
   3078   }
   3079 
   3080   // Enumerate conversion functions, if we're allowed to.
   3081   if (ConstructorsOnly || isa<InitListExpr>(From)) {
   3082   } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
   3083     // No conversion functions from incomplete types.
   3084   } else if (const RecordType *FromRecordType
   3085                                    = From->getType()->getAs<RecordType>()) {
   3086     if (CXXRecordDecl *FromRecordDecl
   3087          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
   3088       // Add all of the conversion functions as candidates.
   3089       std::pair<CXXRecordDecl::conversion_iterator,
   3090                 CXXRecordDecl::conversion_iterator>
   3091         Conversions = FromRecordDecl->getVisibleConversionFunctions();
   3092       for (CXXRecordDecl::conversion_iterator
   3093              I = Conversions.first, E = Conversions.second; I != E; ++I) {
   3094         DeclAccessPair FoundDecl = I.getPair();
   3095         NamedDecl *D = FoundDecl.getDecl();
   3096         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
   3097         if (isa<UsingShadowDecl>(D))
   3098           D = cast<UsingShadowDecl>(D)->getTargetDecl();
   3099 
   3100         CXXConversionDecl *Conv;
   3101         FunctionTemplateDecl *ConvTemplate;
   3102         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
   3103           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
   3104         else
   3105           Conv = cast<CXXConversionDecl>(D);
   3106 
   3107         if (AllowExplicit || !Conv->isExplicit()) {
   3108           if (ConvTemplate)
   3109             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
   3110                                              ActingContext, From, ToType,
   3111                                              CandidateSet);
   3112           else
   3113             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
   3114                                      From, ToType, CandidateSet);
   3115         }
   3116       }
   3117     }
   3118   }
   3119 
   3120   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   3121 
   3122   OverloadCandidateSet::iterator Best;
   3123   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
   3124   case OR_Success:
   3125     // Record the standard conversion we used and the conversion function.
   3126     if (CXXConstructorDecl *Constructor
   3127           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
   3128       // C++ [over.ics.user]p1:
   3129       //   If the user-defined conversion is specified by a
   3130       //   constructor (12.3.1), the initial standard conversion
   3131       //   sequence converts the source type to the type required by
   3132       //   the argument of the constructor.
   3133       //
   3134       QualType ThisType = Constructor->getThisType(S.Context);
   3135       if (isa<InitListExpr>(From)) {
   3136         // Initializer lists don't have conversions as such.
   3137         User.Before.setAsIdentityConversion();
   3138       } else {
   3139         if (Best->Conversions[0].isEllipsis())
   3140           User.EllipsisConversion = true;
   3141         else {
   3142           User.Before = Best->Conversions[0].Standard;
   3143           User.EllipsisConversion = false;
   3144         }
   3145       }
   3146       User.HadMultipleCandidates = HadMultipleCandidates;
   3147       User.ConversionFunction = Constructor;
   3148       User.FoundConversionFunction = Best->FoundDecl;
   3149       User.After.setAsIdentityConversion();
   3150       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
   3151       User.After.setAllToTypes(ToType);
   3152       return OR_Success;
   3153     }
   3154     if (CXXConversionDecl *Conversion
   3155                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
   3156       // C++ [over.ics.user]p1:
   3157       //
   3158       //   [...] If the user-defined conversion is specified by a
   3159       //   conversion function (12.3.2), the initial standard
   3160       //   conversion sequence converts the source type to the
   3161       //   implicit object parameter of the conversion function.
   3162       User.Before = Best->Conversions[0].Standard;
   3163       User.HadMultipleCandidates = HadMultipleCandidates;
   3164       User.ConversionFunction = Conversion;
   3165       User.FoundConversionFunction = Best->FoundDecl;
   3166       User.EllipsisConversion = false;
   3167 
   3168       // C++ [over.ics.user]p2:
   3169       //   The second standard conversion sequence converts the
   3170       //   result of the user-defined conversion to the target type
   3171       //   for the sequence. Since an implicit conversion sequence
   3172       //   is an initialization, the special rules for
   3173       //   initialization by user-defined conversion apply when
   3174       //   selecting the best user-defined conversion for a
   3175       //   user-defined conversion sequence (see 13.3.3 and
   3176       //   13.3.3.1).
   3177       User.After = Best->FinalConversion;
   3178       return OR_Success;
   3179     }
   3180     llvm_unreachable("Not a constructor or conversion function?");
   3181 
   3182   case OR_No_Viable_Function:
   3183     return OR_No_Viable_Function;
   3184   case OR_Deleted:
   3185     // No conversion here! We're done.
   3186     return OR_Deleted;
   3187 
   3188   case OR_Ambiguous:
   3189     return OR_Ambiguous;
   3190   }
   3191 
   3192   llvm_unreachable("Invalid OverloadResult!");
   3193 }
   3194 
   3195 bool
   3196 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
   3197   ImplicitConversionSequence ICS;
   3198   OverloadCandidateSet CandidateSet(From->getExprLoc());
   3199   OverloadingResult OvResult =
   3200     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
   3201                             CandidateSet, false);
   3202   if (OvResult == OR_Ambiguous)
   3203     Diag(From->getLocStart(),
   3204          diag::err_typecheck_ambiguous_condition)
   3205           << From->getType() << ToType << From->getSourceRange();
   3206   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty()) {
   3207     if (!RequireCompleteType(From->getLocStart(), ToType,
   3208                           diag::err_typecheck_nonviable_condition_incomplete,
   3209                              From->getType(), From->getSourceRange()))
   3210       Diag(From->getLocStart(),
   3211            diag::err_typecheck_nonviable_condition)
   3212            << From->getType() << From->getSourceRange() << ToType;
   3213   }
   3214   else
   3215     return false;
   3216   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
   3217   return true;
   3218 }
   3219 
   3220 /// \brief Compare the user-defined conversion functions or constructors
   3221 /// of two user-defined conversion sequences to determine whether any ordering
   3222 /// is possible.
   3223 static ImplicitConversionSequence::CompareKind
   3224 compareConversionFunctions(Sema &S,
   3225                            FunctionDecl *Function1,
   3226                            FunctionDecl *Function2) {
   3227   if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
   3228     return ImplicitConversionSequence::Indistinguishable;
   3229 
   3230   // Objective-C++:
   3231   //   If both conversion functions are implicitly-declared conversions from
   3232   //   a lambda closure type to a function pointer and a block pointer,
   3233   //   respectively, always prefer the conversion to a function pointer,
   3234   //   because the function pointer is more lightweight and is more likely
   3235   //   to keep code working.
   3236   CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
   3237   if (!Conv1)
   3238     return ImplicitConversionSequence::Indistinguishable;
   3239 
   3240   CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
   3241   if (!Conv2)
   3242     return ImplicitConversionSequence::Indistinguishable;
   3243 
   3244   if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
   3245     bool Block1 = Conv1->getConversionType()->isBlockPointerType();
   3246     bool Block2 = Conv2->getConversionType()->isBlockPointerType();
   3247     if (Block1 != Block2)
   3248       return Block1? ImplicitConversionSequence::Worse
   3249                    : ImplicitConversionSequence::Better;
   3250   }
   3251 
   3252   return ImplicitConversionSequence::Indistinguishable;
   3253 }
   3254 
   3255 /// CompareImplicitConversionSequences - Compare two implicit
   3256 /// conversion sequences to determine whether one is better than the
   3257 /// other or if they are indistinguishable (C++ 13.3.3.2).
   3258 static ImplicitConversionSequence::CompareKind
   3259 CompareImplicitConversionSequences(Sema &S,
   3260                                    const ImplicitConversionSequence& ICS1,
   3261                                    const ImplicitConversionSequence& ICS2)
   3262 {
   3263   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
   3264   // conversion sequences (as defined in 13.3.3.1)
   3265   //   -- a standard conversion sequence (13.3.3.1.1) is a better
   3266   //      conversion sequence than a user-defined conversion sequence or
   3267   //      an ellipsis conversion sequence, and
   3268   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
   3269   //      conversion sequence than an ellipsis conversion sequence
   3270   //      (13.3.3.1.3).
   3271   //
   3272   // C++0x [over.best.ics]p10:
   3273   //   For the purpose of ranking implicit conversion sequences as
   3274   //   described in 13.3.3.2, the ambiguous conversion sequence is
   3275   //   treated as a user-defined sequence that is indistinguishable
   3276   //   from any other user-defined conversion sequence.
   3277   if (ICS1.getKindRank() < ICS2.getKindRank())
   3278     return ImplicitConversionSequence::Better;
   3279   if (ICS2.getKindRank() < ICS1.getKindRank())
   3280     return ImplicitConversionSequence::Worse;
   3281 
   3282   // The following checks require both conversion sequences to be of
   3283   // the same kind.
   3284   if (ICS1.getKind() != ICS2.getKind())
   3285     return ImplicitConversionSequence::Indistinguishable;
   3286 
   3287   ImplicitConversionSequence::CompareKind Result =
   3288       ImplicitConversionSequence::Indistinguishable;
   3289 
   3290   // Two implicit conversion sequences of the same form are
   3291   // indistinguishable conversion sequences unless one of the
   3292   // following rules apply: (C++ 13.3.3.2p3):
   3293   if (ICS1.isStandard())
   3294     Result = CompareStandardConversionSequences(S,
   3295                                                 ICS1.Standard, ICS2.Standard);
   3296   else if (ICS1.isUserDefined()) {
   3297     // User-defined conversion sequence U1 is a better conversion
   3298     // sequence than another user-defined conversion sequence U2 if
   3299     // they contain the same user-defined conversion function or
   3300     // constructor and if the second standard conversion sequence of
   3301     // U1 is better than the second standard conversion sequence of
   3302     // U2 (C++ 13.3.3.2p3).
   3303     if (ICS1.UserDefined.ConversionFunction ==
   3304           ICS2.UserDefined.ConversionFunction)
   3305       Result = CompareStandardConversionSequences(S,
   3306                                                   ICS1.UserDefined.After,
   3307                                                   ICS2.UserDefined.After);
   3308     else
   3309       Result = compareConversionFunctions(S,
   3310                                           ICS1.UserDefined.ConversionFunction,
   3311                                           ICS2.UserDefined.ConversionFunction);
   3312   }
   3313 
   3314   // List-initialization sequence L1 is a better conversion sequence than
   3315   // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
   3316   // for some X and L2 does not.
   3317   if (Result == ImplicitConversionSequence::Indistinguishable &&
   3318       !ICS1.isBad() &&
   3319       ICS1.isListInitializationSequence() &&
   3320       ICS2.isListInitializationSequence()) {
   3321     if (ICS1.isStdInitializerListElement() &&
   3322         !ICS2.isStdInitializerListElement())
   3323       return ImplicitConversionSequence::Better;
   3324     if (!ICS1.isStdInitializerListElement() &&
   3325         ICS2.isStdInitializerListElement())
   3326       return ImplicitConversionSequence::Worse;
   3327   }
   3328 
   3329   return Result;
   3330 }
   3331 
   3332 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
   3333   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
   3334     Qualifiers Quals;
   3335     T1 = Context.getUnqualifiedArrayType(T1, Quals);
   3336     T2 = Context.getUnqualifiedArrayType(T2, Quals);
   3337   }
   3338 
   3339   return Context.hasSameUnqualifiedType(T1, T2);
   3340 }
   3341 
   3342 // Per 13.3.3.2p3, compare the given standard conversion sequences to
   3343 // determine if one is a proper subset of the other.
   3344 static ImplicitConversionSequence::CompareKind
   3345 compareStandardConversionSubsets(ASTContext &Context,
   3346                                  const StandardConversionSequence& SCS1,
   3347                                  const StandardConversionSequence& SCS2) {
   3348   ImplicitConversionSequence::CompareKind Result
   3349     = ImplicitConversionSequence::Indistinguishable;
   3350 
   3351   // the identity conversion sequence is considered to be a subsequence of
   3352   // any non-identity conversion sequence
   3353   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
   3354     return ImplicitConversionSequence::Better;
   3355   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
   3356     return ImplicitConversionSequence::Worse;
   3357 
   3358   if (SCS1.Second != SCS2.Second) {
   3359     if (SCS1.Second == ICK_Identity)
   3360       Result = ImplicitConversionSequence::Better;
   3361     else if (SCS2.Second == ICK_Identity)
   3362       Result = ImplicitConversionSequence::Worse;
   3363     else
   3364       return ImplicitConversionSequence::Indistinguishable;
   3365   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
   3366     return ImplicitConversionSequence::Indistinguishable;
   3367 
   3368   if (SCS1.Third == SCS2.Third) {
   3369     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
   3370                              : ImplicitConversionSequence::Indistinguishable;
   3371   }
   3372 
   3373   if (SCS1.Third == ICK_Identity)
   3374     return Result == ImplicitConversionSequence::Worse
   3375              ? ImplicitConversionSequence::Indistinguishable
   3376              : ImplicitConversionSequence::Better;
   3377 
   3378   if (SCS2.Third == ICK_Identity)
   3379     return Result == ImplicitConversionSequence::Better
   3380              ? ImplicitConversionSequence::Indistinguishable
   3381              : ImplicitConversionSequence::Worse;
   3382 
   3383   return ImplicitConversionSequence::Indistinguishable;
   3384 }
   3385 
   3386 /// \brief Determine whether one of the given reference bindings is better
   3387 /// than the other based on what kind of bindings they are.
   3388 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
   3389                                        const StandardConversionSequence &SCS2) {
   3390   // C++0x [over.ics.rank]p3b4:
   3391   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
   3392   //      implicit object parameter of a non-static member function declared
   3393   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
   3394   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
   3395   //      lvalue reference to a function lvalue and S2 binds an rvalue
   3396   //      reference*.
   3397   //
   3398   // FIXME: Rvalue references. We're going rogue with the above edits,
   3399   // because the semantics in the current C++0x working paper (N3225 at the
   3400   // time of this writing) break the standard definition of std::forward
   3401   // and std::reference_wrapper when dealing with references to functions.
   3402   // Proposed wording changes submitted to CWG for consideration.
   3403   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
   3404       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
   3405     return false;
   3406 
   3407   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
   3408           SCS2.IsLvalueReference) ||
   3409          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
   3410           !SCS2.IsLvalueReference);
   3411 }
   3412 
   3413 /// CompareStandardConversionSequences - Compare two standard
   3414 /// conversion sequences to determine whether one is better than the
   3415 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
   3416 static ImplicitConversionSequence::CompareKind
   3417 CompareStandardConversionSequences(Sema &S,
   3418                                    const StandardConversionSequence& SCS1,
   3419                                    const StandardConversionSequence& SCS2)
   3420 {
   3421   // Standard conversion sequence S1 is a better conversion sequence
   3422   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
   3423 
   3424   //  -- S1 is a proper subsequence of S2 (comparing the conversion
   3425   //     sequences in the canonical form defined by 13.3.3.1.1,
   3426   //     excluding any Lvalue Transformation; the identity conversion
   3427   //     sequence is considered to be a subsequence of any
   3428   //     non-identity conversion sequence) or, if not that,
   3429   if (ImplicitConversionSequence::CompareKind CK
   3430         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
   3431     return CK;
   3432 
   3433   //  -- the rank of S1 is better than the rank of S2 (by the rules
   3434   //     defined below), or, if not that,
   3435   ImplicitConversionRank Rank1 = SCS1.getRank();
   3436   ImplicitConversionRank Rank2 = SCS2.getRank();
   3437   if (Rank1 < Rank2)
   3438     return ImplicitConversionSequence::Better;
   3439   else if (Rank2 < Rank1)
   3440     return ImplicitConversionSequence::Worse;
   3441 
   3442   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
   3443   // are indistinguishable unless one of the following rules
   3444   // applies:
   3445 
   3446   //   A conversion that is not a conversion of a pointer, or
   3447   //   pointer to member, to bool is better than another conversion
   3448   //   that is such a conversion.
   3449   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
   3450     return SCS2.isPointerConversionToBool()
   3451              ? ImplicitConversionSequence::Better
   3452              : ImplicitConversionSequence::Worse;
   3453 
   3454   // C++ [over.ics.rank]p4b2:
   3455   //
   3456   //   If class B is derived directly or indirectly from class A,
   3457   //   conversion of B* to A* is better than conversion of B* to
   3458   //   void*, and conversion of A* to void* is better than conversion
   3459   //   of B* to void*.
   3460   bool SCS1ConvertsToVoid
   3461     = SCS1.isPointerConversionToVoidPointer(S.Context);
   3462   bool SCS2ConvertsToVoid
   3463     = SCS2.isPointerConversionToVoidPointer(S.Context);
   3464   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
   3465     // Exactly one of the conversion sequences is a conversion to
   3466     // a void pointer; it's the worse conversion.
   3467     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
   3468                               : ImplicitConversionSequence::Worse;
   3469   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
   3470     // Neither conversion sequence converts to a void pointer; compare
   3471     // their derived-to-base conversions.
   3472     if (ImplicitConversionSequence::CompareKind DerivedCK
   3473           = CompareDerivedToBaseConversions(S, SCS1, SCS2))
   3474       return DerivedCK;
   3475   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
   3476              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
   3477     // Both conversion sequences are conversions to void
   3478     // pointers. Compare the source types to determine if there's an
   3479     // inheritance relationship in their sources.
   3480     QualType FromType1 = SCS1.getFromType();
   3481     QualType FromType2 = SCS2.getFromType();
   3482 
   3483     // Adjust the types we're converting from via the array-to-pointer
   3484     // conversion, if we need to.
   3485     if (SCS1.First == ICK_Array_To_Pointer)
   3486       FromType1 = S.Context.getArrayDecayedType(FromType1);
   3487     if (SCS2.First == ICK_Array_To_Pointer)
   3488       FromType2 = S.Context.getArrayDecayedType(FromType2);
   3489 
   3490     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
   3491     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
   3492 
   3493     if (S.IsDerivedFrom(FromPointee2, FromPointee1))
   3494       return ImplicitConversionSequence::Better;
   3495     else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
   3496       return ImplicitConversionSequence::Worse;
   3497 
   3498     // Objective-C++: If one interface is more specific than the
   3499     // other, it is the better one.
   3500     const ObjCObjectPointerType* FromObjCPtr1
   3501       = FromType1->getAs<ObjCObjectPointerType>();
   3502     const ObjCObjectPointerType* FromObjCPtr2
   3503       = FromType2->getAs<ObjCObjectPointerType>();
   3504     if (FromObjCPtr1 && FromObjCPtr2) {
   3505       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
   3506                                                           FromObjCPtr2);
   3507       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
   3508                                                            FromObjCPtr1);
   3509       if (AssignLeft != AssignRight) {
   3510         return AssignLeft? ImplicitConversionSequence::Better
   3511                          : ImplicitConversionSequence::Worse;
   3512       }
   3513     }
   3514   }
   3515 
   3516   // Compare based on qualification conversions (C++ 13.3.3.2p3,
   3517   // bullet 3).
   3518   if (ImplicitConversionSequence::CompareKind QualCK
   3519         = CompareQualificationConversions(S, SCS1, SCS2))
   3520     return QualCK;
   3521 
   3522   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
   3523     // Check for a better reference binding based on the kind of bindings.
   3524     if (isBetterReferenceBindingKind(SCS1, SCS2))
   3525       return ImplicitConversionSequence::Better;
   3526     else if (isBetterReferenceBindingKind(SCS2, SCS1))
   3527       return ImplicitConversionSequence::Worse;
   3528 
   3529     // C++ [over.ics.rank]p3b4:
   3530     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
   3531     //      which the references refer are the same type except for
   3532     //      top-level cv-qualifiers, and the type to which the reference
   3533     //      initialized by S2 refers is more cv-qualified than the type
   3534     //      to which the reference initialized by S1 refers.
   3535     QualType T1 = SCS1.getToType(2);
   3536     QualType T2 = SCS2.getToType(2);
   3537     T1 = S.Context.getCanonicalType(T1);
   3538     T2 = S.Context.getCanonicalType(T2);
   3539     Qualifiers T1Quals, T2Quals;
   3540     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
   3541     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
   3542     if (UnqualT1 == UnqualT2) {
   3543       // Objective-C++ ARC: If the references refer to objects with different
   3544       // lifetimes, prefer bindings that don't change lifetime.
   3545       if (SCS1.ObjCLifetimeConversionBinding !=
   3546                                           SCS2.ObjCLifetimeConversionBinding) {
   3547         return SCS1.ObjCLifetimeConversionBinding
   3548                                            ? ImplicitConversionSequence::Worse
   3549                                            : ImplicitConversionSequence::Better;
   3550       }
   3551 
   3552       // If the type is an array type, promote the element qualifiers to the
   3553       // type for comparison.
   3554       if (isa<ArrayType>(T1) && T1Quals)
   3555         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
   3556       if (isa<ArrayType>(T2) && T2Quals)
   3557         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
   3558       if (T2.isMoreQualifiedThan(T1))
   3559         return ImplicitConversionSequence::Better;
   3560       else if (T1.isMoreQualifiedThan(T2))
   3561         return ImplicitConversionSequence::Worse;
   3562     }
   3563   }
   3564 
   3565   // In Microsoft mode, prefer an integral conversion to a
   3566   // floating-to-integral conversion if the integral conversion
   3567   // is between types of the same size.
   3568   // For example:
   3569   // void f(float);
   3570   // void f(int);
   3571   // int main {
   3572   //    long a;
   3573   //    f(a);
   3574   // }
   3575   // Here, MSVC will call f(int) instead of generating a compile error
   3576   // as clang will do in standard mode.
   3577   if (S.getLangOpts().MicrosoftMode &&
   3578       SCS1.Second == ICK_Integral_Conversion &&
   3579       SCS2.Second == ICK_Floating_Integral &&
   3580       S.Context.getTypeSize(SCS1.getFromType()) ==
   3581       S.Context.getTypeSize(SCS1.getToType(2)))
   3582     return ImplicitConversionSequence::Better;
   3583 
   3584   return ImplicitConversionSequence::Indistinguishable;
   3585 }
   3586 
   3587 /// CompareQualificationConversions - Compares two standard conversion
   3588 /// sequences to determine whether they can be ranked based on their
   3589 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
   3590 ImplicitConversionSequence::CompareKind
   3591 CompareQualificationConversions(Sema &S,
   3592                                 const StandardConversionSequence& SCS1,
   3593                                 const StandardConversionSequence& SCS2) {
   3594   // C++ 13.3.3.2p3:
   3595   //  -- S1 and S2 differ only in their qualification conversion and
   3596   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
   3597   //     cv-qualification signature of type T1 is a proper subset of
   3598   //     the cv-qualification signature of type T2, and S1 is not the
   3599   //     deprecated string literal array-to-pointer conversion (4.2).
   3600   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
   3601       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
   3602     return ImplicitConversionSequence::Indistinguishable;
   3603 
   3604   // FIXME: the example in the standard doesn't use a qualification
   3605   // conversion (!)
   3606   QualType T1 = SCS1.getToType(2);
   3607   QualType T2 = SCS2.getToType(2);
   3608   T1 = S.Context.getCanonicalType(T1);
   3609   T2 = S.Context.getCanonicalType(T2);
   3610   Qualifiers T1Quals, T2Quals;
   3611   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
   3612   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
   3613 
   3614   // If the types are the same, we won't learn anything by unwrapped
   3615   // them.
   3616   if (UnqualT1 == UnqualT2)
   3617     return ImplicitConversionSequence::Indistinguishable;
   3618 
   3619   // If the type is an array type, promote the element qualifiers to the type
   3620   // for comparison.
   3621   if (isa<ArrayType>(T1) && T1Quals)
   3622     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
   3623   if (isa<ArrayType>(T2) && T2Quals)
   3624     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
   3625 
   3626   ImplicitConversionSequence::CompareKind Result
   3627     = ImplicitConversionSequence::Indistinguishable;
   3628 
   3629   // Objective-C++ ARC:
   3630   //   Prefer qualification conversions not involving a change in lifetime
   3631   //   to qualification conversions that do not change lifetime.
   3632   if (SCS1.QualificationIncludesObjCLifetime !=
   3633                                       SCS2.QualificationIncludesObjCLifetime) {
   3634     Result = SCS1.QualificationIncludesObjCLifetime
   3635                ? ImplicitConversionSequence::Worse
   3636                : ImplicitConversionSequence::Better;
   3637   }
   3638 
   3639   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
   3640     // Within each iteration of the loop, we check the qualifiers to
   3641     // determine if this still looks like a qualification
   3642     // conversion. Then, if all is well, we unwrap one more level of
   3643     // pointers or pointers-to-members and do it all again
   3644     // until there are no more pointers or pointers-to-members left
   3645     // to unwrap. This essentially mimics what
   3646     // IsQualificationConversion does, but here we're checking for a
   3647     // strict subset of qualifiers.
   3648     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
   3649       // The qualifiers are the same, so this doesn't tell us anything
   3650       // about how the sequences rank.
   3651       ;
   3652     else if (T2.isMoreQualifiedThan(T1)) {
   3653       // T1 has fewer qualifiers, so it could be the better sequence.
   3654       if (Result == ImplicitConversionSequence::Worse)
   3655         // Neither has qualifiers that are a subset of the other's
   3656         // qualifiers.
   3657         return ImplicitConversionSequence::Indistinguishable;
   3658 
   3659       Result = ImplicitConversionSequence::Better;
   3660     } else if (T1.isMoreQualifiedThan(T2)) {
   3661       // T2 has fewer qualifiers, so it could be the better sequence.
   3662       if (Result == ImplicitConversionSequence::Better)
   3663         // Neither has qualifiers that are a subset of the other's
   3664         // qualifiers.
   3665         return ImplicitConversionSequence::Indistinguishable;
   3666 
   3667       Result = ImplicitConversionSequence::Worse;
   3668     } else {
   3669       // Qualifiers are disjoint.
   3670       return ImplicitConversionSequence::Indistinguishable;
   3671     }
   3672 
   3673     // If the types after this point are equivalent, we're done.
   3674     if (S.Context.hasSameUnqualifiedType(T1, T2))
   3675       break;
   3676   }
   3677 
   3678   // Check that the winning standard conversion sequence isn't using
   3679   // the deprecated string literal array to pointer conversion.
   3680   switch (Result) {
   3681   case ImplicitConversionSequence::Better:
   3682     if (SCS1.DeprecatedStringLiteralToCharPtr)
   3683       Result = ImplicitConversionSequence::Indistinguishable;
   3684     break;
   3685 
   3686   case ImplicitConversionSequence::Indistinguishable:
   3687     break;
   3688 
   3689   case ImplicitConversionSequence::Worse:
   3690     if (SCS2.DeprecatedStringLiteralToCharPtr)
   3691       Result = ImplicitConversionSequence::Indistinguishable;
   3692     break;
   3693   }
   3694 
   3695   return Result;
   3696 }
   3697 
   3698 /// CompareDerivedToBaseConversions - Compares two standard conversion
   3699 /// sequences to determine whether they can be ranked based on their
   3700 /// various kinds of derived-to-base conversions (C++
   3701 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
   3702 /// conversions between Objective-C interface types.
   3703 ImplicitConversionSequence::CompareKind
   3704 CompareDerivedToBaseConversions(Sema &S,
   3705                                 const StandardConversionSequence& SCS1,
   3706                                 const StandardConversionSequence& SCS2) {
   3707   QualType FromType1 = SCS1.getFromType();
   3708   QualType ToType1 = SCS1.getToType(1);
   3709   QualType FromType2 = SCS2.getFromType();
   3710   QualType ToType2 = SCS2.getToType(1);
   3711 
   3712   // Adjust the types we're converting from via the array-to-pointer
   3713   // conversion, if we need to.
   3714   if (SCS1.First == ICK_Array_To_Pointer)
   3715     FromType1 = S.Context.getArrayDecayedType(FromType1);
   3716   if (SCS2.First == ICK_Array_To_Pointer)
   3717     FromType2 = S.Context.getArrayDecayedType(FromType2);
   3718 
   3719   // Canonicalize all of the types.
   3720   FromType1 = S.Context.getCanonicalType(FromType1);
   3721   ToType1 = S.Context.getCanonicalType(ToType1);
   3722   FromType2 = S.Context.getCanonicalType(FromType2);
   3723   ToType2 = S.Context.getCanonicalType(ToType2);
   3724 
   3725   // C++ [over.ics.rank]p4b3:
   3726   //
   3727   //   If class B is derived directly or indirectly from class A and
   3728   //   class C is derived directly or indirectly from B,
   3729   //
   3730   // Compare based on pointer conversions.
   3731   if (SCS1.Second == ICK_Pointer_Conversion &&
   3732       SCS2.Second == ICK_Pointer_Conversion &&
   3733       /*FIXME: Remove if Objective-C id conversions get their own rank*/
   3734       FromType1->isPointerType() && FromType2->isPointerType() &&
   3735       ToType1->isPointerType() && ToType2->isPointerType()) {
   3736     QualType FromPointee1
   3737       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
   3738     QualType ToPointee1
   3739       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
   3740     QualType FromPointee2
   3741       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
   3742     QualType ToPointee2
   3743       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
   3744 
   3745     //   -- conversion of C* to B* is better than conversion of C* to A*,
   3746     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
   3747       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
   3748         return ImplicitConversionSequence::Better;
   3749       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
   3750         return ImplicitConversionSequence::Worse;
   3751     }
   3752 
   3753     //   -- conversion of B* to A* is better than conversion of C* to A*,
   3754     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
   3755       if (S.IsDerivedFrom(FromPointee2, FromPointee1))
   3756         return ImplicitConversionSequence::Better;
   3757       else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
   3758         return ImplicitConversionSequence::Worse;
   3759     }
   3760   } else if (SCS1.Second == ICK_Pointer_Conversion &&
   3761              SCS2.Second == ICK_Pointer_Conversion) {
   3762     const ObjCObjectPointerType *FromPtr1
   3763       = FromType1->getAs<ObjCObjectPointerType>();
   3764     const ObjCObjectPointerType *FromPtr2
   3765       = FromType2->getAs<ObjCObjectPointerType>();
   3766     const ObjCObjectPointerType *ToPtr1
   3767       = ToType1->getAs<ObjCObjectPointerType>();
   3768     const ObjCObjectPointerType *ToPtr2
   3769       = ToType2->getAs<ObjCObjectPointerType>();
   3770 
   3771     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
   3772       // Apply the same conversion ranking rules for Objective-C pointer types
   3773       // that we do for C++ pointers to class types. However, we employ the
   3774       // Objective-C pseudo-subtyping relationship used for assignment of
   3775       // Objective-C pointer types.
   3776       bool FromAssignLeft
   3777         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
   3778       bool FromAssignRight
   3779         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
   3780       bool ToAssignLeft
   3781         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
   3782       bool ToAssignRight
   3783         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
   3784 
   3785       // A conversion to an a non-id object pointer type or qualified 'id'
   3786       // type is better than a conversion to 'id'.
   3787       if (ToPtr1->isObjCIdType() &&
   3788           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
   3789         return ImplicitConversionSequence::Worse;
   3790       if (ToPtr2->isObjCIdType() &&
   3791           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
   3792         return ImplicitConversionSequence::Better;
   3793 
   3794       // A conversion to a non-id object pointer type is better than a
   3795       // conversion to a qualified 'id' type
   3796       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
   3797         return ImplicitConversionSequence::Worse;
   3798       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
   3799         return ImplicitConversionSequence::Better;
   3800 
   3801       // A conversion to an a non-Class object pointer type or qualified 'Class'
   3802       // type is better than a conversion to 'Class'.
   3803       if (ToPtr1->isObjCClassType() &&
   3804           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
   3805         return ImplicitConversionSequence::Worse;
   3806       if (ToPtr2->isObjCClassType() &&
   3807           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
   3808         return ImplicitConversionSequence::Better;
   3809 
   3810       // A conversion to a non-Class object pointer type is better than a
   3811       // conversion to a qualified 'Class' type.
   3812       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
   3813         return ImplicitConversionSequence::Worse;
   3814       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
   3815         return ImplicitConversionSequence::Better;
   3816 
   3817       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
   3818       if (S.Context.hasSameType(FromType1, FromType2) &&
   3819           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
   3820           (ToAssignLeft != ToAssignRight))
   3821         return ToAssignLeft? ImplicitConversionSequence::Worse
   3822                            : ImplicitConversionSequence::Better;
   3823 
   3824       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
   3825       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
   3826           (FromAssignLeft != FromAssignRight))
   3827         return FromAssignLeft? ImplicitConversionSequence::Better
   3828         : ImplicitConversionSequence::Worse;
   3829     }
   3830   }
   3831 
   3832   // Ranking of member-pointer types.
   3833   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
   3834       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
   3835       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
   3836     const MemberPointerType * FromMemPointer1 =
   3837                                         FromType1->getAs<MemberPointerType>();
   3838     const MemberPointerType * ToMemPointer1 =
   3839                                           ToType1->getAs<MemberPointerType>();
   3840     const MemberPointerType * FromMemPointer2 =
   3841                                           FromType2->getAs<MemberPointerType>();
   3842     const MemberPointerType * ToMemPointer2 =
   3843                                           ToType2->getAs<MemberPointerType>();
   3844     const Type *FromPointeeType1 = FromMemPointer1->getClass();
   3845     const Type *ToPointeeType1 = ToMemPointer1->getClass();
   3846     const Type *FromPointeeType2 = FromMemPointer2->getClass();
   3847     const Type *ToPointeeType2 = ToMemPointer2->getClass();
   3848     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
   3849     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
   3850     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
   3851     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
   3852     // conversion of A::* to B::* is better than conversion of A::* to C::*,
   3853     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
   3854       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
   3855         return ImplicitConversionSequence::Worse;
   3856       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
   3857         return ImplicitConversionSequence::Better;
   3858     }
   3859     // conversion of B::* to C::* is better than conversion of A::* to C::*
   3860     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
   3861       if (S.IsDerivedFrom(FromPointee1, FromPointee2))
   3862         return ImplicitConversionSequence::Better;
   3863       else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
   3864         return ImplicitConversionSequence::Worse;
   3865     }
   3866   }
   3867 
   3868   if (SCS1.Second == ICK_Derived_To_Base) {
   3869     //   -- conversion of C to B is better than conversion of C to A,
   3870     //   -- binding of an expression of type C to a reference of type
   3871     //      B& is better than binding an expression of type C to a
   3872     //      reference of type A&,
   3873     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
   3874         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
   3875       if (S.IsDerivedFrom(ToType1, ToType2))
   3876         return ImplicitConversionSequence::Better;
   3877       else if (S.IsDerivedFrom(ToType2, ToType1))
   3878         return ImplicitConversionSequence::Worse;
   3879     }
   3880 
   3881     //   -- conversion of B to A is better than conversion of C to A.
   3882     //   -- binding of an expression of type B to a reference of type
   3883     //      A& is better than binding an expression of type C to a
   3884     //      reference of type A&,
   3885     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
   3886         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
   3887       if (S.IsDerivedFrom(FromType2, FromType1))
   3888         return ImplicitConversionSequence::Better;
   3889       else if (S.IsDerivedFrom(FromType1, FromType2))
   3890         return ImplicitConversionSequence::Worse;
   3891     }
   3892   }
   3893 
   3894   return ImplicitConversionSequence::Indistinguishable;
   3895 }
   3896 
   3897 /// \brief Determine whether the given type is valid, e.g., it is not an invalid
   3898 /// C++ class.
   3899 static bool isTypeValid(QualType T) {
   3900   if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
   3901     return !Record->isInvalidDecl();
   3902 
   3903   return true;
   3904 }
   3905 
   3906 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
   3907 /// determine whether they are reference-related,
   3908 /// reference-compatible, reference-compatible with added
   3909 /// qualification, or incompatible, for use in C++ initialization by
   3910 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
   3911 /// type, and the first type (T1) is the pointee type of the reference
   3912 /// type being initialized.
   3913 Sema::ReferenceCompareResult
   3914 Sema::CompareReferenceRelationship(SourceLocation Loc,
   3915                                    QualType OrigT1, QualType OrigT2,
   3916                                    bool &DerivedToBase,
   3917                                    bool &ObjCConversion,
   3918                                    bool &ObjCLifetimeConversion) {
   3919   assert(!OrigT1->isReferenceType() &&
   3920     "T1 must be the pointee type of the reference type");
   3921   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
   3922 
   3923   QualType T1 = Context.getCanonicalType(OrigT1);
   3924   QualType T2 = Context.getCanonicalType(OrigT2);
   3925   Qualifiers T1Quals, T2Quals;
   3926   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
   3927   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
   3928 
   3929   // C++ [dcl.init.ref]p4:
   3930   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
   3931   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
   3932   //   T1 is a base class of T2.
   3933   DerivedToBase = false;
   3934   ObjCConversion = false;
   3935   ObjCLifetimeConversion = false;
   3936   if (UnqualT1 == UnqualT2) {
   3937     // Nothing to do.
   3938   } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
   3939              isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
   3940              IsDerivedFrom(UnqualT2, UnqualT1))
   3941     DerivedToBase = true;
   3942   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
   3943            UnqualT2->isObjCObjectOrInterfaceType() &&
   3944            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
   3945     ObjCConversion = true;
   3946   else
   3947     return Ref_Incompatible;
   3948 
   3949   // At this point, we know that T1 and T2 are reference-related (at
   3950   // least).
   3951 
   3952   // If the type is an array type, promote the element qualifiers to the type
   3953   // for comparison.
   3954   if (isa<ArrayType>(T1) && T1Quals)
   3955     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
   3956   if (isa<ArrayType>(T2) && T2Quals)
   3957     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
   3958 
   3959   // C++ [dcl.init.ref]p4:
   3960   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
   3961   //   reference-related to T2 and cv1 is the same cv-qualification
   3962   //   as, or greater cv-qualification than, cv2. For purposes of
   3963   //   overload resolution, cases for which cv1 is greater
   3964   //   cv-qualification than cv2 are identified as
   3965   //   reference-compatible with added qualification (see 13.3.3.2).
   3966   //
   3967   // Note that we also require equivalence of Objective-C GC and address-space
   3968   // qualifiers when performing these computations, so that e.g., an int in
   3969   // address space 1 is not reference-compatible with an int in address
   3970   // space 2.
   3971   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
   3972       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
   3973     T1Quals.removeObjCLifetime();
   3974     T2Quals.removeObjCLifetime();
   3975     ObjCLifetimeConversion = true;
   3976   }
   3977 
   3978   if (T1Quals == T2Quals)
   3979     return Ref_Compatible;
   3980   else if (T1Quals.compatiblyIncludes(T2Quals))
   3981     return Ref_Compatible_With_Added_Qualification;
   3982   else
   3983     return Ref_Related;
   3984 }
   3985 
   3986 /// \brief Look for a user-defined conversion to an value reference-compatible
   3987 ///        with DeclType. Return true if something definite is found.
   3988 static bool
   3989 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
   3990                          QualType DeclType, SourceLocation DeclLoc,
   3991                          Expr *Init, QualType T2, bool AllowRvalues,
   3992                          bool AllowExplicit) {
   3993   assert(T2->isRecordType() && "Can only find conversions of record types.");
   3994   CXXRecordDecl *T2RecordDecl
   3995     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
   3996 
   3997   OverloadCandidateSet CandidateSet(DeclLoc);
   3998   std::pair<CXXRecordDecl::conversion_iterator,
   3999             CXXRecordDecl::conversion_iterator>
   4000     Conversions = T2RecordDecl->getVisibleConversionFunctions();
   4001   for (CXXRecordDecl::conversion_iterator
   4002          I = Conversions.first, E = Conversions.second; I != E; ++I) {
   4003     NamedDecl *D = *I;
   4004     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
   4005     if (isa<UsingShadowDecl>(D))
   4006       D = cast<UsingShadowDecl>(D)->getTargetDecl();
   4007 
   4008     FunctionTemplateDecl *ConvTemplate
   4009       = dyn_cast<FunctionTemplateDecl>(D);
   4010     CXXConversionDecl *Conv;
   4011     if (ConvTemplate)
   4012       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
   4013     else
   4014       Conv = cast<CXXConversionDecl>(D);
   4015 
   4016     // If this is an explicit conversion, and we're not allowed to consider
   4017     // explicit conversions, skip it.
   4018     if (!AllowExplicit && Conv->isExplicit())
   4019       continue;
   4020 
   4021     if (AllowRvalues) {
   4022       bool DerivedToBase = false;
   4023       bool ObjCConversion = false;
   4024       bool ObjCLifetimeConversion = false;
   4025 
   4026       // If we are initializing an rvalue reference, don't permit conversion
   4027       // functions that return lvalues.
   4028       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
   4029         const ReferenceType *RefType
   4030           = Conv->getConversionType()->getAs<LValueReferenceType>();
   4031         if (RefType && !RefType->getPointeeType()->isFunctionType())
   4032           continue;
   4033       }
   4034 
   4035       if (!ConvTemplate &&
   4036           S.CompareReferenceRelationship(
   4037             DeclLoc,
   4038             Conv->getConversionType().getNonReferenceType()
   4039               .getUnqualifiedType(),
   4040             DeclType.getNonReferenceType().getUnqualifiedType(),
   4041             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
   4042           Sema::Ref_Incompatible)
   4043         continue;
   4044     } else {
   4045       // If the conversion function doesn't return a reference type,
   4046       // it can't be considered for this conversion. An rvalue reference
   4047       // is only acceptable if its referencee is a function type.
   4048 
   4049       const ReferenceType *RefType =
   4050         Conv->getConversionType()->getAs<ReferenceType>();
   4051       if (!RefType ||
   4052           (!RefType->isLValueReferenceType() &&
   4053            !RefType->getPointeeType()->isFunctionType()))
   4054         continue;
   4055     }
   4056 
   4057     if (ConvTemplate)
   4058       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
   4059                                        Init, DeclType, CandidateSet);
   4060     else
   4061       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
   4062                                DeclType, CandidateSet);
   4063   }
   4064 
   4065   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   4066 
   4067   OverloadCandidateSet::iterator Best;
   4068   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
   4069   case OR_Success:
   4070     // C++ [over.ics.ref]p1:
   4071     //
   4072     //   [...] If the parameter binds directly to the result of
   4073     //   applying a conversion function to the argument
   4074     //   expression, the implicit conversion sequence is a
   4075     //   user-defined conversion sequence (13.3.3.1.2), with the
   4076     //   second standard conversion sequence either an identity
   4077     //   conversion or, if the conversion function returns an
   4078     //   entity of a type that is a derived class of the parameter
   4079     //   type, a derived-to-base Conversion.
   4080     if (!Best->FinalConversion.DirectBinding)
   4081       return false;
   4082 
   4083     ICS.setUserDefined();
   4084     ICS.UserDefined.Before = Best->Conversions[0].Standard;
   4085     ICS.UserDefined.After = Best->FinalConversion;
   4086     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
   4087     ICS.UserDefined.ConversionFunction = Best->Function;
   4088     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
   4089     ICS.UserDefined.EllipsisConversion = false;
   4090     assert(ICS.UserDefined.After.ReferenceBinding &&
   4091            ICS.UserDefined.After.DirectBinding &&
   4092            "Expected a direct reference binding!");
   4093     return true;
   4094 
   4095   case OR_Ambiguous:
   4096     ICS.setAmbiguous();
   4097     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
   4098          Cand != CandidateSet.end(); ++Cand)
   4099       if (Cand->Viable)
   4100         ICS.Ambiguous.addConversion(Cand->Function);
   4101     return true;
   4102 
   4103   case OR_No_Viable_Function:
   4104   case OR_Deleted:
   4105     // There was no suitable conversion, or we found a deleted
   4106     // conversion; continue with other checks.
   4107     return false;
   4108   }
   4109 
   4110   llvm_unreachable("Invalid OverloadResult!");
   4111 }
   4112 
   4113 /// \brief Compute an implicit conversion sequence for reference
   4114 /// initialization.
   4115 static ImplicitConversionSequence
   4116 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
   4117                  SourceLocation DeclLoc,
   4118                  bool SuppressUserConversions,
   4119                  bool AllowExplicit) {
   4120   assert(DeclType->isReferenceType() && "Reference init needs a reference");
   4121 
   4122   // Most paths end in a failed conversion.
   4123   ImplicitConversionSequence ICS;
   4124   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
   4125 
   4126   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
   4127   QualType T2 = Init->getType();
   4128 
   4129   // If the initializer is the address of an overloaded function, try
   4130   // to resolve the overloaded function. If all goes well, T2 is the
   4131   // type of the resulting function.
   4132   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
   4133     DeclAccessPair Found;
   4134     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
   4135                                                                 false, Found))
   4136       T2 = Fn->getType();
   4137   }
   4138 
   4139   // Compute some basic properties of the types and the initializer.
   4140   bool isRValRef = DeclType->isRValueReferenceType();
   4141   bool DerivedToBase = false;
   4142   bool ObjCConversion = false;
   4143   bool ObjCLifetimeConversion = false;
   4144   Expr::Classification InitCategory = Init->Classify(S.Context);
   4145   Sema::ReferenceCompareResult RefRelationship
   4146     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
   4147                                      ObjCConversion, ObjCLifetimeConversion);
   4148 
   4149 
   4150   // C++0x [dcl.init.ref]p5:
   4151   //   A reference to type "cv1 T1" is initialized by an expression
   4152   //   of type "cv2 T2" as follows:
   4153 
   4154   //     -- If reference is an lvalue reference and the initializer expression
   4155   if (!isRValRef) {
   4156     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
   4157     //        reference-compatible with "cv2 T2," or
   4158     //
   4159     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
   4160     if (InitCategory.isLValue() &&
   4161         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
   4162       // C++ [over.ics.ref]p1:
   4163       //   When a parameter of reference type binds directly (8.5.3)
   4164       //   to an argument expression, the implicit conversion sequence
   4165       //   is the identity conversion, unless the argument expression
   4166       //   has a type that is a derived class of the parameter type,
   4167       //   in which case the implicit conversion sequence is a
   4168       //   derived-to-base Conversion (13.3.3.1).
   4169       ICS.setStandard();
   4170       ICS.Standard.First = ICK_Identity;
   4171       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
   4172                          : ObjCConversion? ICK_Compatible_Conversion
   4173                          : ICK_Identity;
   4174       ICS.Standard.Third = ICK_Identity;
   4175       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
   4176       ICS.Standard.setToType(0, T2);
   4177       ICS.Standard.setToType(1, T1);
   4178       ICS.Standard.setToType(2, T1);
   4179       ICS.Standard.ReferenceBinding = true;
   4180       ICS.Standard.DirectBinding = true;
   4181       ICS.Standard.IsLvalueReference = !isRValRef;
   4182       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
   4183       ICS.Standard.BindsToRvalue = false;
   4184       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
   4185       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
   4186       ICS.Standard.CopyConstructor = 0;
   4187 
   4188       // Nothing more to do: the inaccessibility/ambiguity check for
   4189       // derived-to-base conversions is suppressed when we're
   4190       // computing the implicit conversion sequence (C++
   4191       // [over.best.ics]p2).
   4192       return ICS;
   4193     }
   4194 
   4195     //       -- has a class type (i.e., T2 is a class type), where T1 is
   4196     //          not reference-related to T2, and can be implicitly
   4197     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
   4198     //          is reference-compatible with "cv3 T3" 92) (this
   4199     //          conversion is selected by enumerating the applicable
   4200     //          conversion functions (13.3.1.6) and choosing the best
   4201     //          one through overload resolution (13.3)),
   4202     if (!SuppressUserConversions && T2->isRecordType() &&
   4203         !S.RequireCompleteType(DeclLoc, T2, 0) &&
   4204         RefRelationship == Sema::Ref_Incompatible) {
   4205       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
   4206                                    Init, T2, /*AllowRvalues=*/false,
   4207                                    AllowExplicit))
   4208         return ICS;
   4209     }
   4210   }
   4211 
   4212   //     -- Otherwise, the reference shall be an lvalue reference to a
   4213   //        non-volatile const type (i.e., cv1 shall be const), or the reference
   4214   //        shall be an rvalue reference.
   4215   //
   4216   // We actually handle one oddity of C++ [over.ics.ref] at this
   4217   // point, which is that, due to p2 (which short-circuits reference
   4218   // binding by only attempting a simple conversion for non-direct
   4219   // bindings) and p3's strange wording, we allow a const volatile
   4220   // reference to bind to an rvalue. Hence the check for the presence
   4221   // of "const" rather than checking for "const" being the only
   4222   // qualifier.
   4223   // This is also the point where rvalue references and lvalue inits no longer
   4224   // go together.
   4225   if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
   4226     return ICS;
   4227 
   4228   //       -- If the initializer expression
   4229   //
   4230   //            -- is an xvalue, class prvalue, array prvalue or function
   4231   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
   4232   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
   4233       (InitCategory.isXValue() ||
   4234       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
   4235       (InitCategory.isLValue() && T2->isFunctionType()))) {
   4236     ICS.setStandard();
   4237     ICS.Standard.First = ICK_Identity;
   4238     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
   4239                       : ObjCConversion? ICK_Compatible_Conversion
   4240                       : ICK_Identity;
   4241     ICS.Standard.Third = ICK_Identity;
   4242     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
   4243     ICS.Standard.setToType(0, T2);
   4244     ICS.Standard.setToType(1, T1);
   4245     ICS.Standard.setToType(2, T1);
   4246     ICS.Standard.ReferenceBinding = true;
   4247     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
   4248     // binding unless we're binding to a class prvalue.
   4249     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
   4250     // allow the use of rvalue references in C++98/03 for the benefit of
   4251     // standard library implementors; therefore, we need the xvalue check here.
   4252     ICS.Standard.DirectBinding =
   4253       S.getLangOpts().CPlusPlus11 ||
   4254       (InitCategory.isPRValue() && !T2->isRecordType());
   4255     ICS.Standard.IsLvalueReference = !isRValRef;
   4256     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
   4257     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
   4258     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
   4259     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
   4260     ICS.Standard.CopyConstructor = 0;
   4261     return ICS;
   4262   }
   4263 
   4264   //            -- has a class type (i.e., T2 is a class type), where T1 is not
   4265   //               reference-related to T2, and can be implicitly converted to
   4266   //               an xvalue, class prvalue, or function lvalue of type
   4267   //               "cv3 T3", where "cv1 T1" is reference-compatible with
   4268   //               "cv3 T3",
   4269   //
   4270   //          then the reference is bound to the value of the initializer
   4271   //          expression in the first case and to the result of the conversion
   4272   //          in the second case (or, in either case, to an appropriate base
   4273   //          class subobject).
   4274   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
   4275       T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
   4276       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
   4277                                Init, T2, /*AllowRvalues=*/true,
   4278                                AllowExplicit)) {
   4279     // In the second case, if the reference is an rvalue reference
   4280     // and the second standard conversion sequence of the
   4281     // user-defined conversion sequence includes an lvalue-to-rvalue
   4282     // conversion, the program is ill-formed.
   4283     if (ICS.isUserDefined() && isRValRef &&
   4284         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
   4285       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
   4286 
   4287     return ICS;
   4288   }
   4289 
   4290   //       -- Otherwise, a temporary of type "cv1 T1" is created and
   4291   //          initialized from the initializer expression using the
   4292   //          rules for a non-reference copy initialization (8.5). The
   4293   //          reference is then bound to the temporary. If T1 is
   4294   //          reference-related to T2, cv1 must be the same
   4295   //          cv-qualification as, or greater cv-qualification than,
   4296   //          cv2; otherwise, the program is ill-formed.
   4297   if (RefRelationship == Sema::Ref_Related) {
   4298     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
   4299     // we would be reference-compatible or reference-compatible with
   4300     // added qualification. But that wasn't the case, so the reference
   4301     // initialization fails.
   4302     //
   4303     // Note that we only want to check address spaces and cvr-qualifiers here.
   4304     // ObjC GC and lifetime qualifiers aren't important.
   4305     Qualifiers T1Quals = T1.getQualifiers();
   4306     Qualifiers T2Quals = T2.getQualifiers();
   4307     T1Quals.removeObjCGCAttr();
   4308     T1Quals.removeObjCLifetime();
   4309     T2Quals.removeObjCGCAttr();
   4310     T2Quals.removeObjCLifetime();
   4311     if (!T1Quals.compatiblyIncludes(T2Quals))
   4312       return ICS;
   4313   }
   4314 
   4315   // If at least one of the types is a class type, the types are not
   4316   // related, and we aren't allowed any user conversions, the
   4317   // reference binding fails. This case is important for breaking
   4318   // recursion, since TryImplicitConversion below will attempt to
   4319   // create a temporary through the use of a copy constructor.
   4320   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
   4321       (T1->isRecordType() || T2->isRecordType()))
   4322     return ICS;
   4323 
   4324   // If T1 is reference-related to T2 and the reference is an rvalue
   4325   // reference, the initializer expression shall not be an lvalue.
   4326   if (RefRelationship >= Sema::Ref_Related &&
   4327       isRValRef && Init->Classify(S.Context).isLValue())
   4328     return ICS;
   4329 
   4330   // C++ [over.ics.ref]p2:
   4331   //   When a parameter of reference type is not bound directly to
   4332   //   an argument expression, the conversion sequence is the one
   4333   //   required to convert the argument expression to the
   4334   //   underlying type of the reference according to
   4335   //   13.3.3.1. Conceptually, this conversion sequence corresponds
   4336   //   to copy-initializing a temporary of the underlying type with
   4337   //   the argument expression. Any difference in top-level
   4338   //   cv-qualification is subsumed by the initialization itself
   4339   //   and does not constitute a conversion.
   4340   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
   4341                               /*AllowExplicit=*/false,
   4342                               /*InOverloadResolution=*/false,
   4343                               /*CStyle=*/false,
   4344                               /*AllowObjCWritebackConversion=*/false);
   4345 
   4346   // Of course, that's still a reference binding.
   4347   if (ICS.isStandard()) {
   4348     ICS.Standard.ReferenceBinding = true;
   4349     ICS.Standard.IsLvalueReference = !isRValRef;
   4350     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
   4351     ICS.Standard.BindsToRvalue = true;
   4352     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
   4353     ICS.Standard.ObjCLifetimeConversionBinding = false;
   4354   } else if (ICS.isUserDefined()) {
   4355     // Don't allow rvalue references to bind to lvalues.
   4356     if (DeclType->isRValueReferenceType()) {
   4357       if (const ReferenceType *RefType
   4358             = ICS.UserDefined.ConversionFunction->getResultType()
   4359                 ->getAs<LValueReferenceType>()) {
   4360         if (!RefType->getPointeeType()->isFunctionType()) {
   4361           ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
   4362                      DeclType);
   4363           return ICS;
   4364         }
   4365       }
   4366     }
   4367 
   4368     ICS.UserDefined.After.ReferenceBinding = true;
   4369     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
   4370     ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
   4371     ICS.UserDefined.After.BindsToRvalue = true;
   4372     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
   4373     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
   4374   }
   4375 
   4376   return ICS;
   4377 }
   4378 
   4379 static ImplicitConversionSequence
   4380 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
   4381                       bool SuppressUserConversions,
   4382                       bool InOverloadResolution,
   4383                       bool AllowObjCWritebackConversion,
   4384                       bool AllowExplicit = false);
   4385 
   4386 /// TryListConversion - Try to copy-initialize a value of type ToType from the
   4387 /// initializer list From.
   4388 static ImplicitConversionSequence
   4389 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
   4390                   bool SuppressUserConversions,
   4391                   bool InOverloadResolution,
   4392                   bool AllowObjCWritebackConversion) {
   4393   // C++11 [over.ics.list]p1:
   4394   //   When an argument is an initializer list, it is not an expression and
   4395   //   special rules apply for converting it to a parameter type.
   4396 
   4397   ImplicitConversionSequence Result;
   4398   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
   4399   Result.setListInitializationSequence();
   4400 
   4401   // We need a complete type for what follows. Incomplete types can never be
   4402   // initialized from init lists.
   4403   if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
   4404     return Result;
   4405 
   4406   // C++11 [over.ics.list]p2:
   4407   //   If the parameter type is std::initializer_list<X> or "array of X" and
   4408   //   all the elements can be implicitly converted to X, the implicit
   4409   //   conversion sequence is the worst conversion necessary to convert an
   4410   //   element of the list to X.
   4411   bool toStdInitializerList = false;
   4412   QualType X;
   4413   if (ToType->isArrayType())
   4414     X = S.Context.getAsArrayType(ToType)->getElementType();
   4415   else
   4416     toStdInitializerList = S.isStdInitializerList(ToType, &X);
   4417   if (!X.isNull()) {
   4418     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
   4419       Expr *Init = From->getInit(i);
   4420       ImplicitConversionSequence ICS =
   4421           TryCopyInitialization(S, Init, X, SuppressUserConversions,
   4422                                 InOverloadResolution,
   4423                                 AllowObjCWritebackConversion);
   4424       // If a single element isn't convertible, fail.
   4425       if (ICS.isBad()) {
   4426         Result = ICS;
   4427         break;
   4428       }
   4429       // Otherwise, look for the worst conversion.
   4430       if (Result.isBad() ||
   4431           CompareImplicitConversionSequences(S, ICS, Result) ==
   4432               ImplicitConversionSequence::Worse)
   4433         Result = ICS;
   4434     }
   4435 
   4436     // For an empty list, we won't have computed any conversion sequence.
   4437     // Introduce the identity conversion sequence.
   4438     if (From->getNumInits() == 0) {
   4439       Result.setStandard();
   4440       Result.Standard.setAsIdentityConversion();
   4441       Result.Standard.setFromType(ToType);
   4442       Result.Standard.setAllToTypes(ToType);
   4443     }
   4444 
   4445     Result.setListInitializationSequence();
   4446     Result.setStdInitializerListElement(toStdInitializerList);
   4447     return Result;
   4448   }
   4449 
   4450   // C++11 [over.ics.list]p3:
   4451   //   Otherwise, if the parameter is a non-aggregate class X and overload
   4452   //   resolution chooses a single best constructor [...] the implicit
   4453   //   conversion sequence is a user-defined conversion sequence. If multiple
   4454   //   constructors are viable but none is better than the others, the
   4455   //   implicit conversion sequence is a user-defined conversion sequence.
   4456   if (ToType->isRecordType() && !ToType->isAggregateType()) {
   4457     // This function can deal with initializer lists.
   4458     Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
   4459                                       /*AllowExplicit=*/false,
   4460                                       InOverloadResolution, /*CStyle=*/false,
   4461                                       AllowObjCWritebackConversion);
   4462     Result.setListInitializationSequence();
   4463     return Result;
   4464   }
   4465 
   4466   // C++11 [over.ics.list]p4:
   4467   //   Otherwise, if the parameter has an aggregate type which can be
   4468   //   initialized from the initializer list [...] the implicit conversion
   4469   //   sequence is a user-defined conversion sequence.
   4470   if (ToType->isAggregateType()) {
   4471     // Type is an aggregate, argument is an init list. At this point it comes
   4472     // down to checking whether the initialization works.
   4473     // FIXME: Find out whether this parameter is consumed or not.
   4474     InitializedEntity Entity =
   4475         InitializedEntity::InitializeParameter(S.Context, ToType,
   4476                                                /*Consumed=*/false);
   4477     if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
   4478       Result.setUserDefined();
   4479       Result.UserDefined.Before.setAsIdentityConversion();
   4480       // Initializer lists don't have a type.
   4481       Result.UserDefined.Before.setFromType(QualType());
   4482       Result.UserDefined.Before.setAllToTypes(QualType());
   4483 
   4484       Result.UserDefined.After.setAsIdentityConversion();
   4485       Result.UserDefined.After.setFromType(ToType);
   4486       Result.UserDefined.After.setAllToTypes(ToType);
   4487       Result.UserDefined.ConversionFunction = 0;
   4488     }
   4489     return Result;
   4490   }
   4491 
   4492   // C++11 [over.ics.list]p5:
   4493   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
   4494   if (ToType->isReferenceType()) {
   4495     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
   4496     // mention initializer lists in any way. So we go by what list-
   4497     // initialization would do and try to extrapolate from that.
   4498 
   4499     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
   4500 
   4501     // If the initializer list has a single element that is reference-related
   4502     // to the parameter type, we initialize the reference from that.
   4503     if (From->getNumInits() == 1) {
   4504       Expr *Init = From->getInit(0);
   4505 
   4506       QualType T2 = Init->getType();
   4507 
   4508       // If the initializer is the address of an overloaded function, try
   4509       // to resolve the overloaded function. If all goes well, T2 is the
   4510       // type of the resulting function.
   4511       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
   4512         DeclAccessPair Found;
   4513         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
   4514                                    Init, ToType, false, Found))
   4515           T2 = Fn->getType();
   4516       }
   4517 
   4518       // Compute some basic properties of the types and the initializer.
   4519       bool dummy1 = false;
   4520       bool dummy2 = false;
   4521       bool dummy3 = false;
   4522       Sema::ReferenceCompareResult RefRelationship
   4523         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
   4524                                          dummy2, dummy3);
   4525 
   4526       if (RefRelationship >= Sema::Ref_Related)
   4527         return TryReferenceInit(S, Init, ToType,
   4528                                 /*FIXME:*/From->getLocStart(),
   4529                                 SuppressUserConversions,
   4530                                 /*AllowExplicit=*/false);
   4531     }
   4532 
   4533     // Otherwise, we bind the reference to a temporary created from the
   4534     // initializer list.
   4535     Result = TryListConversion(S, From, T1, SuppressUserConversions,
   4536                                InOverloadResolution,
   4537                                AllowObjCWritebackConversion);
   4538     if (Result.isFailure())
   4539       return Result;
   4540     assert(!Result.isEllipsis() &&
   4541            "Sub-initialization cannot result in ellipsis conversion.");
   4542 
   4543     // Can we even bind to a temporary?
   4544     if (ToType->isRValueReferenceType() ||
   4545         (T1.isConstQualified() && !T1.isVolatileQualified())) {
   4546       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
   4547                                             Result.UserDefined.After;
   4548       SCS.ReferenceBinding = true;
   4549       SCS.IsLvalueReference = ToType->isLValueReferenceType();
   4550       SCS.BindsToRvalue = true;
   4551       SCS.BindsToFunctionLvalue = false;
   4552       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
   4553       SCS.ObjCLifetimeConversionBinding = false;
   4554     } else
   4555       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
   4556                     From, ToType);
   4557     return Result;
   4558   }
   4559 
   4560   // C++11 [over.ics.list]p6:
   4561   //   Otherwise, if the parameter type is not a class:
   4562   if (!ToType->isRecordType()) {
   4563     //    - if the initializer list has one element, the implicit conversion
   4564     //      sequence is the one required to convert the element to the
   4565     //      parameter type.
   4566     unsigned NumInits = From->getNumInits();
   4567     if (NumInits == 1)
   4568       Result = TryCopyInitialization(S, From->getInit(0), ToType,
   4569                                      SuppressUserConversions,
   4570                                      InOverloadResolution,
   4571                                      AllowObjCWritebackConversion);
   4572     //    - if the initializer list has no elements, the implicit conversion
   4573     //      sequence is the identity conversion.
   4574     else if (NumInits == 0) {
   4575       Result.setStandard();
   4576       Result.Standard.setAsIdentityConversion();
   4577       Result.Standard.setFromType(ToType);
   4578       Result.Standard.setAllToTypes(ToType);
   4579     }
   4580     Result.setListInitializationSequence();
   4581     return Result;
   4582   }
   4583 
   4584   // C++11 [over.ics.list]p7:
   4585   //   In all cases other than those enumerated above, no conversion is possible
   4586   return Result;
   4587 }
   4588 
   4589 /// TryCopyInitialization - Try to copy-initialize a value of type
   4590 /// ToType from the expression From. Return the implicit conversion
   4591 /// sequence required to pass this argument, which may be a bad
   4592 /// conversion sequence (meaning that the argument cannot be passed to
   4593 /// a parameter of this type). If @p SuppressUserConversions, then we
   4594 /// do not permit any user-defined conversion sequences.
   4595 static ImplicitConversionSequence
   4596 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
   4597                       bool SuppressUserConversions,
   4598                       bool InOverloadResolution,
   4599                       bool AllowObjCWritebackConversion,
   4600                       bool AllowExplicit) {
   4601   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
   4602     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
   4603                              InOverloadResolution,AllowObjCWritebackConversion);
   4604 
   4605   if (ToType->isReferenceType())
   4606     return TryReferenceInit(S, From, ToType,
   4607                             /*FIXME:*/From->getLocStart(),
   4608                             SuppressUserConversions,
   4609                             AllowExplicit);
   4610 
   4611   return TryImplicitConversion(S, From, ToType,
   4612                                SuppressUserConversions,
   4613                                /*AllowExplicit=*/false,
   4614                                InOverloadResolution,
   4615                                /*CStyle=*/false,
   4616                                AllowObjCWritebackConversion);
   4617 }
   4618 
   4619 static bool TryCopyInitialization(const CanQualType FromQTy,
   4620                                   const CanQualType ToQTy,
   4621                                   Sema &S,
   4622                                   SourceLocation Loc,
   4623                                   ExprValueKind FromVK) {
   4624   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
   4625   ImplicitConversionSequence ICS =
   4626     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
   4627 
   4628   return !ICS.isBad();
   4629 }
   4630 
   4631 /// TryObjectArgumentInitialization - Try to initialize the object
   4632 /// parameter of the given member function (@c Method) from the
   4633 /// expression @p From.
   4634 static ImplicitConversionSequence
   4635 TryObjectArgumentInitialization(Sema &S, QualType FromType,
   4636                                 Expr::Classification FromClassification,
   4637                                 CXXMethodDecl *Method,
   4638                                 CXXRecordDecl *ActingContext) {
   4639   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
   4640   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
   4641   //                 const volatile object.
   4642   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
   4643     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
   4644   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
   4645 
   4646   // Set up the conversion sequence as a "bad" conversion, to allow us
   4647   // to exit early.
   4648   ImplicitConversionSequence ICS;
   4649 
   4650   // We need to have an object of class type.
   4651   if (const PointerType *PT = FromType->getAs<PointerType>()) {
   4652     FromType = PT->getPointeeType();
   4653 
   4654     // When we had a pointer, it's implicitly dereferenced, so we
   4655     // better have an lvalue.
   4656     assert(FromClassification.isLValue());
   4657   }
   4658 
   4659   assert(FromType->isRecordType());
   4660 
   4661   // C++0x [over.match.funcs]p4:
   4662   //   For non-static member functions, the type of the implicit object
   4663   //   parameter is
   4664   //
   4665   //     - "lvalue reference to cv X" for functions declared without a
   4666   //        ref-qualifier or with the & ref-qualifier
   4667   //     - "rvalue reference to cv X" for functions declared with the &&
   4668   //        ref-qualifier
   4669   //
   4670   // where X is the class of which the function is a member and cv is the
   4671   // cv-qualification on the member function declaration.
   4672   //
   4673   // However, when finding an implicit conversion sequence for the argument, we
   4674   // are not allowed to create temporaries or perform user-defined conversions
   4675   // (C++ [over.match.funcs]p5). We perform a simplified version of
   4676   // reference binding here, that allows class rvalues to bind to
   4677   // non-constant references.
   4678 
   4679   // First check the qualifiers.
   4680   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
   4681   if (ImplicitParamType.getCVRQualifiers()
   4682                                     != FromTypeCanon.getLocalCVRQualifiers() &&
   4683       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
   4684     ICS.setBad(BadConversionSequence::bad_qualifiers,
   4685                FromType, ImplicitParamType);
   4686     return ICS;
   4687   }
   4688 
   4689   // Check that we have either the same type or a derived type. It
   4690   // affects the conversion rank.
   4691   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
   4692   ImplicitConversionKind SecondKind;
   4693   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
   4694     SecondKind = ICK_Identity;
   4695   } else if (S.IsDerivedFrom(FromType, ClassType))
   4696     SecondKind = ICK_Derived_To_Base;
   4697   else {
   4698     ICS.setBad(BadConversionSequence::unrelated_class,
   4699                FromType, ImplicitParamType);
   4700     return ICS;
   4701   }
   4702 
   4703   // Check the ref-qualifier.
   4704   switch (Method->getRefQualifier()) {
   4705   case RQ_None:
   4706     // Do nothing; we don't care about lvalueness or rvalueness.
   4707     break;
   4708 
   4709   case RQ_LValue:
   4710     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
   4711       // non-const lvalue reference cannot bind to an rvalue
   4712       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
   4713                  ImplicitParamType);
   4714       return ICS;
   4715     }
   4716     break;
   4717 
   4718   case RQ_RValue:
   4719     if (!FromClassification.isRValue()) {
   4720       // rvalue reference cannot bind to an lvalue
   4721       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
   4722                  ImplicitParamType);
   4723       return ICS;
   4724     }
   4725     break;
   4726   }
   4727 
   4728   // Success. Mark this as a reference binding.
   4729   ICS.setStandard();
   4730   ICS.Standard.setAsIdentityConversion();
   4731   ICS.Standard.Second = SecondKind;
   4732   ICS.Standard.setFromType(FromType);
   4733   ICS.Standard.setAllToTypes(ImplicitParamType);
   4734   ICS.Standard.ReferenceBinding = true;
   4735   ICS.Standard.DirectBinding = true;
   4736   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
   4737   ICS.Standard.BindsToFunctionLvalue = false;
   4738   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
   4739   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
   4740     = (Method->getRefQualifier() == RQ_None);
   4741   return ICS;
   4742 }
   4743 
   4744 /// PerformObjectArgumentInitialization - Perform initialization of
   4745 /// the implicit object parameter for the given Method with the given
   4746 /// expression.
   4747 ExprResult
   4748 Sema::PerformObjectArgumentInitialization(Expr *From,
   4749                                           NestedNameSpecifier *Qualifier,
   4750                                           NamedDecl *FoundDecl,
   4751                                           CXXMethodDecl *Method) {
   4752   QualType FromRecordType, DestType;
   4753   QualType ImplicitParamRecordType  =
   4754     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
   4755 
   4756   Expr::Classification FromClassification;
   4757   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
   4758     FromRecordType = PT->getPointeeType();
   4759     DestType = Method->getThisType(Context);
   4760     FromClassification = Expr::Classification::makeSimpleLValue();
   4761   } else {
   4762     FromRecordType = From->getType();
   4763     DestType = ImplicitParamRecordType;
   4764     FromClassification = From->Classify(Context);
   4765   }
   4766 
   4767   // Note that we always use the true parent context when performing
   4768   // the actual argument initialization.
   4769   ImplicitConversionSequence ICS
   4770     = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
   4771                                       Method, Method->getParent());
   4772   if (ICS.isBad()) {
   4773     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
   4774       Qualifiers FromQs = FromRecordType.getQualifiers();
   4775       Qualifiers ToQs = DestType.getQualifiers();
   4776       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
   4777       if (CVR) {
   4778         Diag(From->getLocStart(),
   4779              diag::err_member_function_call_bad_cvr)
   4780           << Method->getDeclName() << FromRecordType << (CVR - 1)
   4781           << From->getSourceRange();
   4782         Diag(Method->getLocation(), diag::note_previous_decl)
   4783           << Method->getDeclName();
   4784         return ExprError();
   4785       }
   4786     }
   4787 
   4788     return Diag(From->getLocStart(),
   4789                 diag::err_implicit_object_parameter_init)
   4790        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
   4791   }
   4792 
   4793   if (ICS.Standard.Second == ICK_Derived_To_Base) {
   4794     ExprResult FromRes =
   4795       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
   4796     if (FromRes.isInvalid())
   4797       return ExprError();
   4798     From = FromRes.take();
   4799   }
   4800 
   4801   if (!Context.hasSameType(From->getType(), DestType))
   4802     From = ImpCastExprToType(From, DestType, CK_NoOp,
   4803                              From->getValueKind()).take();
   4804   return Owned(From);
   4805 }
   4806 
   4807 /// TryContextuallyConvertToBool - Attempt to contextually convert the
   4808 /// expression From to bool (C++0x [conv]p3).
   4809 static ImplicitConversionSequence
   4810 TryContextuallyConvertToBool(Sema &S, Expr *From) {
   4811   // FIXME: This is pretty broken.
   4812   return TryImplicitConversion(S, From, S.Context.BoolTy,
   4813                                // FIXME: Are these flags correct?
   4814                                /*SuppressUserConversions=*/false,
   4815                                /*AllowExplicit=*/true,
   4816                                /*InOverloadResolution=*/false,
   4817                                /*CStyle=*/false,
   4818                                /*AllowObjCWritebackConversion=*/false);
   4819 }
   4820 
   4821 /// PerformContextuallyConvertToBool - Perform a contextual conversion
   4822 /// of the expression From to bool (C++0x [conv]p3).
   4823 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
   4824   if (checkPlaceholderForOverload(*this, From))
   4825     return ExprError();
   4826 
   4827   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
   4828   if (!ICS.isBad())
   4829     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
   4830 
   4831   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
   4832     return Diag(From->getLocStart(),
   4833                 diag::err_typecheck_bool_condition)
   4834                   << From->getType() << From->getSourceRange();
   4835   return ExprError();
   4836 }
   4837 
   4838 /// Check that the specified conversion is permitted in a converted constant
   4839 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
   4840 /// is acceptable.
   4841 static bool CheckConvertedConstantConversions(Sema &S,
   4842                                               StandardConversionSequence &SCS) {
   4843   // Since we know that the target type is an integral or unscoped enumeration
   4844   // type, most conversion kinds are impossible. All possible First and Third
   4845   // conversions are fine.
   4846   switch (SCS.Second) {
   4847   case ICK_Identity:
   4848   case ICK_Integral_Promotion:
   4849   case ICK_Integral_Conversion:
   4850   case ICK_Zero_Event_Conversion:
   4851     return true;
   4852 
   4853   case ICK_Boolean_Conversion:
   4854     // Conversion from an integral or unscoped enumeration type to bool is
   4855     // classified as ICK_Boolean_Conversion, but it's also an integral
   4856     // conversion, so it's permitted in a converted constant expression.
   4857     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
   4858            SCS.getToType(2)->isBooleanType();
   4859 
   4860   case ICK_Floating_Integral:
   4861   case ICK_Complex_Real:
   4862     return false;
   4863 
   4864   case ICK_Lvalue_To_Rvalue:
   4865   case ICK_Array_To_Pointer:
   4866   case ICK_Function_To_Pointer:
   4867   case ICK_NoReturn_Adjustment:
   4868   case ICK_Qualification:
   4869   case ICK_Compatible_Conversion:
   4870   case ICK_Vector_Conversion:
   4871   case ICK_Vector_Splat:
   4872   case ICK_Derived_To_Base:
   4873   case ICK_Pointer_Conversion:
   4874   case ICK_Pointer_Member:
   4875   case ICK_Block_Pointer_Conversion:
   4876   case ICK_Writeback_Conversion:
   4877   case ICK_Floating_Promotion:
   4878   case ICK_Complex_Promotion:
   4879   case ICK_Complex_Conversion:
   4880   case ICK_Floating_Conversion:
   4881   case ICK_TransparentUnionConversion:
   4882     llvm_unreachable("unexpected second conversion kind");
   4883 
   4884   case ICK_Num_Conversion_Kinds:
   4885     break;
   4886   }
   4887 
   4888   llvm_unreachable("unknown conversion kind");
   4889 }
   4890 
   4891 /// CheckConvertedConstantExpression - Check that the expression From is a
   4892 /// converted constant expression of type T, perform the conversion and produce
   4893 /// the converted expression, per C++11 [expr.const]p3.
   4894 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
   4895                                                   llvm::APSInt &Value,
   4896                                                   CCEKind CCE) {
   4897   assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
   4898   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
   4899 
   4900   if (checkPlaceholderForOverload(*this, From))
   4901     return ExprError();
   4902 
   4903   // C++11 [expr.const]p3 with proposed wording fixes:
   4904   //  A converted constant expression of type T is a core constant expression,
   4905   //  implicitly converted to a prvalue of type T, where the converted
   4906   //  expression is a literal constant expression and the implicit conversion
   4907   //  sequence contains only user-defined conversions, lvalue-to-rvalue
   4908   //  conversions, integral promotions, and integral conversions other than
   4909   //  narrowing conversions.
   4910   ImplicitConversionSequence ICS =
   4911     TryImplicitConversion(From, T,
   4912                           /*SuppressUserConversions=*/false,
   4913                           /*AllowExplicit=*/false,
   4914                           /*InOverloadResolution=*/false,
   4915                           /*CStyle=*/false,
   4916                           /*AllowObjcWritebackConversion=*/false);
   4917   StandardConversionSequence *SCS = 0;
   4918   switch (ICS.getKind()) {
   4919   case ImplicitConversionSequence::StandardConversion:
   4920     if (!CheckConvertedConstantConversions(*this, ICS.Standard))
   4921       return Diag(From->getLocStart(),
   4922                   diag::err_typecheck_converted_constant_expression_disallowed)
   4923                << From->getType() << From->getSourceRange() << T;
   4924     SCS = &ICS.Standard;
   4925     break;
   4926   case ImplicitConversionSequence::UserDefinedConversion:
   4927     // We are converting from class type to an integral or enumeration type, so
   4928     // the Before sequence must be trivial.
   4929     if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
   4930       return Diag(From->getLocStart(),
   4931                   diag::err_typecheck_converted_constant_expression_disallowed)
   4932                << From->getType() << From->getSourceRange() << T;
   4933     SCS = &ICS.UserDefined.After;
   4934     break;
   4935   case ImplicitConversionSequence::AmbiguousConversion:
   4936   case ImplicitConversionSequence::BadConversion:
   4937     if (!DiagnoseMultipleUserDefinedConversion(From, T))
   4938       return Diag(From->getLocStart(),
   4939                   diag::err_typecheck_converted_constant_expression)
   4940                     << From->getType() << From->getSourceRange() << T;
   4941     return ExprError();
   4942 
   4943   case ImplicitConversionSequence::EllipsisConversion:
   4944     llvm_unreachable("ellipsis conversion in converted constant expression");
   4945   }
   4946 
   4947   ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
   4948   if (Result.isInvalid())
   4949     return Result;
   4950 
   4951   // Check for a narrowing implicit conversion.
   4952   APValue PreNarrowingValue;
   4953   QualType PreNarrowingType;
   4954   switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
   4955                                 PreNarrowingType)) {
   4956   case NK_Variable_Narrowing:
   4957     // Implicit conversion to a narrower type, and the value is not a constant
   4958     // expression. We'll diagnose this in a moment.
   4959   case NK_Not_Narrowing:
   4960     break;
   4961 
   4962   case NK_Constant_Narrowing:
   4963     Diag(From->getLocStart(),
   4964          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
   4965                              diag::err_cce_narrowing)
   4966       << CCE << /*Constant*/1
   4967       << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
   4968     break;
   4969 
   4970   case NK_Type_Narrowing:
   4971     Diag(From->getLocStart(),
   4972          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
   4973                              diag::err_cce_narrowing)
   4974       << CCE << /*Constant*/0 << From->getType() << T;
   4975     break;
   4976   }
   4977 
   4978   // Check the expression is a constant expression.
   4979   SmallVector<PartialDiagnosticAt, 8> Notes;
   4980   Expr::EvalResult Eval;
   4981   Eval.Diag = &Notes;
   4982 
   4983   if (!Result.get()->EvaluateAsRValue(Eval, Context) || !Eval.Val.isInt()) {
   4984     // The expression can't be folded, so we can't keep it at this position in
   4985     // the AST.
   4986     Result = ExprError();
   4987   } else {
   4988     Value = Eval.Val.getInt();
   4989 
   4990     if (Notes.empty()) {
   4991       // It's a constant expression.
   4992       return Result;
   4993     }
   4994   }
   4995 
   4996   // It's not a constant expression. Produce an appropriate diagnostic.
   4997   if (Notes.size() == 1 &&
   4998       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
   4999     Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
   5000   else {
   5001     Diag(From->getLocStart(), diag::err_expr_not_cce)
   5002       << CCE << From->getSourceRange();
   5003     for (unsigned I = 0; I < Notes.size(); ++I)
   5004       Diag(Notes[I].first, Notes[I].second);
   5005   }
   5006   return Result;
   5007 }
   5008 
   5009 /// dropPointerConversions - If the given standard conversion sequence
   5010 /// involves any pointer conversions, remove them.  This may change
   5011 /// the result type of the conversion sequence.
   5012 static void dropPointerConversion(StandardConversionSequence &SCS) {
   5013   if (SCS.Second == ICK_Pointer_Conversion) {
   5014     SCS.Second = ICK_Identity;
   5015     SCS.Third = ICK_Identity;
   5016     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
   5017   }
   5018 }
   5019 
   5020 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
   5021 /// convert the expression From to an Objective-C pointer type.
   5022 static ImplicitConversionSequence
   5023 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
   5024   // Do an implicit conversion to 'id'.
   5025   QualType Ty = S.Context.getObjCIdType();
   5026   ImplicitConversionSequence ICS
   5027     = TryImplicitConversion(S, From, Ty,
   5028                             // FIXME: Are these flags correct?
   5029                             /*SuppressUserConversions=*/false,
   5030                             /*AllowExplicit=*/true,
   5031                             /*InOverloadResolution=*/false,
   5032                             /*CStyle=*/false,
   5033                             /*AllowObjCWritebackConversion=*/false);
   5034 
   5035   // Strip off any final conversions to 'id'.
   5036   switch (ICS.getKind()) {
   5037   case ImplicitConversionSequence::BadConversion:
   5038   case ImplicitConversionSequence::AmbiguousConversion:
   5039   case ImplicitConversionSequence::EllipsisConversion:
   5040     break;
   5041 
   5042   case ImplicitConversionSequence::UserDefinedConversion:
   5043     dropPointerConversion(ICS.UserDefined.After);
   5044     break;
   5045 
   5046   case ImplicitConversionSequence::StandardConversion:
   5047     dropPointerConversion(ICS.Standard);
   5048     break;
   5049   }
   5050 
   5051   return ICS;
   5052 }
   5053 
   5054 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
   5055 /// conversion of the expression From to an Objective-C pointer type.
   5056 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
   5057   if (checkPlaceholderForOverload(*this, From))
   5058     return ExprError();
   5059 
   5060   QualType Ty = Context.getObjCIdType();
   5061   ImplicitConversionSequence ICS =
   5062     TryContextuallyConvertToObjCPointer(*this, From);
   5063   if (!ICS.isBad())
   5064     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
   5065   return ExprError();
   5066 }
   5067 
   5068 /// Determine whether the provided type is an integral type, or an enumeration
   5069 /// type of a permitted flavor.
   5070 bool Sema::ICEConvertDiagnoser::match(QualType T) {
   5071   return AllowScopedEnumerations ? T->isIntegralOrEnumerationType()
   5072                                  : T->isIntegralOrUnscopedEnumerationType();
   5073 }
   5074 
   5075 static ExprResult
   5076 diagnoseAmbiguousConversion(Sema &SemaRef, SourceLocation Loc, Expr *From,
   5077                             Sema::ContextualImplicitConverter &Converter,
   5078                             QualType T, UnresolvedSetImpl &ViableConversions) {
   5079 
   5080   if (Converter.Suppress)
   5081     return ExprError();
   5082 
   5083   Converter.diagnoseAmbiguous(SemaRef, Loc, T) << From->getSourceRange();
   5084   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
   5085     CXXConversionDecl *Conv =
   5086         cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
   5087     QualType ConvTy = Conv->getConversionType().getNonReferenceType();
   5088     Converter.noteAmbiguous(SemaRef, Conv, ConvTy);
   5089   }
   5090   return SemaRef.Owned(From);
   5091 }
   5092 
   5093 static bool
   5094 diagnoseNoViableConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
   5095                            Sema::ContextualImplicitConverter &Converter,
   5096                            QualType T, bool HadMultipleCandidates,
   5097                            UnresolvedSetImpl &ExplicitConversions) {
   5098   if (ExplicitConversions.size() == 1 && !Converter.Suppress) {
   5099     DeclAccessPair Found = ExplicitConversions[0];
   5100     CXXConversionDecl *Conversion =
   5101         cast<CXXConversionDecl>(Found->getUnderlyingDecl());
   5102 
   5103     // The user probably meant to invoke the given explicit
   5104     // conversion; use it.
   5105     QualType ConvTy = Conversion->getConversionType().getNonReferenceType();
   5106     std::string TypeStr;
   5107     ConvTy.getAsStringInternal(TypeStr, SemaRef.getPrintingPolicy());
   5108 
   5109     Converter.diagnoseExplicitConv(SemaRef, Loc, T, ConvTy)
   5110         << FixItHint::CreateInsertion(From->getLocStart(),
   5111                                       "static_cast<" + TypeStr + ">(")
   5112         << FixItHint::CreateInsertion(
   5113                SemaRef.PP.getLocForEndOfToken(From->getLocEnd()), ")");
   5114     Converter.noteExplicitConv(SemaRef, Conversion, ConvTy);
   5115 
   5116     // If we aren't in a SFINAE context, build a call to the
   5117     // explicit conversion function.
   5118     if (SemaRef.isSFINAEContext())
   5119       return true;
   5120 
   5121     SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
   5122     ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
   5123                                                        HadMultipleCandidates);
   5124     if (Result.isInvalid())
   5125       return true;
   5126     // Record usage of conversion in an implicit cast.
   5127     From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
   5128                                     CK_UserDefinedConversion, Result.get(), 0,
   5129                                     Result.get()->getValueKind());
   5130   }
   5131   return false;
   5132 }
   5133 
   5134 static bool recordConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
   5135                              Sema::ContextualImplicitConverter &Converter,
   5136                              QualType T, bool HadMultipleCandidates,
   5137                              DeclAccessPair &Found) {
   5138   CXXConversionDecl *Conversion =
   5139       cast<CXXConversionDecl>(Found->getUnderlyingDecl());
   5140   SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
   5141 
   5142   QualType ToType = Conversion->getConversionType().getNonReferenceType();
   5143   if (!Converter.SuppressConversion) {
   5144     if (SemaRef.isSFINAEContext())
   5145       return true;
   5146 
   5147     Converter.diagnoseConversion(SemaRef, Loc, T, ToType)
   5148         << From->getSourceRange();
   5149   }
   5150 
   5151   ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
   5152                                                      HadMultipleCandidates);
   5153   if (Result.isInvalid())
   5154     return true;
   5155   // Record usage of conversion in an implicit cast.
   5156   From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
   5157                                   CK_UserDefinedConversion, Result.get(), 0,
   5158                                   Result.get()->getValueKind());
   5159   return false;
   5160 }
   5161 
   5162 static ExprResult finishContextualImplicitConversion(
   5163     Sema &SemaRef, SourceLocation Loc, Expr *From,
   5164     Sema::ContextualImplicitConverter &Converter) {
   5165   if (!Converter.match(From->getType()) && !Converter.Suppress)
   5166     Converter.diagnoseNoMatch(SemaRef, Loc, From->getType())
   5167         << From->getSourceRange();
   5168 
   5169   return SemaRef.DefaultLvalueConversion(From);
   5170 }
   5171 
   5172 static void
   5173 collectViableConversionCandidates(Sema &SemaRef, Expr *From, QualType ToType,
   5174                                   UnresolvedSetImpl &ViableConversions,
   5175                                   OverloadCandidateSet &CandidateSet) {
   5176   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
   5177     DeclAccessPair FoundDecl = ViableConversions[I];
   5178     NamedDecl *D = FoundDecl.getDecl();
   5179     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
   5180     if (isa<UsingShadowDecl>(D))
   5181       D = cast<UsingShadowDecl>(D)->getTargetDecl();
   5182 
   5183     CXXConversionDecl *Conv;
   5184     FunctionTemplateDecl *ConvTemplate;
   5185     if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
   5186       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
   5187     else
   5188       Conv = cast<CXXConversionDecl>(D);
   5189 
   5190     if (ConvTemplate)
   5191       SemaRef.AddTemplateConversionCandidate(
   5192           ConvTemplate, FoundDecl, ActingContext, From, ToType, CandidateSet);
   5193     else
   5194       SemaRef.AddConversionCandidate(Conv, FoundDecl, ActingContext, From,
   5195                                      ToType, CandidateSet);
   5196   }
   5197 }
   5198 
   5199 /// \brief Attempt to convert the given expression to a type which is accepted
   5200 /// by the given converter.
   5201 ///
   5202 /// This routine will attempt to convert an expression of class type to a
   5203 /// type accepted by the specified converter. In C++11 and before, the class
   5204 /// must have a single non-explicit conversion function converting to a matching
   5205 /// type. In C++1y, there can be multiple such conversion functions, but only
   5206 /// one target type.
   5207 ///
   5208 /// \param Loc The source location of the construct that requires the
   5209 /// conversion.
   5210 ///
   5211 /// \param From The expression we're converting from.
   5212 ///
   5213 /// \param Converter Used to control and diagnose the conversion process.
   5214 ///
   5215 /// \returns The expression, converted to an integral or enumeration type if
   5216 /// successful.
   5217 ExprResult Sema::PerformContextualImplicitConversion(
   5218     SourceLocation Loc, Expr *From, ContextualImplicitConverter &Converter) {
   5219   // We can't perform any more checking for type-dependent expressions.
   5220   if (From->isTypeDependent())
   5221     return Owned(From);
   5222 
   5223   // Process placeholders immediately.
   5224   if (From->hasPlaceholderType()) {
   5225     ExprResult result = CheckPlaceholderExpr(From);
   5226     if (result.isInvalid())
   5227       return result;
   5228     From = result.take();
   5229   }
   5230 
   5231   // If the expression already has a matching type, we're golden.
   5232   QualType T = From->getType();
   5233   if (Converter.match(T))
   5234     return DefaultLvalueConversion(From);
   5235 
   5236   // FIXME: Check for missing '()' if T is a function type?
   5237 
   5238   // We can only perform contextual implicit conversions on objects of class
   5239   // type.
   5240   const RecordType *RecordTy = T->getAs<RecordType>();
   5241   if (!RecordTy || !getLangOpts().CPlusPlus) {
   5242     if (!Converter.Suppress)
   5243       Converter.diagnoseNoMatch(*this, Loc, T) << From->getSourceRange();
   5244     return Owned(From);
   5245   }
   5246 
   5247   // We must have a complete class type.
   5248   struct TypeDiagnoserPartialDiag : TypeDiagnoser {
   5249     ContextualImplicitConverter &Converter;
   5250     Expr *From;
   5251 
   5252     TypeDiagnoserPartialDiag(ContextualImplicitConverter &Converter, Expr *From)
   5253         : TypeDiagnoser(Converter.Suppress), Converter(Converter), From(From) {}
   5254 
   5255     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
   5256       Converter.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
   5257     }
   5258   } IncompleteDiagnoser(Converter, From);
   5259 
   5260   if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
   5261     return Owned(From);
   5262 
   5263   // Look for a conversion to an integral or enumeration type.
   5264   UnresolvedSet<4>
   5265       ViableConversions; // These are *potentially* viable in C++1y.
   5266   UnresolvedSet<4> ExplicitConversions;
   5267   std::pair<CXXRecordDecl::conversion_iterator,
   5268             CXXRecordDecl::conversion_iterator> Conversions =
   5269       cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
   5270 
   5271   bool HadMultipleCandidates =
   5272       (std::distance(Conversions.first, Conversions.second) > 1);
   5273 
   5274   // To check that there is only one target type, in C++1y:
   5275   QualType ToType;
   5276   bool HasUniqueTargetType = true;
   5277 
   5278   // Collect explicit or viable (potentially in C++1y) conversions.
   5279   for (CXXRecordDecl::conversion_iterator I = Conversions.first,
   5280                                           E = Conversions.second;
   5281        I != E; ++I) {
   5282     NamedDecl *D = (*I)->getUnderlyingDecl();
   5283     CXXConversionDecl *Conversion;
   5284     FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D);
   5285     if (ConvTemplate) {
   5286       if (getLangOpts().CPlusPlus1y)
   5287         Conversion = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
   5288       else
   5289         continue; // C++11 does not consider conversion operator templates(?).
   5290     } else
   5291       Conversion = cast<CXXConversionDecl>(D);
   5292 
   5293     assert((!ConvTemplate || getLangOpts().CPlusPlus1y) &&
   5294            "Conversion operator templates are considered potentially "
   5295            "viable in C++1y");
   5296 
   5297     QualType CurToType = Conversion->getConversionType().getNonReferenceType();
   5298     if (Converter.match(CurToType) || ConvTemplate) {
   5299 
   5300       if (Conversion->isExplicit()) {
   5301         // FIXME: For C++1y, do we need this restriction?
   5302         // cf. diagnoseNoViableConversion()
   5303         if (!ConvTemplate)
   5304           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
   5305       } else {
   5306         if (!ConvTemplate && getLangOpts().CPlusPlus1y) {
   5307           if (ToType.isNull())
   5308             ToType = CurToType.getUnqualifiedType();
   5309           else if (HasUniqueTargetType &&
   5310                    (CurToType.getUnqualifiedType() != ToType))
   5311             HasUniqueTargetType = false;
   5312         }
   5313         ViableConversions.addDecl(I.getDecl(), I.getAccess());
   5314       }
   5315     }
   5316   }
   5317 
   5318   if (getLangOpts().CPlusPlus1y) {
   5319     // C++1y [conv]p6:
   5320     // ... An expression e of class type E appearing in such a context
   5321     // is said to be contextually implicitly converted to a specified
   5322     // type T and is well-formed if and only if e can be implicitly
   5323     // converted to a type T that is determined as follows: E is searched
   5324     // for conversion functions whose return type is cv T or reference to
   5325     // cv T such that T is allowed by the context. There shall be
   5326     // exactly one such T.
   5327 
   5328     // If no unique T is found:
   5329     if (ToType.isNull()) {
   5330       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
   5331                                      HadMultipleCandidates,
   5332                                      ExplicitConversions))
   5333         return ExprError();
   5334       return finishContextualImplicitConversion(*this, Loc, From, Converter);
   5335     }
   5336 
   5337     // If more than one unique Ts are found:
   5338     if (!HasUniqueTargetType)
   5339       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
   5340                                          ViableConversions);
   5341 
   5342     // If one unique T is found:
   5343     // First, build a candidate set from the previously recorded
   5344     // potentially viable conversions.
   5345     OverloadCandidateSet CandidateSet(Loc);
   5346     collectViableConversionCandidates(*this, From, ToType, ViableConversions,
   5347                                       CandidateSet);
   5348 
   5349     // Then, perform overload resolution over the candidate set.
   5350     OverloadCandidateSet::iterator Best;
   5351     switch (CandidateSet.BestViableFunction(*this, Loc, Best)) {
   5352     case OR_Success: {
   5353       // Apply this conversion.
   5354       DeclAccessPair Found =
   5355           DeclAccessPair::make(Best->Function, Best->FoundDecl.getAccess());
   5356       if (recordConversion(*this, Loc, From, Converter, T,
   5357                            HadMultipleCandidates, Found))
   5358         return ExprError();
   5359       break;
   5360     }
   5361     case OR_Ambiguous:
   5362       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
   5363                                          ViableConversions);
   5364     case OR_No_Viable_Function:
   5365       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
   5366                                      HadMultipleCandidates,
   5367                                      ExplicitConversions))
   5368         return ExprError();
   5369     // fall through 'OR_Deleted' case.
   5370     case OR_Deleted:
   5371       // We'll complain below about a non-integral condition type.
   5372       break;
   5373     }
   5374   } else {
   5375     switch (ViableConversions.size()) {
   5376     case 0: {
   5377       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
   5378                                      HadMultipleCandidates,
   5379                                      ExplicitConversions))
   5380         return ExprError();
   5381 
   5382       // We'll complain below about a non-integral condition type.
   5383       break;
   5384     }
   5385     case 1: {
   5386       // Apply this conversion.
   5387       DeclAccessPair Found = ViableConversions[0];
   5388       if (recordConversion(*this, Loc, From, Converter, T,
   5389                            HadMultipleCandidates, Found))
   5390         return ExprError();
   5391       break;
   5392     }
   5393     default:
   5394       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
   5395                                          ViableConversions);
   5396     }
   5397   }
   5398 
   5399   return finishContextualImplicitConversion(*this, Loc, From, Converter);
   5400 }
   5401 
   5402 /// AddOverloadCandidate - Adds the given function to the set of
   5403 /// candidate functions, using the given function call arguments.  If
   5404 /// @p SuppressUserConversions, then don't allow user-defined
   5405 /// conversions via constructors or conversion operators.
   5406 ///
   5407 /// \param PartialOverloading true if we are performing "partial" overloading
   5408 /// based on an incomplete set of function arguments. This feature is used by
   5409 /// code completion.
   5410 void
   5411 Sema::AddOverloadCandidate(FunctionDecl *Function,
   5412                            DeclAccessPair FoundDecl,
   5413                            ArrayRef<Expr *> Args,
   5414                            OverloadCandidateSet& CandidateSet,
   5415                            bool SuppressUserConversions,
   5416                            bool PartialOverloading,
   5417                            bool AllowExplicit) {
   5418   const FunctionProtoType* Proto
   5419     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
   5420   assert(Proto && "Functions without a prototype cannot be overloaded");
   5421   assert(!Function->getDescribedFunctionTemplate() &&
   5422          "Use AddTemplateOverloadCandidate for function templates");
   5423 
   5424   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
   5425     if (!isa<CXXConstructorDecl>(Method)) {
   5426       // If we get here, it's because we're calling a member function
   5427       // that is named without a member access expression (e.g.,
   5428       // "this->f") that was either written explicitly or created
   5429       // implicitly. This can happen with a qualified call to a member
   5430       // function, e.g., X::f(). We use an empty type for the implied
   5431       // object argument (C++ [over.call.func]p3), and the acting context
   5432       // is irrelevant.
   5433       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
   5434                          QualType(), Expr::Classification::makeSimpleLValue(),
   5435                          Args, CandidateSet, SuppressUserConversions);
   5436       return;
   5437     }
   5438     // We treat a constructor like a non-member function, since its object
   5439     // argument doesn't participate in overload resolution.
   5440   }
   5441 
   5442   if (!CandidateSet.isNewCandidate(Function))
   5443     return;
   5444 
   5445   // Overload resolution is always an unevaluated context.
   5446   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
   5447 
   5448   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
   5449     // C++ [class.copy]p3:
   5450     //   A member function template is never instantiated to perform the copy
   5451     //   of a class object to an object of its class type.
   5452     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
   5453     if (Args.size() == 1 &&
   5454         Constructor->isSpecializationCopyingObject() &&
   5455         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
   5456          IsDerivedFrom(Args[0]->getType(), ClassType)))
   5457       return;
   5458   }
   5459 
   5460   // Add this candidate
   5461   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
   5462   Candidate.FoundDecl = FoundDecl;
   5463   Candidate.Function = Function;
   5464   Candidate.Viable = true;
   5465   Candidate.IsSurrogate = false;
   5466   Candidate.IgnoreObjectArgument = false;
   5467   Candidate.ExplicitCallArguments = Args.size();
   5468 
   5469   unsigned NumArgsInProto = Proto->getNumArgs();
   5470 
   5471   // (C++ 13.3.2p2): A candidate function having fewer than m
   5472   // parameters is viable only if it has an ellipsis in its parameter
   5473   // list (8.3.5).
   5474   if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
   5475       !Proto->isVariadic()) {
   5476     Candidate.Viable = false;
   5477     Candidate.FailureKind = ovl_fail_too_many_arguments;
   5478     return;
   5479   }
   5480 
   5481   // (C++ 13.3.2p2): A candidate function having more than m parameters
   5482   // is viable only if the (m+1)st parameter has a default argument
   5483   // (8.3.6). For the purposes of overload resolution, the
   5484   // parameter list is truncated on the right, so that there are
   5485   // exactly m parameters.
   5486   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
   5487   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
   5488     // Not enough arguments.
   5489     Candidate.Viable = false;
   5490     Candidate.FailureKind = ovl_fail_too_few_arguments;
   5491     return;
   5492   }
   5493 
   5494   // (CUDA B.1): Check for invalid calls between targets.
   5495   if (getLangOpts().CUDA)
   5496     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
   5497       if (CheckCUDATarget(Caller, Function)) {
   5498         Candidate.Viable = false;
   5499         Candidate.FailureKind = ovl_fail_bad_target;
   5500         return;
   5501       }
   5502 
   5503   // Determine the implicit conversion sequences for each of the
   5504   // arguments.
   5505   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
   5506     if (ArgIdx < NumArgsInProto) {
   5507       // (C++ 13.3.2p3): for F to be a viable function, there shall
   5508       // exist for each argument an implicit conversion sequence
   5509       // (13.3.3.1) that converts that argument to the corresponding
   5510       // parameter of F.
   5511       QualType ParamType = Proto->getArgType(ArgIdx);
   5512       Candidate.Conversions[ArgIdx]
   5513         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
   5514                                 SuppressUserConversions,
   5515                                 /*InOverloadResolution=*/true,
   5516                                 /*AllowObjCWritebackConversion=*/
   5517                                   getLangOpts().ObjCAutoRefCount,
   5518                                 AllowExplicit);
   5519       if (Candidate.Conversions[ArgIdx].isBad()) {
   5520         Candidate.Viable = false;
   5521         Candidate.FailureKind = ovl_fail_bad_conversion;
   5522         break;
   5523       }
   5524     } else {
   5525       // (C++ 13.3.2p2): For the purposes of overload resolution, any
   5526       // argument for which there is no corresponding parameter is
   5527       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
   5528       Candidate.Conversions[ArgIdx].setEllipsis();
   5529     }
   5530   }
   5531 }
   5532 
   5533 /// \brief Add all of the function declarations in the given function set to
   5534 /// the overload canddiate set.
   5535 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
   5536                                  ArrayRef<Expr *> Args,
   5537                                  OverloadCandidateSet& CandidateSet,
   5538                                  bool SuppressUserConversions,
   5539                                TemplateArgumentListInfo *ExplicitTemplateArgs) {
   5540   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
   5541     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
   5542     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
   5543       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
   5544         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
   5545                            cast<CXXMethodDecl>(FD)->getParent(),
   5546                            Args[0]->getType(), Args[0]->Classify(Context),
   5547                            Args.slice(1), CandidateSet,
   5548                            SuppressUserConversions);
   5549       else
   5550         AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
   5551                              SuppressUserConversions);
   5552     } else {
   5553       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
   5554       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
   5555           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
   5556         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
   5557                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
   5558                                    ExplicitTemplateArgs,
   5559                                    Args[0]->getType(),
   5560                                    Args[0]->Classify(Context), Args.slice(1),
   5561                                    CandidateSet, SuppressUserConversions);
   5562       else
   5563         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
   5564                                      ExplicitTemplateArgs, Args,
   5565                                      CandidateSet, SuppressUserConversions);
   5566     }
   5567   }
   5568 }
   5569 
   5570 /// AddMethodCandidate - Adds a named decl (which is some kind of
   5571 /// method) as a method candidate to the given overload set.
   5572 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
   5573                               QualType ObjectType,
   5574                               Expr::Classification ObjectClassification,
   5575                               ArrayRef<Expr *> Args,
   5576                               OverloadCandidateSet& CandidateSet,
   5577                               bool SuppressUserConversions) {
   5578   NamedDecl *Decl = FoundDecl.getDecl();
   5579   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
   5580 
   5581   if (isa<UsingShadowDecl>(Decl))
   5582     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
   5583 
   5584   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
   5585     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
   5586            "Expected a member function template");
   5587     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
   5588                                /*ExplicitArgs*/ 0,
   5589                                ObjectType, ObjectClassification,
   5590                                Args, CandidateSet,
   5591                                SuppressUserConversions);
   5592   } else {
   5593     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
   5594                        ObjectType, ObjectClassification,
   5595                        Args,
   5596                        CandidateSet, SuppressUserConversions);
   5597   }
   5598 }
   5599 
   5600 /// AddMethodCandidate - Adds the given C++ member function to the set
   5601 /// of candidate functions, using the given function call arguments
   5602 /// and the object argument (@c Object). For example, in a call
   5603 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
   5604 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
   5605 /// allow user-defined conversions via constructors or conversion
   5606 /// operators.
   5607 void
   5608 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
   5609                          CXXRecordDecl *ActingContext, QualType ObjectType,
   5610                          Expr::Classification ObjectClassification,
   5611                          ArrayRef<Expr *> Args,
   5612                          OverloadCandidateSet& CandidateSet,
   5613                          bool SuppressUserConversions) {
   5614   const FunctionProtoType* Proto
   5615     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
   5616   assert(Proto && "Methods without a prototype cannot be overloaded");
   5617   assert(!isa<CXXConstructorDecl>(Method) &&
   5618          "Use AddOverloadCandidate for constructors");
   5619 
   5620   if (!CandidateSet.isNewCandidate(Method))
   5621     return;
   5622 
   5623   // Overload resolution is always an unevaluated context.
   5624   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
   5625 
   5626   // Add this candidate
   5627   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
   5628   Candidate.FoundDecl = FoundDecl;
   5629   Candidate.Function = Method;
   5630   Candidate.IsSurrogate = false;
   5631   Candidate.IgnoreObjectArgument = false;
   5632   Candidate.ExplicitCallArguments = Args.size();
   5633 
   5634   unsigned NumArgsInProto = Proto->getNumArgs();
   5635 
   5636   // (C++ 13.3.2p2): A candidate function having fewer than m
   5637   // parameters is viable only if it has an ellipsis in its parameter
   5638   // list (8.3.5).
   5639   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
   5640     Candidate.Viable = false;
   5641     Candidate.FailureKind = ovl_fail_too_many_arguments;
   5642     return;
   5643   }
   5644 
   5645   // (C++ 13.3.2p2): A candidate function having more than m parameters
   5646   // is viable only if the (m+1)st parameter has a default argument
   5647   // (8.3.6). For the purposes of overload resolution, the
   5648   // parameter list is truncated on the right, so that there are
   5649   // exactly m parameters.
   5650   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
   5651   if (Args.size() < MinRequiredArgs) {
   5652     // Not enough arguments.
   5653     Candidate.Viable = false;
   5654     Candidate.FailureKind = ovl_fail_too_few_arguments;
   5655     return;
   5656   }
   5657 
   5658   Candidate.Viable = true;
   5659 
   5660   if (Method->isStatic() || ObjectType.isNull())
   5661     // The implicit object argument is ignored.
   5662     Candidate.IgnoreObjectArgument = true;
   5663   else {
   5664     // Determine the implicit conversion sequence for the object
   5665     // parameter.
   5666     Candidate.Conversions[0]
   5667       = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
   5668                                         Method, ActingContext);
   5669     if (Candidate.Conversions[0].isBad()) {
   5670       Candidate.Viable = false;
   5671       Candidate.FailureKind = ovl_fail_bad_conversion;
   5672       return;
   5673     }
   5674   }
   5675 
   5676   // Determine the implicit conversion sequences for each of the
   5677   // arguments.
   5678   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
   5679     if (ArgIdx < NumArgsInProto) {
   5680       // (C++ 13.3.2p3): for F to be a viable function, there shall
   5681       // exist for each argument an implicit conversion sequence
   5682       // (13.3.3.1) that converts that argument to the corresponding
   5683       // parameter of F.
   5684       QualType ParamType = Proto->getArgType(ArgIdx);
   5685       Candidate.Conversions[ArgIdx + 1]
   5686         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
   5687                                 SuppressUserConversions,
   5688                                 /*InOverloadResolution=*/true,
   5689                                 /*AllowObjCWritebackConversion=*/
   5690                                   getLangOpts().ObjCAutoRefCount);
   5691       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
   5692         Candidate.Viable = false;
   5693         Candidate.FailureKind = ovl_fail_bad_conversion;
   5694         break;
   5695       }
   5696     } else {
   5697       // (C++ 13.3.2p2): For the purposes of overload resolution, any
   5698       // argument for which there is no corresponding parameter is
   5699       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
   5700       Candidate.Conversions[ArgIdx + 1].setEllipsis();
   5701     }
   5702   }
   5703 }
   5704 
   5705 /// \brief Add a C++ member function template as a candidate to the candidate
   5706 /// set, using template argument deduction to produce an appropriate member
   5707 /// function template specialization.
   5708 void
   5709 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
   5710                                  DeclAccessPair FoundDecl,
   5711                                  CXXRecordDecl *ActingContext,
   5712                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
   5713                                  QualType ObjectType,
   5714                                  Expr::Classification ObjectClassification,
   5715                                  ArrayRef<Expr *> Args,
   5716                                  OverloadCandidateSet& CandidateSet,
   5717                                  bool SuppressUserConversions) {
   5718   if (!CandidateSet.isNewCandidate(MethodTmpl))
   5719     return;
   5720 
   5721   // C++ [over.match.funcs]p7:
   5722   //   In each case where a candidate is a function template, candidate
   5723   //   function template specializations are generated using template argument
   5724   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
   5725   //   candidate functions in the usual way.113) A given name can refer to one
   5726   //   or more function templates and also to a set of overloaded non-template
   5727   //   functions. In such a case, the candidate functions generated from each
   5728   //   function template are combined with the set of non-template candidate
   5729   //   functions.
   5730   TemplateDeductionInfo Info(CandidateSet.getLocation());
   5731   FunctionDecl *Specialization = 0;
   5732   if (TemplateDeductionResult Result
   5733       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
   5734                                 Specialization, Info)) {
   5735     OverloadCandidate &Candidate = CandidateSet.addCandidate();
   5736     Candidate.FoundDecl = FoundDecl;
   5737     Candidate.Function = MethodTmpl->getTemplatedDecl();
   5738     Candidate.Viable = false;
   5739     Candidate.FailureKind = ovl_fail_bad_deduction;
   5740     Candidate.IsSurrogate = false;
   5741     Candidate.IgnoreObjectArgument = false;
   5742     Candidate.ExplicitCallArguments = Args.size();
   5743     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
   5744                                                           Info);
   5745     return;
   5746   }
   5747 
   5748   // Add the function template specialization produced by template argument
   5749   // deduction as a candidate.
   5750   assert(Specialization && "Missing member function template specialization?");
   5751   assert(isa<CXXMethodDecl>(Specialization) &&
   5752          "Specialization is not a member function?");
   5753   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
   5754                      ActingContext, ObjectType, ObjectClassification, Args,
   5755                      CandidateSet, SuppressUserConversions);
   5756 }
   5757 
   5758 /// \brief Add a C++ function template specialization as a candidate
   5759 /// in the candidate set, using template argument deduction to produce
   5760 /// an appropriate function template specialization.
   5761 void
   5762 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
   5763                                    DeclAccessPair FoundDecl,
   5764                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
   5765                                    ArrayRef<Expr *> Args,
   5766                                    OverloadCandidateSet& CandidateSet,
   5767                                    bool SuppressUserConversions) {
   5768   if (!CandidateSet.isNewCandidate(FunctionTemplate))
   5769     return;
   5770 
   5771   // C++ [over.match.funcs]p7:
   5772   //   In each case where a candidate is a function template, candidate
   5773   //   function template specializations are generated using template argument
   5774   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
   5775   //   candidate functions in the usual way.113) A given name can refer to one
   5776   //   or more function templates and also to a set of overloaded non-template
   5777   //   functions. In such a case, the candidate functions generated from each
   5778   //   function template are combined with the set of non-template candidate
   5779   //   functions.
   5780   TemplateDeductionInfo Info(CandidateSet.getLocation());
   5781   FunctionDecl *Specialization = 0;
   5782   if (TemplateDeductionResult Result
   5783         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
   5784                                   Specialization, Info)) {
   5785     OverloadCandidate &Candidate = CandidateSet.addCandidate();
   5786     Candidate.FoundDecl = FoundDecl;
   5787     Candidate.Function = FunctionTemplate->getTemplatedDecl();
   5788     Candidate.Viable = false;
   5789     Candidate.FailureKind = ovl_fail_bad_deduction;
   5790     Candidate.IsSurrogate = false;
   5791     Candidate.IgnoreObjectArgument = false;
   5792     Candidate.ExplicitCallArguments = Args.size();
   5793     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
   5794                                                           Info);
   5795     return;
   5796   }
   5797 
   5798   // Add the function template specialization produced by template argument
   5799   // deduction as a candidate.
   5800   assert(Specialization && "Missing function template specialization?");
   5801   AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
   5802                        SuppressUserConversions);
   5803 }
   5804 
   5805 /// AddConversionCandidate - Add a C++ conversion function as a
   5806 /// candidate in the candidate set (C++ [over.match.conv],
   5807 /// C++ [over.match.copy]). From is the expression we're converting from,
   5808 /// and ToType is the type that we're eventually trying to convert to
   5809 /// (which may or may not be the same type as the type that the
   5810 /// conversion function produces).
   5811 void
   5812 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
   5813                              DeclAccessPair FoundDecl,
   5814                              CXXRecordDecl *ActingContext,
   5815                              Expr *From, QualType ToType,
   5816                              OverloadCandidateSet& CandidateSet) {
   5817   assert(!Conversion->getDescribedFunctionTemplate() &&
   5818          "Conversion function templates use AddTemplateConversionCandidate");
   5819   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
   5820   if (!CandidateSet.isNewCandidate(Conversion))
   5821     return;
   5822 
   5823   // If the conversion function has an undeduced return type, trigger its
   5824   // deduction now.
   5825   if (getLangOpts().CPlusPlus1y && ConvType->isUndeducedType()) {
   5826     if (DeduceReturnType(Conversion, From->getExprLoc()))
   5827       return;
   5828     ConvType = Conversion->getConversionType().getNonReferenceType();
   5829   }
   5830 
   5831   // Overload resolution is always an unevaluated context.
   5832   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
   5833 
   5834   // Add this candidate
   5835   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
   5836   Candidate.FoundDecl = FoundDecl;
   5837   Candidate.Function = Conversion;
   5838   Candidate.IsSurrogate = false;
   5839   Candidate.IgnoreObjectArgument = false;
   5840   Candidate.FinalConversion.setAsIdentityConversion();
   5841   Candidate.FinalConversion.setFromType(ConvType);
   5842   Candidate.FinalConversion.setAllToTypes(ToType);
   5843   Candidate.Viable = true;
   5844   Candidate.ExplicitCallArguments = 1;
   5845 
   5846   // C++ [over.match.funcs]p4:
   5847   //   For conversion functions, the function is considered to be a member of
   5848   //   the class of the implicit implied object argument for the purpose of
   5849   //   defining the type of the implicit object parameter.
   5850   //
   5851   // Determine the implicit conversion sequence for the implicit
   5852   // object parameter.
   5853   QualType ImplicitParamType = From->getType();
   5854   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
   5855     ImplicitParamType = FromPtrType->getPointeeType();
   5856   CXXRecordDecl *ConversionContext
   5857     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
   5858 
   5859   Candidate.Conversions[0]
   5860     = TryObjectArgumentInitialization(*this, From->getType(),
   5861                                       From->Classify(Context),
   5862                                       Conversion, ConversionContext);
   5863 
   5864   if (Candidate.Conversions[0].isBad()) {
   5865     Candidate.Viable = false;
   5866     Candidate.FailureKind = ovl_fail_bad_conversion;
   5867     return;
   5868   }
   5869 
   5870   // We won't go through a user-define type conversion function to convert a
   5871   // derived to base as such conversions are given Conversion Rank. They only
   5872   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
   5873   QualType FromCanon
   5874     = Context.getCanonicalType(From->getType().getUnqualifiedType());
   5875   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
   5876   if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
   5877     Candidate.Viable = false;
   5878     Candidate.FailureKind = ovl_fail_trivial_conversion;
   5879     return;
   5880   }
   5881 
   5882   // To determine what the conversion from the result of calling the
   5883   // conversion function to the type we're eventually trying to
   5884   // convert to (ToType), we need to synthesize a call to the
   5885   // conversion function and attempt copy initialization from it. This
   5886   // makes sure that we get the right semantics with respect to
   5887   // lvalues/rvalues and the type. Fortunately, we can allocate this
   5888   // call on the stack and we don't need its arguments to be
   5889   // well-formed.
   5890   DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
   5891                             VK_LValue, From->getLocStart());
   5892   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
   5893                                 Context.getPointerType(Conversion->getType()),
   5894                                 CK_FunctionToPointerDecay,
   5895                                 &ConversionRef, VK_RValue);
   5896 
   5897   QualType ConversionType = Conversion->getConversionType();
   5898   if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
   5899     Candidate.Viable = false;
   5900     Candidate.FailureKind = ovl_fail_bad_final_conversion;
   5901     return;
   5902   }
   5903 
   5904   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
   5905 
   5906   // Note that it is safe to allocate CallExpr on the stack here because
   5907   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
   5908   // allocator).
   5909   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
   5910   CallExpr Call(Context, &ConversionFn, None, CallResultType, VK,
   5911                 From->getLocStart());
   5912   ImplicitConversionSequence ICS =
   5913     TryCopyInitialization(*this, &Call, ToType,
   5914                           /*SuppressUserConversions=*/true,
   5915                           /*InOverloadResolution=*/false,
   5916                           /*AllowObjCWritebackConversion=*/false);
   5917 
   5918   switch (ICS.getKind()) {
   5919   case ImplicitConversionSequence::StandardConversion:
   5920     Candidate.FinalConversion = ICS.Standard;
   5921 
   5922     // C++ [over.ics.user]p3:
   5923     //   If the user-defined conversion is specified by a specialization of a
   5924     //   conversion function template, the second standard conversion sequence
   5925     //   shall have exact match rank.
   5926     if (Conversion->getPrimaryTemplate() &&
   5927         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
   5928       Candidate.Viable = false;
   5929       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
   5930     }
   5931 
   5932     // C++0x [dcl.init.ref]p5:
   5933     //    In the second case, if the reference is an rvalue reference and
   5934     //    the second standard conversion sequence of the user-defined
   5935     //    conversion sequence includes an lvalue-to-rvalue conversion, the
   5936     //    program is ill-formed.
   5937     if (ToType->isRValueReferenceType() &&
   5938         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
   5939       Candidate.Viable = false;
   5940       Candidate.FailureKind = ovl_fail_bad_final_conversion;
   5941     }
   5942     break;
   5943 
   5944   case ImplicitConversionSequence::BadConversion:
   5945     Candidate.Viable = false;
   5946     Candidate.FailureKind = ovl_fail_bad_final_conversion;
   5947     break;
   5948 
   5949   default:
   5950     llvm_unreachable(
   5951            "Can only end up with a standard conversion sequence or failure");
   5952   }
   5953 }
   5954 
   5955 /// \brief Adds a conversion function template specialization
   5956 /// candidate to the overload set, using template argument deduction
   5957 /// to deduce the template arguments of the conversion function
   5958 /// template from the type that we are converting to (C++
   5959 /// [temp.deduct.conv]).
   5960 void
   5961 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
   5962                                      DeclAccessPair FoundDecl,
   5963                                      CXXRecordDecl *ActingDC,
   5964                                      Expr *From, QualType ToType,
   5965                                      OverloadCandidateSet &CandidateSet) {
   5966   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
   5967          "Only conversion function templates permitted here");
   5968 
   5969   if (!CandidateSet.isNewCandidate(FunctionTemplate))
   5970     return;
   5971 
   5972   TemplateDeductionInfo Info(CandidateSet.getLocation());
   5973   CXXConversionDecl *Specialization = 0;
   5974   if (TemplateDeductionResult Result
   5975         = DeduceTemplateArguments(FunctionTemplate, ToType,
   5976                                   Specialization, Info)) {
   5977     OverloadCandidate &Candidate = CandidateSet.addCandidate();
   5978     Candidate.FoundDecl = FoundDecl;
   5979     Candidate.Function = FunctionTemplate->getTemplatedDecl();
   5980     Candidate.Viable = false;
   5981     Candidate.FailureKind = ovl_fail_bad_deduction;
   5982     Candidate.IsSurrogate = false;
   5983     Candidate.IgnoreObjectArgument = false;
   5984     Candidate.ExplicitCallArguments = 1;
   5985     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
   5986                                                           Info);
   5987     return;
   5988   }
   5989 
   5990   // Add the conversion function template specialization produced by
   5991   // template argument deduction as a candidate.
   5992   assert(Specialization && "Missing function template specialization?");
   5993   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
   5994                          CandidateSet);
   5995 }
   5996 
   5997 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
   5998 /// converts the given @c Object to a function pointer via the
   5999 /// conversion function @c Conversion, and then attempts to call it
   6000 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
   6001 /// the type of function that we'll eventually be calling.
   6002 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
   6003                                  DeclAccessPair FoundDecl,
   6004                                  CXXRecordDecl *ActingContext,
   6005                                  const FunctionProtoType *Proto,
   6006                                  Expr *Object,
   6007                                  ArrayRef<Expr *> Args,
   6008                                  OverloadCandidateSet& CandidateSet) {
   6009   if (!CandidateSet.isNewCandidate(Conversion))
   6010     return;
   6011 
   6012   // Overload resolution is always an unevaluated context.
   6013   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
   6014 
   6015   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
   6016   Candidate.FoundDecl = FoundDecl;
   6017   Candidate.Function = 0;
   6018   Candidate.Surrogate = Conversion;
   6019   Candidate.Viable = true;
   6020   Candidate.IsSurrogate = true;
   6021   Candidate.IgnoreObjectArgument = false;
   6022   Candidate.ExplicitCallArguments = Args.size();
   6023 
   6024   // Determine the implicit conversion sequence for the implicit
   6025   // object parameter.
   6026   ImplicitConversionSequence ObjectInit
   6027     = TryObjectArgumentInitialization(*this, Object->getType(),
   6028                                       Object->Classify(Context),
   6029                                       Conversion, ActingContext);
   6030   if (ObjectInit.isBad()) {
   6031     Candidate.Viable = false;
   6032     Candidate.FailureKind = ovl_fail_bad_conversion;
   6033     Candidate.Conversions[0] = ObjectInit;
   6034     return;
   6035   }
   6036 
   6037   // The first conversion is actually a user-defined conversion whose
   6038   // first conversion is ObjectInit's standard conversion (which is
   6039   // effectively a reference binding). Record it as such.
   6040   Candidate.Conversions[0].setUserDefined();
   6041   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
   6042   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
   6043   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
   6044   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
   6045   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
   6046   Candidate.Conversions[0].UserDefined.After
   6047     = Candidate.Conversions[0].UserDefined.Before;
   6048   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
   6049 
   6050   // Find the
   6051   unsigned NumArgsInProto = Proto->getNumArgs();
   6052 
   6053   // (C++ 13.3.2p2): A candidate function having fewer than m
   6054   // parameters is viable only if it has an ellipsis in its parameter
   6055   // list (8.3.5).
   6056   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
   6057     Candidate.Viable = false;
   6058     Candidate.FailureKind = ovl_fail_too_many_arguments;
   6059     return;
   6060   }
   6061 
   6062   // Function types don't have any default arguments, so just check if
   6063   // we have enough arguments.
   6064   if (Args.size() < NumArgsInProto) {
   6065     // Not enough arguments.
   6066     Candidate.Viable = false;
   6067     Candidate.FailureKind = ovl_fail_too_few_arguments;
   6068     return;
   6069   }
   6070 
   6071   // Determine the implicit conversion sequences for each of the
   6072   // arguments.
   6073   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
   6074     if (ArgIdx < NumArgsInProto) {
   6075       // (C++ 13.3.2p3): for F to be a viable function, there shall
   6076       // exist for each argument an implicit conversion sequence
   6077       // (13.3.3.1) that converts that argument to the corresponding
   6078       // parameter of F.
   6079       QualType ParamType = Proto->getArgType(ArgIdx);
   6080       Candidate.Conversions[ArgIdx + 1]
   6081         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
   6082                                 /*SuppressUserConversions=*/false,
   6083                                 /*InOverloadResolution=*/false,
   6084                                 /*AllowObjCWritebackConversion=*/
   6085                                   getLangOpts().ObjCAutoRefCount);
   6086       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
   6087         Candidate.Viable = false;
   6088         Candidate.FailureKind = ovl_fail_bad_conversion;
   6089         break;
   6090       }
   6091     } else {
   6092       // (C++ 13.3.2p2): For the purposes of overload resolution, any
   6093       // argument for which there is no corresponding parameter is
   6094       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
   6095       Candidate.Conversions[ArgIdx + 1].setEllipsis();
   6096     }
   6097   }
   6098 }
   6099 
   6100 /// \brief Add overload candidates for overloaded operators that are
   6101 /// member functions.
   6102 ///
   6103 /// Add the overloaded operator candidates that are member functions
   6104 /// for the operator Op that was used in an operator expression such
   6105 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
   6106 /// CandidateSet will store the added overload candidates. (C++
   6107 /// [over.match.oper]).
   6108 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
   6109                                        SourceLocation OpLoc,
   6110                                        ArrayRef<Expr *> Args,
   6111                                        OverloadCandidateSet& CandidateSet,
   6112                                        SourceRange OpRange) {
   6113   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
   6114 
   6115   // C++ [over.match.oper]p3:
   6116   //   For a unary operator @ with an operand of a type whose
   6117   //   cv-unqualified version is T1, and for a binary operator @ with
   6118   //   a left operand of a type whose cv-unqualified version is T1 and
   6119   //   a right operand of a type whose cv-unqualified version is T2,
   6120   //   three sets of candidate functions, designated member
   6121   //   candidates, non-member candidates and built-in candidates, are
   6122   //   constructed as follows:
   6123   QualType T1 = Args[0]->getType();
   6124 
   6125   //     -- If T1 is a complete class type or a class currently being
   6126   //        defined, the set of member candidates is the result of the
   6127   //        qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
   6128   //        the set of member candidates is empty.
   6129   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
   6130     // Complete the type if it can be completed.
   6131     RequireCompleteType(OpLoc, T1, 0);
   6132     // If the type is neither complete nor being defined, bail out now.
   6133     if (!T1Rec->getDecl()->getDefinition())
   6134       return;
   6135 
   6136     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
   6137     LookupQualifiedName(Operators, T1Rec->getDecl());
   6138     Operators.suppressDiagnostics();
   6139 
   6140     for (LookupResult::iterator Oper = Operators.begin(),
   6141                              OperEnd = Operators.end();
   6142          Oper != OperEnd;
   6143          ++Oper)
   6144       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
   6145                          Args[0]->Classify(Context),
   6146                          Args.slice(1),
   6147                          CandidateSet,
   6148                          /* SuppressUserConversions = */ false);
   6149   }
   6150 }
   6151 
   6152 /// AddBuiltinCandidate - Add a candidate for a built-in
   6153 /// operator. ResultTy and ParamTys are the result and parameter types
   6154 /// of the built-in candidate, respectively. Args and NumArgs are the
   6155 /// arguments being passed to the candidate. IsAssignmentOperator
   6156 /// should be true when this built-in candidate is an assignment
   6157 /// operator. NumContextualBoolArguments is the number of arguments
   6158 /// (at the beginning of the argument list) that will be contextually
   6159 /// converted to bool.
   6160 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
   6161                                ArrayRef<Expr *> Args,
   6162                                OverloadCandidateSet& CandidateSet,
   6163                                bool IsAssignmentOperator,
   6164                                unsigned NumContextualBoolArguments) {
   6165   // Overload resolution is always an unevaluated context.
   6166   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
   6167 
   6168   // Add this candidate
   6169   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
   6170   Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
   6171   Candidate.Function = 0;
   6172   Candidate.IsSurrogate = false;
   6173   Candidate.IgnoreObjectArgument = false;
   6174   Candidate.BuiltinTypes.ResultTy = ResultTy;
   6175   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
   6176     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
   6177 
   6178   // Determine the implicit conversion sequences for each of the
   6179   // arguments.
   6180   Candidate.Viable = true;
   6181   Candidate.ExplicitCallArguments = Args.size();
   6182   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
   6183     // C++ [over.match.oper]p4:
   6184     //   For the built-in assignment operators, conversions of the
   6185     //   left operand are restricted as follows:
   6186     //     -- no temporaries are introduced to hold the left operand, and
   6187     //     -- no user-defined conversions are applied to the left
   6188     //        operand to achieve a type match with the left-most
   6189     //        parameter of a built-in candidate.
   6190     //
   6191     // We block these conversions by turning off user-defined
   6192     // conversions, since that is the only way that initialization of
   6193     // a reference to a non-class type can occur from something that
   6194     // is not of the same type.
   6195     if (ArgIdx < NumContextualBoolArguments) {
   6196       assert(ParamTys[ArgIdx] == Context.BoolTy &&
   6197              "Contextual conversion to bool requires bool type");
   6198       Candidate.Conversions[ArgIdx]
   6199         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
   6200     } else {
   6201       Candidate.Conversions[ArgIdx]
   6202         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
   6203                                 ArgIdx == 0 && IsAssignmentOperator,
   6204                                 /*InOverloadResolution=*/false,
   6205                                 /*AllowObjCWritebackConversion=*/
   6206                                   getLangOpts().ObjCAutoRefCount);
   6207     }
   6208     if (Candidate.Conversions[ArgIdx].isBad()) {
   6209       Candidate.Viable = false;
   6210       Candidate.FailureKind = ovl_fail_bad_conversion;
   6211       break;
   6212     }
   6213   }
   6214 }
   6215 
   6216 namespace {
   6217 
   6218 /// BuiltinCandidateTypeSet - A set of types that will be used for the
   6219 /// candidate operator functions for built-in operators (C++
   6220 /// [over.built]). The types are separated into pointer types and
   6221 /// enumeration types.
   6222 class BuiltinCandidateTypeSet  {
   6223   /// TypeSet - A set of types.
   6224   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
   6225 
   6226   /// PointerTypes - The set of pointer types that will be used in the
   6227   /// built-in candidates.
   6228   TypeSet PointerTypes;
   6229 
   6230   /// MemberPointerTypes - The set of member pointer types that will be
   6231   /// used in the built-in candidates.
   6232   TypeSet MemberPointerTypes;
   6233 
   6234   /// EnumerationTypes - The set of enumeration types that will be
   6235   /// used in the built-in candidates.
   6236   TypeSet EnumerationTypes;
   6237 
   6238   /// \brief The set of vector types that will be used in the built-in
   6239   /// candidates.
   6240   TypeSet VectorTypes;
   6241 
   6242   /// \brief A flag indicating non-record types are viable candidates
   6243   bool HasNonRecordTypes;
   6244 
   6245   /// \brief A flag indicating whether either arithmetic or enumeration types
   6246   /// were present in the candidate set.
   6247   bool HasArithmeticOrEnumeralTypes;
   6248 
   6249   /// \brief A flag indicating whether the nullptr type was present in the
   6250   /// candidate set.
   6251   bool HasNullPtrType;
   6252 
   6253   /// Sema - The semantic analysis instance where we are building the
   6254   /// candidate type set.
   6255   Sema &SemaRef;
   6256 
   6257   /// Context - The AST context in which we will build the type sets.
   6258   ASTContext &Context;
   6259 
   6260   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
   6261                                                const Qualifiers &VisibleQuals);
   6262   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
   6263 
   6264 public:
   6265   /// iterator - Iterates through the types that are part of the set.
   6266   typedef TypeSet::iterator iterator;
   6267 
   6268   BuiltinCandidateTypeSet(Sema &SemaRef)
   6269     : HasNonRecordTypes(false),
   6270       HasArithmeticOrEnumeralTypes(false),
   6271       HasNullPtrType(false),
   6272       SemaRef(SemaRef),
   6273       Context(SemaRef.Context) { }
   6274 
   6275   void AddTypesConvertedFrom(QualType Ty,
   6276                              SourceLocation Loc,
   6277                              bool AllowUserConversions,
   6278                              bool AllowExplicitConversions,
   6279                              const Qualifiers &VisibleTypeConversionsQuals);
   6280 
   6281   /// pointer_begin - First pointer type found;
   6282   iterator pointer_begin() { return PointerTypes.begin(); }
   6283 
   6284   /// pointer_end - Past the last pointer type found;
   6285   iterator pointer_end() { return PointerTypes.end(); }
   6286 
   6287   /// member_pointer_begin - First member pointer type found;
   6288   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
   6289 
   6290   /// member_pointer_end - Past the last member pointer type found;
   6291   iterator member_pointer_end() { return MemberPointerTypes.end(); }
   6292 
   6293   /// enumeration_begin - First enumeration type found;
   6294   iterator enumeration_begin() { return EnumerationTypes.begin(); }
   6295 
   6296   /// enumeration_end - Past the last enumeration type found;
   6297   iterator enumeration_end() { return EnumerationTypes.end(); }
   6298 
   6299   iterator vector_begin() { return VectorTypes.begin(); }
   6300   iterator vector_end() { return VectorTypes.end(); }
   6301 
   6302   bool hasNonRecordTypes() { return HasNonRecordTypes; }
   6303   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
   6304   bool hasNullPtrType() const { return HasNullPtrType; }
   6305 };
   6306 
   6307 } // end anonymous namespace
   6308 
   6309 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
   6310 /// the set of pointer types along with any more-qualified variants of
   6311 /// that type. For example, if @p Ty is "int const *", this routine
   6312 /// will add "int const *", "int const volatile *", "int const
   6313 /// restrict *", and "int const volatile restrict *" to the set of
   6314 /// pointer types. Returns true if the add of @p Ty itself succeeded,
   6315 /// false otherwise.
   6316 ///
   6317 /// FIXME: what to do about extended qualifiers?
   6318 bool
   6319 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
   6320                                              const Qualifiers &VisibleQuals) {
   6321 
   6322   // Insert this type.
   6323   if (!PointerTypes.insert(Ty))
   6324     return false;
   6325 
   6326   QualType PointeeTy;
   6327   const PointerType *PointerTy = Ty->getAs<PointerType>();
   6328   bool buildObjCPtr = false;
   6329   if (!PointerTy) {
   6330     const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
   6331     PointeeTy = PTy->getPointeeType();
   6332     buildObjCPtr = true;
   6333   } else {
   6334     PointeeTy = PointerTy->getPointeeType();
   6335   }
   6336 
   6337   // Don't add qualified variants of arrays. For one, they're not allowed
   6338   // (the qualifier would sink to the element type), and for another, the
   6339   // only overload situation where it matters is subscript or pointer +- int,
   6340   // and those shouldn't have qualifier variants anyway.
   6341   if (PointeeTy->isArrayType())
   6342     return true;
   6343 
   6344   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
   6345   bool hasVolatile = VisibleQuals.hasVolatile();
   6346   bool hasRestrict = VisibleQuals.hasRestrict();
   6347 
   6348   // Iterate through all strict supersets of BaseCVR.
   6349   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
   6350     if ((CVR | BaseCVR) != CVR) continue;
   6351     // Skip over volatile if no volatile found anywhere in the types.
   6352     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
   6353 
   6354     // Skip over restrict if no restrict found anywhere in the types, or if
   6355     // the type cannot be restrict-qualified.
   6356     if ((CVR & Qualifiers::Restrict) &&
   6357         (!hasRestrict ||
   6358          (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
   6359       continue;
   6360 
   6361     // Build qualified pointee type.
   6362     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
   6363 
   6364     // Build qualified pointer type.
   6365     QualType QPointerTy;
   6366     if (!buildObjCPtr)
   6367       QPointerTy = Context.getPointerType(QPointeeTy);
   6368     else
   6369       QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
   6370 
   6371     // Insert qualified pointer type.
   6372     PointerTypes.insert(QPointerTy);
   6373   }
   6374 
   6375   return true;
   6376 }
   6377 
   6378 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
   6379 /// to the set of pointer types along with any more-qualified variants of
   6380 /// that type. For example, if @p Ty is "int const *", this routine
   6381 /// will add "int const *", "int const volatile *", "int const
   6382 /// restrict *", and "int const volatile restrict *" to the set of
   6383 /// pointer types. Returns true if the add of @p Ty itself succeeded,
   6384 /// false otherwise.
   6385 ///
   6386 /// FIXME: what to do about extended qualifiers?
   6387 bool
   6388 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
   6389     QualType Ty) {
   6390   // Insert this type.
   6391   if (!MemberPointerTypes.insert(Ty))
   6392     return false;
   6393 
   6394   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
   6395   assert(PointerTy && "type was not a member pointer type!");
   6396 
   6397   QualType PointeeTy = PointerTy->getPointeeType();
   6398   // Don't add qualified variants of arrays. For one, they're not allowed
   6399   // (the qualifier would sink to the element type), and for another, the
   6400   // only overload situation where it matters is subscript or pointer +- int,
   6401   // and those shouldn't have qualifier variants anyway.
   6402   if (PointeeTy->isArrayType())
   6403     return true;
   6404   const Type *ClassTy = PointerTy->getClass();
   6405 
   6406   // Iterate through all strict supersets of the pointee type's CVR
   6407   // qualifiers.
   6408   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
   6409   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
   6410     if ((CVR | BaseCVR) != CVR) continue;
   6411 
   6412     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
   6413     MemberPointerTypes.insert(
   6414       Context.getMemberPointerType(QPointeeTy, ClassTy));
   6415   }
   6416 
   6417   return true;
   6418 }
   6419 
   6420 /// AddTypesConvertedFrom - Add each of the types to which the type @p
   6421 /// Ty can be implicit converted to the given set of @p Types. We're
   6422 /// primarily interested in pointer types and enumeration types. We also
   6423 /// take member pointer types, for the conditional operator.
   6424 /// AllowUserConversions is true if we should look at the conversion
   6425 /// functions of a class type, and AllowExplicitConversions if we
   6426 /// should also include the explicit conversion functions of a class
   6427 /// type.
   6428 void
   6429 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
   6430                                                SourceLocation Loc,
   6431                                                bool AllowUserConversions,
   6432                                                bool AllowExplicitConversions,
   6433                                                const Qualifiers &VisibleQuals) {
   6434   // Only deal with canonical types.
   6435   Ty = Context.getCanonicalType(Ty);
   6436 
   6437   // Look through reference types; they aren't part of the type of an
   6438   // expression for the purposes of conversions.
   6439   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
   6440     Ty = RefTy->getPointeeType();
   6441 
   6442   // If we're dealing with an array type, decay to the pointer.
   6443   if (Ty->isArrayType())
   6444     Ty = SemaRef.Context.getArrayDecayedType(Ty);
   6445 
   6446   // Otherwise, we don't care about qualifiers on the type.
   6447   Ty = Ty.getLocalUnqualifiedType();
   6448 
   6449   // Flag if we ever add a non-record type.
   6450   const RecordType *TyRec = Ty->getAs<RecordType>();
   6451   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
   6452 
   6453   // Flag if we encounter an arithmetic type.
   6454   HasArithmeticOrEnumeralTypes =
   6455     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
   6456 
   6457   if (Ty->isObjCIdType() || Ty->isObjCClassType())
   6458     PointerTypes.insert(Ty);
   6459   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
   6460     // Insert our type, and its more-qualified variants, into the set
   6461     // of types.
   6462     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
   6463       return;
   6464   } else if (Ty->isMemberPointerType()) {
   6465     // Member pointers are far easier, since the pointee can't be converted.
   6466     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
   6467       return;
   6468   } else if (Ty->isEnumeralType()) {
   6469     HasArithmeticOrEnumeralTypes = true;
   6470     EnumerationTypes.insert(Ty);
   6471   } else if (Ty->isVectorType()) {
   6472     // We treat vector types as arithmetic types in many contexts as an
   6473     // extension.
   6474     HasArithmeticOrEnumeralTypes = true;
   6475     VectorTypes.insert(Ty);
   6476   } else if (Ty->isNullPtrType()) {
   6477     HasNullPtrType = true;
   6478   } else if (AllowUserConversions && TyRec) {
   6479     // No conversion functions in incomplete types.
   6480     if (SemaRef.RequireCompleteType(Loc, Ty, 0))
   6481       return;
   6482 
   6483     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
   6484     std::pair<CXXRecordDecl::conversion_iterator,
   6485               CXXRecordDecl::conversion_iterator>
   6486       Conversions = ClassDecl->getVisibleConversionFunctions();
   6487     for (CXXRecordDecl::conversion_iterator
   6488            I = Conversions.first, E = Conversions.second; I != E; ++I) {
   6489       NamedDecl *D = I.getDecl();
   6490       if (isa<UsingShadowDecl>(D))
   6491         D = cast<UsingShadowDecl>(D)->getTargetDecl();
   6492 
   6493       // Skip conversion function templates; they don't tell us anything
   6494       // about which builtin types we can convert to.
   6495       if (isa<FunctionTemplateDecl>(D))
   6496         continue;
   6497 
   6498       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
   6499       if (AllowExplicitConversions || !Conv->isExplicit()) {
   6500         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
   6501                               VisibleQuals);
   6502       }
   6503     }
   6504   }
   6505 }
   6506 
   6507 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
   6508 /// the volatile- and non-volatile-qualified assignment operators for the
   6509 /// given type to the candidate set.
   6510 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
   6511                                                    QualType T,
   6512                                                    ArrayRef<Expr *> Args,
   6513                                     OverloadCandidateSet &CandidateSet) {
   6514   QualType ParamTypes[2];
   6515 
   6516   // T& operator=(T&, T)
   6517   ParamTypes[0] = S.Context.getLValueReferenceType(T);
   6518   ParamTypes[1] = T;
   6519   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   6520                         /*IsAssignmentOperator=*/true);
   6521 
   6522   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
   6523     // volatile T& operator=(volatile T&, T)
   6524     ParamTypes[0]
   6525       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
   6526     ParamTypes[1] = T;
   6527     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   6528                           /*IsAssignmentOperator=*/true);
   6529   }
   6530 }
   6531 
   6532 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
   6533 /// if any, found in visible type conversion functions found in ArgExpr's type.
   6534 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
   6535     Qualifiers VRQuals;
   6536     const RecordType *TyRec;
   6537     if (const MemberPointerType *RHSMPType =
   6538         ArgExpr->getType()->getAs<MemberPointerType>())
   6539       TyRec = RHSMPType->getClass()->getAs<RecordType>();
   6540     else
   6541       TyRec = ArgExpr->getType()->getAs<RecordType>();
   6542     if (!TyRec) {
   6543       // Just to be safe, assume the worst case.
   6544       VRQuals.addVolatile();
   6545       VRQuals.addRestrict();
   6546       return VRQuals;
   6547     }
   6548 
   6549     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
   6550     if (!ClassDecl->hasDefinition())
   6551       return VRQuals;
   6552 
   6553     std::pair<CXXRecordDecl::conversion_iterator,
   6554               CXXRecordDecl::conversion_iterator>
   6555       Conversions = ClassDecl->getVisibleConversionFunctions();
   6556 
   6557     for (CXXRecordDecl::conversion_iterator
   6558            I = Conversions.first, E = Conversions.second; I != E; ++I) {
   6559       NamedDecl *D = I.getDecl();
   6560       if (isa<UsingShadowDecl>(D))
   6561         D = cast<UsingShadowDecl>(D)->getTargetDecl();
   6562       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
   6563         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
   6564         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
   6565           CanTy = ResTypeRef->getPointeeType();
   6566         // Need to go down the pointer/mempointer chain and add qualifiers
   6567         // as see them.
   6568         bool done = false;
   6569         while (!done) {
   6570           if (CanTy.isRestrictQualified())
   6571             VRQuals.addRestrict();
   6572           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
   6573             CanTy = ResTypePtr->getPointeeType();
   6574           else if (const MemberPointerType *ResTypeMPtr =
   6575                 CanTy->getAs<MemberPointerType>())
   6576             CanTy = ResTypeMPtr->getPointeeType();
   6577           else
   6578             done = true;
   6579           if (CanTy.isVolatileQualified())
   6580             VRQuals.addVolatile();
   6581           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
   6582             return VRQuals;
   6583         }
   6584       }
   6585     }
   6586     return VRQuals;
   6587 }
   6588 
   6589 namespace {
   6590 
   6591 /// \brief Helper class to manage the addition of builtin operator overload
   6592 /// candidates. It provides shared state and utility methods used throughout
   6593 /// the process, as well as a helper method to add each group of builtin
   6594 /// operator overloads from the standard to a candidate set.
   6595 class BuiltinOperatorOverloadBuilder {
   6596   // Common instance state available to all overload candidate addition methods.
   6597   Sema &S;
   6598   ArrayRef<Expr *> Args;
   6599   Qualifiers VisibleTypeConversionsQuals;
   6600   bool HasArithmeticOrEnumeralCandidateType;
   6601   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
   6602   OverloadCandidateSet &CandidateSet;
   6603 
   6604   // Define some constants used to index and iterate over the arithemetic types
   6605   // provided via the getArithmeticType() method below.
   6606   // The "promoted arithmetic types" are the arithmetic
   6607   // types are that preserved by promotion (C++ [over.built]p2).
   6608   static const unsigned FirstIntegralType = 3;
   6609   static const unsigned LastIntegralType = 20;
   6610   static const unsigned FirstPromotedIntegralType = 3,
   6611                         LastPromotedIntegralType = 11;
   6612   static const unsigned FirstPromotedArithmeticType = 0,
   6613                         LastPromotedArithmeticType = 11;
   6614   static const unsigned NumArithmeticTypes = 20;
   6615 
   6616   /// \brief Get the canonical type for a given arithmetic type index.
   6617   CanQualType getArithmeticType(unsigned index) {
   6618     assert(index < NumArithmeticTypes);
   6619     static CanQualType ASTContext::* const
   6620       ArithmeticTypes[NumArithmeticTypes] = {
   6621       // Start of promoted types.
   6622       &ASTContext::FloatTy,
   6623       &ASTContext::DoubleTy,
   6624       &ASTContext::LongDoubleTy,
   6625 
   6626       // Start of integral types.
   6627       &ASTContext::IntTy,
   6628       &ASTContext::LongTy,
   6629       &ASTContext::LongLongTy,
   6630       &ASTContext::Int128Ty,
   6631       &ASTContext::UnsignedIntTy,
   6632       &ASTContext::UnsignedLongTy,
   6633       &ASTContext::UnsignedLongLongTy,
   6634       &ASTContext::UnsignedInt128Ty,
   6635       // End of promoted types.
   6636 
   6637       &ASTContext::BoolTy,
   6638       &ASTContext::CharTy,
   6639       &ASTContext::WCharTy,
   6640       &ASTContext::Char16Ty,
   6641       &ASTContext::Char32Ty,
   6642       &ASTContext::SignedCharTy,
   6643       &ASTContext::ShortTy,
   6644       &ASTContext::UnsignedCharTy,
   6645       &ASTContext::UnsignedShortTy,
   6646       // End of integral types.
   6647       // FIXME: What about complex? What about half?
   6648     };
   6649     return S.Context.*ArithmeticTypes[index];
   6650   }
   6651 
   6652   /// \brief Gets the canonical type resulting from the usual arithemetic
   6653   /// converions for the given arithmetic types.
   6654   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
   6655     // Accelerator table for performing the usual arithmetic conversions.
   6656     // The rules are basically:
   6657     //   - if either is floating-point, use the wider floating-point
   6658     //   - if same signedness, use the higher rank
   6659     //   - if same size, use unsigned of the higher rank
   6660     //   - use the larger type
   6661     // These rules, together with the axiom that higher ranks are
   6662     // never smaller, are sufficient to precompute all of these results
   6663     // *except* when dealing with signed types of higher rank.
   6664     // (we could precompute SLL x UI for all known platforms, but it's
   6665     // better not to make any assumptions).
   6666     // We assume that int128 has a higher rank than long long on all platforms.
   6667     enum PromotedType {
   6668             Dep=-1,
   6669             Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
   6670     };
   6671     static const PromotedType ConversionsTable[LastPromotedArithmeticType]
   6672                                         [LastPromotedArithmeticType] = {
   6673 /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
   6674 /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
   6675 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
   6676 /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
   6677 /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
   6678 /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
   6679 /*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
   6680 /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
   6681 /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
   6682 /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
   6683 /*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
   6684     };
   6685 
   6686     assert(L < LastPromotedArithmeticType);
   6687     assert(R < LastPromotedArithmeticType);
   6688     int Idx = ConversionsTable[L][R];
   6689 
   6690     // Fast path: the table gives us a concrete answer.
   6691     if (Idx != Dep) return getArithmeticType(Idx);
   6692 
   6693     // Slow path: we need to compare widths.
   6694     // An invariant is that the signed type has higher rank.
   6695     CanQualType LT = getArithmeticType(L),
   6696                 RT = getArithmeticType(R);
   6697     unsigned LW = S.Context.getIntWidth(LT),
   6698              RW = S.Context.getIntWidth(RT);
   6699 
   6700     // If they're different widths, use the signed type.
   6701     if (LW > RW) return LT;
   6702     else if (LW < RW) return RT;
   6703 
   6704     // Otherwise, use the unsigned type of the signed type's rank.
   6705     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
   6706     assert(L == SLL || R == SLL);
   6707     return S.Context.UnsignedLongLongTy;
   6708   }
   6709 
   6710   /// \brief Helper method to factor out the common pattern of adding overloads
   6711   /// for '++' and '--' builtin operators.
   6712   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
   6713                                            bool HasVolatile,
   6714                                            bool HasRestrict) {
   6715     QualType ParamTypes[2] = {
   6716       S.Context.getLValueReferenceType(CandidateTy),
   6717       S.Context.IntTy
   6718     };
   6719 
   6720     // Non-volatile version.
   6721     if (Args.size() == 1)
   6722       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
   6723     else
   6724       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
   6725 
   6726     // Use a heuristic to reduce number of builtin candidates in the set:
   6727     // add volatile version only if there are conversions to a volatile type.
   6728     if (HasVolatile) {
   6729       ParamTypes[0] =
   6730         S.Context.getLValueReferenceType(
   6731           S.Context.getVolatileType(CandidateTy));
   6732       if (Args.size() == 1)
   6733         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
   6734       else
   6735         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
   6736     }
   6737 
   6738     // Add restrict version only if there are conversions to a restrict type
   6739     // and our candidate type is a non-restrict-qualified pointer.
   6740     if (HasRestrict && CandidateTy->isAnyPointerType() &&
   6741         !CandidateTy.isRestrictQualified()) {
   6742       ParamTypes[0]
   6743         = S.Context.getLValueReferenceType(
   6744             S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
   6745       if (Args.size() == 1)
   6746         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
   6747       else
   6748         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
   6749 
   6750       if (HasVolatile) {
   6751         ParamTypes[0]
   6752           = S.Context.getLValueReferenceType(
   6753               S.Context.getCVRQualifiedType(CandidateTy,
   6754                                             (Qualifiers::Volatile |
   6755                                              Qualifiers::Restrict)));
   6756         if (Args.size() == 1)
   6757           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
   6758         else
   6759           S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
   6760       }
   6761     }
   6762 
   6763   }
   6764 
   6765 public:
   6766   BuiltinOperatorOverloadBuilder(
   6767     Sema &S, ArrayRef<Expr *> Args,
   6768     Qualifiers VisibleTypeConversionsQuals,
   6769     bool HasArithmeticOrEnumeralCandidateType,
   6770     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
   6771     OverloadCandidateSet &CandidateSet)
   6772     : S(S), Args(Args),
   6773       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
   6774       HasArithmeticOrEnumeralCandidateType(
   6775         HasArithmeticOrEnumeralCandidateType),
   6776       CandidateTypes(CandidateTypes),
   6777       CandidateSet(CandidateSet) {
   6778     // Validate some of our static helper constants in debug builds.
   6779     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
   6780            "Invalid first promoted integral type");
   6781     assert(getArithmeticType(LastPromotedIntegralType - 1)
   6782              == S.Context.UnsignedInt128Ty &&
   6783            "Invalid last promoted integral type");
   6784     assert(getArithmeticType(FirstPromotedArithmeticType)
   6785              == S.Context.FloatTy &&
   6786            "Invalid first promoted arithmetic type");
   6787     assert(getArithmeticType(LastPromotedArithmeticType - 1)
   6788              == S.Context.UnsignedInt128Ty &&
   6789            "Invalid last promoted arithmetic type");
   6790   }
   6791 
   6792   // C++ [over.built]p3:
   6793   //
   6794   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
   6795   //   is either volatile or empty, there exist candidate operator
   6796   //   functions of the form
   6797   //
   6798   //       VQ T&      operator++(VQ T&);
   6799   //       T          operator++(VQ T&, int);
   6800   //
   6801   // C++ [over.built]p4:
   6802   //
   6803   //   For every pair (T, VQ), where T is an arithmetic type other
   6804   //   than bool, and VQ is either volatile or empty, there exist
   6805   //   candidate operator functions of the form
   6806   //
   6807   //       VQ T&      operator--(VQ T&);
   6808   //       T          operator--(VQ T&, int);
   6809   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
   6810     if (!HasArithmeticOrEnumeralCandidateType)
   6811       return;
   6812 
   6813     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
   6814          Arith < NumArithmeticTypes; ++Arith) {
   6815       addPlusPlusMinusMinusStyleOverloads(
   6816         getArithmeticType(Arith),
   6817         VisibleTypeConversionsQuals.hasVolatile(),
   6818         VisibleTypeConversionsQuals.hasRestrict());
   6819     }
   6820   }
   6821 
   6822   // C++ [over.built]p5:
   6823   //
   6824   //   For every pair (T, VQ), where T is a cv-qualified or
   6825   //   cv-unqualified object type, and VQ is either volatile or
   6826   //   empty, there exist candidate operator functions of the form
   6827   //
   6828   //       T*VQ&      operator++(T*VQ&);
   6829   //       T*VQ&      operator--(T*VQ&);
   6830   //       T*         operator++(T*VQ&, int);
   6831   //       T*         operator--(T*VQ&, int);
   6832   void addPlusPlusMinusMinusPointerOverloads() {
   6833     for (BuiltinCandidateTypeSet::iterator
   6834               Ptr = CandidateTypes[0].pointer_begin(),
   6835            PtrEnd = CandidateTypes[0].pointer_end();
   6836          Ptr != PtrEnd; ++Ptr) {
   6837       // Skip pointer types that aren't pointers to object types.
   6838       if (!(*Ptr)->getPointeeType()->isObjectType())
   6839         continue;
   6840 
   6841       addPlusPlusMinusMinusStyleOverloads(*Ptr,
   6842         (!(*Ptr).isVolatileQualified() &&
   6843          VisibleTypeConversionsQuals.hasVolatile()),
   6844         (!(*Ptr).isRestrictQualified() &&
   6845          VisibleTypeConversionsQuals.hasRestrict()));
   6846     }
   6847   }
   6848 
   6849   // C++ [over.built]p6:
   6850   //   For every cv-qualified or cv-unqualified object type T, there
   6851   //   exist candidate operator functions of the form
   6852   //
   6853   //       T&         operator*(T*);
   6854   //
   6855   // C++ [over.built]p7:
   6856   //   For every function type T that does not have cv-qualifiers or a
   6857   //   ref-qualifier, there exist candidate operator functions of the form
   6858   //       T&         operator*(T*);
   6859   void addUnaryStarPointerOverloads() {
   6860     for (BuiltinCandidateTypeSet::iterator
   6861               Ptr = CandidateTypes[0].pointer_begin(),
   6862            PtrEnd = CandidateTypes[0].pointer_end();
   6863          Ptr != PtrEnd; ++Ptr) {
   6864       QualType ParamTy = *Ptr;
   6865       QualType PointeeTy = ParamTy->getPointeeType();
   6866       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
   6867         continue;
   6868 
   6869       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
   6870         if (Proto->getTypeQuals() || Proto->getRefQualifier())
   6871           continue;
   6872 
   6873       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
   6874                             &ParamTy, Args, CandidateSet);
   6875     }
   6876   }
   6877 
   6878   // C++ [over.built]p9:
   6879   //  For every promoted arithmetic type T, there exist candidate
   6880   //  operator functions of the form
   6881   //
   6882   //       T         operator+(T);
   6883   //       T         operator-(T);
   6884   void addUnaryPlusOrMinusArithmeticOverloads() {
   6885     if (!HasArithmeticOrEnumeralCandidateType)
   6886       return;
   6887 
   6888     for (unsigned Arith = FirstPromotedArithmeticType;
   6889          Arith < LastPromotedArithmeticType; ++Arith) {
   6890       QualType ArithTy = getArithmeticType(Arith);
   6891       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, CandidateSet);
   6892     }
   6893 
   6894     // Extension: We also add these operators for vector types.
   6895     for (BuiltinCandidateTypeSet::iterator
   6896               Vec = CandidateTypes[0].vector_begin(),
   6897            VecEnd = CandidateTypes[0].vector_end();
   6898          Vec != VecEnd; ++Vec) {
   6899       QualType VecTy = *Vec;
   6900       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
   6901     }
   6902   }
   6903 
   6904   // C++ [over.built]p8:
   6905   //   For every type T, there exist candidate operator functions of
   6906   //   the form
   6907   //
   6908   //       T*         operator+(T*);
   6909   void addUnaryPlusPointerOverloads() {
   6910     for (BuiltinCandidateTypeSet::iterator
   6911               Ptr = CandidateTypes[0].pointer_begin(),
   6912            PtrEnd = CandidateTypes[0].pointer_end();
   6913          Ptr != PtrEnd; ++Ptr) {
   6914       QualType ParamTy = *Ptr;
   6915       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet);
   6916     }
   6917   }
   6918 
   6919   // C++ [over.built]p10:
   6920   //   For every promoted integral type T, there exist candidate
   6921   //   operator functions of the form
   6922   //
   6923   //        T         operator~(T);
   6924   void addUnaryTildePromotedIntegralOverloads() {
   6925     if (!HasArithmeticOrEnumeralCandidateType)
   6926       return;
   6927 
   6928     for (unsigned Int = FirstPromotedIntegralType;
   6929          Int < LastPromotedIntegralType; ++Int) {
   6930       QualType IntTy = getArithmeticType(Int);
   6931       S.AddBuiltinCandidate(IntTy, &IntTy, Args, CandidateSet);
   6932     }
   6933 
   6934     // Extension: We also add this operator for vector types.
   6935     for (BuiltinCandidateTypeSet::iterator
   6936               Vec = CandidateTypes[0].vector_begin(),
   6937            VecEnd = CandidateTypes[0].vector_end();
   6938          Vec != VecEnd; ++Vec) {
   6939       QualType VecTy = *Vec;
   6940       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
   6941     }
   6942   }
   6943 
   6944   // C++ [over.match.oper]p16:
   6945   //   For every pointer to member type T, there exist candidate operator
   6946   //   functions of the form
   6947   //
   6948   //        bool operator==(T,T);
   6949   //        bool operator!=(T,T);
   6950   void addEqualEqualOrNotEqualMemberPointerOverloads() {
   6951     /// Set of (canonical) types that we've already handled.
   6952     llvm::SmallPtrSet<QualType, 8> AddedTypes;
   6953 
   6954     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
   6955       for (BuiltinCandidateTypeSet::iterator
   6956                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
   6957              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
   6958            MemPtr != MemPtrEnd;
   6959            ++MemPtr) {
   6960         // Don't add the same builtin candidate twice.
   6961         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
   6962           continue;
   6963 
   6964         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
   6965         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
   6966       }
   6967     }
   6968   }
   6969 
   6970   // C++ [over.built]p15:
   6971   //
   6972   //   For every T, where T is an enumeration type, a pointer type, or
   6973   //   std::nullptr_t, there exist candidate operator functions of the form
   6974   //
   6975   //        bool       operator<(T, T);
   6976   //        bool       operator>(T, T);
   6977   //        bool       operator<=(T, T);
   6978   //        bool       operator>=(T, T);
   6979   //        bool       operator==(T, T);
   6980   //        bool       operator!=(T, T);
   6981   void addRelationalPointerOrEnumeralOverloads() {
   6982     // C++ [over.match.oper]p3:
   6983     //   [...]the built-in candidates include all of the candidate operator
   6984     //   functions defined in 13.6 that, compared to the given operator, [...]
   6985     //   do not have the same parameter-type-list as any non-template non-member
   6986     //   candidate.
   6987     //
   6988     // Note that in practice, this only affects enumeration types because there
   6989     // aren't any built-in candidates of record type, and a user-defined operator
   6990     // must have an operand of record or enumeration type. Also, the only other
   6991     // overloaded operator with enumeration arguments, operator=,
   6992     // cannot be overloaded for enumeration types, so this is the only place
   6993     // where we must suppress candidates like this.
   6994     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
   6995       UserDefinedBinaryOperators;
   6996 
   6997     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
   6998       if (CandidateTypes[ArgIdx].enumeration_begin() !=
   6999           CandidateTypes[ArgIdx].enumeration_end()) {
   7000         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
   7001                                          CEnd = CandidateSet.end();
   7002              C != CEnd; ++C) {
   7003           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
   7004             continue;
   7005 
   7006           if (C->Function->isFunctionTemplateSpecialization())
   7007             continue;
   7008 
   7009           QualType FirstParamType =
   7010             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
   7011           QualType SecondParamType =
   7012             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
   7013 
   7014           // Skip if either parameter isn't of enumeral type.
   7015           if (!FirstParamType->isEnumeralType() ||
   7016               !SecondParamType->isEnumeralType())
   7017             continue;
   7018 
   7019           // Add this operator to the set of known user-defined operators.
   7020           UserDefinedBinaryOperators.insert(
   7021             std::make_pair(S.Context.getCanonicalType(FirstParamType),
   7022                            S.Context.getCanonicalType(SecondParamType)));
   7023         }
   7024       }
   7025     }
   7026 
   7027     /// Set of (canonical) types that we've already handled.
   7028     llvm::SmallPtrSet<QualType, 8> AddedTypes;
   7029 
   7030     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
   7031       for (BuiltinCandidateTypeSet::iterator
   7032                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
   7033              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
   7034            Ptr != PtrEnd; ++Ptr) {
   7035         // Don't add the same builtin candidate twice.
   7036         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
   7037           continue;
   7038 
   7039         QualType ParamTypes[2] = { *Ptr, *Ptr };
   7040         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
   7041       }
   7042       for (BuiltinCandidateTypeSet::iterator
   7043                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
   7044              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
   7045            Enum != EnumEnd; ++Enum) {
   7046         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
   7047 
   7048         // Don't add the same builtin candidate twice, or if a user defined
   7049         // candidate exists.
   7050         if (!AddedTypes.insert(CanonType) ||
   7051             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
   7052                                                             CanonType)))
   7053           continue;
   7054 
   7055         QualType ParamTypes[2] = { *Enum, *Enum };
   7056         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
   7057       }
   7058 
   7059       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
   7060         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
   7061         if (AddedTypes.insert(NullPtrTy) &&
   7062             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
   7063                                                              NullPtrTy))) {
   7064           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
   7065           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args,
   7066                                 CandidateSet);
   7067         }
   7068       }
   7069     }
   7070   }
   7071 
   7072   // C++ [over.built]p13:
   7073   //
   7074   //   For every cv-qualified or cv-unqualified object type T
   7075   //   there exist candidate operator functions of the form
   7076   //
   7077   //      T*         operator+(T*, ptrdiff_t);
   7078   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
   7079   //      T*         operator-(T*, ptrdiff_t);
   7080   //      T*         operator+(ptrdiff_t, T*);
   7081   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
   7082   //
   7083   // C++ [over.built]p14:
   7084   //
   7085   //   For every T, where T is a pointer to object type, there
   7086   //   exist candidate operator functions of the form
   7087   //
   7088   //      ptrdiff_t  operator-(T, T);
   7089   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
   7090     /// Set of (canonical) types that we've already handled.
   7091     llvm::SmallPtrSet<QualType, 8> AddedTypes;
   7092 
   7093     for (int Arg = 0; Arg < 2; ++Arg) {
   7094       QualType AsymetricParamTypes[2] = {
   7095         S.Context.getPointerDiffType(),
   7096         S.Context.getPointerDiffType(),
   7097       };
   7098       for (BuiltinCandidateTypeSet::iterator
   7099                 Ptr = CandidateTypes[Arg].pointer_begin(),
   7100              PtrEnd = CandidateTypes[Arg].pointer_end();
   7101            Ptr != PtrEnd; ++Ptr) {
   7102         QualType PointeeTy = (*Ptr)->getPointeeType();
   7103         if (!PointeeTy->isObjectType())
   7104           continue;
   7105 
   7106         AsymetricParamTypes[Arg] = *Ptr;
   7107         if (Arg == 0 || Op == OO_Plus) {
   7108           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
   7109           // T* operator+(ptrdiff_t, T*);
   7110           S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, CandidateSet);
   7111         }
   7112         if (Op == OO_Minus) {
   7113           // ptrdiff_t operator-(T, T);
   7114           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
   7115             continue;
   7116 
   7117           QualType ParamTypes[2] = { *Ptr, *Ptr };
   7118           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
   7119                                 Args, CandidateSet);
   7120         }
   7121       }
   7122     }
   7123   }
   7124 
   7125   // C++ [over.built]p12:
   7126   //
   7127   //   For every pair of promoted arithmetic types L and R, there
   7128   //   exist candidate operator functions of the form
   7129   //
   7130   //        LR         operator*(L, R);
   7131   //        LR         operator/(L, R);
   7132   //        LR         operator+(L, R);
   7133   //        LR         operator-(L, R);
   7134   //        bool       operator<(L, R);
   7135   //        bool       operator>(L, R);
   7136   //        bool       operator<=(L, R);
   7137   //        bool       operator>=(L, R);
   7138   //        bool       operator==(L, R);
   7139   //        bool       operator!=(L, R);
   7140   //
   7141   //   where LR is the result of the usual arithmetic conversions
   7142   //   between types L and R.
   7143   //
   7144   // C++ [over.built]p24:
   7145   //
   7146   //   For every pair of promoted arithmetic types L and R, there exist
   7147   //   candidate operator functions of the form
   7148   //
   7149   //        LR       operator?(bool, L, R);
   7150   //
   7151   //   where LR is the result of the usual arithmetic conversions
   7152   //   between types L and R.
   7153   // Our candidates ignore the first parameter.
   7154   void addGenericBinaryArithmeticOverloads(bool isComparison) {
   7155     if (!HasArithmeticOrEnumeralCandidateType)
   7156       return;
   7157 
   7158     for (unsigned Left = FirstPromotedArithmeticType;
   7159          Left < LastPromotedArithmeticType; ++Left) {
   7160       for (unsigned Right = FirstPromotedArithmeticType;
   7161            Right < LastPromotedArithmeticType; ++Right) {
   7162         QualType LandR[2] = { getArithmeticType(Left),
   7163                               getArithmeticType(Right) };
   7164         QualType Result =
   7165           isComparison ? S.Context.BoolTy
   7166                        : getUsualArithmeticConversions(Left, Right);
   7167         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
   7168       }
   7169     }
   7170 
   7171     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
   7172     // conditional operator for vector types.
   7173     for (BuiltinCandidateTypeSet::iterator
   7174               Vec1 = CandidateTypes[0].vector_begin(),
   7175            Vec1End = CandidateTypes[0].vector_end();
   7176          Vec1 != Vec1End; ++Vec1) {
   7177       for (BuiltinCandidateTypeSet::iterator
   7178                 Vec2 = CandidateTypes[1].vector_begin(),
   7179              Vec2End = CandidateTypes[1].vector_end();
   7180            Vec2 != Vec2End; ++Vec2) {
   7181         QualType LandR[2] = { *Vec1, *Vec2 };
   7182         QualType Result = S.Context.BoolTy;
   7183         if (!isComparison) {
   7184           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
   7185             Result = *Vec1;
   7186           else
   7187             Result = *Vec2;
   7188         }
   7189 
   7190         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
   7191       }
   7192     }
   7193   }
   7194 
   7195   // C++ [over.built]p17:
   7196   //
   7197   //   For every pair of promoted integral types L and R, there
   7198   //   exist candidate operator functions of the form
   7199   //
   7200   //      LR         operator%(L, R);
   7201   //      LR         operator&(L, R);
   7202   //      LR         operator^(L, R);
   7203   //      LR         operator|(L, R);
   7204   //      L          operator<<(L, R);
   7205   //      L          operator>>(L, R);
   7206   //
   7207   //   where LR is the result of the usual arithmetic conversions
   7208   //   between types L and R.
   7209   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
   7210     if (!HasArithmeticOrEnumeralCandidateType)
   7211       return;
   7212 
   7213     for (unsigned Left = FirstPromotedIntegralType;
   7214          Left < LastPromotedIntegralType; ++Left) {
   7215       for (unsigned Right = FirstPromotedIntegralType;
   7216            Right < LastPromotedIntegralType; ++Right) {
   7217         QualType LandR[2] = { getArithmeticType(Left),
   7218                               getArithmeticType(Right) };
   7219         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
   7220             ? LandR[0]
   7221             : getUsualArithmeticConversions(Left, Right);
   7222         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
   7223       }
   7224     }
   7225   }
   7226 
   7227   // C++ [over.built]p20:
   7228   //
   7229   //   For every pair (T, VQ), where T is an enumeration or
   7230   //   pointer to member type and VQ is either volatile or
   7231   //   empty, there exist candidate operator functions of the form
   7232   //
   7233   //        VQ T&      operator=(VQ T&, T);
   7234   void addAssignmentMemberPointerOrEnumeralOverloads() {
   7235     /// Set of (canonical) types that we've already handled.
   7236     llvm::SmallPtrSet<QualType, 8> AddedTypes;
   7237 
   7238     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
   7239       for (BuiltinCandidateTypeSet::iterator
   7240                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
   7241              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
   7242            Enum != EnumEnd; ++Enum) {
   7243         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
   7244           continue;
   7245 
   7246         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, CandidateSet);
   7247       }
   7248 
   7249       for (BuiltinCandidateTypeSet::iterator
   7250                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
   7251              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
   7252            MemPtr != MemPtrEnd; ++MemPtr) {
   7253         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
   7254           continue;
   7255 
   7256         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, CandidateSet);
   7257       }
   7258     }
   7259   }
   7260 
   7261   // C++ [over.built]p19:
   7262   //
   7263   //   For every pair (T, VQ), where T is any type and VQ is either
   7264   //   volatile or empty, there exist candidate operator functions
   7265   //   of the form
   7266   //
   7267   //        T*VQ&      operator=(T*VQ&, T*);
   7268   //
   7269   // C++ [over.built]p21:
   7270   //
   7271   //   For every pair (T, VQ), where T is a cv-qualified or
   7272   //   cv-unqualified object type and VQ is either volatile or
   7273   //   empty, there exist candidate operator functions of the form
   7274   //
   7275   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
   7276   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
   7277   void addAssignmentPointerOverloads(bool isEqualOp) {
   7278     /// Set of (canonical) types that we've already handled.
   7279     llvm::SmallPtrSet<QualType, 8> AddedTypes;
   7280 
   7281     for (BuiltinCandidateTypeSet::iterator
   7282               Ptr = CandidateTypes[0].pointer_begin(),
   7283            PtrEnd = CandidateTypes[0].pointer_end();
   7284          Ptr != PtrEnd; ++Ptr) {
   7285       // If this is operator=, keep track of the builtin candidates we added.
   7286       if (isEqualOp)
   7287         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
   7288       else if (!(*Ptr)->getPointeeType()->isObjectType())
   7289         continue;
   7290 
   7291       // non-volatile version
   7292       QualType ParamTypes[2] = {
   7293         S.Context.getLValueReferenceType(*Ptr),
   7294         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
   7295       };
   7296       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7297                             /*IsAssigmentOperator=*/ isEqualOp);
   7298 
   7299       bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
   7300                           VisibleTypeConversionsQuals.hasVolatile();
   7301       if (NeedVolatile) {
   7302         // volatile version
   7303         ParamTypes[0] =
   7304           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
   7305         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7306                               /*IsAssigmentOperator=*/isEqualOp);
   7307       }
   7308 
   7309       if (!(*Ptr).isRestrictQualified() &&
   7310           VisibleTypeConversionsQuals.hasRestrict()) {
   7311         // restrict version
   7312         ParamTypes[0]
   7313           = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
   7314         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7315                               /*IsAssigmentOperator=*/isEqualOp);
   7316 
   7317         if (NeedVolatile) {
   7318           // volatile restrict version
   7319           ParamTypes[0]
   7320             = S.Context.getLValueReferenceType(
   7321                 S.Context.getCVRQualifiedType(*Ptr,
   7322                                               (Qualifiers::Volatile |
   7323                                                Qualifiers::Restrict)));
   7324           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7325                                 /*IsAssigmentOperator=*/isEqualOp);
   7326         }
   7327       }
   7328     }
   7329 
   7330     if (isEqualOp) {
   7331       for (BuiltinCandidateTypeSet::iterator
   7332                 Ptr = CandidateTypes[1].pointer_begin(),
   7333              PtrEnd = CandidateTypes[1].pointer_end();
   7334            Ptr != PtrEnd; ++Ptr) {
   7335         // Make sure we don't add the same candidate twice.
   7336         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
   7337           continue;
   7338 
   7339         QualType ParamTypes[2] = {
   7340           S.Context.getLValueReferenceType(*Ptr),
   7341           *Ptr,
   7342         };
   7343 
   7344         // non-volatile version
   7345         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7346                               /*IsAssigmentOperator=*/true);
   7347 
   7348         bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
   7349                            VisibleTypeConversionsQuals.hasVolatile();
   7350         if (NeedVolatile) {
   7351           // volatile version
   7352           ParamTypes[0] =
   7353             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
   7354           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7355                                 /*IsAssigmentOperator=*/true);
   7356         }
   7357 
   7358         if (!(*Ptr).isRestrictQualified() &&
   7359             VisibleTypeConversionsQuals.hasRestrict()) {
   7360           // restrict version
   7361           ParamTypes[0]
   7362             = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
   7363           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7364                                 /*IsAssigmentOperator=*/true);
   7365 
   7366           if (NeedVolatile) {
   7367             // volatile restrict version
   7368             ParamTypes[0]
   7369               = S.Context.getLValueReferenceType(
   7370                   S.Context.getCVRQualifiedType(*Ptr,
   7371                                                 (Qualifiers::Volatile |
   7372                                                  Qualifiers::Restrict)));
   7373             S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7374                                   /*IsAssigmentOperator=*/true);
   7375           }
   7376         }
   7377       }
   7378     }
   7379   }
   7380 
   7381   // C++ [over.built]p18:
   7382   //
   7383   //   For every triple (L, VQ, R), where L is an arithmetic type,
   7384   //   VQ is either volatile or empty, and R is a promoted
   7385   //   arithmetic type, there exist candidate operator functions of
   7386   //   the form
   7387   //
   7388   //        VQ L&      operator=(VQ L&, R);
   7389   //        VQ L&      operator*=(VQ L&, R);
   7390   //        VQ L&      operator/=(VQ L&, R);
   7391   //        VQ L&      operator+=(VQ L&, R);
   7392   //        VQ L&      operator-=(VQ L&, R);
   7393   void addAssignmentArithmeticOverloads(bool isEqualOp) {
   7394     if (!HasArithmeticOrEnumeralCandidateType)
   7395       return;
   7396 
   7397     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
   7398       for (unsigned Right = FirstPromotedArithmeticType;
   7399            Right < LastPromotedArithmeticType; ++Right) {
   7400         QualType ParamTypes[2];
   7401         ParamTypes[1] = getArithmeticType(Right);
   7402 
   7403         // Add this built-in operator as a candidate (VQ is empty).
   7404         ParamTypes[0] =
   7405           S.Context.getLValueReferenceType(getArithmeticType(Left));
   7406         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7407                               /*IsAssigmentOperator=*/isEqualOp);
   7408 
   7409         // Add this built-in operator as a candidate (VQ is 'volatile').
   7410         if (VisibleTypeConversionsQuals.hasVolatile()) {
   7411           ParamTypes[0] =
   7412             S.Context.getVolatileType(getArithmeticType(Left));
   7413           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
   7414           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7415                                 /*IsAssigmentOperator=*/isEqualOp);
   7416         }
   7417       }
   7418     }
   7419 
   7420     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
   7421     for (BuiltinCandidateTypeSet::iterator
   7422               Vec1 = CandidateTypes[0].vector_begin(),
   7423            Vec1End = CandidateTypes[0].vector_end();
   7424          Vec1 != Vec1End; ++Vec1) {
   7425       for (BuiltinCandidateTypeSet::iterator
   7426                 Vec2 = CandidateTypes[1].vector_begin(),
   7427              Vec2End = CandidateTypes[1].vector_end();
   7428            Vec2 != Vec2End; ++Vec2) {
   7429         QualType ParamTypes[2];
   7430         ParamTypes[1] = *Vec2;
   7431         // Add this built-in operator as a candidate (VQ is empty).
   7432         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
   7433         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7434                               /*IsAssigmentOperator=*/isEqualOp);
   7435 
   7436         // Add this built-in operator as a candidate (VQ is 'volatile').
   7437         if (VisibleTypeConversionsQuals.hasVolatile()) {
   7438           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
   7439           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
   7440           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
   7441                                 /*IsAssigmentOperator=*/isEqualOp);
   7442         }
   7443       }
   7444     }
   7445   }
   7446 
   7447   // C++ [over.built]p22:
   7448   //
   7449   //   For every triple (L, VQ, R), where L is an integral type, VQ
   7450   //   is either volatile or empty, and R is a promoted integral
   7451   //   type, there exist candidate operator functions of the form
   7452   //
   7453   //        VQ L&       operator%=(VQ L&, R);
   7454   //        VQ L&       operator<<=(VQ L&, R);
   7455   //        VQ L&       operator>>=(VQ L&, R);
   7456   //        VQ L&       operator&=(VQ L&, R);
   7457   //        VQ L&       operator^=(VQ L&, R);
   7458   //        VQ L&       operator|=(VQ L&, R);
   7459   void addAssignmentIntegralOverloads() {
   7460     if (!HasArithmeticOrEnumeralCandidateType)
   7461       return;
   7462 
   7463     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
   7464       for (unsigned Right = FirstPromotedIntegralType;
   7465            Right < LastPromotedIntegralType; ++Right) {
   7466         QualType ParamTypes[2];
   7467         ParamTypes[1] = getArithmeticType(Right);
   7468 
   7469         // Add this built-in operator as a candidate (VQ is empty).
   7470         ParamTypes[0] =
   7471           S.Context.getLValueReferenceType(getArithmeticType(Left));
   7472         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
   7473         if (VisibleTypeConversionsQuals.hasVolatile()) {
   7474           // Add this built-in operator as a candidate (VQ is 'volatile').
   7475           ParamTypes[0] = getArithmeticType(Left);
   7476           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
   7477           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
   7478           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
   7479         }
   7480       }
   7481     }
   7482   }
   7483 
   7484   // C++ [over.operator]p23:
   7485   //
   7486   //   There also exist candidate operator functions of the form
   7487   //
   7488   //        bool        operator!(bool);
   7489   //        bool        operator&&(bool, bool);
   7490   //        bool        operator||(bool, bool);
   7491   void addExclaimOverload() {
   7492     QualType ParamTy = S.Context.BoolTy;
   7493     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet,
   7494                           /*IsAssignmentOperator=*/false,
   7495                           /*NumContextualBoolArguments=*/1);
   7496   }
   7497   void addAmpAmpOrPipePipeOverload() {
   7498     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
   7499     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet,
   7500                           /*IsAssignmentOperator=*/false,
   7501                           /*NumContextualBoolArguments=*/2);
   7502   }
   7503 
   7504   // C++ [over.built]p13:
   7505   //
   7506   //   For every cv-qualified or cv-unqualified object type T there
   7507   //   exist candidate operator functions of the form
   7508   //
   7509   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
   7510   //        T&         operator[](T*, ptrdiff_t);
   7511   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
   7512   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
   7513   //        T&         operator[](ptrdiff_t, T*);
   7514   void addSubscriptOverloads() {
   7515     for (BuiltinCandidateTypeSet::iterator
   7516               Ptr = CandidateTypes[0].pointer_begin(),
   7517            PtrEnd = CandidateTypes[0].pointer_end();
   7518          Ptr != PtrEnd; ++Ptr) {
   7519       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
   7520       QualType PointeeType = (*Ptr)->getPointeeType();
   7521       if (!PointeeType->isObjectType())
   7522         continue;
   7523 
   7524       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
   7525 
   7526       // T& operator[](T*, ptrdiff_t)
   7527       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
   7528     }
   7529 
   7530     for (BuiltinCandidateTypeSet::iterator
   7531               Ptr = CandidateTypes[1].pointer_begin(),
   7532            PtrEnd = CandidateTypes[1].pointer_end();
   7533          Ptr != PtrEnd; ++Ptr) {
   7534       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
   7535       QualType PointeeType = (*Ptr)->getPointeeType();
   7536       if (!PointeeType->isObjectType())
   7537         continue;
   7538 
   7539       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
   7540 
   7541       // T& operator[](ptrdiff_t, T*)
   7542       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
   7543     }
   7544   }
   7545 
   7546   // C++ [over.built]p11:
   7547   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
   7548   //    C1 is the same type as C2 or is a derived class of C2, T is an object
   7549   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
   7550   //    there exist candidate operator functions of the form
   7551   //
   7552   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
   7553   //
   7554   //    where CV12 is the union of CV1 and CV2.
   7555   void addArrowStarOverloads() {
   7556     for (BuiltinCandidateTypeSet::iterator
   7557              Ptr = CandidateTypes[0].pointer_begin(),
   7558            PtrEnd = CandidateTypes[0].pointer_end();
   7559          Ptr != PtrEnd; ++Ptr) {
   7560       QualType C1Ty = (*Ptr);
   7561       QualType C1;
   7562       QualifierCollector Q1;
   7563       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
   7564       if (!isa<RecordType>(C1))
   7565         continue;
   7566       // heuristic to reduce number of builtin candidates in the set.
   7567       // Add volatile/restrict version only if there are conversions to a
   7568       // volatile/restrict type.
   7569       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
   7570         continue;
   7571       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
   7572         continue;
   7573       for (BuiltinCandidateTypeSet::iterator
   7574                 MemPtr = CandidateTypes[1].member_pointer_begin(),
   7575              MemPtrEnd = CandidateTypes[1].member_pointer_end();
   7576            MemPtr != MemPtrEnd; ++MemPtr) {
   7577         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
   7578         QualType C2 = QualType(mptr->getClass(), 0);
   7579         C2 = C2.getUnqualifiedType();
   7580         if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
   7581           break;
   7582         QualType ParamTypes[2] = { *Ptr, *MemPtr };
   7583         // build CV12 T&
   7584         QualType T = mptr->getPointeeType();
   7585         if (!VisibleTypeConversionsQuals.hasVolatile() &&
   7586             T.isVolatileQualified())
   7587           continue;
   7588         if (!VisibleTypeConversionsQuals.hasRestrict() &&
   7589             T.isRestrictQualified())
   7590           continue;
   7591         T = Q1.apply(S.Context, T);
   7592         QualType ResultTy = S.Context.getLValueReferenceType(T);
   7593         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
   7594       }
   7595     }
   7596   }
   7597 
   7598   // Note that we don't consider the first argument, since it has been
   7599   // contextually converted to bool long ago. The candidates below are
   7600   // therefore added as binary.
   7601   //
   7602   // C++ [over.built]p25:
   7603   //   For every type T, where T is a pointer, pointer-to-member, or scoped
   7604   //   enumeration type, there exist candidate operator functions of the form
   7605   //
   7606   //        T        operator?(bool, T, T);
   7607   //
   7608   void addConditionalOperatorOverloads() {
   7609     /// Set of (canonical) types that we've already handled.
   7610     llvm::SmallPtrSet<QualType, 8> AddedTypes;
   7611 
   7612     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
   7613       for (BuiltinCandidateTypeSet::iterator
   7614                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
   7615              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
   7616            Ptr != PtrEnd; ++Ptr) {
   7617         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
   7618           continue;
   7619 
   7620         QualType ParamTypes[2] = { *Ptr, *Ptr };
   7621         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, CandidateSet);
   7622       }
   7623 
   7624       for (BuiltinCandidateTypeSet::iterator
   7625                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
   7626              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
   7627            MemPtr != MemPtrEnd; ++MemPtr) {
   7628         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
   7629           continue;
   7630 
   7631         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
   7632         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, CandidateSet);
   7633       }
   7634 
   7635       if (S.getLangOpts().CPlusPlus11) {
   7636         for (BuiltinCandidateTypeSet::iterator
   7637                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
   7638                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
   7639              Enum != EnumEnd; ++Enum) {
   7640           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
   7641             continue;
   7642 
   7643           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
   7644             continue;
   7645 
   7646           QualType ParamTypes[2] = { *Enum, *Enum };
   7647           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, CandidateSet);
   7648         }
   7649       }
   7650     }
   7651   }
   7652 };
   7653 
   7654 } // end anonymous namespace
   7655 
   7656 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
   7657 /// operator overloads to the candidate set (C++ [over.built]), based
   7658 /// on the operator @p Op and the arguments given. For example, if the
   7659 /// operator is a binary '+', this routine might add "int
   7660 /// operator+(int, int)" to cover integer addition.
   7661 void
   7662 Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
   7663                                    SourceLocation OpLoc,
   7664                                    llvm::ArrayRef<Expr *> Args,
   7665                                    OverloadCandidateSet& CandidateSet) {
   7666   // Find all of the types that the arguments can convert to, but only
   7667   // if the operator we're looking at has built-in operator candidates
   7668   // that make use of these types. Also record whether we encounter non-record
   7669   // candidate types or either arithmetic or enumeral candidate types.
   7670   Qualifiers VisibleTypeConversionsQuals;
   7671   VisibleTypeConversionsQuals.addConst();
   7672   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
   7673     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
   7674 
   7675   bool HasNonRecordCandidateType = false;
   7676   bool HasArithmeticOrEnumeralCandidateType = false;
   7677   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
   7678   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
   7679     CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
   7680     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
   7681                                                  OpLoc,
   7682                                                  true,
   7683                                                  (Op == OO_Exclaim ||
   7684                                                   Op == OO_AmpAmp ||
   7685                                                   Op == OO_PipePipe),
   7686                                                  VisibleTypeConversionsQuals);
   7687     HasNonRecordCandidateType = HasNonRecordCandidateType ||
   7688         CandidateTypes[ArgIdx].hasNonRecordTypes();
   7689     HasArithmeticOrEnumeralCandidateType =
   7690         HasArithmeticOrEnumeralCandidateType ||
   7691         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
   7692   }
   7693 
   7694   // Exit early when no non-record types have been added to the candidate set
   7695   // for any of the arguments to the operator.
   7696   //
   7697   // We can't exit early for !, ||, or &&, since there we have always have
   7698   // 'bool' overloads.
   7699   if (!HasNonRecordCandidateType &&
   7700       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
   7701     return;
   7702 
   7703   // Setup an object to manage the common state for building overloads.
   7704   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args,
   7705                                            VisibleTypeConversionsQuals,
   7706                                            HasArithmeticOrEnumeralCandidateType,
   7707                                            CandidateTypes, CandidateSet);
   7708 
   7709   // Dispatch over the operation to add in only those overloads which apply.
   7710   switch (Op) {
   7711   case OO_None:
   7712   case NUM_OVERLOADED_OPERATORS:
   7713     llvm_unreachable("Expected an overloaded operator");
   7714 
   7715   case OO_New:
   7716   case OO_Delete:
   7717   case OO_Array_New:
   7718   case OO_Array_Delete:
   7719   case OO_Call:
   7720     llvm_unreachable(
   7721                     "Special operators don't use AddBuiltinOperatorCandidates");
   7722 
   7723   case OO_Comma:
   7724   case OO_Arrow:
   7725     // C++ [over.match.oper]p3:
   7726     //   -- For the operator ',', the unary operator '&', or the
   7727     //      operator '->', the built-in candidates set is empty.
   7728     break;
   7729 
   7730   case OO_Plus: // '+' is either unary or binary
   7731     if (Args.size() == 1)
   7732       OpBuilder.addUnaryPlusPointerOverloads();
   7733     // Fall through.
   7734 
   7735   case OO_Minus: // '-' is either unary or binary
   7736     if (Args.size() == 1) {
   7737       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
   7738     } else {
   7739       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
   7740       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
   7741     }
   7742     break;
   7743 
   7744   case OO_Star: // '*' is either unary or binary
   7745     if (Args.size() == 1)
   7746       OpBuilder.addUnaryStarPointerOverloads();
   7747     else
   7748       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
   7749     break;
   7750 
   7751   case OO_Slash:
   7752     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
   7753     break;
   7754 
   7755   case OO_PlusPlus:
   7756   case OO_MinusMinus:
   7757     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
   7758     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
   7759     break;
   7760 
   7761   case OO_EqualEqual:
   7762   case OO_ExclaimEqual:
   7763     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
   7764     // Fall through.
   7765 
   7766   case OO_Less:
   7767   case OO_Greater:
   7768   case OO_LessEqual:
   7769   case OO_GreaterEqual:
   7770     OpBuilder.addRelationalPointerOrEnumeralOverloads();
   7771     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
   7772     break;
   7773 
   7774   case OO_Percent:
   7775   case OO_Caret:
   7776   case OO_Pipe:
   7777   case OO_LessLess:
   7778   case OO_GreaterGreater:
   7779     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
   7780     break;
   7781 
   7782   case OO_Amp: // '&' is either unary or binary
   7783     if (Args.size() == 1)
   7784       // C++ [over.match.oper]p3:
   7785       //   -- For the operator ',', the unary operator '&', or the
   7786       //      operator '->', the built-in candidates set is empty.
   7787       break;
   7788 
   7789     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
   7790     break;
   7791 
   7792   case OO_Tilde:
   7793     OpBuilder.addUnaryTildePromotedIntegralOverloads();
   7794     break;
   7795 
   7796   case OO_Equal:
   7797     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
   7798     // Fall through.
   7799 
   7800   case OO_PlusEqual:
   7801   case OO_MinusEqual:
   7802     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
   7803     // Fall through.
   7804 
   7805   case OO_StarEqual:
   7806   case OO_SlashEqual:
   7807     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
   7808     break;
   7809 
   7810   case OO_PercentEqual:
   7811   case OO_LessLessEqual:
   7812   case OO_GreaterGreaterEqual:
   7813   case OO_AmpEqual:
   7814   case OO_CaretEqual:
   7815   case OO_PipeEqual:
   7816     OpBuilder.addAssignmentIntegralOverloads();
   7817     break;
   7818 
   7819   case OO_Exclaim:
   7820     OpBuilder.addExclaimOverload();
   7821     break;
   7822 
   7823   case OO_AmpAmp:
   7824   case OO_PipePipe:
   7825     OpBuilder.addAmpAmpOrPipePipeOverload();
   7826     break;
   7827 
   7828   case OO_Subscript:
   7829     OpBuilder.addSubscriptOverloads();
   7830     break;
   7831 
   7832   case OO_ArrowStar:
   7833     OpBuilder.addArrowStarOverloads();
   7834     break;
   7835 
   7836   case OO_Conditional:
   7837     OpBuilder.addConditionalOperatorOverloads();
   7838     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
   7839     break;
   7840   }
   7841 }
   7842 
   7843 /// \brief Add function candidates found via argument-dependent lookup
   7844 /// to the set of overloading candidates.
   7845 ///
   7846 /// This routine performs argument-dependent name lookup based on the
   7847 /// given function name (which may also be an operator name) and adds
   7848 /// all of the overload candidates found by ADL to the overload
   7849 /// candidate set (C++ [basic.lookup.argdep]).
   7850 void
   7851 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
   7852                                            bool Operator, SourceLocation Loc,
   7853                                            ArrayRef<Expr *> Args,
   7854                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
   7855                                            OverloadCandidateSet& CandidateSet,
   7856                                            bool PartialOverloading) {
   7857   ADLResult Fns;
   7858 
   7859   // FIXME: This approach for uniquing ADL results (and removing
   7860   // redundant candidates from the set) relies on pointer-equality,
   7861   // which means we need to key off the canonical decl.  However,
   7862   // always going back to the canonical decl might not get us the
   7863   // right set of default arguments.  What default arguments are
   7864   // we supposed to consider on ADL candidates, anyway?
   7865 
   7866   // FIXME: Pass in the explicit template arguments?
   7867   ArgumentDependentLookup(Name, Operator, Loc, Args, Fns);
   7868 
   7869   // Erase all of the candidates we already knew about.
   7870   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
   7871                                    CandEnd = CandidateSet.end();
   7872        Cand != CandEnd; ++Cand)
   7873     if (Cand->Function) {
   7874       Fns.erase(Cand->Function);
   7875       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
   7876         Fns.erase(FunTmpl);
   7877     }
   7878 
   7879   // For each of the ADL candidates we found, add it to the overload
   7880   // set.
   7881   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
   7882     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
   7883     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
   7884       if (ExplicitTemplateArgs)
   7885         continue;
   7886 
   7887       AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
   7888                            PartialOverloading);
   7889     } else
   7890       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
   7891                                    FoundDecl, ExplicitTemplateArgs,
   7892                                    Args, CandidateSet);
   7893   }
   7894 }
   7895 
   7896 /// isBetterOverloadCandidate - Determines whether the first overload
   7897 /// candidate is a better candidate than the second (C++ 13.3.3p1).
   7898 bool
   7899 isBetterOverloadCandidate(Sema &S,
   7900                           const OverloadCandidate &Cand1,
   7901                           const OverloadCandidate &Cand2,
   7902                           SourceLocation Loc,
   7903                           bool UserDefinedConversion) {
   7904   // Define viable functions to be better candidates than non-viable
   7905   // functions.
   7906   if (!Cand2.Viable)
   7907     return Cand1.Viable;
   7908   else if (!Cand1.Viable)
   7909     return false;
   7910 
   7911   // C++ [over.match.best]p1:
   7912   //
   7913   //   -- if F is a static member function, ICS1(F) is defined such
   7914   //      that ICS1(F) is neither better nor worse than ICS1(G) for
   7915   //      any function G, and, symmetrically, ICS1(G) is neither
   7916   //      better nor worse than ICS1(F).
   7917   unsigned StartArg = 0;
   7918   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
   7919     StartArg = 1;
   7920 
   7921   // C++ [over.match.best]p1:
   7922   //   A viable function F1 is defined to be a better function than another
   7923   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
   7924   //   conversion sequence than ICSi(F2), and then...
   7925   unsigned NumArgs = Cand1.NumConversions;
   7926   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
   7927   bool HasBetterConversion = false;
   7928   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
   7929     switch (CompareImplicitConversionSequences(S,
   7930                                                Cand1.Conversions[ArgIdx],
   7931                                                Cand2.Conversions[ArgIdx])) {
   7932     case ImplicitConversionSequence::Better:
   7933       // Cand1 has a better conversion sequence.
   7934       HasBetterConversion = true;
   7935       break;
   7936 
   7937     case ImplicitConversionSequence::Worse:
   7938       // Cand1 can't be better than Cand2.
   7939       return false;
   7940 
   7941     case ImplicitConversionSequence::Indistinguishable:
   7942       // Do nothing.
   7943       break;
   7944     }
   7945   }
   7946 
   7947   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
   7948   //       ICSj(F2), or, if not that,
   7949   if (HasBetterConversion)
   7950     return true;
   7951 
   7952   //     - F1 is a non-template function and F2 is a function template
   7953   //       specialization, or, if not that,
   7954   if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
   7955       Cand2.Function && Cand2.Function->getPrimaryTemplate())
   7956     return true;
   7957 
   7958   //   -- F1 and F2 are function template specializations, and the function
   7959   //      template for F1 is more specialized than the template for F2
   7960   //      according to the partial ordering rules described in 14.5.5.2, or,
   7961   //      if not that,
   7962   if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
   7963       Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
   7964     if (FunctionTemplateDecl *BetterTemplate
   7965           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
   7966                                          Cand2.Function->getPrimaryTemplate(),
   7967                                          Loc,
   7968                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
   7969                                                              : TPOC_Call,
   7970                                          Cand1.ExplicitCallArguments))
   7971       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
   7972   }
   7973 
   7974   //   -- the context is an initialization by user-defined conversion
   7975   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
   7976   //      from the return type of F1 to the destination type (i.e.,
   7977   //      the type of the entity being initialized) is a better
   7978   //      conversion sequence than the standard conversion sequence
   7979   //      from the return type of F2 to the destination type.
   7980   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
   7981       isa<CXXConversionDecl>(Cand1.Function) &&
   7982       isa<CXXConversionDecl>(Cand2.Function)) {
   7983     // First check whether we prefer one of the conversion functions over the
   7984     // other. This only distinguishes the results in non-standard, extension
   7985     // cases such as the conversion from a lambda closure type to a function
   7986     // pointer or block.
   7987     ImplicitConversionSequence::CompareKind FuncResult
   7988       = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
   7989     if (FuncResult != ImplicitConversionSequence::Indistinguishable)
   7990       return FuncResult;
   7991 
   7992     switch (CompareStandardConversionSequences(S,
   7993                                                Cand1.FinalConversion,
   7994                                                Cand2.FinalConversion)) {
   7995     case ImplicitConversionSequence::Better:
   7996       // Cand1 has a better conversion sequence.
   7997       return true;
   7998 
   7999     case ImplicitConversionSequence::Worse:
   8000       // Cand1 can't be better than Cand2.
   8001       return false;
   8002 
   8003     case ImplicitConversionSequence::Indistinguishable:
   8004       // Do nothing
   8005       break;
   8006     }
   8007   }
   8008 
   8009   return false;
   8010 }
   8011 
   8012 /// \brief Computes the best viable function (C++ 13.3.3)
   8013 /// within an overload candidate set.
   8014 ///
   8015 /// \param Loc The location of the function name (or operator symbol) for
   8016 /// which overload resolution occurs.
   8017 ///
   8018 /// \param Best If overload resolution was successful or found a deleted
   8019 /// function, \p Best points to the candidate function found.
   8020 ///
   8021 /// \returns The result of overload resolution.
   8022 OverloadingResult
   8023 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
   8024                                          iterator &Best,
   8025                                          bool UserDefinedConversion) {
   8026   // Find the best viable function.
   8027   Best = end();
   8028   for (iterator Cand = begin(); Cand != end(); ++Cand) {
   8029     if (Cand->Viable)
   8030       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
   8031                                                      UserDefinedConversion))
   8032         Best = Cand;
   8033   }
   8034 
   8035   // If we didn't find any viable functions, abort.
   8036   if (Best == end())
   8037     return OR_No_Viable_Function;
   8038 
   8039   // Make sure that this function is better than every other viable
   8040   // function. If not, we have an ambiguity.
   8041   for (iterator Cand = begin(); Cand != end(); ++Cand) {
   8042     if (Cand->Viable &&
   8043         Cand != Best &&
   8044         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
   8045                                    UserDefinedConversion)) {
   8046       Best = end();
   8047       return OR_Ambiguous;
   8048     }
   8049   }
   8050 
   8051   // Best is the best viable function.
   8052   if (Best->Function &&
   8053       (Best->Function->isDeleted() ||
   8054        S.isFunctionConsideredUnavailable(Best->Function)))
   8055     return OR_Deleted;
   8056 
   8057   return OR_Success;
   8058 }
   8059 
   8060 namespace {
   8061 
   8062 enum OverloadCandidateKind {
   8063   oc_function,
   8064   oc_method,
   8065   oc_constructor,
   8066   oc_function_template,
   8067   oc_method_template,
   8068   oc_constructor_template,
   8069   oc_implicit_default_constructor,
   8070   oc_implicit_copy_constructor,
   8071   oc_implicit_move_constructor,
   8072   oc_implicit_copy_assignment,
   8073   oc_implicit_move_assignment,
   8074   oc_implicit_inherited_constructor
   8075 };
   8076 
   8077 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
   8078                                                 FunctionDecl *Fn,
   8079                                                 std::string &Description) {
   8080   bool isTemplate = false;
   8081 
   8082   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
   8083     isTemplate = true;
   8084     Description = S.getTemplateArgumentBindingsText(
   8085       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
   8086   }
   8087 
   8088   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
   8089     if (!Ctor->isImplicit())
   8090       return isTemplate ? oc_constructor_template : oc_constructor;
   8091 
   8092     if (Ctor->getInheritedConstructor())
   8093       return oc_implicit_inherited_constructor;
   8094 
   8095     if (Ctor->isDefaultConstructor())
   8096       return oc_implicit_default_constructor;
   8097 
   8098     if (Ctor->isMoveConstructor())
   8099       return oc_implicit_move_constructor;
   8100 
   8101     assert(Ctor->isCopyConstructor() &&
   8102            "unexpected sort of implicit constructor");
   8103     return oc_implicit_copy_constructor;
   8104   }
   8105 
   8106   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
   8107     // This actually gets spelled 'candidate function' for now, but
   8108     // it doesn't hurt to split it out.
   8109     if (!Meth->isImplicit())
   8110       return isTemplate ? oc_method_template : oc_method;
   8111 
   8112     if (Meth->isMoveAssignmentOperator())
   8113       return oc_implicit_move_assignment;
   8114 
   8115     if (Meth->isCopyAssignmentOperator())
   8116       return oc_implicit_copy_assignment;
   8117 
   8118     assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
   8119     return oc_method;
   8120   }
   8121 
   8122   return isTemplate ? oc_function_template : oc_function;
   8123 }
   8124 
   8125 void MaybeEmitInheritedConstructorNote(Sema &S, Decl *Fn) {
   8126   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
   8127   if (!Ctor) return;
   8128 
   8129   Ctor = Ctor->getInheritedConstructor();
   8130   if (!Ctor) return;
   8131 
   8132   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
   8133 }
   8134 
   8135 } // end anonymous namespace
   8136 
   8137 // Notes the location of an overload candidate.
   8138 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
   8139   std::string FnDesc;
   8140   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
   8141   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
   8142                              << (unsigned) K << FnDesc;
   8143   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
   8144   Diag(Fn->getLocation(), PD);
   8145   MaybeEmitInheritedConstructorNote(*this, Fn);
   8146 }
   8147 
   8148 //Notes the location of all overload candidates designated through
   8149 // OverloadedExpr
   8150 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
   8151   assert(OverloadedExpr->getType() == Context.OverloadTy);
   8152 
   8153   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
   8154   OverloadExpr *OvlExpr = Ovl.Expression;
   8155 
   8156   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
   8157                             IEnd = OvlExpr->decls_end();
   8158        I != IEnd; ++I) {
   8159     if (FunctionTemplateDecl *FunTmpl =
   8160                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
   8161       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
   8162     } else if (FunctionDecl *Fun
   8163                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
   8164       NoteOverloadCandidate(Fun, DestType);
   8165     }
   8166   }
   8167 }
   8168 
   8169 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
   8170 /// "lead" diagnostic; it will be given two arguments, the source and
   8171 /// target types of the conversion.
   8172 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
   8173                                  Sema &S,
   8174                                  SourceLocation CaretLoc,
   8175                                  const PartialDiagnostic &PDiag) const {
   8176   S.Diag(CaretLoc, PDiag)
   8177     << Ambiguous.getFromType() << Ambiguous.getToType();
   8178   // FIXME: The note limiting machinery is borrowed from
   8179   // OverloadCandidateSet::NoteCandidates; there's an opportunity for
   8180   // refactoring here.
   8181   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
   8182   unsigned CandsShown = 0;
   8183   AmbiguousConversionSequence::const_iterator I, E;
   8184   for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
   8185     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
   8186       break;
   8187     ++CandsShown;
   8188     S.NoteOverloadCandidate(*I);
   8189   }
   8190   if (I != E)
   8191     S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
   8192 }
   8193 
   8194 namespace {
   8195 
   8196 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
   8197   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
   8198   assert(Conv.isBad());
   8199   assert(Cand->Function && "for now, candidate must be a function");
   8200   FunctionDecl *Fn = Cand->Function;
   8201 
   8202   // There's a conversion slot for the object argument if this is a
   8203   // non-constructor method.  Note that 'I' corresponds the
   8204   // conversion-slot index.
   8205   bool isObjectArgument = false;
   8206   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
   8207     if (I == 0)
   8208       isObjectArgument = true;
   8209     else
   8210       I--;
   8211   }
   8212 
   8213   std::string FnDesc;
   8214   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
   8215 
   8216   Expr *FromExpr = Conv.Bad.FromExpr;
   8217   QualType FromTy = Conv.Bad.getFromType();
   8218   QualType ToTy = Conv.Bad.getToType();
   8219 
   8220   if (FromTy == S.Context.OverloadTy) {
   8221     assert(FromExpr && "overload set argument came from implicit argument?");
   8222     Expr *E = FromExpr->IgnoreParens();
   8223     if (isa<UnaryOperator>(E))
   8224       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
   8225     DeclarationName Name = cast<OverloadExpr>(E)->getName();
   8226 
   8227     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
   8228       << (unsigned) FnKind << FnDesc
   8229       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8230       << ToTy << Name << I+1;
   8231     MaybeEmitInheritedConstructorNote(S, Fn);
   8232     return;
   8233   }
   8234 
   8235   // Do some hand-waving analysis to see if the non-viability is due
   8236   // to a qualifier mismatch.
   8237   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
   8238   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
   8239   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
   8240     CToTy = RT->getPointeeType();
   8241   else {
   8242     // TODO: detect and diagnose the full richness of const mismatches.
   8243     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
   8244       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
   8245         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
   8246   }
   8247 
   8248   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
   8249       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
   8250     Qualifiers FromQs = CFromTy.getQualifiers();
   8251     Qualifiers ToQs = CToTy.getQualifiers();
   8252 
   8253     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
   8254       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
   8255         << (unsigned) FnKind << FnDesc
   8256         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8257         << FromTy
   8258         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
   8259         << (unsigned) isObjectArgument << I+1;
   8260       MaybeEmitInheritedConstructorNote(S, Fn);
   8261       return;
   8262     }
   8263 
   8264     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
   8265       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
   8266         << (unsigned) FnKind << FnDesc
   8267         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8268         << FromTy
   8269         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
   8270         << (unsigned) isObjectArgument << I+1;
   8271       MaybeEmitInheritedConstructorNote(S, Fn);
   8272       return;
   8273     }
   8274 
   8275     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
   8276       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
   8277       << (unsigned) FnKind << FnDesc
   8278       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8279       << FromTy
   8280       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
   8281       << (unsigned) isObjectArgument << I+1;
   8282       MaybeEmitInheritedConstructorNote(S, Fn);
   8283       return;
   8284     }
   8285 
   8286     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
   8287     assert(CVR && "unexpected qualifiers mismatch");
   8288 
   8289     if (isObjectArgument) {
   8290       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
   8291         << (unsigned) FnKind << FnDesc
   8292         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8293         << FromTy << (CVR - 1);
   8294     } else {
   8295       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
   8296         << (unsigned) FnKind << FnDesc
   8297         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8298         << FromTy << (CVR - 1) << I+1;
   8299     }
   8300     MaybeEmitInheritedConstructorNote(S, Fn);
   8301     return;
   8302   }
   8303 
   8304   // Special diagnostic for failure to convert an initializer list, since
   8305   // telling the user that it has type void is not useful.
   8306   if (FromExpr && isa<InitListExpr>(FromExpr)) {
   8307     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
   8308       << (unsigned) FnKind << FnDesc
   8309       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8310       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
   8311     MaybeEmitInheritedConstructorNote(S, Fn);
   8312     return;
   8313   }
   8314 
   8315   // Diagnose references or pointers to incomplete types differently,
   8316   // since it's far from impossible that the incompleteness triggered
   8317   // the failure.
   8318   QualType TempFromTy = FromTy.getNonReferenceType();
   8319   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
   8320     TempFromTy = PTy->getPointeeType();
   8321   if (TempFromTy->isIncompleteType()) {
   8322     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
   8323       << (unsigned) FnKind << FnDesc
   8324       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8325       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
   8326     MaybeEmitInheritedConstructorNote(S, Fn);
   8327     return;
   8328   }
   8329 
   8330   // Diagnose base -> derived pointer conversions.
   8331   unsigned BaseToDerivedConversion = 0;
   8332   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
   8333     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
   8334       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
   8335                                                FromPtrTy->getPointeeType()) &&
   8336           !FromPtrTy->getPointeeType()->isIncompleteType() &&
   8337           !ToPtrTy->getPointeeType()->isIncompleteType() &&
   8338           S.IsDerivedFrom(ToPtrTy->getPointeeType(),
   8339                           FromPtrTy->getPointeeType()))
   8340         BaseToDerivedConversion = 1;
   8341     }
   8342   } else if (const ObjCObjectPointerType *FromPtrTy
   8343                                     = FromTy->getAs<ObjCObjectPointerType>()) {
   8344     if (const ObjCObjectPointerType *ToPtrTy
   8345                                         = ToTy->getAs<ObjCObjectPointerType>())
   8346       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
   8347         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
   8348           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
   8349                                                 FromPtrTy->getPointeeType()) &&
   8350               FromIface->isSuperClassOf(ToIface))
   8351             BaseToDerivedConversion = 2;
   8352   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
   8353     if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
   8354         !FromTy->isIncompleteType() &&
   8355         !ToRefTy->getPointeeType()->isIncompleteType() &&
   8356         S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
   8357       BaseToDerivedConversion = 3;
   8358     } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
   8359                ToTy.getNonReferenceType().getCanonicalType() ==
   8360                FromTy.getNonReferenceType().getCanonicalType()) {
   8361       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
   8362         << (unsigned) FnKind << FnDesc
   8363         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8364         << (unsigned) isObjectArgument << I + 1;
   8365       MaybeEmitInheritedConstructorNote(S, Fn);
   8366       return;
   8367     }
   8368   }
   8369 
   8370   if (BaseToDerivedConversion) {
   8371     S.Diag(Fn->getLocation(),
   8372            diag::note_ovl_candidate_bad_base_to_derived_conv)
   8373       << (unsigned) FnKind << FnDesc
   8374       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8375       << (BaseToDerivedConversion - 1)
   8376       << FromTy << ToTy << I+1;
   8377     MaybeEmitInheritedConstructorNote(S, Fn);
   8378     return;
   8379   }
   8380 
   8381   if (isa<ObjCObjectPointerType>(CFromTy) &&
   8382       isa<PointerType>(CToTy)) {
   8383       Qualifiers FromQs = CFromTy.getQualifiers();
   8384       Qualifiers ToQs = CToTy.getQualifiers();
   8385       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
   8386         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
   8387         << (unsigned) FnKind << FnDesc
   8388         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8389         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
   8390         MaybeEmitInheritedConstructorNote(S, Fn);
   8391         return;
   8392       }
   8393   }
   8394 
   8395   // Emit the generic diagnostic and, optionally, add the hints to it.
   8396   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
   8397   FDiag << (unsigned) FnKind << FnDesc
   8398     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
   8399     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
   8400     << (unsigned) (Cand->Fix.Kind);
   8401 
   8402   // If we can fix the conversion, suggest the FixIts.
   8403   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
   8404        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
   8405     FDiag << *HI;
   8406   S.Diag(Fn->getLocation(), FDiag);
   8407 
   8408   MaybeEmitInheritedConstructorNote(S, Fn);
   8409 }
   8410 
   8411 /// Additional arity mismatch diagnosis specific to a function overload
   8412 /// candidates. This is not covered by the more general DiagnoseArityMismatch()
   8413 /// over a candidate in any candidate set.
   8414 bool CheckArityMismatch(Sema &S, OverloadCandidate *Cand,
   8415                         unsigned NumArgs) {
   8416   FunctionDecl *Fn = Cand->Function;
   8417   unsigned MinParams = Fn->getMinRequiredArguments();
   8418 
   8419   // With invalid overloaded operators, it's possible that we think we
   8420   // have an arity mismatch when in fact it looks like we have the
   8421   // right number of arguments, because only overloaded operators have
   8422   // the weird behavior of overloading member and non-member functions.
   8423   // Just don't report anything.
   8424   if (Fn->isInvalidDecl() &&
   8425       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
   8426     return true;
   8427 
   8428   if (NumArgs < MinParams) {
   8429     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
   8430            (Cand->FailureKind == ovl_fail_bad_deduction &&
   8431             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
   8432   } else {
   8433     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
   8434            (Cand->FailureKind == ovl_fail_bad_deduction &&
   8435             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
   8436   }
   8437 
   8438   return false;
   8439 }
   8440 
   8441 /// General arity mismatch diagnosis over a candidate in a candidate set.
   8442 void DiagnoseArityMismatch(Sema &S, Decl *D, unsigned NumFormalArgs) {
   8443   assert(isa<FunctionDecl>(D) &&
   8444       "The templated declaration should at least be a function"
   8445       " when diagnosing bad template argument deduction due to too many"
   8446       " or too few arguments");
   8447 
   8448   FunctionDecl *Fn = cast<FunctionDecl>(D);
   8449 
   8450   // TODO: treat calls to a missing default constructor as a special case
   8451   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
   8452   unsigned MinParams = Fn->getMinRequiredArguments();
   8453 
   8454   // at least / at most / exactly
   8455   unsigned mode, modeCount;
   8456   if (NumFormalArgs < MinParams) {
   8457     if (MinParams != FnTy->getNumArgs() ||
   8458         FnTy->isVariadic() || FnTy->isTemplateVariadic())
   8459       mode = 0; // "at least"
   8460     else
   8461       mode = 2; // "exactly"
   8462     modeCount = MinParams;
   8463   } else {
   8464     if (MinParams != FnTy->getNumArgs())
   8465       mode = 1; // "at most"
   8466     else
   8467       mode = 2; // "exactly"
   8468     modeCount = FnTy->getNumArgs();
   8469   }
   8470 
   8471   std::string Description;
   8472   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
   8473 
   8474   if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
   8475     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
   8476       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
   8477       << Fn->getParamDecl(0) << NumFormalArgs;
   8478   else
   8479     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
   8480       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
   8481       << modeCount << NumFormalArgs;
   8482   MaybeEmitInheritedConstructorNote(S, Fn);
   8483 }
   8484 
   8485 /// Arity mismatch diagnosis specific to a function overload candidate.
   8486 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
   8487                            unsigned NumFormalArgs) {
   8488   if (!CheckArityMismatch(S, Cand, NumFormalArgs))
   8489     DiagnoseArityMismatch(S, Cand->Function, NumFormalArgs);
   8490 }
   8491 
   8492 TemplateDecl *getDescribedTemplate(Decl *Templated) {
   8493   if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Templated))
   8494     return FD->getDescribedFunctionTemplate();
   8495   else if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Templated))
   8496     return RD->getDescribedClassTemplate();
   8497 
   8498   llvm_unreachable("Unsupported: Getting the described template declaration"
   8499                    " for bad deduction diagnosis");
   8500 }
   8501 
   8502 /// Diagnose a failed template-argument deduction.
   8503 void DiagnoseBadDeduction(Sema &S, Decl *Templated,
   8504                           DeductionFailureInfo &DeductionFailure,
   8505                           unsigned NumArgs) {
   8506   TemplateParameter Param = DeductionFailure.getTemplateParameter();
   8507   NamedDecl *ParamD;
   8508   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
   8509   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
   8510   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
   8511   switch (DeductionFailure.Result) {
   8512   case Sema::TDK_Success:
   8513     llvm_unreachable("TDK_success while diagnosing bad deduction");
   8514 
   8515   case Sema::TDK_Incomplete: {
   8516     assert(ParamD && "no parameter found for incomplete deduction result");
   8517     S.Diag(Templated->getLocation(),
   8518            diag::note_ovl_candidate_incomplete_deduction)
   8519         << ParamD->getDeclName();
   8520     MaybeEmitInheritedConstructorNote(S, Templated);
   8521     return;
   8522   }
   8523 
   8524   case Sema::TDK_Underqualified: {
   8525     assert(ParamD && "no parameter found for bad qualifiers deduction result");
   8526     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
   8527 
   8528     QualType Param = DeductionFailure.getFirstArg()->getAsType();
   8529 
   8530     // Param will have been canonicalized, but it should just be a
   8531     // qualified version of ParamD, so move the qualifiers to that.
   8532     QualifierCollector Qs;
   8533     Qs.strip(Param);
   8534     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
   8535     assert(S.Context.hasSameType(Param, NonCanonParam));
   8536 
   8537     // Arg has also been canonicalized, but there's nothing we can do
   8538     // about that.  It also doesn't matter as much, because it won't
   8539     // have any template parameters in it (because deduction isn't
   8540     // done on dependent types).
   8541     QualType Arg = DeductionFailure.getSecondArg()->getAsType();
   8542 
   8543     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified)
   8544         << ParamD->getDeclName() << Arg << NonCanonParam;
   8545     MaybeEmitInheritedConstructorNote(S, Templated);
   8546     return;
   8547   }
   8548 
   8549   case Sema::TDK_Inconsistent: {
   8550     assert(ParamD && "no parameter found for inconsistent deduction result");
   8551     int which = 0;
   8552     if (isa<TemplateTypeParmDecl>(ParamD))
   8553       which = 0;
   8554     else if (isa<NonTypeTemplateParmDecl>(ParamD))
   8555       which = 1;
   8556     else {
   8557       which = 2;
   8558     }
   8559 
   8560     S.Diag(Templated->getLocation(),
   8561            diag::note_ovl_candidate_inconsistent_deduction)
   8562         << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg()
   8563         << *DeductionFailure.getSecondArg();
   8564     MaybeEmitInheritedConstructorNote(S, Templated);
   8565     return;
   8566   }
   8567 
   8568   case Sema::TDK_InvalidExplicitArguments:
   8569     assert(ParamD && "no parameter found for invalid explicit arguments");
   8570     if (ParamD->getDeclName())
   8571       S.Diag(Templated->getLocation(),
   8572              diag::note_ovl_candidate_explicit_arg_mismatch_named)
   8573           << ParamD->getDeclName();
   8574     else {
   8575       int index = 0;
   8576       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
   8577         index = TTP->getIndex();
   8578       else if (NonTypeTemplateParmDecl *NTTP
   8579                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
   8580         index = NTTP->getIndex();
   8581       else
   8582         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
   8583       S.Diag(Templated->getLocation(),
   8584              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
   8585           << (index + 1);
   8586     }
   8587     MaybeEmitInheritedConstructorNote(S, Templated);
   8588     return;
   8589 
   8590   case Sema::TDK_TooManyArguments:
   8591   case Sema::TDK_TooFewArguments:
   8592     DiagnoseArityMismatch(S, Templated, NumArgs);
   8593     return;
   8594 
   8595   case Sema::TDK_InstantiationDepth:
   8596     S.Diag(Templated->getLocation(),
   8597            diag::note_ovl_candidate_instantiation_depth);
   8598     MaybeEmitInheritedConstructorNote(S, Templated);
   8599     return;
   8600 
   8601   case Sema::TDK_SubstitutionFailure: {
   8602     // Format the template argument list into the argument string.
   8603     SmallString<128> TemplateArgString;
   8604     if (TemplateArgumentList *Args =
   8605             DeductionFailure.getTemplateArgumentList()) {
   8606       TemplateArgString = " ";
   8607       TemplateArgString += S.getTemplateArgumentBindingsText(
   8608           getDescribedTemplate(Templated)->getTemplateParameters(), *Args);
   8609     }
   8610 
   8611     // If this candidate was disabled by enable_if, say so.
   8612     PartialDiagnosticAt *PDiag = DeductionFailure.getSFINAEDiagnostic();
   8613     if (PDiag && PDiag->second.getDiagID() ==
   8614           diag::err_typename_nested_not_found_enable_if) {
   8615       // FIXME: Use the source range of the condition, and the fully-qualified
   8616       //        name of the enable_if template. These are both present in PDiag.
   8617       S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
   8618         << "'enable_if'" << TemplateArgString;
   8619       return;
   8620     }
   8621 
   8622     // Format the SFINAE diagnostic into the argument string.
   8623     // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
   8624     //        formatted message in another diagnostic.
   8625     SmallString<128> SFINAEArgString;
   8626     SourceRange R;
   8627     if (PDiag) {
   8628       SFINAEArgString = ": ";
   8629       R = SourceRange(PDiag->first, PDiag->first);
   8630       PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
   8631     }
   8632 
   8633     S.Diag(Templated->getLocation(),
   8634            diag::note_ovl_candidate_substitution_failure)
   8635         << TemplateArgString << SFINAEArgString << R;
   8636     MaybeEmitInheritedConstructorNote(S, Templated);
   8637     return;
   8638   }
   8639 
   8640   case Sema::TDK_FailedOverloadResolution: {
   8641     OverloadExpr::FindResult R = OverloadExpr::find(DeductionFailure.getExpr());
   8642     S.Diag(Templated->getLocation(),
   8643            diag::note_ovl_candidate_failed_overload_resolution)
   8644         << R.Expression->getName();
   8645     return;
   8646   }
   8647 
   8648   case Sema::TDK_NonDeducedMismatch: {
   8649     // FIXME: Provide a source location to indicate what we couldn't match.
   8650     TemplateArgument FirstTA = *DeductionFailure.getFirstArg();
   8651     TemplateArgument SecondTA = *DeductionFailure.getSecondArg();
   8652     if (FirstTA.getKind() == TemplateArgument::Template &&
   8653         SecondTA.getKind() == TemplateArgument::Template) {
   8654       TemplateName FirstTN = FirstTA.getAsTemplate();
   8655       TemplateName SecondTN = SecondTA.getAsTemplate();
   8656       if (FirstTN.getKind() == TemplateName::Template &&
   8657           SecondTN.getKind() == TemplateName::Template) {
   8658         if (FirstTN.getAsTemplateDecl()->getName() ==
   8659             SecondTN.getAsTemplateDecl()->getName()) {
   8660           // FIXME: This fixes a bad diagnostic where both templates are named
   8661           // the same.  This particular case is a bit difficult since:
   8662           // 1) It is passed as a string to the diagnostic printer.
   8663           // 2) The diagnostic printer only attempts to find a better
   8664           //    name for types, not decls.
   8665           // Ideally, this should folded into the diagnostic printer.
   8666           S.Diag(Templated->getLocation(),
   8667                  diag::note_ovl_candidate_non_deduced_mismatch_qualified)
   8668               << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
   8669           return;
   8670         }
   8671       }
   8672     }
   8673     S.Diag(Templated->getLocation(),
   8674            diag::note_ovl_candidate_non_deduced_mismatch)
   8675         << FirstTA << SecondTA;
   8676     return;
   8677   }
   8678   // TODO: diagnose these individually, then kill off
   8679   // note_ovl_candidate_bad_deduction, which is uselessly vague.
   8680   case Sema::TDK_MiscellaneousDeductionFailure:
   8681     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);
   8682     MaybeEmitInheritedConstructorNote(S, Templated);
   8683     return;
   8684   }
   8685 }
   8686 
   8687 /// Diagnose a failed template-argument deduction, for function calls.
   8688 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand, unsigned NumArgs) {
   8689   unsigned TDK = Cand->DeductionFailure.Result;
   8690   if (TDK == Sema::TDK_TooFewArguments || TDK == Sema::TDK_TooManyArguments) {
   8691     if (CheckArityMismatch(S, Cand, NumArgs))
   8692       return;
   8693   }
   8694   DiagnoseBadDeduction(S, Cand->Function, // pattern
   8695                        Cand->DeductionFailure, NumArgs);
   8696 }
   8697 
   8698 /// CUDA: diagnose an invalid call across targets.
   8699 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
   8700   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
   8701   FunctionDecl *Callee = Cand->Function;
   8702 
   8703   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
   8704                            CalleeTarget = S.IdentifyCUDATarget(Callee);
   8705 
   8706   std::string FnDesc;
   8707   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
   8708 
   8709   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
   8710       << (unsigned) FnKind << CalleeTarget << CallerTarget;
   8711 }
   8712 
   8713 /// Generates a 'note' diagnostic for an overload candidate.  We've
   8714 /// already generated a primary error at the call site.
   8715 ///
   8716 /// It really does need to be a single diagnostic with its caret
   8717 /// pointed at the candidate declaration.  Yes, this creates some
   8718 /// major challenges of technical writing.  Yes, this makes pointing
   8719 /// out problems with specific arguments quite awkward.  It's still
   8720 /// better than generating twenty screens of text for every failed
   8721 /// overload.
   8722 ///
   8723 /// It would be great to be able to express per-candidate problems
   8724 /// more richly for those diagnostic clients that cared, but we'd
   8725 /// still have to be just as careful with the default diagnostics.
   8726 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
   8727                            unsigned NumArgs) {
   8728   FunctionDecl *Fn = Cand->Function;
   8729 
   8730   // Note deleted candidates, but only if they're viable.
   8731   if (Cand->Viable && (Fn->isDeleted() ||
   8732       S.isFunctionConsideredUnavailable(Fn))) {
   8733     std::string FnDesc;
   8734     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
   8735 
   8736     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
   8737       << FnKind << FnDesc
   8738       << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
   8739     MaybeEmitInheritedConstructorNote(S, Fn);
   8740     return;
   8741   }
   8742 
   8743   // We don't really have anything else to say about viable candidates.
   8744   if (Cand->Viable) {
   8745     S.NoteOverloadCandidate(Fn);
   8746     return;
   8747   }
   8748 
   8749   switch (Cand->FailureKind) {
   8750   case ovl_fail_too_many_arguments:
   8751   case ovl_fail_too_few_arguments:
   8752     return DiagnoseArityMismatch(S, Cand, NumArgs);
   8753 
   8754   case ovl_fail_bad_deduction:
   8755     return DiagnoseBadDeduction(S, Cand, NumArgs);
   8756 
   8757   case ovl_fail_trivial_conversion:
   8758   case ovl_fail_bad_final_conversion:
   8759   case ovl_fail_final_conversion_not_exact:
   8760     return S.NoteOverloadCandidate(Fn);
   8761 
   8762   case ovl_fail_bad_conversion: {
   8763     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
   8764     for (unsigned N = Cand->NumConversions; I != N; ++I)
   8765       if (Cand->Conversions[I].isBad())
   8766         return DiagnoseBadConversion(S, Cand, I);
   8767 
   8768     // FIXME: this currently happens when we're called from SemaInit
   8769     // when user-conversion overload fails.  Figure out how to handle
   8770     // those conditions and diagnose them well.
   8771     return S.NoteOverloadCandidate(Fn);
   8772   }
   8773 
   8774   case ovl_fail_bad_target:
   8775     return DiagnoseBadTarget(S, Cand);
   8776   }
   8777 }
   8778 
   8779 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
   8780   // Desugar the type of the surrogate down to a function type,
   8781   // retaining as many typedefs as possible while still showing
   8782   // the function type (and, therefore, its parameter types).
   8783   QualType FnType = Cand->Surrogate->getConversionType();
   8784   bool isLValueReference = false;
   8785   bool isRValueReference = false;
   8786   bool isPointer = false;
   8787   if (const LValueReferenceType *FnTypeRef =
   8788         FnType->getAs<LValueReferenceType>()) {
   8789     FnType = FnTypeRef->getPointeeType();
   8790     isLValueReference = true;
   8791   } else if (const RValueReferenceType *FnTypeRef =
   8792                FnType->getAs<RValueReferenceType>()) {
   8793     FnType = FnTypeRef->getPointeeType();
   8794     isRValueReference = true;
   8795   }
   8796   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
   8797     FnType = FnTypePtr->getPointeeType();
   8798     isPointer = true;
   8799   }
   8800   // Desugar down to a function type.
   8801   FnType = QualType(FnType->getAs<FunctionType>(), 0);
   8802   // Reconstruct the pointer/reference as appropriate.
   8803   if (isPointer) FnType = S.Context.getPointerType(FnType);
   8804   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
   8805   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
   8806 
   8807   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
   8808     << FnType;
   8809   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
   8810 }
   8811 
   8812 void NoteBuiltinOperatorCandidate(Sema &S,
   8813                                   StringRef Opc,
   8814                                   SourceLocation OpLoc,
   8815                                   OverloadCandidate *Cand) {
   8816   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
   8817   std::string TypeStr("operator");
   8818   TypeStr += Opc;
   8819   TypeStr += "(";
   8820   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
   8821   if (Cand->NumConversions == 1) {
   8822     TypeStr += ")";
   8823     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
   8824   } else {
   8825     TypeStr += ", ";
   8826     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
   8827     TypeStr += ")";
   8828     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
   8829   }
   8830 }
   8831 
   8832 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
   8833                                   OverloadCandidate *Cand) {
   8834   unsigned NoOperands = Cand->NumConversions;
   8835   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
   8836     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
   8837     if (ICS.isBad()) break; // all meaningless after first invalid
   8838     if (!ICS.isAmbiguous()) continue;
   8839 
   8840     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
   8841                               S.PDiag(diag::note_ambiguous_type_conversion));
   8842   }
   8843 }
   8844 
   8845 static SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
   8846   if (Cand->Function)
   8847     return Cand->Function->getLocation();
   8848   if (Cand->IsSurrogate)
   8849     return Cand->Surrogate->getLocation();
   8850   return SourceLocation();
   8851 }
   8852 
   8853 static unsigned RankDeductionFailure(const DeductionFailureInfo &DFI) {
   8854   switch ((Sema::TemplateDeductionResult)DFI.Result) {
   8855   case Sema::TDK_Success:
   8856     llvm_unreachable("TDK_success while diagnosing bad deduction");
   8857 
   8858   case Sema::TDK_Invalid:
   8859   case Sema::TDK_Incomplete:
   8860     return 1;
   8861 
   8862   case Sema::TDK_Underqualified:
   8863   case Sema::TDK_Inconsistent:
   8864     return 2;
   8865 
   8866   case Sema::TDK_SubstitutionFailure:
   8867   case Sema::TDK_NonDeducedMismatch:
   8868   case Sema::TDK_MiscellaneousDeductionFailure:
   8869     return 3;
   8870 
   8871   case Sema::TDK_InstantiationDepth:
   8872   case Sema::TDK_FailedOverloadResolution:
   8873     return 4;
   8874 
   8875   case Sema::TDK_InvalidExplicitArguments:
   8876     return 5;
   8877 
   8878   case Sema::TDK_TooManyArguments:
   8879   case Sema::TDK_TooFewArguments:
   8880     return 6;
   8881   }
   8882   llvm_unreachable("Unhandled deduction result");
   8883 }
   8884 
   8885 struct CompareOverloadCandidatesForDisplay {
   8886   Sema &S;
   8887   CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
   8888 
   8889   bool operator()(const OverloadCandidate *L,
   8890                   const OverloadCandidate *R) {
   8891     // Fast-path this check.
   8892     if (L == R) return false;
   8893 
   8894     // Order first by viability.
   8895     if (L->Viable) {
   8896       if (!R->Viable) return true;
   8897 
   8898       // TODO: introduce a tri-valued comparison for overload
   8899       // candidates.  Would be more worthwhile if we had a sort
   8900       // that could exploit it.
   8901       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
   8902       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
   8903     } else if (R->Viable)
   8904       return false;
   8905 
   8906     assert(L->Viable == R->Viable);
   8907 
   8908     // Criteria by which we can sort non-viable candidates:
   8909     if (!L->Viable) {
   8910       // 1. Arity mismatches come after other candidates.
   8911       if (L->FailureKind == ovl_fail_too_many_arguments ||
   8912           L->FailureKind == ovl_fail_too_few_arguments)
   8913         return false;
   8914       if (R->FailureKind == ovl_fail_too_many_arguments ||
   8915           R->FailureKind == ovl_fail_too_few_arguments)
   8916         return true;
   8917 
   8918       // 2. Bad conversions come first and are ordered by the number
   8919       // of bad conversions and quality of good conversions.
   8920       if (L->FailureKind == ovl_fail_bad_conversion) {
   8921         if (R->FailureKind != ovl_fail_bad_conversion)
   8922           return true;
   8923 
   8924         // The conversion that can be fixed with a smaller number of changes,
   8925         // comes first.
   8926         unsigned numLFixes = L->Fix.NumConversionsFixed;
   8927         unsigned numRFixes = R->Fix.NumConversionsFixed;
   8928         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
   8929         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
   8930         if (numLFixes != numRFixes) {
   8931           if (numLFixes < numRFixes)
   8932             return true;
   8933           else
   8934             return false;
   8935         }
   8936 
   8937         // If there's any ordering between the defined conversions...
   8938         // FIXME: this might not be transitive.
   8939         assert(L->NumConversions == R->NumConversions);
   8940 
   8941         int leftBetter = 0;
   8942         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
   8943         for (unsigned E = L->NumConversions; I != E; ++I) {
   8944           switch (CompareImplicitConversionSequences(S,
   8945                                                      L->Conversions[I],
   8946                                                      R->Conversions[I])) {
   8947           case ImplicitConversionSequence::Better:
   8948             leftBetter++;
   8949             break;
   8950 
   8951           case ImplicitConversionSequence::Worse:
   8952             leftBetter--;
   8953             break;
   8954 
   8955           case ImplicitConversionSequence::Indistinguishable:
   8956             break;
   8957           }
   8958         }
   8959         if (leftBetter > 0) return true;
   8960         if (leftBetter < 0) return false;
   8961 
   8962       } else if (R->FailureKind == ovl_fail_bad_conversion)
   8963         return false;
   8964 
   8965       if (L->FailureKind == ovl_fail_bad_deduction) {
   8966         if (R->FailureKind != ovl_fail_bad_deduction)
   8967           return true;
   8968 
   8969         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
   8970           return RankDeductionFailure(L->DeductionFailure)
   8971                < RankDeductionFailure(R->DeductionFailure);
   8972       } else if (R->FailureKind == ovl_fail_bad_deduction)
   8973         return false;
   8974 
   8975       // TODO: others?
   8976     }
   8977 
   8978     // Sort everything else by location.
   8979     SourceLocation LLoc = GetLocationForCandidate(L);
   8980     SourceLocation RLoc = GetLocationForCandidate(R);
   8981 
   8982     // Put candidates without locations (e.g. builtins) at the end.
   8983     if (LLoc.isInvalid()) return false;
   8984     if (RLoc.isInvalid()) return true;
   8985 
   8986     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
   8987   }
   8988 };
   8989 
   8990 /// CompleteNonViableCandidate - Normally, overload resolution only
   8991 /// computes up to the first. Produces the FixIt set if possible.
   8992 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
   8993                                 ArrayRef<Expr *> Args) {
   8994   assert(!Cand->Viable);
   8995 
   8996   // Don't do anything on failures other than bad conversion.
   8997   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
   8998 
   8999   // We only want the FixIts if all the arguments can be corrected.
   9000   bool Unfixable = false;
   9001   // Use a implicit copy initialization to check conversion fixes.
   9002   Cand->Fix.setConversionChecker(TryCopyInitialization);
   9003 
   9004   // Skip forward to the first bad conversion.
   9005   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
   9006   unsigned ConvCount = Cand->NumConversions;
   9007   while (true) {
   9008     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
   9009     ConvIdx++;
   9010     if (Cand->Conversions[ConvIdx - 1].isBad()) {
   9011       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
   9012       break;
   9013     }
   9014   }
   9015 
   9016   if (ConvIdx == ConvCount)
   9017     return;
   9018 
   9019   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
   9020          "remaining conversion is initialized?");
   9021 
   9022   // FIXME: this should probably be preserved from the overload
   9023   // operation somehow.
   9024   bool SuppressUserConversions = false;
   9025 
   9026   const FunctionProtoType* Proto;
   9027   unsigned ArgIdx = ConvIdx;
   9028 
   9029   if (Cand->IsSurrogate) {
   9030     QualType ConvType
   9031       = Cand->Surrogate->getConversionType().getNonReferenceType();
   9032     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
   9033       ConvType = ConvPtrType->getPointeeType();
   9034     Proto = ConvType->getAs<FunctionProtoType>();
   9035     ArgIdx--;
   9036   } else if (Cand->Function) {
   9037     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
   9038     if (isa<CXXMethodDecl>(Cand->Function) &&
   9039         !isa<CXXConstructorDecl>(Cand->Function))
   9040       ArgIdx--;
   9041   } else {
   9042     // Builtin binary operator with a bad first conversion.
   9043     assert(ConvCount <= 3);
   9044     for (; ConvIdx != ConvCount; ++ConvIdx)
   9045       Cand->Conversions[ConvIdx]
   9046         = TryCopyInitialization(S, Args[ConvIdx],
   9047                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
   9048                                 SuppressUserConversions,
   9049                                 /*InOverloadResolution*/ true,
   9050                                 /*AllowObjCWritebackConversion=*/
   9051                                   S.getLangOpts().ObjCAutoRefCount);
   9052     return;
   9053   }
   9054 
   9055   // Fill in the rest of the conversions.
   9056   unsigned NumArgsInProto = Proto->getNumArgs();
   9057   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
   9058     if (ArgIdx < NumArgsInProto) {
   9059       Cand->Conversions[ConvIdx]
   9060         = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
   9061                                 SuppressUserConversions,
   9062                                 /*InOverloadResolution=*/true,
   9063                                 /*AllowObjCWritebackConversion=*/
   9064                                   S.getLangOpts().ObjCAutoRefCount);
   9065       // Store the FixIt in the candidate if it exists.
   9066       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
   9067         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
   9068     }
   9069     else
   9070       Cand->Conversions[ConvIdx].setEllipsis();
   9071   }
   9072 }
   9073 
   9074 } // end anonymous namespace
   9075 
   9076 /// PrintOverloadCandidates - When overload resolution fails, prints
   9077 /// diagnostic messages containing the candidates in the candidate
   9078 /// set.
   9079 void OverloadCandidateSet::NoteCandidates(Sema &S,
   9080                                           OverloadCandidateDisplayKind OCD,
   9081                                           ArrayRef<Expr *> Args,
   9082                                           StringRef Opc,
   9083                                           SourceLocation OpLoc) {
   9084   // Sort the candidates by viability and position.  Sorting directly would
   9085   // be prohibitive, so we make a set of pointers and sort those.
   9086   SmallVector<OverloadCandidate*, 32> Cands;
   9087   if (OCD == OCD_AllCandidates) Cands.reserve(size());
   9088   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
   9089     if (Cand->Viable)
   9090       Cands.push_back(Cand);
   9091     else if (OCD == OCD_AllCandidates) {
   9092       CompleteNonViableCandidate(S, Cand, Args);
   9093       if (Cand->Function || Cand->IsSurrogate)
   9094         Cands.push_back(Cand);
   9095       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
   9096       // want to list every possible builtin candidate.
   9097     }
   9098   }
   9099 
   9100   std::sort(Cands.begin(), Cands.end(),
   9101             CompareOverloadCandidatesForDisplay(S));
   9102 
   9103   bool ReportedAmbiguousConversions = false;
   9104 
   9105   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
   9106   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
   9107   unsigned CandsShown = 0;
   9108   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
   9109     OverloadCandidate *Cand = *I;
   9110 
   9111     // Set an arbitrary limit on the number of candidate functions we'll spam
   9112     // the user with.  FIXME: This limit should depend on details of the
   9113     // candidate list.
   9114     if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
   9115       break;
   9116     }
   9117     ++CandsShown;
   9118 
   9119     if (Cand->Function)
   9120       NoteFunctionCandidate(S, Cand, Args.size());
   9121     else if (Cand->IsSurrogate)
   9122       NoteSurrogateCandidate(S, Cand);
   9123     else {
   9124       assert(Cand->Viable &&
   9125              "Non-viable built-in candidates are not added to Cands.");
   9126       // Generally we only see ambiguities including viable builtin
   9127       // operators if overload resolution got screwed up by an
   9128       // ambiguous user-defined conversion.
   9129       //
   9130       // FIXME: It's quite possible for different conversions to see
   9131       // different ambiguities, though.
   9132       if (!ReportedAmbiguousConversions) {
   9133         NoteAmbiguousUserConversions(S, OpLoc, Cand);
   9134         ReportedAmbiguousConversions = true;
   9135       }
   9136 
   9137       // If this is a viable builtin, print it.
   9138       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
   9139     }
   9140   }
   9141 
   9142   if (I != E)
   9143     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
   9144 }
   9145 
   9146 static SourceLocation
   9147 GetLocationForCandidate(const TemplateSpecCandidate *Cand) {
   9148   return Cand->Specialization ? Cand->Specialization->getLocation()
   9149                               : SourceLocation();
   9150 }
   9151 
   9152 struct CompareTemplateSpecCandidatesForDisplay {
   9153   Sema &S;
   9154   CompareTemplateSpecCandidatesForDisplay(Sema &S) : S(S) {}
   9155 
   9156   bool operator()(const TemplateSpecCandidate *L,
   9157                   const TemplateSpecCandidate *R) {
   9158     // Fast-path this check.
   9159     if (L == R)
   9160       return false;
   9161 
   9162     // Assuming that both candidates are not matches...
   9163 
   9164     // Sort by the ranking of deduction failures.
   9165     if (L->DeductionFailure.Result != R->DeductionFailure.Result)
   9166       return RankDeductionFailure(L->DeductionFailure) <
   9167              RankDeductionFailure(R->DeductionFailure);
   9168 
   9169     // Sort everything else by location.
   9170     SourceLocation LLoc = GetLocationForCandidate(L);
   9171     SourceLocation RLoc = GetLocationForCandidate(R);
   9172 
   9173     // Put candidates without locations (e.g. builtins) at the end.
   9174     if (LLoc.isInvalid())
   9175       return false;
   9176     if (RLoc.isInvalid())
   9177       return true;
   9178 
   9179     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
   9180   }
   9181 };
   9182 
   9183 /// Diagnose a template argument deduction failure.
   9184 /// We are treating these failures as overload failures due to bad
   9185 /// deductions.
   9186 void TemplateSpecCandidate::NoteDeductionFailure(Sema &S) {
   9187   DiagnoseBadDeduction(S, Specialization, // pattern
   9188                        DeductionFailure, /*NumArgs=*/0);
   9189 }
   9190 
   9191 void TemplateSpecCandidateSet::destroyCandidates() {
   9192   for (iterator i = begin(), e = end(); i != e; ++i) {
   9193     i->DeductionFailure.Destroy();
   9194   }
   9195 }
   9196 
   9197 void TemplateSpecCandidateSet::clear() {
   9198   destroyCandidates();
   9199   Candidates.clear();
   9200 }
   9201 
   9202 /// NoteCandidates - When no template specialization match is found, prints
   9203 /// diagnostic messages containing the non-matching specializations that form
   9204 /// the candidate set.
   9205 /// This is analoguous to OverloadCandidateSet::NoteCandidates() with
   9206 /// OCD == OCD_AllCandidates and Cand->Viable == false.
   9207 void TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {
   9208   // Sort the candidates by position (assuming no candidate is a match).
   9209   // Sorting directly would be prohibitive, so we make a set of pointers
   9210   // and sort those.
   9211   SmallVector<TemplateSpecCandidate *, 32> Cands;
   9212   Cands.reserve(size());
   9213   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
   9214     if (Cand->Specialization)
   9215       Cands.push_back(Cand);
   9216     // Otherwise, this is a non matching builtin candidate.  We do not,
   9217     // in general, want to list every possible builtin candidate.
   9218   }
   9219 
   9220   std::sort(Cands.begin(), Cands.end(),
   9221             CompareTemplateSpecCandidatesForDisplay(S));
   9222 
   9223   // FIXME: Perhaps rename OverloadsShown and getShowOverloads()
   9224   // for generalization purposes (?).
   9225   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
   9226 
   9227   SmallVectorImpl<TemplateSpecCandidate *>::iterator I, E;
   9228   unsigned CandsShown = 0;
   9229   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
   9230     TemplateSpecCandidate *Cand = *I;
   9231 
   9232     // Set an arbitrary limit on the number of candidates we'll spam
   9233     // the user with.  FIXME: This limit should depend on details of the
   9234     // candidate list.
   9235     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
   9236       break;
   9237     ++CandsShown;
   9238 
   9239     assert(Cand->Specialization &&
   9240            "Non-matching built-in candidates are not added to Cands.");
   9241     Cand->NoteDeductionFailure(S);
   9242   }
   9243 
   9244   if (I != E)
   9245     S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);
   9246 }
   9247 
   9248 // [PossiblyAFunctionType]  -->   [Return]
   9249 // NonFunctionType --> NonFunctionType
   9250 // R (A) --> R(A)
   9251 // R (*)(A) --> R (A)
   9252 // R (&)(A) --> R (A)
   9253 // R (S::*)(A) --> R (A)
   9254 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
   9255   QualType Ret = PossiblyAFunctionType;
   9256   if (const PointerType *ToTypePtr =
   9257     PossiblyAFunctionType->getAs<PointerType>())
   9258     Ret = ToTypePtr->getPointeeType();
   9259   else if (const ReferenceType *ToTypeRef =
   9260     PossiblyAFunctionType->getAs<ReferenceType>())
   9261     Ret = ToTypeRef->getPointeeType();
   9262   else if (const MemberPointerType *MemTypePtr =
   9263     PossiblyAFunctionType->getAs<MemberPointerType>())
   9264     Ret = MemTypePtr->getPointeeType();
   9265   Ret =
   9266     Context.getCanonicalType(Ret).getUnqualifiedType();
   9267   return Ret;
   9268 }
   9269 
   9270 // A helper class to help with address of function resolution
   9271 // - allows us to avoid passing around all those ugly parameters
   9272 class AddressOfFunctionResolver
   9273 {
   9274   Sema& S;
   9275   Expr* SourceExpr;
   9276   const QualType& TargetType;
   9277   QualType TargetFunctionType; // Extracted function type from target type
   9278 
   9279   bool Complain;
   9280   //DeclAccessPair& ResultFunctionAccessPair;
   9281   ASTContext& Context;
   9282 
   9283   bool TargetTypeIsNonStaticMemberFunction;
   9284   bool FoundNonTemplateFunction;
   9285   bool StaticMemberFunctionFromBoundPointer;
   9286 
   9287   OverloadExpr::FindResult OvlExprInfo;
   9288   OverloadExpr *OvlExpr;
   9289   TemplateArgumentListInfo OvlExplicitTemplateArgs;
   9290   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
   9291   TemplateSpecCandidateSet FailedCandidates;
   9292 
   9293 public:
   9294   AddressOfFunctionResolver(Sema &S, Expr *SourceExpr,
   9295                             const QualType &TargetType, bool Complain)
   9296       : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
   9297         Complain(Complain), Context(S.getASTContext()),
   9298         TargetTypeIsNonStaticMemberFunction(
   9299             !!TargetType->getAs<MemberPointerType>()),
   9300         FoundNonTemplateFunction(false),
   9301         StaticMemberFunctionFromBoundPointer(false),
   9302         OvlExprInfo(OverloadExpr::find(SourceExpr)),
   9303         OvlExpr(OvlExprInfo.Expression),
   9304         FailedCandidates(OvlExpr->getNameLoc()) {
   9305     ExtractUnqualifiedFunctionTypeFromTargetType();
   9306 
   9307     if (TargetFunctionType->isFunctionType()) {
   9308       if (UnresolvedMemberExpr *UME = dyn_cast<UnresolvedMemberExpr>(OvlExpr))
   9309         if (!UME->isImplicitAccess() &&
   9310             !S.ResolveSingleFunctionTemplateSpecialization(UME))
   9311           StaticMemberFunctionFromBoundPointer = true;
   9312     } else if (OvlExpr->hasExplicitTemplateArgs()) {
   9313       DeclAccessPair dap;
   9314       if (FunctionDecl *Fn = S.ResolveSingleFunctionTemplateSpecialization(
   9315               OvlExpr, false, &dap)) {
   9316         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn))
   9317           if (!Method->isStatic()) {
   9318             // If the target type is a non-function type and the function found
   9319             // is a non-static member function, pretend as if that was the
   9320             // target, it's the only possible type to end up with.
   9321             TargetTypeIsNonStaticMemberFunction = true;
   9322 
   9323             // And skip adding the function if its not in the proper form.
   9324             // We'll diagnose this due to an empty set of functions.
   9325             if (!OvlExprInfo.HasFormOfMemberPointer)
   9326               return;
   9327           }
   9328 
   9329         Matches.push_back(std::make_pair(dap, Fn));
   9330       }
   9331       return;
   9332     }
   9333 
   9334     if (OvlExpr->hasExplicitTemplateArgs())
   9335       OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
   9336 
   9337     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
   9338       // C++ [over.over]p4:
   9339       //   If more than one function is selected, [...]
   9340       if (Matches.size() > 1) {
   9341         if (FoundNonTemplateFunction)
   9342           EliminateAllTemplateMatches();
   9343         else
   9344           EliminateAllExceptMostSpecializedTemplate();
   9345       }
   9346     }
   9347   }
   9348 
   9349 private:
   9350   bool isTargetTypeAFunction() const {
   9351     return TargetFunctionType->isFunctionType();
   9352   }
   9353 
   9354   // [ToType]     [Return]
   9355 
   9356   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
   9357   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
   9358   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
   9359   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
   9360     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
   9361   }
   9362 
   9363   // return true if any matching specializations were found
   9364   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
   9365                                    const DeclAccessPair& CurAccessFunPair) {
   9366     if (CXXMethodDecl *Method
   9367               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
   9368       // Skip non-static function templates when converting to pointer, and
   9369       // static when converting to member pointer.
   9370       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
   9371         return false;
   9372     }
   9373     else if (TargetTypeIsNonStaticMemberFunction)
   9374       return false;
   9375 
   9376     // C++ [over.over]p2:
   9377     //   If the name is a function template, template argument deduction is
   9378     //   done (14.8.2.2), and if the argument deduction succeeds, the
   9379     //   resulting template argument list is used to generate a single
   9380     //   function template specialization, which is added to the set of
   9381     //   overloaded functions considered.
   9382     FunctionDecl *Specialization = 0;
   9383     TemplateDeductionInfo Info(FailedCandidates.getLocation());
   9384     if (Sema::TemplateDeductionResult Result
   9385           = S.DeduceTemplateArguments(FunctionTemplate,
   9386                                       &OvlExplicitTemplateArgs,
   9387                                       TargetFunctionType, Specialization,
   9388                                       Info, /*InOverloadResolution=*/true)) {
   9389       // Make a note of the failed deduction for diagnostics.
   9390       FailedCandidates.addCandidate()
   9391           .set(FunctionTemplate->getTemplatedDecl(),
   9392                MakeDeductionFailureInfo(Context, Result, Info));
   9393       (void)Result;
   9394       return false;
   9395     }
   9396 
   9397     // Template argument deduction ensures that we have an exact match or
   9398     // compatible pointer-to-function arguments that would be adjusted by ICS.
   9399     // This function template specicalization works.
   9400     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
   9401     assert(S.isSameOrCompatibleFunctionType(
   9402               Context.getCanonicalType(Specialization->getType()),
   9403               Context.getCanonicalType(TargetFunctionType)));
   9404     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
   9405     return true;
   9406   }
   9407 
   9408   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
   9409                                       const DeclAccessPair& CurAccessFunPair) {
   9410     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
   9411       // Skip non-static functions when converting to pointer, and static
   9412       // when converting to member pointer.
   9413       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
   9414         return false;
   9415     }
   9416     else if (TargetTypeIsNonStaticMemberFunction)
   9417       return false;
   9418 
   9419     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
   9420       if (S.getLangOpts().CUDA)
   9421         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
   9422           if (S.CheckCUDATarget(Caller, FunDecl))
   9423             return false;
   9424 
   9425       // If any candidate has a placeholder return type, trigger its deduction
   9426       // now.
   9427       if (S.getLangOpts().CPlusPlus1y &&
   9428           FunDecl->getResultType()->isUndeducedType() &&
   9429           S.DeduceReturnType(FunDecl, SourceExpr->getLocStart(), Complain))
   9430         return false;
   9431 
   9432       QualType ResultTy;
   9433       if (Context.hasSameUnqualifiedType(TargetFunctionType,
   9434                                          FunDecl->getType()) ||
   9435           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
   9436                                  ResultTy)) {
   9437         Matches.push_back(std::make_pair(CurAccessFunPair,
   9438           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
   9439         FoundNonTemplateFunction = true;
   9440         return true;
   9441       }
   9442     }
   9443 
   9444     return false;
   9445   }
   9446 
   9447   bool FindAllFunctionsThatMatchTargetTypeExactly() {
   9448     bool Ret = false;
   9449 
   9450     // If the overload expression doesn't have the form of a pointer to
   9451     // member, don't try to convert it to a pointer-to-member type.
   9452     if (IsInvalidFormOfPointerToMemberFunction())
   9453       return false;
   9454 
   9455     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
   9456                                E = OvlExpr->decls_end();
   9457          I != E; ++I) {
   9458       // Look through any using declarations to find the underlying function.
   9459       NamedDecl *Fn = (*I)->getUnderlyingDecl();
   9460 
   9461       // C++ [over.over]p3:
   9462       //   Non-member functions and static member functions match
   9463       //   targets of type "pointer-to-function" or "reference-to-function."
   9464       //   Nonstatic member functions match targets of
   9465       //   type "pointer-to-member-function."
   9466       // Note that according to DR 247, the containing class does not matter.
   9467       if (FunctionTemplateDecl *FunctionTemplate
   9468                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
   9469         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
   9470           Ret = true;
   9471       }
   9472       // If we have explicit template arguments supplied, skip non-templates.
   9473       else if (!OvlExpr->hasExplicitTemplateArgs() &&
   9474                AddMatchingNonTemplateFunction(Fn, I.getPair()))
   9475         Ret = true;
   9476     }
   9477     assert(Ret || Matches.empty());
   9478     return Ret;
   9479   }
   9480 
   9481   void EliminateAllExceptMostSpecializedTemplate() {
   9482     //   [...] and any given function template specialization F1 is
   9483     //   eliminated if the set contains a second function template
   9484     //   specialization whose function template is more specialized
   9485     //   than the function template of F1 according to the partial
   9486     //   ordering rules of 14.5.5.2.
   9487 
   9488     // The algorithm specified above is quadratic. We instead use a
   9489     // two-pass algorithm (similar to the one used to identify the
   9490     // best viable function in an overload set) that identifies the
   9491     // best function template (if it exists).
   9492 
   9493     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
   9494     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
   9495       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
   9496 
   9497     // TODO: It looks like FailedCandidates does not serve much purpose
   9498     // here, since the no_viable diagnostic has index 0.
   9499     UnresolvedSetIterator Result = S.getMostSpecialized(
   9500         MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, TPOC_Other, 0,
   9501         SourceExpr->getLocStart(), S.PDiag(),
   9502         S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0]
   9503                                                      .second->getDeclName(),
   9504         S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function_template,
   9505         Complain, TargetFunctionType);
   9506 
   9507     if (Result != MatchesCopy.end()) {
   9508       // Make it the first and only element
   9509       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
   9510       Matches[0].second = cast<FunctionDecl>(*Result);
   9511       Matches.resize(1);
   9512     }
   9513   }
   9514 
   9515   void EliminateAllTemplateMatches() {
   9516     //   [...] any function template specializations in the set are
   9517     //   eliminated if the set also contains a non-template function, [...]
   9518     for (unsigned I = 0, N = Matches.size(); I != N; ) {
   9519       if (Matches[I].second->getPrimaryTemplate() == 0)
   9520         ++I;
   9521       else {
   9522         Matches[I] = Matches[--N];
   9523         Matches.set_size(N);
   9524       }
   9525     }
   9526   }
   9527 
   9528 public:
   9529   void ComplainNoMatchesFound() const {
   9530     assert(Matches.empty());
   9531     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
   9532         << OvlExpr->getName() << TargetFunctionType
   9533         << OvlExpr->getSourceRange();
   9534     FailedCandidates.NoteCandidates(S, OvlExpr->getLocStart());
   9535     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
   9536   }
   9537 
   9538   bool IsInvalidFormOfPointerToMemberFunction() const {
   9539     return TargetTypeIsNonStaticMemberFunction &&
   9540       !OvlExprInfo.HasFormOfMemberPointer;
   9541   }
   9542 
   9543   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
   9544       // TODO: Should we condition this on whether any functions might
   9545       // have matched, or is it more appropriate to do that in callers?
   9546       // TODO: a fixit wouldn't hurt.
   9547       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
   9548         << TargetType << OvlExpr->getSourceRange();
   9549   }
   9550 
   9551   bool IsStaticMemberFunctionFromBoundPointer() const {
   9552     return StaticMemberFunctionFromBoundPointer;
   9553   }
   9554 
   9555   void ComplainIsStaticMemberFunctionFromBoundPointer() const {
   9556     S.Diag(OvlExpr->getLocStart(),
   9557            diag::err_invalid_form_pointer_member_function)
   9558       << OvlExpr->getSourceRange();
   9559   }
   9560 
   9561   void ComplainOfInvalidConversion() const {
   9562     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
   9563       << OvlExpr->getName() << TargetType;
   9564   }
   9565 
   9566   void ComplainMultipleMatchesFound() const {
   9567     assert(Matches.size() > 1);
   9568     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
   9569       << OvlExpr->getName()
   9570       << OvlExpr->getSourceRange();
   9571     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
   9572   }
   9573 
   9574   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
   9575 
   9576   int getNumMatches() const { return Matches.size(); }
   9577 
   9578   FunctionDecl* getMatchingFunctionDecl() const {
   9579     if (Matches.size() != 1) return 0;
   9580     return Matches[0].second;
   9581   }
   9582 
   9583   const DeclAccessPair* getMatchingFunctionAccessPair() const {
   9584     if (Matches.size() != 1) return 0;
   9585     return &Matches[0].first;
   9586   }
   9587 };
   9588 
   9589 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
   9590 /// an overloaded function (C++ [over.over]), where @p From is an
   9591 /// expression with overloaded function type and @p ToType is the type
   9592 /// we're trying to resolve to. For example:
   9593 ///
   9594 /// @code
   9595 /// int f(double);
   9596 /// int f(int);
   9597 ///
   9598 /// int (*pfd)(double) = f; // selects f(double)
   9599 /// @endcode
   9600 ///
   9601 /// This routine returns the resulting FunctionDecl if it could be
   9602 /// resolved, and NULL otherwise. When @p Complain is true, this
   9603 /// routine will emit diagnostics if there is an error.
   9604 FunctionDecl *
   9605 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
   9606                                          QualType TargetType,
   9607                                          bool Complain,
   9608                                          DeclAccessPair &FoundResult,
   9609                                          bool *pHadMultipleCandidates) {
   9610   assert(AddressOfExpr->getType() == Context.OverloadTy);
   9611 
   9612   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
   9613                                      Complain);
   9614   int NumMatches = Resolver.getNumMatches();
   9615   FunctionDecl* Fn = 0;
   9616   if (NumMatches == 0 && Complain) {
   9617     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
   9618       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
   9619     else
   9620       Resolver.ComplainNoMatchesFound();
   9621   }
   9622   else if (NumMatches > 1 && Complain)
   9623     Resolver.ComplainMultipleMatchesFound();
   9624   else if (NumMatches == 1) {
   9625     Fn = Resolver.getMatchingFunctionDecl();
   9626     assert(Fn);
   9627     FoundResult = *Resolver.getMatchingFunctionAccessPair();
   9628     if (Complain) {
   9629       if (Resolver.IsStaticMemberFunctionFromBoundPointer())
   9630         Resolver.ComplainIsStaticMemberFunctionFromBoundPointer();
   9631       else
   9632         CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
   9633     }
   9634   }
   9635 
   9636   if (pHadMultipleCandidates)
   9637     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
   9638   return Fn;
   9639 }
   9640 
   9641 /// \brief Given an expression that refers to an overloaded function, try to
   9642 /// resolve that overloaded function expression down to a single function.
   9643 ///
   9644 /// This routine can only resolve template-ids that refer to a single function
   9645 /// template, where that template-id refers to a single template whose template
   9646 /// arguments are either provided by the template-id or have defaults,
   9647 /// as described in C++0x [temp.arg.explicit]p3.
   9648 FunctionDecl *
   9649 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
   9650                                                   bool Complain,
   9651                                                   DeclAccessPair *FoundResult) {
   9652   // C++ [over.over]p1:
   9653   //   [...] [Note: any redundant set of parentheses surrounding the
   9654   //   overloaded function name is ignored (5.1). ]
   9655   // C++ [over.over]p1:
   9656   //   [...] The overloaded function name can be preceded by the &
   9657   //   operator.
   9658 
   9659   // If we didn't actually find any template-ids, we're done.
   9660   if (!ovl->hasExplicitTemplateArgs())
   9661     return 0;
   9662 
   9663   TemplateArgumentListInfo ExplicitTemplateArgs;
   9664   ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
   9665   TemplateSpecCandidateSet FailedCandidates(ovl->getNameLoc());
   9666 
   9667   // Look through all of the overloaded functions, searching for one
   9668   // whose type matches exactly.
   9669   FunctionDecl *Matched = 0;
   9670   for (UnresolvedSetIterator I = ovl->decls_begin(),
   9671          E = ovl->decls_end(); I != E; ++I) {
   9672     // C++0x [temp.arg.explicit]p3:
   9673     //   [...] In contexts where deduction is done and fails, or in contexts
   9674     //   where deduction is not done, if a template argument list is
   9675     //   specified and it, along with any default template arguments,
   9676     //   identifies a single function template specialization, then the
   9677     //   template-id is an lvalue for the function template specialization.
   9678     FunctionTemplateDecl *FunctionTemplate
   9679       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
   9680 
   9681     // C++ [over.over]p2:
   9682     //   If the name is a function template, template argument deduction is
   9683     //   done (14.8.2.2), and if the argument deduction succeeds, the
   9684     //   resulting template argument list is used to generate a single
   9685     //   function template specialization, which is added to the set of
   9686     //   overloaded functions considered.
   9687     FunctionDecl *Specialization = 0;
   9688     TemplateDeductionInfo Info(FailedCandidates.getLocation());
   9689     if (TemplateDeductionResult Result
   9690           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
   9691                                     Specialization, Info,
   9692                                     /*InOverloadResolution=*/true)) {
   9693       // Make a note of the failed deduction for diagnostics.
   9694       // TODO: Actually use the failed-deduction info?
   9695       FailedCandidates.addCandidate()
   9696           .set(FunctionTemplate->getTemplatedDecl(),
   9697                MakeDeductionFailureInfo(Context, Result, Info));
   9698       (void)Result;
   9699       continue;
   9700     }
   9701 
   9702     assert(Specialization && "no specialization and no error?");
   9703 
   9704     // Multiple matches; we can't resolve to a single declaration.
   9705     if (Matched) {
   9706       if (Complain) {
   9707         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
   9708           << ovl->getName();
   9709         NoteAllOverloadCandidates(ovl);
   9710       }
   9711       return 0;
   9712     }
   9713 
   9714     Matched = Specialization;
   9715     if (FoundResult) *FoundResult = I.getPair();
   9716   }
   9717 
   9718   if (Matched && getLangOpts().CPlusPlus1y &&
   9719       Matched->getResultType()->isUndeducedType() &&
   9720       DeduceReturnType(Matched, ovl->getExprLoc(), Complain))
   9721     return 0;
   9722 
   9723   return Matched;
   9724 }
   9725 
   9726 
   9727 
   9728 
   9729 // Resolve and fix an overloaded expression that can be resolved
   9730 // because it identifies a single function template specialization.
   9731 //
   9732 // Last three arguments should only be supplied if Complain = true
   9733 //
   9734 // Return true if it was logically possible to so resolve the
   9735 // expression, regardless of whether or not it succeeded.  Always
   9736 // returns true if 'complain' is set.
   9737 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
   9738                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
   9739                    bool complain, const SourceRange& OpRangeForComplaining,
   9740                                            QualType DestTypeForComplaining,
   9741                                             unsigned DiagIDForComplaining) {
   9742   assert(SrcExpr.get()->getType() == Context.OverloadTy);
   9743 
   9744   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
   9745 
   9746   DeclAccessPair found;
   9747   ExprResult SingleFunctionExpression;
   9748   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
   9749                            ovl.Expression, /*complain*/ false, &found)) {
   9750     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
   9751       SrcExpr = ExprError();
   9752       return true;
   9753     }
   9754 
   9755     // It is only correct to resolve to an instance method if we're
   9756     // resolving a form that's permitted to be a pointer to member.
   9757     // Otherwise we'll end up making a bound member expression, which
   9758     // is illegal in all the contexts we resolve like this.
   9759     if (!ovl.HasFormOfMemberPointer &&
   9760         isa<CXXMethodDecl>(fn) &&
   9761         cast<CXXMethodDecl>(fn)->isInstance()) {
   9762       if (!complain) return false;
   9763 
   9764       Diag(ovl.Expression->getExprLoc(),
   9765            diag::err_bound_member_function)
   9766         << 0 << ovl.Expression->getSourceRange();
   9767 
   9768       // TODO: I believe we only end up here if there's a mix of
   9769       // static and non-static candidates (otherwise the expression
   9770       // would have 'bound member' type, not 'overload' type).
   9771       // Ideally we would note which candidate was chosen and why
   9772       // the static candidates were rejected.
   9773       SrcExpr = ExprError();
   9774       return true;
   9775     }
   9776 
   9777     // Fix the expression to refer to 'fn'.
   9778     SingleFunctionExpression =
   9779       Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
   9780 
   9781     // If desired, do function-to-pointer decay.
   9782     if (doFunctionPointerConverion) {
   9783       SingleFunctionExpression =
   9784         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
   9785       if (SingleFunctionExpression.isInvalid()) {
   9786         SrcExpr = ExprError();
   9787         return true;
   9788       }
   9789     }
   9790   }
   9791 
   9792   if (!SingleFunctionExpression.isUsable()) {
   9793     if (complain) {
   9794       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
   9795         << ovl.Expression->getName()
   9796         << DestTypeForComplaining
   9797         << OpRangeForComplaining
   9798         << ovl.Expression->getQualifierLoc().getSourceRange();
   9799       NoteAllOverloadCandidates(SrcExpr.get());
   9800 
   9801       SrcExpr = ExprError();
   9802       return true;
   9803     }
   9804 
   9805     return false;
   9806   }
   9807 
   9808   SrcExpr = SingleFunctionExpression;
   9809   return true;
   9810 }
   9811 
   9812 /// \brief Add a single candidate to the overload set.
   9813 static void AddOverloadedCallCandidate(Sema &S,
   9814                                        DeclAccessPair FoundDecl,
   9815                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
   9816                                        ArrayRef<Expr *> Args,
   9817                                        OverloadCandidateSet &CandidateSet,
   9818                                        bool PartialOverloading,
   9819                                        bool KnownValid) {
   9820   NamedDecl *Callee = FoundDecl.getDecl();
   9821   if (isa<UsingShadowDecl>(Callee))
   9822     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
   9823 
   9824   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
   9825     if (ExplicitTemplateArgs) {
   9826       assert(!KnownValid && "Explicit template arguments?");
   9827       return;
   9828     }
   9829     S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
   9830                            PartialOverloading);
   9831     return;
   9832   }
   9833 
   9834   if (FunctionTemplateDecl *FuncTemplate
   9835       = dyn_cast<FunctionTemplateDecl>(Callee)) {
   9836     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
   9837                                    ExplicitTemplateArgs, Args, CandidateSet);
   9838     return;
   9839   }
   9840 
   9841   assert(!KnownValid && "unhandled case in overloaded call candidate");
   9842 }
   9843 
   9844 /// \brief Add the overload candidates named by callee and/or found by argument
   9845 /// dependent lookup to the given overload set.
   9846 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
   9847                                        ArrayRef<Expr *> Args,
   9848                                        OverloadCandidateSet &CandidateSet,
   9849                                        bool PartialOverloading) {
   9850 
   9851 #ifndef NDEBUG
   9852   // Verify that ArgumentDependentLookup is consistent with the rules
   9853   // in C++0x [basic.lookup.argdep]p3:
   9854   //
   9855   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
   9856   //   and let Y be the lookup set produced by argument dependent
   9857   //   lookup (defined as follows). If X contains
   9858   //
   9859   //     -- a declaration of a class member, or
   9860   //
   9861   //     -- a block-scope function declaration that is not a
   9862   //        using-declaration, or
   9863   //
   9864   //     -- a declaration that is neither a function or a function
   9865   //        template
   9866   //
   9867   //   then Y is empty.
   9868 
   9869   if (ULE->requiresADL()) {
   9870     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
   9871            E = ULE->decls_end(); I != E; ++I) {
   9872       assert(!(*I)->getDeclContext()->isRecord());
   9873       assert(isa<UsingShadowDecl>(*I) ||
   9874              !(*I)->getDeclContext()->isFunctionOrMethod());
   9875       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
   9876     }
   9877   }
   9878 #endif
   9879 
   9880   // It would be nice to avoid this copy.
   9881   TemplateArgumentListInfo TABuffer;
   9882   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
   9883   if (ULE->hasExplicitTemplateArgs()) {
   9884     ULE->copyTemplateArgumentsInto(TABuffer);
   9885     ExplicitTemplateArgs = &TABuffer;
   9886   }
   9887 
   9888   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
   9889          E = ULE->decls_end(); I != E; ++I)
   9890     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
   9891                                CandidateSet, PartialOverloading,
   9892                                /*KnownValid*/ true);
   9893 
   9894   if (ULE->requiresADL())
   9895     AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
   9896                                          ULE->getExprLoc(),
   9897                                          Args, ExplicitTemplateArgs,
   9898                                          CandidateSet, PartialOverloading);
   9899 }
   9900 
   9901 /// Determine whether a declaration with the specified name could be moved into
   9902 /// a different namespace.
   9903 static bool canBeDeclaredInNamespace(const DeclarationName &Name) {
   9904   switch (Name.getCXXOverloadedOperator()) {
   9905   case OO_New: case OO_Array_New:
   9906   case OO_Delete: case OO_Array_Delete:
   9907     return false;
   9908 
   9909   default:
   9910     return true;
   9911   }
   9912 }
   9913 
   9914 /// Attempt to recover from an ill-formed use of a non-dependent name in a
   9915 /// template, where the non-dependent name was declared after the template
   9916 /// was defined. This is common in code written for a compilers which do not
   9917 /// correctly implement two-stage name lookup.
   9918 ///
   9919 /// Returns true if a viable candidate was found and a diagnostic was issued.
   9920 static bool
   9921 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
   9922                        const CXXScopeSpec &SS, LookupResult &R,
   9923                        TemplateArgumentListInfo *ExplicitTemplateArgs,
   9924                        ArrayRef<Expr *> Args) {
   9925   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
   9926     return false;
   9927 
   9928   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
   9929     if (DC->isTransparentContext())
   9930       continue;
   9931 
   9932     SemaRef.LookupQualifiedName(R, DC);
   9933 
   9934     if (!R.empty()) {
   9935       R.suppressDiagnostics();
   9936 
   9937       if (isa<CXXRecordDecl>(DC)) {
   9938         // Don't diagnose names we find in classes; we get much better
   9939         // diagnostics for these from DiagnoseEmptyLookup.
   9940         R.clear();
   9941         return false;
   9942       }
   9943 
   9944       OverloadCandidateSet Candidates(FnLoc);
   9945       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
   9946         AddOverloadedCallCandidate(SemaRef, I.getPair(),
   9947                                    ExplicitTemplateArgs, Args,
   9948                                    Candidates, false, /*KnownValid*/ false);
   9949 
   9950       OverloadCandidateSet::iterator Best;
   9951       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
   9952         // No viable functions. Don't bother the user with notes for functions
   9953         // which don't work and shouldn't be found anyway.
   9954         R.clear();
   9955         return false;
   9956       }
   9957 
   9958       // Find the namespaces where ADL would have looked, and suggest
   9959       // declaring the function there instead.
   9960       Sema::AssociatedNamespaceSet AssociatedNamespaces;
   9961       Sema::AssociatedClassSet AssociatedClasses;
   9962       SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
   9963                                                  AssociatedNamespaces,
   9964                                                  AssociatedClasses);
   9965       Sema::AssociatedNamespaceSet SuggestedNamespaces;
   9966       if (canBeDeclaredInNamespace(R.getLookupName())) {
   9967         DeclContext *Std = SemaRef.getStdNamespace();
   9968         for (Sema::AssociatedNamespaceSet::iterator
   9969                it = AssociatedNamespaces.begin(),
   9970                end = AssociatedNamespaces.end(); it != end; ++it) {
   9971           // Never suggest declaring a function within namespace 'std'.
   9972           if (Std && Std->Encloses(*it))
   9973             continue;
   9974 
   9975           // Never suggest declaring a function within a namespace with a
   9976           // reserved name, like __gnu_cxx.
   9977           NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
   9978           if (NS &&
   9979               NS->getQualifiedNameAsString().find("__") != std::string::npos)
   9980             continue;
   9981 
   9982           SuggestedNamespaces.insert(*it);
   9983         }
   9984       }
   9985 
   9986       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
   9987         << R.getLookupName();
   9988       if (SuggestedNamespaces.empty()) {
   9989         SemaRef.Diag(Best->Function->getLocation(),
   9990                      diag::note_not_found_by_two_phase_lookup)
   9991           << R.getLookupName() << 0;
   9992       } else if (SuggestedNamespaces.size() == 1) {
   9993         SemaRef.Diag(Best->Function->getLocation(),
   9994                      diag::note_not_found_by_two_phase_lookup)
   9995           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
   9996       } else {
   9997         // FIXME: It would be useful to list the associated namespaces here,
   9998         // but the diagnostics infrastructure doesn't provide a way to produce
   9999         // a localized representation of a list of items.
   10000         SemaRef.Diag(Best->Function->getLocation(),
   10001                      diag::note_not_found_by_two_phase_lookup)
   10002           << R.getLookupName() << 2;
   10003       }
   10004 
   10005       // Try to recover by calling this function.
   10006       return true;
   10007     }
   10008 
   10009     R.clear();
   10010   }
   10011 
   10012   return false;
   10013 }
   10014 
   10015 /// Attempt to recover from ill-formed use of a non-dependent operator in a
   10016 /// template, where the non-dependent operator was declared after the template
   10017 /// was defined.
   10018 ///
   10019 /// Returns true if a viable candidate was found and a diagnostic was issued.
   10020 static bool
   10021 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
   10022                                SourceLocation OpLoc,
   10023                                ArrayRef<Expr *> Args) {
   10024   DeclarationName OpName =
   10025     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
   10026   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
   10027   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
   10028                                 /*ExplicitTemplateArgs=*/0, Args);
   10029 }
   10030 
   10031 namespace {
   10032 class BuildRecoveryCallExprRAII {
   10033   Sema &SemaRef;
   10034 public:
   10035   BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
   10036     assert(SemaRef.IsBuildingRecoveryCallExpr == false);
   10037     SemaRef.IsBuildingRecoveryCallExpr = true;
   10038   }
   10039 
   10040   ~BuildRecoveryCallExprRAII() {
   10041     SemaRef.IsBuildingRecoveryCallExpr = false;
   10042   }
   10043 };
   10044 
   10045 }
   10046 
   10047 /// Attempts to recover from a call where no functions were found.
   10048 ///
   10049 /// Returns true if new candidates were found.
   10050 static ExprResult
   10051 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
   10052                       UnresolvedLookupExpr *ULE,
   10053                       SourceLocation LParenLoc,
   10054                       llvm::MutableArrayRef<Expr *> Args,
   10055                       SourceLocation RParenLoc,
   10056                       bool EmptyLookup, bool AllowTypoCorrection) {
   10057   // Do not try to recover if it is already building a recovery call.
   10058   // This stops infinite loops for template instantiations like
   10059   //
   10060   // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
   10061   // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
   10062   //
   10063   if (SemaRef.IsBuildingRecoveryCallExpr)
   10064     return ExprError();
   10065   BuildRecoveryCallExprRAII RCE(SemaRef);
   10066 
   10067   CXXScopeSpec SS;
   10068   SS.Adopt(ULE->getQualifierLoc());
   10069   SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
   10070 
   10071   TemplateArgumentListInfo TABuffer;
   10072   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
   10073   if (ULE->hasExplicitTemplateArgs()) {
   10074     ULE->copyTemplateArgumentsInto(TABuffer);
   10075     ExplicitTemplateArgs = &TABuffer;
   10076   }
   10077 
   10078   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
   10079                  Sema::LookupOrdinaryName);
   10080   FunctionCallFilterCCC Validator(SemaRef, Args.size(),
   10081                                   ExplicitTemplateArgs != 0);
   10082   NoTypoCorrectionCCC RejectAll;
   10083   CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
   10084       (CorrectionCandidateCallback*)&Validator :
   10085       (CorrectionCandidateCallback*)&RejectAll;
   10086   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
   10087                               ExplicitTemplateArgs, Args) &&
   10088       (!EmptyLookup ||
   10089        SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
   10090                                    ExplicitTemplateArgs, Args)))
   10091     return ExprError();
   10092 
   10093   assert(!R.empty() && "lookup results empty despite recovery");
   10094 
   10095   // Build an implicit member call if appropriate.  Just drop the
   10096   // casts and such from the call, we don't really care.
   10097   ExprResult NewFn = ExprError();
   10098   if ((*R.begin())->isCXXClassMember())
   10099     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
   10100                                                     R, ExplicitTemplateArgs);
   10101   else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
   10102     NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
   10103                                         ExplicitTemplateArgs);
   10104   else
   10105     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
   10106 
   10107   if (NewFn.isInvalid())
   10108     return ExprError();
   10109 
   10110   // This shouldn't cause an infinite loop because we're giving it
   10111   // an expression with viable lookup results, which should never
   10112   // end up here.
   10113   return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
   10114                                MultiExprArg(Args.data(), Args.size()),
   10115                                RParenLoc);
   10116 }
   10117 
   10118 /// \brief Constructs and populates an OverloadedCandidateSet from
   10119 /// the given function.
   10120 /// \returns true when an the ExprResult output parameter has been set.
   10121 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
   10122                                   UnresolvedLookupExpr *ULE,
   10123                                   MultiExprArg Args,
   10124                                   SourceLocation RParenLoc,
   10125                                   OverloadCandidateSet *CandidateSet,
   10126                                   ExprResult *Result) {
   10127 #ifndef NDEBUG
   10128   if (ULE->requiresADL()) {
   10129     // To do ADL, we must have found an unqualified name.
   10130     assert(!ULE->getQualifier() && "qualified name with ADL");
   10131 
   10132     // We don't perform ADL for implicit declarations of builtins.
   10133     // Verify that this was correctly set up.
   10134     FunctionDecl *F;
   10135     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
   10136         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
   10137         F->getBuiltinID() && F->isImplicit())
   10138       llvm_unreachable("performing ADL for builtin");
   10139 
   10140     // We don't perform ADL in C.
   10141     assert(getLangOpts().CPlusPlus && "ADL enabled in C");
   10142   }
   10143 #endif
   10144 
   10145   UnbridgedCastsSet UnbridgedCasts;
   10146   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) {
   10147     *Result = ExprError();
   10148     return true;
   10149   }
   10150 
   10151   // Add the functions denoted by the callee to the set of candidate
   10152   // functions, including those from argument-dependent lookup.
   10153   AddOverloadedCallCandidates(ULE, Args, *CandidateSet);
   10154 
   10155   // If we found nothing, try to recover.
   10156   // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
   10157   // out if it fails.
   10158   if (CandidateSet->empty()) {
   10159     // In Microsoft mode, if we are inside a template class member function then
   10160     // create a type dependent CallExpr. The goal is to postpone name lookup
   10161     // to instantiation time to be able to search into type dependent base
   10162     // classes.
   10163     if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
   10164         (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
   10165       CallExpr *CE = new (Context) CallExpr(Context, Fn, Args,
   10166                                             Context.DependentTy, VK_RValue,
   10167                                             RParenLoc);
   10168       CE->setTypeDependent(true);
   10169       *Result = Owned(CE);
   10170       return true;
   10171     }
   10172     return false;
   10173   }
   10174 
   10175   UnbridgedCasts.restore();
   10176   return false;
   10177 }
   10178 
   10179 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
   10180 /// the completed call expression. If overload resolution fails, emits
   10181 /// diagnostics and returns ExprError()
   10182 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
   10183                                            UnresolvedLookupExpr *ULE,
   10184                                            SourceLocation LParenLoc,
   10185                                            MultiExprArg Args,
   10186                                            SourceLocation RParenLoc,
   10187                                            Expr *ExecConfig,
   10188                                            OverloadCandidateSet *CandidateSet,
   10189                                            OverloadCandidateSet::iterator *Best,
   10190                                            OverloadingResult OverloadResult,
   10191                                            bool AllowTypoCorrection) {
   10192   if (CandidateSet->empty())
   10193     return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, Args,
   10194                                  RParenLoc, /*EmptyLookup=*/true,
   10195                                  AllowTypoCorrection);
   10196 
   10197   switch (OverloadResult) {
   10198   case OR_Success: {
   10199     FunctionDecl *FDecl = (*Best)->Function;
   10200     SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
   10201     if (SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()))
   10202       return ExprError();
   10203     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
   10204     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
   10205                                          ExecConfig);
   10206   }
   10207 
   10208   case OR_No_Viable_Function: {
   10209     // Try to recover by looking for viable functions which the user might
   10210     // have meant to call.
   10211     ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
   10212                                                 Args, RParenLoc,
   10213                                                 /*EmptyLookup=*/false,
   10214                                                 AllowTypoCorrection);
   10215     if (!Recovery.isInvalid())
   10216       return Recovery;
   10217 
   10218     SemaRef.Diag(Fn->getLocStart(),
   10219          diag::err_ovl_no_viable_function_in_call)
   10220       << ULE->getName() << Fn->getSourceRange();
   10221     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
   10222     break;
   10223   }
   10224 
   10225   case OR_Ambiguous:
   10226     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
   10227       << ULE->getName() << Fn->getSourceRange();
   10228     CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates, Args);
   10229     break;
   10230 
   10231   case OR_Deleted: {
   10232     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
   10233       << (*Best)->Function->isDeleted()
   10234       << ULE->getName()
   10235       << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
   10236       << Fn->getSourceRange();
   10237     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
   10238 
   10239     // We emitted an error for the unvailable/deleted function call but keep
   10240     // the call in the AST.
   10241     FunctionDecl *FDecl = (*Best)->Function;
   10242     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
   10243     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
   10244                                          ExecConfig);
   10245   }
   10246   }
   10247 
   10248   // Overload resolution failed.
   10249   return ExprError();
   10250 }
   10251 
   10252 /// BuildOverloadedCallExpr - Given the call expression that calls Fn
   10253 /// (which eventually refers to the declaration Func) and the call
   10254 /// arguments Args/NumArgs, attempt to resolve the function call down
   10255 /// to a specific function. If overload resolution succeeds, returns
   10256 /// the call expression produced by overload resolution.
   10257 /// Otherwise, emits diagnostics and returns ExprError.
   10258 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
   10259                                          UnresolvedLookupExpr *ULE,
   10260                                          SourceLocation LParenLoc,
   10261                                          MultiExprArg Args,
   10262                                          SourceLocation RParenLoc,
   10263                                          Expr *ExecConfig,
   10264                                          bool AllowTypoCorrection) {
   10265   OverloadCandidateSet CandidateSet(Fn->getExprLoc());
   10266   ExprResult result;
   10267 
   10268   if (buildOverloadedCallSet(S, Fn, ULE, Args, LParenLoc, &CandidateSet,
   10269                              &result))
   10270     return result;
   10271 
   10272   OverloadCandidateSet::iterator Best;
   10273   OverloadingResult OverloadResult =
   10274       CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
   10275 
   10276   return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args,
   10277                                   RParenLoc, ExecConfig, &CandidateSet,
   10278                                   &Best, OverloadResult,
   10279                                   AllowTypoCorrection);
   10280 }
   10281 
   10282 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
   10283   return Functions.size() > 1 ||
   10284     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
   10285 }
   10286 
   10287 /// \brief Create a unary operation that may resolve to an overloaded
   10288 /// operator.
   10289 ///
   10290 /// \param OpLoc The location of the operator itself (e.g., '*').
   10291 ///
   10292 /// \param OpcIn The UnaryOperator::Opcode that describes this
   10293 /// operator.
   10294 ///
   10295 /// \param Fns The set of non-member functions that will be
   10296 /// considered by overload resolution. The caller needs to build this
   10297 /// set based on the context using, e.g.,
   10298 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
   10299 /// set should not contain any member functions; those will be added
   10300 /// by CreateOverloadedUnaryOp().
   10301 ///
   10302 /// \param Input The input argument.
   10303 ExprResult
   10304 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
   10305                               const UnresolvedSetImpl &Fns,
   10306                               Expr *Input) {
   10307   UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
   10308 
   10309   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
   10310   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
   10311   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
   10312   // TODO: provide better source location info.
   10313   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
   10314 
   10315   if (checkPlaceholderForOverload(*this, Input))
   10316     return ExprError();
   10317 
   10318   Expr *Args[2] = { Input, 0 };
   10319   unsigned NumArgs = 1;
   10320 
   10321   // For post-increment and post-decrement, add the implicit '0' as
   10322   // the second argument, so that we know this is a post-increment or
   10323   // post-decrement.
   10324   if (Opc == UO_PostInc || Opc == UO_PostDec) {
   10325     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
   10326     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
   10327                                      SourceLocation());
   10328     NumArgs = 2;
   10329   }
   10330 
   10331   ArrayRef<Expr *> ArgsArray(Args, NumArgs);
   10332 
   10333   if (Input->isTypeDependent()) {
   10334     if (Fns.empty())
   10335       return Owned(new (Context) UnaryOperator(Input,
   10336                                                Opc,
   10337                                                Context.DependentTy,
   10338                                                VK_RValue, OK_Ordinary,
   10339                                                OpLoc));
   10340 
   10341     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
   10342     UnresolvedLookupExpr *Fn
   10343       = UnresolvedLookupExpr::Create(Context, NamingClass,
   10344                                      NestedNameSpecifierLoc(), OpNameInfo,
   10345                                      /*ADL*/ true, IsOverloaded(Fns),
   10346                                      Fns.begin(), Fns.end());
   10347     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, ArgsArray,
   10348                                                    Context.DependentTy,
   10349                                                    VK_RValue,
   10350                                                    OpLoc, false));
   10351   }
   10352 
   10353   // Build an empty overload set.
   10354   OverloadCandidateSet CandidateSet(OpLoc);
   10355 
   10356   // Add the candidates from the given function set.
   10357   AddFunctionCandidates(Fns, ArgsArray, CandidateSet, false);
   10358 
   10359   // Add operator candidates that are member functions.
   10360   AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
   10361 
   10362   // Add candidates from ADL.
   10363   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, OpLoc,
   10364                                        ArgsArray, /*ExplicitTemplateArgs*/ 0,
   10365                                        CandidateSet);
   10366 
   10367   // Add builtin operator candidates.
   10368   AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
   10369 
   10370   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   10371 
   10372   // Perform overload resolution.
   10373   OverloadCandidateSet::iterator Best;
   10374   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
   10375   case OR_Success: {
   10376     // We found a built-in operator or an overloaded operator.
   10377     FunctionDecl *FnDecl = Best->Function;
   10378 
   10379     if (FnDecl) {
   10380       // We matched an overloaded operator. Build a call to that
   10381       // operator.
   10382 
   10383       // Convert the arguments.
   10384       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
   10385         CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
   10386 
   10387         ExprResult InputRes =
   10388           PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
   10389                                               Best->FoundDecl, Method);
   10390         if (InputRes.isInvalid())
   10391           return ExprError();
   10392         Input = InputRes.take();
   10393       } else {
   10394         // Convert the arguments.
   10395         ExprResult InputInit
   10396           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
   10397                                                       Context,
   10398                                                       FnDecl->getParamDecl(0)),
   10399                                       SourceLocation(),
   10400                                       Input);
   10401         if (InputInit.isInvalid())
   10402           return ExprError();
   10403         Input = InputInit.take();
   10404       }
   10405 
   10406       // Determine the result type.
   10407       QualType ResultTy = FnDecl->getResultType();
   10408       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
   10409       ResultTy = ResultTy.getNonLValueExprType(Context);
   10410 
   10411       // Build the actual expression node.
   10412       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
   10413                                                 HadMultipleCandidates, OpLoc);
   10414       if (FnExpr.isInvalid())
   10415         return ExprError();
   10416 
   10417       Args[0] = Input;
   10418       CallExpr *TheCall =
   10419         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), ArgsArray,
   10420                                           ResultTy, VK, OpLoc, false);
   10421 
   10422       if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
   10423                               FnDecl))
   10424         return ExprError();
   10425 
   10426       return MaybeBindToTemporary(TheCall);
   10427     } else {
   10428       // We matched a built-in operator. Convert the arguments, then
   10429       // break out so that we will build the appropriate built-in
   10430       // operator node.
   10431       ExprResult InputRes =
   10432         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
   10433                                   Best->Conversions[0], AA_Passing);
   10434       if (InputRes.isInvalid())
   10435         return ExprError();
   10436       Input = InputRes.take();
   10437       break;
   10438     }
   10439   }
   10440 
   10441   case OR_No_Viable_Function:
   10442     // This is an erroneous use of an operator which can be overloaded by
   10443     // a non-member function. Check for non-member operators which were
   10444     // defined too late to be candidates.
   10445     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, ArgsArray))
   10446       // FIXME: Recover by calling the found function.
   10447       return ExprError();
   10448 
   10449     // No viable function; fall through to handling this as a
   10450     // built-in operator, which will produce an error message for us.
   10451     break;
   10452 
   10453   case OR_Ambiguous:
   10454     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
   10455         << UnaryOperator::getOpcodeStr(Opc)
   10456         << Input->getType()
   10457         << Input->getSourceRange();
   10458     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, ArgsArray,
   10459                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
   10460     return ExprError();
   10461 
   10462   case OR_Deleted:
   10463     Diag(OpLoc, diag::err_ovl_deleted_oper)
   10464       << Best->Function->isDeleted()
   10465       << UnaryOperator::getOpcodeStr(Opc)
   10466       << getDeletedOrUnavailableSuffix(Best->Function)
   10467       << Input->getSourceRange();
   10468     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, ArgsArray,
   10469                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
   10470     return ExprError();
   10471   }
   10472 
   10473   // Either we found no viable overloaded operator or we matched a
   10474   // built-in operator. In either case, fall through to trying to
   10475   // build a built-in operation.
   10476   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
   10477 }
   10478 
   10479 /// \brief Create a binary operation that may resolve to an overloaded
   10480 /// operator.
   10481 ///
   10482 /// \param OpLoc The location of the operator itself (e.g., '+').
   10483 ///
   10484 /// \param OpcIn The BinaryOperator::Opcode that describes this
   10485 /// operator.
   10486 ///
   10487 /// \param Fns The set of non-member functions that will be
   10488 /// considered by overload resolution. The caller needs to build this
   10489 /// set based on the context using, e.g.,
   10490 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
   10491 /// set should not contain any member functions; those will be added
   10492 /// by CreateOverloadedBinOp().
   10493 ///
   10494 /// \param LHS Left-hand argument.
   10495 /// \param RHS Right-hand argument.
   10496 ExprResult
   10497 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
   10498                             unsigned OpcIn,
   10499                             const UnresolvedSetImpl &Fns,
   10500                             Expr *LHS, Expr *RHS) {
   10501   Expr *Args[2] = { LHS, RHS };
   10502   LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
   10503 
   10504   BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
   10505   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
   10506   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
   10507 
   10508   // If either side is type-dependent, create an appropriate dependent
   10509   // expression.
   10510   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
   10511     if (Fns.empty()) {
   10512       // If there are no functions to store, just build a dependent
   10513       // BinaryOperator or CompoundAssignment.
   10514       if (Opc <= BO_Assign || Opc > BO_OrAssign)
   10515         return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
   10516                                                   Context.DependentTy,
   10517                                                   VK_RValue, OK_Ordinary,
   10518                                                   OpLoc,
   10519                                                   FPFeatures.fp_contract));
   10520 
   10521       return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
   10522                                                         Context.DependentTy,
   10523                                                         VK_LValue,
   10524                                                         OK_Ordinary,
   10525                                                         Context.DependentTy,
   10526                                                         Context.DependentTy,
   10527                                                         OpLoc,
   10528                                                         FPFeatures.fp_contract));
   10529     }
   10530 
   10531     // FIXME: save results of ADL from here?
   10532     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
   10533     // TODO: provide better source location info in DNLoc component.
   10534     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
   10535     UnresolvedLookupExpr *Fn
   10536       = UnresolvedLookupExpr::Create(Context, NamingClass,
   10537                                      NestedNameSpecifierLoc(), OpNameInfo,
   10538                                      /*ADL*/ true, IsOverloaded(Fns),
   10539                                      Fns.begin(), Fns.end());
   10540     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
   10541                                                 Context.DependentTy, VK_RValue,
   10542                                                 OpLoc, FPFeatures.fp_contract));
   10543   }
   10544 
   10545   // Always do placeholder-like conversions on the RHS.
   10546   if (checkPlaceholderForOverload(*this, Args[1]))
   10547     return ExprError();
   10548 
   10549   // Do placeholder-like conversion on the LHS; note that we should
   10550   // not get here with a PseudoObject LHS.
   10551   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
   10552   if (checkPlaceholderForOverload(*this, Args[0]))
   10553     return ExprError();
   10554 
   10555   // If this is the assignment operator, we only perform overload resolution
   10556   // if the left-hand side is a class or enumeration type. This is actually
   10557   // a hack. The standard requires that we do overload resolution between the
   10558   // various built-in candidates, but as DR507 points out, this can lead to
   10559   // problems. So we do it this way, which pretty much follows what GCC does.
   10560   // Note that we go the traditional code path for compound assignment forms.
   10561   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
   10562     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
   10563 
   10564   // If this is the .* operator, which is not overloadable, just
   10565   // create a built-in binary operator.
   10566   if (Opc == BO_PtrMemD)
   10567     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
   10568 
   10569   // Build an empty overload set.
   10570   OverloadCandidateSet CandidateSet(OpLoc);
   10571 
   10572   // Add the candidates from the given function set.
   10573   AddFunctionCandidates(Fns, Args, CandidateSet, false);
   10574 
   10575   // Add operator candidates that are member functions.
   10576   AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet);
   10577 
   10578   // Add candidates from ADL.
   10579   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
   10580                                        OpLoc, Args,
   10581                                        /*ExplicitTemplateArgs*/ 0,
   10582                                        CandidateSet);
   10583 
   10584   // Add builtin operator candidates.
   10585   AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet);
   10586 
   10587   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   10588 
   10589   // Perform overload resolution.
   10590   OverloadCandidateSet::iterator Best;
   10591   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
   10592     case OR_Success: {
   10593       // We found a built-in operator or an overloaded operator.
   10594       FunctionDecl *FnDecl = Best->Function;
   10595 
   10596       if (FnDecl) {
   10597         // We matched an overloaded operator. Build a call to that
   10598         // operator.
   10599 
   10600         // Convert the arguments.
   10601         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
   10602           // Best->Access is only meaningful for class members.
   10603           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
   10604 
   10605           ExprResult Arg1 =
   10606             PerformCopyInitialization(
   10607               InitializedEntity::InitializeParameter(Context,
   10608                                                      FnDecl->getParamDecl(0)),
   10609               SourceLocation(), Owned(Args[1]));
   10610           if (Arg1.isInvalid())
   10611             return ExprError();
   10612 
   10613           ExprResult Arg0 =
   10614             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
   10615                                                 Best->FoundDecl, Method);
   10616           if (Arg0.isInvalid())
   10617             return ExprError();
   10618           Args[0] = Arg0.takeAs<Expr>();
   10619           Args[1] = RHS = Arg1.takeAs<Expr>();
   10620         } else {
   10621           // Convert the arguments.
   10622           ExprResult Arg0 = PerformCopyInitialization(
   10623             InitializedEntity::InitializeParameter(Context,
   10624                                                    FnDecl->getParamDecl(0)),
   10625             SourceLocation(), Owned(Args[0]));
   10626           if (Arg0.isInvalid())
   10627             return ExprError();
   10628 
   10629           ExprResult Arg1 =
   10630             PerformCopyInitialization(
   10631               InitializedEntity::InitializeParameter(Context,
   10632                                                      FnDecl->getParamDecl(1)),
   10633               SourceLocation(), Owned(Args[1]));
   10634           if (Arg1.isInvalid())
   10635             return ExprError();
   10636           Args[0] = LHS = Arg0.takeAs<Expr>();
   10637           Args[1] = RHS = Arg1.takeAs<Expr>();
   10638         }
   10639 
   10640         // Determine the result type.
   10641         QualType ResultTy = FnDecl->getResultType();
   10642         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
   10643         ResultTy = ResultTy.getNonLValueExprType(Context);
   10644 
   10645         // Build the actual expression node.
   10646         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
   10647                                                   Best->FoundDecl,
   10648                                                   HadMultipleCandidates, OpLoc);
   10649         if (FnExpr.isInvalid())
   10650           return ExprError();
   10651 
   10652         CXXOperatorCallExpr *TheCall =
   10653           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
   10654                                             Args, ResultTy, VK, OpLoc,
   10655                                             FPFeatures.fp_contract);
   10656 
   10657         if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
   10658                                 FnDecl))
   10659           return ExprError();
   10660 
   10661         ArrayRef<const Expr *> ArgsArray(Args, 2);
   10662         // Cut off the implicit 'this'.
   10663         if (isa<CXXMethodDecl>(FnDecl))
   10664           ArgsArray = ArgsArray.slice(1);
   10665         checkCall(FnDecl, ArgsArray, 0, isa<CXXMethodDecl>(FnDecl), OpLoc,
   10666                   TheCall->getSourceRange(), VariadicDoesNotApply);
   10667 
   10668         return MaybeBindToTemporary(TheCall);
   10669       } else {
   10670         // We matched a built-in operator. Convert the arguments, then
   10671         // break out so that we will build the appropriate built-in
   10672         // operator node.
   10673         ExprResult ArgsRes0 =
   10674           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
   10675                                     Best->Conversions[0], AA_Passing);
   10676         if (ArgsRes0.isInvalid())
   10677           return ExprError();
   10678         Args[0] = ArgsRes0.take();
   10679 
   10680         ExprResult ArgsRes1 =
   10681           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
   10682                                     Best->Conversions[1], AA_Passing);
   10683         if (ArgsRes1.isInvalid())
   10684           return ExprError();
   10685         Args[1] = ArgsRes1.take();
   10686         break;
   10687       }
   10688     }
   10689 
   10690     case OR_No_Viable_Function: {
   10691       // C++ [over.match.oper]p9:
   10692       //   If the operator is the operator , [...] and there are no
   10693       //   viable functions, then the operator is assumed to be the
   10694       //   built-in operator and interpreted according to clause 5.
   10695       if (Opc == BO_Comma)
   10696         break;
   10697 
   10698       // For class as left operand for assignment or compound assigment
   10699       // operator do not fall through to handling in built-in, but report that
   10700       // no overloaded assignment operator found
   10701       ExprResult Result = ExprError();
   10702       if (Args[0]->getType()->isRecordType() &&
   10703           Opc >= BO_Assign && Opc <= BO_OrAssign) {
   10704         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
   10705              << BinaryOperator::getOpcodeStr(Opc)
   10706              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
   10707       } else {
   10708         // This is an erroneous use of an operator which can be overloaded by
   10709         // a non-member function. Check for non-member operators which were
   10710         // defined too late to be candidates.
   10711         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
   10712           // FIXME: Recover by calling the found function.
   10713           return ExprError();
   10714 
   10715         // No viable function; try to create a built-in operation, which will
   10716         // produce an error. Then, show the non-viable candidates.
   10717         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
   10718       }
   10719       assert(Result.isInvalid() &&
   10720              "C++ binary operator overloading is missing candidates!");
   10721       if (Result.isInvalid())
   10722         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
   10723                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
   10724       return Result;
   10725     }
   10726 
   10727     case OR_Ambiguous:
   10728       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
   10729           << BinaryOperator::getOpcodeStr(Opc)
   10730           << Args[0]->getType() << Args[1]->getType()
   10731           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
   10732       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
   10733                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
   10734       return ExprError();
   10735 
   10736     case OR_Deleted:
   10737       if (isImplicitlyDeleted(Best->Function)) {
   10738         CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
   10739         Diag(OpLoc, diag::err_ovl_deleted_special_oper)
   10740           << Context.getRecordType(Method->getParent())
   10741           << getSpecialMember(Method);
   10742 
   10743         // The user probably meant to call this special member. Just
   10744         // explain why it's deleted.
   10745         NoteDeletedFunction(Method);
   10746         return ExprError();
   10747       } else {
   10748         Diag(OpLoc, diag::err_ovl_deleted_oper)
   10749           << Best->Function->isDeleted()
   10750           << BinaryOperator::getOpcodeStr(Opc)
   10751           << getDeletedOrUnavailableSuffix(Best->Function)
   10752           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
   10753       }
   10754       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
   10755                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
   10756       return ExprError();
   10757   }
   10758 
   10759   // We matched a built-in operator; build it.
   10760   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
   10761 }
   10762 
   10763 ExprResult
   10764 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
   10765                                          SourceLocation RLoc,
   10766                                          Expr *Base, Expr *Idx) {
   10767   Expr *Args[2] = { Base, Idx };
   10768   DeclarationName OpName =
   10769       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
   10770 
   10771   // If either side is type-dependent, create an appropriate dependent
   10772   // expression.
   10773   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
   10774 
   10775     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
   10776     // CHECKME: no 'operator' keyword?
   10777     DeclarationNameInfo OpNameInfo(OpName, LLoc);
   10778     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
   10779     UnresolvedLookupExpr *Fn
   10780       = UnresolvedLookupExpr::Create(Context, NamingClass,
   10781                                      NestedNameSpecifierLoc(), OpNameInfo,
   10782                                      /*ADL*/ true, /*Overloaded*/ false,
   10783                                      UnresolvedSetIterator(),
   10784                                      UnresolvedSetIterator());
   10785     // Can't add any actual overloads yet
   10786 
   10787     return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
   10788                                                    Args,
   10789                                                    Context.DependentTy,
   10790                                                    VK_RValue,
   10791                                                    RLoc, false));
   10792   }
   10793 
   10794   // Handle placeholders on both operands.
   10795   if (checkPlaceholderForOverload(*this, Args[0]))
   10796     return ExprError();
   10797   if (checkPlaceholderForOverload(*this, Args[1]))
   10798     return ExprError();
   10799 
   10800   // Build an empty overload set.
   10801   OverloadCandidateSet CandidateSet(LLoc);
   10802 
   10803   // Subscript can only be overloaded as a member function.
   10804 
   10805   // Add operator candidates that are member functions.
   10806   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
   10807 
   10808   // Add builtin operator candidates.
   10809   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
   10810 
   10811   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   10812 
   10813   // Perform overload resolution.
   10814   OverloadCandidateSet::iterator Best;
   10815   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
   10816     case OR_Success: {
   10817       // We found a built-in operator or an overloaded operator.
   10818       FunctionDecl *FnDecl = Best->Function;
   10819 
   10820       if (FnDecl) {
   10821         // We matched an overloaded operator. Build a call to that
   10822         // operator.
   10823 
   10824         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
   10825 
   10826         // Convert the arguments.
   10827         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
   10828         ExprResult Arg0 =
   10829           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
   10830                                               Best->FoundDecl, Method);
   10831         if (Arg0.isInvalid())
   10832           return ExprError();
   10833         Args[0] = Arg0.take();
   10834 
   10835         // Convert the arguments.
   10836         ExprResult InputInit
   10837           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
   10838                                                       Context,
   10839                                                       FnDecl->getParamDecl(0)),
   10840                                       SourceLocation(),
   10841                                       Owned(Args[1]));
   10842         if (InputInit.isInvalid())
   10843           return ExprError();
   10844 
   10845         Args[1] = InputInit.takeAs<Expr>();
   10846 
   10847         // Determine the result type
   10848         QualType ResultTy = FnDecl->getResultType();
   10849         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
   10850         ResultTy = ResultTy.getNonLValueExprType(Context);
   10851 
   10852         // Build the actual expression node.
   10853         DeclarationNameInfo OpLocInfo(OpName, LLoc);
   10854         OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
   10855         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
   10856                                                   Best->FoundDecl,
   10857                                                   HadMultipleCandidates,
   10858                                                   OpLocInfo.getLoc(),
   10859                                                   OpLocInfo.getInfo());
   10860         if (FnExpr.isInvalid())
   10861           return ExprError();
   10862 
   10863         CXXOperatorCallExpr *TheCall =
   10864           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
   10865                                             FnExpr.take(), Args,
   10866                                             ResultTy, VK, RLoc,
   10867                                             false);
   10868 
   10869         if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
   10870                                 FnDecl))
   10871           return ExprError();
   10872 
   10873         return MaybeBindToTemporary(TheCall);
   10874       } else {
   10875         // We matched a built-in operator. Convert the arguments, then
   10876         // break out so that we will build the appropriate built-in
   10877         // operator node.
   10878         ExprResult ArgsRes0 =
   10879           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
   10880                                     Best->Conversions[0], AA_Passing);
   10881         if (ArgsRes0.isInvalid())
   10882           return ExprError();
   10883         Args[0] = ArgsRes0.take();
   10884 
   10885         ExprResult ArgsRes1 =
   10886           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
   10887                                     Best->Conversions[1], AA_Passing);
   10888         if (ArgsRes1.isInvalid())
   10889           return ExprError();
   10890         Args[1] = ArgsRes1.take();
   10891 
   10892         break;
   10893       }
   10894     }
   10895 
   10896     case OR_No_Viable_Function: {
   10897       if (CandidateSet.empty())
   10898         Diag(LLoc, diag::err_ovl_no_oper)
   10899           << Args[0]->getType() << /*subscript*/ 0
   10900           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
   10901       else
   10902         Diag(LLoc, diag::err_ovl_no_viable_subscript)
   10903           << Args[0]->getType()
   10904           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
   10905       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
   10906                                   "[]", LLoc);
   10907       return ExprError();
   10908     }
   10909 
   10910     case OR_Ambiguous:
   10911       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
   10912           << "[]"
   10913           << Args[0]->getType() << Args[1]->getType()
   10914           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
   10915       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
   10916                                   "[]", LLoc);
   10917       return ExprError();
   10918 
   10919     case OR_Deleted:
   10920       Diag(LLoc, diag::err_ovl_deleted_oper)
   10921         << Best->Function->isDeleted() << "[]"
   10922         << getDeletedOrUnavailableSuffix(Best->Function)
   10923         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
   10924       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
   10925                                   "[]", LLoc);
   10926       return ExprError();
   10927     }
   10928 
   10929   // We matched a built-in operator; build it.
   10930   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
   10931 }
   10932 
   10933 /// BuildCallToMemberFunction - Build a call to a member
   10934 /// function. MemExpr is the expression that refers to the member
   10935 /// function (and includes the object parameter), Args/NumArgs are the
   10936 /// arguments to the function call (not including the object
   10937 /// parameter). The caller needs to validate that the member
   10938 /// expression refers to a non-static member function or an overloaded
   10939 /// member function.
   10940 ExprResult
   10941 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
   10942                                 SourceLocation LParenLoc,
   10943                                 MultiExprArg Args,
   10944                                 SourceLocation RParenLoc) {
   10945   assert(MemExprE->getType() == Context.BoundMemberTy ||
   10946          MemExprE->getType() == Context.OverloadTy);
   10947 
   10948   // Dig out the member expression. This holds both the object
   10949   // argument and the member function we're referring to.
   10950   Expr *NakedMemExpr = MemExprE->IgnoreParens();
   10951 
   10952   // Determine whether this is a call to a pointer-to-member function.
   10953   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
   10954     assert(op->getType() == Context.BoundMemberTy);
   10955     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
   10956 
   10957     QualType fnType =
   10958       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
   10959 
   10960     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
   10961     QualType resultType = proto->getCallResultType(Context);
   10962     ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
   10963 
   10964     // Check that the object type isn't more qualified than the
   10965     // member function we're calling.
   10966     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
   10967 
   10968     QualType objectType = op->getLHS()->getType();
   10969     if (op->getOpcode() == BO_PtrMemI)
   10970       objectType = objectType->castAs<PointerType>()->getPointeeType();
   10971     Qualifiers objectQuals = objectType.getQualifiers();
   10972 
   10973     Qualifiers difference = objectQuals - funcQuals;
   10974     difference.removeObjCGCAttr();
   10975     difference.removeAddressSpace();
   10976     if (difference) {
   10977       std::string qualsString = difference.getAsString();
   10978       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
   10979         << fnType.getUnqualifiedType()
   10980         << qualsString
   10981         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
   10982     }
   10983 
   10984     CXXMemberCallExpr *call
   10985       = new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
   10986                                         resultType, valueKind, RParenLoc);
   10987 
   10988     if (CheckCallReturnType(proto->getResultType(),
   10989                             op->getRHS()->getLocStart(),
   10990                             call, 0))
   10991       return ExprError();
   10992 
   10993     if (ConvertArgumentsForCall(call, op, 0, proto, Args, RParenLoc))
   10994       return ExprError();
   10995 
   10996     if (CheckOtherCall(call, proto))
   10997       return ExprError();
   10998 
   10999     return MaybeBindToTemporary(call);
   11000   }
   11001 
   11002   UnbridgedCastsSet UnbridgedCasts;
   11003   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
   11004     return ExprError();
   11005 
   11006   MemberExpr *MemExpr;
   11007   CXXMethodDecl *Method = 0;
   11008   DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
   11009   NestedNameSpecifier *Qualifier = 0;
   11010   if (isa<MemberExpr>(NakedMemExpr)) {
   11011     MemExpr = cast<MemberExpr>(NakedMemExpr);
   11012     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
   11013     FoundDecl = MemExpr->getFoundDecl();
   11014     Qualifier = MemExpr->getQualifier();
   11015     UnbridgedCasts.restore();
   11016   } else {
   11017     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
   11018     Qualifier = UnresExpr->getQualifier();
   11019 
   11020     QualType ObjectType = UnresExpr->getBaseType();
   11021     Expr::Classification ObjectClassification
   11022       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
   11023                             : UnresExpr->getBase()->Classify(Context);
   11024 
   11025     // Add overload candidates
   11026     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
   11027 
   11028     // FIXME: avoid copy.
   11029     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
   11030     if (UnresExpr->hasExplicitTemplateArgs()) {
   11031       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
   11032       TemplateArgs = &TemplateArgsBuffer;
   11033     }
   11034 
   11035     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
   11036            E = UnresExpr->decls_end(); I != E; ++I) {
   11037 
   11038       NamedDecl *Func = *I;
   11039       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
   11040       if (isa<UsingShadowDecl>(Func))
   11041         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
   11042 
   11043 
   11044       // Microsoft supports direct constructor calls.
   11045       if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
   11046         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
   11047                              Args, CandidateSet);
   11048       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
   11049         // If explicit template arguments were provided, we can't call a
   11050         // non-template member function.
   11051         if (TemplateArgs)
   11052           continue;
   11053 
   11054         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
   11055                            ObjectClassification, Args, CandidateSet,
   11056                            /*SuppressUserConversions=*/false);
   11057       } else {
   11058         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
   11059                                    I.getPair(), ActingDC, TemplateArgs,
   11060                                    ObjectType,  ObjectClassification,
   11061                                    Args, CandidateSet,
   11062                                    /*SuppressUsedConversions=*/false);
   11063       }
   11064     }
   11065 
   11066     DeclarationName DeclName = UnresExpr->getMemberName();
   11067 
   11068     UnbridgedCasts.restore();
   11069 
   11070     OverloadCandidateSet::iterator Best;
   11071     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
   11072                                             Best)) {
   11073     case OR_Success:
   11074       Method = cast<CXXMethodDecl>(Best->Function);
   11075       FoundDecl = Best->FoundDecl;
   11076       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
   11077       if (DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()))
   11078         return ExprError();
   11079       // If FoundDecl is different from Method (such as if one is a template
   11080       // and the other a specialization), make sure DiagnoseUseOfDecl is
   11081       // called on both.
   11082       // FIXME: This would be more comprehensively addressed by modifying
   11083       // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
   11084       // being used.
   11085       if (Method != FoundDecl.getDecl() &&
   11086                       DiagnoseUseOfDecl(Method, UnresExpr->getNameLoc()))
   11087         return ExprError();
   11088       break;
   11089 
   11090     case OR_No_Viable_Function:
   11091       Diag(UnresExpr->getMemberLoc(),
   11092            diag::err_ovl_no_viable_member_function_in_call)
   11093         << DeclName << MemExprE->getSourceRange();
   11094       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
   11095       // FIXME: Leaking incoming expressions!
   11096       return ExprError();
   11097 
   11098     case OR_Ambiguous:
   11099       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
   11100         << DeclName << MemExprE->getSourceRange();
   11101       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
   11102       // FIXME: Leaking incoming expressions!
   11103       return ExprError();
   11104 
   11105     case OR_Deleted:
   11106       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
   11107         << Best->Function->isDeleted()
   11108         << DeclName
   11109         << getDeletedOrUnavailableSuffix(Best->Function)
   11110         << MemExprE->getSourceRange();
   11111       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
   11112       // FIXME: Leaking incoming expressions!
   11113       return ExprError();
   11114     }
   11115 
   11116     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
   11117 
   11118     // If overload resolution picked a static member, build a
   11119     // non-member call based on that function.
   11120     if (Method->isStatic()) {
   11121       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, Args,
   11122                                    RParenLoc);
   11123     }
   11124 
   11125     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
   11126   }
   11127 
   11128   QualType ResultType = Method->getResultType();
   11129   ExprValueKind VK = Expr::getValueKindForType(ResultType);
   11130   ResultType = ResultType.getNonLValueExprType(Context);
   11131 
   11132   assert(Method && "Member call to something that isn't a method?");
   11133   CXXMemberCallExpr *TheCall =
   11134     new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
   11135                                     ResultType, VK, RParenLoc);
   11136 
   11137   // Check for a valid return type.
   11138   if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
   11139                           TheCall, Method))
   11140     return ExprError();
   11141 
   11142   // Convert the object argument (for a non-static member function call).
   11143   // We only need to do this if there was actually an overload; otherwise
   11144   // it was done at lookup.
   11145   if (!Method->isStatic()) {
   11146     ExprResult ObjectArg =
   11147       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
   11148                                           FoundDecl, Method);
   11149     if (ObjectArg.isInvalid())
   11150       return ExprError();
   11151     MemExpr->setBase(ObjectArg.take());
   11152   }
   11153 
   11154   // Convert the rest of the arguments
   11155   const FunctionProtoType *Proto =
   11156     Method->getType()->getAs<FunctionProtoType>();
   11157   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args,
   11158                               RParenLoc))
   11159     return ExprError();
   11160 
   11161   DiagnoseSentinelCalls(Method, LParenLoc, Args);
   11162 
   11163   if (CheckFunctionCall(Method, TheCall, Proto))
   11164     return ExprError();
   11165 
   11166   if ((isa<CXXConstructorDecl>(CurContext) ||
   11167        isa<CXXDestructorDecl>(CurContext)) &&
   11168       TheCall->getMethodDecl()->isPure()) {
   11169     const CXXMethodDecl *MD = TheCall->getMethodDecl();
   11170 
   11171     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
   11172       Diag(MemExpr->getLocStart(),
   11173            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
   11174         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
   11175         << MD->getParent()->getDeclName();
   11176 
   11177       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
   11178     }
   11179   }
   11180   return MaybeBindToTemporary(TheCall);
   11181 }
   11182 
   11183 /// BuildCallToObjectOfClassType - Build a call to an object of class
   11184 /// type (C++ [over.call.object]), which can end up invoking an
   11185 /// overloaded function call operator (@c operator()) or performing a
   11186 /// user-defined conversion on the object argument.
   11187 ExprResult
   11188 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
   11189                                    SourceLocation LParenLoc,
   11190                                    MultiExprArg Args,
   11191                                    SourceLocation RParenLoc) {
   11192   if (checkPlaceholderForOverload(*this, Obj))
   11193     return ExprError();
   11194   ExprResult Object = Owned(Obj);
   11195 
   11196   UnbridgedCastsSet UnbridgedCasts;
   11197   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
   11198     return ExprError();
   11199 
   11200   assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
   11201   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
   11202 
   11203   // C++ [over.call.object]p1:
   11204   //  If the primary-expression E in the function call syntax
   11205   //  evaluates to a class object of type "cv T", then the set of
   11206   //  candidate functions includes at least the function call
   11207   //  operators of T. The function call operators of T are obtained by
   11208   //  ordinary lookup of the name operator() in the context of
   11209   //  (E).operator().
   11210   OverloadCandidateSet CandidateSet(LParenLoc);
   11211   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
   11212 
   11213   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
   11214                           diag::err_incomplete_object_call, Object.get()))
   11215     return true;
   11216 
   11217   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
   11218   LookupQualifiedName(R, Record->getDecl());
   11219   R.suppressDiagnostics();
   11220 
   11221   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
   11222        Oper != OperEnd; ++Oper) {
   11223     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
   11224                        Object.get()->Classify(Context),
   11225                        Args, CandidateSet,
   11226                        /*SuppressUserConversions=*/ false);
   11227   }
   11228 
   11229   // C++ [over.call.object]p2:
   11230   //   In addition, for each (non-explicit in C++0x) conversion function
   11231   //   declared in T of the form
   11232   //
   11233   //        operator conversion-type-id () cv-qualifier;
   11234   //
   11235   //   where cv-qualifier is the same cv-qualification as, or a
   11236   //   greater cv-qualification than, cv, and where conversion-type-id
   11237   //   denotes the type "pointer to function of (P1,...,Pn) returning
   11238   //   R", or the type "reference to pointer to function of
   11239   //   (P1,...,Pn) returning R", or the type "reference to function
   11240   //   of (P1,...,Pn) returning R", a surrogate call function [...]
   11241   //   is also considered as a candidate function. Similarly,
   11242   //   surrogate call functions are added to the set of candidate
   11243   //   functions for each conversion function declared in an
   11244   //   accessible base class provided the function is not hidden
   11245   //   within T by another intervening declaration.
   11246   std::pair<CXXRecordDecl::conversion_iterator,
   11247             CXXRecordDecl::conversion_iterator> Conversions
   11248     = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
   11249   for (CXXRecordDecl::conversion_iterator
   11250          I = Conversions.first, E = Conversions.second; I != E; ++I) {
   11251     NamedDecl *D = *I;
   11252     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
   11253     if (isa<UsingShadowDecl>(D))
   11254       D = cast<UsingShadowDecl>(D)->getTargetDecl();
   11255 
   11256     // Skip over templated conversion functions; they aren't
   11257     // surrogates.
   11258     if (isa<FunctionTemplateDecl>(D))
   11259       continue;
   11260 
   11261     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
   11262     if (!Conv->isExplicit()) {
   11263       // Strip the reference type (if any) and then the pointer type (if
   11264       // any) to get down to what might be a function type.
   11265       QualType ConvType = Conv->getConversionType().getNonReferenceType();
   11266       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
   11267         ConvType = ConvPtrType->getPointeeType();
   11268 
   11269       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
   11270       {
   11271         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
   11272                               Object.get(), Args, CandidateSet);
   11273       }
   11274     }
   11275   }
   11276 
   11277   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   11278 
   11279   // Perform overload resolution.
   11280   OverloadCandidateSet::iterator Best;
   11281   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
   11282                              Best)) {
   11283   case OR_Success:
   11284     // Overload resolution succeeded; we'll build the appropriate call
   11285     // below.
   11286     break;
   11287 
   11288   case OR_No_Viable_Function:
   11289     if (CandidateSet.empty())
   11290       Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
   11291         << Object.get()->getType() << /*call*/ 1
   11292         << Object.get()->getSourceRange();
   11293     else
   11294       Diag(Object.get()->getLocStart(),
   11295            diag::err_ovl_no_viable_object_call)
   11296         << Object.get()->getType() << Object.get()->getSourceRange();
   11297     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
   11298     break;
   11299 
   11300   case OR_Ambiguous:
   11301     Diag(Object.get()->getLocStart(),
   11302          diag::err_ovl_ambiguous_object_call)
   11303       << Object.get()->getType() << Object.get()->getSourceRange();
   11304     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
   11305     break;
   11306 
   11307   case OR_Deleted:
   11308     Diag(Object.get()->getLocStart(),
   11309          diag::err_ovl_deleted_object_call)
   11310       << Best->Function->isDeleted()
   11311       << Object.get()->getType()
   11312       << getDeletedOrUnavailableSuffix(Best->Function)
   11313       << Object.get()->getSourceRange();
   11314     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
   11315     break;
   11316   }
   11317 
   11318   if (Best == CandidateSet.end())
   11319     return true;
   11320 
   11321   UnbridgedCasts.restore();
   11322 
   11323   if (Best->Function == 0) {
   11324     // Since there is no function declaration, this is one of the
   11325     // surrogate candidates. Dig out the conversion function.
   11326     CXXConversionDecl *Conv
   11327       = cast<CXXConversionDecl>(
   11328                          Best->Conversions[0].UserDefined.ConversionFunction);
   11329 
   11330     CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
   11331     if (DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc))
   11332       return ExprError();
   11333     assert(Conv == Best->FoundDecl.getDecl() &&
   11334              "Found Decl & conversion-to-functionptr should be same, right?!");
   11335     // We selected one of the surrogate functions that converts the
   11336     // object parameter to a function pointer. Perform the conversion
   11337     // on the object argument, then let ActOnCallExpr finish the job.
   11338 
   11339     // Create an implicit member expr to refer to the conversion operator.
   11340     // and then call it.
   11341     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
   11342                                              Conv, HadMultipleCandidates);
   11343     if (Call.isInvalid())
   11344       return ExprError();
   11345     // Record usage of conversion in an implicit cast.
   11346     Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
   11347                                           CK_UserDefinedConversion,
   11348                                           Call.get(), 0, VK_RValue));
   11349 
   11350     return ActOnCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc);
   11351   }
   11352 
   11353   CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
   11354 
   11355   // We found an overloaded operator(). Build a CXXOperatorCallExpr
   11356   // that calls this method, using Object for the implicit object
   11357   // parameter and passing along the remaining arguments.
   11358   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
   11359 
   11360   // An error diagnostic has already been printed when parsing the declaration.
   11361   if (Method->isInvalidDecl())
   11362     return ExprError();
   11363 
   11364   const FunctionProtoType *Proto =
   11365     Method->getType()->getAs<FunctionProtoType>();
   11366 
   11367   unsigned NumArgsInProto = Proto->getNumArgs();
   11368   unsigned NumArgsToCheck = Args.size();
   11369 
   11370   // Build the full argument list for the method call (the
   11371   // implicit object parameter is placed at the beginning of the
   11372   // list).
   11373   Expr **MethodArgs;
   11374   if (Args.size() < NumArgsInProto) {
   11375     NumArgsToCheck = NumArgsInProto;
   11376     MethodArgs = new Expr*[NumArgsInProto + 1];
   11377   } else {
   11378     MethodArgs = new Expr*[Args.size() + 1];
   11379   }
   11380   MethodArgs[0] = Object.get();
   11381   for (unsigned ArgIdx = 0, e = Args.size(); ArgIdx != e; ++ArgIdx)
   11382     MethodArgs[ArgIdx + 1] = Args[ArgIdx];
   11383 
   11384   DeclarationNameInfo OpLocInfo(
   11385                Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
   11386   OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
   11387   ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
   11388                                            HadMultipleCandidates,
   11389                                            OpLocInfo.getLoc(),
   11390                                            OpLocInfo.getInfo());
   11391   if (NewFn.isInvalid())
   11392     return true;
   11393 
   11394   // Once we've built TheCall, all of the expressions are properly
   11395   // owned.
   11396   QualType ResultTy = Method->getResultType();
   11397   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
   11398   ResultTy = ResultTy.getNonLValueExprType(Context);
   11399 
   11400   CXXOperatorCallExpr *TheCall =
   11401     new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
   11402                                       llvm::makeArrayRef(MethodArgs, Args.size()+1),
   11403                                       ResultTy, VK, RParenLoc, false);
   11404   delete [] MethodArgs;
   11405 
   11406   if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
   11407                           Method))
   11408     return true;
   11409 
   11410   // We may have default arguments. If so, we need to allocate more
   11411   // slots in the call for them.
   11412   if (Args.size() < NumArgsInProto)
   11413     TheCall->setNumArgs(Context, NumArgsInProto + 1);
   11414   else if (Args.size() > NumArgsInProto)
   11415     NumArgsToCheck = NumArgsInProto;
   11416 
   11417   bool IsError = false;
   11418 
   11419   // Initialize the implicit object parameter.
   11420   ExprResult ObjRes =
   11421     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
   11422                                         Best->FoundDecl, Method);
   11423   if (ObjRes.isInvalid())
   11424     IsError = true;
   11425   else
   11426     Object = ObjRes;
   11427   TheCall->setArg(0, Object.take());
   11428 
   11429   // Check the argument types.
   11430   for (unsigned i = 0; i != NumArgsToCheck; i++) {
   11431     Expr *Arg;
   11432     if (i < Args.size()) {
   11433       Arg = Args[i];
   11434 
   11435       // Pass the argument.
   11436 
   11437       ExprResult InputInit
   11438         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
   11439                                                     Context,
   11440                                                     Method->getParamDecl(i)),
   11441                                     SourceLocation(), Arg);
   11442 
   11443       IsError |= InputInit.isInvalid();
   11444       Arg = InputInit.takeAs<Expr>();
   11445     } else {
   11446       ExprResult DefArg
   11447         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
   11448       if (DefArg.isInvalid()) {
   11449         IsError = true;
   11450         break;
   11451       }
   11452 
   11453       Arg = DefArg.takeAs<Expr>();
   11454     }
   11455 
   11456     TheCall->setArg(i + 1, Arg);
   11457   }
   11458 
   11459   // If this is a variadic call, handle args passed through "...".
   11460   if (Proto->isVariadic()) {
   11461     // Promote the arguments (C99 6.5.2.2p7).
   11462     for (unsigned i = NumArgsInProto, e = Args.size(); i < e; i++) {
   11463       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
   11464       IsError |= Arg.isInvalid();
   11465       TheCall->setArg(i + 1, Arg.take());
   11466     }
   11467   }
   11468 
   11469   if (IsError) return true;
   11470 
   11471   DiagnoseSentinelCalls(Method, LParenLoc, Args);
   11472 
   11473   if (CheckFunctionCall(Method, TheCall, Proto))
   11474     return true;
   11475 
   11476   return MaybeBindToTemporary(TheCall);
   11477 }
   11478 
   11479 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
   11480 ///  (if one exists), where @c Base is an expression of class type and
   11481 /// @c Member is the name of the member we're trying to find.
   11482 ExprResult
   11483 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
   11484                                bool *NoArrowOperatorFound) {
   11485   assert(Base->getType()->isRecordType() &&
   11486          "left-hand side must have class type");
   11487 
   11488   if (checkPlaceholderForOverload(*this, Base))
   11489     return ExprError();
   11490 
   11491   SourceLocation Loc = Base->getExprLoc();
   11492 
   11493   // C++ [over.ref]p1:
   11494   //
   11495   //   [...] An expression x->m is interpreted as (x.operator->())->m
   11496   //   for a class object x of type T if T::operator->() exists and if
   11497   //   the operator is selected as the best match function by the
   11498   //   overload resolution mechanism (13.3).
   11499   DeclarationName OpName =
   11500     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
   11501   OverloadCandidateSet CandidateSet(Loc);
   11502   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
   11503 
   11504   if (RequireCompleteType(Loc, Base->getType(),
   11505                           diag::err_typecheck_incomplete_tag, Base))
   11506     return ExprError();
   11507 
   11508   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
   11509   LookupQualifiedName(R, BaseRecord->getDecl());
   11510   R.suppressDiagnostics();
   11511 
   11512   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
   11513        Oper != OperEnd; ++Oper) {
   11514     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
   11515                        None, CandidateSet, /*SuppressUserConversions=*/false);
   11516   }
   11517 
   11518   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   11519 
   11520   // Perform overload resolution.
   11521   OverloadCandidateSet::iterator Best;
   11522   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
   11523   case OR_Success:
   11524     // Overload resolution succeeded; we'll build the call below.
   11525     break;
   11526 
   11527   case OR_No_Viable_Function:
   11528     if (CandidateSet.empty()) {
   11529       QualType BaseType = Base->getType();
   11530       if (NoArrowOperatorFound) {
   11531         // Report this specific error to the caller instead of emitting a
   11532         // diagnostic, as requested.
   11533         *NoArrowOperatorFound = true;
   11534         return ExprError();
   11535       }
   11536       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
   11537         << BaseType << Base->getSourceRange();
   11538       if (BaseType->isRecordType() && !BaseType->isPointerType()) {
   11539         Diag(OpLoc, diag::note_typecheck_member_reference_suggestion)
   11540           << FixItHint::CreateReplacement(OpLoc, ".");
   11541       }
   11542     } else
   11543       Diag(OpLoc, diag::err_ovl_no_viable_oper)
   11544         << "operator->" << Base->getSourceRange();
   11545     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
   11546     return ExprError();
   11547 
   11548   case OR_Ambiguous:
   11549     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
   11550       << "->" << Base->getType() << Base->getSourceRange();
   11551     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
   11552     return ExprError();
   11553 
   11554   case OR_Deleted:
   11555     Diag(OpLoc,  diag::err_ovl_deleted_oper)
   11556       << Best->Function->isDeleted()
   11557       << "->"
   11558       << getDeletedOrUnavailableSuffix(Best->Function)
   11559       << Base->getSourceRange();
   11560     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
   11561     return ExprError();
   11562   }
   11563 
   11564   CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
   11565 
   11566   // Convert the object parameter.
   11567   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
   11568   ExprResult BaseResult =
   11569     PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
   11570                                         Best->FoundDecl, Method);
   11571   if (BaseResult.isInvalid())
   11572     return ExprError();
   11573   Base = BaseResult.take();
   11574 
   11575   // Build the operator call.
   11576   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
   11577                                             HadMultipleCandidates, OpLoc);
   11578   if (FnExpr.isInvalid())
   11579     return ExprError();
   11580 
   11581   QualType ResultTy = Method->getResultType();
   11582   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
   11583   ResultTy = ResultTy.getNonLValueExprType(Context);
   11584   CXXOperatorCallExpr *TheCall =
   11585     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
   11586                                       Base, ResultTy, VK, OpLoc, false);
   11587 
   11588   if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
   11589                           Method))
   11590           return ExprError();
   11591 
   11592   return MaybeBindToTemporary(TheCall);
   11593 }
   11594 
   11595 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
   11596 /// a literal operator described by the provided lookup results.
   11597 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
   11598                                           DeclarationNameInfo &SuffixInfo,
   11599                                           ArrayRef<Expr*> Args,
   11600                                           SourceLocation LitEndLoc,
   11601                                        TemplateArgumentListInfo *TemplateArgs) {
   11602   SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
   11603 
   11604   OverloadCandidateSet CandidateSet(UDSuffixLoc);
   11605   AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
   11606                         TemplateArgs);
   11607 
   11608   bool HadMultipleCandidates = (CandidateSet.size() > 1);
   11609 
   11610   // Perform overload resolution. This will usually be trivial, but might need
   11611   // to perform substitutions for a literal operator template.
   11612   OverloadCandidateSet::iterator Best;
   11613   switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
   11614   case OR_Success:
   11615   case OR_Deleted:
   11616     break;
   11617 
   11618   case OR_No_Viable_Function:
   11619     Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
   11620       << R.getLookupName();
   11621     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
   11622     return ExprError();
   11623 
   11624   case OR_Ambiguous:
   11625     Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
   11626     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
   11627     return ExprError();
   11628   }
   11629 
   11630   FunctionDecl *FD = Best->Function;
   11631   ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
   11632                                         HadMultipleCandidates,
   11633                                         SuffixInfo.getLoc(),
   11634                                         SuffixInfo.getInfo());
   11635   if (Fn.isInvalid())
   11636     return true;
   11637 
   11638   // Check the argument types. This should almost always be a no-op, except
   11639   // that array-to-pointer decay is applied to string literals.
   11640   Expr *ConvArgs[2];
   11641   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
   11642     ExprResult InputInit = PerformCopyInitialization(
   11643       InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
   11644       SourceLocation(), Args[ArgIdx]);
   11645     if (InputInit.isInvalid())
   11646       return true;
   11647     ConvArgs[ArgIdx] = InputInit.take();
   11648   }
   11649 
   11650   QualType ResultTy = FD->getResultType();
   11651   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
   11652   ResultTy = ResultTy.getNonLValueExprType(Context);
   11653 
   11654   UserDefinedLiteral *UDL =
   11655     new (Context) UserDefinedLiteral(Context, Fn.take(),
   11656                                      llvm::makeArrayRef(ConvArgs, Args.size()),
   11657                                      ResultTy, VK, LitEndLoc, UDSuffixLoc);
   11658 
   11659   if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
   11660     return ExprError();
   11661 
   11662   if (CheckFunctionCall(FD, UDL, NULL))
   11663     return ExprError();
   11664 
   11665   return MaybeBindToTemporary(UDL);
   11666 }
   11667 
   11668 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
   11669 /// given LookupResult is non-empty, it is assumed to describe a member which
   11670 /// will be invoked. Otherwise, the function will be found via argument
   11671 /// dependent lookup.
   11672 /// CallExpr is set to a valid expression and FRS_Success returned on success,
   11673 /// otherwise CallExpr is set to ExprError() and some non-success value
   11674 /// is returned.
   11675 Sema::ForRangeStatus
   11676 Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
   11677                                 SourceLocation RangeLoc, VarDecl *Decl,
   11678                                 BeginEndFunction BEF,
   11679                                 const DeclarationNameInfo &NameInfo,
   11680                                 LookupResult &MemberLookup,
   11681                                 OverloadCandidateSet *CandidateSet,
   11682                                 Expr *Range, ExprResult *CallExpr) {
   11683   CandidateSet->clear();
   11684   if (!MemberLookup.empty()) {
   11685     ExprResult MemberRef =
   11686         BuildMemberReferenceExpr(Range, Range->getType(), Loc,
   11687                                  /*IsPtr=*/false, CXXScopeSpec(),
   11688                                  /*TemplateKWLoc=*/SourceLocation(),
   11689                                  /*FirstQualifierInScope=*/0,
   11690                                  MemberLookup,
   11691                                  /*TemplateArgs=*/0);
   11692     if (MemberRef.isInvalid()) {
   11693       *CallExpr = ExprError();
   11694       Diag(Range->getLocStart(), diag::note_in_for_range)
   11695           << RangeLoc << BEF << Range->getType();
   11696       return FRS_DiagnosticIssued;
   11697     }
   11698     *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, None, Loc, 0);
   11699     if (CallExpr->isInvalid()) {
   11700       *CallExpr = ExprError();
   11701       Diag(Range->getLocStart(), diag::note_in_for_range)
   11702           << RangeLoc << BEF << Range->getType();
   11703       return FRS_DiagnosticIssued;
   11704     }
   11705   } else {
   11706     UnresolvedSet<0> FoundNames;
   11707     UnresolvedLookupExpr *Fn =
   11708       UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
   11709                                    NestedNameSpecifierLoc(), NameInfo,
   11710                                    /*NeedsADL=*/true, /*Overloaded=*/false,
   11711                                    FoundNames.begin(), FoundNames.end());
   11712 
   11713     bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, Range, Loc,
   11714                                                     CandidateSet, CallExpr);
   11715     if (CandidateSet->empty() || CandidateSetError) {
   11716       *CallExpr = ExprError();
   11717       return FRS_NoViableFunction;
   11718     }
   11719     OverloadCandidateSet::iterator Best;
   11720     OverloadingResult OverloadResult =
   11721         CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
   11722 
   11723     if (OverloadResult == OR_No_Viable_Function) {
   11724       *CallExpr = ExprError();
   11725       return FRS_NoViableFunction;
   11726     }
   11727     *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, Range,
   11728                                          Loc, 0, CandidateSet, &Best,
   11729                                          OverloadResult,
   11730                                          /*AllowTypoCorrection=*/false);
   11731     if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
   11732       *CallExpr = ExprError();
   11733       Diag(Range->getLocStart(), diag::note_in_for_range)
   11734           << RangeLoc << BEF << Range->getType();
   11735       return FRS_DiagnosticIssued;
   11736     }
   11737   }
   11738   return FRS_Success;
   11739 }
   11740 
   11741 
   11742 /// FixOverloadedFunctionReference - E is an expression that refers to
   11743 /// a C++ overloaded function (possibly with some parentheses and
   11744 /// perhaps a '&' around it). We have resolved the overloaded function
   11745 /// to the function declaration Fn, so patch up the expression E to
   11746 /// refer (possibly indirectly) to Fn. Returns the new expr.
   11747 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
   11748                                            FunctionDecl *Fn) {
   11749   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
   11750     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
   11751                                                    Found, Fn);
   11752     if (SubExpr == PE->getSubExpr())
   11753       return PE;
   11754 
   11755     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
   11756   }
   11757 
   11758   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
   11759     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
   11760                                                    Found, Fn);
   11761     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
   11762                                SubExpr->getType()) &&
   11763            "Implicit cast type cannot be determined from overload");
   11764     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
   11765     if (SubExpr == ICE->getSubExpr())
   11766       return ICE;
   11767 
   11768     return ImplicitCastExpr::Create(Context, ICE->getType(),
   11769                                     ICE->getCastKind(),
   11770                                     SubExpr, 0,
   11771                                     ICE->getValueKind());
   11772   }
   11773 
   11774   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
   11775     assert(UnOp->getOpcode() == UO_AddrOf &&
   11776            "Can only take the address of an overloaded function");
   11777     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
   11778       if (Method->isStatic()) {
   11779         // Do nothing: static member functions aren't any different
   11780         // from non-member functions.
   11781       } else {
   11782         // Fix the sub expression, which really has to be an
   11783         // UnresolvedLookupExpr holding an overloaded member function
   11784         // or template.
   11785         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
   11786                                                        Found, Fn);
   11787         if (SubExpr == UnOp->getSubExpr())
   11788           return UnOp;
   11789 
   11790         assert(isa<DeclRefExpr>(SubExpr)
   11791                && "fixed to something other than a decl ref");
   11792         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
   11793                && "fixed to a member ref with no nested name qualifier");
   11794 
   11795         // We have taken the address of a pointer to member
   11796         // function. Perform the computation here so that we get the
   11797         // appropriate pointer to member type.
   11798         QualType ClassType
   11799           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
   11800         QualType MemPtrType
   11801           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
   11802 
   11803         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
   11804                                            VK_RValue, OK_Ordinary,
   11805                                            UnOp->getOperatorLoc());
   11806       }
   11807     }
   11808     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
   11809                                                    Found, Fn);
   11810     if (SubExpr == UnOp->getSubExpr())
   11811       return UnOp;
   11812 
   11813     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
   11814                                      Context.getPointerType(SubExpr->getType()),
   11815                                        VK_RValue, OK_Ordinary,
   11816                                        UnOp->getOperatorLoc());
   11817   }
   11818 
   11819   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
   11820     // FIXME: avoid copy.
   11821     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
   11822     if (ULE->hasExplicitTemplateArgs()) {
   11823       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
   11824       TemplateArgs = &TemplateArgsBuffer;
   11825     }
   11826 
   11827     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
   11828                                            ULE->getQualifierLoc(),
   11829                                            ULE->getTemplateKeywordLoc(),
   11830                                            Fn,
   11831                                            /*enclosing*/ false, // FIXME?
   11832                                            ULE->getNameLoc(),
   11833                                            Fn->getType(),
   11834                                            VK_LValue,
   11835                                            Found.getDecl(),
   11836                                            TemplateArgs);
   11837     MarkDeclRefReferenced(DRE);
   11838     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
   11839     return DRE;
   11840   }
   11841 
   11842   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
   11843     // FIXME: avoid copy.
   11844     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
   11845     if (MemExpr->hasExplicitTemplateArgs()) {
   11846       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
   11847       TemplateArgs = &TemplateArgsBuffer;
   11848     }
   11849 
   11850     Expr *Base;
   11851 
   11852     // If we're filling in a static method where we used to have an
   11853     // implicit member access, rewrite to a simple decl ref.
   11854     if (MemExpr->isImplicitAccess()) {
   11855       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
   11856         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
   11857                                                MemExpr->getQualifierLoc(),
   11858                                                MemExpr->getTemplateKeywordLoc(),
   11859                                                Fn,
   11860                                                /*enclosing*/ false,
   11861                                                MemExpr->getMemberLoc(),
   11862                                                Fn->getType(),
   11863                                                VK_LValue,
   11864                                                Found.getDecl(),
   11865                                                TemplateArgs);
   11866         MarkDeclRefReferenced(DRE);
   11867         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
   11868         return DRE;
   11869       } else {
   11870         SourceLocation Loc = MemExpr->getMemberLoc();
   11871         if (MemExpr->getQualifier())
   11872           Loc = MemExpr->getQualifierLoc().getBeginLoc();
   11873         CheckCXXThisCapture(Loc);
   11874         Base = new (Context) CXXThisExpr(Loc,
   11875                                          MemExpr->getBaseType(),
   11876                                          /*isImplicit=*/true);
   11877       }
   11878     } else
   11879       Base = MemExpr->getBase();
   11880 
   11881     ExprValueKind valueKind;
   11882     QualType type;
   11883     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
   11884       valueKind = VK_LValue;
   11885       type = Fn->getType();
   11886     } else {
   11887       valueKind = VK_RValue;
   11888       type = Context.BoundMemberTy;
   11889     }
   11890 
   11891     MemberExpr *ME = MemberExpr::Create(Context, Base,
   11892                                         MemExpr->isArrow(),
   11893                                         MemExpr->getQualifierLoc(),
   11894                                         MemExpr->getTemplateKeywordLoc(),
   11895                                         Fn,
   11896                                         Found,
   11897                                         MemExpr->getMemberNameInfo(),
   11898                                         TemplateArgs,
   11899                                         type, valueKind, OK_Ordinary);
   11900     ME->setHadMultipleCandidates(true);
   11901     MarkMemberReferenced(ME);
   11902     return ME;
   11903   }
   11904 
   11905   llvm_unreachable("Invalid reference to overloaded function");
   11906 }
   11907 
   11908 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
   11909                                                 DeclAccessPair Found,
   11910                                                 FunctionDecl *Fn) {
   11911   return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
   11912 }
   11913 
   11914 } // end namespace clang
   11915