1 //===--- SemaOverload.cpp - C++ Overloading ---------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file provides Sema routines for C++ overloading.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/Sema/SemaInternal.h"
15 #include "clang/Sema/Lookup.h"
16 #include "clang/Sema/Initialization.h"
17 #include "clang/Sema/Template.h"
18 #include "clang/Sema/TemplateDeduction.h"
19 #include "clang/Basic/Diagnostic.h"
20 #include "clang/Lex/Preprocessor.h"
21 #include "clang/AST/ASTContext.h"
22 #include "clang/AST/CXXInheritance.h"
23 #include "clang/AST/DeclObjC.h"
24 #include "clang/AST/Expr.h"
25 #include "clang/AST/ExprCXX.h"
26 #include "clang/AST/ExprObjC.h"
27 #include "clang/AST/TypeOrdering.h"
28 #include "clang/Basic/PartialDiagnostic.h"
29 #include "llvm/ADT/DenseSet.h"
30 #include "llvm/ADT/SmallPtrSet.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include <algorithm>
33 
34 namespace clang {
35 using namespace sema;
36 
37 /// A convenience routine for creating a decayed reference to a
38 /// function.
39 static ExprResult
40 CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, bool HadMultipleCandidates,
41                       SourceLocation Loc = SourceLocation(),
42                       const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
43   DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, Fn->getType(),
44                                                  VK_LValue, Loc, LocInfo);
45   if (HadMultipleCandidates)
46     DRE->setHadMultipleCandidates(true);
47   ExprResult E = S.Owned(DRE);
48   E = S.DefaultFunctionArrayConversion(E.take());
49   if (E.isInvalid())
50     return ExprError();
51   return move(E);
52 }
53 
54 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
55                                  bool InOverloadResolution,
56                                  StandardConversionSequence &SCS,
57                                  bool CStyle,
58                                  bool AllowObjCWritebackConversion);
59 
60 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
61                                                  QualType &ToType,
62                                                  bool InOverloadResolution,
63                                                  StandardConversionSequence &SCS,
64                                                  bool CStyle);
65 static OverloadingResult
66 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
67                         UserDefinedConversionSequence& User,
68                         OverloadCandidateSet& Conversions,
69                         bool AllowExplicit);
70 
71 
72 static ImplicitConversionSequence::CompareKind
73 CompareStandardConversionSequences(Sema &S,
74                                    const StandardConversionSequence& SCS1,
75                                    const StandardConversionSequence& SCS2);
76 
77 static ImplicitConversionSequence::CompareKind
78 CompareQualificationConversions(Sema &S,
79                                 const StandardConversionSequence& SCS1,
80                                 const StandardConversionSequence& SCS2);
81 
82 static ImplicitConversionSequence::CompareKind
83 CompareDerivedToBaseConversions(Sema &S,
84                                 const StandardConversionSequence& SCS1,
85                                 const StandardConversionSequence& SCS2);
86 
87 
88 
89 /// GetConversionCategory - Retrieve the implicit conversion
90 /// category corresponding to the given implicit conversion kind.
91 ImplicitConversionCategory
92 GetConversionCategory(ImplicitConversionKind Kind) {
93   static const ImplicitConversionCategory
94     Category[(int)ICK_Num_Conversion_Kinds] = {
95     ICC_Identity,
96     ICC_Lvalue_Transformation,
97     ICC_Lvalue_Transformation,
98     ICC_Lvalue_Transformation,
99     ICC_Identity,
100     ICC_Qualification_Adjustment,
101     ICC_Promotion,
102     ICC_Promotion,
103     ICC_Promotion,
104     ICC_Conversion,
105     ICC_Conversion,
106     ICC_Conversion,
107     ICC_Conversion,
108     ICC_Conversion,
109     ICC_Conversion,
110     ICC_Conversion,
111     ICC_Conversion,
112     ICC_Conversion,
113     ICC_Conversion,
114     ICC_Conversion,
115     ICC_Conversion,
116     ICC_Conversion
117   };
118   return Category[(int)Kind];
119 }
120 
121 /// GetConversionRank - Retrieve the implicit conversion rank
122 /// corresponding to the given implicit conversion kind.
123 ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
124   static const ImplicitConversionRank
125     Rank[(int)ICK_Num_Conversion_Kinds] = {
126     ICR_Exact_Match,
127     ICR_Exact_Match,
128     ICR_Exact_Match,
129     ICR_Exact_Match,
130     ICR_Exact_Match,
131     ICR_Exact_Match,
132     ICR_Promotion,
133     ICR_Promotion,
134     ICR_Promotion,
135     ICR_Conversion,
136     ICR_Conversion,
137     ICR_Conversion,
138     ICR_Conversion,
139     ICR_Conversion,
140     ICR_Conversion,
141     ICR_Conversion,
142     ICR_Conversion,
143     ICR_Conversion,
144     ICR_Conversion,
145     ICR_Conversion,
146     ICR_Complex_Real_Conversion,
147     ICR_Conversion,
148     ICR_Conversion,
149     ICR_Writeback_Conversion
150   };
151   return Rank[(int)Kind];
152 }
153 
154 /// GetImplicitConversionName - Return the name of this kind of
155 /// implicit conversion.
156 const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
157   static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
158     "No conversion",
159     "Lvalue-to-rvalue",
160     "Array-to-pointer",
161     "Function-to-pointer",
162     "Noreturn adjustment",
163     "Qualification",
164     "Integral promotion",
165     "Floating point promotion",
166     "Complex promotion",
167     "Integral conversion",
168     "Floating conversion",
169     "Complex conversion",
170     "Floating-integral conversion",
171     "Pointer conversion",
172     "Pointer-to-member conversion",
173     "Boolean conversion",
174     "Compatible-types conversion",
175     "Derived-to-base conversion",
176     "Vector conversion",
177     "Vector splat",
178     "Complex-real conversion",
179     "Block Pointer conversion",
180     "Transparent Union Conversion"
181     "Writeback conversion"
182   };
183   return Name[Kind];
184 }
185 
186 /// StandardConversionSequence - Set the standard conversion
187 /// sequence to the identity conversion.
188 void StandardConversionSequence::setAsIdentityConversion() {
189   First = ICK_Identity;
190   Second = ICK_Identity;
191   Third = ICK_Identity;
192   DeprecatedStringLiteralToCharPtr = false;
193   QualificationIncludesObjCLifetime = false;
194   ReferenceBinding = false;
195   DirectBinding = false;
196   IsLvalueReference = true;
197   BindsToFunctionLvalue = false;
198   BindsToRvalue = false;
199   BindsImplicitObjectArgumentWithoutRefQualifier = false;
200   ObjCLifetimeConversionBinding = false;
201   CopyConstructor = 0;
202 }
203 
204 /// getRank - Retrieve the rank of this standard conversion sequence
205 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
206 /// implicit conversions.
207 ImplicitConversionRank StandardConversionSequence::getRank() const {
208   ImplicitConversionRank Rank = ICR_Exact_Match;
209   if  (GetConversionRank(First) > Rank)
210     Rank = GetConversionRank(First);
211   if  (GetConversionRank(Second) > Rank)
212     Rank = GetConversionRank(Second);
213   if  (GetConversionRank(Third) > Rank)
214     Rank = GetConversionRank(Third);
215   return Rank;
216 }
217 
218 /// isPointerConversionToBool - Determines whether this conversion is
219 /// a conversion of a pointer or pointer-to-member to bool. This is
220 /// used as part of the ranking of standard conversion sequences
221 /// (C++ 13.3.3.2p4).
222 bool StandardConversionSequence::isPointerConversionToBool() const {
223   // Note that FromType has not necessarily been transformed by the
224   // array-to-pointer or function-to-pointer implicit conversions, so
225   // check for their presence as well as checking whether FromType is
226   // a pointer.
227   if (getToType(1)->isBooleanType() &&
228       (getFromType()->isPointerType() ||
229        getFromType()->isObjCObjectPointerType() ||
230        getFromType()->isBlockPointerType() ||
231        getFromType()->isNullPtrType() ||
232        First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
233     return true;
234 
235   return false;
236 }
237 
238 /// isPointerConversionToVoidPointer - Determines whether this
239 /// conversion is a conversion of a pointer to a void pointer. This is
240 /// used as part of the ranking of standard conversion sequences (C++
241 /// 13.3.3.2p4).
242 bool
243 StandardConversionSequence::
244 isPointerConversionToVoidPointer(ASTContext& Context) const {
245   QualType FromType = getFromType();
246   QualType ToType = getToType(1);
247 
248   // Note that FromType has not necessarily been transformed by the
249   // array-to-pointer implicit conversion, so check for its presence
250   // and redo the conversion to get a pointer.
251   if (First == ICK_Array_To_Pointer)
252     FromType = Context.getArrayDecayedType(FromType);
253 
254   if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
255     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
256       return ToPtrType->getPointeeType()->isVoidType();
257 
258   return false;
259 }
260 
261 /// Skip any implicit casts which could be either part of a narrowing conversion
262 /// or after one in an implicit conversion.
263 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
264   while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
265     switch (ICE->getCastKind()) {
266     case CK_NoOp:
267     case CK_IntegralCast:
268     case CK_IntegralToBoolean:
269     case CK_IntegralToFloating:
270     case CK_FloatingToIntegral:
271     case CK_FloatingToBoolean:
272     case CK_FloatingCast:
273       Converted = ICE->getSubExpr();
274       continue;
275 
276     default:
277       return Converted;
278     }
279   }
280 
281   return Converted;
282 }
283 
284 /// Check if this standard conversion sequence represents a narrowing
285 /// conversion, according to C++11 [dcl.init.list]p7.
286 ///
287 /// \param Ctx  The AST context.
288 /// \param Converted  The result of applying this standard conversion sequence.
289 /// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
290 ///        value of the expression prior to the narrowing conversion.
291 NarrowingKind
292 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
293                                              const Expr *Converted,
294                                              APValue &ConstantValue) const {
295   assert(Ctx.getLangOptions().CPlusPlus && "narrowing check outside C++");
296 
297   // C++11 [dcl.init.list]p7:
298   //   A narrowing conversion is an implicit conversion ...
299   QualType FromType = getToType(0);
300   QualType ToType = getToType(1);
301   switch (Second) {
302   // -- from a floating-point type to an integer type, or
303   //
304   // -- from an integer type or unscoped enumeration type to a floating-point
305   //    type, except where the source is a constant expression and the actual
306   //    value after conversion will fit into the target type and will produce
307   //    the original value when converted back to the original type, or
308   case ICK_Floating_Integral:
309     if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
310       return NK_Type_Narrowing;
311     } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
312       llvm::APSInt IntConstantValue;
313       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
314       if (Initializer &&
315           Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
316         // Convert the integer to the floating type.
317         llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
318         Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
319                                 llvm::APFloat::rmNearestTiesToEven);
320         // And back.
321         llvm::APSInt ConvertedValue = IntConstantValue;
322         bool ignored;
323         Result.convertToInteger(ConvertedValue,
324                                 llvm::APFloat::rmTowardZero, &ignored);
325         // If the resulting value is different, this was a narrowing conversion.
326         if (IntConstantValue != ConvertedValue) {
327           ConstantValue = APValue(IntConstantValue);
328           return NK_Constant_Narrowing;
329         }
330       } else {
331         // Variables are always narrowings.
332         return NK_Variable_Narrowing;
333       }
334     }
335     return NK_Not_Narrowing;
336 
337   // -- from long double to double or float, or from double to float, except
338   //    where the source is a constant expression and the actual value after
339   //    conversion is within the range of values that can be represented (even
340   //    if it cannot be represented exactly), or
341   case ICK_Floating_Conversion:
342     if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
343         Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
344       // FromType is larger than ToType.
345       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
346       if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
347         // Constant!
348         assert(ConstantValue.isFloat());
349         llvm::APFloat FloatVal = ConstantValue.getFloat();
350         // Convert the source value into the target type.
351         bool ignored;
352         llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
353           Ctx.getFloatTypeSemantics(ToType),
354           llvm::APFloat::rmNearestTiesToEven, &ignored);
355         // If there was no overflow, the source value is within the range of
356         // values that can be represented.
357         if (ConvertStatus & llvm::APFloat::opOverflow)
358           return NK_Constant_Narrowing;
359       } else {
360         return NK_Variable_Narrowing;
361       }
362     }
363     return NK_Not_Narrowing;
364 
365   // -- from an integer type or unscoped enumeration type to an integer type
366   //    that cannot represent all the values of the original type, except where
367   //    the source is a constant expression and the actual value after
368   //    conversion will fit into the target type and will produce the original
369   //    value when converted back to the original type.
370   case ICK_Boolean_Conversion:  // Bools are integers too.
371     if (!FromType->isIntegralOrUnscopedEnumerationType()) {
372       // Boolean conversions can be from pointers and pointers to members
373       // [conv.bool], and those aren't considered narrowing conversions.
374       return NK_Not_Narrowing;
375     }  // Otherwise, fall through to the integral case.
376   case ICK_Integral_Conversion: {
377     assert(FromType->isIntegralOrUnscopedEnumerationType());
378     assert(ToType->isIntegralOrUnscopedEnumerationType());
379     const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
380     const unsigned FromWidth = Ctx.getIntWidth(FromType);
381     const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
382     const unsigned ToWidth = Ctx.getIntWidth(ToType);
383 
384     if (FromWidth > ToWidth ||
385         (FromWidth == ToWidth && FromSigned != ToSigned)) {
386       // Not all values of FromType can be represented in ToType.
387       llvm::APSInt InitializerValue;
388       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
389       if (Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
390         ConstantValue = APValue(InitializerValue);
391 
392         // Add a bit to the InitializerValue so we don't have to worry about
393         // signed vs. unsigned comparisons.
394         InitializerValue = InitializerValue.extend(
395           InitializerValue.getBitWidth() + 1);
396         // Convert the initializer to and from the target width and signed-ness.
397         llvm::APSInt ConvertedValue = InitializerValue;
398         ConvertedValue = ConvertedValue.trunc(ToWidth);
399         ConvertedValue.setIsSigned(ToSigned);
400         ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
401         ConvertedValue.setIsSigned(InitializerValue.isSigned());
402         // If the result is different, this was a narrowing conversion.
403         if (ConvertedValue != InitializerValue)
404           return NK_Constant_Narrowing;
405       } else {
406         // Variables are always narrowings.
407         return NK_Variable_Narrowing;
408       }
409     }
410     return NK_Not_Narrowing;
411   }
412 
413   default:
414     // Other kinds of conversions are not narrowings.
415     return NK_Not_Narrowing;
416   }
417 }
418 
419 /// DebugPrint - Print this standard conversion sequence to standard
420 /// error. Useful for debugging overloading issues.
421 void StandardConversionSequence::DebugPrint() const {
422   raw_ostream &OS = llvm::errs();
423   bool PrintedSomething = false;
424   if (First != ICK_Identity) {
425     OS << GetImplicitConversionName(First);
426     PrintedSomething = true;
427   }
428 
429   if (Second != ICK_Identity) {
430     if (PrintedSomething) {
431       OS << " -> ";
432     }
433     OS << GetImplicitConversionName(Second);
434 
435     if (CopyConstructor) {
436       OS << " (by copy constructor)";
437     } else if (DirectBinding) {
438       OS << " (direct reference binding)";
439     } else if (ReferenceBinding) {
440       OS << " (reference binding)";
441     }
442     PrintedSomething = true;
443   }
444 
445   if (Third != ICK_Identity) {
446     if (PrintedSomething) {
447       OS << " -> ";
448     }
449     OS << GetImplicitConversionName(Third);
450     PrintedSomething = true;
451   }
452 
453   if (!PrintedSomething) {
454     OS << "No conversions required";
455   }
456 }
457 
458 /// DebugPrint - Print this user-defined conversion sequence to standard
459 /// error. Useful for debugging overloading issues.
460 void UserDefinedConversionSequence::DebugPrint() const {
461   raw_ostream &OS = llvm::errs();
462   if (Before.First || Before.Second || Before.Third) {
463     Before.DebugPrint();
464     OS << " -> ";
465   }
466   if (ConversionFunction)
467     OS << '\'' << *ConversionFunction << '\'';
468   else
469     OS << "aggregate initialization";
470   if (After.First || After.Second || After.Third) {
471     OS << " -> ";
472     After.DebugPrint();
473   }
474 }
475 
476 /// DebugPrint - Print this implicit conversion sequence to standard
477 /// error. Useful for debugging overloading issues.
478 void ImplicitConversionSequence::DebugPrint() const {
479   raw_ostream &OS = llvm::errs();
480   switch (ConversionKind) {
481   case StandardConversion:
482     OS << "Standard conversion: ";
483     Standard.DebugPrint();
484     break;
485   case UserDefinedConversion:
486     OS << "User-defined conversion: ";
487     UserDefined.DebugPrint();
488     break;
489   case EllipsisConversion:
490     OS << "Ellipsis conversion";
491     break;
492   case AmbiguousConversion:
493     OS << "Ambiguous conversion";
494     break;
495   case BadConversion:
496     OS << "Bad conversion";
497     break;
498   }
499 
500   OS << "\n";
501 }
502 
503 void AmbiguousConversionSequence::construct() {
504   new (&conversions()) ConversionSet();
505 }
506 
507 void AmbiguousConversionSequence::destruct() {
508   conversions().~ConversionSet();
509 }
510 
511 void
512 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
513   FromTypePtr = O.FromTypePtr;
514   ToTypePtr = O.ToTypePtr;
515   new (&conversions()) ConversionSet(O.conversions());
516 }
517 
518 namespace {
519   // Structure used by OverloadCandidate::DeductionFailureInfo to store
520   // template parameter and template argument information.
521   struct DFIParamWithArguments {
522     TemplateParameter Param;
523     TemplateArgument FirstArg;
524     TemplateArgument SecondArg;
525   };
526 }
527 
528 /// \brief Convert from Sema's representation of template deduction information
529 /// to the form used in overload-candidate information.
530 OverloadCandidate::DeductionFailureInfo
531 static MakeDeductionFailureInfo(ASTContext &Context,
532                                 Sema::TemplateDeductionResult TDK,
533                                 TemplateDeductionInfo &Info) {
534   OverloadCandidate::DeductionFailureInfo Result;
535   Result.Result = static_cast<unsigned>(TDK);
536   Result.Data = 0;
537   switch (TDK) {
538   case Sema::TDK_Success:
539   case Sema::TDK_InstantiationDepth:
540   case Sema::TDK_TooManyArguments:
541   case Sema::TDK_TooFewArguments:
542     break;
543 
544   case Sema::TDK_Incomplete:
545   case Sema::TDK_InvalidExplicitArguments:
546     Result.Data = Info.Param.getOpaqueValue();
547     break;
548 
549   case Sema::TDK_Inconsistent:
550   case Sema::TDK_Underqualified: {
551     // FIXME: Should allocate from normal heap so that we can free this later.
552     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
553     Saved->Param = Info.Param;
554     Saved->FirstArg = Info.FirstArg;
555     Saved->SecondArg = Info.SecondArg;
556     Result.Data = Saved;
557     break;
558   }
559 
560   case Sema::TDK_SubstitutionFailure:
561     Result.Data = Info.take();
562     break;
563 
564   case Sema::TDK_NonDeducedMismatch:
565   case Sema::TDK_FailedOverloadResolution:
566     break;
567   }
568 
569   return Result;
570 }
571 
572 void OverloadCandidate::DeductionFailureInfo::Destroy() {
573   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
574   case Sema::TDK_Success:
575   case Sema::TDK_InstantiationDepth:
576   case Sema::TDK_Incomplete:
577   case Sema::TDK_TooManyArguments:
578   case Sema::TDK_TooFewArguments:
579   case Sema::TDK_InvalidExplicitArguments:
580     break;
581 
582   case Sema::TDK_Inconsistent:
583   case Sema::TDK_Underqualified:
584     // FIXME: Destroy the data?
585     Data = 0;
586     break;
587 
588   case Sema::TDK_SubstitutionFailure:
589     // FIXME: Destroy the template arugment list?
590     Data = 0;
591     break;
592 
593   // Unhandled
594   case Sema::TDK_NonDeducedMismatch:
595   case Sema::TDK_FailedOverloadResolution:
596     break;
597   }
598 }
599 
600 TemplateParameter
601 OverloadCandidate::DeductionFailureInfo::getTemplateParameter() {
602   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
603   case Sema::TDK_Success:
604   case Sema::TDK_InstantiationDepth:
605   case Sema::TDK_TooManyArguments:
606   case Sema::TDK_TooFewArguments:
607   case Sema::TDK_SubstitutionFailure:
608     return TemplateParameter();
609 
610   case Sema::TDK_Incomplete:
611   case Sema::TDK_InvalidExplicitArguments:
612     return TemplateParameter::getFromOpaqueValue(Data);
613 
614   case Sema::TDK_Inconsistent:
615   case Sema::TDK_Underqualified:
616     return static_cast<DFIParamWithArguments*>(Data)->Param;
617 
618   // Unhandled
619   case Sema::TDK_NonDeducedMismatch:
620   case Sema::TDK_FailedOverloadResolution:
621     break;
622   }
623 
624   return TemplateParameter();
625 }
626 
627 TemplateArgumentList *
628 OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() {
629   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
630     case Sema::TDK_Success:
631     case Sema::TDK_InstantiationDepth:
632     case Sema::TDK_TooManyArguments:
633     case Sema::TDK_TooFewArguments:
634     case Sema::TDK_Incomplete:
635     case Sema::TDK_InvalidExplicitArguments:
636     case Sema::TDK_Inconsistent:
637     case Sema::TDK_Underqualified:
638       return 0;
639 
640     case Sema::TDK_SubstitutionFailure:
641       return static_cast<TemplateArgumentList*>(Data);
642 
643     // Unhandled
644     case Sema::TDK_NonDeducedMismatch:
645     case Sema::TDK_FailedOverloadResolution:
646       break;
647   }
648 
649   return 0;
650 }
651 
652 const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() {
653   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
654   case Sema::TDK_Success:
655   case Sema::TDK_InstantiationDepth:
656   case Sema::TDK_Incomplete:
657   case Sema::TDK_TooManyArguments:
658   case Sema::TDK_TooFewArguments:
659   case Sema::TDK_InvalidExplicitArguments:
660   case Sema::TDK_SubstitutionFailure:
661     return 0;
662 
663   case Sema::TDK_Inconsistent:
664   case Sema::TDK_Underqualified:
665     return &static_cast<DFIParamWithArguments*>(Data)->FirstArg;
666 
667   // Unhandled
668   case Sema::TDK_NonDeducedMismatch:
669   case Sema::TDK_FailedOverloadResolution:
670     break;
671   }
672 
673   return 0;
674 }
675 
676 const TemplateArgument *
677 OverloadCandidate::DeductionFailureInfo::getSecondArg() {
678   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
679   case Sema::TDK_Success:
680   case Sema::TDK_InstantiationDepth:
681   case Sema::TDK_Incomplete:
682   case Sema::TDK_TooManyArguments:
683   case Sema::TDK_TooFewArguments:
684   case Sema::TDK_InvalidExplicitArguments:
685   case Sema::TDK_SubstitutionFailure:
686     return 0;
687 
688   case Sema::TDK_Inconsistent:
689   case Sema::TDK_Underqualified:
690     return &static_cast<DFIParamWithArguments*>(Data)->SecondArg;
691 
692   // Unhandled
693   case Sema::TDK_NonDeducedMismatch:
694   case Sema::TDK_FailedOverloadResolution:
695     break;
696   }
697 
698   return 0;
699 }
700 
701 void OverloadCandidateSet::clear() {
702   for (iterator i = begin(), e = end(); i != e; ++i)
703     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
704       i->Conversions[ii].~ImplicitConversionSequence();
705   NumInlineSequences = 0;
706   Candidates.clear();
707   Functions.clear();
708 }
709 
710 namespace {
711   class UnbridgedCastsSet {
712     struct Entry {
713       Expr **Addr;
714       Expr *Saved;
715     };
716     SmallVector<Entry, 2> Entries;
717 
718   public:
719     void save(Sema &S, Expr *&E) {
720       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
721       Entry entry = { &E, E };
722       Entries.push_back(entry);
723       E = S.stripARCUnbridgedCast(E);
724     }
725 
726     void restore() {
727       for (SmallVectorImpl<Entry>::iterator
728              i = Entries.begin(), e = Entries.end(); i != e; ++i)
729         *i->Addr = i->Saved;
730     }
731   };
732 }
733 
734 /// checkPlaceholderForOverload - Do any interesting placeholder-like
735 /// preprocessing on the given expression.
736 ///
737 /// \param unbridgedCasts a collection to which to add unbridged casts;
738 ///   without this, they will be immediately diagnosed as errors
739 ///
740 /// Return true on unrecoverable error.
741 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
742                                         UnbridgedCastsSet *unbridgedCasts = 0) {
743   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
744     // We can't handle overloaded expressions here because overload
745     // resolution might reasonably tweak them.
746     if (placeholder->getKind() == BuiltinType::Overload) return false;
747 
748     // If the context potentially accepts unbridged ARC casts, strip
749     // the unbridged cast and add it to the collection for later restoration.
750     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
751         unbridgedCasts) {
752       unbridgedCasts->save(S, E);
753       return false;
754     }
755 
756     // Go ahead and check everything else.
757     ExprResult result = S.CheckPlaceholderExpr(E);
758     if (result.isInvalid())
759       return true;
760 
761     E = result.take();
762     return false;
763   }
764 
765   // Nothing to do.
766   return false;
767 }
768 
769 /// checkArgPlaceholdersForOverload - Check a set of call operands for
770 /// placeholders.
771 static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args,
772                                             unsigned numArgs,
773                                             UnbridgedCastsSet &unbridged) {
774   for (unsigned i = 0; i != numArgs; ++i)
775     if (checkPlaceholderForOverload(S, args[i], &unbridged))
776       return true;
777 
778   return false;
779 }
780 
781 // IsOverload - Determine whether the given New declaration is an
782 // overload of the declarations in Old. This routine returns false if
783 // New and Old cannot be overloaded, e.g., if New has the same
784 // signature as some function in Old (C++ 1.3.10) or if the Old
785 // declarations aren't functions (or function templates) at all. When
786 // it does return false, MatchedDecl will point to the decl that New
787 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
788 // top of the underlying declaration.
789 //
790 // Example: Given the following input:
791 //
792 //   void f(int, float); // #1
793 //   void f(int, int); // #2
794 //   int f(int, int); // #3
795 //
796 // When we process #1, there is no previous declaration of "f",
797 // so IsOverload will not be used.
798 //
799 // When we process #2, Old contains only the FunctionDecl for #1.  By
800 // comparing the parameter types, we see that #1 and #2 are overloaded
801 // (since they have different signatures), so this routine returns
802 // false; MatchedDecl is unchanged.
803 //
804 // When we process #3, Old is an overload set containing #1 and #2. We
805 // compare the signatures of #3 to #1 (they're overloaded, so we do
806 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
807 // identical (return types of functions are not part of the
808 // signature), IsOverload returns false and MatchedDecl will be set to
809 // point to the FunctionDecl for #2.
810 //
811 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
812 // into a class by a using declaration.  The rules for whether to hide
813 // shadow declarations ignore some properties which otherwise figure
814 // into a function template's signature.
815 Sema::OverloadKind
816 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
817                     NamedDecl *&Match, bool NewIsUsingDecl) {
818   for (LookupResult::iterator I = Old.begin(), E = Old.end();
819          I != E; ++I) {
820     NamedDecl *OldD = *I;
821 
822     bool OldIsUsingDecl = false;
823     if (isa<UsingShadowDecl>(OldD)) {
824       OldIsUsingDecl = true;
825 
826       // We can always introduce two using declarations into the same
827       // context, even if they have identical signatures.
828       if (NewIsUsingDecl) continue;
829 
830       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
831     }
832 
833     // If either declaration was introduced by a using declaration,
834     // we'll need to use slightly different rules for matching.
835     // Essentially, these rules are the normal rules, except that
836     // function templates hide function templates with different
837     // return types or template parameter lists.
838     bool UseMemberUsingDeclRules =
839       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord();
840 
841     if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
842       if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
843         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
844           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
845           continue;
846         }
847 
848         Match = *I;
849         return Ovl_Match;
850       }
851     } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
852       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
853         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
854           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
855           continue;
856         }
857 
858         Match = *I;
859         return Ovl_Match;
860       }
861     } else if (isa<UsingDecl>(OldD)) {
862       // We can overload with these, which can show up when doing
863       // redeclaration checks for UsingDecls.
864       assert(Old.getLookupKind() == LookupUsingDeclName);
865     } else if (isa<TagDecl>(OldD)) {
866       // We can always overload with tags by hiding them.
867     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
868       // Optimistically assume that an unresolved using decl will
869       // overload; if it doesn't, we'll have to diagnose during
870       // template instantiation.
871     } else {
872       // (C++ 13p1):
873       //   Only function declarations can be overloaded; object and type
874       //   declarations cannot be overloaded.
875       Match = *I;
876       return Ovl_NonFunction;
877     }
878   }
879 
880   return Ovl_Overload;
881 }
882 
883 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
884                       bool UseUsingDeclRules) {
885   // If both of the functions are extern "C", then they are not
886   // overloads.
887   if (Old->isExternC() && New->isExternC())
888     return false;
889 
890   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
891   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
892 
893   // C++ [temp.fct]p2:
894   //   A function template can be overloaded with other function templates
895   //   and with normal (non-template) functions.
896   if ((OldTemplate == 0) != (NewTemplate == 0))
897     return true;
898 
899   // Is the function New an overload of the function Old?
900   QualType OldQType = Context.getCanonicalType(Old->getType());
901   QualType NewQType = Context.getCanonicalType(New->getType());
902 
903   // Compare the signatures (C++ 1.3.10) of the two functions to
904   // determine whether they are overloads. If we find any mismatch
905   // in the signature, they are overloads.
906 
907   // If either of these functions is a K&R-style function (no
908   // prototype), then we consider them to have matching signatures.
909   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
910       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
911     return false;
912 
913   const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
914   const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
915 
916   // The signature of a function includes the types of its
917   // parameters (C++ 1.3.10), which includes the presence or absence
918   // of the ellipsis; see C++ DR 357).
919   if (OldQType != NewQType &&
920       (OldType->getNumArgs() != NewType->getNumArgs() ||
921        OldType->isVariadic() != NewType->isVariadic() ||
922        !FunctionArgTypesAreEqual(OldType, NewType)))
923     return true;
924 
925   // C++ [temp.over.link]p4:
926   //   The signature of a function template consists of its function
927   //   signature, its return type and its template parameter list. The names
928   //   of the template parameters are significant only for establishing the
929   //   relationship between the template parameters and the rest of the
930   //   signature.
931   //
932   // We check the return type and template parameter lists for function
933   // templates first; the remaining checks follow.
934   //
935   // However, we don't consider either of these when deciding whether
936   // a member introduced by a shadow declaration is hidden.
937   if (!UseUsingDeclRules && NewTemplate &&
938       (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
939                                        OldTemplate->getTemplateParameters(),
940                                        false, TPL_TemplateMatch) ||
941        OldType->getResultType() != NewType->getResultType()))
942     return true;
943 
944   // If the function is a class member, its signature includes the
945   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
946   //
947   // As part of this, also check whether one of the member functions
948   // is static, in which case they are not overloads (C++
949   // 13.1p2). While not part of the definition of the signature,
950   // this check is important to determine whether these functions
951   // can be overloaded.
952   CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
953   CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
954   if (OldMethod && NewMethod &&
955       !OldMethod->isStatic() && !NewMethod->isStatic() &&
956       (OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers() ||
957        OldMethod->getRefQualifier() != NewMethod->getRefQualifier())) {
958     if (!UseUsingDeclRules &&
959         OldMethod->getRefQualifier() != NewMethod->getRefQualifier() &&
960         (OldMethod->getRefQualifier() == RQ_None ||
961          NewMethod->getRefQualifier() == RQ_None)) {
962       // C++0x [over.load]p2:
963       //   - Member function declarations with the same name and the same
964       //     parameter-type-list as well as member function template
965       //     declarations with the same name, the same parameter-type-list, and
966       //     the same template parameter lists cannot be overloaded if any of
967       //     them, but not all, have a ref-qualifier (8.3.5).
968       Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
969         << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
970       Diag(OldMethod->getLocation(), diag::note_previous_declaration);
971     }
972 
973     return true;
974   }
975 
976   // The signatures match; this is not an overload.
977   return false;
978 }
979 
980 /// \brief Checks availability of the function depending on the current
981 /// function context. Inside an unavailable function, unavailability is ignored.
982 ///
983 /// \returns true if \arg FD is unavailable and current context is inside
984 /// an available function, false otherwise.
985 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
986   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
987 }
988 
989 /// \brief Tries a user-defined conversion from From to ToType.
990 ///
991 /// Produces an implicit conversion sequence for when a standard conversion
992 /// is not an option. See TryImplicitConversion for more information.
993 static ImplicitConversionSequence
994 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
995                          bool SuppressUserConversions,
996                          bool AllowExplicit,
997                          bool InOverloadResolution,
998                          bool CStyle,
999                          bool AllowObjCWritebackConversion) {
1000   ImplicitConversionSequence ICS;
1001 
1002   if (SuppressUserConversions) {
1003     // We're not in the case above, so there is no conversion that
1004     // we can perform.
1005     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1006     return ICS;
1007   }
1008 
1009   // Attempt user-defined conversion.
1010   OverloadCandidateSet Conversions(From->getExprLoc());
1011   OverloadingResult UserDefResult
1012     = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1013                               AllowExplicit);
1014 
1015   if (UserDefResult == OR_Success) {
1016     ICS.setUserDefined();
1017     // C++ [over.ics.user]p4:
1018     //   A conversion of an expression of class type to the same class
1019     //   type is given Exact Match rank, and a conversion of an
1020     //   expression of class type to a base class of that type is
1021     //   given Conversion rank, in spite of the fact that a copy
1022     //   constructor (i.e., a user-defined conversion function) is
1023     //   called for those cases.
1024     if (CXXConstructorDecl *Constructor
1025           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1026       QualType FromCanon
1027         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1028       QualType ToCanon
1029         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1030       if (Constructor->isCopyConstructor() &&
1031           (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1032         // Turn this into a "standard" conversion sequence, so that it
1033         // gets ranked with standard conversion sequences.
1034         ICS.setStandard();
1035         ICS.Standard.setAsIdentityConversion();
1036         ICS.Standard.setFromType(From->getType());
1037         ICS.Standard.setAllToTypes(ToType);
1038         ICS.Standard.CopyConstructor = Constructor;
1039         if (ToCanon != FromCanon)
1040           ICS.Standard.Second = ICK_Derived_To_Base;
1041       }
1042     }
1043 
1044     // C++ [over.best.ics]p4:
1045     //   However, when considering the argument of a user-defined
1046     //   conversion function that is a candidate by 13.3.1.3 when
1047     //   invoked for the copying of the temporary in the second step
1048     //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1049     //   13.3.1.6 in all cases, only standard conversion sequences and
1050     //   ellipsis conversion sequences are allowed.
1051     if (SuppressUserConversions && ICS.isUserDefined()) {
1052       ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1053     }
1054   } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1055     ICS.setAmbiguous();
1056     ICS.Ambiguous.setFromType(From->getType());
1057     ICS.Ambiguous.setToType(ToType);
1058     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1059          Cand != Conversions.end(); ++Cand)
1060       if (Cand->Viable)
1061         ICS.Ambiguous.addConversion(Cand->Function);
1062   } else {
1063     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1064   }
1065 
1066   return ICS;
1067 }
1068 
1069 /// TryImplicitConversion - Attempt to perform an implicit conversion
1070 /// from the given expression (Expr) to the given type (ToType). This
1071 /// function returns an implicit conversion sequence that can be used
1072 /// to perform the initialization. Given
1073 ///
1074 ///   void f(float f);
1075 ///   void g(int i) { f(i); }
1076 ///
1077 /// this routine would produce an implicit conversion sequence to
1078 /// describe the initialization of f from i, which will be a standard
1079 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1080 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1081 //
1082 /// Note that this routine only determines how the conversion can be
1083 /// performed; it does not actually perform the conversion. As such,
1084 /// it will not produce any diagnostics if no conversion is available,
1085 /// but will instead return an implicit conversion sequence of kind
1086 /// "BadConversion".
1087 ///
1088 /// If @p SuppressUserConversions, then user-defined conversions are
1089 /// not permitted.
1090 /// If @p AllowExplicit, then explicit user-defined conversions are
1091 /// permitted.
1092 ///
1093 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1094 /// writeback conversion, which allows __autoreleasing id* parameters to
1095 /// be initialized with __strong id* or __weak id* arguments.
1096 static ImplicitConversionSequence
1097 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1098                       bool SuppressUserConversions,
1099                       bool AllowExplicit,
1100                       bool InOverloadResolution,
1101                       bool CStyle,
1102                       bool AllowObjCWritebackConversion) {
1103   ImplicitConversionSequence ICS;
1104   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1105                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1106     ICS.setStandard();
1107     return ICS;
1108   }
1109 
1110   if (!S.getLangOptions().CPlusPlus) {
1111     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1112     return ICS;
1113   }
1114 
1115   // C++ [over.ics.user]p4:
1116   //   A conversion of an expression of class type to the same class
1117   //   type is given Exact Match rank, and a conversion of an
1118   //   expression of class type to a base class of that type is
1119   //   given Conversion rank, in spite of the fact that a copy/move
1120   //   constructor (i.e., a user-defined conversion function) is
1121   //   called for those cases.
1122   QualType FromType = From->getType();
1123   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1124       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1125        S.IsDerivedFrom(FromType, ToType))) {
1126     ICS.setStandard();
1127     ICS.Standard.setAsIdentityConversion();
1128     ICS.Standard.setFromType(FromType);
1129     ICS.Standard.setAllToTypes(ToType);
1130 
1131     // We don't actually check at this point whether there is a valid
1132     // copy/move constructor, since overloading just assumes that it
1133     // exists. When we actually perform initialization, we'll find the
1134     // appropriate constructor to copy the returned object, if needed.
1135     ICS.Standard.CopyConstructor = 0;
1136 
1137     // Determine whether this is considered a derived-to-base conversion.
1138     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1139       ICS.Standard.Second = ICK_Derived_To_Base;
1140 
1141     return ICS;
1142   }
1143 
1144   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1145                                   AllowExplicit, InOverloadResolution, CStyle,
1146                                   AllowObjCWritebackConversion);
1147 }
1148 
1149 ImplicitConversionSequence
1150 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1151                             bool SuppressUserConversions,
1152                             bool AllowExplicit,
1153                             bool InOverloadResolution,
1154                             bool CStyle,
1155                             bool AllowObjCWritebackConversion) {
1156   return clang::TryImplicitConversion(*this, From, ToType,
1157                                       SuppressUserConversions, AllowExplicit,
1158                                       InOverloadResolution, CStyle,
1159                                       AllowObjCWritebackConversion);
1160 }
1161 
1162 /// PerformImplicitConversion - Perform an implicit conversion of the
1163 /// expression From to the type ToType. Returns the
1164 /// converted expression. Flavor is the kind of conversion we're
1165 /// performing, used in the error message. If @p AllowExplicit,
1166 /// explicit user-defined conversions are permitted.
1167 ExprResult
1168 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1169                                 AssignmentAction Action, bool AllowExplicit) {
1170   ImplicitConversionSequence ICS;
1171   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1172 }
1173 
1174 ExprResult
1175 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1176                                 AssignmentAction Action, bool AllowExplicit,
1177                                 ImplicitConversionSequence& ICS) {
1178   if (checkPlaceholderForOverload(*this, From))
1179     return ExprError();
1180 
1181   // Objective-C ARC: Determine whether we will allow the writeback conversion.
1182   bool AllowObjCWritebackConversion
1183     = getLangOptions().ObjCAutoRefCount &&
1184       (Action == AA_Passing || Action == AA_Sending);
1185 
1186   ICS = clang::TryImplicitConversion(*this, From, ToType,
1187                                      /*SuppressUserConversions=*/false,
1188                                      AllowExplicit,
1189                                      /*InOverloadResolution=*/false,
1190                                      /*CStyle=*/false,
1191                                      AllowObjCWritebackConversion);
1192   return PerformImplicitConversion(From, ToType, ICS, Action);
1193 }
1194 
1195 /// \brief Determine whether the conversion from FromType to ToType is a valid
1196 /// conversion that strips "noreturn" off the nested function type.
1197 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1198                                 QualType &ResultTy) {
1199   if (Context.hasSameUnqualifiedType(FromType, ToType))
1200     return false;
1201 
1202   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1203   // where F adds one of the following at most once:
1204   //   - a pointer
1205   //   - a member pointer
1206   //   - a block pointer
1207   CanQualType CanTo = Context.getCanonicalType(ToType);
1208   CanQualType CanFrom = Context.getCanonicalType(FromType);
1209   Type::TypeClass TyClass = CanTo->getTypeClass();
1210   if (TyClass != CanFrom->getTypeClass()) return false;
1211   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1212     if (TyClass == Type::Pointer) {
1213       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1214       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1215     } else if (TyClass == Type::BlockPointer) {
1216       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1217       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1218     } else if (TyClass == Type::MemberPointer) {
1219       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1220       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1221     } else {
1222       return false;
1223     }
1224 
1225     TyClass = CanTo->getTypeClass();
1226     if (TyClass != CanFrom->getTypeClass()) return false;
1227     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1228       return false;
1229   }
1230 
1231   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1232   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1233   if (!EInfo.getNoReturn()) return false;
1234 
1235   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1236   assert(QualType(FromFn, 0).isCanonical());
1237   if (QualType(FromFn, 0) != CanTo) return false;
1238 
1239   ResultTy = ToType;
1240   return true;
1241 }
1242 
1243 /// \brief Determine whether the conversion from FromType to ToType is a valid
1244 /// vector conversion.
1245 ///
1246 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1247 /// conversion.
1248 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1249                                QualType ToType, ImplicitConversionKind &ICK) {
1250   // We need at least one of these types to be a vector type to have a vector
1251   // conversion.
1252   if (!ToType->isVectorType() && !FromType->isVectorType())
1253     return false;
1254 
1255   // Identical types require no conversions.
1256   if (Context.hasSameUnqualifiedType(FromType, ToType))
1257     return false;
1258 
1259   // There are no conversions between extended vector types, only identity.
1260   if (ToType->isExtVectorType()) {
1261     // There are no conversions between extended vector types other than the
1262     // identity conversion.
1263     if (FromType->isExtVectorType())
1264       return false;
1265 
1266     // Vector splat from any arithmetic type to a vector.
1267     if (FromType->isArithmeticType()) {
1268       ICK = ICK_Vector_Splat;
1269       return true;
1270     }
1271   }
1272 
1273   // We can perform the conversion between vector types in the following cases:
1274   // 1)vector types are equivalent AltiVec and GCC vector types
1275   // 2)lax vector conversions are permitted and the vector types are of the
1276   //   same size
1277   if (ToType->isVectorType() && FromType->isVectorType()) {
1278     if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1279         (Context.getLangOptions().LaxVectorConversions &&
1280          (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1281       ICK = ICK_Vector_Conversion;
1282       return true;
1283     }
1284   }
1285 
1286   return false;
1287 }
1288 
1289 /// IsStandardConversion - Determines whether there is a standard
1290 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1291 /// expression From to the type ToType. Standard conversion sequences
1292 /// only consider non-class types; for conversions that involve class
1293 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1294 /// contain the standard conversion sequence required to perform this
1295 /// conversion and this routine will return true. Otherwise, this
1296 /// routine will return false and the value of SCS is unspecified.
1297 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1298                                  bool InOverloadResolution,
1299                                  StandardConversionSequence &SCS,
1300                                  bool CStyle,
1301                                  bool AllowObjCWritebackConversion) {
1302   QualType FromType = From->getType();
1303 
1304   // Standard conversions (C++ [conv])
1305   SCS.setAsIdentityConversion();
1306   SCS.DeprecatedStringLiteralToCharPtr = false;
1307   SCS.IncompatibleObjC = false;
1308   SCS.setFromType(FromType);
1309   SCS.CopyConstructor = 0;
1310 
1311   // There are no standard conversions for class types in C++, so
1312   // abort early. When overloading in C, however, we do permit
1313   if (FromType->isRecordType() || ToType->isRecordType()) {
1314     if (S.getLangOptions().CPlusPlus)
1315       return false;
1316 
1317     // When we're overloading in C, we allow, as standard conversions,
1318   }
1319 
1320   // The first conversion can be an lvalue-to-rvalue conversion,
1321   // array-to-pointer conversion, or function-to-pointer conversion
1322   // (C++ 4p1).
1323 
1324   if (FromType == S.Context.OverloadTy) {
1325     DeclAccessPair AccessPair;
1326     if (FunctionDecl *Fn
1327           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1328                                                  AccessPair)) {
1329       // We were able to resolve the address of the overloaded function,
1330       // so we can convert to the type of that function.
1331       FromType = Fn->getType();
1332 
1333       // we can sometimes resolve &foo<int> regardless of ToType, so check
1334       // if the type matches (identity) or we are converting to bool
1335       if (!S.Context.hasSameUnqualifiedType(
1336                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1337         QualType resultTy;
1338         // if the function type matches except for [[noreturn]], it's ok
1339         if (!S.IsNoReturnConversion(FromType,
1340               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1341           // otherwise, only a boolean conversion is standard
1342           if (!ToType->isBooleanType())
1343             return false;
1344       }
1345 
1346       // Check if the "from" expression is taking the address of an overloaded
1347       // function and recompute the FromType accordingly. Take advantage of the
1348       // fact that non-static member functions *must* have such an address-of
1349       // expression.
1350       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1351       if (Method && !Method->isStatic()) {
1352         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1353                "Non-unary operator on non-static member address");
1354         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1355                == UO_AddrOf &&
1356                "Non-address-of operator on non-static member address");
1357         const Type *ClassType
1358           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1359         FromType = S.Context.getMemberPointerType(FromType, ClassType);
1360       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1361         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1362                UO_AddrOf &&
1363                "Non-address-of operator for overloaded function expression");
1364         FromType = S.Context.getPointerType(FromType);
1365       }
1366 
1367       // Check that we've computed the proper type after overload resolution.
1368       assert(S.Context.hasSameType(
1369         FromType,
1370         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1371     } else {
1372       return false;
1373     }
1374   }
1375   // Lvalue-to-rvalue conversion (C++11 4.1):
1376   //   A glvalue (3.10) of a non-function, non-array type T can
1377   //   be converted to a prvalue.
1378   bool argIsLValue = From->isGLValue();
1379   if (argIsLValue &&
1380       !FromType->isFunctionType() && !FromType->isArrayType() &&
1381       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1382     SCS.First = ICK_Lvalue_To_Rvalue;
1383 
1384     // If T is a non-class type, the type of the rvalue is the
1385     // cv-unqualified version of T. Otherwise, the type of the rvalue
1386     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1387     // just strip the qualifiers because they don't matter.
1388     FromType = FromType.getUnqualifiedType();
1389   } else if (FromType->isArrayType()) {
1390     // Array-to-pointer conversion (C++ 4.2)
1391     SCS.First = ICK_Array_To_Pointer;
1392 
1393     // An lvalue or rvalue of type "array of N T" or "array of unknown
1394     // bound of T" can be converted to an rvalue of type "pointer to
1395     // T" (C++ 4.2p1).
1396     FromType = S.Context.getArrayDecayedType(FromType);
1397 
1398     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1399       // This conversion is deprecated. (C++ D.4).
1400       SCS.DeprecatedStringLiteralToCharPtr = true;
1401 
1402       // For the purpose of ranking in overload resolution
1403       // (13.3.3.1.1), this conversion is considered an
1404       // array-to-pointer conversion followed by a qualification
1405       // conversion (4.4). (C++ 4.2p2)
1406       SCS.Second = ICK_Identity;
1407       SCS.Third = ICK_Qualification;
1408       SCS.QualificationIncludesObjCLifetime = false;
1409       SCS.setAllToTypes(FromType);
1410       return true;
1411     }
1412   } else if (FromType->isFunctionType() && argIsLValue) {
1413     // Function-to-pointer conversion (C++ 4.3).
1414     SCS.First = ICK_Function_To_Pointer;
1415 
1416     // An lvalue of function type T can be converted to an rvalue of
1417     // type "pointer to T." The result is a pointer to the
1418     // function. (C++ 4.3p1).
1419     FromType = S.Context.getPointerType(FromType);
1420   } else {
1421     // We don't require any conversions for the first step.
1422     SCS.First = ICK_Identity;
1423   }
1424   SCS.setToType(0, FromType);
1425 
1426   // The second conversion can be an integral promotion, floating
1427   // point promotion, integral conversion, floating point conversion,
1428   // floating-integral conversion, pointer conversion,
1429   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1430   // For overloading in C, this can also be a "compatible-type"
1431   // conversion.
1432   bool IncompatibleObjC = false;
1433   ImplicitConversionKind SecondICK = ICK_Identity;
1434   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1435     // The unqualified versions of the types are the same: there's no
1436     // conversion to do.
1437     SCS.Second = ICK_Identity;
1438   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1439     // Integral promotion (C++ 4.5).
1440     SCS.Second = ICK_Integral_Promotion;
1441     FromType = ToType.getUnqualifiedType();
1442   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1443     // Floating point promotion (C++ 4.6).
1444     SCS.Second = ICK_Floating_Promotion;
1445     FromType = ToType.getUnqualifiedType();
1446   } else if (S.IsComplexPromotion(FromType, ToType)) {
1447     // Complex promotion (Clang extension)
1448     SCS.Second = ICK_Complex_Promotion;
1449     FromType = ToType.getUnqualifiedType();
1450   } else if (ToType->isBooleanType() &&
1451              (FromType->isArithmeticType() ||
1452               FromType->isAnyPointerType() ||
1453               FromType->isBlockPointerType() ||
1454               FromType->isMemberPointerType() ||
1455               FromType->isNullPtrType())) {
1456     // Boolean conversions (C++ 4.12).
1457     SCS.Second = ICK_Boolean_Conversion;
1458     FromType = S.Context.BoolTy;
1459   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1460              ToType->isIntegralType(S.Context)) {
1461     // Integral conversions (C++ 4.7).
1462     SCS.Second = ICK_Integral_Conversion;
1463     FromType = ToType.getUnqualifiedType();
1464   } else if (FromType->isAnyComplexType() && ToType->isComplexType()) {
1465     // Complex conversions (C99 6.3.1.6)
1466     SCS.Second = ICK_Complex_Conversion;
1467     FromType = ToType.getUnqualifiedType();
1468   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1469              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1470     // Complex-real conversions (C99 6.3.1.7)
1471     SCS.Second = ICK_Complex_Real;
1472     FromType = ToType.getUnqualifiedType();
1473   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1474     // Floating point conversions (C++ 4.8).
1475     SCS.Second = ICK_Floating_Conversion;
1476     FromType = ToType.getUnqualifiedType();
1477   } else if ((FromType->isRealFloatingType() &&
1478               ToType->isIntegralType(S.Context)) ||
1479              (FromType->isIntegralOrUnscopedEnumerationType() &&
1480               ToType->isRealFloatingType())) {
1481     // Floating-integral conversions (C++ 4.9).
1482     SCS.Second = ICK_Floating_Integral;
1483     FromType = ToType.getUnqualifiedType();
1484   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1485     SCS.Second = ICK_Block_Pointer_Conversion;
1486   } else if (AllowObjCWritebackConversion &&
1487              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1488     SCS.Second = ICK_Writeback_Conversion;
1489   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1490                                    FromType, IncompatibleObjC)) {
1491     // Pointer conversions (C++ 4.10).
1492     SCS.Second = ICK_Pointer_Conversion;
1493     SCS.IncompatibleObjC = IncompatibleObjC;
1494     FromType = FromType.getUnqualifiedType();
1495   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1496                                          InOverloadResolution, FromType)) {
1497     // Pointer to member conversions (4.11).
1498     SCS.Second = ICK_Pointer_Member;
1499   } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1500     SCS.Second = SecondICK;
1501     FromType = ToType.getUnqualifiedType();
1502   } else if (!S.getLangOptions().CPlusPlus &&
1503              S.Context.typesAreCompatible(ToType, FromType)) {
1504     // Compatible conversions (Clang extension for C function overloading)
1505     SCS.Second = ICK_Compatible_Conversion;
1506     FromType = ToType.getUnqualifiedType();
1507   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1508     // Treat a conversion that strips "noreturn" as an identity conversion.
1509     SCS.Second = ICK_NoReturn_Adjustment;
1510   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1511                                              InOverloadResolution,
1512                                              SCS, CStyle)) {
1513     SCS.Second = ICK_TransparentUnionConversion;
1514     FromType = ToType;
1515   } else {
1516     // No second conversion required.
1517     SCS.Second = ICK_Identity;
1518   }
1519   SCS.setToType(1, FromType);
1520 
1521   QualType CanonFrom;
1522   QualType CanonTo;
1523   // The third conversion can be a qualification conversion (C++ 4p1).
1524   bool ObjCLifetimeConversion;
1525   if (S.IsQualificationConversion(FromType, ToType, CStyle,
1526                                   ObjCLifetimeConversion)) {
1527     SCS.Third = ICK_Qualification;
1528     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1529     FromType = ToType;
1530     CanonFrom = S.Context.getCanonicalType(FromType);
1531     CanonTo = S.Context.getCanonicalType(ToType);
1532   } else {
1533     // No conversion required
1534     SCS.Third = ICK_Identity;
1535 
1536     // C++ [over.best.ics]p6:
1537     //   [...] Any difference in top-level cv-qualification is
1538     //   subsumed by the initialization itself and does not constitute
1539     //   a conversion. [...]
1540     CanonFrom = S.Context.getCanonicalType(FromType);
1541     CanonTo = S.Context.getCanonicalType(ToType);
1542     if (CanonFrom.getLocalUnqualifiedType()
1543                                        == CanonTo.getLocalUnqualifiedType() &&
1544         (CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers()
1545          || CanonFrom.getObjCGCAttr() != CanonTo.getObjCGCAttr()
1546          || CanonFrom.getObjCLifetime() != CanonTo.getObjCLifetime())) {
1547       FromType = ToType;
1548       CanonFrom = CanonTo;
1549     }
1550   }
1551   SCS.setToType(2, FromType);
1552 
1553   // If we have not converted the argument type to the parameter type,
1554   // this is a bad conversion sequence.
1555   if (CanonFrom != CanonTo)
1556     return false;
1557 
1558   return true;
1559 }
1560 
1561 static bool
1562 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1563                                      QualType &ToType,
1564                                      bool InOverloadResolution,
1565                                      StandardConversionSequence &SCS,
1566                                      bool CStyle) {
1567 
1568   const RecordType *UT = ToType->getAsUnionType();
1569   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1570     return false;
1571   // The field to initialize within the transparent union.
1572   RecordDecl *UD = UT->getDecl();
1573   // It's compatible if the expression matches any of the fields.
1574   for (RecordDecl::field_iterator it = UD->field_begin(),
1575        itend = UD->field_end();
1576        it != itend; ++it) {
1577     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1578                              CStyle, /*ObjCWritebackConversion=*/false)) {
1579       ToType = it->getType();
1580       return true;
1581     }
1582   }
1583   return false;
1584 }
1585 
1586 /// IsIntegralPromotion - Determines whether the conversion from the
1587 /// expression From (whose potentially-adjusted type is FromType) to
1588 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1589 /// sets PromotedType to the promoted type.
1590 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1591   const BuiltinType *To = ToType->getAs<BuiltinType>();
1592   // All integers are built-in.
1593   if (!To) {
1594     return false;
1595   }
1596 
1597   // An rvalue of type char, signed char, unsigned char, short int, or
1598   // unsigned short int can be converted to an rvalue of type int if
1599   // int can represent all the values of the source type; otherwise,
1600   // the source rvalue can be converted to an rvalue of type unsigned
1601   // int (C++ 4.5p1).
1602   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1603       !FromType->isEnumeralType()) {
1604     if (// We can promote any signed, promotable integer type to an int
1605         (FromType->isSignedIntegerType() ||
1606          // We can promote any unsigned integer type whose size is
1607          // less than int to an int.
1608          (!FromType->isSignedIntegerType() &&
1609           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1610       return To->getKind() == BuiltinType::Int;
1611     }
1612 
1613     return To->getKind() == BuiltinType::UInt;
1614   }
1615 
1616   // C++0x [conv.prom]p3:
1617   //   A prvalue of an unscoped enumeration type whose underlying type is not
1618   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1619   //   following types that can represent all the values of the enumeration
1620   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1621   //   unsigned int, long int, unsigned long int, long long int, or unsigned
1622   //   long long int. If none of the types in that list can represent all the
1623   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1624   //   type can be converted to an rvalue a prvalue of the extended integer type
1625   //   with lowest integer conversion rank (4.13) greater than the rank of long
1626   //   long in which all the values of the enumeration can be represented. If
1627   //   there are two such extended types, the signed one is chosen.
1628   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1629     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1630     // provided for a scoped enumeration.
1631     if (FromEnumType->getDecl()->isScoped())
1632       return false;
1633 
1634     // We have already pre-calculated the promotion type, so this is trivial.
1635     if (ToType->isIntegerType() &&
1636         !RequireCompleteType(From->getLocStart(), FromType, PDiag()))
1637       return Context.hasSameUnqualifiedType(ToType,
1638                                 FromEnumType->getDecl()->getPromotionType());
1639   }
1640 
1641   // C++0x [conv.prom]p2:
1642   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1643   //   to an rvalue a prvalue of the first of the following types that can
1644   //   represent all the values of its underlying type: int, unsigned int,
1645   //   long int, unsigned long int, long long int, or unsigned long long int.
1646   //   If none of the types in that list can represent all the values of its
1647   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1648   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1649   //   type.
1650   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1651       ToType->isIntegerType()) {
1652     // Determine whether the type we're converting from is signed or
1653     // unsigned.
1654     bool FromIsSigned = FromType->isSignedIntegerType();
1655     uint64_t FromSize = Context.getTypeSize(FromType);
1656 
1657     // The types we'll try to promote to, in the appropriate
1658     // order. Try each of these types.
1659     QualType PromoteTypes[6] = {
1660       Context.IntTy, Context.UnsignedIntTy,
1661       Context.LongTy, Context.UnsignedLongTy ,
1662       Context.LongLongTy, Context.UnsignedLongLongTy
1663     };
1664     for (int Idx = 0; Idx < 6; ++Idx) {
1665       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1666       if (FromSize < ToSize ||
1667           (FromSize == ToSize &&
1668            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1669         // We found the type that we can promote to. If this is the
1670         // type we wanted, we have a promotion. Otherwise, no
1671         // promotion.
1672         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1673       }
1674     }
1675   }
1676 
1677   // An rvalue for an integral bit-field (9.6) can be converted to an
1678   // rvalue of type int if int can represent all the values of the
1679   // bit-field; otherwise, it can be converted to unsigned int if
1680   // unsigned int can represent all the values of the bit-field. If
1681   // the bit-field is larger yet, no integral promotion applies to
1682   // it. If the bit-field has an enumerated type, it is treated as any
1683   // other value of that type for promotion purposes (C++ 4.5p3).
1684   // FIXME: We should delay checking of bit-fields until we actually perform the
1685   // conversion.
1686   using llvm::APSInt;
1687   if (From)
1688     if (FieldDecl *MemberDecl = From->getBitField()) {
1689       APSInt BitWidth;
1690       if (FromType->isIntegralType(Context) &&
1691           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1692         APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1693         ToSize = Context.getTypeSize(ToType);
1694 
1695         // Are we promoting to an int from a bitfield that fits in an int?
1696         if (BitWidth < ToSize ||
1697             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1698           return To->getKind() == BuiltinType::Int;
1699         }
1700 
1701         // Are we promoting to an unsigned int from an unsigned bitfield
1702         // that fits into an unsigned int?
1703         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1704           return To->getKind() == BuiltinType::UInt;
1705         }
1706 
1707         return false;
1708       }
1709     }
1710 
1711   // An rvalue of type bool can be converted to an rvalue of type int,
1712   // with false becoming zero and true becoming one (C++ 4.5p4).
1713   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1714     return true;
1715   }
1716 
1717   return false;
1718 }
1719 
1720 /// IsFloatingPointPromotion - Determines whether the conversion from
1721 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1722 /// returns true and sets PromotedType to the promoted type.
1723 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1724   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1725     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1726       /// An rvalue of type float can be converted to an rvalue of type
1727       /// double. (C++ 4.6p1).
1728       if (FromBuiltin->getKind() == BuiltinType::Float &&
1729           ToBuiltin->getKind() == BuiltinType::Double)
1730         return true;
1731 
1732       // C99 6.3.1.5p1:
1733       //   When a float is promoted to double or long double, or a
1734       //   double is promoted to long double [...].
1735       if (!getLangOptions().CPlusPlus &&
1736           (FromBuiltin->getKind() == BuiltinType::Float ||
1737            FromBuiltin->getKind() == BuiltinType::Double) &&
1738           (ToBuiltin->getKind() == BuiltinType::LongDouble))
1739         return true;
1740 
1741       // Half can be promoted to float.
1742       if (FromBuiltin->getKind() == BuiltinType::Half &&
1743           ToBuiltin->getKind() == BuiltinType::Float)
1744         return true;
1745     }
1746 
1747   return false;
1748 }
1749 
1750 /// \brief Determine if a conversion is a complex promotion.
1751 ///
1752 /// A complex promotion is defined as a complex -> complex conversion
1753 /// where the conversion between the underlying real types is a
1754 /// floating-point or integral promotion.
1755 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1756   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1757   if (!FromComplex)
1758     return false;
1759 
1760   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1761   if (!ToComplex)
1762     return false;
1763 
1764   return IsFloatingPointPromotion(FromComplex->getElementType(),
1765                                   ToComplex->getElementType()) ||
1766     IsIntegralPromotion(0, FromComplex->getElementType(),
1767                         ToComplex->getElementType());
1768 }
1769 
1770 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1771 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1772 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1773 /// if non-empty, will be a pointer to ToType that may or may not have
1774 /// the right set of qualifiers on its pointee.
1775 ///
1776 static QualType
1777 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1778                                    QualType ToPointee, QualType ToType,
1779                                    ASTContext &Context,
1780                                    bool StripObjCLifetime = false) {
1781   assert((FromPtr->getTypeClass() == Type::Pointer ||
1782           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1783          "Invalid similarly-qualified pointer type");
1784 
1785   /// Conversions to 'id' subsume cv-qualifier conversions.
1786   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1787     return ToType.getUnqualifiedType();
1788 
1789   QualType CanonFromPointee
1790     = Context.getCanonicalType(FromPtr->getPointeeType());
1791   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1792   Qualifiers Quals = CanonFromPointee.getQualifiers();
1793 
1794   if (StripObjCLifetime)
1795     Quals.removeObjCLifetime();
1796 
1797   // Exact qualifier match -> return the pointer type we're converting to.
1798   if (CanonToPointee.getLocalQualifiers() == Quals) {
1799     // ToType is exactly what we need. Return it.
1800     if (!ToType.isNull())
1801       return ToType.getUnqualifiedType();
1802 
1803     // Build a pointer to ToPointee. It has the right qualifiers
1804     // already.
1805     if (isa<ObjCObjectPointerType>(ToType))
1806       return Context.getObjCObjectPointerType(ToPointee);
1807     return Context.getPointerType(ToPointee);
1808   }
1809 
1810   // Just build a canonical type that has the right qualifiers.
1811   QualType QualifiedCanonToPointee
1812     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1813 
1814   if (isa<ObjCObjectPointerType>(ToType))
1815     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1816   return Context.getPointerType(QualifiedCanonToPointee);
1817 }
1818 
1819 static bool isNullPointerConstantForConversion(Expr *Expr,
1820                                                bool InOverloadResolution,
1821                                                ASTContext &Context) {
1822   // Handle value-dependent integral null pointer constants correctly.
1823   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1824   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1825       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1826     return !InOverloadResolution;
1827 
1828   return Expr->isNullPointerConstant(Context,
1829                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1830                                         : Expr::NPC_ValueDependentIsNull);
1831 }
1832 
1833 /// IsPointerConversion - Determines whether the conversion of the
1834 /// expression From, which has the (possibly adjusted) type FromType,
1835 /// can be converted to the type ToType via a pointer conversion (C++
1836 /// 4.10). If so, returns true and places the converted type (that
1837 /// might differ from ToType in its cv-qualifiers at some level) into
1838 /// ConvertedType.
1839 ///
1840 /// This routine also supports conversions to and from block pointers
1841 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
1842 /// pointers to interfaces. FIXME: Once we've determined the
1843 /// appropriate overloading rules for Objective-C, we may want to
1844 /// split the Objective-C checks into a different routine; however,
1845 /// GCC seems to consider all of these conversions to be pointer
1846 /// conversions, so for now they live here. IncompatibleObjC will be
1847 /// set if the conversion is an allowed Objective-C conversion that
1848 /// should result in a warning.
1849 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
1850                                bool InOverloadResolution,
1851                                QualType& ConvertedType,
1852                                bool &IncompatibleObjC) {
1853   IncompatibleObjC = false;
1854   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
1855                               IncompatibleObjC))
1856     return true;
1857 
1858   // Conversion from a null pointer constant to any Objective-C pointer type.
1859   if (ToType->isObjCObjectPointerType() &&
1860       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1861     ConvertedType = ToType;
1862     return true;
1863   }
1864 
1865   // Blocks: Block pointers can be converted to void*.
1866   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
1867       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
1868     ConvertedType = ToType;
1869     return true;
1870   }
1871   // Blocks: A null pointer constant can be converted to a block
1872   // pointer type.
1873   if (ToType->isBlockPointerType() &&
1874       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1875     ConvertedType = ToType;
1876     return true;
1877   }
1878 
1879   // If the left-hand-side is nullptr_t, the right side can be a null
1880   // pointer constant.
1881   if (ToType->isNullPtrType() &&
1882       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1883     ConvertedType = ToType;
1884     return true;
1885   }
1886 
1887   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
1888   if (!ToTypePtr)
1889     return false;
1890 
1891   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
1892   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1893     ConvertedType = ToType;
1894     return true;
1895   }
1896 
1897   // Beyond this point, both types need to be pointers
1898   // , including objective-c pointers.
1899   QualType ToPointeeType = ToTypePtr->getPointeeType();
1900   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
1901       !getLangOptions().ObjCAutoRefCount) {
1902     ConvertedType = BuildSimilarlyQualifiedPointerType(
1903                                       FromType->getAs<ObjCObjectPointerType>(),
1904                                                        ToPointeeType,
1905                                                        ToType, Context);
1906     return true;
1907   }
1908   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
1909   if (!FromTypePtr)
1910     return false;
1911 
1912   QualType FromPointeeType = FromTypePtr->getPointeeType();
1913 
1914   // If the unqualified pointee types are the same, this can't be a
1915   // pointer conversion, so don't do all of the work below.
1916   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
1917     return false;
1918 
1919   // An rvalue of type "pointer to cv T," where T is an object type,
1920   // can be converted to an rvalue of type "pointer to cv void" (C++
1921   // 4.10p2).
1922   if (FromPointeeType->isIncompleteOrObjectType() &&
1923       ToPointeeType->isVoidType()) {
1924     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1925                                                        ToPointeeType,
1926                                                        ToType, Context,
1927                                                    /*StripObjCLifetime=*/true);
1928     return true;
1929   }
1930 
1931   // MSVC allows implicit function to void* type conversion.
1932   if (getLangOptions().MicrosoftExt && FromPointeeType->isFunctionType() &&
1933       ToPointeeType->isVoidType()) {
1934     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1935                                                        ToPointeeType,
1936                                                        ToType, Context);
1937     return true;
1938   }
1939 
1940   // When we're overloading in C, we allow a special kind of pointer
1941   // conversion for compatible-but-not-identical pointee types.
1942   if (!getLangOptions().CPlusPlus &&
1943       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
1944     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1945                                                        ToPointeeType,
1946                                                        ToType, Context);
1947     return true;
1948   }
1949 
1950   // C++ [conv.ptr]p3:
1951   //
1952   //   An rvalue of type "pointer to cv D," where D is a class type,
1953   //   can be converted to an rvalue of type "pointer to cv B," where
1954   //   B is a base class (clause 10) of D. If B is an inaccessible
1955   //   (clause 11) or ambiguous (10.2) base class of D, a program that
1956   //   necessitates this conversion is ill-formed. The result of the
1957   //   conversion is a pointer to the base class sub-object of the
1958   //   derived class object. The null pointer value is converted to
1959   //   the null pointer value of the destination type.
1960   //
1961   // Note that we do not check for ambiguity or inaccessibility
1962   // here. That is handled by CheckPointerConversion.
1963   if (getLangOptions().CPlusPlus &&
1964       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
1965       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
1966       !RequireCompleteType(From->getLocStart(), FromPointeeType, PDiag()) &&
1967       IsDerivedFrom(FromPointeeType, ToPointeeType)) {
1968     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1969                                                        ToPointeeType,
1970                                                        ToType, Context);
1971     return true;
1972   }
1973 
1974   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
1975       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
1976     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1977                                                        ToPointeeType,
1978                                                        ToType, Context);
1979     return true;
1980   }
1981 
1982   return false;
1983 }
1984 
1985 /// \brief Adopt the given qualifiers for the given type.
1986 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
1987   Qualifiers TQs = T.getQualifiers();
1988 
1989   // Check whether qualifiers already match.
1990   if (TQs == Qs)
1991     return T;
1992 
1993   if (Qs.compatiblyIncludes(TQs))
1994     return Context.getQualifiedType(T, Qs);
1995 
1996   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
1997 }
1998 
1999 /// isObjCPointerConversion - Determines whether this is an
2000 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2001 /// with the same arguments and return values.
2002 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2003                                    QualType& ConvertedType,
2004                                    bool &IncompatibleObjC) {
2005   if (!getLangOptions().ObjC1)
2006     return false;
2007 
2008   // The set of qualifiers on the type we're converting from.
2009   Qualifiers FromQualifiers = FromType.getQualifiers();
2010 
2011   // First, we handle all conversions on ObjC object pointer types.
2012   const ObjCObjectPointerType* ToObjCPtr =
2013     ToType->getAs<ObjCObjectPointerType>();
2014   const ObjCObjectPointerType *FromObjCPtr =
2015     FromType->getAs<ObjCObjectPointerType>();
2016 
2017   if (ToObjCPtr && FromObjCPtr) {
2018     // If the pointee types are the same (ignoring qualifications),
2019     // then this is not a pointer conversion.
2020     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2021                                        FromObjCPtr->getPointeeType()))
2022       return false;
2023 
2024     // Check for compatible
2025     // Objective C++: We're able to convert between "id" or "Class" and a
2026     // pointer to any interface (in both directions).
2027     if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2028       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2029       return true;
2030     }
2031     // Conversions with Objective-C's id<...>.
2032     if ((FromObjCPtr->isObjCQualifiedIdType() ||
2033          ToObjCPtr->isObjCQualifiedIdType()) &&
2034         Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2035                                                   /*compare=*/false)) {
2036       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2037       return true;
2038     }
2039     // Objective C++: We're able to convert from a pointer to an
2040     // interface to a pointer to a different interface.
2041     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2042       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2043       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2044       if (getLangOptions().CPlusPlus && LHS && RHS &&
2045           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2046                                                 FromObjCPtr->getPointeeType()))
2047         return false;
2048       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2049                                                    ToObjCPtr->getPointeeType(),
2050                                                          ToType, Context);
2051       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2052       return true;
2053     }
2054 
2055     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2056       // Okay: this is some kind of implicit downcast of Objective-C
2057       // interfaces, which is permitted. However, we're going to
2058       // complain about it.
2059       IncompatibleObjC = true;
2060       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2061                                                    ToObjCPtr->getPointeeType(),
2062                                                          ToType, Context);
2063       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2064       return true;
2065     }
2066   }
2067   // Beyond this point, both types need to be C pointers or block pointers.
2068   QualType ToPointeeType;
2069   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2070     ToPointeeType = ToCPtr->getPointeeType();
2071   else if (const BlockPointerType *ToBlockPtr =
2072             ToType->getAs<BlockPointerType>()) {
2073     // Objective C++: We're able to convert from a pointer to any object
2074     // to a block pointer type.
2075     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2076       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2077       return true;
2078     }
2079     ToPointeeType = ToBlockPtr->getPointeeType();
2080   }
2081   else if (FromType->getAs<BlockPointerType>() &&
2082            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2083     // Objective C++: We're able to convert from a block pointer type to a
2084     // pointer to any object.
2085     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2086     return true;
2087   }
2088   else
2089     return false;
2090 
2091   QualType FromPointeeType;
2092   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2093     FromPointeeType = FromCPtr->getPointeeType();
2094   else if (const BlockPointerType *FromBlockPtr =
2095            FromType->getAs<BlockPointerType>())
2096     FromPointeeType = FromBlockPtr->getPointeeType();
2097   else
2098     return false;
2099 
2100   // If we have pointers to pointers, recursively check whether this
2101   // is an Objective-C conversion.
2102   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2103       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2104                               IncompatibleObjC)) {
2105     // We always complain about this conversion.
2106     IncompatibleObjC = true;
2107     ConvertedType = Context.getPointerType(ConvertedType);
2108     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2109     return true;
2110   }
2111   // Allow conversion of pointee being objective-c pointer to another one;
2112   // as in I* to id.
2113   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2114       ToPointeeType->getAs<ObjCObjectPointerType>() &&
2115       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2116                               IncompatibleObjC)) {
2117 
2118     ConvertedType = Context.getPointerType(ConvertedType);
2119     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2120     return true;
2121   }
2122 
2123   // If we have pointers to functions or blocks, check whether the only
2124   // differences in the argument and result types are in Objective-C
2125   // pointer conversions. If so, we permit the conversion (but
2126   // complain about it).
2127   const FunctionProtoType *FromFunctionType
2128     = FromPointeeType->getAs<FunctionProtoType>();
2129   const FunctionProtoType *ToFunctionType
2130     = ToPointeeType->getAs<FunctionProtoType>();
2131   if (FromFunctionType && ToFunctionType) {
2132     // If the function types are exactly the same, this isn't an
2133     // Objective-C pointer conversion.
2134     if (Context.getCanonicalType(FromPointeeType)
2135           == Context.getCanonicalType(ToPointeeType))
2136       return false;
2137 
2138     // Perform the quick checks that will tell us whether these
2139     // function types are obviously different.
2140     if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2141         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2142         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2143       return false;
2144 
2145     bool HasObjCConversion = false;
2146     if (Context.getCanonicalType(FromFunctionType->getResultType())
2147           == Context.getCanonicalType(ToFunctionType->getResultType())) {
2148       // Okay, the types match exactly. Nothing to do.
2149     } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2150                                        ToFunctionType->getResultType(),
2151                                        ConvertedType, IncompatibleObjC)) {
2152       // Okay, we have an Objective-C pointer conversion.
2153       HasObjCConversion = true;
2154     } else {
2155       // Function types are too different. Abort.
2156       return false;
2157     }
2158 
2159     // Check argument types.
2160     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2161          ArgIdx != NumArgs; ++ArgIdx) {
2162       QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2163       QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2164       if (Context.getCanonicalType(FromArgType)
2165             == Context.getCanonicalType(ToArgType)) {
2166         // Okay, the types match exactly. Nothing to do.
2167       } else if (isObjCPointerConversion(FromArgType, ToArgType,
2168                                          ConvertedType, IncompatibleObjC)) {
2169         // Okay, we have an Objective-C pointer conversion.
2170         HasObjCConversion = true;
2171       } else {
2172         // Argument types are too different. Abort.
2173         return false;
2174       }
2175     }
2176 
2177     if (HasObjCConversion) {
2178       // We had an Objective-C conversion. Allow this pointer
2179       // conversion, but complain about it.
2180       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2181       IncompatibleObjC = true;
2182       return true;
2183     }
2184   }
2185 
2186   return false;
2187 }
2188 
2189 /// \brief Determine whether this is an Objective-C writeback conversion,
2190 /// used for parameter passing when performing automatic reference counting.
2191 ///
2192 /// \param FromType The type we're converting form.
2193 ///
2194 /// \param ToType The type we're converting to.
2195 ///
2196 /// \param ConvertedType The type that will be produced after applying
2197 /// this conversion.
2198 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2199                                      QualType &ConvertedType) {
2200   if (!getLangOptions().ObjCAutoRefCount ||
2201       Context.hasSameUnqualifiedType(FromType, ToType))
2202     return false;
2203 
2204   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2205   QualType ToPointee;
2206   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2207     ToPointee = ToPointer->getPointeeType();
2208   else
2209     return false;
2210 
2211   Qualifiers ToQuals = ToPointee.getQualifiers();
2212   if (!ToPointee->isObjCLifetimeType() ||
2213       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2214       !ToQuals.withoutObjCGLifetime().empty())
2215     return false;
2216 
2217   // Argument must be a pointer to __strong to __weak.
2218   QualType FromPointee;
2219   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2220     FromPointee = FromPointer->getPointeeType();
2221   else
2222     return false;
2223 
2224   Qualifiers FromQuals = FromPointee.getQualifiers();
2225   if (!FromPointee->isObjCLifetimeType() ||
2226       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2227        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2228     return false;
2229 
2230   // Make sure that we have compatible qualifiers.
2231   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2232   if (!ToQuals.compatiblyIncludes(FromQuals))
2233     return false;
2234 
2235   // Remove qualifiers from the pointee type we're converting from; they
2236   // aren't used in the compatibility check belong, and we'll be adding back
2237   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2238   FromPointee = FromPointee.getUnqualifiedType();
2239 
2240   // The unqualified form of the pointee types must be compatible.
2241   ToPointee = ToPointee.getUnqualifiedType();
2242   bool IncompatibleObjC;
2243   if (Context.typesAreCompatible(FromPointee, ToPointee))
2244     FromPointee = ToPointee;
2245   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2246                                     IncompatibleObjC))
2247     return false;
2248 
2249   /// \brief Construct the type we're converting to, which is a pointer to
2250   /// __autoreleasing pointee.
2251   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2252   ConvertedType = Context.getPointerType(FromPointee);
2253   return true;
2254 }
2255 
2256 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2257                                     QualType& ConvertedType) {
2258   QualType ToPointeeType;
2259   if (const BlockPointerType *ToBlockPtr =
2260         ToType->getAs<BlockPointerType>())
2261     ToPointeeType = ToBlockPtr->getPointeeType();
2262   else
2263     return false;
2264 
2265   QualType FromPointeeType;
2266   if (const BlockPointerType *FromBlockPtr =
2267       FromType->getAs<BlockPointerType>())
2268     FromPointeeType = FromBlockPtr->getPointeeType();
2269   else
2270     return false;
2271   // We have pointer to blocks, check whether the only
2272   // differences in the argument and result types are in Objective-C
2273   // pointer conversions. If so, we permit the conversion.
2274 
2275   const FunctionProtoType *FromFunctionType
2276     = FromPointeeType->getAs<FunctionProtoType>();
2277   const FunctionProtoType *ToFunctionType
2278     = ToPointeeType->getAs<FunctionProtoType>();
2279 
2280   if (!FromFunctionType || !ToFunctionType)
2281     return false;
2282 
2283   if (Context.hasSameType(FromPointeeType, ToPointeeType))
2284     return true;
2285 
2286   // Perform the quick checks that will tell us whether these
2287   // function types are obviously different.
2288   if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2289       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2290     return false;
2291 
2292   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2293   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2294   if (FromEInfo != ToEInfo)
2295     return false;
2296 
2297   bool IncompatibleObjC = false;
2298   if (Context.hasSameType(FromFunctionType->getResultType(),
2299                           ToFunctionType->getResultType())) {
2300     // Okay, the types match exactly. Nothing to do.
2301   } else {
2302     QualType RHS = FromFunctionType->getResultType();
2303     QualType LHS = ToFunctionType->getResultType();
2304     if ((!getLangOptions().CPlusPlus || !RHS->isRecordType()) &&
2305         !RHS.hasQualifiers() && LHS.hasQualifiers())
2306        LHS = LHS.getUnqualifiedType();
2307 
2308      if (Context.hasSameType(RHS,LHS)) {
2309        // OK exact match.
2310      } else if (isObjCPointerConversion(RHS, LHS,
2311                                         ConvertedType, IncompatibleObjC)) {
2312      if (IncompatibleObjC)
2313        return false;
2314      // Okay, we have an Objective-C pointer conversion.
2315      }
2316      else
2317        return false;
2318    }
2319 
2320    // Check argument types.
2321    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2322         ArgIdx != NumArgs; ++ArgIdx) {
2323      IncompatibleObjC = false;
2324      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2325      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2326      if (Context.hasSameType(FromArgType, ToArgType)) {
2327        // Okay, the types match exactly. Nothing to do.
2328      } else if (isObjCPointerConversion(ToArgType, FromArgType,
2329                                         ConvertedType, IncompatibleObjC)) {
2330        if (IncompatibleObjC)
2331          return false;
2332        // Okay, we have an Objective-C pointer conversion.
2333      } else
2334        // Argument types are too different. Abort.
2335        return false;
2336    }
2337    if (LangOpts.ObjCAutoRefCount &&
2338        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2339                                                     ToFunctionType))
2340      return false;
2341 
2342    ConvertedType = ToType;
2343    return true;
2344 }
2345 
2346 enum {
2347   ft_default,
2348   ft_different_class,
2349   ft_parameter_arity,
2350   ft_parameter_mismatch,
2351   ft_return_type,
2352   ft_qualifer_mismatch
2353 };
2354 
2355 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2356 /// function types.  Catches different number of parameter, mismatch in
2357 /// parameter types, and different return types.
2358 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2359                                       QualType FromType, QualType ToType) {
2360   // If either type is not valid, include no extra info.
2361   if (FromType.isNull() || ToType.isNull()) {
2362     PDiag << ft_default;
2363     return;
2364   }
2365 
2366   // Get the function type from the pointers.
2367   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2368     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2369                             *ToMember = ToType->getAs<MemberPointerType>();
2370     if (FromMember->getClass() != ToMember->getClass()) {
2371       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2372             << QualType(FromMember->getClass(), 0);
2373       return;
2374     }
2375     FromType = FromMember->getPointeeType();
2376     ToType = ToMember->getPointeeType();
2377   }
2378 
2379   if (FromType->isPointerType())
2380     FromType = FromType->getPointeeType();
2381   if (ToType->isPointerType())
2382     ToType = ToType->getPointeeType();
2383 
2384   // Remove references.
2385   FromType = FromType.getNonReferenceType();
2386   ToType = ToType.getNonReferenceType();
2387 
2388   // Don't print extra info for non-specialized template functions.
2389   if (FromType->isInstantiationDependentType() &&
2390       !FromType->getAs<TemplateSpecializationType>()) {
2391     PDiag << ft_default;
2392     return;
2393   }
2394 
2395   // No extra info for same types.
2396   if (Context.hasSameType(FromType, ToType)) {
2397     PDiag << ft_default;
2398     return;
2399   }
2400 
2401   const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2402                           *ToFunction = ToType->getAs<FunctionProtoType>();
2403 
2404   // Both types need to be function types.
2405   if (!FromFunction || !ToFunction) {
2406     PDiag << ft_default;
2407     return;
2408   }
2409 
2410   if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2411     PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2412           << FromFunction->getNumArgs();
2413     return;
2414   }
2415 
2416   // Handle different parameter types.
2417   unsigned ArgPos;
2418   if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2419     PDiag << ft_parameter_mismatch << ArgPos + 1
2420           << ToFunction->getArgType(ArgPos)
2421           << FromFunction->getArgType(ArgPos);
2422     return;
2423   }
2424 
2425   // Handle different return type.
2426   if (!Context.hasSameType(FromFunction->getResultType(),
2427                            ToFunction->getResultType())) {
2428     PDiag << ft_return_type << ToFunction->getResultType()
2429           << FromFunction->getResultType();
2430     return;
2431   }
2432 
2433   unsigned FromQuals = FromFunction->getTypeQuals(),
2434            ToQuals = ToFunction->getTypeQuals();
2435   if (FromQuals != ToQuals) {
2436     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2437     return;
2438   }
2439 
2440   // Unable to find a difference, so add no extra info.
2441   PDiag << ft_default;
2442 }
2443 
2444 /// FunctionArgTypesAreEqual - This routine checks two function proto types
2445 /// for equality of their argument types. Caller has already checked that
2446 /// they have same number of arguments. This routine assumes that Objective-C
2447 /// pointer types which only differ in their protocol qualifiers are equal.
2448 /// If the parameters are different, ArgPos will have the the parameter index
2449 /// of the first different parameter.
2450 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2451                                     const FunctionProtoType *NewType,
2452                                     unsigned *ArgPos) {
2453   if (!getLangOptions().ObjC1) {
2454     for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2455          N = NewType->arg_type_begin(),
2456          E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2457       if (!Context.hasSameType(*O, *N)) {
2458         if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2459         return false;
2460       }
2461     }
2462     return true;
2463   }
2464 
2465   for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2466        N = NewType->arg_type_begin(),
2467        E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2468     QualType ToType = (*O);
2469     QualType FromType = (*N);
2470     if (!Context.hasSameType(ToType, FromType)) {
2471       if (const PointerType *PTTo = ToType->getAs<PointerType>()) {
2472         if (const PointerType *PTFr = FromType->getAs<PointerType>())
2473           if ((PTTo->getPointeeType()->isObjCQualifiedIdType() &&
2474                PTFr->getPointeeType()->isObjCQualifiedIdType()) ||
2475               (PTTo->getPointeeType()->isObjCQualifiedClassType() &&
2476                PTFr->getPointeeType()->isObjCQualifiedClassType()))
2477             continue;
2478       }
2479       else if (const ObjCObjectPointerType *PTTo =
2480                  ToType->getAs<ObjCObjectPointerType>()) {
2481         if (const ObjCObjectPointerType *PTFr =
2482               FromType->getAs<ObjCObjectPointerType>())
2483           if (Context.hasSameUnqualifiedType(
2484                 PTTo->getObjectType()->getBaseType(),
2485                 PTFr->getObjectType()->getBaseType()))
2486             continue;
2487       }
2488       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2489       return false;
2490     }
2491   }
2492   return true;
2493 }
2494 
2495 /// CheckPointerConversion - Check the pointer conversion from the
2496 /// expression From to the type ToType. This routine checks for
2497 /// ambiguous or inaccessible derived-to-base pointer
2498 /// conversions for which IsPointerConversion has already returned
2499 /// true. It returns true and produces a diagnostic if there was an
2500 /// error, or returns false otherwise.
2501 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2502                                   CastKind &Kind,
2503                                   CXXCastPath& BasePath,
2504                                   bool IgnoreBaseAccess) {
2505   QualType FromType = From->getType();
2506   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2507 
2508   Kind = CK_BitCast;
2509 
2510   if (!IsCStyleOrFunctionalCast &&
2511       Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy) &&
2512       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull))
2513     DiagRuntimeBehavior(From->getExprLoc(), From,
2514                         PDiag(diag::warn_impcast_bool_to_null_pointer)
2515                           << ToType << From->getSourceRange());
2516 
2517   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2518     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2519       QualType FromPointeeType = FromPtrType->getPointeeType(),
2520                ToPointeeType   = ToPtrType->getPointeeType();
2521 
2522       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2523           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2524         // We must have a derived-to-base conversion. Check an
2525         // ambiguous or inaccessible conversion.
2526         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2527                                          From->getExprLoc(),
2528                                          From->getSourceRange(), &BasePath,
2529                                          IgnoreBaseAccess))
2530           return true;
2531 
2532         // The conversion was successful.
2533         Kind = CK_DerivedToBase;
2534       }
2535     }
2536   } else if (const ObjCObjectPointerType *ToPtrType =
2537                ToType->getAs<ObjCObjectPointerType>()) {
2538     if (const ObjCObjectPointerType *FromPtrType =
2539           FromType->getAs<ObjCObjectPointerType>()) {
2540       // Objective-C++ conversions are always okay.
2541       // FIXME: We should have a different class of conversions for the
2542       // Objective-C++ implicit conversions.
2543       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2544         return false;
2545     } else if (FromType->isBlockPointerType()) {
2546       Kind = CK_BlockPointerToObjCPointerCast;
2547     } else {
2548       Kind = CK_CPointerToObjCPointerCast;
2549     }
2550   } else if (ToType->isBlockPointerType()) {
2551     if (!FromType->isBlockPointerType())
2552       Kind = CK_AnyPointerToBlockPointerCast;
2553   }
2554 
2555   // We shouldn't fall into this case unless it's valid for other
2556   // reasons.
2557   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2558     Kind = CK_NullToPointer;
2559 
2560   return false;
2561 }
2562 
2563 /// IsMemberPointerConversion - Determines whether the conversion of the
2564 /// expression From, which has the (possibly adjusted) type FromType, can be
2565 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2566 /// If so, returns true and places the converted type (that might differ from
2567 /// ToType in its cv-qualifiers at some level) into ConvertedType.
2568 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2569                                      QualType ToType,
2570                                      bool InOverloadResolution,
2571                                      QualType &ConvertedType) {
2572   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2573   if (!ToTypePtr)
2574     return false;
2575 
2576   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2577   if (From->isNullPointerConstant(Context,
2578                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2579                                         : Expr::NPC_ValueDependentIsNull)) {
2580     ConvertedType = ToType;
2581     return true;
2582   }
2583 
2584   // Otherwise, both types have to be member pointers.
2585   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2586   if (!FromTypePtr)
2587     return false;
2588 
2589   // A pointer to member of B can be converted to a pointer to member of D,
2590   // where D is derived from B (C++ 4.11p2).
2591   QualType FromClass(FromTypePtr->getClass(), 0);
2592   QualType ToClass(ToTypePtr->getClass(), 0);
2593 
2594   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2595       !RequireCompleteType(From->getLocStart(), ToClass, PDiag()) &&
2596       IsDerivedFrom(ToClass, FromClass)) {
2597     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2598                                                  ToClass.getTypePtr());
2599     return true;
2600   }
2601 
2602   return false;
2603 }
2604 
2605 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2606 /// expression From to the type ToType. This routine checks for ambiguous or
2607 /// virtual or inaccessible base-to-derived member pointer conversions
2608 /// for which IsMemberPointerConversion has already returned true. It returns
2609 /// true and produces a diagnostic if there was an error, or returns false
2610 /// otherwise.
2611 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2612                                         CastKind &Kind,
2613                                         CXXCastPath &BasePath,
2614                                         bool IgnoreBaseAccess) {
2615   QualType FromType = From->getType();
2616   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2617   if (!FromPtrType) {
2618     // This must be a null pointer to member pointer conversion
2619     assert(From->isNullPointerConstant(Context,
2620                                        Expr::NPC_ValueDependentIsNull) &&
2621            "Expr must be null pointer constant!");
2622     Kind = CK_NullToMemberPointer;
2623     return false;
2624   }
2625 
2626   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2627   assert(ToPtrType && "No member pointer cast has a target type "
2628                       "that is not a member pointer.");
2629 
2630   QualType FromClass = QualType(FromPtrType->getClass(), 0);
2631   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2632 
2633   // FIXME: What about dependent types?
2634   assert(FromClass->isRecordType() && "Pointer into non-class.");
2635   assert(ToClass->isRecordType() && "Pointer into non-class.");
2636 
2637   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2638                      /*DetectVirtual=*/true);
2639   bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2640   assert(DerivationOkay &&
2641          "Should not have been called if derivation isn't OK.");
2642   (void)DerivationOkay;
2643 
2644   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2645                                   getUnqualifiedType())) {
2646     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2647     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2648       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2649     return true;
2650   }
2651 
2652   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2653     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2654       << FromClass << ToClass << QualType(VBase, 0)
2655       << From->getSourceRange();
2656     return true;
2657   }
2658 
2659   if (!IgnoreBaseAccess)
2660     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2661                          Paths.front(),
2662                          diag::err_downcast_from_inaccessible_base);
2663 
2664   // Must be a base to derived member conversion.
2665   BuildBasePathArray(Paths, BasePath);
2666   Kind = CK_BaseToDerivedMemberPointer;
2667   return false;
2668 }
2669 
2670 /// IsQualificationConversion - Determines whether the conversion from
2671 /// an rvalue of type FromType to ToType is a qualification conversion
2672 /// (C++ 4.4).
2673 ///
2674 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2675 /// when the qualification conversion involves a change in the Objective-C
2676 /// object lifetime.
2677 bool
2678 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2679                                 bool CStyle, bool &ObjCLifetimeConversion) {
2680   FromType = Context.getCanonicalType(FromType);
2681   ToType = Context.getCanonicalType(ToType);
2682   ObjCLifetimeConversion = false;
2683 
2684   // If FromType and ToType are the same type, this is not a
2685   // qualification conversion.
2686   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2687     return false;
2688 
2689   // (C++ 4.4p4):
2690   //   A conversion can add cv-qualifiers at levels other than the first
2691   //   in multi-level pointers, subject to the following rules: [...]
2692   bool PreviousToQualsIncludeConst = true;
2693   bool UnwrappedAnyPointer = false;
2694   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2695     // Within each iteration of the loop, we check the qualifiers to
2696     // determine if this still looks like a qualification
2697     // conversion. Then, if all is well, we unwrap one more level of
2698     // pointers or pointers-to-members and do it all again
2699     // until there are no more pointers or pointers-to-members left to
2700     // unwrap.
2701     UnwrappedAnyPointer = true;
2702 
2703     Qualifiers FromQuals = FromType.getQualifiers();
2704     Qualifiers ToQuals = ToType.getQualifiers();
2705 
2706     // Objective-C ARC:
2707     //   Check Objective-C lifetime conversions.
2708     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2709         UnwrappedAnyPointer) {
2710       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2711         ObjCLifetimeConversion = true;
2712         FromQuals.removeObjCLifetime();
2713         ToQuals.removeObjCLifetime();
2714       } else {
2715         // Qualification conversions cannot cast between different
2716         // Objective-C lifetime qualifiers.
2717         return false;
2718       }
2719     }
2720 
2721     // Allow addition/removal of GC attributes but not changing GC attributes.
2722     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2723         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2724       FromQuals.removeObjCGCAttr();
2725       ToQuals.removeObjCGCAttr();
2726     }
2727 
2728     //   -- for every j > 0, if const is in cv 1,j then const is in cv
2729     //      2,j, and similarly for volatile.
2730     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2731       return false;
2732 
2733     //   -- if the cv 1,j and cv 2,j are different, then const is in
2734     //      every cv for 0 < k < j.
2735     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2736         && !PreviousToQualsIncludeConst)
2737       return false;
2738 
2739     // Keep track of whether all prior cv-qualifiers in the "to" type
2740     // include const.
2741     PreviousToQualsIncludeConst
2742       = PreviousToQualsIncludeConst && ToQuals.hasConst();
2743   }
2744 
2745   // We are left with FromType and ToType being the pointee types
2746   // after unwrapping the original FromType and ToType the same number
2747   // of types. If we unwrapped any pointers, and if FromType and
2748   // ToType have the same unqualified type (since we checked
2749   // qualifiers above), then this is a qualification conversion.
2750   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2751 }
2752 
2753 /// Determines whether there is a user-defined conversion sequence
2754 /// (C++ [over.ics.user]) that converts expression From to the type
2755 /// ToType. If such a conversion exists, User will contain the
2756 /// user-defined conversion sequence that performs such a conversion
2757 /// and this routine will return true. Otherwise, this routine returns
2758 /// false and User is unspecified.
2759 ///
2760 /// \param AllowExplicit  true if the conversion should consider C++0x
2761 /// "explicit" conversion functions as well as non-explicit conversion
2762 /// functions (C++0x [class.conv.fct]p2).
2763 static OverloadingResult
2764 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
2765                         UserDefinedConversionSequence& User,
2766                         OverloadCandidateSet& CandidateSet,
2767                         bool AllowExplicit) {
2768   // Whether we will only visit constructors.
2769   bool ConstructorsOnly = false;
2770 
2771   // If the type we are conversion to is a class type, enumerate its
2772   // constructors.
2773   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
2774     // C++ [over.match.ctor]p1:
2775     //   When objects of class type are direct-initialized (8.5), or
2776     //   copy-initialized from an expression of the same or a
2777     //   derived class type (8.5), overload resolution selects the
2778     //   constructor. [...] For copy-initialization, the candidate
2779     //   functions are all the converting constructors (12.3.1) of
2780     //   that class. The argument list is the expression-list within
2781     //   the parentheses of the initializer.
2782     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
2783         (From->getType()->getAs<RecordType>() &&
2784          S.IsDerivedFrom(From->getType(), ToType)))
2785       ConstructorsOnly = true;
2786 
2787     S.RequireCompleteType(From->getLocStart(), ToType, S.PDiag());
2788     // RequireCompleteType may have returned true due to some invalid decl
2789     // during template instantiation, but ToType may be complete enough now
2790     // to try to recover.
2791     if (ToType->isIncompleteType()) {
2792       // We're not going to find any constructors.
2793     } else if (CXXRecordDecl *ToRecordDecl
2794                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
2795 
2796       Expr **Args = &From;
2797       unsigned NumArgs = 1;
2798       bool ListInitializing = false;
2799       // If we're list-initializing, we pass the individual elements as
2800       // arguments, not the entire list.
2801       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
2802         Args = InitList->getInits();
2803         NumArgs = InitList->getNumInits();
2804         ListInitializing = true;
2805       }
2806 
2807       DeclContext::lookup_iterator Con, ConEnd;
2808       for (llvm::tie(Con, ConEnd) = S.LookupConstructors(ToRecordDecl);
2809            Con != ConEnd; ++Con) {
2810         NamedDecl *D = *Con;
2811         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2812 
2813         // Find the constructor (which may be a template).
2814         CXXConstructorDecl *Constructor = 0;
2815         FunctionTemplateDecl *ConstructorTmpl
2816           = dyn_cast<FunctionTemplateDecl>(D);
2817         if (ConstructorTmpl)
2818           Constructor
2819             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2820         else
2821           Constructor = cast<CXXConstructorDecl>(D);
2822 
2823         bool Usable = !Constructor->isInvalidDecl();
2824         if (ListInitializing)
2825           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
2826         else
2827           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
2828         if (Usable) {
2829           if (ConstructorTmpl)
2830             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2831                                            /*ExplicitArgs*/ 0,
2832                                            Args, NumArgs, CandidateSet,
2833                                            /*SuppressUserConversions=*/
2834                                            !ConstructorsOnly &&
2835                                              !ListInitializing);
2836           else
2837             // Allow one user-defined conversion when user specifies a
2838             // From->ToType conversion via an static cast (c-style, etc).
2839             S.AddOverloadCandidate(Constructor, FoundDecl,
2840                                    Args, NumArgs, CandidateSet,
2841                                    /*SuppressUserConversions=*/
2842                                    !ConstructorsOnly && !ListInitializing);
2843         }
2844       }
2845     }
2846   }
2847 
2848   // Enumerate conversion functions, if we're allowed to.
2849   if (ConstructorsOnly || isa<InitListExpr>(From)) {
2850   } else if (S.RequireCompleteType(From->getLocStart(), From->getType(),
2851                                    S.PDiag(0) << From->getSourceRange())) {
2852     // No conversion functions from incomplete types.
2853   } else if (const RecordType *FromRecordType
2854                                    = From->getType()->getAs<RecordType>()) {
2855     if (CXXRecordDecl *FromRecordDecl
2856          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
2857       // Add all of the conversion functions as candidates.
2858       const UnresolvedSetImpl *Conversions
2859         = FromRecordDecl->getVisibleConversionFunctions();
2860       for (UnresolvedSetImpl::iterator I = Conversions->begin(),
2861              E = Conversions->end(); I != E; ++I) {
2862         DeclAccessPair FoundDecl = I.getPair();
2863         NamedDecl *D = FoundDecl.getDecl();
2864         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
2865         if (isa<UsingShadowDecl>(D))
2866           D = cast<UsingShadowDecl>(D)->getTargetDecl();
2867 
2868         CXXConversionDecl *Conv;
2869         FunctionTemplateDecl *ConvTemplate;
2870         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
2871           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
2872         else
2873           Conv = cast<CXXConversionDecl>(D);
2874 
2875         if (AllowExplicit || !Conv->isExplicit()) {
2876           if (ConvTemplate)
2877             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
2878                                              ActingContext, From, ToType,
2879                                              CandidateSet);
2880           else
2881             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
2882                                      From, ToType, CandidateSet);
2883         }
2884       }
2885     }
2886   }
2887 
2888   bool HadMultipleCandidates = (CandidateSet.size() > 1);
2889 
2890   OverloadCandidateSet::iterator Best;
2891   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2892   case OR_Success:
2893     // Record the standard conversion we used and the conversion function.
2894     if (CXXConstructorDecl *Constructor
2895           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
2896       S.MarkDeclarationReferenced(From->getLocStart(), Constructor);
2897 
2898       // C++ [over.ics.user]p1:
2899       //   If the user-defined conversion is specified by a
2900       //   constructor (12.3.1), the initial standard conversion
2901       //   sequence converts the source type to the type required by
2902       //   the argument of the constructor.
2903       //
2904       QualType ThisType = Constructor->getThisType(S.Context);
2905       if (isa<InitListExpr>(From)) {
2906         // Initializer lists don't have conversions as such.
2907         User.Before.setAsIdentityConversion();
2908       } else {
2909         if (Best->Conversions[0].isEllipsis())
2910           User.EllipsisConversion = true;
2911         else {
2912           User.Before = Best->Conversions[0].Standard;
2913           User.EllipsisConversion = false;
2914         }
2915       }
2916       User.HadMultipleCandidates = HadMultipleCandidates;
2917       User.ConversionFunction = Constructor;
2918       User.FoundConversionFunction = Best->FoundDecl;
2919       User.After.setAsIdentityConversion();
2920       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
2921       User.After.setAllToTypes(ToType);
2922       return OR_Success;
2923     }
2924     if (CXXConversionDecl *Conversion
2925                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
2926       S.MarkDeclarationReferenced(From->getLocStart(), Conversion);
2927 
2928       // C++ [over.ics.user]p1:
2929       //
2930       //   [...] If the user-defined conversion is specified by a
2931       //   conversion function (12.3.2), the initial standard
2932       //   conversion sequence converts the source type to the
2933       //   implicit object parameter of the conversion function.
2934       User.Before = Best->Conversions[0].Standard;
2935       User.HadMultipleCandidates = HadMultipleCandidates;
2936       User.ConversionFunction = Conversion;
2937       User.FoundConversionFunction = Best->FoundDecl;
2938       User.EllipsisConversion = false;
2939 
2940       // C++ [over.ics.user]p2:
2941       //   The second standard conversion sequence converts the
2942       //   result of the user-defined conversion to the target type
2943       //   for the sequence. Since an implicit conversion sequence
2944       //   is an initialization, the special rules for
2945       //   initialization by user-defined conversion apply when
2946       //   selecting the best user-defined conversion for a
2947       //   user-defined conversion sequence (see 13.3.3 and
2948       //   13.3.3.1).
2949       User.After = Best->FinalConversion;
2950       return OR_Success;
2951     }
2952     llvm_unreachable("Not a constructor or conversion function?");
2953 
2954   case OR_No_Viable_Function:
2955     return OR_No_Viable_Function;
2956   case OR_Deleted:
2957     // No conversion here! We're done.
2958     return OR_Deleted;
2959 
2960   case OR_Ambiguous:
2961     return OR_Ambiguous;
2962   }
2963 
2964   llvm_unreachable("Invalid OverloadResult!");
2965 }
2966 
2967 bool
2968 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
2969   ImplicitConversionSequence ICS;
2970   OverloadCandidateSet CandidateSet(From->getExprLoc());
2971   OverloadingResult OvResult =
2972     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
2973                             CandidateSet, false);
2974   if (OvResult == OR_Ambiguous)
2975     Diag(From->getSourceRange().getBegin(),
2976          diag::err_typecheck_ambiguous_condition)
2977           << From->getType() << ToType << From->getSourceRange();
2978   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
2979     Diag(From->getSourceRange().getBegin(),
2980          diag::err_typecheck_nonviable_condition)
2981     << From->getType() << ToType << From->getSourceRange();
2982   else
2983     return false;
2984   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, &From, 1);
2985   return true;
2986 }
2987 
2988 /// CompareImplicitConversionSequences - Compare two implicit
2989 /// conversion sequences to determine whether one is better than the
2990 /// other or if they are indistinguishable (C++ 13.3.3.2).
2991 static ImplicitConversionSequence::CompareKind
2992 CompareImplicitConversionSequences(Sema &S,
2993                                    const ImplicitConversionSequence& ICS1,
2994                                    const ImplicitConversionSequence& ICS2)
2995 {
2996   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
2997   // conversion sequences (as defined in 13.3.3.1)
2998   //   -- a standard conversion sequence (13.3.3.1.1) is a better
2999   //      conversion sequence than a user-defined conversion sequence or
3000   //      an ellipsis conversion sequence, and
3001   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3002   //      conversion sequence than an ellipsis conversion sequence
3003   //      (13.3.3.1.3).
3004   //
3005   // C++0x [over.best.ics]p10:
3006   //   For the purpose of ranking implicit conversion sequences as
3007   //   described in 13.3.3.2, the ambiguous conversion sequence is
3008   //   treated as a user-defined sequence that is indistinguishable
3009   //   from any other user-defined conversion sequence.
3010   if (ICS1.getKindRank() < ICS2.getKindRank())
3011     return ImplicitConversionSequence::Better;
3012   if (ICS2.getKindRank() < ICS1.getKindRank())
3013     return ImplicitConversionSequence::Worse;
3014 
3015   // The following checks require both conversion sequences to be of
3016   // the same kind.
3017   if (ICS1.getKind() != ICS2.getKind())
3018     return ImplicitConversionSequence::Indistinguishable;
3019 
3020   ImplicitConversionSequence::CompareKind Result =
3021       ImplicitConversionSequence::Indistinguishable;
3022 
3023   // Two implicit conversion sequences of the same form are
3024   // indistinguishable conversion sequences unless one of the
3025   // following rules apply: (C++ 13.3.3.2p3):
3026   if (ICS1.isStandard())
3027     Result = CompareStandardConversionSequences(S,
3028                                                 ICS1.Standard, ICS2.Standard);
3029   else if (ICS1.isUserDefined()) {
3030     // User-defined conversion sequence U1 is a better conversion
3031     // sequence than another user-defined conversion sequence U2 if
3032     // they contain the same user-defined conversion function or
3033     // constructor and if the second standard conversion sequence of
3034     // U1 is better than the second standard conversion sequence of
3035     // U2 (C++ 13.3.3.2p3).
3036     if (ICS1.UserDefined.ConversionFunction ==
3037           ICS2.UserDefined.ConversionFunction)
3038       Result = CompareStandardConversionSequences(S,
3039                                                   ICS1.UserDefined.After,
3040                                                   ICS2.UserDefined.After);
3041   }
3042 
3043   // List-initialization sequence L1 is a better conversion sequence than
3044   // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3045   // for some X and L2 does not.
3046   if (Result == ImplicitConversionSequence::Indistinguishable &&
3047       ICS1.isListInitializationSequence() &&
3048       ICS2.isListInitializationSequence()) {
3049     // FIXME: Find out if ICS1 converts to initializer_list and ICS2 doesn't.
3050   }
3051 
3052   return Result;
3053 }
3054 
3055 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3056   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3057     Qualifiers Quals;
3058     T1 = Context.getUnqualifiedArrayType(T1, Quals);
3059     T2 = Context.getUnqualifiedArrayType(T2, Quals);
3060   }
3061 
3062   return Context.hasSameUnqualifiedType(T1, T2);
3063 }
3064 
3065 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3066 // determine if one is a proper subset of the other.
3067 static ImplicitConversionSequence::CompareKind
3068 compareStandardConversionSubsets(ASTContext &Context,
3069                                  const StandardConversionSequence& SCS1,
3070                                  const StandardConversionSequence& SCS2) {
3071   ImplicitConversionSequence::CompareKind Result
3072     = ImplicitConversionSequence::Indistinguishable;
3073 
3074   // the identity conversion sequence is considered to be a subsequence of
3075   // any non-identity conversion sequence
3076   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3077     return ImplicitConversionSequence::Better;
3078   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3079     return ImplicitConversionSequence::Worse;
3080 
3081   if (SCS1.Second != SCS2.Second) {
3082     if (SCS1.Second == ICK_Identity)
3083       Result = ImplicitConversionSequence::Better;
3084     else if (SCS2.Second == ICK_Identity)
3085       Result = ImplicitConversionSequence::Worse;
3086     else
3087       return ImplicitConversionSequence::Indistinguishable;
3088   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3089     return ImplicitConversionSequence::Indistinguishable;
3090 
3091   if (SCS1.Third == SCS2.Third) {
3092     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3093                              : ImplicitConversionSequence::Indistinguishable;
3094   }
3095 
3096   if (SCS1.Third == ICK_Identity)
3097     return Result == ImplicitConversionSequence::Worse
3098              ? ImplicitConversionSequence::Indistinguishable
3099              : ImplicitConversionSequence::Better;
3100 
3101   if (SCS2.Third == ICK_Identity)
3102     return Result == ImplicitConversionSequence::Better
3103              ? ImplicitConversionSequence::Indistinguishable
3104              : ImplicitConversionSequence::Worse;
3105 
3106   return ImplicitConversionSequence::Indistinguishable;
3107 }
3108 
3109 /// \brief Determine whether one of the given reference bindings is better
3110 /// than the other based on what kind of bindings they are.
3111 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3112                                        const StandardConversionSequence &SCS2) {
3113   // C++0x [over.ics.rank]p3b4:
3114   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3115   //      implicit object parameter of a non-static member function declared
3116   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3117   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3118   //      lvalue reference to a function lvalue and S2 binds an rvalue
3119   //      reference*.
3120   //
3121   // FIXME: Rvalue references. We're going rogue with the above edits,
3122   // because the semantics in the current C++0x working paper (N3225 at the
3123   // time of this writing) break the standard definition of std::forward
3124   // and std::reference_wrapper when dealing with references to functions.
3125   // Proposed wording changes submitted to CWG for consideration.
3126   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3127       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3128     return false;
3129 
3130   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3131           SCS2.IsLvalueReference) ||
3132          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3133           !SCS2.IsLvalueReference);
3134 }
3135 
3136 /// CompareStandardConversionSequences - Compare two standard
3137 /// conversion sequences to determine whether one is better than the
3138 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3139 static ImplicitConversionSequence::CompareKind
3140 CompareStandardConversionSequences(Sema &S,
3141                                    const StandardConversionSequence& SCS1,
3142                                    const StandardConversionSequence& SCS2)
3143 {
3144   // Standard conversion sequence S1 is a better conversion sequence
3145   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3146 
3147   //  -- S1 is a proper subsequence of S2 (comparing the conversion
3148   //     sequences in the canonical form defined by 13.3.3.1.1,
3149   //     excluding any Lvalue Transformation; the identity conversion
3150   //     sequence is considered to be a subsequence of any
3151   //     non-identity conversion sequence) or, if not that,
3152   if (ImplicitConversionSequence::CompareKind CK
3153         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3154     return CK;
3155 
3156   //  -- the rank of S1 is better than the rank of S2 (by the rules
3157   //     defined below), or, if not that,
3158   ImplicitConversionRank Rank1 = SCS1.getRank();
3159   ImplicitConversionRank Rank2 = SCS2.getRank();
3160   if (Rank1 < Rank2)
3161     return ImplicitConversionSequence::Better;
3162   else if (Rank2 < Rank1)
3163     return ImplicitConversionSequence::Worse;
3164 
3165   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3166   // are indistinguishable unless one of the following rules
3167   // applies:
3168 
3169   //   A conversion that is not a conversion of a pointer, or
3170   //   pointer to member, to bool is better than another conversion
3171   //   that is such a conversion.
3172   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3173     return SCS2.isPointerConversionToBool()
3174              ? ImplicitConversionSequence::Better
3175              : ImplicitConversionSequence::Worse;
3176 
3177   // C++ [over.ics.rank]p4b2:
3178   //
3179   //   If class B is derived directly or indirectly from class A,
3180   //   conversion of B* to A* is better than conversion of B* to
3181   //   void*, and conversion of A* to void* is better than conversion
3182   //   of B* to void*.
3183   bool SCS1ConvertsToVoid
3184     = SCS1.isPointerConversionToVoidPointer(S.Context);
3185   bool SCS2ConvertsToVoid
3186     = SCS2.isPointerConversionToVoidPointer(S.Context);
3187   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3188     // Exactly one of the conversion sequences is a conversion to
3189     // a void pointer; it's the worse conversion.
3190     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3191                               : ImplicitConversionSequence::Worse;
3192   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3193     // Neither conversion sequence converts to a void pointer; compare
3194     // their derived-to-base conversions.
3195     if (ImplicitConversionSequence::CompareKind DerivedCK
3196           = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3197       return DerivedCK;
3198   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3199              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3200     // Both conversion sequences are conversions to void
3201     // pointers. Compare the source types to determine if there's an
3202     // inheritance relationship in their sources.
3203     QualType FromType1 = SCS1.getFromType();
3204     QualType FromType2 = SCS2.getFromType();
3205 
3206     // Adjust the types we're converting from via the array-to-pointer
3207     // conversion, if we need to.
3208     if (SCS1.First == ICK_Array_To_Pointer)
3209       FromType1 = S.Context.getArrayDecayedType(FromType1);
3210     if (SCS2.First == ICK_Array_To_Pointer)
3211       FromType2 = S.Context.getArrayDecayedType(FromType2);
3212 
3213     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3214     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3215 
3216     if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3217       return ImplicitConversionSequence::Better;
3218     else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3219       return ImplicitConversionSequence::Worse;
3220 
3221     // Objective-C++: If one interface is more specific than the
3222     // other, it is the better one.
3223     const ObjCObjectPointerType* FromObjCPtr1
3224       = FromType1->getAs<ObjCObjectPointerType>();
3225     const ObjCObjectPointerType* FromObjCPtr2
3226       = FromType2->getAs<ObjCObjectPointerType>();
3227     if (FromObjCPtr1 && FromObjCPtr2) {
3228       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3229                                                           FromObjCPtr2);
3230       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3231                                                            FromObjCPtr1);
3232       if (AssignLeft != AssignRight) {
3233         return AssignLeft? ImplicitConversionSequence::Better
3234                          : ImplicitConversionSequence::Worse;
3235       }
3236     }
3237   }
3238 
3239   // Compare based on qualification conversions (C++ 13.3.3.2p3,
3240   // bullet 3).
3241   if (ImplicitConversionSequence::CompareKind QualCK
3242         = CompareQualificationConversions(S, SCS1, SCS2))
3243     return QualCK;
3244 
3245   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3246     // Check for a better reference binding based on the kind of bindings.
3247     if (isBetterReferenceBindingKind(SCS1, SCS2))
3248       return ImplicitConversionSequence::Better;
3249     else if (isBetterReferenceBindingKind(SCS2, SCS1))
3250       return ImplicitConversionSequence::Worse;
3251 
3252     // C++ [over.ics.rank]p3b4:
3253     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3254     //      which the references refer are the same type except for
3255     //      top-level cv-qualifiers, and the type to which the reference
3256     //      initialized by S2 refers is more cv-qualified than the type
3257     //      to which the reference initialized by S1 refers.
3258     QualType T1 = SCS1.getToType(2);
3259     QualType T2 = SCS2.getToType(2);
3260     T1 = S.Context.getCanonicalType(T1);
3261     T2 = S.Context.getCanonicalType(T2);
3262     Qualifiers T1Quals, T2Quals;
3263     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3264     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3265     if (UnqualT1 == UnqualT2) {
3266       // Objective-C++ ARC: If the references refer to objects with different
3267       // lifetimes, prefer bindings that don't change lifetime.
3268       if (SCS1.ObjCLifetimeConversionBinding !=
3269                                           SCS2.ObjCLifetimeConversionBinding) {
3270         return SCS1.ObjCLifetimeConversionBinding
3271                                            ? ImplicitConversionSequence::Worse
3272                                            : ImplicitConversionSequence::Better;
3273       }
3274 
3275       // If the type is an array type, promote the element qualifiers to the
3276       // type for comparison.
3277       if (isa<ArrayType>(T1) && T1Quals)
3278         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3279       if (isa<ArrayType>(T2) && T2Quals)
3280         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3281       if (T2.isMoreQualifiedThan(T1))
3282         return ImplicitConversionSequence::Better;
3283       else if (T1.isMoreQualifiedThan(T2))
3284         return ImplicitConversionSequence::Worse;
3285     }
3286   }
3287 
3288   // In Microsoft mode, prefer an integral conversion to a
3289   // floating-to-integral conversion if the integral conversion
3290   // is between types of the same size.
3291   // For example:
3292   // void f(float);
3293   // void f(int);
3294   // int main {
3295   //    long a;
3296   //    f(a);
3297   // }
3298   // Here, MSVC will call f(int) instead of generating a compile error
3299   // as clang will do in standard mode.
3300   if (S.getLangOptions().MicrosoftMode &&
3301       SCS1.Second == ICK_Integral_Conversion &&
3302       SCS2.Second == ICK_Floating_Integral &&
3303       S.Context.getTypeSize(SCS1.getFromType()) ==
3304       S.Context.getTypeSize(SCS1.getToType(2)))
3305     return ImplicitConversionSequence::Better;
3306 
3307   return ImplicitConversionSequence::Indistinguishable;
3308 }
3309 
3310 /// CompareQualificationConversions - Compares two standard conversion
3311 /// sequences to determine whether they can be ranked based on their
3312 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3313 ImplicitConversionSequence::CompareKind
3314 CompareQualificationConversions(Sema &S,
3315                                 const StandardConversionSequence& SCS1,
3316                                 const StandardConversionSequence& SCS2) {
3317   // C++ 13.3.3.2p3:
3318   //  -- S1 and S2 differ only in their qualification conversion and
3319   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3320   //     cv-qualification signature of type T1 is a proper subset of
3321   //     the cv-qualification signature of type T2, and S1 is not the
3322   //     deprecated string literal array-to-pointer conversion (4.2).
3323   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3324       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3325     return ImplicitConversionSequence::Indistinguishable;
3326 
3327   // FIXME: the example in the standard doesn't use a qualification
3328   // conversion (!)
3329   QualType T1 = SCS1.getToType(2);
3330   QualType T2 = SCS2.getToType(2);
3331   T1 = S.Context.getCanonicalType(T1);
3332   T2 = S.Context.getCanonicalType(T2);
3333   Qualifiers T1Quals, T2Quals;
3334   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3335   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3336 
3337   // If the types are the same, we won't learn anything by unwrapped
3338   // them.
3339   if (UnqualT1 == UnqualT2)
3340     return ImplicitConversionSequence::Indistinguishable;
3341 
3342   // If the type is an array type, promote the element qualifiers to the type
3343   // for comparison.
3344   if (isa<ArrayType>(T1) && T1Quals)
3345     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3346   if (isa<ArrayType>(T2) && T2Quals)
3347     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3348 
3349   ImplicitConversionSequence::CompareKind Result
3350     = ImplicitConversionSequence::Indistinguishable;
3351 
3352   // Objective-C++ ARC:
3353   //   Prefer qualification conversions not involving a change in lifetime
3354   //   to qualification conversions that do not change lifetime.
3355   if (SCS1.QualificationIncludesObjCLifetime !=
3356                                       SCS2.QualificationIncludesObjCLifetime) {
3357     Result = SCS1.QualificationIncludesObjCLifetime
3358                ? ImplicitConversionSequence::Worse
3359                : ImplicitConversionSequence::Better;
3360   }
3361 
3362   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3363     // Within each iteration of the loop, we check the qualifiers to
3364     // determine if this still looks like a qualification
3365     // conversion. Then, if all is well, we unwrap one more level of
3366     // pointers or pointers-to-members and do it all again
3367     // until there are no more pointers or pointers-to-members left
3368     // to unwrap. This essentially mimics what
3369     // IsQualificationConversion does, but here we're checking for a
3370     // strict subset of qualifiers.
3371     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3372       // The qualifiers are the same, so this doesn't tell us anything
3373       // about how the sequences rank.
3374       ;
3375     else if (T2.isMoreQualifiedThan(T1)) {
3376       // T1 has fewer qualifiers, so it could be the better sequence.
3377       if (Result == ImplicitConversionSequence::Worse)
3378         // Neither has qualifiers that are a subset of the other's
3379         // qualifiers.
3380         return ImplicitConversionSequence::Indistinguishable;
3381 
3382       Result = ImplicitConversionSequence::Better;
3383     } else if (T1.isMoreQualifiedThan(T2)) {
3384       // T2 has fewer qualifiers, so it could be the better sequence.
3385       if (Result == ImplicitConversionSequence::Better)
3386         // Neither has qualifiers that are a subset of the other's
3387         // qualifiers.
3388         return ImplicitConversionSequence::Indistinguishable;
3389 
3390       Result = ImplicitConversionSequence::Worse;
3391     } else {
3392       // Qualifiers are disjoint.
3393       return ImplicitConversionSequence::Indistinguishable;
3394     }
3395 
3396     // If the types after this point are equivalent, we're done.
3397     if (S.Context.hasSameUnqualifiedType(T1, T2))
3398       break;
3399   }
3400 
3401   // Check that the winning standard conversion sequence isn't using
3402   // the deprecated string literal array to pointer conversion.
3403   switch (Result) {
3404   case ImplicitConversionSequence::Better:
3405     if (SCS1.DeprecatedStringLiteralToCharPtr)
3406       Result = ImplicitConversionSequence::Indistinguishable;
3407     break;
3408 
3409   case ImplicitConversionSequence::Indistinguishable:
3410     break;
3411 
3412   case ImplicitConversionSequence::Worse:
3413     if (SCS2.DeprecatedStringLiteralToCharPtr)
3414       Result = ImplicitConversionSequence::Indistinguishable;
3415     break;
3416   }
3417 
3418   return Result;
3419 }
3420 
3421 /// CompareDerivedToBaseConversions - Compares two standard conversion
3422 /// sequences to determine whether they can be ranked based on their
3423 /// various kinds of derived-to-base conversions (C++
3424 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
3425 /// conversions between Objective-C interface types.
3426 ImplicitConversionSequence::CompareKind
3427 CompareDerivedToBaseConversions(Sema &S,
3428                                 const StandardConversionSequence& SCS1,
3429                                 const StandardConversionSequence& SCS2) {
3430   QualType FromType1 = SCS1.getFromType();
3431   QualType ToType1 = SCS1.getToType(1);
3432   QualType FromType2 = SCS2.getFromType();
3433   QualType ToType2 = SCS2.getToType(1);
3434 
3435   // Adjust the types we're converting from via the array-to-pointer
3436   // conversion, if we need to.
3437   if (SCS1.First == ICK_Array_To_Pointer)
3438     FromType1 = S.Context.getArrayDecayedType(FromType1);
3439   if (SCS2.First == ICK_Array_To_Pointer)
3440     FromType2 = S.Context.getArrayDecayedType(FromType2);
3441 
3442   // Canonicalize all of the types.
3443   FromType1 = S.Context.getCanonicalType(FromType1);
3444   ToType1 = S.Context.getCanonicalType(ToType1);
3445   FromType2 = S.Context.getCanonicalType(FromType2);
3446   ToType2 = S.Context.getCanonicalType(ToType2);
3447 
3448   // C++ [over.ics.rank]p4b3:
3449   //
3450   //   If class B is derived directly or indirectly from class A and
3451   //   class C is derived directly or indirectly from B,
3452   //
3453   // Compare based on pointer conversions.
3454   if (SCS1.Second == ICK_Pointer_Conversion &&
3455       SCS2.Second == ICK_Pointer_Conversion &&
3456       /*FIXME: Remove if Objective-C id conversions get their own rank*/
3457       FromType1->isPointerType() && FromType2->isPointerType() &&
3458       ToType1->isPointerType() && ToType2->isPointerType()) {
3459     QualType FromPointee1
3460       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3461     QualType ToPointee1
3462       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3463     QualType FromPointee2
3464       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3465     QualType ToPointee2
3466       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3467 
3468     //   -- conversion of C* to B* is better than conversion of C* to A*,
3469     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3470       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3471         return ImplicitConversionSequence::Better;
3472       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3473         return ImplicitConversionSequence::Worse;
3474     }
3475 
3476     //   -- conversion of B* to A* is better than conversion of C* to A*,
3477     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3478       if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3479         return ImplicitConversionSequence::Better;
3480       else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3481         return ImplicitConversionSequence::Worse;
3482     }
3483   } else if (SCS1.Second == ICK_Pointer_Conversion &&
3484              SCS2.Second == ICK_Pointer_Conversion) {
3485     const ObjCObjectPointerType *FromPtr1
3486       = FromType1->getAs<ObjCObjectPointerType>();
3487     const ObjCObjectPointerType *FromPtr2
3488       = FromType2->getAs<ObjCObjectPointerType>();
3489     const ObjCObjectPointerType *ToPtr1
3490       = ToType1->getAs<ObjCObjectPointerType>();
3491     const ObjCObjectPointerType *ToPtr2
3492       = ToType2->getAs<ObjCObjectPointerType>();
3493 
3494     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3495       // Apply the same conversion ranking rules for Objective-C pointer types
3496       // that we do for C++ pointers to class types. However, we employ the
3497       // Objective-C pseudo-subtyping relationship used for assignment of
3498       // Objective-C pointer types.
3499       bool FromAssignLeft
3500         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3501       bool FromAssignRight
3502         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3503       bool ToAssignLeft
3504         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3505       bool ToAssignRight
3506         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3507 
3508       // A conversion to an a non-id object pointer type or qualified 'id'
3509       // type is better than a conversion to 'id'.
3510       if (ToPtr1->isObjCIdType() &&
3511           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3512         return ImplicitConversionSequence::Worse;
3513       if (ToPtr2->isObjCIdType() &&
3514           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3515         return ImplicitConversionSequence::Better;
3516 
3517       // A conversion to a non-id object pointer type is better than a
3518       // conversion to a qualified 'id' type
3519       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3520         return ImplicitConversionSequence::Worse;
3521       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3522         return ImplicitConversionSequence::Better;
3523 
3524       // A conversion to an a non-Class object pointer type or qualified 'Class'
3525       // type is better than a conversion to 'Class'.
3526       if (ToPtr1->isObjCClassType() &&
3527           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3528         return ImplicitConversionSequence::Worse;
3529       if (ToPtr2->isObjCClassType() &&
3530           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3531         return ImplicitConversionSequence::Better;
3532 
3533       // A conversion to a non-Class object pointer type is better than a
3534       // conversion to a qualified 'Class' type.
3535       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3536         return ImplicitConversionSequence::Worse;
3537       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3538         return ImplicitConversionSequence::Better;
3539 
3540       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3541       if (S.Context.hasSameType(FromType1, FromType2) &&
3542           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3543           (ToAssignLeft != ToAssignRight))
3544         return ToAssignLeft? ImplicitConversionSequence::Worse
3545                            : ImplicitConversionSequence::Better;
3546 
3547       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3548       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3549           (FromAssignLeft != FromAssignRight))
3550         return FromAssignLeft? ImplicitConversionSequence::Better
3551         : ImplicitConversionSequence::Worse;
3552     }
3553   }
3554 
3555   // Ranking of member-pointer types.
3556   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3557       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3558       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3559     const MemberPointerType * FromMemPointer1 =
3560                                         FromType1->getAs<MemberPointerType>();
3561     const MemberPointerType * ToMemPointer1 =
3562                                           ToType1->getAs<MemberPointerType>();
3563     const MemberPointerType * FromMemPointer2 =
3564                                           FromType2->getAs<MemberPointerType>();
3565     const MemberPointerType * ToMemPointer2 =
3566                                           ToType2->getAs<MemberPointerType>();
3567     const Type *FromPointeeType1 = FromMemPointer1->getClass();
3568     const Type *ToPointeeType1 = ToMemPointer1->getClass();
3569     const Type *FromPointeeType2 = FromMemPointer2->getClass();
3570     const Type *ToPointeeType2 = ToMemPointer2->getClass();
3571     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3572     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3573     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3574     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3575     // conversion of A::* to B::* is better than conversion of A::* to C::*,
3576     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3577       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3578         return ImplicitConversionSequence::Worse;
3579       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3580         return ImplicitConversionSequence::Better;
3581     }
3582     // conversion of B::* to C::* is better than conversion of A::* to C::*
3583     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3584       if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3585         return ImplicitConversionSequence::Better;
3586       else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3587         return ImplicitConversionSequence::Worse;
3588     }
3589   }
3590 
3591   if (SCS1.Second == ICK_Derived_To_Base) {
3592     //   -- conversion of C to B is better than conversion of C to A,
3593     //   -- binding of an expression of type C to a reference of type
3594     //      B& is better than binding an expression of type C to a
3595     //      reference of type A&,
3596     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3597         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3598       if (S.IsDerivedFrom(ToType1, ToType2))
3599         return ImplicitConversionSequence::Better;
3600       else if (S.IsDerivedFrom(ToType2, ToType1))
3601         return ImplicitConversionSequence::Worse;
3602     }
3603 
3604     //   -- conversion of B to A is better than conversion of C to A.
3605     //   -- binding of an expression of type B to a reference of type
3606     //      A& is better than binding an expression of type C to a
3607     //      reference of type A&,
3608     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3609         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3610       if (S.IsDerivedFrom(FromType2, FromType1))
3611         return ImplicitConversionSequence::Better;
3612       else if (S.IsDerivedFrom(FromType1, FromType2))
3613         return ImplicitConversionSequence::Worse;
3614     }
3615   }
3616 
3617   return ImplicitConversionSequence::Indistinguishable;
3618 }
3619 
3620 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
3621 /// determine whether they are reference-related,
3622 /// reference-compatible, reference-compatible with added
3623 /// qualification, or incompatible, for use in C++ initialization by
3624 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3625 /// type, and the first type (T1) is the pointee type of the reference
3626 /// type being initialized.
3627 Sema::ReferenceCompareResult
3628 Sema::CompareReferenceRelationship(SourceLocation Loc,
3629                                    QualType OrigT1, QualType OrigT2,
3630                                    bool &DerivedToBase,
3631                                    bool &ObjCConversion,
3632                                    bool &ObjCLifetimeConversion) {
3633   assert(!OrigT1->isReferenceType() &&
3634     "T1 must be the pointee type of the reference type");
3635   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3636 
3637   QualType T1 = Context.getCanonicalType(OrigT1);
3638   QualType T2 = Context.getCanonicalType(OrigT2);
3639   Qualifiers T1Quals, T2Quals;
3640   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3641   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3642 
3643   // C++ [dcl.init.ref]p4:
3644   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3645   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3646   //   T1 is a base class of T2.
3647   DerivedToBase = false;
3648   ObjCConversion = false;
3649   ObjCLifetimeConversion = false;
3650   if (UnqualT1 == UnqualT2) {
3651     // Nothing to do.
3652   } else if (!RequireCompleteType(Loc, OrigT2, PDiag()) &&
3653            IsDerivedFrom(UnqualT2, UnqualT1))
3654     DerivedToBase = true;
3655   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3656            UnqualT2->isObjCObjectOrInterfaceType() &&
3657            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3658     ObjCConversion = true;
3659   else
3660     return Ref_Incompatible;
3661 
3662   // At this point, we know that T1 and T2 are reference-related (at
3663   // least).
3664 
3665   // If the type is an array type, promote the element qualifiers to the type
3666   // for comparison.
3667   if (isa<ArrayType>(T1) && T1Quals)
3668     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
3669   if (isa<ArrayType>(T2) && T2Quals)
3670     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
3671 
3672   // C++ [dcl.init.ref]p4:
3673   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
3674   //   reference-related to T2 and cv1 is the same cv-qualification
3675   //   as, or greater cv-qualification than, cv2. For purposes of
3676   //   overload resolution, cases for which cv1 is greater
3677   //   cv-qualification than cv2 are identified as
3678   //   reference-compatible with added qualification (see 13.3.3.2).
3679   //
3680   // Note that we also require equivalence of Objective-C GC and address-space
3681   // qualifiers when performing these computations, so that e.g., an int in
3682   // address space 1 is not reference-compatible with an int in address
3683   // space 2.
3684   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
3685       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
3686     T1Quals.removeObjCLifetime();
3687     T2Quals.removeObjCLifetime();
3688     ObjCLifetimeConversion = true;
3689   }
3690 
3691   if (T1Quals == T2Quals)
3692     return Ref_Compatible;
3693   else if (T1Quals.compatiblyIncludes(T2Quals))
3694     return Ref_Compatible_With_Added_Qualification;
3695   else
3696     return Ref_Related;
3697 }
3698 
3699 /// \brief Look for a user-defined conversion to an value reference-compatible
3700 ///        with DeclType. Return true if something definite is found.
3701 static bool
3702 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
3703                          QualType DeclType, SourceLocation DeclLoc,
3704                          Expr *Init, QualType T2, bool AllowRvalues,
3705                          bool AllowExplicit) {
3706   assert(T2->isRecordType() && "Can only find conversions of record types.");
3707   CXXRecordDecl *T2RecordDecl
3708     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
3709 
3710   OverloadCandidateSet CandidateSet(DeclLoc);
3711   const UnresolvedSetImpl *Conversions
3712     = T2RecordDecl->getVisibleConversionFunctions();
3713   for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3714          E = Conversions->end(); I != E; ++I) {
3715     NamedDecl *D = *I;
3716     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
3717     if (isa<UsingShadowDecl>(D))
3718       D = cast<UsingShadowDecl>(D)->getTargetDecl();
3719 
3720     FunctionTemplateDecl *ConvTemplate
3721       = dyn_cast<FunctionTemplateDecl>(D);
3722     CXXConversionDecl *Conv;
3723     if (ConvTemplate)
3724       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3725     else
3726       Conv = cast<CXXConversionDecl>(D);
3727 
3728     // If this is an explicit conversion, and we're not allowed to consider
3729     // explicit conversions, skip it.
3730     if (!AllowExplicit && Conv->isExplicit())
3731       continue;
3732 
3733     if (AllowRvalues) {
3734       bool DerivedToBase = false;
3735       bool ObjCConversion = false;
3736       bool ObjCLifetimeConversion = false;
3737 
3738       // If we are initializing an rvalue reference, don't permit conversion
3739       // functions that return lvalues.
3740       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
3741         const ReferenceType *RefType
3742           = Conv->getConversionType()->getAs<LValueReferenceType>();
3743         if (RefType && !RefType->getPointeeType()->isFunctionType())
3744           continue;
3745       }
3746 
3747       if (!ConvTemplate &&
3748           S.CompareReferenceRelationship(
3749             DeclLoc,
3750             Conv->getConversionType().getNonReferenceType()
3751               .getUnqualifiedType(),
3752             DeclType.getNonReferenceType().getUnqualifiedType(),
3753             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
3754           Sema::Ref_Incompatible)
3755         continue;
3756     } else {
3757       // If the conversion function doesn't return a reference type,
3758       // it can't be considered for this conversion. An rvalue reference
3759       // is only acceptable if its referencee is a function type.
3760 
3761       const ReferenceType *RefType =
3762         Conv->getConversionType()->getAs<ReferenceType>();
3763       if (!RefType ||
3764           (!RefType->isLValueReferenceType() &&
3765            !RefType->getPointeeType()->isFunctionType()))
3766         continue;
3767     }
3768 
3769     if (ConvTemplate)
3770       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
3771                                        Init, DeclType, CandidateSet);
3772     else
3773       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
3774                                DeclType, CandidateSet);
3775   }
3776 
3777   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3778 
3779   OverloadCandidateSet::iterator Best;
3780   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
3781   case OR_Success:
3782     // C++ [over.ics.ref]p1:
3783     //
3784     //   [...] If the parameter binds directly to the result of
3785     //   applying a conversion function to the argument
3786     //   expression, the implicit conversion sequence is a
3787     //   user-defined conversion sequence (13.3.3.1.2), with the
3788     //   second standard conversion sequence either an identity
3789     //   conversion or, if the conversion function returns an
3790     //   entity of a type that is a derived class of the parameter
3791     //   type, a derived-to-base Conversion.
3792     if (!Best->FinalConversion.DirectBinding)
3793       return false;
3794 
3795     if (Best->Function)
3796       S.MarkDeclarationReferenced(DeclLoc, Best->Function);
3797     ICS.setUserDefined();
3798     ICS.UserDefined.Before = Best->Conversions[0].Standard;
3799     ICS.UserDefined.After = Best->FinalConversion;
3800     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
3801     ICS.UserDefined.ConversionFunction = Best->Function;
3802     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
3803     ICS.UserDefined.EllipsisConversion = false;
3804     assert(ICS.UserDefined.After.ReferenceBinding &&
3805            ICS.UserDefined.After.DirectBinding &&
3806            "Expected a direct reference binding!");
3807     return true;
3808 
3809   case OR_Ambiguous:
3810     ICS.setAmbiguous();
3811     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
3812          Cand != CandidateSet.end(); ++Cand)
3813       if (Cand->Viable)
3814         ICS.Ambiguous.addConversion(Cand->Function);
3815     return true;
3816 
3817   case OR_No_Viable_Function:
3818   case OR_Deleted:
3819     // There was no suitable conversion, or we found a deleted
3820     // conversion; continue with other checks.
3821     return false;
3822   }
3823 
3824   llvm_unreachable("Invalid OverloadResult!");
3825 }
3826 
3827 /// \brief Compute an implicit conversion sequence for reference
3828 /// initialization.
3829 static ImplicitConversionSequence
3830 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
3831                  SourceLocation DeclLoc,
3832                  bool SuppressUserConversions,
3833                  bool AllowExplicit) {
3834   assert(DeclType->isReferenceType() && "Reference init needs a reference");
3835 
3836   // Most paths end in a failed conversion.
3837   ImplicitConversionSequence ICS;
3838   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
3839 
3840   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
3841   QualType T2 = Init->getType();
3842 
3843   // If the initializer is the address of an overloaded function, try
3844   // to resolve the overloaded function. If all goes well, T2 is the
3845   // type of the resulting function.
3846   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
3847     DeclAccessPair Found;
3848     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
3849                                                                 false, Found))
3850       T2 = Fn->getType();
3851   }
3852 
3853   // Compute some basic properties of the types and the initializer.
3854   bool isRValRef = DeclType->isRValueReferenceType();
3855   bool DerivedToBase = false;
3856   bool ObjCConversion = false;
3857   bool ObjCLifetimeConversion = false;
3858   Expr::Classification InitCategory = Init->Classify(S.Context);
3859   Sema::ReferenceCompareResult RefRelationship
3860     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
3861                                      ObjCConversion, ObjCLifetimeConversion);
3862 
3863 
3864   // C++0x [dcl.init.ref]p5:
3865   //   A reference to type "cv1 T1" is initialized by an expression
3866   //   of type "cv2 T2" as follows:
3867 
3868   //     -- If reference is an lvalue reference and the initializer expression
3869   if (!isRValRef) {
3870     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
3871     //        reference-compatible with "cv2 T2," or
3872     //
3873     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
3874     if (InitCategory.isLValue() &&
3875         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
3876       // C++ [over.ics.ref]p1:
3877       //   When a parameter of reference type binds directly (8.5.3)
3878       //   to an argument expression, the implicit conversion sequence
3879       //   is the identity conversion, unless the argument expression
3880       //   has a type that is a derived class of the parameter type,
3881       //   in which case the implicit conversion sequence is a
3882       //   derived-to-base Conversion (13.3.3.1).
3883       ICS.setStandard();
3884       ICS.Standard.First = ICK_Identity;
3885       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
3886                          : ObjCConversion? ICK_Compatible_Conversion
3887                          : ICK_Identity;
3888       ICS.Standard.Third = ICK_Identity;
3889       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
3890       ICS.Standard.setToType(0, T2);
3891       ICS.Standard.setToType(1, T1);
3892       ICS.Standard.setToType(2, T1);
3893       ICS.Standard.ReferenceBinding = true;
3894       ICS.Standard.DirectBinding = true;
3895       ICS.Standard.IsLvalueReference = !isRValRef;
3896       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
3897       ICS.Standard.BindsToRvalue = false;
3898       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
3899       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
3900       ICS.Standard.CopyConstructor = 0;
3901 
3902       // Nothing more to do: the inaccessibility/ambiguity check for
3903       // derived-to-base conversions is suppressed when we're
3904       // computing the implicit conversion sequence (C++
3905       // [over.best.ics]p2).
3906       return ICS;
3907     }
3908 
3909     //       -- has a class type (i.e., T2 is a class type), where T1 is
3910     //          not reference-related to T2, and can be implicitly
3911     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
3912     //          is reference-compatible with "cv3 T3" 92) (this
3913     //          conversion is selected by enumerating the applicable
3914     //          conversion functions (13.3.1.6) and choosing the best
3915     //          one through overload resolution (13.3)),
3916     if (!SuppressUserConversions && T2->isRecordType() &&
3917         !S.RequireCompleteType(DeclLoc, T2, 0) &&
3918         RefRelationship == Sema::Ref_Incompatible) {
3919       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
3920                                    Init, T2, /*AllowRvalues=*/false,
3921                                    AllowExplicit))
3922         return ICS;
3923     }
3924   }
3925 
3926   //     -- Otherwise, the reference shall be an lvalue reference to a
3927   //        non-volatile const type (i.e., cv1 shall be const), or the reference
3928   //        shall be an rvalue reference.
3929   //
3930   // We actually handle one oddity of C++ [over.ics.ref] at this
3931   // point, which is that, due to p2 (which short-circuits reference
3932   // binding by only attempting a simple conversion for non-direct
3933   // bindings) and p3's strange wording, we allow a const volatile
3934   // reference to bind to an rvalue. Hence the check for the presence
3935   // of "const" rather than checking for "const" being the only
3936   // qualifier.
3937   // This is also the point where rvalue references and lvalue inits no longer
3938   // go together.
3939   if (!isRValRef && !T1.isConstQualified())
3940     return ICS;
3941 
3942   //       -- If the initializer expression
3943   //
3944   //            -- is an xvalue, class prvalue, array prvalue or function
3945   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
3946   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
3947       (InitCategory.isXValue() ||
3948       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
3949       (InitCategory.isLValue() && T2->isFunctionType()))) {
3950     ICS.setStandard();
3951     ICS.Standard.First = ICK_Identity;
3952     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
3953                       : ObjCConversion? ICK_Compatible_Conversion
3954                       : ICK_Identity;
3955     ICS.Standard.Third = ICK_Identity;
3956     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
3957     ICS.Standard.setToType(0, T2);
3958     ICS.Standard.setToType(1, T1);
3959     ICS.Standard.setToType(2, T1);
3960     ICS.Standard.ReferenceBinding = true;
3961     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
3962     // binding unless we're binding to a class prvalue.
3963     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
3964     // allow the use of rvalue references in C++98/03 for the benefit of
3965     // standard library implementors; therefore, we need the xvalue check here.
3966     ICS.Standard.DirectBinding =
3967       S.getLangOptions().CPlusPlus0x ||
3968       (InitCategory.isPRValue() && !T2->isRecordType());
3969     ICS.Standard.IsLvalueReference = !isRValRef;
3970     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
3971     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
3972     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
3973     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
3974     ICS.Standard.CopyConstructor = 0;
3975     return ICS;
3976   }
3977 
3978   //            -- has a class type (i.e., T2 is a class type), where T1 is not
3979   //               reference-related to T2, and can be implicitly converted to
3980   //               an xvalue, class prvalue, or function lvalue of type
3981   //               "cv3 T3", where "cv1 T1" is reference-compatible with
3982   //               "cv3 T3",
3983   //
3984   //          then the reference is bound to the value of the initializer
3985   //          expression in the first case and to the result of the conversion
3986   //          in the second case (or, in either case, to an appropriate base
3987   //          class subobject).
3988   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
3989       T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
3990       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
3991                                Init, T2, /*AllowRvalues=*/true,
3992                                AllowExplicit)) {
3993     // In the second case, if the reference is an rvalue reference
3994     // and the second standard conversion sequence of the
3995     // user-defined conversion sequence includes an lvalue-to-rvalue
3996     // conversion, the program is ill-formed.
3997     if (ICS.isUserDefined() && isRValRef &&
3998         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
3999       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4000 
4001     return ICS;
4002   }
4003 
4004   //       -- Otherwise, a temporary of type "cv1 T1" is created and
4005   //          initialized from the initializer expression using the
4006   //          rules for a non-reference copy initialization (8.5). The
4007   //          reference is then bound to the temporary. If T1 is
4008   //          reference-related to T2, cv1 must be the same
4009   //          cv-qualification as, or greater cv-qualification than,
4010   //          cv2; otherwise, the program is ill-formed.
4011   if (RefRelationship == Sema::Ref_Related) {
4012     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4013     // we would be reference-compatible or reference-compatible with
4014     // added qualification. But that wasn't the case, so the reference
4015     // initialization fails.
4016     //
4017     // Note that we only want to check address spaces and cvr-qualifiers here.
4018     // ObjC GC and lifetime qualifiers aren't important.
4019     Qualifiers T1Quals = T1.getQualifiers();
4020     Qualifiers T2Quals = T2.getQualifiers();
4021     T1Quals.removeObjCGCAttr();
4022     T1Quals.removeObjCLifetime();
4023     T2Quals.removeObjCGCAttr();
4024     T2Quals.removeObjCLifetime();
4025     if (!T1Quals.compatiblyIncludes(T2Quals))
4026       return ICS;
4027   }
4028 
4029   // If at least one of the types is a class type, the types are not
4030   // related, and we aren't allowed any user conversions, the
4031   // reference binding fails. This case is important for breaking
4032   // recursion, since TryImplicitConversion below will attempt to
4033   // create a temporary through the use of a copy constructor.
4034   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4035       (T1->isRecordType() || T2->isRecordType()))
4036     return ICS;
4037 
4038   // If T1 is reference-related to T2 and the reference is an rvalue
4039   // reference, the initializer expression shall not be an lvalue.
4040   if (RefRelationship >= Sema::Ref_Related &&
4041       isRValRef && Init->Classify(S.Context).isLValue())
4042     return ICS;
4043 
4044   // C++ [over.ics.ref]p2:
4045   //   When a parameter of reference type is not bound directly to
4046   //   an argument expression, the conversion sequence is the one
4047   //   required to convert the argument expression to the
4048   //   underlying type of the reference according to
4049   //   13.3.3.1. Conceptually, this conversion sequence corresponds
4050   //   to copy-initializing a temporary of the underlying type with
4051   //   the argument expression. Any difference in top-level
4052   //   cv-qualification is subsumed by the initialization itself
4053   //   and does not constitute a conversion.
4054   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4055                               /*AllowExplicit=*/false,
4056                               /*InOverloadResolution=*/false,
4057                               /*CStyle=*/false,
4058                               /*AllowObjCWritebackConversion=*/false);
4059 
4060   // Of course, that's still a reference binding.
4061   if (ICS.isStandard()) {
4062     ICS.Standard.ReferenceBinding = true;
4063     ICS.Standard.IsLvalueReference = !isRValRef;
4064     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4065     ICS.Standard.BindsToRvalue = true;
4066     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4067     ICS.Standard.ObjCLifetimeConversionBinding = false;
4068   } else if (ICS.isUserDefined()) {
4069     // Don't allow rvalue references to bind to lvalues.
4070     if (DeclType->isRValueReferenceType()) {
4071       if (const ReferenceType *RefType
4072             = ICS.UserDefined.ConversionFunction->getResultType()
4073                 ->getAs<LValueReferenceType>()) {
4074         if (!RefType->getPointeeType()->isFunctionType()) {
4075           ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4076                      DeclType);
4077           return ICS;
4078         }
4079       }
4080     }
4081 
4082     ICS.UserDefined.After.ReferenceBinding = true;
4083     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4084     ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4085     ICS.UserDefined.After.BindsToRvalue = true;
4086     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4087     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4088   }
4089 
4090   return ICS;
4091 }
4092 
4093 static ImplicitConversionSequence
4094 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4095                       bool SuppressUserConversions,
4096                       bool InOverloadResolution,
4097                       bool AllowObjCWritebackConversion);
4098 
4099 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4100 /// initializer list From.
4101 static ImplicitConversionSequence
4102 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4103                   bool SuppressUserConversions,
4104                   bool InOverloadResolution,
4105                   bool AllowObjCWritebackConversion) {
4106   // C++11 [over.ics.list]p1:
4107   //   When an argument is an initializer list, it is not an expression and
4108   //   special rules apply for converting it to a parameter type.
4109 
4110   ImplicitConversionSequence Result;
4111   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4112   Result.setListInitializationSequence();
4113 
4114   // We need a complete type for what follows. Incomplete types can never be
4115   // initialized from init lists.
4116   if (S.RequireCompleteType(From->getLocStart(), ToType, S.PDiag()))
4117     return Result;
4118 
4119   // C++11 [over.ics.list]p2:
4120   //   If the parameter type is std::initializer_list<X> or "array of X" and
4121   //   all the elements can be implicitly converted to X, the implicit
4122   //   conversion sequence is the worst conversion necessary to convert an
4123   //   element of the list to X.
4124   QualType X;
4125   if (ToType->isArrayType())
4126     X = S.Context.getBaseElementType(ToType);
4127   else
4128     (void)S.isStdInitializerList(ToType, &X);
4129   if (!X.isNull()) {
4130     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4131       Expr *Init = From->getInit(i);
4132       ImplicitConversionSequence ICS =
4133           TryCopyInitialization(S, Init, X, SuppressUserConversions,
4134                                 InOverloadResolution,
4135                                 AllowObjCWritebackConversion);
4136       // If a single element isn't convertible, fail.
4137       if (ICS.isBad()) {
4138         Result = ICS;
4139         break;
4140       }
4141       // Otherwise, look for the worst conversion.
4142       if (Result.isBad() ||
4143           CompareImplicitConversionSequences(S, ICS, Result) ==
4144               ImplicitConversionSequence::Worse)
4145         Result = ICS;
4146     }
4147     Result.setListInitializationSequence();
4148     return Result;
4149   }
4150 
4151   // C++11 [over.ics.list]p3:
4152   //   Otherwise, if the parameter is a non-aggregate class X and overload
4153   //   resolution chooses a single best constructor [...] the implicit
4154   //   conversion sequence is a user-defined conversion sequence. If multiple
4155   //   constructors are viable but none is better than the others, the
4156   //   implicit conversion sequence is a user-defined conversion sequence.
4157   if (ToType->isRecordType() && !ToType->isAggregateType()) {
4158     // This function can deal with initializer lists.
4159     Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4160                                       /*AllowExplicit=*/false,
4161                                       InOverloadResolution, /*CStyle=*/false,
4162                                       AllowObjCWritebackConversion);
4163     Result.setListInitializationSequence();
4164     return Result;
4165   }
4166 
4167   // C++11 [over.ics.list]p4:
4168   //   Otherwise, if the parameter has an aggregate type which can be
4169   //   initialized from the initializer list [...] the implicit conversion
4170   //   sequence is a user-defined conversion sequence.
4171   if (ToType->isAggregateType()) {
4172     // Type is an aggregate, argument is an init list. At this point it comes
4173     // down to checking whether the initialization works.
4174     // FIXME: Find out whether this parameter is consumed or not.
4175     InitializedEntity Entity =
4176         InitializedEntity::InitializeParameter(S.Context, ToType,
4177                                                /*Consumed=*/false);
4178     if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4179       Result.setUserDefined();
4180       Result.UserDefined.Before.setAsIdentityConversion();
4181       // Initializer lists don't have a type.
4182       Result.UserDefined.Before.setFromType(QualType());
4183       Result.UserDefined.Before.setAllToTypes(QualType());
4184 
4185       Result.UserDefined.After.setAsIdentityConversion();
4186       Result.UserDefined.After.setFromType(ToType);
4187       Result.UserDefined.After.setAllToTypes(ToType);
4188     }
4189     return Result;
4190   }
4191 
4192   // C++11 [over.ics.list]p5:
4193   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4194   if (ToType->isReferenceType()) {
4195     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4196     // mention initializer lists in any way. So we go by what list-
4197     // initialization would do and try to extrapolate from that.
4198 
4199     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4200 
4201     // If the initializer list has a single element that is reference-related
4202     // to the parameter type, we initialize the reference from that.
4203     if (From->getNumInits() == 1) {
4204       Expr *Init = From->getInit(0);
4205 
4206       QualType T2 = Init->getType();
4207 
4208       // If the initializer is the address of an overloaded function, try
4209       // to resolve the overloaded function. If all goes well, T2 is the
4210       // type of the resulting function.
4211       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4212         DeclAccessPair Found;
4213         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4214                                    Init, ToType, false, Found))
4215           T2 = Fn->getType();
4216       }
4217 
4218       // Compute some basic properties of the types and the initializer.
4219       bool dummy1 = false;
4220       bool dummy2 = false;
4221       bool dummy3 = false;
4222       Sema::ReferenceCompareResult RefRelationship
4223         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4224                                          dummy2, dummy3);
4225 
4226       if (RefRelationship >= Sema::Ref_Related)
4227         return TryReferenceInit(S, Init, ToType,
4228                                 /*FIXME:*/From->getLocStart(),
4229                                 SuppressUserConversions,
4230                                 /*AllowExplicit=*/false);
4231     }
4232 
4233     // Otherwise, we bind the reference to a temporary created from the
4234     // initializer list.
4235     Result = TryListConversion(S, From, T1, SuppressUserConversions,
4236                                InOverloadResolution,
4237                                AllowObjCWritebackConversion);
4238     if (Result.isFailure())
4239       return Result;
4240     assert(!Result.isEllipsis() &&
4241            "Sub-initialization cannot result in ellipsis conversion.");
4242 
4243     // Can we even bind to a temporary?
4244     if (ToType->isRValueReferenceType() ||
4245         (T1.isConstQualified() && !T1.isVolatileQualified())) {
4246       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4247                                             Result.UserDefined.After;
4248       SCS.ReferenceBinding = true;
4249       SCS.IsLvalueReference = ToType->isLValueReferenceType();
4250       SCS.BindsToRvalue = true;
4251       SCS.BindsToFunctionLvalue = false;
4252       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4253       SCS.ObjCLifetimeConversionBinding = false;
4254     } else
4255       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4256                     From, ToType);
4257     return Result;
4258   }
4259 
4260   // C++11 [over.ics.list]p6:
4261   //   Otherwise, if the parameter type is not a class:
4262   if (!ToType->isRecordType()) {
4263     //    - if the initializer list has one element, the implicit conversion
4264     //      sequence is the one required to convert the element to the
4265     //      parameter type.
4266     unsigned NumInits = From->getNumInits();
4267     if (NumInits == 1)
4268       Result = TryCopyInitialization(S, From->getInit(0), ToType,
4269                                      SuppressUserConversions,
4270                                      InOverloadResolution,
4271                                      AllowObjCWritebackConversion);
4272     //    - if the initializer list has no elements, the implicit conversion
4273     //      sequence is the identity conversion.
4274     else if (NumInits == 0) {
4275       Result.setStandard();
4276       Result.Standard.setAsIdentityConversion();
4277     }
4278     return Result;
4279   }
4280 
4281   // C++11 [over.ics.list]p7:
4282   //   In all cases other than those enumerated above, no conversion is possible
4283   return Result;
4284 }
4285 
4286 /// TryCopyInitialization - Try to copy-initialize a value of type
4287 /// ToType from the expression From. Return the implicit conversion
4288 /// sequence required to pass this argument, which may be a bad
4289 /// conversion sequence (meaning that the argument cannot be passed to
4290 /// a parameter of this type). If @p SuppressUserConversions, then we
4291 /// do not permit any user-defined conversion sequences.
4292 static ImplicitConversionSequence
4293 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4294                       bool SuppressUserConversions,
4295                       bool InOverloadResolution,
4296                       bool AllowObjCWritebackConversion) {
4297   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4298     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4299                              InOverloadResolution,AllowObjCWritebackConversion);
4300 
4301   if (ToType->isReferenceType())
4302     return TryReferenceInit(S, From, ToType,
4303                             /*FIXME:*/From->getLocStart(),
4304                             SuppressUserConversions,
4305                             /*AllowExplicit=*/false);
4306 
4307   return TryImplicitConversion(S, From, ToType,
4308                                SuppressUserConversions,
4309                                /*AllowExplicit=*/false,
4310                                InOverloadResolution,
4311                                /*CStyle=*/false,
4312                                AllowObjCWritebackConversion);
4313 }
4314 
4315 static bool TryCopyInitialization(const CanQualType FromQTy,
4316                                   const CanQualType ToQTy,
4317                                   Sema &S,
4318                                   SourceLocation Loc,
4319                                   ExprValueKind FromVK) {
4320   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4321   ImplicitConversionSequence ICS =
4322     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4323 
4324   return !ICS.isBad();
4325 }
4326 
4327 /// TryObjectArgumentInitialization - Try to initialize the object
4328 /// parameter of the given member function (@c Method) from the
4329 /// expression @p From.
4330 static ImplicitConversionSequence
4331 TryObjectArgumentInitialization(Sema &S, QualType OrigFromType,
4332                                 Expr::Classification FromClassification,
4333                                 CXXMethodDecl *Method,
4334                                 CXXRecordDecl *ActingContext) {
4335   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4336   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4337   //                 const volatile object.
4338   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4339     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4340   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4341 
4342   // Set up the conversion sequence as a "bad" conversion, to allow us
4343   // to exit early.
4344   ImplicitConversionSequence ICS;
4345 
4346   // We need to have an object of class type.
4347   QualType FromType = OrigFromType;
4348   if (const PointerType *PT = FromType->getAs<PointerType>()) {
4349     FromType = PT->getPointeeType();
4350 
4351     // When we had a pointer, it's implicitly dereferenced, so we
4352     // better have an lvalue.
4353     assert(FromClassification.isLValue());
4354   }
4355 
4356   assert(FromType->isRecordType());
4357 
4358   // C++0x [over.match.funcs]p4:
4359   //   For non-static member functions, the type of the implicit object
4360   //   parameter is
4361   //
4362   //     - "lvalue reference to cv X" for functions declared without a
4363   //        ref-qualifier or with the & ref-qualifier
4364   //     - "rvalue reference to cv X" for functions declared with the &&
4365   //        ref-qualifier
4366   //
4367   // where X is the class of which the function is a member and cv is the
4368   // cv-qualification on the member function declaration.
4369   //
4370   // However, when finding an implicit conversion sequence for the argument, we
4371   // are not allowed to create temporaries or perform user-defined conversions
4372   // (C++ [over.match.funcs]p5). We perform a simplified version of
4373   // reference binding here, that allows class rvalues to bind to
4374   // non-constant references.
4375 
4376   // First check the qualifiers.
4377   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4378   if (ImplicitParamType.getCVRQualifiers()
4379                                     != FromTypeCanon.getLocalCVRQualifiers() &&
4380       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4381     ICS.setBad(BadConversionSequence::bad_qualifiers,
4382                OrigFromType, ImplicitParamType);
4383     return ICS;
4384   }
4385 
4386   // Check that we have either the same type or a derived type. It
4387   // affects the conversion rank.
4388   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4389   ImplicitConversionKind SecondKind;
4390   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4391     SecondKind = ICK_Identity;
4392   } else if (S.IsDerivedFrom(FromType, ClassType))
4393     SecondKind = ICK_Derived_To_Base;
4394   else {
4395     ICS.setBad(BadConversionSequence::unrelated_class,
4396                FromType, ImplicitParamType);
4397     return ICS;
4398   }
4399 
4400   // Check the ref-qualifier.
4401   switch (Method->getRefQualifier()) {
4402   case RQ_None:
4403     // Do nothing; we don't care about lvalueness or rvalueness.
4404     break;
4405 
4406   case RQ_LValue:
4407     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4408       // non-const lvalue reference cannot bind to an rvalue
4409       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4410                  ImplicitParamType);
4411       return ICS;
4412     }
4413     break;
4414 
4415   case RQ_RValue:
4416     if (!FromClassification.isRValue()) {
4417       // rvalue reference cannot bind to an lvalue
4418       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4419                  ImplicitParamType);
4420       return ICS;
4421     }
4422     break;
4423   }
4424 
4425   // Success. Mark this as a reference binding.
4426   ICS.setStandard();
4427   ICS.Standard.setAsIdentityConversion();
4428   ICS.Standard.Second = SecondKind;
4429   ICS.Standard.setFromType(FromType);
4430   ICS.Standard.setAllToTypes(ImplicitParamType);
4431   ICS.Standard.ReferenceBinding = true;
4432   ICS.Standard.DirectBinding = true;
4433   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4434   ICS.Standard.BindsToFunctionLvalue = false;
4435   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4436   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4437     = (Method->getRefQualifier() == RQ_None);
4438   return ICS;
4439 }
4440 
4441 /// PerformObjectArgumentInitialization - Perform initialization of
4442 /// the implicit object parameter for the given Method with the given
4443 /// expression.
4444 ExprResult
4445 Sema::PerformObjectArgumentInitialization(Expr *From,
4446                                           NestedNameSpecifier *Qualifier,
4447                                           NamedDecl *FoundDecl,
4448                                           CXXMethodDecl *Method) {
4449   QualType FromRecordType, DestType;
4450   QualType ImplicitParamRecordType  =
4451     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4452 
4453   Expr::Classification FromClassification;
4454   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4455     FromRecordType = PT->getPointeeType();
4456     DestType = Method->getThisType(Context);
4457     FromClassification = Expr::Classification::makeSimpleLValue();
4458   } else {
4459     FromRecordType = From->getType();
4460     DestType = ImplicitParamRecordType;
4461     FromClassification = From->Classify(Context);
4462   }
4463 
4464   // Note that we always use the true parent context when performing
4465   // the actual argument initialization.
4466   ImplicitConversionSequence ICS
4467     = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4468                                       Method, Method->getParent());
4469   if (ICS.isBad()) {
4470     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4471       Qualifiers FromQs = FromRecordType.getQualifiers();
4472       Qualifiers ToQs = DestType.getQualifiers();
4473       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4474       if (CVR) {
4475         Diag(From->getSourceRange().getBegin(),
4476              diag::err_member_function_call_bad_cvr)
4477           << Method->getDeclName() << FromRecordType << (CVR - 1)
4478           << From->getSourceRange();
4479         Diag(Method->getLocation(), diag::note_previous_decl)
4480           << Method->getDeclName();
4481         return ExprError();
4482       }
4483     }
4484 
4485     return Diag(From->getSourceRange().getBegin(),
4486                 diag::err_implicit_object_parameter_init)
4487        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4488   }
4489 
4490   if (ICS.Standard.Second == ICK_Derived_To_Base) {
4491     ExprResult FromRes =
4492       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4493     if (FromRes.isInvalid())
4494       return ExprError();
4495     From = FromRes.take();
4496   }
4497 
4498   if (!Context.hasSameType(From->getType(), DestType))
4499     From = ImpCastExprToType(From, DestType, CK_NoOp,
4500                              From->getValueKind()).take();
4501   return Owned(From);
4502 }
4503 
4504 /// TryContextuallyConvertToBool - Attempt to contextually convert the
4505 /// expression From to bool (C++0x [conv]p3).
4506 static ImplicitConversionSequence
4507 TryContextuallyConvertToBool(Sema &S, Expr *From) {
4508   // FIXME: This is pretty broken.
4509   return TryImplicitConversion(S, From, S.Context.BoolTy,
4510                                // FIXME: Are these flags correct?
4511                                /*SuppressUserConversions=*/false,
4512                                /*AllowExplicit=*/true,
4513                                /*InOverloadResolution=*/false,
4514                                /*CStyle=*/false,
4515                                /*AllowObjCWritebackConversion=*/false);
4516 }
4517 
4518 /// PerformContextuallyConvertToBool - Perform a contextual conversion
4519 /// of the expression From to bool (C++0x [conv]p3).
4520 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4521   if (checkPlaceholderForOverload(*this, From))
4522     return ExprError();
4523 
4524   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4525   if (!ICS.isBad())
4526     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4527 
4528   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4529     return Diag(From->getSourceRange().getBegin(),
4530                 diag::err_typecheck_bool_condition)
4531                   << From->getType() << From->getSourceRange();
4532   return ExprError();
4533 }
4534 
4535 /// Check that the specified conversion is permitted in a converted constant
4536 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
4537 /// is acceptable.
4538 static bool CheckConvertedConstantConversions(Sema &S,
4539                                               StandardConversionSequence &SCS) {
4540   // Since we know that the target type is an integral or unscoped enumeration
4541   // type, most conversion kinds are impossible. All possible First and Third
4542   // conversions are fine.
4543   switch (SCS.Second) {
4544   case ICK_Identity:
4545   case ICK_Integral_Promotion:
4546   case ICK_Integral_Conversion:
4547     return true;
4548 
4549   case ICK_Boolean_Conversion:
4550     // Conversion from an integral or unscoped enumeration type to bool is
4551     // classified as ICK_Boolean_Conversion, but it's also an integral
4552     // conversion, so it's permitted in a converted constant expression.
4553     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4554            SCS.getToType(2)->isBooleanType();
4555 
4556   case ICK_Floating_Integral:
4557   case ICK_Complex_Real:
4558     return false;
4559 
4560   case ICK_Lvalue_To_Rvalue:
4561   case ICK_Array_To_Pointer:
4562   case ICK_Function_To_Pointer:
4563   case ICK_NoReturn_Adjustment:
4564   case ICK_Qualification:
4565   case ICK_Compatible_Conversion:
4566   case ICK_Vector_Conversion:
4567   case ICK_Vector_Splat:
4568   case ICK_Derived_To_Base:
4569   case ICK_Pointer_Conversion:
4570   case ICK_Pointer_Member:
4571   case ICK_Block_Pointer_Conversion:
4572   case ICK_Writeback_Conversion:
4573   case ICK_Floating_Promotion:
4574   case ICK_Complex_Promotion:
4575   case ICK_Complex_Conversion:
4576   case ICK_Floating_Conversion:
4577   case ICK_TransparentUnionConversion:
4578     llvm_unreachable("unexpected second conversion kind");
4579 
4580   case ICK_Num_Conversion_Kinds:
4581     break;
4582   }
4583 
4584   llvm_unreachable("unknown conversion kind");
4585 }
4586 
4587 /// CheckConvertedConstantExpression - Check that the expression From is a
4588 /// converted constant expression of type T, perform the conversion and produce
4589 /// the converted expression, per C++11 [expr.const]p3.
4590 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4591                                                   llvm::APSInt &Value,
4592                                                   CCEKind CCE) {
4593   assert(LangOpts.CPlusPlus0x && "converted constant expression outside C++11");
4594   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4595 
4596   if (checkPlaceholderForOverload(*this, From))
4597     return ExprError();
4598 
4599   // C++11 [expr.const]p3 with proposed wording fixes:
4600   //  A converted constant expression of type T is a core constant expression,
4601   //  implicitly converted to a prvalue of type T, where the converted
4602   //  expression is a literal constant expression and the implicit conversion
4603   //  sequence contains only user-defined conversions, lvalue-to-rvalue
4604   //  conversions, integral promotions, and integral conversions other than
4605   //  narrowing conversions.
4606   ImplicitConversionSequence ICS =
4607     TryImplicitConversion(From, T,
4608                           /*SuppressUserConversions=*/false,
4609                           /*AllowExplicit=*/false,
4610                           /*InOverloadResolution=*/false,
4611                           /*CStyle=*/false,
4612                           /*AllowObjcWritebackConversion=*/false);
4613   StandardConversionSequence *SCS = 0;
4614   switch (ICS.getKind()) {
4615   case ImplicitConversionSequence::StandardConversion:
4616     if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4617       return Diag(From->getSourceRange().getBegin(),
4618                   diag::err_typecheck_converted_constant_expression_disallowed)
4619                << From->getType() << From->getSourceRange() << T;
4620     SCS = &ICS.Standard;
4621     break;
4622   case ImplicitConversionSequence::UserDefinedConversion:
4623     // We are converting from class type to an integral or enumeration type, so
4624     // the Before sequence must be trivial.
4625     if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4626       return Diag(From->getSourceRange().getBegin(),
4627                   diag::err_typecheck_converted_constant_expression_disallowed)
4628                << From->getType() << From->getSourceRange() << T;
4629     SCS = &ICS.UserDefined.After;
4630     break;
4631   case ImplicitConversionSequence::AmbiguousConversion:
4632   case ImplicitConversionSequence::BadConversion:
4633     if (!DiagnoseMultipleUserDefinedConversion(From, T))
4634       return Diag(From->getSourceRange().getBegin(),
4635                   diag::err_typecheck_converted_constant_expression)
4636                     << From->getType() << From->getSourceRange() << T;
4637     return ExprError();
4638 
4639   case ImplicitConversionSequence::EllipsisConversion:
4640     llvm_unreachable("ellipsis conversion in converted constant expression");
4641   }
4642 
4643   ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4644   if (Result.isInvalid())
4645     return Result;
4646 
4647   // Check for a narrowing implicit conversion.
4648   APValue PreNarrowingValue;
4649   switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue)) {
4650   case NK_Variable_Narrowing:
4651     // Implicit conversion to a narrower type, and the value is not a constant
4652     // expression. We'll diagnose this in a moment.
4653   case NK_Not_Narrowing:
4654     break;
4655 
4656   case NK_Constant_Narrowing:
4657     Diag(From->getSourceRange().getBegin(), diag::err_cce_narrowing)
4658       << CCE << /*Constant*/1
4659       << PreNarrowingValue.getAsString(Context, QualType()) << T;
4660     break;
4661 
4662   case NK_Type_Narrowing:
4663     Diag(From->getSourceRange().getBegin(), diag::err_cce_narrowing)
4664       << CCE << /*Constant*/0 << From->getType() << T;
4665     break;
4666   }
4667 
4668   // Check the expression is a constant expression.
4669   llvm::SmallVector<PartialDiagnosticAt, 8> Notes;
4670   Expr::EvalResult Eval;
4671   Eval.Diag = &Notes;
4672 
4673   if (!Result.get()->EvaluateAsRValue(Eval, Context)) {
4674     // The expression can't be folded, so we can't keep it at this position in
4675     // the AST.
4676     Result = ExprError();
4677   } else if (Notes.empty()) {
4678     // It's a constant expression.
4679     Value = Eval.Val.getInt();
4680     return Result;
4681   }
4682 
4683   // It's not a constant expression. Produce an appropriate diagnostic.
4684   if (Notes.size() == 1 &&
4685       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
4686     Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
4687   else {
4688     Diag(From->getSourceRange().getBegin(), diag::err_expr_not_cce)
4689       << CCE << From->getSourceRange();
4690     for (unsigned I = 0; I < Notes.size(); ++I)
4691       Diag(Notes[I].first, Notes[I].second);
4692   }
4693   return ExprError();
4694 }
4695 
4696 /// dropPointerConversions - If the given standard conversion sequence
4697 /// involves any pointer conversions, remove them.  This may change
4698 /// the result type of the conversion sequence.
4699 static void dropPointerConversion(StandardConversionSequence &SCS) {
4700   if (SCS.Second == ICK_Pointer_Conversion) {
4701     SCS.Second = ICK_Identity;
4702     SCS.Third = ICK_Identity;
4703     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
4704   }
4705 }
4706 
4707 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
4708 /// convert the expression From to an Objective-C pointer type.
4709 static ImplicitConversionSequence
4710 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
4711   // Do an implicit conversion to 'id'.
4712   QualType Ty = S.Context.getObjCIdType();
4713   ImplicitConversionSequence ICS
4714     = TryImplicitConversion(S, From, Ty,
4715                             // FIXME: Are these flags correct?
4716                             /*SuppressUserConversions=*/false,
4717                             /*AllowExplicit=*/true,
4718                             /*InOverloadResolution=*/false,
4719                             /*CStyle=*/false,
4720                             /*AllowObjCWritebackConversion=*/false);
4721 
4722   // Strip off any final conversions to 'id'.
4723   switch (ICS.getKind()) {
4724   case ImplicitConversionSequence::BadConversion:
4725   case ImplicitConversionSequence::AmbiguousConversion:
4726   case ImplicitConversionSequence::EllipsisConversion:
4727     break;
4728 
4729   case ImplicitConversionSequence::UserDefinedConversion:
4730     dropPointerConversion(ICS.UserDefined.After);
4731     break;
4732 
4733   case ImplicitConversionSequence::StandardConversion:
4734     dropPointerConversion(ICS.Standard);
4735     break;
4736   }
4737 
4738   return ICS;
4739 }
4740 
4741 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
4742 /// conversion of the expression From to an Objective-C pointer type.
4743 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
4744   if (checkPlaceholderForOverload(*this, From))
4745     return ExprError();
4746 
4747   QualType Ty = Context.getObjCIdType();
4748   ImplicitConversionSequence ICS =
4749     TryContextuallyConvertToObjCPointer(*this, From);
4750   if (!ICS.isBad())
4751     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
4752   return ExprError();
4753 }
4754 
4755 /// \brief Attempt to convert the given expression to an integral or
4756 /// enumeration type.
4757 ///
4758 /// This routine will attempt to convert an expression of class type to an
4759 /// integral or enumeration type, if that class type only has a single
4760 /// conversion to an integral or enumeration type.
4761 ///
4762 /// \param Loc The source location of the construct that requires the
4763 /// conversion.
4764 ///
4765 /// \param FromE The expression we're converting from.
4766 ///
4767 /// \param NotIntDiag The diagnostic to be emitted if the expression does not
4768 /// have integral or enumeration type.
4769 ///
4770 /// \param IncompleteDiag The diagnostic to be emitted if the expression has
4771 /// incomplete class type.
4772 ///
4773 /// \param ExplicitConvDiag The diagnostic to be emitted if we're calling an
4774 /// explicit conversion function (because no implicit conversion functions
4775 /// were available). This is a recovery mode.
4776 ///
4777 /// \param ExplicitConvNote The note to be emitted with \p ExplicitConvDiag,
4778 /// showing which conversion was picked.
4779 ///
4780 /// \param AmbigDiag The diagnostic to be emitted if there is more than one
4781 /// conversion function that could convert to integral or enumeration type.
4782 ///
4783 /// \param AmbigNote The note to be emitted with \p AmbigDiag for each
4784 /// usable conversion function.
4785 ///
4786 /// \param ConvDiag The diagnostic to be emitted if we are calling a conversion
4787 /// function, which may be an extension in this case.
4788 ///
4789 /// \returns The expression, converted to an integral or enumeration type if
4790 /// successful.
4791 ExprResult
4792 Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From,
4793                                          const PartialDiagnostic &NotIntDiag,
4794                                        const PartialDiagnostic &IncompleteDiag,
4795                                      const PartialDiagnostic &ExplicitConvDiag,
4796                                      const PartialDiagnostic &ExplicitConvNote,
4797                                          const PartialDiagnostic &AmbigDiag,
4798                                          const PartialDiagnostic &AmbigNote,
4799                                          const PartialDiagnostic &ConvDiag) {
4800   // We can't perform any more checking for type-dependent expressions.
4801   if (From->isTypeDependent())
4802     return Owned(From);
4803 
4804   // Process placeholders immediately.
4805   if (From->hasPlaceholderType()) {
4806     ExprResult result = CheckPlaceholderExpr(From);
4807     if (result.isInvalid()) return result;
4808     From = result.take();
4809   }
4810 
4811   // If the expression already has integral or enumeration type, we're golden.
4812   QualType T = From->getType();
4813   if (T->isIntegralOrEnumerationType())
4814     return DefaultLvalueConversion(From);
4815 
4816   // FIXME: Check for missing '()' if T is a function type?
4817 
4818   // If we don't have a class type in C++, there's no way we can get an
4819   // expression of integral or enumeration type.
4820   const RecordType *RecordTy = T->getAs<RecordType>();
4821   if (!RecordTy || !getLangOptions().CPlusPlus) {
4822     Diag(Loc, NotIntDiag)
4823       << T << From->getSourceRange();
4824     return Owned(From);
4825   }
4826 
4827   // We must have a complete class type.
4828   if (RequireCompleteType(Loc, T, IncompleteDiag))
4829     return Owned(From);
4830 
4831   // Look for a conversion to an integral or enumeration type.
4832   UnresolvedSet<4> ViableConversions;
4833   UnresolvedSet<4> ExplicitConversions;
4834   const UnresolvedSetImpl *Conversions
4835     = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
4836 
4837   bool HadMultipleCandidates = (Conversions->size() > 1);
4838 
4839   for (UnresolvedSetImpl::iterator I = Conversions->begin(),
4840                                    E = Conversions->end();
4841        I != E;
4842        ++I) {
4843     if (CXXConversionDecl *Conversion
4844           = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl()))
4845       if (Conversion->getConversionType().getNonReferenceType()
4846             ->isIntegralOrEnumerationType()) {
4847         if (Conversion->isExplicit())
4848           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
4849         else
4850           ViableConversions.addDecl(I.getDecl(), I.getAccess());
4851       }
4852   }
4853 
4854   switch (ViableConversions.size()) {
4855   case 0:
4856     if (ExplicitConversions.size() == 1) {
4857       DeclAccessPair Found = ExplicitConversions[0];
4858       CXXConversionDecl *Conversion
4859         = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
4860 
4861       // The user probably meant to invoke the given explicit
4862       // conversion; use it.
4863       QualType ConvTy
4864         = Conversion->getConversionType().getNonReferenceType();
4865       std::string TypeStr;
4866       ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy());
4867 
4868       Diag(Loc, ExplicitConvDiag)
4869         << T << ConvTy
4870         << FixItHint::CreateInsertion(From->getLocStart(),
4871                                       "static_cast<" + TypeStr + ">(")
4872         << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()),
4873                                       ")");
4874       Diag(Conversion->getLocation(), ExplicitConvNote)
4875         << ConvTy->isEnumeralType() << ConvTy;
4876 
4877       // If we aren't in a SFINAE context, build a call to the
4878       // explicit conversion function.
4879       if (isSFINAEContext())
4880         return ExprError();
4881 
4882       CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
4883       ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
4884                                                  HadMultipleCandidates);
4885       if (Result.isInvalid())
4886         return ExprError();
4887       // Record usage of conversion in an implicit cast.
4888       From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
4889                                       CK_UserDefinedConversion,
4890                                       Result.get(), 0,
4891                                       Result.get()->getValueKind());
4892     }
4893 
4894     // We'll complain below about a non-integral condition type.
4895     break;
4896 
4897   case 1: {
4898     // Apply this conversion.
4899     DeclAccessPair Found = ViableConversions[0];
4900     CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
4901 
4902     CXXConversionDecl *Conversion
4903       = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
4904     QualType ConvTy
4905       = Conversion->getConversionType().getNonReferenceType();
4906     if (ConvDiag.getDiagID()) {
4907       if (isSFINAEContext())
4908         return ExprError();
4909 
4910       Diag(Loc, ConvDiag)
4911         << T << ConvTy->isEnumeralType() << ConvTy << From->getSourceRange();
4912     }
4913 
4914     ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
4915                                                HadMultipleCandidates);
4916     if (Result.isInvalid())
4917       return ExprError();
4918     // Record usage of conversion in an implicit cast.
4919     From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
4920                                     CK_UserDefinedConversion,
4921                                     Result.get(), 0,
4922                                     Result.get()->getValueKind());
4923     break;
4924   }
4925 
4926   default:
4927     Diag(Loc, AmbigDiag)
4928       << T << From->getSourceRange();
4929     for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
4930       CXXConversionDecl *Conv
4931         = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
4932       QualType ConvTy = Conv->getConversionType().getNonReferenceType();
4933       Diag(Conv->getLocation(), AmbigNote)
4934         << ConvTy->isEnumeralType() << ConvTy;
4935     }
4936     return Owned(From);
4937   }
4938 
4939   if (!From->getType()->isIntegralOrEnumerationType())
4940     Diag(Loc, NotIntDiag)
4941       << From->getType() << From->getSourceRange();
4942 
4943   return DefaultLvalueConversion(From);
4944 }
4945 
4946 /// AddOverloadCandidate - Adds the given function to the set of
4947 /// candidate functions, using the given function call arguments.  If
4948 /// @p SuppressUserConversions, then don't allow user-defined
4949 /// conversions via constructors or conversion operators.
4950 ///
4951 /// \para PartialOverloading true if we are performing "partial" overloading
4952 /// based on an incomplete set of function arguments. This feature is used by
4953 /// code completion.
4954 void
4955 Sema::AddOverloadCandidate(FunctionDecl *Function,
4956                            DeclAccessPair FoundDecl,
4957                            Expr **Args, unsigned NumArgs,
4958                            OverloadCandidateSet& CandidateSet,
4959                            bool SuppressUserConversions,
4960                            bool PartialOverloading) {
4961   const FunctionProtoType* Proto
4962     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
4963   assert(Proto && "Functions without a prototype cannot be overloaded");
4964   assert(!Function->getDescribedFunctionTemplate() &&
4965          "Use AddTemplateOverloadCandidate for function templates");
4966 
4967   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
4968     if (!isa<CXXConstructorDecl>(Method)) {
4969       // If we get here, it's because we're calling a member function
4970       // that is named without a member access expression (e.g.,
4971       // "this->f") that was either written explicitly or created
4972       // implicitly. This can happen with a qualified call to a member
4973       // function, e.g., X::f(). We use an empty type for the implied
4974       // object argument (C++ [over.call.func]p3), and the acting context
4975       // is irrelevant.
4976       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
4977                          QualType(), Expr::Classification::makeSimpleLValue(),
4978                          Args, NumArgs, CandidateSet,
4979                          SuppressUserConversions);
4980       return;
4981     }
4982     // We treat a constructor like a non-member function, since its object
4983     // argument doesn't participate in overload resolution.
4984   }
4985 
4986   if (!CandidateSet.isNewCandidate(Function))
4987     return;
4988 
4989   // Overload resolution is always an unevaluated context.
4990   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
4991 
4992   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
4993     // C++ [class.copy]p3:
4994     //   A member function template is never instantiated to perform the copy
4995     //   of a class object to an object of its class type.
4996     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
4997     if (NumArgs == 1 &&
4998         Constructor->isSpecializationCopyingObject() &&
4999         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5000          IsDerivedFrom(Args[0]->getType(), ClassType)))
5001       return;
5002   }
5003 
5004   // Add this candidate
5005   OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs);
5006   Candidate.FoundDecl = FoundDecl;
5007   Candidate.Function = Function;
5008   Candidate.Viable = true;
5009   Candidate.IsSurrogate = false;
5010   Candidate.IgnoreObjectArgument = false;
5011   Candidate.ExplicitCallArguments = NumArgs;
5012 
5013   unsigned NumArgsInProto = Proto->getNumArgs();
5014 
5015   // (C++ 13.3.2p2): A candidate function having fewer than m
5016   // parameters is viable only if it has an ellipsis in its parameter
5017   // list (8.3.5).
5018   if ((NumArgs + (PartialOverloading && NumArgs)) > NumArgsInProto &&
5019       !Proto->isVariadic()) {
5020     Candidate.Viable = false;
5021     Candidate.FailureKind = ovl_fail_too_many_arguments;
5022     return;
5023   }
5024 
5025   // (C++ 13.3.2p2): A candidate function having more than m parameters
5026   // is viable only if the (m+1)st parameter has a default argument
5027   // (8.3.6). For the purposes of overload resolution, the
5028   // parameter list is truncated on the right, so that there are
5029   // exactly m parameters.
5030   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5031   if (NumArgs < MinRequiredArgs && !PartialOverloading) {
5032     // Not enough arguments.
5033     Candidate.Viable = false;
5034     Candidate.FailureKind = ovl_fail_too_few_arguments;
5035     return;
5036   }
5037 
5038   // (CUDA B.1): Check for invalid calls between targets.
5039   if (getLangOptions().CUDA)
5040     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5041       if (CheckCUDATarget(Caller, Function)) {
5042         Candidate.Viable = false;
5043         Candidate.FailureKind = ovl_fail_bad_target;
5044         return;
5045       }
5046 
5047   // Determine the implicit conversion sequences for each of the
5048   // arguments.
5049   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
5050     if (ArgIdx < NumArgsInProto) {
5051       // (C++ 13.3.2p3): for F to be a viable function, there shall
5052       // exist for each argument an implicit conversion sequence
5053       // (13.3.3.1) that converts that argument to the corresponding
5054       // parameter of F.
5055       QualType ParamType = Proto->getArgType(ArgIdx);
5056       Candidate.Conversions[ArgIdx]
5057         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5058                                 SuppressUserConversions,
5059                                 /*InOverloadResolution=*/true,
5060                                 /*AllowObjCWritebackConversion=*/
5061                                   getLangOptions().ObjCAutoRefCount);
5062       if (Candidate.Conversions[ArgIdx].isBad()) {
5063         Candidate.Viable = false;
5064         Candidate.FailureKind = ovl_fail_bad_conversion;
5065         break;
5066       }
5067     } else {
5068       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5069       // argument for which there is no corresponding parameter is
5070       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5071       Candidate.Conversions[ArgIdx].setEllipsis();
5072     }
5073   }
5074 }
5075 
5076 /// \brief Add all of the function declarations in the given function set to
5077 /// the overload canddiate set.
5078 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5079                                  Expr **Args, unsigned NumArgs,
5080                                  OverloadCandidateSet& CandidateSet,
5081                                  bool SuppressUserConversions) {
5082   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5083     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5084     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5085       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5086         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5087                            cast<CXXMethodDecl>(FD)->getParent(),
5088                            Args[0]->getType(), Args[0]->Classify(Context),
5089                            Args + 1, NumArgs - 1,
5090                            CandidateSet, SuppressUserConversions);
5091       else
5092         AddOverloadCandidate(FD, F.getPair(), Args, NumArgs, CandidateSet,
5093                              SuppressUserConversions);
5094     } else {
5095       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5096       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5097           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5098         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5099                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5100                                    /*FIXME: explicit args */ 0,
5101                                    Args[0]->getType(),
5102                                    Args[0]->Classify(Context),
5103                                    Args + 1, NumArgs - 1,
5104                                    CandidateSet,
5105                                    SuppressUserConversions);
5106       else
5107         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5108                                      /*FIXME: explicit args */ 0,
5109                                      Args, NumArgs, CandidateSet,
5110                                      SuppressUserConversions);
5111     }
5112   }
5113 }
5114 
5115 /// AddMethodCandidate - Adds a named decl (which is some kind of
5116 /// method) as a method candidate to the given overload set.
5117 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5118                               QualType ObjectType,
5119                               Expr::Classification ObjectClassification,
5120                               Expr **Args, unsigned NumArgs,
5121                               OverloadCandidateSet& CandidateSet,
5122                               bool SuppressUserConversions) {
5123   NamedDecl *Decl = FoundDecl.getDecl();
5124   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5125 
5126   if (isa<UsingShadowDecl>(Decl))
5127     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5128 
5129   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5130     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5131            "Expected a member function template");
5132     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5133                                /*ExplicitArgs*/ 0,
5134                                ObjectType, ObjectClassification, Args, NumArgs,
5135                                CandidateSet,
5136                                SuppressUserConversions);
5137   } else {
5138     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5139                        ObjectType, ObjectClassification, Args, NumArgs,
5140                        CandidateSet, SuppressUserConversions);
5141   }
5142 }
5143 
5144 /// AddMethodCandidate - Adds the given C++ member function to the set
5145 /// of candidate functions, using the given function call arguments
5146 /// and the object argument (@c Object). For example, in a call
5147 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5148 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5149 /// allow user-defined conversions via constructors or conversion
5150 /// operators.
5151 void
5152 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5153                          CXXRecordDecl *ActingContext, QualType ObjectType,
5154                          Expr::Classification ObjectClassification,
5155                          Expr **Args, unsigned NumArgs,
5156                          OverloadCandidateSet& CandidateSet,
5157                          bool SuppressUserConversions) {
5158   const FunctionProtoType* Proto
5159     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5160   assert(Proto && "Methods without a prototype cannot be overloaded");
5161   assert(!isa<CXXConstructorDecl>(Method) &&
5162          "Use AddOverloadCandidate for constructors");
5163 
5164   if (!CandidateSet.isNewCandidate(Method))
5165     return;
5166 
5167   // Overload resolution is always an unevaluated context.
5168   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5169 
5170   // Add this candidate
5171   OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs + 1);
5172   Candidate.FoundDecl = FoundDecl;
5173   Candidate.Function = Method;
5174   Candidate.IsSurrogate = false;
5175   Candidate.IgnoreObjectArgument = false;
5176   Candidate.ExplicitCallArguments = NumArgs;
5177 
5178   unsigned NumArgsInProto = Proto->getNumArgs();
5179 
5180   // (C++ 13.3.2p2): A candidate function having fewer than m
5181   // parameters is viable only if it has an ellipsis in its parameter
5182   // list (8.3.5).
5183   if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
5184     Candidate.Viable = false;
5185     Candidate.FailureKind = ovl_fail_too_many_arguments;
5186     return;
5187   }
5188 
5189   // (C++ 13.3.2p2): A candidate function having more than m parameters
5190   // is viable only if the (m+1)st parameter has a default argument
5191   // (8.3.6). For the purposes of overload resolution, the
5192   // parameter list is truncated on the right, so that there are
5193   // exactly m parameters.
5194   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5195   if (NumArgs < MinRequiredArgs) {
5196     // Not enough arguments.
5197     Candidate.Viable = false;
5198     Candidate.FailureKind = ovl_fail_too_few_arguments;
5199     return;
5200   }
5201 
5202   Candidate.Viable = true;
5203 
5204   if (Method->isStatic() || ObjectType.isNull())
5205     // The implicit object argument is ignored.
5206     Candidate.IgnoreObjectArgument = true;
5207   else {
5208     // Determine the implicit conversion sequence for the object
5209     // parameter.
5210     Candidate.Conversions[0]
5211       = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5212                                         Method, ActingContext);
5213     if (Candidate.Conversions[0].isBad()) {
5214       Candidate.Viable = false;
5215       Candidate.FailureKind = ovl_fail_bad_conversion;
5216       return;
5217     }
5218   }
5219 
5220   // Determine the implicit conversion sequences for each of the
5221   // arguments.
5222   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
5223     if (ArgIdx < NumArgsInProto) {
5224       // (C++ 13.3.2p3): for F to be a viable function, there shall
5225       // exist for each argument an implicit conversion sequence
5226       // (13.3.3.1) that converts that argument to the corresponding
5227       // parameter of F.
5228       QualType ParamType = Proto->getArgType(ArgIdx);
5229       Candidate.Conversions[ArgIdx + 1]
5230         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5231                                 SuppressUserConversions,
5232                                 /*InOverloadResolution=*/true,
5233                                 /*AllowObjCWritebackConversion=*/
5234                                   getLangOptions().ObjCAutoRefCount);
5235       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5236         Candidate.Viable = false;
5237         Candidate.FailureKind = ovl_fail_bad_conversion;
5238         break;
5239       }
5240     } else {
5241       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5242       // argument for which there is no corresponding parameter is
5243       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5244       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5245     }
5246   }
5247 }
5248 
5249 /// \brief Add a C++ member function template as a candidate to the candidate
5250 /// set, using template argument deduction to produce an appropriate member
5251 /// function template specialization.
5252 void
5253 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5254                                  DeclAccessPair FoundDecl,
5255                                  CXXRecordDecl *ActingContext,
5256                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5257                                  QualType ObjectType,
5258                                  Expr::Classification ObjectClassification,
5259                                  Expr **Args, unsigned NumArgs,
5260                                  OverloadCandidateSet& CandidateSet,
5261                                  bool SuppressUserConversions) {
5262   if (!CandidateSet.isNewCandidate(MethodTmpl))
5263     return;
5264 
5265   // C++ [over.match.funcs]p7:
5266   //   In each case where a candidate is a function template, candidate
5267   //   function template specializations are generated using template argument
5268   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5269   //   candidate functions in the usual way.113) A given name can refer to one
5270   //   or more function templates and also to a set of overloaded non-template
5271   //   functions. In such a case, the candidate functions generated from each
5272   //   function template are combined with the set of non-template candidate
5273   //   functions.
5274   TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5275   FunctionDecl *Specialization = 0;
5276   if (TemplateDeductionResult Result
5277       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs,
5278                                 Args, NumArgs, Specialization, Info)) {
5279     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5280     Candidate.FoundDecl = FoundDecl;
5281     Candidate.Function = MethodTmpl->getTemplatedDecl();
5282     Candidate.Viable = false;
5283     Candidate.FailureKind = ovl_fail_bad_deduction;
5284     Candidate.IsSurrogate = false;
5285     Candidate.IgnoreObjectArgument = false;
5286     Candidate.ExplicitCallArguments = NumArgs;
5287     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5288                                                           Info);
5289     return;
5290   }
5291 
5292   // Add the function template specialization produced by template argument
5293   // deduction as a candidate.
5294   assert(Specialization && "Missing member function template specialization?");
5295   assert(isa<CXXMethodDecl>(Specialization) &&
5296          "Specialization is not a member function?");
5297   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5298                      ActingContext, ObjectType, ObjectClassification,
5299                      Args, NumArgs, CandidateSet, SuppressUserConversions);
5300 }
5301 
5302 /// \brief Add a C++ function template specialization as a candidate
5303 /// in the candidate set, using template argument deduction to produce
5304 /// an appropriate function template specialization.
5305 void
5306 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5307                                    DeclAccessPair FoundDecl,
5308                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5309                                    Expr **Args, unsigned NumArgs,
5310                                    OverloadCandidateSet& CandidateSet,
5311                                    bool SuppressUserConversions) {
5312   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5313     return;
5314 
5315   // C++ [over.match.funcs]p7:
5316   //   In each case where a candidate is a function template, candidate
5317   //   function template specializations are generated using template argument
5318   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5319   //   candidate functions in the usual way.113) A given name can refer to one
5320   //   or more function templates and also to a set of overloaded non-template
5321   //   functions. In such a case, the candidate functions generated from each
5322   //   function template are combined with the set of non-template candidate
5323   //   functions.
5324   TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5325   FunctionDecl *Specialization = 0;
5326   if (TemplateDeductionResult Result
5327         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
5328                                   Args, NumArgs, Specialization, Info)) {
5329     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5330     Candidate.FoundDecl = FoundDecl;
5331     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5332     Candidate.Viable = false;
5333     Candidate.FailureKind = ovl_fail_bad_deduction;
5334     Candidate.IsSurrogate = false;
5335     Candidate.IgnoreObjectArgument = false;
5336     Candidate.ExplicitCallArguments = NumArgs;
5337     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5338                                                           Info);
5339     return;
5340   }
5341 
5342   // Add the function template specialization produced by template argument
5343   // deduction as a candidate.
5344   assert(Specialization && "Missing function template specialization?");
5345   AddOverloadCandidate(Specialization, FoundDecl, Args, NumArgs, CandidateSet,
5346                        SuppressUserConversions);
5347 }
5348 
5349 /// AddConversionCandidate - Add a C++ conversion function as a
5350 /// candidate in the candidate set (C++ [over.match.conv],
5351 /// C++ [over.match.copy]). From is the expression we're converting from,
5352 /// and ToType is the type that we're eventually trying to convert to
5353 /// (which may or may not be the same type as the type that the
5354 /// conversion function produces).
5355 void
5356 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5357                              DeclAccessPair FoundDecl,
5358                              CXXRecordDecl *ActingContext,
5359                              Expr *From, QualType ToType,
5360                              OverloadCandidateSet& CandidateSet) {
5361   assert(!Conversion->getDescribedFunctionTemplate() &&
5362          "Conversion function templates use AddTemplateConversionCandidate");
5363   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5364   if (!CandidateSet.isNewCandidate(Conversion))
5365     return;
5366 
5367   // Overload resolution is always an unevaluated context.
5368   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5369 
5370   // Add this candidate
5371   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5372   Candidate.FoundDecl = FoundDecl;
5373   Candidate.Function = Conversion;
5374   Candidate.IsSurrogate = false;
5375   Candidate.IgnoreObjectArgument = false;
5376   Candidate.FinalConversion.setAsIdentityConversion();
5377   Candidate.FinalConversion.setFromType(ConvType);
5378   Candidate.FinalConversion.setAllToTypes(ToType);
5379   Candidate.Viable = true;
5380   Candidate.ExplicitCallArguments = 1;
5381 
5382   // C++ [over.match.funcs]p4:
5383   //   For conversion functions, the function is considered to be a member of
5384   //   the class of the implicit implied object argument for the purpose of
5385   //   defining the type of the implicit object parameter.
5386   //
5387   // Determine the implicit conversion sequence for the implicit
5388   // object parameter.
5389   QualType ImplicitParamType = From->getType();
5390   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5391     ImplicitParamType = FromPtrType->getPointeeType();
5392   CXXRecordDecl *ConversionContext
5393     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5394 
5395   Candidate.Conversions[0]
5396     = TryObjectArgumentInitialization(*this, From->getType(),
5397                                       From->Classify(Context),
5398                                       Conversion, ConversionContext);
5399 
5400   if (Candidate.Conversions[0].isBad()) {
5401     Candidate.Viable = false;
5402     Candidate.FailureKind = ovl_fail_bad_conversion;
5403     return;
5404   }
5405 
5406   // We won't go through a user-define type conversion function to convert a
5407   // derived to base as such conversions are given Conversion Rank. They only
5408   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5409   QualType FromCanon
5410     = Context.getCanonicalType(From->getType().getUnqualifiedType());
5411   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5412   if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5413     Candidate.Viable = false;
5414     Candidate.FailureKind = ovl_fail_trivial_conversion;
5415     return;
5416   }
5417 
5418   // To determine what the conversion from the result of calling the
5419   // conversion function to the type we're eventually trying to
5420   // convert to (ToType), we need to synthesize a call to the
5421   // conversion function and attempt copy initialization from it. This
5422   // makes sure that we get the right semantics with respect to
5423   // lvalues/rvalues and the type. Fortunately, we can allocate this
5424   // call on the stack and we don't need its arguments to be
5425   // well-formed.
5426   DeclRefExpr ConversionRef(Conversion, Conversion->getType(),
5427                             VK_LValue, From->getLocStart());
5428   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5429                                 Context.getPointerType(Conversion->getType()),
5430                                 CK_FunctionToPointerDecay,
5431                                 &ConversionRef, VK_RValue);
5432 
5433   QualType ConversionType = Conversion->getConversionType();
5434   if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5435     Candidate.Viable = false;
5436     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5437     return;
5438   }
5439 
5440   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5441 
5442   // Note that it is safe to allocate CallExpr on the stack here because
5443   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5444   // allocator).
5445   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5446   CallExpr Call(Context, &ConversionFn, 0, 0, CallResultType, VK,
5447                 From->getLocStart());
5448   ImplicitConversionSequence ICS =
5449     TryCopyInitialization(*this, &Call, ToType,
5450                           /*SuppressUserConversions=*/true,
5451                           /*InOverloadResolution=*/false,
5452                           /*AllowObjCWritebackConversion=*/false);
5453 
5454   switch (ICS.getKind()) {
5455   case ImplicitConversionSequence::StandardConversion:
5456     Candidate.FinalConversion = ICS.Standard;
5457 
5458     // C++ [over.ics.user]p3:
5459     //   If the user-defined conversion is specified by a specialization of a
5460     //   conversion function template, the second standard conversion sequence
5461     //   shall have exact match rank.
5462     if (Conversion->getPrimaryTemplate() &&
5463         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5464       Candidate.Viable = false;
5465       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5466     }
5467 
5468     // C++0x [dcl.init.ref]p5:
5469     //    In the second case, if the reference is an rvalue reference and
5470     //    the second standard conversion sequence of the user-defined
5471     //    conversion sequence includes an lvalue-to-rvalue conversion, the
5472     //    program is ill-formed.
5473     if (ToType->isRValueReferenceType() &&
5474         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5475       Candidate.Viable = false;
5476       Candidate.FailureKind = ovl_fail_bad_final_conversion;
5477     }
5478     break;
5479 
5480   case ImplicitConversionSequence::BadConversion:
5481     Candidate.Viable = false;
5482     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5483     break;
5484 
5485   default:
5486     llvm_unreachable(
5487            "Can only end up with a standard conversion sequence or failure");
5488   }
5489 }
5490 
5491 /// \brief Adds a conversion function template specialization
5492 /// candidate to the overload set, using template argument deduction
5493 /// to deduce the template arguments of the conversion function
5494 /// template from the type that we are converting to (C++
5495 /// [temp.deduct.conv]).
5496 void
5497 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5498                                      DeclAccessPair FoundDecl,
5499                                      CXXRecordDecl *ActingDC,
5500                                      Expr *From, QualType ToType,
5501                                      OverloadCandidateSet &CandidateSet) {
5502   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5503          "Only conversion function templates permitted here");
5504 
5505   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5506     return;
5507 
5508   TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5509   CXXConversionDecl *Specialization = 0;
5510   if (TemplateDeductionResult Result
5511         = DeduceTemplateArguments(FunctionTemplate, ToType,
5512                                   Specialization, Info)) {
5513     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5514     Candidate.FoundDecl = FoundDecl;
5515     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5516     Candidate.Viable = false;
5517     Candidate.FailureKind = ovl_fail_bad_deduction;
5518     Candidate.IsSurrogate = false;
5519     Candidate.IgnoreObjectArgument = false;
5520     Candidate.ExplicitCallArguments = 1;
5521     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5522                                                           Info);
5523     return;
5524   }
5525 
5526   // Add the conversion function template specialization produced by
5527   // template argument deduction as a candidate.
5528   assert(Specialization && "Missing function template specialization?");
5529   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5530                          CandidateSet);
5531 }
5532 
5533 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5534 /// converts the given @c Object to a function pointer via the
5535 /// conversion function @c Conversion, and then attempts to call it
5536 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
5537 /// the type of function that we'll eventually be calling.
5538 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
5539                                  DeclAccessPair FoundDecl,
5540                                  CXXRecordDecl *ActingContext,
5541                                  const FunctionProtoType *Proto,
5542                                  Expr *Object,
5543                                  Expr **Args, unsigned NumArgs,
5544                                  OverloadCandidateSet& CandidateSet) {
5545   if (!CandidateSet.isNewCandidate(Conversion))
5546     return;
5547 
5548   // Overload resolution is always an unevaluated context.
5549   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5550 
5551   OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs + 1);
5552   Candidate.FoundDecl = FoundDecl;
5553   Candidate.Function = 0;
5554   Candidate.Surrogate = Conversion;
5555   Candidate.Viable = true;
5556   Candidate.IsSurrogate = true;
5557   Candidate.IgnoreObjectArgument = false;
5558   Candidate.ExplicitCallArguments = NumArgs;
5559 
5560   // Determine the implicit conversion sequence for the implicit
5561   // object parameter.
5562   ImplicitConversionSequence ObjectInit
5563     = TryObjectArgumentInitialization(*this, Object->getType(),
5564                                       Object->Classify(Context),
5565                                       Conversion, ActingContext);
5566   if (ObjectInit.isBad()) {
5567     Candidate.Viable = false;
5568     Candidate.FailureKind = ovl_fail_bad_conversion;
5569     Candidate.Conversions[0] = ObjectInit;
5570     return;
5571   }
5572 
5573   // The first conversion is actually a user-defined conversion whose
5574   // first conversion is ObjectInit's standard conversion (which is
5575   // effectively a reference binding). Record it as such.
5576   Candidate.Conversions[0].setUserDefined();
5577   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
5578   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
5579   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
5580   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
5581   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
5582   Candidate.Conversions[0].UserDefined.After
5583     = Candidate.Conversions[0].UserDefined.Before;
5584   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
5585 
5586   // Find the
5587   unsigned NumArgsInProto = Proto->getNumArgs();
5588 
5589   // (C++ 13.3.2p2): A candidate function having fewer than m
5590   // parameters is viable only if it has an ellipsis in its parameter
5591   // list (8.3.5).
5592   if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
5593     Candidate.Viable = false;
5594     Candidate.FailureKind = ovl_fail_too_many_arguments;
5595     return;
5596   }
5597 
5598   // Function types don't have any default arguments, so just check if
5599   // we have enough arguments.
5600   if (NumArgs < NumArgsInProto) {
5601     // Not enough arguments.
5602     Candidate.Viable = false;
5603     Candidate.FailureKind = ovl_fail_too_few_arguments;
5604     return;
5605   }
5606 
5607   // Determine the implicit conversion sequences for each of the
5608   // arguments.
5609   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
5610     if (ArgIdx < NumArgsInProto) {
5611       // (C++ 13.3.2p3): for F to be a viable function, there shall
5612       // exist for each argument an implicit conversion sequence
5613       // (13.3.3.1) that converts that argument to the corresponding
5614       // parameter of F.
5615       QualType ParamType = Proto->getArgType(ArgIdx);
5616       Candidate.Conversions[ArgIdx + 1]
5617         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5618                                 /*SuppressUserConversions=*/false,
5619                                 /*InOverloadResolution=*/false,
5620                                 /*AllowObjCWritebackConversion=*/
5621                                   getLangOptions().ObjCAutoRefCount);
5622       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5623         Candidate.Viable = false;
5624         Candidate.FailureKind = ovl_fail_bad_conversion;
5625         break;
5626       }
5627     } else {
5628       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5629       // argument for which there is no corresponding parameter is
5630       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5631       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5632     }
5633   }
5634 }
5635 
5636 /// \brief Add overload candidates for overloaded operators that are
5637 /// member functions.
5638 ///
5639 /// Add the overloaded operator candidates that are member functions
5640 /// for the operator Op that was used in an operator expression such
5641 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
5642 /// CandidateSet will store the added overload candidates. (C++
5643 /// [over.match.oper]).
5644 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
5645                                        SourceLocation OpLoc,
5646                                        Expr **Args, unsigned NumArgs,
5647                                        OverloadCandidateSet& CandidateSet,
5648                                        SourceRange OpRange) {
5649   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5650 
5651   // C++ [over.match.oper]p3:
5652   //   For a unary operator @ with an operand of a type whose
5653   //   cv-unqualified version is T1, and for a binary operator @ with
5654   //   a left operand of a type whose cv-unqualified version is T1 and
5655   //   a right operand of a type whose cv-unqualified version is T2,
5656   //   three sets of candidate functions, designated member
5657   //   candidates, non-member candidates and built-in candidates, are
5658   //   constructed as follows:
5659   QualType T1 = Args[0]->getType();
5660 
5661   //     -- If T1 is a class type, the set of member candidates is the
5662   //        result of the qualified lookup of T1::operator@
5663   //        (13.3.1.1.1); otherwise, the set of member candidates is
5664   //        empty.
5665   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
5666     // Complete the type if it can be completed. Otherwise, we're done.
5667     if (RequireCompleteType(OpLoc, T1, PDiag()))
5668       return;
5669 
5670     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
5671     LookupQualifiedName(Operators, T1Rec->getDecl());
5672     Operators.suppressDiagnostics();
5673 
5674     for (LookupResult::iterator Oper = Operators.begin(),
5675                              OperEnd = Operators.end();
5676          Oper != OperEnd;
5677          ++Oper)
5678       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
5679                          Args[0]->Classify(Context), Args + 1, NumArgs - 1,
5680                          CandidateSet,
5681                          /* SuppressUserConversions = */ false);
5682   }
5683 }
5684 
5685 /// AddBuiltinCandidate - Add a candidate for a built-in
5686 /// operator. ResultTy and ParamTys are the result and parameter types
5687 /// of the built-in candidate, respectively. Args and NumArgs are the
5688 /// arguments being passed to the candidate. IsAssignmentOperator
5689 /// should be true when this built-in candidate is an assignment
5690 /// operator. NumContextualBoolArguments is the number of arguments
5691 /// (at the beginning of the argument list) that will be contextually
5692 /// converted to bool.
5693 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
5694                                Expr **Args, unsigned NumArgs,
5695                                OverloadCandidateSet& CandidateSet,
5696                                bool IsAssignmentOperator,
5697                                unsigned NumContextualBoolArguments) {
5698   // Overload resolution is always an unevaluated context.
5699   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5700 
5701   // Add this candidate
5702   OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs);
5703   Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
5704   Candidate.Function = 0;
5705   Candidate.IsSurrogate = false;
5706   Candidate.IgnoreObjectArgument = false;
5707   Candidate.BuiltinTypes.ResultTy = ResultTy;
5708   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
5709     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
5710 
5711   // Determine the implicit conversion sequences for each of the
5712   // arguments.
5713   Candidate.Viable = true;
5714   Candidate.ExplicitCallArguments = NumArgs;
5715   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
5716     // C++ [over.match.oper]p4:
5717     //   For the built-in assignment operators, conversions of the
5718     //   left operand are restricted as follows:
5719     //     -- no temporaries are introduced to hold the left operand, and
5720     //     -- no user-defined conversions are applied to the left
5721     //        operand to achieve a type match with the left-most
5722     //        parameter of a built-in candidate.
5723     //
5724     // We block these conversions by turning off user-defined
5725     // conversions, since that is the only way that initialization of
5726     // a reference to a non-class type can occur from something that
5727     // is not of the same type.
5728     if (ArgIdx < NumContextualBoolArguments) {
5729       assert(ParamTys[ArgIdx] == Context.BoolTy &&
5730              "Contextual conversion to bool requires bool type");
5731       Candidate.Conversions[ArgIdx]
5732         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
5733     } else {
5734       Candidate.Conversions[ArgIdx]
5735         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
5736                                 ArgIdx == 0 && IsAssignmentOperator,
5737                                 /*InOverloadResolution=*/false,
5738                                 /*AllowObjCWritebackConversion=*/
5739                                   getLangOptions().ObjCAutoRefCount);
5740     }
5741     if (Candidate.Conversions[ArgIdx].isBad()) {
5742       Candidate.Viable = false;
5743       Candidate.FailureKind = ovl_fail_bad_conversion;
5744       break;
5745     }
5746   }
5747 }
5748 
5749 /// BuiltinCandidateTypeSet - A set of types that will be used for the
5750 /// candidate operator functions for built-in operators (C++
5751 /// [over.built]). The types are separated into pointer types and
5752 /// enumeration types.
5753 class BuiltinCandidateTypeSet  {
5754   /// TypeSet - A set of types.
5755   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
5756 
5757   /// PointerTypes - The set of pointer types that will be used in the
5758   /// built-in candidates.
5759   TypeSet PointerTypes;
5760 
5761   /// MemberPointerTypes - The set of member pointer types that will be
5762   /// used in the built-in candidates.
5763   TypeSet MemberPointerTypes;
5764 
5765   /// EnumerationTypes - The set of enumeration types that will be
5766   /// used in the built-in candidates.
5767   TypeSet EnumerationTypes;
5768 
5769   /// \brief The set of vector types that will be used in the built-in
5770   /// candidates.
5771   TypeSet VectorTypes;
5772 
5773   /// \brief A flag indicating non-record types are viable candidates
5774   bool HasNonRecordTypes;
5775 
5776   /// \brief A flag indicating whether either arithmetic or enumeration types
5777   /// were present in the candidate set.
5778   bool HasArithmeticOrEnumeralTypes;
5779 
5780   /// \brief A flag indicating whether the nullptr type was present in the
5781   /// candidate set.
5782   bool HasNullPtrType;
5783 
5784   /// Sema - The semantic analysis instance where we are building the
5785   /// candidate type set.
5786   Sema &SemaRef;
5787 
5788   /// Context - The AST context in which we will build the type sets.
5789   ASTContext &Context;
5790 
5791   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
5792                                                const Qualifiers &VisibleQuals);
5793   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
5794 
5795 public:
5796   /// iterator - Iterates through the types that are part of the set.
5797   typedef TypeSet::iterator iterator;
5798 
5799   BuiltinCandidateTypeSet(Sema &SemaRef)
5800     : HasNonRecordTypes(false),
5801       HasArithmeticOrEnumeralTypes(false),
5802       HasNullPtrType(false),
5803       SemaRef(SemaRef),
5804       Context(SemaRef.Context) { }
5805 
5806   void AddTypesConvertedFrom(QualType Ty,
5807                              SourceLocation Loc,
5808                              bool AllowUserConversions,
5809                              bool AllowExplicitConversions,
5810                              const Qualifiers &VisibleTypeConversionsQuals);
5811 
5812   /// pointer_begin - First pointer type found;
5813   iterator pointer_begin() { return PointerTypes.begin(); }
5814 
5815   /// pointer_end - Past the last pointer type found;
5816   iterator pointer_end() { return PointerTypes.end(); }
5817 
5818   /// member_pointer_begin - First member pointer type found;
5819   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
5820 
5821   /// member_pointer_end - Past the last member pointer type found;
5822   iterator member_pointer_end() { return MemberPointerTypes.end(); }
5823 
5824   /// enumeration_begin - First enumeration type found;
5825   iterator enumeration_begin() { return EnumerationTypes.begin(); }
5826 
5827   /// enumeration_end - Past the last enumeration type found;
5828   iterator enumeration_end() { return EnumerationTypes.end(); }
5829 
5830   iterator vector_begin() { return VectorTypes.begin(); }
5831   iterator vector_end() { return VectorTypes.end(); }
5832 
5833   bool hasNonRecordTypes() { return HasNonRecordTypes; }
5834   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
5835   bool hasNullPtrType() const { return HasNullPtrType; }
5836 };
5837 
5838 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
5839 /// the set of pointer types along with any more-qualified variants of
5840 /// that type. For example, if @p Ty is "int const *", this routine
5841 /// will add "int const *", "int const volatile *", "int const
5842 /// restrict *", and "int const volatile restrict *" to the set of
5843 /// pointer types. Returns true if the add of @p Ty itself succeeded,
5844 /// false otherwise.
5845 ///
5846 /// FIXME: what to do about extended qualifiers?
5847 bool
5848 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
5849                                              const Qualifiers &VisibleQuals) {
5850 
5851   // Insert this type.
5852   if (!PointerTypes.insert(Ty))
5853     return false;
5854 
5855   QualType PointeeTy;
5856   const PointerType *PointerTy = Ty->getAs<PointerType>();
5857   bool buildObjCPtr = false;
5858   if (!PointerTy) {
5859     if (const ObjCObjectPointerType *PTy = Ty->getAs<ObjCObjectPointerType>()) {
5860       PointeeTy = PTy->getPointeeType();
5861       buildObjCPtr = true;
5862     }
5863     else
5864       llvm_unreachable("type was not a pointer type!");
5865   }
5866   else
5867     PointeeTy = PointerTy->getPointeeType();
5868 
5869   // Don't add qualified variants of arrays. For one, they're not allowed
5870   // (the qualifier would sink to the element type), and for another, the
5871   // only overload situation where it matters is subscript or pointer +- int,
5872   // and those shouldn't have qualifier variants anyway.
5873   if (PointeeTy->isArrayType())
5874     return true;
5875   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
5876   if (const ConstantArrayType *Array =Context.getAsConstantArrayType(PointeeTy))
5877     BaseCVR = Array->getElementType().getCVRQualifiers();
5878   bool hasVolatile = VisibleQuals.hasVolatile();
5879   bool hasRestrict = VisibleQuals.hasRestrict();
5880 
5881   // Iterate through all strict supersets of BaseCVR.
5882   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
5883     if ((CVR | BaseCVR) != CVR) continue;
5884     // Skip over Volatile/Restrict if no Volatile/Restrict found anywhere
5885     // in the types.
5886     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
5887     if ((CVR & Qualifiers::Restrict) && !hasRestrict) continue;
5888     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
5889     if (!buildObjCPtr)
5890       PointerTypes.insert(Context.getPointerType(QPointeeTy));
5891     else
5892       PointerTypes.insert(Context.getObjCObjectPointerType(QPointeeTy));
5893   }
5894 
5895   return true;
5896 }
5897 
5898 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
5899 /// to the set of pointer types along with any more-qualified variants of
5900 /// that type. For example, if @p Ty is "int const *", this routine
5901 /// will add "int const *", "int const volatile *", "int const
5902 /// restrict *", and "int const volatile restrict *" to the set of
5903 /// pointer types. Returns true if the add of @p Ty itself succeeded,
5904 /// false otherwise.
5905 ///
5906 /// FIXME: what to do about extended qualifiers?
5907 bool
5908 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
5909     QualType Ty) {
5910   // Insert this type.
5911   if (!MemberPointerTypes.insert(Ty))
5912     return false;
5913 
5914   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
5915   assert(PointerTy && "type was not a member pointer type!");
5916 
5917   QualType PointeeTy = PointerTy->getPointeeType();
5918   // Don't add qualified variants of arrays. For one, they're not allowed
5919   // (the qualifier would sink to the element type), and for another, the
5920   // only overload situation where it matters is subscript or pointer +- int,
5921   // and those shouldn't have qualifier variants anyway.
5922   if (PointeeTy->isArrayType())
5923     return true;
5924   const Type *ClassTy = PointerTy->getClass();
5925 
5926   // Iterate through all strict supersets of the pointee type's CVR
5927   // qualifiers.
5928   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
5929   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
5930     if ((CVR | BaseCVR) != CVR) continue;
5931 
5932     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
5933     MemberPointerTypes.insert(
5934       Context.getMemberPointerType(QPointeeTy, ClassTy));
5935   }
5936 
5937   return true;
5938 }
5939 
5940 /// AddTypesConvertedFrom - Add each of the types to which the type @p
5941 /// Ty can be implicit converted to the given set of @p Types. We're
5942 /// primarily interested in pointer types and enumeration types. We also
5943 /// take member pointer types, for the conditional operator.
5944 /// AllowUserConversions is true if we should look at the conversion
5945 /// functions of a class type, and AllowExplicitConversions if we
5946 /// should also include the explicit conversion functions of a class
5947 /// type.
5948 void
5949 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
5950                                                SourceLocation Loc,
5951                                                bool AllowUserConversions,
5952                                                bool AllowExplicitConversions,
5953                                                const Qualifiers &VisibleQuals) {
5954   // Only deal with canonical types.
5955   Ty = Context.getCanonicalType(Ty);
5956 
5957   // Look through reference types; they aren't part of the type of an
5958   // expression for the purposes of conversions.
5959   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
5960     Ty = RefTy->getPointeeType();
5961 
5962   // If we're dealing with an array type, decay to the pointer.
5963   if (Ty->isArrayType())
5964     Ty = SemaRef.Context.getArrayDecayedType(Ty);
5965 
5966   // Otherwise, we don't care about qualifiers on the type.
5967   Ty = Ty.getLocalUnqualifiedType();
5968 
5969   // Flag if we ever add a non-record type.
5970   const RecordType *TyRec = Ty->getAs<RecordType>();
5971   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
5972 
5973   // Flag if we encounter an arithmetic type.
5974   HasArithmeticOrEnumeralTypes =
5975     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
5976 
5977   if (Ty->isObjCIdType() || Ty->isObjCClassType())
5978     PointerTypes.insert(Ty);
5979   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
5980     // Insert our type, and its more-qualified variants, into the set
5981     // of types.
5982     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
5983       return;
5984   } else if (Ty->isMemberPointerType()) {
5985     // Member pointers are far easier, since the pointee can't be converted.
5986     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
5987       return;
5988   } else if (Ty->isEnumeralType()) {
5989     HasArithmeticOrEnumeralTypes = true;
5990     EnumerationTypes.insert(Ty);
5991   } else if (Ty->isVectorType()) {
5992     // We treat vector types as arithmetic types in many contexts as an
5993     // extension.
5994     HasArithmeticOrEnumeralTypes = true;
5995     VectorTypes.insert(Ty);
5996   } else if (Ty->isNullPtrType()) {
5997     HasNullPtrType = true;
5998   } else if (AllowUserConversions && TyRec) {
5999     // No conversion functions in incomplete types.
6000     if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6001       return;
6002 
6003     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6004     const UnresolvedSetImpl *Conversions
6005       = ClassDecl->getVisibleConversionFunctions();
6006     for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6007            E = Conversions->end(); I != E; ++I) {
6008       NamedDecl *D = I.getDecl();
6009       if (isa<UsingShadowDecl>(D))
6010         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6011 
6012       // Skip conversion function templates; they don't tell us anything
6013       // about which builtin types we can convert to.
6014       if (isa<FunctionTemplateDecl>(D))
6015         continue;
6016 
6017       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6018       if (AllowExplicitConversions || !Conv->isExplicit()) {
6019         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6020                               VisibleQuals);
6021       }
6022     }
6023   }
6024 }
6025 
6026 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6027 /// the volatile- and non-volatile-qualified assignment operators for the
6028 /// given type to the candidate set.
6029 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6030                                                    QualType T,
6031                                                    Expr **Args,
6032                                                    unsigned NumArgs,
6033                                     OverloadCandidateSet &CandidateSet) {
6034   QualType ParamTypes[2];
6035 
6036   // T& operator=(T&, T)
6037   ParamTypes[0] = S.Context.getLValueReferenceType(T);
6038   ParamTypes[1] = T;
6039   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6040                         /*IsAssignmentOperator=*/true);
6041 
6042   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6043     // volatile T& operator=(volatile T&, T)
6044     ParamTypes[0]
6045       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6046     ParamTypes[1] = T;
6047     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6048                           /*IsAssignmentOperator=*/true);
6049   }
6050 }
6051 
6052 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6053 /// if any, found in visible type conversion functions found in ArgExpr's type.
6054 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6055     Qualifiers VRQuals;
6056     const RecordType *TyRec;
6057     if (const MemberPointerType *RHSMPType =
6058         ArgExpr->getType()->getAs<MemberPointerType>())
6059       TyRec = RHSMPType->getClass()->getAs<RecordType>();
6060     else
6061       TyRec = ArgExpr->getType()->getAs<RecordType>();
6062     if (!TyRec) {
6063       // Just to be safe, assume the worst case.
6064       VRQuals.addVolatile();
6065       VRQuals.addRestrict();
6066       return VRQuals;
6067     }
6068 
6069     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6070     if (!ClassDecl->hasDefinition())
6071       return VRQuals;
6072 
6073     const UnresolvedSetImpl *Conversions =
6074       ClassDecl->getVisibleConversionFunctions();
6075 
6076     for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6077            E = Conversions->end(); I != E; ++I) {
6078       NamedDecl *D = I.getDecl();
6079       if (isa<UsingShadowDecl>(D))
6080         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6081       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6082         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6083         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6084           CanTy = ResTypeRef->getPointeeType();
6085         // Need to go down the pointer/mempointer chain and add qualifiers
6086         // as see them.
6087         bool done = false;
6088         while (!done) {
6089           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6090             CanTy = ResTypePtr->getPointeeType();
6091           else if (const MemberPointerType *ResTypeMPtr =
6092                 CanTy->getAs<MemberPointerType>())
6093             CanTy = ResTypeMPtr->getPointeeType();
6094           else
6095             done = true;
6096           if (CanTy.isVolatileQualified())
6097             VRQuals.addVolatile();
6098           if (CanTy.isRestrictQualified())
6099             VRQuals.addRestrict();
6100           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6101             return VRQuals;
6102         }
6103       }
6104     }
6105     return VRQuals;
6106 }
6107 
6108 namespace {
6109 
6110 /// \brief Helper class to manage the addition of builtin operator overload
6111 /// candidates. It provides shared state and utility methods used throughout
6112 /// the process, as well as a helper method to add each group of builtin
6113 /// operator overloads from the standard to a candidate set.
6114 class BuiltinOperatorOverloadBuilder {
6115   // Common instance state available to all overload candidate addition methods.
6116   Sema &S;
6117   Expr **Args;
6118   unsigned NumArgs;
6119   Qualifiers VisibleTypeConversionsQuals;
6120   bool HasArithmeticOrEnumeralCandidateType;
6121   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6122   OverloadCandidateSet &CandidateSet;
6123 
6124   // Define some constants used to index and iterate over the arithemetic types
6125   // provided via the getArithmeticType() method below.
6126   // The "promoted arithmetic types" are the arithmetic
6127   // types are that preserved by promotion (C++ [over.built]p2).
6128   static const unsigned FirstIntegralType = 3;
6129   static const unsigned LastIntegralType = 18;
6130   static const unsigned FirstPromotedIntegralType = 3,
6131                         LastPromotedIntegralType = 9;
6132   static const unsigned FirstPromotedArithmeticType = 0,
6133                         LastPromotedArithmeticType = 9;
6134   static const unsigned NumArithmeticTypes = 18;
6135 
6136   /// \brief Get the canonical type for a given arithmetic type index.
6137   CanQualType getArithmeticType(unsigned index) {
6138     assert(index < NumArithmeticTypes);
6139     static CanQualType ASTContext::* const
6140       ArithmeticTypes[NumArithmeticTypes] = {
6141       // Start of promoted types.
6142       &ASTContext::FloatTy,
6143       &ASTContext::DoubleTy,
6144       &ASTContext::LongDoubleTy,
6145 
6146       // Start of integral types.
6147       &ASTContext::IntTy,
6148       &ASTContext::LongTy,
6149       &ASTContext::LongLongTy,
6150       &ASTContext::UnsignedIntTy,
6151       &ASTContext::UnsignedLongTy,
6152       &ASTContext::UnsignedLongLongTy,
6153       // End of promoted types.
6154 
6155       &ASTContext::BoolTy,
6156       &ASTContext::CharTy,
6157       &ASTContext::WCharTy,
6158       &ASTContext::Char16Ty,
6159       &ASTContext::Char32Ty,
6160       &ASTContext::SignedCharTy,
6161       &ASTContext::ShortTy,
6162       &ASTContext::UnsignedCharTy,
6163       &ASTContext::UnsignedShortTy,
6164       // End of integral types.
6165       // FIXME: What about complex?
6166     };
6167     return S.Context.*ArithmeticTypes[index];
6168   }
6169 
6170   /// \brief Gets the canonical type resulting from the usual arithemetic
6171   /// converions for the given arithmetic types.
6172   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6173     // Accelerator table for performing the usual arithmetic conversions.
6174     // The rules are basically:
6175     //   - if either is floating-point, use the wider floating-point
6176     //   - if same signedness, use the higher rank
6177     //   - if same size, use unsigned of the higher rank
6178     //   - use the larger type
6179     // These rules, together with the axiom that higher ranks are
6180     // never smaller, are sufficient to precompute all of these results
6181     // *except* when dealing with signed types of higher rank.
6182     // (we could precompute SLL x UI for all known platforms, but it's
6183     // better not to make any assumptions).
6184     enum PromotedType {
6185                   Flt,  Dbl, LDbl,   SI,   SL,  SLL,   UI,   UL,  ULL, Dep=-1
6186     };
6187     static PromotedType ConversionsTable[LastPromotedArithmeticType]
6188                                         [LastPromotedArithmeticType] = {
6189       /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6190       /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6191       /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6192       /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL,   UI,   UL,  ULL },
6193       /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL,  Dep,   UL,  ULL },
6194       /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL,  Dep,  Dep,  ULL },
6195       /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep,   UI,   UL,  ULL },
6196       /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep,   UL,   UL,  ULL },
6197       /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL,  ULL,  ULL,  ULL },
6198     };
6199 
6200     assert(L < LastPromotedArithmeticType);
6201     assert(R < LastPromotedArithmeticType);
6202     int Idx = ConversionsTable[L][R];
6203 
6204     // Fast path: the table gives us a concrete answer.
6205     if (Idx != Dep) return getArithmeticType(Idx);
6206 
6207     // Slow path: we need to compare widths.
6208     // An invariant is that the signed type has higher rank.
6209     CanQualType LT = getArithmeticType(L),
6210                 RT = getArithmeticType(R);
6211     unsigned LW = S.Context.getIntWidth(LT),
6212              RW = S.Context.getIntWidth(RT);
6213 
6214     // If they're different widths, use the signed type.
6215     if (LW > RW) return LT;
6216     else if (LW < RW) return RT;
6217 
6218     // Otherwise, use the unsigned type of the signed type's rank.
6219     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6220     assert(L == SLL || R == SLL);
6221     return S.Context.UnsignedLongLongTy;
6222   }
6223 
6224   /// \brief Helper method to factor out the common pattern of adding overloads
6225   /// for '++' and '--' builtin operators.
6226   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6227                                            bool HasVolatile) {
6228     QualType ParamTypes[2] = {
6229       S.Context.getLValueReferenceType(CandidateTy),
6230       S.Context.IntTy
6231     };
6232 
6233     // Non-volatile version.
6234     if (NumArgs == 1)
6235       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6236     else
6237       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6238 
6239     // Use a heuristic to reduce number of builtin candidates in the set:
6240     // add volatile version only if there are conversions to a volatile type.
6241     if (HasVolatile) {
6242       ParamTypes[0] =
6243         S.Context.getLValueReferenceType(
6244           S.Context.getVolatileType(CandidateTy));
6245       if (NumArgs == 1)
6246         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6247       else
6248         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6249     }
6250   }
6251 
6252 public:
6253   BuiltinOperatorOverloadBuilder(
6254     Sema &S, Expr **Args, unsigned NumArgs,
6255     Qualifiers VisibleTypeConversionsQuals,
6256     bool HasArithmeticOrEnumeralCandidateType,
6257     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6258     OverloadCandidateSet &CandidateSet)
6259     : S(S), Args(Args), NumArgs(NumArgs),
6260       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6261       HasArithmeticOrEnumeralCandidateType(
6262         HasArithmeticOrEnumeralCandidateType),
6263       CandidateTypes(CandidateTypes),
6264       CandidateSet(CandidateSet) {
6265     // Validate some of our static helper constants in debug builds.
6266     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6267            "Invalid first promoted integral type");
6268     assert(getArithmeticType(LastPromotedIntegralType - 1)
6269              == S.Context.UnsignedLongLongTy &&
6270            "Invalid last promoted integral type");
6271     assert(getArithmeticType(FirstPromotedArithmeticType)
6272              == S.Context.FloatTy &&
6273            "Invalid first promoted arithmetic type");
6274     assert(getArithmeticType(LastPromotedArithmeticType - 1)
6275              == S.Context.UnsignedLongLongTy &&
6276            "Invalid last promoted arithmetic type");
6277   }
6278 
6279   // C++ [over.built]p3:
6280   //
6281   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6282   //   is either volatile or empty, there exist candidate operator
6283   //   functions of the form
6284   //
6285   //       VQ T&      operator++(VQ T&);
6286   //       T          operator++(VQ T&, int);
6287   //
6288   // C++ [over.built]p4:
6289   //
6290   //   For every pair (T, VQ), where T is an arithmetic type other
6291   //   than bool, and VQ is either volatile or empty, there exist
6292   //   candidate operator functions of the form
6293   //
6294   //       VQ T&      operator--(VQ T&);
6295   //       T          operator--(VQ T&, int);
6296   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6297     if (!HasArithmeticOrEnumeralCandidateType)
6298       return;
6299 
6300     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6301          Arith < NumArithmeticTypes; ++Arith) {
6302       addPlusPlusMinusMinusStyleOverloads(
6303         getArithmeticType(Arith),
6304         VisibleTypeConversionsQuals.hasVolatile());
6305     }
6306   }
6307 
6308   // C++ [over.built]p5:
6309   //
6310   //   For every pair (T, VQ), where T is a cv-qualified or
6311   //   cv-unqualified object type, and VQ is either volatile or
6312   //   empty, there exist candidate operator functions of the form
6313   //
6314   //       T*VQ&      operator++(T*VQ&);
6315   //       T*VQ&      operator--(T*VQ&);
6316   //       T*         operator++(T*VQ&, int);
6317   //       T*         operator--(T*VQ&, int);
6318   void addPlusPlusMinusMinusPointerOverloads() {
6319     for (BuiltinCandidateTypeSet::iterator
6320               Ptr = CandidateTypes[0].pointer_begin(),
6321            PtrEnd = CandidateTypes[0].pointer_end();
6322          Ptr != PtrEnd; ++Ptr) {
6323       // Skip pointer types that aren't pointers to object types.
6324       if (!(*Ptr)->getPointeeType()->isObjectType())
6325         continue;
6326 
6327       addPlusPlusMinusMinusStyleOverloads(*Ptr,
6328         (!S.Context.getCanonicalType(*Ptr).isVolatileQualified() &&
6329          VisibleTypeConversionsQuals.hasVolatile()));
6330     }
6331   }
6332 
6333   // C++ [over.built]p6:
6334   //   For every cv-qualified or cv-unqualified object type T, there
6335   //   exist candidate operator functions of the form
6336   //
6337   //       T&         operator*(T*);
6338   //
6339   // C++ [over.built]p7:
6340   //   For every function type T that does not have cv-qualifiers or a
6341   //   ref-qualifier, there exist candidate operator functions of the form
6342   //       T&         operator*(T*);
6343   void addUnaryStarPointerOverloads() {
6344     for (BuiltinCandidateTypeSet::iterator
6345               Ptr = CandidateTypes[0].pointer_begin(),
6346            PtrEnd = CandidateTypes[0].pointer_end();
6347          Ptr != PtrEnd; ++Ptr) {
6348       QualType ParamTy = *Ptr;
6349       QualType PointeeTy = ParamTy->getPointeeType();
6350       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6351         continue;
6352 
6353       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6354         if (Proto->getTypeQuals() || Proto->getRefQualifier())
6355           continue;
6356 
6357       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6358                             &ParamTy, Args, 1, CandidateSet);
6359     }
6360   }
6361 
6362   // C++ [over.built]p9:
6363   //  For every promoted arithmetic type T, there exist candidate
6364   //  operator functions of the form
6365   //
6366   //       T         operator+(T);
6367   //       T         operator-(T);
6368   void addUnaryPlusOrMinusArithmeticOverloads() {
6369     if (!HasArithmeticOrEnumeralCandidateType)
6370       return;
6371 
6372     for (unsigned Arith = FirstPromotedArithmeticType;
6373          Arith < LastPromotedArithmeticType; ++Arith) {
6374       QualType ArithTy = getArithmeticType(Arith);
6375       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
6376     }
6377 
6378     // Extension: We also add these operators for vector types.
6379     for (BuiltinCandidateTypeSet::iterator
6380               Vec = CandidateTypes[0].vector_begin(),
6381            VecEnd = CandidateTypes[0].vector_end();
6382          Vec != VecEnd; ++Vec) {
6383       QualType VecTy = *Vec;
6384       S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6385     }
6386   }
6387 
6388   // C++ [over.built]p8:
6389   //   For every type T, there exist candidate operator functions of
6390   //   the form
6391   //
6392   //       T*         operator+(T*);
6393   void addUnaryPlusPointerOverloads() {
6394     for (BuiltinCandidateTypeSet::iterator
6395               Ptr = CandidateTypes[0].pointer_begin(),
6396            PtrEnd = CandidateTypes[0].pointer_end();
6397          Ptr != PtrEnd; ++Ptr) {
6398       QualType ParamTy = *Ptr;
6399       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
6400     }
6401   }
6402 
6403   // C++ [over.built]p10:
6404   //   For every promoted integral type T, there exist candidate
6405   //   operator functions of the form
6406   //
6407   //        T         operator~(T);
6408   void addUnaryTildePromotedIntegralOverloads() {
6409     if (!HasArithmeticOrEnumeralCandidateType)
6410       return;
6411 
6412     for (unsigned Int = FirstPromotedIntegralType;
6413          Int < LastPromotedIntegralType; ++Int) {
6414       QualType IntTy = getArithmeticType(Int);
6415       S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
6416     }
6417 
6418     // Extension: We also add this operator for vector types.
6419     for (BuiltinCandidateTypeSet::iterator
6420               Vec = CandidateTypes[0].vector_begin(),
6421            VecEnd = CandidateTypes[0].vector_end();
6422          Vec != VecEnd; ++Vec) {
6423       QualType VecTy = *Vec;
6424       S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6425     }
6426   }
6427 
6428   // C++ [over.match.oper]p16:
6429   //   For every pointer to member type T, there exist candidate operator
6430   //   functions of the form
6431   //
6432   //        bool operator==(T,T);
6433   //        bool operator!=(T,T);
6434   void addEqualEqualOrNotEqualMemberPointerOverloads() {
6435     /// Set of (canonical) types that we've already handled.
6436     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6437 
6438     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6439       for (BuiltinCandidateTypeSet::iterator
6440                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6441              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6442            MemPtr != MemPtrEnd;
6443            ++MemPtr) {
6444         // Don't add the same builtin candidate twice.
6445         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6446           continue;
6447 
6448         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6449         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6450                               CandidateSet);
6451       }
6452     }
6453   }
6454 
6455   // C++ [over.built]p15:
6456   //
6457   //   For every T, where T is an enumeration type, a pointer type, or
6458   //   std::nullptr_t, there exist candidate operator functions of the form
6459   //
6460   //        bool       operator<(T, T);
6461   //        bool       operator>(T, T);
6462   //        bool       operator<=(T, T);
6463   //        bool       operator>=(T, T);
6464   //        bool       operator==(T, T);
6465   //        bool       operator!=(T, T);
6466   void addRelationalPointerOrEnumeralOverloads() {
6467     // C++ [over.built]p1:
6468     //   If there is a user-written candidate with the same name and parameter
6469     //   types as a built-in candidate operator function, the built-in operator
6470     //   function is hidden and is not included in the set of candidate
6471     //   functions.
6472     //
6473     // The text is actually in a note, but if we don't implement it then we end
6474     // up with ambiguities when the user provides an overloaded operator for
6475     // an enumeration type. Note that only enumeration types have this problem,
6476     // so we track which enumeration types we've seen operators for. Also, the
6477     // only other overloaded operator with enumeration argumenst, operator=,
6478     // cannot be overloaded for enumeration types, so this is the only place
6479     // where we must suppress candidates like this.
6480     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6481       UserDefinedBinaryOperators;
6482 
6483     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6484       if (CandidateTypes[ArgIdx].enumeration_begin() !=
6485           CandidateTypes[ArgIdx].enumeration_end()) {
6486         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
6487                                          CEnd = CandidateSet.end();
6488              C != CEnd; ++C) {
6489           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
6490             continue;
6491 
6492           QualType FirstParamType =
6493             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
6494           QualType SecondParamType =
6495             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
6496 
6497           // Skip if either parameter isn't of enumeral type.
6498           if (!FirstParamType->isEnumeralType() ||
6499               !SecondParamType->isEnumeralType())
6500             continue;
6501 
6502           // Add this operator to the set of known user-defined operators.
6503           UserDefinedBinaryOperators.insert(
6504             std::make_pair(S.Context.getCanonicalType(FirstParamType),
6505                            S.Context.getCanonicalType(SecondParamType)));
6506         }
6507       }
6508     }
6509 
6510     /// Set of (canonical) types that we've already handled.
6511     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6512 
6513     for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6514       for (BuiltinCandidateTypeSet::iterator
6515                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
6516              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
6517            Ptr != PtrEnd; ++Ptr) {
6518         // Don't add the same builtin candidate twice.
6519         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6520           continue;
6521 
6522         QualType ParamTypes[2] = { *Ptr, *Ptr };
6523         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6524                               CandidateSet);
6525       }
6526       for (BuiltinCandidateTypeSet::iterator
6527                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
6528              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
6529            Enum != EnumEnd; ++Enum) {
6530         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
6531 
6532         // Don't add the same builtin candidate twice, or if a user defined
6533         // candidate exists.
6534         if (!AddedTypes.insert(CanonType) ||
6535             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
6536                                                             CanonType)))
6537           continue;
6538 
6539         QualType ParamTypes[2] = { *Enum, *Enum };
6540         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6541                               CandidateSet);
6542       }
6543 
6544       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
6545         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
6546         if (AddedTypes.insert(NullPtrTy) &&
6547             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
6548                                                              NullPtrTy))) {
6549           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
6550           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6551                                 CandidateSet);
6552         }
6553       }
6554     }
6555   }
6556 
6557   // C++ [over.built]p13:
6558   //
6559   //   For every cv-qualified or cv-unqualified object type T
6560   //   there exist candidate operator functions of the form
6561   //
6562   //      T*         operator+(T*, ptrdiff_t);
6563   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
6564   //      T*         operator-(T*, ptrdiff_t);
6565   //      T*         operator+(ptrdiff_t, T*);
6566   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
6567   //
6568   // C++ [over.built]p14:
6569   //
6570   //   For every T, where T is a pointer to object type, there
6571   //   exist candidate operator functions of the form
6572   //
6573   //      ptrdiff_t  operator-(T, T);
6574   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
6575     /// Set of (canonical) types that we've already handled.
6576     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6577 
6578     for (int Arg = 0; Arg < 2; ++Arg) {
6579       QualType AsymetricParamTypes[2] = {
6580         S.Context.getPointerDiffType(),
6581         S.Context.getPointerDiffType(),
6582       };
6583       for (BuiltinCandidateTypeSet::iterator
6584                 Ptr = CandidateTypes[Arg].pointer_begin(),
6585              PtrEnd = CandidateTypes[Arg].pointer_end();
6586            Ptr != PtrEnd; ++Ptr) {
6587         QualType PointeeTy = (*Ptr)->getPointeeType();
6588         if (!PointeeTy->isObjectType())
6589           continue;
6590 
6591         AsymetricParamTypes[Arg] = *Ptr;
6592         if (Arg == 0 || Op == OO_Plus) {
6593           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
6594           // T* operator+(ptrdiff_t, T*);
6595           S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2,
6596                                 CandidateSet);
6597         }
6598         if (Op == OO_Minus) {
6599           // ptrdiff_t operator-(T, T);
6600           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6601             continue;
6602 
6603           QualType ParamTypes[2] = { *Ptr, *Ptr };
6604           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
6605                                 Args, 2, CandidateSet);
6606         }
6607       }
6608     }
6609   }
6610 
6611   // C++ [over.built]p12:
6612   //
6613   //   For every pair of promoted arithmetic types L and R, there
6614   //   exist candidate operator functions of the form
6615   //
6616   //        LR         operator*(L, R);
6617   //        LR         operator/(L, R);
6618   //        LR         operator+(L, R);
6619   //        LR         operator-(L, R);
6620   //        bool       operator<(L, R);
6621   //        bool       operator>(L, R);
6622   //        bool       operator<=(L, R);
6623   //        bool       operator>=(L, R);
6624   //        bool       operator==(L, R);
6625   //        bool       operator!=(L, R);
6626   //
6627   //   where LR is the result of the usual arithmetic conversions
6628   //   between types L and R.
6629   //
6630   // C++ [over.built]p24:
6631   //
6632   //   For every pair of promoted arithmetic types L and R, there exist
6633   //   candidate operator functions of the form
6634   //
6635   //        LR       operator?(bool, L, R);
6636   //
6637   //   where LR is the result of the usual arithmetic conversions
6638   //   between types L and R.
6639   // Our candidates ignore the first parameter.
6640   void addGenericBinaryArithmeticOverloads(bool isComparison) {
6641     if (!HasArithmeticOrEnumeralCandidateType)
6642       return;
6643 
6644     for (unsigned Left = FirstPromotedArithmeticType;
6645          Left < LastPromotedArithmeticType; ++Left) {
6646       for (unsigned Right = FirstPromotedArithmeticType;
6647            Right < LastPromotedArithmeticType; ++Right) {
6648         QualType LandR[2] = { getArithmeticType(Left),
6649                               getArithmeticType(Right) };
6650         QualType Result =
6651           isComparison ? S.Context.BoolTy
6652                        : getUsualArithmeticConversions(Left, Right);
6653         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6654       }
6655     }
6656 
6657     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
6658     // conditional operator for vector types.
6659     for (BuiltinCandidateTypeSet::iterator
6660               Vec1 = CandidateTypes[0].vector_begin(),
6661            Vec1End = CandidateTypes[0].vector_end();
6662          Vec1 != Vec1End; ++Vec1) {
6663       for (BuiltinCandidateTypeSet::iterator
6664                 Vec2 = CandidateTypes[1].vector_begin(),
6665              Vec2End = CandidateTypes[1].vector_end();
6666            Vec2 != Vec2End; ++Vec2) {
6667         QualType LandR[2] = { *Vec1, *Vec2 };
6668         QualType Result = S.Context.BoolTy;
6669         if (!isComparison) {
6670           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
6671             Result = *Vec1;
6672           else
6673             Result = *Vec2;
6674         }
6675 
6676         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6677       }
6678     }
6679   }
6680 
6681   // C++ [over.built]p17:
6682   //
6683   //   For every pair of promoted integral types L and R, there
6684   //   exist candidate operator functions of the form
6685   //
6686   //      LR         operator%(L, R);
6687   //      LR         operator&(L, R);
6688   //      LR         operator^(L, R);
6689   //      LR         operator|(L, R);
6690   //      L          operator<<(L, R);
6691   //      L          operator>>(L, R);
6692   //
6693   //   where LR is the result of the usual arithmetic conversions
6694   //   between types L and R.
6695   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
6696     if (!HasArithmeticOrEnumeralCandidateType)
6697       return;
6698 
6699     for (unsigned Left = FirstPromotedIntegralType;
6700          Left < LastPromotedIntegralType; ++Left) {
6701       for (unsigned Right = FirstPromotedIntegralType;
6702            Right < LastPromotedIntegralType; ++Right) {
6703         QualType LandR[2] = { getArithmeticType(Left),
6704                               getArithmeticType(Right) };
6705         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
6706             ? LandR[0]
6707             : getUsualArithmeticConversions(Left, Right);
6708         S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6709       }
6710     }
6711   }
6712 
6713   // C++ [over.built]p20:
6714   //
6715   //   For every pair (T, VQ), where T is an enumeration or
6716   //   pointer to member type and VQ is either volatile or
6717   //   empty, there exist candidate operator functions of the form
6718   //
6719   //        VQ T&      operator=(VQ T&, T);
6720   void addAssignmentMemberPointerOrEnumeralOverloads() {
6721     /// Set of (canonical) types that we've already handled.
6722     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6723 
6724     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
6725       for (BuiltinCandidateTypeSet::iterator
6726                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
6727              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
6728            Enum != EnumEnd; ++Enum) {
6729         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
6730           continue;
6731 
6732         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2,
6733                                                CandidateSet);
6734       }
6735 
6736       for (BuiltinCandidateTypeSet::iterator
6737                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6738              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6739            MemPtr != MemPtrEnd; ++MemPtr) {
6740         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6741           continue;
6742 
6743         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2,
6744                                                CandidateSet);
6745       }
6746     }
6747   }
6748 
6749   // C++ [over.built]p19:
6750   //
6751   //   For every pair (T, VQ), where T is any type and VQ is either
6752   //   volatile or empty, there exist candidate operator functions
6753   //   of the form
6754   //
6755   //        T*VQ&      operator=(T*VQ&, T*);
6756   //
6757   // C++ [over.built]p21:
6758   //
6759   //   For every pair (T, VQ), where T is a cv-qualified or
6760   //   cv-unqualified object type and VQ is either volatile or
6761   //   empty, there exist candidate operator functions of the form
6762   //
6763   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
6764   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
6765   void addAssignmentPointerOverloads(bool isEqualOp) {
6766     /// Set of (canonical) types that we've already handled.
6767     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6768 
6769     for (BuiltinCandidateTypeSet::iterator
6770               Ptr = CandidateTypes[0].pointer_begin(),
6771            PtrEnd = CandidateTypes[0].pointer_end();
6772          Ptr != PtrEnd; ++Ptr) {
6773       // If this is operator=, keep track of the builtin candidates we added.
6774       if (isEqualOp)
6775         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
6776       else if (!(*Ptr)->getPointeeType()->isObjectType())
6777         continue;
6778 
6779       // non-volatile version
6780       QualType ParamTypes[2] = {
6781         S.Context.getLValueReferenceType(*Ptr),
6782         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
6783       };
6784       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6785                             /*IsAssigmentOperator=*/ isEqualOp);
6786 
6787       if (!S.Context.getCanonicalType(*Ptr).isVolatileQualified() &&
6788           VisibleTypeConversionsQuals.hasVolatile()) {
6789         // volatile version
6790         ParamTypes[0] =
6791           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
6792         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6793                               /*IsAssigmentOperator=*/isEqualOp);
6794       }
6795     }
6796 
6797     if (isEqualOp) {
6798       for (BuiltinCandidateTypeSet::iterator
6799                 Ptr = CandidateTypes[1].pointer_begin(),
6800              PtrEnd = CandidateTypes[1].pointer_end();
6801            Ptr != PtrEnd; ++Ptr) {
6802         // Make sure we don't add the same candidate twice.
6803         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6804           continue;
6805 
6806         QualType ParamTypes[2] = {
6807           S.Context.getLValueReferenceType(*Ptr),
6808           *Ptr,
6809         };
6810 
6811         // non-volatile version
6812         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6813                               /*IsAssigmentOperator=*/true);
6814 
6815         if (!S.Context.getCanonicalType(*Ptr).isVolatileQualified() &&
6816             VisibleTypeConversionsQuals.hasVolatile()) {
6817           // volatile version
6818           ParamTypes[0] =
6819             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
6820           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
6821                                 CandidateSet, /*IsAssigmentOperator=*/true);
6822         }
6823       }
6824     }
6825   }
6826 
6827   // C++ [over.built]p18:
6828   //
6829   //   For every triple (L, VQ, R), where L is an arithmetic type,
6830   //   VQ is either volatile or empty, and R is a promoted
6831   //   arithmetic type, there exist candidate operator functions of
6832   //   the form
6833   //
6834   //        VQ L&      operator=(VQ L&, R);
6835   //        VQ L&      operator*=(VQ L&, R);
6836   //        VQ L&      operator/=(VQ L&, R);
6837   //        VQ L&      operator+=(VQ L&, R);
6838   //        VQ L&      operator-=(VQ L&, R);
6839   void addAssignmentArithmeticOverloads(bool isEqualOp) {
6840     if (!HasArithmeticOrEnumeralCandidateType)
6841       return;
6842 
6843     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
6844       for (unsigned Right = FirstPromotedArithmeticType;
6845            Right < LastPromotedArithmeticType; ++Right) {
6846         QualType ParamTypes[2];
6847         ParamTypes[1] = getArithmeticType(Right);
6848 
6849         // Add this built-in operator as a candidate (VQ is empty).
6850         ParamTypes[0] =
6851           S.Context.getLValueReferenceType(getArithmeticType(Left));
6852         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6853                               /*IsAssigmentOperator=*/isEqualOp);
6854 
6855         // Add this built-in operator as a candidate (VQ is 'volatile').
6856         if (VisibleTypeConversionsQuals.hasVolatile()) {
6857           ParamTypes[0] =
6858             S.Context.getVolatileType(getArithmeticType(Left));
6859           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
6860           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
6861                                 CandidateSet,
6862                                 /*IsAssigmentOperator=*/isEqualOp);
6863         }
6864       }
6865     }
6866 
6867     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
6868     for (BuiltinCandidateTypeSet::iterator
6869               Vec1 = CandidateTypes[0].vector_begin(),
6870            Vec1End = CandidateTypes[0].vector_end();
6871          Vec1 != Vec1End; ++Vec1) {
6872       for (BuiltinCandidateTypeSet::iterator
6873                 Vec2 = CandidateTypes[1].vector_begin(),
6874              Vec2End = CandidateTypes[1].vector_end();
6875            Vec2 != Vec2End; ++Vec2) {
6876         QualType ParamTypes[2];
6877         ParamTypes[1] = *Vec2;
6878         // Add this built-in operator as a candidate (VQ is empty).
6879         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
6880         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6881                               /*IsAssigmentOperator=*/isEqualOp);
6882 
6883         // Add this built-in operator as a candidate (VQ is 'volatile').
6884         if (VisibleTypeConversionsQuals.hasVolatile()) {
6885           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
6886           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
6887           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
6888                                 CandidateSet,
6889                                 /*IsAssigmentOperator=*/isEqualOp);
6890         }
6891       }
6892     }
6893   }
6894 
6895   // C++ [over.built]p22:
6896   //
6897   //   For every triple (L, VQ, R), where L is an integral type, VQ
6898   //   is either volatile or empty, and R is a promoted integral
6899   //   type, there exist candidate operator functions of the form
6900   //
6901   //        VQ L&       operator%=(VQ L&, R);
6902   //        VQ L&       operator<<=(VQ L&, R);
6903   //        VQ L&       operator>>=(VQ L&, R);
6904   //        VQ L&       operator&=(VQ L&, R);
6905   //        VQ L&       operator^=(VQ L&, R);
6906   //        VQ L&       operator|=(VQ L&, R);
6907   void addAssignmentIntegralOverloads() {
6908     if (!HasArithmeticOrEnumeralCandidateType)
6909       return;
6910 
6911     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
6912       for (unsigned Right = FirstPromotedIntegralType;
6913            Right < LastPromotedIntegralType; ++Right) {
6914         QualType ParamTypes[2];
6915         ParamTypes[1] = getArithmeticType(Right);
6916 
6917         // Add this built-in operator as a candidate (VQ is empty).
6918         ParamTypes[0] =
6919           S.Context.getLValueReferenceType(getArithmeticType(Left));
6920         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
6921         if (VisibleTypeConversionsQuals.hasVolatile()) {
6922           // Add this built-in operator as a candidate (VQ is 'volatile').
6923           ParamTypes[0] = getArithmeticType(Left);
6924           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
6925           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
6926           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
6927                                 CandidateSet);
6928         }
6929       }
6930     }
6931   }
6932 
6933   // C++ [over.operator]p23:
6934   //
6935   //   There also exist candidate operator functions of the form
6936   //
6937   //        bool        operator!(bool);
6938   //        bool        operator&&(bool, bool);
6939   //        bool        operator||(bool, bool);
6940   void addExclaimOverload() {
6941     QualType ParamTy = S.Context.BoolTy;
6942     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
6943                           /*IsAssignmentOperator=*/false,
6944                           /*NumContextualBoolArguments=*/1);
6945   }
6946   void addAmpAmpOrPipePipeOverload() {
6947     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
6948     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
6949                           /*IsAssignmentOperator=*/false,
6950                           /*NumContextualBoolArguments=*/2);
6951   }
6952 
6953   // C++ [over.built]p13:
6954   //
6955   //   For every cv-qualified or cv-unqualified object type T there
6956   //   exist candidate operator functions of the form
6957   //
6958   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
6959   //        T&         operator[](T*, ptrdiff_t);
6960   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
6961   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
6962   //        T&         operator[](ptrdiff_t, T*);
6963   void addSubscriptOverloads() {
6964     for (BuiltinCandidateTypeSet::iterator
6965               Ptr = CandidateTypes[0].pointer_begin(),
6966            PtrEnd = CandidateTypes[0].pointer_end();
6967          Ptr != PtrEnd; ++Ptr) {
6968       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
6969       QualType PointeeType = (*Ptr)->getPointeeType();
6970       if (!PointeeType->isObjectType())
6971         continue;
6972 
6973       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
6974 
6975       // T& operator[](T*, ptrdiff_t)
6976       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
6977     }
6978 
6979     for (BuiltinCandidateTypeSet::iterator
6980               Ptr = CandidateTypes[1].pointer_begin(),
6981            PtrEnd = CandidateTypes[1].pointer_end();
6982          Ptr != PtrEnd; ++Ptr) {
6983       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
6984       QualType PointeeType = (*Ptr)->getPointeeType();
6985       if (!PointeeType->isObjectType())
6986         continue;
6987 
6988       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
6989 
6990       // T& operator[](ptrdiff_t, T*)
6991       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
6992     }
6993   }
6994 
6995   // C++ [over.built]p11:
6996   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
6997   //    C1 is the same type as C2 or is a derived class of C2, T is an object
6998   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
6999   //    there exist candidate operator functions of the form
7000   //
7001   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7002   //
7003   //    where CV12 is the union of CV1 and CV2.
7004   void addArrowStarOverloads() {
7005     for (BuiltinCandidateTypeSet::iterator
7006              Ptr = CandidateTypes[0].pointer_begin(),
7007            PtrEnd = CandidateTypes[0].pointer_end();
7008          Ptr != PtrEnd; ++Ptr) {
7009       QualType C1Ty = (*Ptr);
7010       QualType C1;
7011       QualifierCollector Q1;
7012       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7013       if (!isa<RecordType>(C1))
7014         continue;
7015       // heuristic to reduce number of builtin candidates in the set.
7016       // Add volatile/restrict version only if there are conversions to a
7017       // volatile/restrict type.
7018       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7019         continue;
7020       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7021         continue;
7022       for (BuiltinCandidateTypeSet::iterator
7023                 MemPtr = CandidateTypes[1].member_pointer_begin(),
7024              MemPtrEnd = CandidateTypes[1].member_pointer_end();
7025            MemPtr != MemPtrEnd; ++MemPtr) {
7026         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7027         QualType C2 = QualType(mptr->getClass(), 0);
7028         C2 = C2.getUnqualifiedType();
7029         if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7030           break;
7031         QualType ParamTypes[2] = { *Ptr, *MemPtr };
7032         // build CV12 T&
7033         QualType T = mptr->getPointeeType();
7034         if (!VisibleTypeConversionsQuals.hasVolatile() &&
7035             T.isVolatileQualified())
7036           continue;
7037         if (!VisibleTypeConversionsQuals.hasRestrict() &&
7038             T.isRestrictQualified())
7039           continue;
7040         T = Q1.apply(S.Context, T);
7041         QualType ResultTy = S.Context.getLValueReferenceType(T);
7042         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7043       }
7044     }
7045   }
7046 
7047   // Note that we don't consider the first argument, since it has been
7048   // contextually converted to bool long ago. The candidates below are
7049   // therefore added as binary.
7050   //
7051   // C++ [over.built]p25:
7052   //   For every type T, where T is a pointer, pointer-to-member, or scoped
7053   //   enumeration type, there exist candidate operator functions of the form
7054   //
7055   //        T        operator?(bool, T, T);
7056   //
7057   void addConditionalOperatorOverloads() {
7058     /// Set of (canonical) types that we've already handled.
7059     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7060 
7061     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7062       for (BuiltinCandidateTypeSet::iterator
7063                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7064              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7065            Ptr != PtrEnd; ++Ptr) {
7066         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7067           continue;
7068 
7069         QualType ParamTypes[2] = { *Ptr, *Ptr };
7070         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
7071       }
7072 
7073       for (BuiltinCandidateTypeSet::iterator
7074                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7075              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7076            MemPtr != MemPtrEnd; ++MemPtr) {
7077         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7078           continue;
7079 
7080         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7081         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet);
7082       }
7083 
7084       if (S.getLangOptions().CPlusPlus0x) {
7085         for (BuiltinCandidateTypeSet::iterator
7086                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7087                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7088              Enum != EnumEnd; ++Enum) {
7089           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7090             continue;
7091 
7092           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7093             continue;
7094 
7095           QualType ParamTypes[2] = { *Enum, *Enum };
7096           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet);
7097         }
7098       }
7099     }
7100   }
7101 };
7102 
7103 } // end anonymous namespace
7104 
7105 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
7106 /// operator overloads to the candidate set (C++ [over.built]), based
7107 /// on the operator @p Op and the arguments given. For example, if the
7108 /// operator is a binary '+', this routine might add "int
7109 /// operator+(int, int)" to cover integer addition.
7110 void
7111 Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7112                                    SourceLocation OpLoc,
7113                                    Expr **Args, unsigned NumArgs,
7114                                    OverloadCandidateSet& CandidateSet) {
7115   // Find all of the types that the arguments can convert to, but only
7116   // if the operator we're looking at has built-in operator candidates
7117   // that make use of these types. Also record whether we encounter non-record
7118   // candidate types or either arithmetic or enumeral candidate types.
7119   Qualifiers VisibleTypeConversionsQuals;
7120   VisibleTypeConversionsQuals.addConst();
7121   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7122     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7123 
7124   bool HasNonRecordCandidateType = false;
7125   bool HasArithmeticOrEnumeralCandidateType = false;
7126   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7127   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
7128     CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7129     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7130                                                  OpLoc,
7131                                                  true,
7132                                                  (Op == OO_Exclaim ||
7133                                                   Op == OO_AmpAmp ||
7134                                                   Op == OO_PipePipe),
7135                                                  VisibleTypeConversionsQuals);
7136     HasNonRecordCandidateType = HasNonRecordCandidateType ||
7137         CandidateTypes[ArgIdx].hasNonRecordTypes();
7138     HasArithmeticOrEnumeralCandidateType =
7139         HasArithmeticOrEnumeralCandidateType ||
7140         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7141   }
7142 
7143   // Exit early when no non-record types have been added to the candidate set
7144   // for any of the arguments to the operator.
7145   //
7146   // We can't exit early for !, ||, or &&, since there we have always have
7147   // 'bool' overloads.
7148   if (!HasNonRecordCandidateType &&
7149       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7150     return;
7151 
7152   // Setup an object to manage the common state for building overloads.
7153   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs,
7154                                            VisibleTypeConversionsQuals,
7155                                            HasArithmeticOrEnumeralCandidateType,
7156                                            CandidateTypes, CandidateSet);
7157 
7158   // Dispatch over the operation to add in only those overloads which apply.
7159   switch (Op) {
7160   case OO_None:
7161   case NUM_OVERLOADED_OPERATORS:
7162     llvm_unreachable("Expected an overloaded operator");
7163 
7164   case OO_New:
7165   case OO_Delete:
7166   case OO_Array_New:
7167   case OO_Array_Delete:
7168   case OO_Call:
7169     llvm_unreachable(
7170                     "Special operators don't use AddBuiltinOperatorCandidates");
7171 
7172   case OO_Comma:
7173   case OO_Arrow:
7174     // C++ [over.match.oper]p3:
7175     //   -- For the operator ',', the unary operator '&', or the
7176     //      operator '->', the built-in candidates set is empty.
7177     break;
7178 
7179   case OO_Plus: // '+' is either unary or binary
7180     if (NumArgs == 1)
7181       OpBuilder.addUnaryPlusPointerOverloads();
7182     // Fall through.
7183 
7184   case OO_Minus: // '-' is either unary or binary
7185     if (NumArgs == 1) {
7186       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7187     } else {
7188       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7189       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7190     }
7191     break;
7192 
7193   case OO_Star: // '*' is either unary or binary
7194     if (NumArgs == 1)
7195       OpBuilder.addUnaryStarPointerOverloads();
7196     else
7197       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7198     break;
7199 
7200   case OO_Slash:
7201     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7202     break;
7203 
7204   case OO_PlusPlus:
7205   case OO_MinusMinus:
7206     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7207     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7208     break;
7209 
7210   case OO_EqualEqual:
7211   case OO_ExclaimEqual:
7212     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7213     // Fall through.
7214 
7215   case OO_Less:
7216   case OO_Greater:
7217   case OO_LessEqual:
7218   case OO_GreaterEqual:
7219     OpBuilder.addRelationalPointerOrEnumeralOverloads();
7220     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7221     break;
7222 
7223   case OO_Percent:
7224   case OO_Caret:
7225   case OO_Pipe:
7226   case OO_LessLess:
7227   case OO_GreaterGreater:
7228     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7229     break;
7230 
7231   case OO_Amp: // '&' is either unary or binary
7232     if (NumArgs == 1)
7233       // C++ [over.match.oper]p3:
7234       //   -- For the operator ',', the unary operator '&', or the
7235       //      operator '->', the built-in candidates set is empty.
7236       break;
7237 
7238     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7239     break;
7240 
7241   case OO_Tilde:
7242     OpBuilder.addUnaryTildePromotedIntegralOverloads();
7243     break;
7244 
7245   case OO_Equal:
7246     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7247     // Fall through.
7248 
7249   case OO_PlusEqual:
7250   case OO_MinusEqual:
7251     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7252     // Fall through.
7253 
7254   case OO_StarEqual:
7255   case OO_SlashEqual:
7256     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7257     break;
7258 
7259   case OO_PercentEqual:
7260   case OO_LessLessEqual:
7261   case OO_GreaterGreaterEqual:
7262   case OO_AmpEqual:
7263   case OO_CaretEqual:
7264   case OO_PipeEqual:
7265     OpBuilder.addAssignmentIntegralOverloads();
7266     break;
7267 
7268   case OO_Exclaim:
7269     OpBuilder.addExclaimOverload();
7270     break;
7271 
7272   case OO_AmpAmp:
7273   case OO_PipePipe:
7274     OpBuilder.addAmpAmpOrPipePipeOverload();
7275     break;
7276 
7277   case OO_Subscript:
7278     OpBuilder.addSubscriptOverloads();
7279     break;
7280 
7281   case OO_ArrowStar:
7282     OpBuilder.addArrowStarOverloads();
7283     break;
7284 
7285   case OO_Conditional:
7286     OpBuilder.addConditionalOperatorOverloads();
7287     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7288     break;
7289   }
7290 }
7291 
7292 /// \brief Add function candidates found via argument-dependent lookup
7293 /// to the set of overloading candidates.
7294 ///
7295 /// This routine performs argument-dependent name lookup based on the
7296 /// given function name (which may also be an operator name) and adds
7297 /// all of the overload candidates found by ADL to the overload
7298 /// candidate set (C++ [basic.lookup.argdep]).
7299 void
7300 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7301                                            bool Operator,
7302                                            Expr **Args, unsigned NumArgs,
7303                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
7304                                            OverloadCandidateSet& CandidateSet,
7305                                            bool PartialOverloading,
7306                                            bool StdNamespaceIsAssociated) {
7307   ADLResult Fns;
7308 
7309   // FIXME: This approach for uniquing ADL results (and removing
7310   // redundant candidates from the set) relies on pointer-equality,
7311   // which means we need to key off the canonical decl.  However,
7312   // always going back to the canonical decl might not get us the
7313   // right set of default arguments.  What default arguments are
7314   // we supposed to consider on ADL candidates, anyway?
7315 
7316   // FIXME: Pass in the explicit template arguments?
7317   ArgumentDependentLookup(Name, Operator, Args, NumArgs, Fns,
7318                           StdNamespaceIsAssociated);
7319 
7320   // Erase all of the candidates we already knew about.
7321   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7322                                    CandEnd = CandidateSet.end();
7323        Cand != CandEnd; ++Cand)
7324     if (Cand->Function) {
7325       Fns.erase(Cand->Function);
7326       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7327         Fns.erase(FunTmpl);
7328     }
7329 
7330   // For each of the ADL candidates we found, add it to the overload
7331   // set.
7332   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7333     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7334     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7335       if (ExplicitTemplateArgs)
7336         continue;
7337 
7338       AddOverloadCandidate(FD, FoundDecl, Args, NumArgs, CandidateSet,
7339                            false, PartialOverloading);
7340     } else
7341       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7342                                    FoundDecl, ExplicitTemplateArgs,
7343                                    Args, NumArgs, CandidateSet);
7344   }
7345 }
7346 
7347 /// isBetterOverloadCandidate - Determines whether the first overload
7348 /// candidate is a better candidate than the second (C++ 13.3.3p1).
7349 bool
7350 isBetterOverloadCandidate(Sema &S,
7351                           const OverloadCandidate &Cand1,
7352                           const OverloadCandidate &Cand2,
7353                           SourceLocation Loc,
7354                           bool UserDefinedConversion) {
7355   // Define viable functions to be better candidates than non-viable
7356   // functions.
7357   if (!Cand2.Viable)
7358     return Cand1.Viable;
7359   else if (!Cand1.Viable)
7360     return false;
7361 
7362   // C++ [over.match.best]p1:
7363   //
7364   //   -- if F is a static member function, ICS1(F) is defined such
7365   //      that ICS1(F) is neither better nor worse than ICS1(G) for
7366   //      any function G, and, symmetrically, ICS1(G) is neither
7367   //      better nor worse than ICS1(F).
7368   unsigned StartArg = 0;
7369   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7370     StartArg = 1;
7371 
7372   // C++ [over.match.best]p1:
7373   //   A viable function F1 is defined to be a better function than another
7374   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7375   //   conversion sequence than ICSi(F2), and then...
7376   unsigned NumArgs = Cand1.NumConversions;
7377   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7378   bool HasBetterConversion = false;
7379   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7380     switch (CompareImplicitConversionSequences(S,
7381                                                Cand1.Conversions[ArgIdx],
7382                                                Cand2.Conversions[ArgIdx])) {
7383     case ImplicitConversionSequence::Better:
7384       // Cand1 has a better conversion sequence.
7385       HasBetterConversion = true;
7386       break;
7387 
7388     case ImplicitConversionSequence::Worse:
7389       // Cand1 can't be better than Cand2.
7390       return false;
7391 
7392     case ImplicitConversionSequence::Indistinguishable:
7393       // Do nothing.
7394       break;
7395     }
7396   }
7397 
7398   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7399   //       ICSj(F2), or, if not that,
7400   if (HasBetterConversion)
7401     return true;
7402 
7403   //     - F1 is a non-template function and F2 is a function template
7404   //       specialization, or, if not that,
7405   if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7406       Cand2.Function && Cand2.Function->getPrimaryTemplate())
7407     return true;
7408 
7409   //   -- F1 and F2 are function template specializations, and the function
7410   //      template for F1 is more specialized than the template for F2
7411   //      according to the partial ordering rules described in 14.5.5.2, or,
7412   //      if not that,
7413   if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7414       Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7415     if (FunctionTemplateDecl *BetterTemplate
7416           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7417                                          Cand2.Function->getPrimaryTemplate(),
7418                                          Loc,
7419                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7420                                                              : TPOC_Call,
7421                                          Cand1.ExplicitCallArguments))
7422       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7423   }
7424 
7425   //   -- the context is an initialization by user-defined conversion
7426   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7427   //      from the return type of F1 to the destination type (i.e.,
7428   //      the type of the entity being initialized) is a better
7429   //      conversion sequence than the standard conversion sequence
7430   //      from the return type of F2 to the destination type.
7431   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7432       isa<CXXConversionDecl>(Cand1.Function) &&
7433       isa<CXXConversionDecl>(Cand2.Function)) {
7434     switch (CompareStandardConversionSequences(S,
7435                                                Cand1.FinalConversion,
7436                                                Cand2.FinalConversion)) {
7437     case ImplicitConversionSequence::Better:
7438       // Cand1 has a better conversion sequence.
7439       return true;
7440 
7441     case ImplicitConversionSequence::Worse:
7442       // Cand1 can't be better than Cand2.
7443       return false;
7444 
7445     case ImplicitConversionSequence::Indistinguishable:
7446       // Do nothing
7447       break;
7448     }
7449   }
7450 
7451   return false;
7452 }
7453 
7454 /// \brief Computes the best viable function (C++ 13.3.3)
7455 /// within an overload candidate set.
7456 ///
7457 /// \param CandidateSet the set of candidate functions.
7458 ///
7459 /// \param Loc the location of the function name (or operator symbol) for
7460 /// which overload resolution occurs.
7461 ///
7462 /// \param Best f overload resolution was successful or found a deleted
7463 /// function, Best points to the candidate function found.
7464 ///
7465 /// \returns The result of overload resolution.
7466 OverloadingResult
7467 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
7468                                          iterator &Best,
7469                                          bool UserDefinedConversion) {
7470   // Find the best viable function.
7471   Best = end();
7472   for (iterator Cand = begin(); Cand != end(); ++Cand) {
7473     if (Cand->Viable)
7474       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
7475                                                      UserDefinedConversion))
7476         Best = Cand;
7477   }
7478 
7479   // If we didn't find any viable functions, abort.
7480   if (Best == end())
7481     return OR_No_Viable_Function;
7482 
7483   // Make sure that this function is better than every other viable
7484   // function. If not, we have an ambiguity.
7485   for (iterator Cand = begin(); Cand != end(); ++Cand) {
7486     if (Cand->Viable &&
7487         Cand != Best &&
7488         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
7489                                    UserDefinedConversion)) {
7490       Best = end();
7491       return OR_Ambiguous;
7492     }
7493   }
7494 
7495   // Best is the best viable function.
7496   if (Best->Function &&
7497       (Best->Function->isDeleted() ||
7498        S.isFunctionConsideredUnavailable(Best->Function)))
7499     return OR_Deleted;
7500 
7501   return OR_Success;
7502 }
7503 
7504 namespace {
7505 
7506 enum OverloadCandidateKind {
7507   oc_function,
7508   oc_method,
7509   oc_constructor,
7510   oc_function_template,
7511   oc_method_template,
7512   oc_constructor_template,
7513   oc_implicit_default_constructor,
7514   oc_implicit_copy_constructor,
7515   oc_implicit_move_constructor,
7516   oc_implicit_copy_assignment,
7517   oc_implicit_move_assignment,
7518   oc_implicit_inherited_constructor
7519 };
7520 
7521 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
7522                                                 FunctionDecl *Fn,
7523                                                 std::string &Description) {
7524   bool isTemplate = false;
7525 
7526   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
7527     isTemplate = true;
7528     Description = S.getTemplateArgumentBindingsText(
7529       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
7530   }
7531 
7532   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
7533     if (!Ctor->isImplicit())
7534       return isTemplate ? oc_constructor_template : oc_constructor;
7535 
7536     if (Ctor->getInheritedConstructor())
7537       return oc_implicit_inherited_constructor;
7538 
7539     if (Ctor->isDefaultConstructor())
7540       return oc_implicit_default_constructor;
7541 
7542     if (Ctor->isMoveConstructor())
7543       return oc_implicit_move_constructor;
7544 
7545     assert(Ctor->isCopyConstructor() &&
7546            "unexpected sort of implicit constructor");
7547     return oc_implicit_copy_constructor;
7548   }
7549 
7550   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
7551     // This actually gets spelled 'candidate function' for now, but
7552     // it doesn't hurt to split it out.
7553     if (!Meth->isImplicit())
7554       return isTemplate ? oc_method_template : oc_method;
7555 
7556     if (Meth->isMoveAssignmentOperator())
7557       return oc_implicit_move_assignment;
7558 
7559     assert(Meth->isCopyAssignmentOperator()
7560            && "implicit method is not copy assignment operator?");
7561     return oc_implicit_copy_assignment;
7562   }
7563 
7564   return isTemplate ? oc_function_template : oc_function;
7565 }
7566 
7567 void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) {
7568   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
7569   if (!Ctor) return;
7570 
7571   Ctor = Ctor->getInheritedConstructor();
7572   if (!Ctor) return;
7573 
7574   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
7575 }
7576 
7577 } // end anonymous namespace
7578 
7579 // Notes the location of an overload candidate.
7580 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
7581   std::string FnDesc;
7582   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
7583   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
7584                              << (unsigned) K << FnDesc;
7585   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
7586   Diag(Fn->getLocation(), PD);
7587   MaybeEmitInheritedConstructorNote(*this, Fn);
7588 }
7589 
7590 //Notes the location of all overload candidates designated through
7591 // OverloadedExpr
7592 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
7593   assert(OverloadedExpr->getType() == Context.OverloadTy);
7594 
7595   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
7596   OverloadExpr *OvlExpr = Ovl.Expression;
7597 
7598   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
7599                             IEnd = OvlExpr->decls_end();
7600        I != IEnd; ++I) {
7601     if (FunctionTemplateDecl *FunTmpl =
7602                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
7603       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
7604     } else if (FunctionDecl *Fun
7605                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
7606       NoteOverloadCandidate(Fun, DestType);
7607     }
7608   }
7609 }
7610 
7611 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
7612 /// "lead" diagnostic; it will be given two arguments, the source and
7613 /// target types of the conversion.
7614 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
7615                                  Sema &S,
7616                                  SourceLocation CaretLoc,
7617                                  const PartialDiagnostic &PDiag) const {
7618   S.Diag(CaretLoc, PDiag)
7619     << Ambiguous.getFromType() << Ambiguous.getToType();
7620   for (AmbiguousConversionSequence::const_iterator
7621          I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
7622     S.NoteOverloadCandidate(*I);
7623   }
7624 }
7625 
7626 namespace {
7627 
7628 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
7629   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
7630   assert(Conv.isBad());
7631   assert(Cand->Function && "for now, candidate must be a function");
7632   FunctionDecl *Fn = Cand->Function;
7633 
7634   // There's a conversion slot for the object argument if this is a
7635   // non-constructor method.  Note that 'I' corresponds the
7636   // conversion-slot index.
7637   bool isObjectArgument = false;
7638   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
7639     if (I == 0)
7640       isObjectArgument = true;
7641     else
7642       I--;
7643   }
7644 
7645   std::string FnDesc;
7646   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
7647 
7648   Expr *FromExpr = Conv.Bad.FromExpr;
7649   QualType FromTy = Conv.Bad.getFromType();
7650   QualType ToTy = Conv.Bad.getToType();
7651 
7652   if (FromTy == S.Context.OverloadTy) {
7653     assert(FromExpr && "overload set argument came from implicit argument?");
7654     Expr *E = FromExpr->IgnoreParens();
7655     if (isa<UnaryOperator>(E))
7656       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
7657     DeclarationName Name = cast<OverloadExpr>(E)->getName();
7658 
7659     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
7660       << (unsigned) FnKind << FnDesc
7661       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7662       << ToTy << Name << I+1;
7663     MaybeEmitInheritedConstructorNote(S, Fn);
7664     return;
7665   }
7666 
7667   // Do some hand-waving analysis to see if the non-viability is due
7668   // to a qualifier mismatch.
7669   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
7670   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
7671   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
7672     CToTy = RT->getPointeeType();
7673   else {
7674     // TODO: detect and diagnose the full richness of const mismatches.
7675     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
7676       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
7677         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
7678   }
7679 
7680   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
7681       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
7682     // It is dumb that we have to do this here.
7683     while (isa<ArrayType>(CFromTy))
7684       CFromTy = CFromTy->getAs<ArrayType>()->getElementType();
7685     while (isa<ArrayType>(CToTy))
7686       CToTy = CFromTy->getAs<ArrayType>()->getElementType();
7687 
7688     Qualifiers FromQs = CFromTy.getQualifiers();
7689     Qualifiers ToQs = CToTy.getQualifiers();
7690 
7691     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
7692       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
7693         << (unsigned) FnKind << FnDesc
7694         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7695         << FromTy
7696         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
7697         << (unsigned) isObjectArgument << I+1;
7698       MaybeEmitInheritedConstructorNote(S, Fn);
7699       return;
7700     }
7701 
7702     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
7703       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
7704         << (unsigned) FnKind << FnDesc
7705         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7706         << FromTy
7707         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
7708         << (unsigned) isObjectArgument << I+1;
7709       MaybeEmitInheritedConstructorNote(S, Fn);
7710       return;
7711     }
7712 
7713     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
7714       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
7715       << (unsigned) FnKind << FnDesc
7716       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7717       << FromTy
7718       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
7719       << (unsigned) isObjectArgument << I+1;
7720       MaybeEmitInheritedConstructorNote(S, Fn);
7721       return;
7722     }
7723 
7724     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
7725     assert(CVR && "unexpected qualifiers mismatch");
7726 
7727     if (isObjectArgument) {
7728       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
7729         << (unsigned) FnKind << FnDesc
7730         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7731         << FromTy << (CVR - 1);
7732     } else {
7733       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
7734         << (unsigned) FnKind << FnDesc
7735         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7736         << FromTy << (CVR - 1) << I+1;
7737     }
7738     MaybeEmitInheritedConstructorNote(S, Fn);
7739     return;
7740   }
7741 
7742   // Special diagnostic for failure to convert an initializer list, since
7743   // telling the user that it has type void is not useful.
7744   if (FromExpr && isa<InitListExpr>(FromExpr)) {
7745     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
7746       << (unsigned) FnKind << FnDesc
7747       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7748       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
7749     MaybeEmitInheritedConstructorNote(S, Fn);
7750     return;
7751   }
7752 
7753   // Diagnose references or pointers to incomplete types differently,
7754   // since it's far from impossible that the incompleteness triggered
7755   // the failure.
7756   QualType TempFromTy = FromTy.getNonReferenceType();
7757   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
7758     TempFromTy = PTy->getPointeeType();
7759   if (TempFromTy->isIncompleteType()) {
7760     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
7761       << (unsigned) FnKind << FnDesc
7762       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7763       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
7764     MaybeEmitInheritedConstructorNote(S, Fn);
7765     return;
7766   }
7767 
7768   // Diagnose base -> derived pointer conversions.
7769   unsigned BaseToDerivedConversion = 0;
7770   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
7771     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
7772       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
7773                                                FromPtrTy->getPointeeType()) &&
7774           !FromPtrTy->getPointeeType()->isIncompleteType() &&
7775           !ToPtrTy->getPointeeType()->isIncompleteType() &&
7776           S.IsDerivedFrom(ToPtrTy->getPointeeType(),
7777                           FromPtrTy->getPointeeType()))
7778         BaseToDerivedConversion = 1;
7779     }
7780   } else if (const ObjCObjectPointerType *FromPtrTy
7781                                     = FromTy->getAs<ObjCObjectPointerType>()) {
7782     if (const ObjCObjectPointerType *ToPtrTy
7783                                         = ToTy->getAs<ObjCObjectPointerType>())
7784       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
7785         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
7786           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
7787                                                 FromPtrTy->getPointeeType()) &&
7788               FromIface->isSuperClassOf(ToIface))
7789             BaseToDerivedConversion = 2;
7790   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
7791       if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
7792           !FromTy->isIncompleteType() &&
7793           !ToRefTy->getPointeeType()->isIncompleteType() &&
7794           S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy))
7795         BaseToDerivedConversion = 3;
7796     }
7797 
7798   if (BaseToDerivedConversion) {
7799     S.Diag(Fn->getLocation(),
7800            diag::note_ovl_candidate_bad_base_to_derived_conv)
7801       << (unsigned) FnKind << FnDesc
7802       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7803       << (BaseToDerivedConversion - 1)
7804       << FromTy << ToTy << I+1;
7805     MaybeEmitInheritedConstructorNote(S, Fn);
7806     return;
7807   }
7808 
7809   if (isa<ObjCObjectPointerType>(CFromTy) &&
7810       isa<PointerType>(CToTy)) {
7811       Qualifiers FromQs = CFromTy.getQualifiers();
7812       Qualifiers ToQs = CToTy.getQualifiers();
7813       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
7814         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
7815         << (unsigned) FnKind << FnDesc
7816         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7817         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
7818         MaybeEmitInheritedConstructorNote(S, Fn);
7819         return;
7820       }
7821   }
7822 
7823   // Emit the generic diagnostic and, optionally, add the hints to it.
7824   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
7825   FDiag << (unsigned) FnKind << FnDesc
7826     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
7827     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
7828     << (unsigned) (Cand->Fix.Kind);
7829 
7830   // If we can fix the conversion, suggest the FixIts.
7831   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
7832        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
7833     FDiag << *HI;
7834   S.Diag(Fn->getLocation(), FDiag);
7835 
7836   MaybeEmitInheritedConstructorNote(S, Fn);
7837 }
7838 
7839 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
7840                            unsigned NumFormalArgs) {
7841   // TODO: treat calls to a missing default constructor as a special case
7842 
7843   FunctionDecl *Fn = Cand->Function;
7844   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
7845 
7846   unsigned MinParams = Fn->getMinRequiredArguments();
7847 
7848   // With invalid overloaded operators, it's possible that we think we
7849   // have an arity mismatch when it fact it looks like we have the
7850   // right number of arguments, because only overloaded operators have
7851   // the weird behavior of overloading member and non-member functions.
7852   // Just don't report anything.
7853   if (Fn->isInvalidDecl() &&
7854       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
7855     return;
7856 
7857   // at least / at most / exactly
7858   unsigned mode, modeCount;
7859   if (NumFormalArgs < MinParams) {
7860     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
7861            (Cand->FailureKind == ovl_fail_bad_deduction &&
7862             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
7863     if (MinParams != FnTy->getNumArgs() ||
7864         FnTy->isVariadic() || FnTy->isTemplateVariadic())
7865       mode = 0; // "at least"
7866     else
7867       mode = 2; // "exactly"
7868     modeCount = MinParams;
7869   } else {
7870     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
7871            (Cand->FailureKind == ovl_fail_bad_deduction &&
7872             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
7873     if (MinParams != FnTy->getNumArgs())
7874       mode = 1; // "at most"
7875     else
7876       mode = 2; // "exactly"
7877     modeCount = FnTy->getNumArgs();
7878   }
7879 
7880   std::string Description;
7881   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
7882 
7883   S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
7884     << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
7885     << modeCount << NumFormalArgs;
7886   MaybeEmitInheritedConstructorNote(S, Fn);
7887 }
7888 
7889 /// Diagnose a failed template-argument deduction.
7890 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
7891                           Expr **Args, unsigned NumArgs) {
7892   FunctionDecl *Fn = Cand->Function; // pattern
7893 
7894   TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
7895   NamedDecl *ParamD;
7896   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
7897   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
7898   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
7899   switch (Cand->DeductionFailure.Result) {
7900   case Sema::TDK_Success:
7901     llvm_unreachable("TDK_success while diagnosing bad deduction");
7902 
7903   case Sema::TDK_Incomplete: {
7904     assert(ParamD && "no parameter found for incomplete deduction result");
7905     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
7906       << ParamD->getDeclName();
7907     MaybeEmitInheritedConstructorNote(S, Fn);
7908     return;
7909   }
7910 
7911   case Sema::TDK_Underqualified: {
7912     assert(ParamD && "no parameter found for bad qualifiers deduction result");
7913     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
7914 
7915     QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType();
7916 
7917     // Param will have been canonicalized, but it should just be a
7918     // qualified version of ParamD, so move the qualifiers to that.
7919     QualifierCollector Qs;
7920     Qs.strip(Param);
7921     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
7922     assert(S.Context.hasSameType(Param, NonCanonParam));
7923 
7924     // Arg has also been canonicalized, but there's nothing we can do
7925     // about that.  It also doesn't matter as much, because it won't
7926     // have any template parameters in it (because deduction isn't
7927     // done on dependent types).
7928     QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType();
7929 
7930     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified)
7931       << ParamD->getDeclName() << Arg << NonCanonParam;
7932     MaybeEmitInheritedConstructorNote(S, Fn);
7933     return;
7934   }
7935 
7936   case Sema::TDK_Inconsistent: {
7937     assert(ParamD && "no parameter found for inconsistent deduction result");
7938     int which = 0;
7939     if (isa<TemplateTypeParmDecl>(ParamD))
7940       which = 0;
7941     else if (isa<NonTypeTemplateParmDecl>(ParamD))
7942       which = 1;
7943     else {
7944       which = 2;
7945     }
7946 
7947     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
7948       << which << ParamD->getDeclName()
7949       << *Cand->DeductionFailure.getFirstArg()
7950       << *Cand->DeductionFailure.getSecondArg();
7951     MaybeEmitInheritedConstructorNote(S, Fn);
7952     return;
7953   }
7954 
7955   case Sema::TDK_InvalidExplicitArguments:
7956     assert(ParamD && "no parameter found for invalid explicit arguments");
7957     if (ParamD->getDeclName())
7958       S.Diag(Fn->getLocation(),
7959              diag::note_ovl_candidate_explicit_arg_mismatch_named)
7960         << ParamD->getDeclName();
7961     else {
7962       int index = 0;
7963       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
7964         index = TTP->getIndex();
7965       else if (NonTypeTemplateParmDecl *NTTP
7966                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
7967         index = NTTP->getIndex();
7968       else
7969         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
7970       S.Diag(Fn->getLocation(),
7971              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
7972         << (index + 1);
7973     }
7974     MaybeEmitInheritedConstructorNote(S, Fn);
7975     return;
7976 
7977   case Sema::TDK_TooManyArguments:
7978   case Sema::TDK_TooFewArguments:
7979     DiagnoseArityMismatch(S, Cand, NumArgs);
7980     return;
7981 
7982   case Sema::TDK_InstantiationDepth:
7983     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
7984     MaybeEmitInheritedConstructorNote(S, Fn);
7985     return;
7986 
7987   case Sema::TDK_SubstitutionFailure: {
7988     std::string ArgString;
7989     if (TemplateArgumentList *Args
7990                             = Cand->DeductionFailure.getTemplateArgumentList())
7991       ArgString = S.getTemplateArgumentBindingsText(
7992                     Fn->getDescribedFunctionTemplate()->getTemplateParameters(),
7993                                                     *Args);
7994     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
7995       << ArgString;
7996     MaybeEmitInheritedConstructorNote(S, Fn);
7997     return;
7998   }
7999 
8000   // TODO: diagnose these individually, then kill off
8001   // note_ovl_candidate_bad_deduction, which is uselessly vague.
8002   case Sema::TDK_NonDeducedMismatch:
8003   case Sema::TDK_FailedOverloadResolution:
8004     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
8005     MaybeEmitInheritedConstructorNote(S, Fn);
8006     return;
8007   }
8008 }
8009 
8010 /// CUDA: diagnose an invalid call across targets.
8011 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8012   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8013   FunctionDecl *Callee = Cand->Function;
8014 
8015   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8016                            CalleeTarget = S.IdentifyCUDATarget(Callee);
8017 
8018   std::string FnDesc;
8019   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8020 
8021   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8022       << (unsigned) FnKind << CalleeTarget << CallerTarget;
8023 }
8024 
8025 /// Generates a 'note' diagnostic for an overload candidate.  We've
8026 /// already generated a primary error at the call site.
8027 ///
8028 /// It really does need to be a single diagnostic with its caret
8029 /// pointed at the candidate declaration.  Yes, this creates some
8030 /// major challenges of technical writing.  Yes, this makes pointing
8031 /// out problems with specific arguments quite awkward.  It's still
8032 /// better than generating twenty screens of text for every failed
8033 /// overload.
8034 ///
8035 /// It would be great to be able to express per-candidate problems
8036 /// more richly for those diagnostic clients that cared, but we'd
8037 /// still have to be just as careful with the default diagnostics.
8038 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8039                            Expr **Args, unsigned NumArgs) {
8040   FunctionDecl *Fn = Cand->Function;
8041 
8042   // Note deleted candidates, but only if they're viable.
8043   if (Cand->Viable && (Fn->isDeleted() ||
8044       S.isFunctionConsideredUnavailable(Fn))) {
8045     std::string FnDesc;
8046     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8047 
8048     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8049       << FnKind << FnDesc << Fn->isDeleted();
8050     MaybeEmitInheritedConstructorNote(S, Fn);
8051     return;
8052   }
8053 
8054   // We don't really have anything else to say about viable candidates.
8055   if (Cand->Viable) {
8056     S.NoteOverloadCandidate(Fn);
8057     return;
8058   }
8059 
8060   switch (Cand->FailureKind) {
8061   case ovl_fail_too_many_arguments:
8062   case ovl_fail_too_few_arguments:
8063     return DiagnoseArityMismatch(S, Cand, NumArgs);
8064 
8065   case ovl_fail_bad_deduction:
8066     return DiagnoseBadDeduction(S, Cand, Args, NumArgs);
8067 
8068   case ovl_fail_trivial_conversion:
8069   case ovl_fail_bad_final_conversion:
8070   case ovl_fail_final_conversion_not_exact:
8071     return S.NoteOverloadCandidate(Fn);
8072 
8073   case ovl_fail_bad_conversion: {
8074     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8075     for (unsigned N = Cand->NumConversions; I != N; ++I)
8076       if (Cand->Conversions[I].isBad())
8077         return DiagnoseBadConversion(S, Cand, I);
8078 
8079     // FIXME: this currently happens when we're called from SemaInit
8080     // when user-conversion overload fails.  Figure out how to handle
8081     // those conditions and diagnose them well.
8082     return S.NoteOverloadCandidate(Fn);
8083   }
8084 
8085   case ovl_fail_bad_target:
8086     return DiagnoseBadTarget(S, Cand);
8087   }
8088 }
8089 
8090 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8091   // Desugar the type of the surrogate down to a function type,
8092   // retaining as many typedefs as possible while still showing
8093   // the function type (and, therefore, its parameter types).
8094   QualType FnType = Cand->Surrogate->getConversionType();
8095   bool isLValueReference = false;
8096   bool isRValueReference = false;
8097   bool isPointer = false;
8098   if (const LValueReferenceType *FnTypeRef =
8099         FnType->getAs<LValueReferenceType>()) {
8100     FnType = FnTypeRef->getPointeeType();
8101     isLValueReference = true;
8102   } else if (const RValueReferenceType *FnTypeRef =
8103                FnType->getAs<RValueReferenceType>()) {
8104     FnType = FnTypeRef->getPointeeType();
8105     isRValueReference = true;
8106   }
8107   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8108     FnType = FnTypePtr->getPointeeType();
8109     isPointer = true;
8110   }
8111   // Desugar down to a function type.
8112   FnType = QualType(FnType->getAs<FunctionType>(), 0);
8113   // Reconstruct the pointer/reference as appropriate.
8114   if (isPointer) FnType = S.Context.getPointerType(FnType);
8115   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8116   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8117 
8118   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8119     << FnType;
8120   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8121 }
8122 
8123 void NoteBuiltinOperatorCandidate(Sema &S,
8124                                   const char *Opc,
8125                                   SourceLocation OpLoc,
8126                                   OverloadCandidate *Cand) {
8127   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8128   std::string TypeStr("operator");
8129   TypeStr += Opc;
8130   TypeStr += "(";
8131   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8132   if (Cand->NumConversions == 1) {
8133     TypeStr += ")";
8134     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8135   } else {
8136     TypeStr += ", ";
8137     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8138     TypeStr += ")";
8139     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8140   }
8141 }
8142 
8143 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8144                                   OverloadCandidate *Cand) {
8145   unsigned NoOperands = Cand->NumConversions;
8146   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8147     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8148     if (ICS.isBad()) break; // all meaningless after first invalid
8149     if (!ICS.isAmbiguous()) continue;
8150 
8151     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8152                               S.PDiag(diag::note_ambiguous_type_conversion));
8153   }
8154 }
8155 
8156 SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8157   if (Cand->Function)
8158     return Cand->Function->getLocation();
8159   if (Cand->IsSurrogate)
8160     return Cand->Surrogate->getLocation();
8161   return SourceLocation();
8162 }
8163 
8164 static unsigned
8165 RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) {
8166   switch ((Sema::TemplateDeductionResult)DFI.Result) {
8167   case Sema::TDK_Success:
8168     llvm_unreachable("TDK_success while diagnosing bad deduction");
8169 
8170   case Sema::TDK_Incomplete:
8171     return 1;
8172 
8173   case Sema::TDK_Underqualified:
8174   case Sema::TDK_Inconsistent:
8175     return 2;
8176 
8177   case Sema::TDK_SubstitutionFailure:
8178   case Sema::TDK_NonDeducedMismatch:
8179     return 3;
8180 
8181   case Sema::TDK_InstantiationDepth:
8182   case Sema::TDK_FailedOverloadResolution:
8183     return 4;
8184 
8185   case Sema::TDK_InvalidExplicitArguments:
8186     return 5;
8187 
8188   case Sema::TDK_TooManyArguments:
8189   case Sema::TDK_TooFewArguments:
8190     return 6;
8191   }
8192   llvm_unreachable("Unhandled deduction result");
8193 }
8194 
8195 struct CompareOverloadCandidatesForDisplay {
8196   Sema &S;
8197   CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8198 
8199   bool operator()(const OverloadCandidate *L,
8200                   const OverloadCandidate *R) {
8201     // Fast-path this check.
8202     if (L == R) return false;
8203 
8204     // Order first by viability.
8205     if (L->Viable) {
8206       if (!R->Viable) return true;
8207 
8208       // TODO: introduce a tri-valued comparison for overload
8209       // candidates.  Would be more worthwhile if we had a sort
8210       // that could exploit it.
8211       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8212       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8213     } else if (R->Viable)
8214       return false;
8215 
8216     assert(L->Viable == R->Viable);
8217 
8218     // Criteria by which we can sort non-viable candidates:
8219     if (!L->Viable) {
8220       // 1. Arity mismatches come after other candidates.
8221       if (L->FailureKind == ovl_fail_too_many_arguments ||
8222           L->FailureKind == ovl_fail_too_few_arguments)
8223         return false;
8224       if (R->FailureKind == ovl_fail_too_many_arguments ||
8225           R->FailureKind == ovl_fail_too_few_arguments)
8226         return true;
8227 
8228       // 2. Bad conversions come first and are ordered by the number
8229       // of bad conversions and quality of good conversions.
8230       if (L->FailureKind == ovl_fail_bad_conversion) {
8231         if (R->FailureKind != ovl_fail_bad_conversion)
8232           return true;
8233 
8234         // The conversion that can be fixed with a smaller number of changes,
8235         // comes first.
8236         unsigned numLFixes = L->Fix.NumConversionsFixed;
8237         unsigned numRFixes = R->Fix.NumConversionsFixed;
8238         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8239         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8240         if (numLFixes != numRFixes) {
8241           if (numLFixes < numRFixes)
8242             return true;
8243           else
8244             return false;
8245         }
8246 
8247         // If there's any ordering between the defined conversions...
8248         // FIXME: this might not be transitive.
8249         assert(L->NumConversions == R->NumConversions);
8250 
8251         int leftBetter = 0;
8252         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8253         for (unsigned E = L->NumConversions; I != E; ++I) {
8254           switch (CompareImplicitConversionSequences(S,
8255                                                      L->Conversions[I],
8256                                                      R->Conversions[I])) {
8257           case ImplicitConversionSequence::Better:
8258             leftBetter++;
8259             break;
8260 
8261           case ImplicitConversionSequence::Worse:
8262             leftBetter--;
8263             break;
8264 
8265           case ImplicitConversionSequence::Indistinguishable:
8266             break;
8267           }
8268         }
8269         if (leftBetter > 0) return true;
8270         if (leftBetter < 0) return false;
8271 
8272       } else if (R->FailureKind == ovl_fail_bad_conversion)
8273         return false;
8274 
8275       if (L->FailureKind == ovl_fail_bad_deduction) {
8276         if (R->FailureKind != ovl_fail_bad_deduction)
8277           return true;
8278 
8279         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8280           return RankDeductionFailure(L->DeductionFailure)
8281                < RankDeductionFailure(R->DeductionFailure);
8282       } else if (R->FailureKind == ovl_fail_bad_deduction)
8283         return false;
8284 
8285       // TODO: others?
8286     }
8287 
8288     // Sort everything else by location.
8289     SourceLocation LLoc = GetLocationForCandidate(L);
8290     SourceLocation RLoc = GetLocationForCandidate(R);
8291 
8292     // Put candidates without locations (e.g. builtins) at the end.
8293     if (LLoc.isInvalid()) return false;
8294     if (RLoc.isInvalid()) return true;
8295 
8296     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8297   }
8298 };
8299 
8300 /// CompleteNonViableCandidate - Normally, overload resolution only
8301 /// computes up to the first. Produces the FixIt set if possible.
8302 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8303                                 Expr **Args, unsigned NumArgs) {
8304   assert(!Cand->Viable);
8305 
8306   // Don't do anything on failures other than bad conversion.
8307   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8308 
8309   // We only want the FixIts if all the arguments can be corrected.
8310   bool Unfixable = false;
8311   // Use a implicit copy initialization to check conversion fixes.
8312   Cand->Fix.setConversionChecker(TryCopyInitialization);
8313 
8314   // Skip forward to the first bad conversion.
8315   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
8316   unsigned ConvCount = Cand->NumConversions;
8317   while (true) {
8318     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
8319     ConvIdx++;
8320     if (Cand->Conversions[ConvIdx - 1].isBad()) {
8321       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
8322       break;
8323     }
8324   }
8325 
8326   if (ConvIdx == ConvCount)
8327     return;
8328 
8329   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
8330          "remaining conversion is initialized?");
8331 
8332   // FIXME: this should probably be preserved from the overload
8333   // operation somehow.
8334   bool SuppressUserConversions = false;
8335 
8336   const FunctionProtoType* Proto;
8337   unsigned ArgIdx = ConvIdx;
8338 
8339   if (Cand->IsSurrogate) {
8340     QualType ConvType
8341       = Cand->Surrogate->getConversionType().getNonReferenceType();
8342     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
8343       ConvType = ConvPtrType->getPointeeType();
8344     Proto = ConvType->getAs<FunctionProtoType>();
8345     ArgIdx--;
8346   } else if (Cand->Function) {
8347     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
8348     if (isa<CXXMethodDecl>(Cand->Function) &&
8349         !isa<CXXConstructorDecl>(Cand->Function))
8350       ArgIdx--;
8351   } else {
8352     // Builtin binary operator with a bad first conversion.
8353     assert(ConvCount <= 3);
8354     for (; ConvIdx != ConvCount; ++ConvIdx)
8355       Cand->Conversions[ConvIdx]
8356         = TryCopyInitialization(S, Args[ConvIdx],
8357                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
8358                                 SuppressUserConversions,
8359                                 /*InOverloadResolution*/ true,
8360                                 /*AllowObjCWritebackConversion=*/
8361                                   S.getLangOptions().ObjCAutoRefCount);
8362     return;
8363   }
8364 
8365   // Fill in the rest of the conversions.
8366   unsigned NumArgsInProto = Proto->getNumArgs();
8367   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
8368     if (ArgIdx < NumArgsInProto) {
8369       Cand->Conversions[ConvIdx]
8370         = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
8371                                 SuppressUserConversions,
8372                                 /*InOverloadResolution=*/true,
8373                                 /*AllowObjCWritebackConversion=*/
8374                                   S.getLangOptions().ObjCAutoRefCount);
8375       // Store the FixIt in the candidate if it exists.
8376       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
8377         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
8378     }
8379     else
8380       Cand->Conversions[ConvIdx].setEllipsis();
8381   }
8382 }
8383 
8384 } // end anonymous namespace
8385 
8386 /// PrintOverloadCandidates - When overload resolution fails, prints
8387 /// diagnostic messages containing the candidates in the candidate
8388 /// set.
8389 void OverloadCandidateSet::NoteCandidates(Sema &S,
8390                                           OverloadCandidateDisplayKind OCD,
8391                                           Expr **Args, unsigned NumArgs,
8392                                           const char *Opc,
8393                                           SourceLocation OpLoc) {
8394   // Sort the candidates by viability and position.  Sorting directly would
8395   // be prohibitive, so we make a set of pointers and sort those.
8396   SmallVector<OverloadCandidate*, 32> Cands;
8397   if (OCD == OCD_AllCandidates) Cands.reserve(size());
8398   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
8399     if (Cand->Viable)
8400       Cands.push_back(Cand);
8401     else if (OCD == OCD_AllCandidates) {
8402       CompleteNonViableCandidate(S, Cand, Args, NumArgs);
8403       if (Cand->Function || Cand->IsSurrogate)
8404         Cands.push_back(Cand);
8405       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
8406       // want to list every possible builtin candidate.
8407     }
8408   }
8409 
8410   std::sort(Cands.begin(), Cands.end(),
8411             CompareOverloadCandidatesForDisplay(S));
8412 
8413   bool ReportedAmbiguousConversions = false;
8414 
8415   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
8416   const DiagnosticsEngine::OverloadsShown ShowOverloads =
8417       S.Diags.getShowOverloads();
8418   unsigned CandsShown = 0;
8419   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
8420     OverloadCandidate *Cand = *I;
8421 
8422     // Set an arbitrary limit on the number of candidate functions we'll spam
8423     // the user with.  FIXME: This limit should depend on details of the
8424     // candidate list.
8425     if (CandsShown >= 4 && ShowOverloads == DiagnosticsEngine::Ovl_Best) {
8426       break;
8427     }
8428     ++CandsShown;
8429 
8430     if (Cand->Function)
8431       NoteFunctionCandidate(S, Cand, Args, NumArgs);
8432     else if (Cand->IsSurrogate)
8433       NoteSurrogateCandidate(S, Cand);
8434     else {
8435       assert(Cand->Viable &&
8436              "Non-viable built-in candidates are not added to Cands.");
8437       // Generally we only see ambiguities including viable builtin
8438       // operators if overload resolution got screwed up by an
8439       // ambiguous user-defined conversion.
8440       //
8441       // FIXME: It's quite possible for different conversions to see
8442       // different ambiguities, though.
8443       if (!ReportedAmbiguousConversions) {
8444         NoteAmbiguousUserConversions(S, OpLoc, Cand);
8445         ReportedAmbiguousConversions = true;
8446       }
8447 
8448       // If this is a viable builtin, print it.
8449       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
8450     }
8451   }
8452 
8453   if (I != E)
8454     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
8455 }
8456 
8457 // [PossiblyAFunctionType]  -->   [Return]
8458 // NonFunctionType --> NonFunctionType
8459 // R (A) --> R(A)
8460 // R (*)(A) --> R (A)
8461 // R (&)(A) --> R (A)
8462 // R (S::*)(A) --> R (A)
8463 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
8464   QualType Ret = PossiblyAFunctionType;
8465   if (const PointerType *ToTypePtr =
8466     PossiblyAFunctionType->getAs<PointerType>())
8467     Ret = ToTypePtr->getPointeeType();
8468   else if (const ReferenceType *ToTypeRef =
8469     PossiblyAFunctionType->getAs<ReferenceType>())
8470     Ret = ToTypeRef->getPointeeType();
8471   else if (const MemberPointerType *MemTypePtr =
8472     PossiblyAFunctionType->getAs<MemberPointerType>())
8473     Ret = MemTypePtr->getPointeeType();
8474   Ret =
8475     Context.getCanonicalType(Ret).getUnqualifiedType();
8476   return Ret;
8477 }
8478 
8479 // A helper class to help with address of function resolution
8480 // - allows us to avoid passing around all those ugly parameters
8481 class AddressOfFunctionResolver
8482 {
8483   Sema& S;
8484   Expr* SourceExpr;
8485   const QualType& TargetType;
8486   QualType TargetFunctionType; // Extracted function type from target type
8487 
8488   bool Complain;
8489   //DeclAccessPair& ResultFunctionAccessPair;
8490   ASTContext& Context;
8491 
8492   bool TargetTypeIsNonStaticMemberFunction;
8493   bool FoundNonTemplateFunction;
8494 
8495   OverloadExpr::FindResult OvlExprInfo;
8496   OverloadExpr *OvlExpr;
8497   TemplateArgumentListInfo OvlExplicitTemplateArgs;
8498   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
8499 
8500 public:
8501   AddressOfFunctionResolver(Sema &S, Expr* SourceExpr,
8502                             const QualType& TargetType, bool Complain)
8503     : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
8504       Complain(Complain), Context(S.getASTContext()),
8505       TargetTypeIsNonStaticMemberFunction(
8506                                     !!TargetType->getAs<MemberPointerType>()),
8507       FoundNonTemplateFunction(false),
8508       OvlExprInfo(OverloadExpr::find(SourceExpr)),
8509       OvlExpr(OvlExprInfo.Expression)
8510   {
8511     ExtractUnqualifiedFunctionTypeFromTargetType();
8512 
8513     if (!TargetFunctionType->isFunctionType()) {
8514       if (OvlExpr->hasExplicitTemplateArgs()) {
8515         DeclAccessPair dap;
8516         if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization(
8517                                             OvlExpr, false, &dap) ) {
8518 
8519           if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
8520             if (!Method->isStatic()) {
8521               // If the target type is a non-function type and the function
8522               // found is a non-static member function, pretend as if that was
8523               // the target, it's the only possible type to end up with.
8524               TargetTypeIsNonStaticMemberFunction = true;
8525 
8526               // And skip adding the function if its not in the proper form.
8527               // We'll diagnose this due to an empty set of functions.
8528               if (!OvlExprInfo.HasFormOfMemberPointer)
8529                 return;
8530             }
8531           }
8532 
8533           Matches.push_back(std::make_pair(dap,Fn));
8534         }
8535       }
8536       return;
8537     }
8538 
8539     if (OvlExpr->hasExplicitTemplateArgs())
8540       OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
8541 
8542     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
8543       // C++ [over.over]p4:
8544       //   If more than one function is selected, [...]
8545       if (Matches.size() > 1) {
8546         if (FoundNonTemplateFunction)
8547           EliminateAllTemplateMatches();
8548         else
8549           EliminateAllExceptMostSpecializedTemplate();
8550       }
8551     }
8552   }
8553 
8554 private:
8555   bool isTargetTypeAFunction() const {
8556     return TargetFunctionType->isFunctionType();
8557   }
8558 
8559   // [ToType]     [Return]
8560 
8561   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
8562   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
8563   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
8564   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
8565     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
8566   }
8567 
8568   // return true if any matching specializations were found
8569   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
8570                                    const DeclAccessPair& CurAccessFunPair) {
8571     if (CXXMethodDecl *Method
8572               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
8573       // Skip non-static function templates when converting to pointer, and
8574       // static when converting to member pointer.
8575       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
8576         return false;
8577     }
8578     else if (TargetTypeIsNonStaticMemberFunction)
8579       return false;
8580 
8581     // C++ [over.over]p2:
8582     //   If the name is a function template, template argument deduction is
8583     //   done (14.8.2.2), and if the argument deduction succeeds, the
8584     //   resulting template argument list is used to generate a single
8585     //   function template specialization, which is added to the set of
8586     //   overloaded functions considered.
8587     FunctionDecl *Specialization = 0;
8588     TemplateDeductionInfo Info(Context, OvlExpr->getNameLoc());
8589     if (Sema::TemplateDeductionResult Result
8590           = S.DeduceTemplateArguments(FunctionTemplate,
8591                                       &OvlExplicitTemplateArgs,
8592                                       TargetFunctionType, Specialization,
8593                                       Info)) {
8594       // FIXME: make a note of the failed deduction for diagnostics.
8595       (void)Result;
8596       return false;
8597     }
8598 
8599     // Template argument deduction ensures that we have an exact match.
8600     // This function template specicalization works.
8601     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
8602     assert(TargetFunctionType
8603                       == Context.getCanonicalType(Specialization->getType()));
8604     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
8605     return true;
8606   }
8607 
8608   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
8609                                       const DeclAccessPair& CurAccessFunPair) {
8610     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
8611       // Skip non-static functions when converting to pointer, and static
8612       // when converting to member pointer.
8613       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
8614         return false;
8615     }
8616     else if (TargetTypeIsNonStaticMemberFunction)
8617       return false;
8618 
8619     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
8620       if (S.getLangOptions().CUDA)
8621         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
8622           if (S.CheckCUDATarget(Caller, FunDecl))
8623             return false;
8624 
8625       QualType ResultTy;
8626       if (Context.hasSameUnqualifiedType(TargetFunctionType,
8627                                          FunDecl->getType()) ||
8628           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
8629                                  ResultTy)) {
8630         Matches.push_back(std::make_pair(CurAccessFunPair,
8631           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
8632         FoundNonTemplateFunction = true;
8633         return true;
8634       }
8635     }
8636 
8637     return false;
8638   }
8639 
8640   bool FindAllFunctionsThatMatchTargetTypeExactly() {
8641     bool Ret = false;
8642 
8643     // If the overload expression doesn't have the form of a pointer to
8644     // member, don't try to convert it to a pointer-to-member type.
8645     if (IsInvalidFormOfPointerToMemberFunction())
8646       return false;
8647 
8648     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8649                                E = OvlExpr->decls_end();
8650          I != E; ++I) {
8651       // Look through any using declarations to find the underlying function.
8652       NamedDecl *Fn = (*I)->getUnderlyingDecl();
8653 
8654       // C++ [over.over]p3:
8655       //   Non-member functions and static member functions match
8656       //   targets of type "pointer-to-function" or "reference-to-function."
8657       //   Nonstatic member functions match targets of
8658       //   type "pointer-to-member-function."
8659       // Note that according to DR 247, the containing class does not matter.
8660       if (FunctionTemplateDecl *FunctionTemplate
8661                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
8662         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
8663           Ret = true;
8664       }
8665       // If we have explicit template arguments supplied, skip non-templates.
8666       else if (!OvlExpr->hasExplicitTemplateArgs() &&
8667                AddMatchingNonTemplateFunction(Fn, I.getPair()))
8668         Ret = true;
8669     }
8670     assert(Ret || Matches.empty());
8671     return Ret;
8672   }
8673 
8674   void EliminateAllExceptMostSpecializedTemplate() {
8675     //   [...] and any given function template specialization F1 is
8676     //   eliminated if the set contains a second function template
8677     //   specialization whose function template is more specialized
8678     //   than the function template of F1 according to the partial
8679     //   ordering rules of 14.5.5.2.
8680 
8681     // The algorithm specified above is quadratic. We instead use a
8682     // two-pass algorithm (similar to the one used to identify the
8683     // best viable function in an overload set) that identifies the
8684     // best function template (if it exists).
8685 
8686     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
8687     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
8688       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
8689 
8690     UnresolvedSetIterator Result =
8691       S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
8692                            TPOC_Other, 0, SourceExpr->getLocStart(),
8693                            S.PDiag(),
8694                            S.PDiag(diag::err_addr_ovl_ambiguous)
8695                              << Matches[0].second->getDeclName(),
8696                            S.PDiag(diag::note_ovl_candidate)
8697                              << (unsigned) oc_function_template,
8698                            Complain, TargetFunctionType);
8699 
8700     if (Result != MatchesCopy.end()) {
8701       // Make it the first and only element
8702       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
8703       Matches[0].second = cast<FunctionDecl>(*Result);
8704       Matches.resize(1);
8705     }
8706   }
8707 
8708   void EliminateAllTemplateMatches() {
8709     //   [...] any function template specializations in the set are
8710     //   eliminated if the set also contains a non-template function, [...]
8711     for (unsigned I = 0, N = Matches.size(); I != N; ) {
8712       if (Matches[I].second->getPrimaryTemplate() == 0)
8713         ++I;
8714       else {
8715         Matches[I] = Matches[--N];
8716         Matches.set_size(N);
8717       }
8718     }
8719   }
8720 
8721 public:
8722   void ComplainNoMatchesFound() const {
8723     assert(Matches.empty());
8724     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
8725         << OvlExpr->getName() << TargetFunctionType
8726         << OvlExpr->getSourceRange();
8727     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
8728   }
8729 
8730   bool IsInvalidFormOfPointerToMemberFunction() const {
8731     return TargetTypeIsNonStaticMemberFunction &&
8732       !OvlExprInfo.HasFormOfMemberPointer;
8733   }
8734 
8735   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
8736       // TODO: Should we condition this on whether any functions might
8737       // have matched, or is it more appropriate to do that in callers?
8738       // TODO: a fixit wouldn't hurt.
8739       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
8740         << TargetType << OvlExpr->getSourceRange();
8741   }
8742 
8743   void ComplainOfInvalidConversion() const {
8744     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
8745       << OvlExpr->getName() << TargetType;
8746   }
8747 
8748   void ComplainMultipleMatchesFound() const {
8749     assert(Matches.size() > 1);
8750     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
8751       << OvlExpr->getName()
8752       << OvlExpr->getSourceRange();
8753     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
8754   }
8755 
8756   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
8757 
8758   int getNumMatches() const { return Matches.size(); }
8759 
8760   FunctionDecl* getMatchingFunctionDecl() const {
8761     if (Matches.size() != 1) return 0;
8762     return Matches[0].second;
8763   }
8764 
8765   const DeclAccessPair* getMatchingFunctionAccessPair() const {
8766     if (Matches.size() != 1) return 0;
8767     return &Matches[0].first;
8768   }
8769 };
8770 
8771 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
8772 /// an overloaded function (C++ [over.over]), where @p From is an
8773 /// expression with overloaded function type and @p ToType is the type
8774 /// we're trying to resolve to. For example:
8775 ///
8776 /// @code
8777 /// int f(double);
8778 /// int f(int);
8779 ///
8780 /// int (*pfd)(double) = f; // selects f(double)
8781 /// @endcode
8782 ///
8783 /// This routine returns the resulting FunctionDecl if it could be
8784 /// resolved, and NULL otherwise. When @p Complain is true, this
8785 /// routine will emit diagnostics if there is an error.
8786 FunctionDecl *
8787 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
8788                                          QualType TargetType,
8789                                          bool Complain,
8790                                          DeclAccessPair &FoundResult,
8791                                          bool *pHadMultipleCandidates) {
8792   assert(AddressOfExpr->getType() == Context.OverloadTy);
8793 
8794   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
8795                                      Complain);
8796   int NumMatches = Resolver.getNumMatches();
8797   FunctionDecl* Fn = 0;
8798   if (NumMatches == 0 && Complain) {
8799     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
8800       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
8801     else
8802       Resolver.ComplainNoMatchesFound();
8803   }
8804   else if (NumMatches > 1 && Complain)
8805     Resolver.ComplainMultipleMatchesFound();
8806   else if (NumMatches == 1) {
8807     Fn = Resolver.getMatchingFunctionDecl();
8808     assert(Fn);
8809     FoundResult = *Resolver.getMatchingFunctionAccessPair();
8810     MarkDeclarationReferenced(AddressOfExpr->getLocStart(), Fn);
8811     if (Complain)
8812       CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
8813   }
8814 
8815   if (pHadMultipleCandidates)
8816     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
8817   return Fn;
8818 }
8819 
8820 /// \brief Given an expression that refers to an overloaded function, try to
8821 /// resolve that overloaded function expression down to a single function.
8822 ///
8823 /// This routine can only resolve template-ids that refer to a single function
8824 /// template, where that template-id refers to a single template whose template
8825 /// arguments are either provided by the template-id or have defaults,
8826 /// as described in C++0x [temp.arg.explicit]p3.
8827 FunctionDecl *
8828 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
8829                                                   bool Complain,
8830                                                   DeclAccessPair *FoundResult) {
8831   // C++ [over.over]p1:
8832   //   [...] [Note: any redundant set of parentheses surrounding the
8833   //   overloaded function name is ignored (5.1). ]
8834   // C++ [over.over]p1:
8835   //   [...] The overloaded function name can be preceded by the &
8836   //   operator.
8837 
8838   // If we didn't actually find any template-ids, we're done.
8839   if (!ovl->hasExplicitTemplateArgs())
8840     return 0;
8841 
8842   TemplateArgumentListInfo ExplicitTemplateArgs;
8843   ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
8844 
8845   // Look through all of the overloaded functions, searching for one
8846   // whose type matches exactly.
8847   FunctionDecl *Matched = 0;
8848   for (UnresolvedSetIterator I = ovl->decls_begin(),
8849          E = ovl->decls_end(); I != E; ++I) {
8850     // C++0x [temp.arg.explicit]p3:
8851     //   [...] In contexts where deduction is done and fails, or in contexts
8852     //   where deduction is not done, if a template argument list is
8853     //   specified and it, along with any default template arguments,
8854     //   identifies a single function template specialization, then the
8855     //   template-id is an lvalue for the function template specialization.
8856     FunctionTemplateDecl *FunctionTemplate
8857       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
8858 
8859     // C++ [over.over]p2:
8860     //   If the name is a function template, template argument deduction is
8861     //   done (14.8.2.2), and if the argument deduction succeeds, the
8862     //   resulting template argument list is used to generate a single
8863     //   function template specialization, which is added to the set of
8864     //   overloaded functions considered.
8865     FunctionDecl *Specialization = 0;
8866     TemplateDeductionInfo Info(Context, ovl->getNameLoc());
8867     if (TemplateDeductionResult Result
8868           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
8869                                     Specialization, Info)) {
8870       // FIXME: make a note of the failed deduction for diagnostics.
8871       (void)Result;
8872       continue;
8873     }
8874 
8875     assert(Specialization && "no specialization and no error?");
8876 
8877     // Multiple matches; we can't resolve to a single declaration.
8878     if (Matched) {
8879       if (Complain) {
8880         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
8881           << ovl->getName();
8882         NoteAllOverloadCandidates(ovl);
8883       }
8884       return 0;
8885     }
8886 
8887     Matched = Specialization;
8888     if (FoundResult) *FoundResult = I.getPair();
8889   }
8890 
8891   return Matched;
8892 }
8893 
8894 
8895 
8896 
8897 // Resolve and fix an overloaded expression that can be resolved
8898 // because it identifies a single function template specialization.
8899 //
8900 // Last three arguments should only be supplied if Complain = true
8901 //
8902 // Return true if it was logically possible to so resolve the
8903 // expression, regardless of whether or not it succeeded.  Always
8904 // returns true if 'complain' is set.
8905 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
8906                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
8907                    bool complain, const SourceRange& OpRangeForComplaining,
8908                                            QualType DestTypeForComplaining,
8909                                             unsigned DiagIDForComplaining) {
8910   assert(SrcExpr.get()->getType() == Context.OverloadTy);
8911 
8912   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
8913 
8914   DeclAccessPair found;
8915   ExprResult SingleFunctionExpression;
8916   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
8917                            ovl.Expression, /*complain*/ false, &found)) {
8918     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getSourceRange().getBegin())) {
8919       SrcExpr = ExprError();
8920       return true;
8921     }
8922 
8923     // It is only correct to resolve to an instance method if we're
8924     // resolving a form that's permitted to be a pointer to member.
8925     // Otherwise we'll end up making a bound member expression, which
8926     // is illegal in all the contexts we resolve like this.
8927     if (!ovl.HasFormOfMemberPointer &&
8928         isa<CXXMethodDecl>(fn) &&
8929         cast<CXXMethodDecl>(fn)->isInstance()) {
8930       if (!complain) return false;
8931 
8932       Diag(ovl.Expression->getExprLoc(),
8933            diag::err_bound_member_function)
8934         << 0 << ovl.Expression->getSourceRange();
8935 
8936       // TODO: I believe we only end up here if there's a mix of
8937       // static and non-static candidates (otherwise the expression
8938       // would have 'bound member' type, not 'overload' type).
8939       // Ideally we would note which candidate was chosen and why
8940       // the static candidates were rejected.
8941       SrcExpr = ExprError();
8942       return true;
8943     }
8944 
8945     // Fix the expresion to refer to 'fn'.
8946     SingleFunctionExpression =
8947       Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
8948 
8949     // If desired, do function-to-pointer decay.
8950     if (doFunctionPointerConverion) {
8951       SingleFunctionExpression =
8952         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
8953       if (SingleFunctionExpression.isInvalid()) {
8954         SrcExpr = ExprError();
8955         return true;
8956       }
8957     }
8958   }
8959 
8960   if (!SingleFunctionExpression.isUsable()) {
8961     if (complain) {
8962       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
8963         << ovl.Expression->getName()
8964         << DestTypeForComplaining
8965         << OpRangeForComplaining
8966         << ovl.Expression->getQualifierLoc().getSourceRange();
8967       NoteAllOverloadCandidates(SrcExpr.get());
8968 
8969       SrcExpr = ExprError();
8970       return true;
8971     }
8972 
8973     return false;
8974   }
8975 
8976   SrcExpr = SingleFunctionExpression;
8977   return true;
8978 }
8979 
8980 /// \brief Add a single candidate to the overload set.
8981 static void AddOverloadedCallCandidate(Sema &S,
8982                                        DeclAccessPair FoundDecl,
8983                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
8984                                        Expr **Args, unsigned NumArgs,
8985                                        OverloadCandidateSet &CandidateSet,
8986                                        bool PartialOverloading,
8987                                        bool KnownValid) {
8988   NamedDecl *Callee = FoundDecl.getDecl();
8989   if (isa<UsingShadowDecl>(Callee))
8990     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
8991 
8992   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
8993     if (ExplicitTemplateArgs) {
8994       assert(!KnownValid && "Explicit template arguments?");
8995       return;
8996     }
8997     S.AddOverloadCandidate(Func, FoundDecl, Args, NumArgs, CandidateSet,
8998                            false, PartialOverloading);
8999     return;
9000   }
9001 
9002   if (FunctionTemplateDecl *FuncTemplate
9003       = dyn_cast<FunctionTemplateDecl>(Callee)) {
9004     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9005                                    ExplicitTemplateArgs,
9006                                    Args, NumArgs, CandidateSet);
9007     return;
9008   }
9009 
9010   assert(!KnownValid && "unhandled case in overloaded call candidate");
9011 }
9012 
9013 /// \brief Add the overload candidates named by callee and/or found by argument
9014 /// dependent lookup to the given overload set.
9015 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9016                                        Expr **Args, unsigned NumArgs,
9017                                        OverloadCandidateSet &CandidateSet,
9018                                        bool PartialOverloading) {
9019 
9020 #ifndef NDEBUG
9021   // Verify that ArgumentDependentLookup is consistent with the rules
9022   // in C++0x [basic.lookup.argdep]p3:
9023   //
9024   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9025   //   and let Y be the lookup set produced by argument dependent
9026   //   lookup (defined as follows). If X contains
9027   //
9028   //     -- a declaration of a class member, or
9029   //
9030   //     -- a block-scope function declaration that is not a
9031   //        using-declaration, or
9032   //
9033   //     -- a declaration that is neither a function or a function
9034   //        template
9035   //
9036   //   then Y is empty.
9037 
9038   if (ULE->requiresADL()) {
9039     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9040            E = ULE->decls_end(); I != E; ++I) {
9041       assert(!(*I)->getDeclContext()->isRecord());
9042       assert(isa<UsingShadowDecl>(*I) ||
9043              !(*I)->getDeclContext()->isFunctionOrMethod());
9044       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9045     }
9046   }
9047 #endif
9048 
9049   // It would be nice to avoid this copy.
9050   TemplateArgumentListInfo TABuffer;
9051   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9052   if (ULE->hasExplicitTemplateArgs()) {
9053     ULE->copyTemplateArgumentsInto(TABuffer);
9054     ExplicitTemplateArgs = &TABuffer;
9055   }
9056 
9057   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9058          E = ULE->decls_end(); I != E; ++I)
9059     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs,
9060                                Args, NumArgs, CandidateSet,
9061                                PartialOverloading, /*KnownValid*/ true);
9062 
9063   if (ULE->requiresADL())
9064     AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9065                                          Args, NumArgs,
9066                                          ExplicitTemplateArgs,
9067                                          CandidateSet,
9068                                          PartialOverloading,
9069                                          ULE->isStdAssociatedNamespace());
9070 }
9071 
9072 /// Attempt to recover from an ill-formed use of a non-dependent name in a
9073 /// template, where the non-dependent name was declared after the template
9074 /// was defined. This is common in code written for a compilers which do not
9075 /// correctly implement two-stage name lookup.
9076 ///
9077 /// Returns true if a viable candidate was found and a diagnostic was issued.
9078 static bool
9079 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9080                        const CXXScopeSpec &SS, LookupResult &R,
9081                        TemplateArgumentListInfo *ExplicitTemplateArgs,
9082                        Expr **Args, unsigned NumArgs) {
9083   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9084     return false;
9085 
9086   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9087     SemaRef.LookupQualifiedName(R, DC);
9088 
9089     if (!R.empty()) {
9090       R.suppressDiagnostics();
9091 
9092       if (isa<CXXRecordDecl>(DC)) {
9093         // Don't diagnose names we find in classes; we get much better
9094         // diagnostics for these from DiagnoseEmptyLookup.
9095         R.clear();
9096         return false;
9097       }
9098 
9099       OverloadCandidateSet Candidates(FnLoc);
9100       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9101         AddOverloadedCallCandidate(SemaRef, I.getPair(),
9102                                    ExplicitTemplateArgs, Args, NumArgs,
9103                                    Candidates, false, /*KnownValid*/ false);
9104 
9105       OverloadCandidateSet::iterator Best;
9106       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9107         // No viable functions. Don't bother the user with notes for functions
9108         // which don't work and shouldn't be found anyway.
9109         R.clear();
9110         return false;
9111       }
9112 
9113       // Find the namespaces where ADL would have looked, and suggest
9114       // declaring the function there instead.
9115       Sema::AssociatedNamespaceSet AssociatedNamespaces;
9116       Sema::AssociatedClassSet AssociatedClasses;
9117       SemaRef.FindAssociatedClassesAndNamespaces(Args, NumArgs,
9118                                                  AssociatedNamespaces,
9119                                                  AssociatedClasses);
9120       // Never suggest declaring a function within namespace 'std'.
9121       Sema::AssociatedNamespaceSet SuggestedNamespaces;
9122       if (DeclContext *Std = SemaRef.getStdNamespace()) {
9123         for (Sema::AssociatedNamespaceSet::iterator
9124                it = AssociatedNamespaces.begin(),
9125                end = AssociatedNamespaces.end(); it != end; ++it) {
9126           if (!Std->Encloses(*it))
9127             SuggestedNamespaces.insert(*it);
9128         }
9129       } else {
9130         // Lacking the 'std::' namespace, use all of the associated namespaces.
9131         SuggestedNamespaces = AssociatedNamespaces;
9132       }
9133 
9134       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9135         << R.getLookupName();
9136       if (SuggestedNamespaces.empty()) {
9137         SemaRef.Diag(Best->Function->getLocation(),
9138                      diag::note_not_found_by_two_phase_lookup)
9139           << R.getLookupName() << 0;
9140       } else if (SuggestedNamespaces.size() == 1) {
9141         SemaRef.Diag(Best->Function->getLocation(),
9142                      diag::note_not_found_by_two_phase_lookup)
9143           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9144       } else {
9145         // FIXME: It would be useful to list the associated namespaces here,
9146         // but the diagnostics infrastructure doesn't provide a way to produce
9147         // a localized representation of a list of items.
9148         SemaRef.Diag(Best->Function->getLocation(),
9149                      diag::note_not_found_by_two_phase_lookup)
9150           << R.getLookupName() << 2;
9151       }
9152 
9153       // Try to recover by calling this function.
9154       return true;
9155     }
9156 
9157     R.clear();
9158   }
9159 
9160   return false;
9161 }
9162 
9163 /// Attempt to recover from ill-formed use of a non-dependent operator in a
9164 /// template, where the non-dependent operator was declared after the template
9165 /// was defined.
9166 ///
9167 /// Returns true if a viable candidate was found and a diagnostic was issued.
9168 static bool
9169 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
9170                                SourceLocation OpLoc,
9171                                Expr **Args, unsigned NumArgs) {
9172   DeclarationName OpName =
9173     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
9174   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
9175   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
9176                                 /*ExplicitTemplateArgs=*/0, Args, NumArgs);
9177 }
9178 
9179 namespace {
9180 // Callback to limit the allowed keywords and to only accept typo corrections
9181 // that are keywords or whose decls refer to functions (or template functions)
9182 // that accept the given number of arguments.
9183 class RecoveryCallCCC : public CorrectionCandidateCallback {
9184  public:
9185   RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs)
9186       : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) {
9187     WantTypeSpecifiers = SemaRef.getLangOptions().CPlusPlus;
9188     WantRemainingKeywords = false;
9189   }
9190 
9191   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9192     if (!candidate.getCorrectionDecl())
9193       return candidate.isKeyword();
9194 
9195     for (TypoCorrection::const_decl_iterator DI = candidate.begin(),
9196            DIEnd = candidate.end(); DI != DIEnd; ++DI) {
9197       FunctionDecl *FD = 0;
9198       NamedDecl *ND = (*DI)->getUnderlyingDecl();
9199       if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9200         FD = FTD->getTemplatedDecl();
9201       if (!HasExplicitTemplateArgs && !FD) {
9202         if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) {
9203           // If the Decl is neither a function nor a template function,
9204           // determine if it is a pointer or reference to a function. If so,
9205           // check against the number of arguments expected for the pointee.
9206           QualType ValType = cast<ValueDecl>(ND)->getType();
9207           if (ValType->isAnyPointerType() || ValType->isReferenceType())
9208             ValType = ValType->getPointeeType();
9209           if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
9210             if (FPT->getNumArgs() == NumArgs)
9211               return true;
9212         }
9213       }
9214       if (FD && FD->getNumParams() >= NumArgs &&
9215           FD->getMinRequiredArguments() <= NumArgs)
9216         return true;
9217     }
9218     return false;
9219   }
9220 
9221  private:
9222   unsigned NumArgs;
9223   bool HasExplicitTemplateArgs;
9224 };
9225 
9226 // Callback that effectively disabled typo correction
9227 class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
9228  public:
9229   NoTypoCorrectionCCC() {
9230     WantTypeSpecifiers = false;
9231     WantExpressionKeywords = false;
9232     WantCXXNamedCasts = false;
9233     WantRemainingKeywords = false;
9234   }
9235 
9236   virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9237     return false;
9238   }
9239 };
9240 }
9241 
9242 /// Attempts to recover from a call where no functions were found.
9243 ///
9244 /// Returns true if new candidates were found.
9245 static ExprResult
9246 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9247                       UnresolvedLookupExpr *ULE,
9248                       SourceLocation LParenLoc,
9249                       Expr **Args, unsigned NumArgs,
9250                       SourceLocation RParenLoc,
9251                       bool EmptyLookup, bool AllowTypoCorrection) {
9252 
9253   CXXScopeSpec SS;
9254   SS.Adopt(ULE->getQualifierLoc());
9255 
9256   TemplateArgumentListInfo TABuffer;
9257   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9258   if (ULE->hasExplicitTemplateArgs()) {
9259     ULE->copyTemplateArgumentsInto(TABuffer);
9260     ExplicitTemplateArgs = &TABuffer;
9261   }
9262 
9263   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
9264                  Sema::LookupOrdinaryName);
9265   RecoveryCallCCC Validator(SemaRef, NumArgs, ExplicitTemplateArgs != 0);
9266   NoTypoCorrectionCCC RejectAll;
9267   CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
9268       (CorrectionCandidateCallback*)&Validator :
9269       (CorrectionCandidateCallback*)&RejectAll;
9270   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
9271                               ExplicitTemplateArgs, Args, NumArgs) &&
9272       (!EmptyLookup ||
9273        SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
9274                                    ExplicitTemplateArgs, Args, NumArgs)))
9275     return ExprError();
9276 
9277   assert(!R.empty() && "lookup results empty despite recovery");
9278 
9279   // Build an implicit member call if appropriate.  Just drop the
9280   // casts and such from the call, we don't really care.
9281   ExprResult NewFn = ExprError();
9282   if ((*R.begin())->isCXXClassMember())
9283     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, R,
9284                                                     ExplicitTemplateArgs);
9285   else if (ExplicitTemplateArgs)
9286     NewFn = SemaRef.BuildTemplateIdExpr(SS, R, false, *ExplicitTemplateArgs);
9287   else
9288     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
9289 
9290   if (NewFn.isInvalid())
9291     return ExprError();
9292 
9293   // This shouldn't cause an infinite loop because we're giving it
9294   // an expression with viable lookup results, which should never
9295   // end up here.
9296   return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
9297                                MultiExprArg(Args, NumArgs), RParenLoc);
9298 }
9299 
9300 /// ResolveOverloadedCallFn - Given the call expression that calls Fn
9301 /// (which eventually refers to the declaration Func) and the call
9302 /// arguments Args/NumArgs, attempt to resolve the function call down
9303 /// to a specific function. If overload resolution succeeds, returns
9304 /// the function declaration produced by overload
9305 /// resolution. Otherwise, emits diagnostics, deletes all of the
9306 /// arguments and Fn, and returns NULL.
9307 ExprResult
9308 Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
9309                               SourceLocation LParenLoc,
9310                               Expr **Args, unsigned NumArgs,
9311                               SourceLocation RParenLoc,
9312                               Expr *ExecConfig,
9313                               bool AllowTypoCorrection) {
9314 #ifndef NDEBUG
9315   if (ULE->requiresADL()) {
9316     // To do ADL, we must have found an unqualified name.
9317     assert(!ULE->getQualifier() && "qualified name with ADL");
9318 
9319     // We don't perform ADL for implicit declarations of builtins.
9320     // Verify that this was correctly set up.
9321     FunctionDecl *F;
9322     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
9323         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
9324         F->getBuiltinID() && F->isImplicit())
9325       llvm_unreachable("performing ADL for builtin");
9326 
9327     // We don't perform ADL in C.
9328     assert(getLangOptions().CPlusPlus && "ADL enabled in C");
9329   } else
9330     assert(!ULE->isStdAssociatedNamespace() &&
9331            "std is associated namespace but not doing ADL");
9332 #endif
9333 
9334   UnbridgedCastsSet UnbridgedCasts;
9335   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
9336     return ExprError();
9337 
9338   OverloadCandidateSet CandidateSet(Fn->getExprLoc());
9339 
9340   // Add the functions denoted by the callee to the set of candidate
9341   // functions, including those from argument-dependent lookup.
9342   AddOverloadedCallCandidates(ULE, Args, NumArgs, CandidateSet);
9343 
9344   // If we found nothing, try to recover.
9345   // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
9346   // out if it fails.
9347   if (CandidateSet.empty()) {
9348     // In Microsoft mode, if we are inside a template class member function then
9349     // create a type dependent CallExpr. The goal is to postpone name lookup
9350     // to instantiation time to be able to search into type dependent base
9351     // classes.
9352     if (getLangOptions().MicrosoftMode && CurContext->isDependentContext() &&
9353         (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
9354       CallExpr *CE = new (Context) CallExpr(Context, Fn, Args, NumArgs,
9355                                           Context.DependentTy, VK_RValue,
9356                                           RParenLoc);
9357       CE->setTypeDependent(true);
9358       return Owned(CE);
9359     }
9360     return BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs,
9361                                  RParenLoc, /*EmptyLookup=*/true,
9362                                  AllowTypoCorrection);
9363   }
9364 
9365   UnbridgedCasts.restore();
9366 
9367   OverloadCandidateSet::iterator Best;
9368   switch (CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best)) {
9369   case OR_Success: {
9370     FunctionDecl *FDecl = Best->Function;
9371     MarkDeclarationReferenced(Fn->getExprLoc(), FDecl);
9372     CheckUnresolvedLookupAccess(ULE, Best->FoundDecl);
9373     DiagnoseUseOfDecl(FDecl, ULE->getNameLoc());
9374     Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl);
9375     return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc,
9376                                  ExecConfig);
9377   }
9378 
9379   case OR_No_Viable_Function: {
9380     // Try to recover by looking for viable functions which the user might
9381     // have meant to call.
9382     ExprResult Recovery = BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc,
9383                                                 Args, NumArgs, RParenLoc,
9384                                                 /*EmptyLookup=*/false,
9385                                                 AllowTypoCorrection);
9386     if (!Recovery.isInvalid())
9387       return Recovery;
9388 
9389     Diag(Fn->getSourceRange().getBegin(),
9390          diag::err_ovl_no_viable_function_in_call)
9391       << ULE->getName() << Fn->getSourceRange();
9392     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
9393     break;
9394   }
9395 
9396   case OR_Ambiguous:
9397     Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_ambiguous_call)
9398       << ULE->getName() << Fn->getSourceRange();
9399     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs);
9400     break;
9401 
9402   case OR_Deleted:
9403     {
9404       Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_deleted_call)
9405         << Best->Function->isDeleted()
9406         << ULE->getName()
9407         << getDeletedOrUnavailableSuffix(Best->Function)
9408         << Fn->getSourceRange();
9409       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
9410 
9411       // We emitted an error for the unvailable/deleted function call but keep
9412       // the call in the AST.
9413       FunctionDecl *FDecl = Best->Function;
9414       Fn = FixOverloadedFunctionReference(Fn, Best->FoundDecl, FDecl);
9415       return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9416                                    RParenLoc, ExecConfig);
9417     }
9418   }
9419 
9420   // Overload resolution failed.
9421   return ExprError();
9422 }
9423 
9424 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
9425   return Functions.size() > 1 ||
9426     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
9427 }
9428 
9429 /// \brief Create a unary operation that may resolve to an overloaded
9430 /// operator.
9431 ///
9432 /// \param OpLoc The location of the operator itself (e.g., '*').
9433 ///
9434 /// \param OpcIn The UnaryOperator::Opcode that describes this
9435 /// operator.
9436 ///
9437 /// \param Functions The set of non-member functions that will be
9438 /// considered by overload resolution. The caller needs to build this
9439 /// set based on the context using, e.g.,
9440 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
9441 /// set should not contain any member functions; those will be added
9442 /// by CreateOverloadedUnaryOp().
9443 ///
9444 /// \param input The input argument.
9445 ExprResult
9446 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
9447                               const UnresolvedSetImpl &Fns,
9448                               Expr *Input) {
9449   UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
9450 
9451   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
9452   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
9453   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
9454   // TODO: provide better source location info.
9455   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
9456 
9457   if (checkPlaceholderForOverload(*this, Input))
9458     return ExprError();
9459 
9460   Expr *Args[2] = { Input, 0 };
9461   unsigned NumArgs = 1;
9462 
9463   // For post-increment and post-decrement, add the implicit '0' as
9464   // the second argument, so that we know this is a post-increment or
9465   // post-decrement.
9466   if (Opc == UO_PostInc || Opc == UO_PostDec) {
9467     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
9468     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
9469                                      SourceLocation());
9470     NumArgs = 2;
9471   }
9472 
9473   if (Input->isTypeDependent()) {
9474     if (Fns.empty())
9475       return Owned(new (Context) UnaryOperator(Input,
9476                                                Opc,
9477                                                Context.DependentTy,
9478                                                VK_RValue, OK_Ordinary,
9479                                                OpLoc));
9480 
9481     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
9482     UnresolvedLookupExpr *Fn
9483       = UnresolvedLookupExpr::Create(Context, NamingClass,
9484                                      NestedNameSpecifierLoc(), OpNameInfo,
9485                                      /*ADL*/ true, IsOverloaded(Fns),
9486                                      Fns.begin(), Fns.end());
9487     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
9488                                                   &Args[0], NumArgs,
9489                                                    Context.DependentTy,
9490                                                    VK_RValue,
9491                                                    OpLoc));
9492   }
9493 
9494   // Build an empty overload set.
9495   OverloadCandidateSet CandidateSet(OpLoc);
9496 
9497   // Add the candidates from the given function set.
9498   AddFunctionCandidates(Fns, &Args[0], NumArgs, CandidateSet, false);
9499 
9500   // Add operator candidates that are member functions.
9501   AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
9502 
9503   // Add candidates from ADL.
9504   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
9505                                        Args, NumArgs,
9506                                        /*ExplicitTemplateArgs*/ 0,
9507                                        CandidateSet);
9508 
9509   // Add builtin operator candidates.
9510   AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
9511 
9512   bool HadMultipleCandidates = (CandidateSet.size() > 1);
9513 
9514   // Perform overload resolution.
9515   OverloadCandidateSet::iterator Best;
9516   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
9517   case OR_Success: {
9518     // We found a built-in operator or an overloaded operator.
9519     FunctionDecl *FnDecl = Best->Function;
9520 
9521     if (FnDecl) {
9522       // We matched an overloaded operator. Build a call to that
9523       // operator.
9524 
9525       MarkDeclarationReferenced(OpLoc, FnDecl);
9526 
9527       // Convert the arguments.
9528       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
9529         CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
9530 
9531         ExprResult InputRes =
9532           PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
9533                                               Best->FoundDecl, Method);
9534         if (InputRes.isInvalid())
9535           return ExprError();
9536         Input = InputRes.take();
9537       } else {
9538         // Convert the arguments.
9539         ExprResult InputInit
9540           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
9541                                                       Context,
9542                                                       FnDecl->getParamDecl(0)),
9543                                       SourceLocation(),
9544                                       Input);
9545         if (InputInit.isInvalid())
9546           return ExprError();
9547         Input = InputInit.take();
9548       }
9549 
9550       DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
9551 
9552       // Determine the result type.
9553       QualType ResultTy = FnDecl->getResultType();
9554       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
9555       ResultTy = ResultTy.getNonLValueExprType(Context);
9556 
9557       // Build the actual expression node.
9558       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
9559                                                 HadMultipleCandidates);
9560       if (FnExpr.isInvalid())
9561         return ExprError();
9562 
9563       Args[0] = Input;
9564       CallExpr *TheCall =
9565         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
9566                                           Args, NumArgs, ResultTy, VK, OpLoc);
9567 
9568       if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
9569                               FnDecl))
9570         return ExprError();
9571 
9572       return MaybeBindToTemporary(TheCall);
9573     } else {
9574       // We matched a built-in operator. Convert the arguments, then
9575       // break out so that we will build the appropriate built-in
9576       // operator node.
9577       ExprResult InputRes =
9578         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
9579                                   Best->Conversions[0], AA_Passing);
9580       if (InputRes.isInvalid())
9581         return ExprError();
9582       Input = InputRes.take();
9583       break;
9584     }
9585   }
9586 
9587   case OR_No_Viable_Function:
9588     // This is an erroneous use of an operator which can be overloaded by
9589     // a non-member function. Check for non-member operators which were
9590     // defined too late to be candidates.
9591     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args, NumArgs))
9592       // FIXME: Recover by calling the found function.
9593       return ExprError();
9594 
9595     // No viable function; fall through to handling this as a
9596     // built-in operator, which will produce an error message for us.
9597     break;
9598 
9599   case OR_Ambiguous:
9600     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
9601         << UnaryOperator::getOpcodeStr(Opc)
9602         << Input->getType()
9603         << Input->getSourceRange();
9604     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs,
9605                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
9606     return ExprError();
9607 
9608   case OR_Deleted:
9609     Diag(OpLoc, diag::err_ovl_deleted_oper)
9610       << Best->Function->isDeleted()
9611       << UnaryOperator::getOpcodeStr(Opc)
9612       << getDeletedOrUnavailableSuffix(Best->Function)
9613       << Input->getSourceRange();
9614     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs,
9615                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
9616     return ExprError();
9617   }
9618 
9619   // Either we found no viable overloaded operator or we matched a
9620   // built-in operator. In either case, fall through to trying to
9621   // build a built-in operation.
9622   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
9623 }
9624 
9625 /// \brief Create a binary operation that may resolve to an overloaded
9626 /// operator.
9627 ///
9628 /// \param OpLoc The location of the operator itself (e.g., '+').
9629 ///
9630 /// \param OpcIn The BinaryOperator::Opcode that describes this
9631 /// operator.
9632 ///
9633 /// \param Functions The set of non-member functions that will be
9634 /// considered by overload resolution. The caller needs to build this
9635 /// set based on the context using, e.g.,
9636 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
9637 /// set should not contain any member functions; those will be added
9638 /// by CreateOverloadedBinOp().
9639 ///
9640 /// \param LHS Left-hand argument.
9641 /// \param RHS Right-hand argument.
9642 ExprResult
9643 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
9644                             unsigned OpcIn,
9645                             const UnresolvedSetImpl &Fns,
9646                             Expr *LHS, Expr *RHS) {
9647   Expr *Args[2] = { LHS, RHS };
9648   LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
9649 
9650   BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
9651   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
9652   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
9653 
9654   // If either side is type-dependent, create an appropriate dependent
9655   // expression.
9656   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
9657     if (Fns.empty()) {
9658       // If there are no functions to store, just build a dependent
9659       // BinaryOperator or CompoundAssignment.
9660       if (Opc <= BO_Assign || Opc > BO_OrAssign)
9661         return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
9662                                                   Context.DependentTy,
9663                                                   VK_RValue, OK_Ordinary,
9664                                                   OpLoc));
9665 
9666       return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
9667                                                         Context.DependentTy,
9668                                                         VK_LValue,
9669                                                         OK_Ordinary,
9670                                                         Context.DependentTy,
9671                                                         Context.DependentTy,
9672                                                         OpLoc));
9673     }
9674 
9675     // FIXME: save results of ADL from here?
9676     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
9677     // TODO: provide better source location info in DNLoc component.
9678     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
9679     UnresolvedLookupExpr *Fn
9680       = UnresolvedLookupExpr::Create(Context, NamingClass,
9681                                      NestedNameSpecifierLoc(), OpNameInfo,
9682                                      /*ADL*/ true, IsOverloaded(Fns),
9683                                      Fns.begin(), Fns.end());
9684     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
9685                                                    Args, 2,
9686                                                    Context.DependentTy,
9687                                                    VK_RValue,
9688                                                    OpLoc));
9689   }
9690 
9691   // Always do placeholder-like conversions on the RHS.
9692   if (checkPlaceholderForOverload(*this, Args[1]))
9693     return ExprError();
9694 
9695   // Do placeholder-like conversion on the LHS; note that we should
9696   // not get here with a PseudoObject LHS.
9697   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
9698   if (checkPlaceholderForOverload(*this, Args[0]))
9699     return ExprError();
9700 
9701   // If this is the assignment operator, we only perform overload resolution
9702   // if the left-hand side is a class or enumeration type. This is actually
9703   // a hack. The standard requires that we do overload resolution between the
9704   // various built-in candidates, but as DR507 points out, this can lead to
9705   // problems. So we do it this way, which pretty much follows what GCC does.
9706   // Note that we go the traditional code path for compound assignment forms.
9707   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
9708     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
9709 
9710   // If this is the .* operator, which is not overloadable, just
9711   // create a built-in binary operator.
9712   if (Opc == BO_PtrMemD)
9713     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
9714 
9715   // Build an empty overload set.
9716   OverloadCandidateSet CandidateSet(OpLoc);
9717 
9718   // Add the candidates from the given function set.
9719   AddFunctionCandidates(Fns, Args, 2, CandidateSet, false);
9720 
9721   // Add operator candidates that are member functions.
9722   AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
9723 
9724   // Add candidates from ADL.
9725   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
9726                                        Args, 2,
9727                                        /*ExplicitTemplateArgs*/ 0,
9728                                        CandidateSet);
9729 
9730   // Add builtin operator candidates.
9731   AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
9732 
9733   bool HadMultipleCandidates = (CandidateSet.size() > 1);
9734 
9735   // Perform overload resolution.
9736   OverloadCandidateSet::iterator Best;
9737   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
9738     case OR_Success: {
9739       // We found a built-in operator or an overloaded operator.
9740       FunctionDecl *FnDecl = Best->Function;
9741 
9742       if (FnDecl) {
9743         // We matched an overloaded operator. Build a call to that
9744         // operator.
9745 
9746         MarkDeclarationReferenced(OpLoc, FnDecl);
9747 
9748         // Convert the arguments.
9749         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
9750           // Best->Access is only meaningful for class members.
9751           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
9752 
9753           ExprResult Arg1 =
9754             PerformCopyInitialization(
9755               InitializedEntity::InitializeParameter(Context,
9756                                                      FnDecl->getParamDecl(0)),
9757               SourceLocation(), Owned(Args[1]));
9758           if (Arg1.isInvalid())
9759             return ExprError();
9760 
9761           ExprResult Arg0 =
9762             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
9763                                                 Best->FoundDecl, Method);
9764           if (Arg0.isInvalid())
9765             return ExprError();
9766           Args[0] = Arg0.takeAs<Expr>();
9767           Args[1] = RHS = Arg1.takeAs<Expr>();
9768         } else {
9769           // Convert the arguments.
9770           ExprResult Arg0 = PerformCopyInitialization(
9771             InitializedEntity::InitializeParameter(Context,
9772                                                    FnDecl->getParamDecl(0)),
9773             SourceLocation(), Owned(Args[0]));
9774           if (Arg0.isInvalid())
9775             return ExprError();
9776 
9777           ExprResult Arg1 =
9778             PerformCopyInitialization(
9779               InitializedEntity::InitializeParameter(Context,
9780                                                      FnDecl->getParamDecl(1)),
9781               SourceLocation(), Owned(Args[1]));
9782           if (Arg1.isInvalid())
9783             return ExprError();
9784           Args[0] = LHS = Arg0.takeAs<Expr>();
9785           Args[1] = RHS = Arg1.takeAs<Expr>();
9786         }
9787 
9788         DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
9789 
9790         // Determine the result type.
9791         QualType ResultTy = FnDecl->getResultType();
9792         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
9793         ResultTy = ResultTy.getNonLValueExprType(Context);
9794 
9795         // Build the actual expression node.
9796         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
9797                                                   HadMultipleCandidates, OpLoc);
9798         if (FnExpr.isInvalid())
9799           return ExprError();
9800 
9801         CXXOperatorCallExpr *TheCall =
9802           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
9803                                             Args, 2, ResultTy, VK, OpLoc);
9804 
9805         if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
9806                                 FnDecl))
9807           return ExprError();
9808 
9809         return MaybeBindToTemporary(TheCall);
9810       } else {
9811         // We matched a built-in operator. Convert the arguments, then
9812         // break out so that we will build the appropriate built-in
9813         // operator node.
9814         ExprResult ArgsRes0 =
9815           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
9816                                     Best->Conversions[0], AA_Passing);
9817         if (ArgsRes0.isInvalid())
9818           return ExprError();
9819         Args[0] = ArgsRes0.take();
9820 
9821         ExprResult ArgsRes1 =
9822           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
9823                                     Best->Conversions[1], AA_Passing);
9824         if (ArgsRes1.isInvalid())
9825           return ExprError();
9826         Args[1] = ArgsRes1.take();
9827         break;
9828       }
9829     }
9830 
9831     case OR_No_Viable_Function: {
9832       // C++ [over.match.oper]p9:
9833       //   If the operator is the operator , [...] and there are no
9834       //   viable functions, then the operator is assumed to be the
9835       //   built-in operator and interpreted according to clause 5.
9836       if (Opc == BO_Comma)
9837         break;
9838 
9839       // For class as left operand for assignment or compound assigment
9840       // operator do not fall through to handling in built-in, but report that
9841       // no overloaded assignment operator found
9842       ExprResult Result = ExprError();
9843       if (Args[0]->getType()->isRecordType() &&
9844           Opc >= BO_Assign && Opc <= BO_OrAssign) {
9845         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
9846              << BinaryOperator::getOpcodeStr(Opc)
9847              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
9848       } else {
9849         // This is an erroneous use of an operator which can be overloaded by
9850         // a non-member function. Check for non-member operators which were
9851         // defined too late to be candidates.
9852         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args, 2))
9853           // FIXME: Recover by calling the found function.
9854           return ExprError();
9855 
9856         // No viable function; try to create a built-in operation, which will
9857         // produce an error. Then, show the non-viable candidates.
9858         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
9859       }
9860       assert(Result.isInvalid() &&
9861              "C++ binary operator overloading is missing candidates!");
9862       if (Result.isInvalid())
9863         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2,
9864                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
9865       return move(Result);
9866     }
9867 
9868     case OR_Ambiguous:
9869       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
9870           << BinaryOperator::getOpcodeStr(Opc)
9871           << Args[0]->getType() << Args[1]->getType()
9872           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
9873       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 2,
9874                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
9875       return ExprError();
9876 
9877     case OR_Deleted:
9878       Diag(OpLoc, diag::err_ovl_deleted_oper)
9879         << Best->Function->isDeleted()
9880         << BinaryOperator::getOpcodeStr(Opc)
9881         << getDeletedOrUnavailableSuffix(Best->Function)
9882         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
9883       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2,
9884                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
9885       return ExprError();
9886   }
9887 
9888   // We matched a built-in operator; build it.
9889   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
9890 }
9891 
9892 ExprResult
9893 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
9894                                          SourceLocation RLoc,
9895                                          Expr *Base, Expr *Idx) {
9896   Expr *Args[2] = { Base, Idx };
9897   DeclarationName OpName =
9898       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
9899 
9900   // If either side is type-dependent, create an appropriate dependent
9901   // expression.
9902   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
9903 
9904     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
9905     // CHECKME: no 'operator' keyword?
9906     DeclarationNameInfo OpNameInfo(OpName, LLoc);
9907     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
9908     UnresolvedLookupExpr *Fn
9909       = UnresolvedLookupExpr::Create(Context, NamingClass,
9910                                      NestedNameSpecifierLoc(), OpNameInfo,
9911                                      /*ADL*/ true, /*Overloaded*/ false,
9912                                      UnresolvedSetIterator(),
9913                                      UnresolvedSetIterator());
9914     // Can't add any actual overloads yet
9915 
9916     return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
9917                                                    Args, 2,
9918                                                    Context.DependentTy,
9919                                                    VK_RValue,
9920                                                    RLoc));
9921   }
9922 
9923   // Handle placeholders on both operands.
9924   if (checkPlaceholderForOverload(*this, Args[0]))
9925     return ExprError();
9926   if (checkPlaceholderForOverload(*this, Args[1]))
9927     return ExprError();
9928 
9929   // Build an empty overload set.
9930   OverloadCandidateSet CandidateSet(LLoc);
9931 
9932   // Subscript can only be overloaded as a member function.
9933 
9934   // Add operator candidates that are member functions.
9935   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
9936 
9937   // Add builtin operator candidates.
9938   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
9939 
9940   bool HadMultipleCandidates = (CandidateSet.size() > 1);
9941 
9942   // Perform overload resolution.
9943   OverloadCandidateSet::iterator Best;
9944   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
9945     case OR_Success: {
9946       // We found a built-in operator or an overloaded operator.
9947       FunctionDecl *FnDecl = Best->Function;
9948 
9949       if (FnDecl) {
9950         // We matched an overloaded operator. Build a call to that
9951         // operator.
9952 
9953         MarkDeclarationReferenced(LLoc, FnDecl);
9954 
9955         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
9956         DiagnoseUseOfDecl(Best->FoundDecl, LLoc);
9957 
9958         // Convert the arguments.
9959         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
9960         ExprResult Arg0 =
9961           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
9962                                               Best->FoundDecl, Method);
9963         if (Arg0.isInvalid())
9964           return ExprError();
9965         Args[0] = Arg0.take();
9966 
9967         // Convert the arguments.
9968         ExprResult InputInit
9969           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
9970                                                       Context,
9971                                                       FnDecl->getParamDecl(0)),
9972                                       SourceLocation(),
9973                                       Owned(Args[1]));
9974         if (InputInit.isInvalid())
9975           return ExprError();
9976 
9977         Args[1] = InputInit.takeAs<Expr>();
9978 
9979         // Determine the result type
9980         QualType ResultTy = FnDecl->getResultType();
9981         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
9982         ResultTy = ResultTy.getNonLValueExprType(Context);
9983 
9984         // Build the actual expression node.
9985         DeclarationNameLoc LocInfo;
9986         LocInfo.CXXOperatorName.BeginOpNameLoc = LLoc.getRawEncoding();
9987         LocInfo.CXXOperatorName.EndOpNameLoc = RLoc.getRawEncoding();
9988         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
9989                                                   HadMultipleCandidates,
9990                                                   LLoc, LocInfo);
9991         if (FnExpr.isInvalid())
9992           return ExprError();
9993 
9994         CXXOperatorCallExpr *TheCall =
9995           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
9996                                             FnExpr.take(), Args, 2,
9997                                             ResultTy, VK, RLoc);
9998 
9999         if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10000                                 FnDecl))
10001           return ExprError();
10002 
10003         return MaybeBindToTemporary(TheCall);
10004       } else {
10005         // We matched a built-in operator. Convert the arguments, then
10006         // break out so that we will build the appropriate built-in
10007         // operator node.
10008         ExprResult ArgsRes0 =
10009           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10010                                     Best->Conversions[0], AA_Passing);
10011         if (ArgsRes0.isInvalid())
10012           return ExprError();
10013         Args[0] = ArgsRes0.take();
10014 
10015         ExprResult ArgsRes1 =
10016           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10017                                     Best->Conversions[1], AA_Passing);
10018         if (ArgsRes1.isInvalid())
10019           return ExprError();
10020         Args[1] = ArgsRes1.take();
10021 
10022         break;
10023       }
10024     }
10025 
10026     case OR_No_Viable_Function: {
10027       if (CandidateSet.empty())
10028         Diag(LLoc, diag::err_ovl_no_oper)
10029           << Args[0]->getType() << /*subscript*/ 0
10030           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10031       else
10032         Diag(LLoc, diag::err_ovl_no_viable_subscript)
10033           << Args[0]->getType()
10034           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10035       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2,
10036                                   "[]", LLoc);
10037       return ExprError();
10038     }
10039 
10040     case OR_Ambiguous:
10041       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10042           << "[]"
10043           << Args[0]->getType() << Args[1]->getType()
10044           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10045       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 2,
10046                                   "[]", LLoc);
10047       return ExprError();
10048 
10049     case OR_Deleted:
10050       Diag(LLoc, diag::err_ovl_deleted_oper)
10051         << Best->Function->isDeleted() << "[]"
10052         << getDeletedOrUnavailableSuffix(Best->Function)
10053         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10054       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, 2,
10055                                   "[]", LLoc);
10056       return ExprError();
10057     }
10058 
10059   // We matched a built-in operator; build it.
10060   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10061 }
10062 
10063 /// BuildCallToMemberFunction - Build a call to a member
10064 /// function. MemExpr is the expression that refers to the member
10065 /// function (and includes the object parameter), Args/NumArgs are the
10066 /// arguments to the function call (not including the object
10067 /// parameter). The caller needs to validate that the member
10068 /// expression refers to a non-static member function or an overloaded
10069 /// member function.
10070 ExprResult
10071 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10072                                 SourceLocation LParenLoc, Expr **Args,
10073                                 unsigned NumArgs, SourceLocation RParenLoc) {
10074   assert(MemExprE->getType() == Context.BoundMemberTy ||
10075          MemExprE->getType() == Context.OverloadTy);
10076 
10077   // Dig out the member expression. This holds both the object
10078   // argument and the member function we're referring to.
10079   Expr *NakedMemExpr = MemExprE->IgnoreParens();
10080 
10081   // Determine whether this is a call to a pointer-to-member function.
10082   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10083     assert(op->getType() == Context.BoundMemberTy);
10084     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10085 
10086     QualType fnType =
10087       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10088 
10089     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10090     QualType resultType = proto->getCallResultType(Context);
10091     ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10092 
10093     // Check that the object type isn't more qualified than the
10094     // member function we're calling.
10095     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10096 
10097     QualType objectType = op->getLHS()->getType();
10098     if (op->getOpcode() == BO_PtrMemI)
10099       objectType = objectType->castAs<PointerType>()->getPointeeType();
10100     Qualifiers objectQuals = objectType.getQualifiers();
10101 
10102     Qualifiers difference = objectQuals - funcQuals;
10103     difference.removeObjCGCAttr();
10104     difference.removeAddressSpace();
10105     if (difference) {
10106       std::string qualsString = difference.getAsString();
10107       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10108         << fnType.getUnqualifiedType()
10109         << qualsString
10110         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10111     }
10112 
10113     CXXMemberCallExpr *call
10114       = new (Context) CXXMemberCallExpr(Context, MemExprE, Args, NumArgs,
10115                                         resultType, valueKind, RParenLoc);
10116 
10117     if (CheckCallReturnType(proto->getResultType(),
10118                             op->getRHS()->getSourceRange().getBegin(),
10119                             call, 0))
10120       return ExprError();
10121 
10122     if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc))
10123       return ExprError();
10124 
10125     return MaybeBindToTemporary(call);
10126   }
10127 
10128   UnbridgedCastsSet UnbridgedCasts;
10129   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10130     return ExprError();
10131 
10132   MemberExpr *MemExpr;
10133   CXXMethodDecl *Method = 0;
10134   DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
10135   NestedNameSpecifier *Qualifier = 0;
10136   if (isa<MemberExpr>(NakedMemExpr)) {
10137     MemExpr = cast<MemberExpr>(NakedMemExpr);
10138     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
10139     FoundDecl = MemExpr->getFoundDecl();
10140     Qualifier = MemExpr->getQualifier();
10141     UnbridgedCasts.restore();
10142   } else {
10143     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
10144     Qualifier = UnresExpr->getQualifier();
10145 
10146     QualType ObjectType = UnresExpr->getBaseType();
10147     Expr::Classification ObjectClassification
10148       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
10149                             : UnresExpr->getBase()->Classify(Context);
10150 
10151     // Add overload candidates
10152     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
10153 
10154     // FIXME: avoid copy.
10155     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10156     if (UnresExpr->hasExplicitTemplateArgs()) {
10157       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10158       TemplateArgs = &TemplateArgsBuffer;
10159     }
10160 
10161     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
10162            E = UnresExpr->decls_end(); I != E; ++I) {
10163 
10164       NamedDecl *Func = *I;
10165       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
10166       if (isa<UsingShadowDecl>(Func))
10167         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
10168 
10169 
10170       // Microsoft supports direct constructor calls.
10171       if (getLangOptions().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
10172         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(), Args, NumArgs,
10173                              CandidateSet);
10174       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
10175         // If explicit template arguments were provided, we can't call a
10176         // non-template member function.
10177         if (TemplateArgs)
10178           continue;
10179 
10180         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
10181                            ObjectClassification,
10182                            Args, NumArgs, CandidateSet,
10183                            /*SuppressUserConversions=*/false);
10184       } else {
10185         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
10186                                    I.getPair(), ActingDC, TemplateArgs,
10187                                    ObjectType,  ObjectClassification,
10188                                    Args, NumArgs, CandidateSet,
10189                                    /*SuppressUsedConversions=*/false);
10190       }
10191     }
10192 
10193     DeclarationName DeclName = UnresExpr->getMemberName();
10194 
10195     UnbridgedCasts.restore();
10196 
10197     OverloadCandidateSet::iterator Best;
10198     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
10199                                             Best)) {
10200     case OR_Success:
10201       Method = cast<CXXMethodDecl>(Best->Function);
10202       MarkDeclarationReferenced(UnresExpr->getMemberLoc(), Method);
10203       FoundDecl = Best->FoundDecl;
10204       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
10205       DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc());
10206       break;
10207 
10208     case OR_No_Viable_Function:
10209       Diag(UnresExpr->getMemberLoc(),
10210            diag::err_ovl_no_viable_member_function_in_call)
10211         << DeclName << MemExprE->getSourceRange();
10212       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
10213       // FIXME: Leaking incoming expressions!
10214       return ExprError();
10215 
10216     case OR_Ambiguous:
10217       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
10218         << DeclName << MemExprE->getSourceRange();
10219       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
10220       // FIXME: Leaking incoming expressions!
10221       return ExprError();
10222 
10223     case OR_Deleted:
10224       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
10225         << Best->Function->isDeleted()
10226         << DeclName
10227         << getDeletedOrUnavailableSuffix(Best->Function)
10228         << MemExprE->getSourceRange();
10229       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
10230       // FIXME: Leaking incoming expressions!
10231       return ExprError();
10232     }
10233 
10234     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
10235 
10236     // If overload resolution picked a static member, build a
10237     // non-member call based on that function.
10238     if (Method->isStatic()) {
10239       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
10240                                    Args, NumArgs, RParenLoc);
10241     }
10242 
10243     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
10244   }
10245 
10246   QualType ResultType = Method->getResultType();
10247   ExprValueKind VK = Expr::getValueKindForType(ResultType);
10248   ResultType = ResultType.getNonLValueExprType(Context);
10249 
10250   assert(Method && "Member call to something that isn't a method?");
10251   CXXMemberCallExpr *TheCall =
10252     new (Context) CXXMemberCallExpr(Context, MemExprE, Args, NumArgs,
10253                                     ResultType, VK, RParenLoc);
10254 
10255   // Check for a valid return type.
10256   if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
10257                           TheCall, Method))
10258     return ExprError();
10259 
10260   // Convert the object argument (for a non-static member function call).
10261   // We only need to do this if there was actually an overload; otherwise
10262   // it was done at lookup.
10263   if (!Method->isStatic()) {
10264     ExprResult ObjectArg =
10265       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
10266                                           FoundDecl, Method);
10267     if (ObjectArg.isInvalid())
10268       return ExprError();
10269     MemExpr->setBase(ObjectArg.take());
10270   }
10271 
10272   // Convert the rest of the arguments
10273   const FunctionProtoType *Proto =
10274     Method->getType()->getAs<FunctionProtoType>();
10275   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs,
10276                               RParenLoc))
10277     return ExprError();
10278 
10279   if (CheckFunctionCall(Method, TheCall))
10280     return ExprError();
10281 
10282   if ((isa<CXXConstructorDecl>(CurContext) ||
10283        isa<CXXDestructorDecl>(CurContext)) &&
10284       TheCall->getMethodDecl()->isPure()) {
10285     const CXXMethodDecl *MD = TheCall->getMethodDecl();
10286 
10287     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
10288       Diag(MemExpr->getLocStart(),
10289            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
10290         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
10291         << MD->getParent()->getDeclName();
10292 
10293       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
10294     }
10295   }
10296   return MaybeBindToTemporary(TheCall);
10297 }
10298 
10299 /// BuildCallToObjectOfClassType - Build a call to an object of class
10300 /// type (C++ [over.call.object]), which can end up invoking an
10301 /// overloaded function call operator (@c operator()) or performing a
10302 /// user-defined conversion on the object argument.
10303 ExprResult
10304 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
10305                                    SourceLocation LParenLoc,
10306                                    Expr **Args, unsigned NumArgs,
10307                                    SourceLocation RParenLoc) {
10308   if (checkPlaceholderForOverload(*this, Obj))
10309     return ExprError();
10310   ExprResult Object = Owned(Obj);
10311 
10312   UnbridgedCastsSet UnbridgedCasts;
10313   if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10314     return ExprError();
10315 
10316   assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
10317   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
10318 
10319   // C++ [over.call.object]p1:
10320   //  If the primary-expression E in the function call syntax
10321   //  evaluates to a class object of type "cv T", then the set of
10322   //  candidate functions includes at least the function call
10323   //  operators of T. The function call operators of T are obtained by
10324   //  ordinary lookup of the name operator() in the context of
10325   //  (E).operator().
10326   OverloadCandidateSet CandidateSet(LParenLoc);
10327   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
10328 
10329   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
10330                           PDiag(diag::err_incomplete_object_call)
10331                           << Object.get()->getSourceRange()))
10332     return true;
10333 
10334   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
10335   LookupQualifiedName(R, Record->getDecl());
10336   R.suppressDiagnostics();
10337 
10338   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
10339        Oper != OperEnd; ++Oper) {
10340     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
10341                        Object.get()->Classify(Context), Args, NumArgs, CandidateSet,
10342                        /*SuppressUserConversions=*/ false);
10343   }
10344 
10345   // C++ [over.call.object]p2:
10346   //   In addition, for each (non-explicit in C++0x) conversion function
10347   //   declared in T of the form
10348   //
10349   //        operator conversion-type-id () cv-qualifier;
10350   //
10351   //   where cv-qualifier is the same cv-qualification as, or a
10352   //   greater cv-qualification than, cv, and where conversion-type-id
10353   //   denotes the type "pointer to function of (P1,...,Pn) returning
10354   //   R", or the type "reference to pointer to function of
10355   //   (P1,...,Pn) returning R", or the type "reference to function
10356   //   of (P1,...,Pn) returning R", a surrogate call function [...]
10357   //   is also considered as a candidate function. Similarly,
10358   //   surrogate call functions are added to the set of candidate
10359   //   functions for each conversion function declared in an
10360   //   accessible base class provided the function is not hidden
10361   //   within T by another intervening declaration.
10362   const UnresolvedSetImpl *Conversions
10363     = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
10364   for (UnresolvedSetImpl::iterator I = Conversions->begin(),
10365          E = Conversions->end(); I != E; ++I) {
10366     NamedDecl *D = *I;
10367     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
10368     if (isa<UsingShadowDecl>(D))
10369       D = cast<UsingShadowDecl>(D)->getTargetDecl();
10370 
10371     // Skip over templated conversion functions; they aren't
10372     // surrogates.
10373     if (isa<FunctionTemplateDecl>(D))
10374       continue;
10375 
10376     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
10377     if (!Conv->isExplicit()) {
10378       // Strip the reference type (if any) and then the pointer type (if
10379       // any) to get down to what might be a function type.
10380       QualType ConvType = Conv->getConversionType().getNonReferenceType();
10381       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
10382         ConvType = ConvPtrType->getPointeeType();
10383 
10384       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
10385       {
10386         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
10387                               Object.get(), Args, NumArgs, CandidateSet);
10388       }
10389     }
10390   }
10391 
10392   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10393 
10394   // Perform overload resolution.
10395   OverloadCandidateSet::iterator Best;
10396   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
10397                              Best)) {
10398   case OR_Success:
10399     // Overload resolution succeeded; we'll build the appropriate call
10400     // below.
10401     break;
10402 
10403   case OR_No_Viable_Function:
10404     if (CandidateSet.empty())
10405       Diag(Object.get()->getSourceRange().getBegin(), diag::err_ovl_no_oper)
10406         << Object.get()->getType() << /*call*/ 1
10407         << Object.get()->getSourceRange();
10408     else
10409       Diag(Object.get()->getSourceRange().getBegin(),
10410            diag::err_ovl_no_viable_object_call)
10411         << Object.get()->getType() << Object.get()->getSourceRange();
10412     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
10413     break;
10414 
10415   case OR_Ambiguous:
10416     Diag(Object.get()->getSourceRange().getBegin(),
10417          diag::err_ovl_ambiguous_object_call)
10418       << Object.get()->getType() << Object.get()->getSourceRange();
10419     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs);
10420     break;
10421 
10422   case OR_Deleted:
10423     Diag(Object.get()->getSourceRange().getBegin(),
10424          diag::err_ovl_deleted_object_call)
10425       << Best->Function->isDeleted()
10426       << Object.get()->getType()
10427       << getDeletedOrUnavailableSuffix(Best->Function)
10428       << Object.get()->getSourceRange();
10429     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs);
10430     break;
10431   }
10432 
10433   if (Best == CandidateSet.end())
10434     return true;
10435 
10436   UnbridgedCasts.restore();
10437 
10438   if (Best->Function == 0) {
10439     // Since there is no function declaration, this is one of the
10440     // surrogate candidates. Dig out the conversion function.
10441     CXXConversionDecl *Conv
10442       = cast<CXXConversionDecl>(
10443                          Best->Conversions[0].UserDefined.ConversionFunction);
10444 
10445     CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10446     DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
10447 
10448     // We selected one of the surrogate functions that converts the
10449     // object parameter to a function pointer. Perform the conversion
10450     // on the object argument, then let ActOnCallExpr finish the job.
10451 
10452     // Create an implicit member expr to refer to the conversion operator.
10453     // and then call it.
10454     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
10455                                              Conv, HadMultipleCandidates);
10456     if (Call.isInvalid())
10457       return ExprError();
10458     // Record usage of conversion in an implicit cast.
10459     Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
10460                                           CK_UserDefinedConversion,
10461                                           Call.get(), 0, VK_RValue));
10462 
10463     return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs),
10464                          RParenLoc);
10465   }
10466 
10467   MarkDeclarationReferenced(LParenLoc, Best->Function);
10468   CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10469   DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
10470 
10471   // We found an overloaded operator(). Build a CXXOperatorCallExpr
10472   // that calls this method, using Object for the implicit object
10473   // parameter and passing along the remaining arguments.
10474   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10475   const FunctionProtoType *Proto =
10476     Method->getType()->getAs<FunctionProtoType>();
10477 
10478   unsigned NumArgsInProto = Proto->getNumArgs();
10479   unsigned NumArgsToCheck = NumArgs;
10480 
10481   // Build the full argument list for the method call (the
10482   // implicit object parameter is placed at the beginning of the
10483   // list).
10484   Expr **MethodArgs;
10485   if (NumArgs < NumArgsInProto) {
10486     NumArgsToCheck = NumArgsInProto;
10487     MethodArgs = new Expr*[NumArgsInProto + 1];
10488   } else {
10489     MethodArgs = new Expr*[NumArgs + 1];
10490   }
10491   MethodArgs[0] = Object.get();
10492   for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
10493     MethodArgs[ArgIdx + 1] = Args[ArgIdx];
10494 
10495   ExprResult NewFn = CreateFunctionRefExpr(*this, Method,
10496                                            HadMultipleCandidates);
10497   if (NewFn.isInvalid())
10498     return true;
10499 
10500   // Once we've built TheCall, all of the expressions are properly
10501   // owned.
10502   QualType ResultTy = Method->getResultType();
10503   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10504   ResultTy = ResultTy.getNonLValueExprType(Context);
10505 
10506   CXXOperatorCallExpr *TheCall =
10507     new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
10508                                       MethodArgs, NumArgs + 1,
10509                                       ResultTy, VK, RParenLoc);
10510   delete [] MethodArgs;
10511 
10512   if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
10513                           Method))
10514     return true;
10515 
10516   // We may have default arguments. If so, we need to allocate more
10517   // slots in the call for them.
10518   if (NumArgs < NumArgsInProto)
10519     TheCall->setNumArgs(Context, NumArgsInProto + 1);
10520   else if (NumArgs > NumArgsInProto)
10521     NumArgsToCheck = NumArgsInProto;
10522 
10523   bool IsError = false;
10524 
10525   // Initialize the implicit object parameter.
10526   ExprResult ObjRes =
10527     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
10528                                         Best->FoundDecl, Method);
10529   if (ObjRes.isInvalid())
10530     IsError = true;
10531   else
10532     Object = move(ObjRes);
10533   TheCall->setArg(0, Object.take());
10534 
10535   // Check the argument types.
10536   for (unsigned i = 0; i != NumArgsToCheck; i++) {
10537     Expr *Arg;
10538     if (i < NumArgs) {
10539       Arg = Args[i];
10540 
10541       // Pass the argument.
10542 
10543       ExprResult InputInit
10544         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10545                                                     Context,
10546                                                     Method->getParamDecl(i)),
10547                                     SourceLocation(), Arg);
10548 
10549       IsError |= InputInit.isInvalid();
10550       Arg = InputInit.takeAs<Expr>();
10551     } else {
10552       ExprResult DefArg
10553         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
10554       if (DefArg.isInvalid()) {
10555         IsError = true;
10556         break;
10557       }
10558 
10559       Arg = DefArg.takeAs<Expr>();
10560     }
10561 
10562     TheCall->setArg(i + 1, Arg);
10563   }
10564 
10565   // If this is a variadic call, handle args passed through "...".
10566   if (Proto->isVariadic()) {
10567     // Promote the arguments (C99 6.5.2.2p7).
10568     for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
10569       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
10570       IsError |= Arg.isInvalid();
10571       TheCall->setArg(i + 1, Arg.take());
10572     }
10573   }
10574 
10575   if (IsError) return true;
10576 
10577   if (CheckFunctionCall(Method, TheCall))
10578     return true;
10579 
10580   return MaybeBindToTemporary(TheCall);
10581 }
10582 
10583 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
10584 ///  (if one exists), where @c Base is an expression of class type and
10585 /// @c Member is the name of the member we're trying to find.
10586 ExprResult
10587 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
10588   assert(Base->getType()->isRecordType() &&
10589          "left-hand side must have class type");
10590 
10591   if (checkPlaceholderForOverload(*this, Base))
10592     return ExprError();
10593 
10594   SourceLocation Loc = Base->getExprLoc();
10595 
10596   // C++ [over.ref]p1:
10597   //
10598   //   [...] An expression x->m is interpreted as (x.operator->())->m
10599   //   for a class object x of type T if T::operator->() exists and if
10600   //   the operator is selected as the best match function by the
10601   //   overload resolution mechanism (13.3).
10602   DeclarationName OpName =
10603     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
10604   OverloadCandidateSet CandidateSet(Loc);
10605   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
10606 
10607   if (RequireCompleteType(Loc, Base->getType(),
10608                           PDiag(diag::err_typecheck_incomplete_tag)
10609                             << Base->getSourceRange()))
10610     return ExprError();
10611 
10612   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
10613   LookupQualifiedName(R, BaseRecord->getDecl());
10614   R.suppressDiagnostics();
10615 
10616   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
10617        Oper != OperEnd; ++Oper) {
10618     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
10619                        0, 0, CandidateSet, /*SuppressUserConversions=*/false);
10620   }
10621 
10622   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10623 
10624   // Perform overload resolution.
10625   OverloadCandidateSet::iterator Best;
10626   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10627   case OR_Success:
10628     // Overload resolution succeeded; we'll build the call below.
10629     break;
10630 
10631   case OR_No_Viable_Function:
10632     if (CandidateSet.empty())
10633       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
10634         << Base->getType() << Base->getSourceRange();
10635     else
10636       Diag(OpLoc, diag::err_ovl_no_viable_oper)
10637         << "operator->" << Base->getSourceRange();
10638     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, &Base, 1);
10639     return ExprError();
10640 
10641   case OR_Ambiguous:
10642     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10643       << "->" << Base->getType() << Base->getSourceRange();
10644     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, &Base, 1);
10645     return ExprError();
10646 
10647   case OR_Deleted:
10648     Diag(OpLoc,  diag::err_ovl_deleted_oper)
10649       << Best->Function->isDeleted()
10650       << "->"
10651       << getDeletedOrUnavailableSuffix(Best->Function)
10652       << Base->getSourceRange();
10653     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, &Base, 1);
10654     return ExprError();
10655   }
10656 
10657   MarkDeclarationReferenced(OpLoc, Best->Function);
10658   CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
10659   DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
10660 
10661   // Convert the object parameter.
10662   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10663   ExprResult BaseResult =
10664     PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
10665                                         Best->FoundDecl, Method);
10666   if (BaseResult.isInvalid())
10667     return ExprError();
10668   Base = BaseResult.take();
10669 
10670   // Build the operator call.
10671   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method,
10672                                             HadMultipleCandidates);
10673   if (FnExpr.isInvalid())
10674     return ExprError();
10675 
10676   QualType ResultTy = Method->getResultType();
10677   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10678   ResultTy = ResultTy.getNonLValueExprType(Context);
10679   CXXOperatorCallExpr *TheCall =
10680     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
10681                                       &Base, 1, ResultTy, VK, OpLoc);
10682 
10683   if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
10684                           Method))
10685           return ExprError();
10686 
10687   return MaybeBindToTemporary(TheCall);
10688 }
10689 
10690 /// FixOverloadedFunctionReference - E is an expression that refers to
10691 /// a C++ overloaded function (possibly with some parentheses and
10692 /// perhaps a '&' around it). We have resolved the overloaded function
10693 /// to the function declaration Fn, so patch up the expression E to
10694 /// refer (possibly indirectly) to Fn. Returns the new expr.
10695 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
10696                                            FunctionDecl *Fn) {
10697   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
10698     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
10699                                                    Found, Fn);
10700     if (SubExpr == PE->getSubExpr())
10701       return PE;
10702 
10703     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
10704   }
10705 
10706   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
10707     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
10708                                                    Found, Fn);
10709     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
10710                                SubExpr->getType()) &&
10711            "Implicit cast type cannot be determined from overload");
10712     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
10713     if (SubExpr == ICE->getSubExpr())
10714       return ICE;
10715 
10716     return ImplicitCastExpr::Create(Context, ICE->getType(),
10717                                     ICE->getCastKind(),
10718                                     SubExpr, 0,
10719                                     ICE->getValueKind());
10720   }
10721 
10722   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
10723     assert(UnOp->getOpcode() == UO_AddrOf &&
10724            "Can only take the address of an overloaded function");
10725     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
10726       if (Method->isStatic()) {
10727         // Do nothing: static member functions aren't any different
10728         // from non-member functions.
10729       } else {
10730         // Fix the sub expression, which really has to be an
10731         // UnresolvedLookupExpr holding an overloaded member function
10732         // or template.
10733         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
10734                                                        Found, Fn);
10735         if (SubExpr == UnOp->getSubExpr())
10736           return UnOp;
10737 
10738         assert(isa<DeclRefExpr>(SubExpr)
10739                && "fixed to something other than a decl ref");
10740         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
10741                && "fixed to a member ref with no nested name qualifier");
10742 
10743         // We have taken the address of a pointer to member
10744         // function. Perform the computation here so that we get the
10745         // appropriate pointer to member type.
10746         QualType ClassType
10747           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
10748         QualType MemPtrType
10749           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
10750 
10751         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
10752                                            VK_RValue, OK_Ordinary,
10753                                            UnOp->getOperatorLoc());
10754       }
10755     }
10756     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
10757                                                    Found, Fn);
10758     if (SubExpr == UnOp->getSubExpr())
10759       return UnOp;
10760 
10761     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
10762                                      Context.getPointerType(SubExpr->getType()),
10763                                        VK_RValue, OK_Ordinary,
10764                                        UnOp->getOperatorLoc());
10765   }
10766 
10767   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
10768     // FIXME: avoid copy.
10769     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10770     if (ULE->hasExplicitTemplateArgs()) {
10771       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
10772       TemplateArgs = &TemplateArgsBuffer;
10773     }
10774 
10775     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
10776                                            ULE->getQualifierLoc(),
10777                                            Fn,
10778                                            ULE->getNameLoc(),
10779                                            Fn->getType(),
10780                                            VK_LValue,
10781                                            Found.getDecl(),
10782                                            TemplateArgs);
10783     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
10784     return DRE;
10785   }
10786 
10787   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
10788     // FIXME: avoid copy.
10789     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10790     if (MemExpr->hasExplicitTemplateArgs()) {
10791       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10792       TemplateArgs = &TemplateArgsBuffer;
10793     }
10794 
10795     Expr *Base;
10796 
10797     // If we're filling in a static method where we used to have an
10798     // implicit member access, rewrite to a simple decl ref.
10799     if (MemExpr->isImplicitAccess()) {
10800       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
10801         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
10802                                                MemExpr->getQualifierLoc(),
10803                                                Fn,
10804                                                MemExpr->getMemberLoc(),
10805                                                Fn->getType(),
10806                                                VK_LValue,
10807                                                Found.getDecl(),
10808                                                TemplateArgs);
10809         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
10810         return DRE;
10811       } else {
10812         SourceLocation Loc = MemExpr->getMemberLoc();
10813         if (MemExpr->getQualifier())
10814           Loc = MemExpr->getQualifierLoc().getBeginLoc();
10815         CheckCXXThisCapture(Loc);
10816         Base = new (Context) CXXThisExpr(Loc,
10817                                          MemExpr->getBaseType(),
10818                                          /*isImplicit=*/true);
10819       }
10820     } else
10821       Base = MemExpr->getBase();
10822 
10823     ExprValueKind valueKind;
10824     QualType type;
10825     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
10826       valueKind = VK_LValue;
10827       type = Fn->getType();
10828     } else {
10829       valueKind = VK_RValue;
10830       type = Context.BoundMemberTy;
10831     }
10832 
10833     MemberExpr *ME = MemberExpr::Create(Context, Base,
10834                                         MemExpr->isArrow(),
10835                                         MemExpr->getQualifierLoc(),
10836                                         Fn,
10837                                         Found,
10838                                         MemExpr->getMemberNameInfo(),
10839                                         TemplateArgs,
10840                                         type, valueKind, OK_Ordinary);
10841     ME->setHadMultipleCandidates(true);
10842     return ME;
10843   }
10844 
10845   llvm_unreachable("Invalid reference to overloaded function");
10846 }
10847 
10848 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
10849                                                 DeclAccessPair Found,
10850                                                 FunctionDecl *Fn) {
10851   return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
10852 }
10853 
10854 } // end namespace clang
10855