• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===--- SemaOverload.cpp - C++ Overloading -------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file provides Sema routines for C++ overloading.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/Sema/Overload.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/CXXInheritance.h"
17 #include "clang/AST/DeclObjC.h"
18 #include "clang/AST/Expr.h"
19 #include "clang/AST/ExprCXX.h"
20 #include "clang/AST/ExprObjC.h"
21 #include "clang/AST/TypeOrdering.h"
22 #include "clang/Basic/Diagnostic.h"
23 #include "clang/Basic/PartialDiagnostic.h"
24 #include "clang/Lex/Preprocessor.h"
25 #include "clang/Sema/Initialization.h"
26 #include "clang/Sema/Lookup.h"
27 #include "clang/Sema/SemaInternal.h"
28 #include "clang/Sema/Template.h"
29 #include "clang/Sema/TemplateDeduction.h"
30 #include "llvm/ADT/DenseSet.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include "llvm/ADT/SmallPtrSet.h"
33 #include "llvm/ADT/SmallString.h"
34 #include <algorithm>
35 
36 namespace clang {
37 using namespace sema;
38 
39 /// A convenience routine for creating a decayed reference to a function.
40 static ExprResult
CreateFunctionRefExpr(Sema & S,FunctionDecl * Fn,NamedDecl * FoundDecl,bool HadMultipleCandidates,SourceLocation Loc=SourceLocation (),const DeclarationNameLoc & LocInfo=DeclarationNameLoc ())41 CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl,
42                       bool HadMultipleCandidates,
43                       SourceLocation Loc = SourceLocation(),
44                       const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
45   if (S.DiagnoseUseOfDecl(FoundDecl, Loc))
46     return ExprError();
47   // If FoundDecl is different from Fn (such as if one is a template
48   // and the other a specialization), make sure DiagnoseUseOfDecl is
49   // called on both.
50   // FIXME: This would be more comprehensively addressed by modifying
51   // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
52   // being used.
53   if (FoundDecl != Fn && S.DiagnoseUseOfDecl(Fn, Loc))
54     return ExprError();
55   DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
56                                                  VK_LValue, Loc, LocInfo);
57   if (HadMultipleCandidates)
58     DRE->setHadMultipleCandidates(true);
59 
60   S.MarkDeclRefReferenced(DRE);
61 
62   ExprResult E = S.Owned(DRE);
63   E = S.DefaultFunctionArrayConversion(E.take());
64   if (E.isInvalid())
65     return ExprError();
66   return E;
67 }
68 
69 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
70                                  bool InOverloadResolution,
71                                  StandardConversionSequence &SCS,
72                                  bool CStyle,
73                                  bool AllowObjCWritebackConversion);
74 
75 static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
76                                                  QualType &ToType,
77                                                  bool InOverloadResolution,
78                                                  StandardConversionSequence &SCS,
79                                                  bool CStyle);
80 static OverloadingResult
81 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
82                         UserDefinedConversionSequence& User,
83                         OverloadCandidateSet& Conversions,
84                         bool AllowExplicit);
85 
86 
87 static ImplicitConversionSequence::CompareKind
88 CompareStandardConversionSequences(Sema &S,
89                                    const StandardConversionSequence& SCS1,
90                                    const StandardConversionSequence& SCS2);
91 
92 static ImplicitConversionSequence::CompareKind
93 CompareQualificationConversions(Sema &S,
94                                 const StandardConversionSequence& SCS1,
95                                 const StandardConversionSequence& SCS2);
96 
97 static ImplicitConversionSequence::CompareKind
98 CompareDerivedToBaseConversions(Sema &S,
99                                 const StandardConversionSequence& SCS1,
100                                 const StandardConversionSequence& SCS2);
101 
102 
103 
104 /// GetConversionCategory - Retrieve the implicit conversion
105 /// category corresponding to the given implicit conversion kind.
106 ImplicitConversionCategory
GetConversionCategory(ImplicitConversionKind Kind)107 GetConversionCategory(ImplicitConversionKind Kind) {
108   static const ImplicitConversionCategory
109     Category[(int)ICK_Num_Conversion_Kinds] = {
110     ICC_Identity,
111     ICC_Lvalue_Transformation,
112     ICC_Lvalue_Transformation,
113     ICC_Lvalue_Transformation,
114     ICC_Identity,
115     ICC_Qualification_Adjustment,
116     ICC_Promotion,
117     ICC_Promotion,
118     ICC_Promotion,
119     ICC_Conversion,
120     ICC_Conversion,
121     ICC_Conversion,
122     ICC_Conversion,
123     ICC_Conversion,
124     ICC_Conversion,
125     ICC_Conversion,
126     ICC_Conversion,
127     ICC_Conversion,
128     ICC_Conversion,
129     ICC_Conversion,
130     ICC_Conversion,
131     ICC_Conversion
132   };
133   return Category[(int)Kind];
134 }
135 
136 /// GetConversionRank - Retrieve the implicit conversion rank
137 /// corresponding to the given implicit conversion kind.
GetConversionRank(ImplicitConversionKind Kind)138 ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
139   static const ImplicitConversionRank
140     Rank[(int)ICK_Num_Conversion_Kinds] = {
141     ICR_Exact_Match,
142     ICR_Exact_Match,
143     ICR_Exact_Match,
144     ICR_Exact_Match,
145     ICR_Exact_Match,
146     ICR_Exact_Match,
147     ICR_Promotion,
148     ICR_Promotion,
149     ICR_Promotion,
150     ICR_Conversion,
151     ICR_Conversion,
152     ICR_Conversion,
153     ICR_Conversion,
154     ICR_Conversion,
155     ICR_Conversion,
156     ICR_Conversion,
157     ICR_Conversion,
158     ICR_Conversion,
159     ICR_Conversion,
160     ICR_Conversion,
161     ICR_Complex_Real_Conversion,
162     ICR_Conversion,
163     ICR_Conversion,
164     ICR_Writeback_Conversion
165   };
166   return Rank[(int)Kind];
167 }
168 
169 /// GetImplicitConversionName - Return the name of this kind of
170 /// implicit conversion.
GetImplicitConversionName(ImplicitConversionKind Kind)171 const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
172   static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
173     "No conversion",
174     "Lvalue-to-rvalue",
175     "Array-to-pointer",
176     "Function-to-pointer",
177     "Noreturn adjustment",
178     "Qualification",
179     "Integral promotion",
180     "Floating point promotion",
181     "Complex promotion",
182     "Integral conversion",
183     "Floating conversion",
184     "Complex conversion",
185     "Floating-integral conversion",
186     "Pointer conversion",
187     "Pointer-to-member conversion",
188     "Boolean conversion",
189     "Compatible-types conversion",
190     "Derived-to-base conversion",
191     "Vector conversion",
192     "Vector splat",
193     "Complex-real conversion",
194     "Block Pointer conversion",
195     "Transparent Union Conversion"
196     "Writeback conversion"
197   };
198   return Name[Kind];
199 }
200 
201 /// StandardConversionSequence - Set the standard conversion
202 /// sequence to the identity conversion.
setAsIdentityConversion()203 void StandardConversionSequence::setAsIdentityConversion() {
204   First = ICK_Identity;
205   Second = ICK_Identity;
206   Third = ICK_Identity;
207   DeprecatedStringLiteralToCharPtr = false;
208   QualificationIncludesObjCLifetime = false;
209   ReferenceBinding = false;
210   DirectBinding = false;
211   IsLvalueReference = true;
212   BindsToFunctionLvalue = false;
213   BindsToRvalue = false;
214   BindsImplicitObjectArgumentWithoutRefQualifier = false;
215   ObjCLifetimeConversionBinding = false;
216   CopyConstructor = 0;
217 }
218 
219 /// getRank - Retrieve the rank of this standard conversion sequence
220 /// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
221 /// implicit conversions.
getRank() const222 ImplicitConversionRank StandardConversionSequence::getRank() const {
223   ImplicitConversionRank Rank = ICR_Exact_Match;
224   if  (GetConversionRank(First) > Rank)
225     Rank = GetConversionRank(First);
226   if  (GetConversionRank(Second) > Rank)
227     Rank = GetConversionRank(Second);
228   if  (GetConversionRank(Third) > Rank)
229     Rank = GetConversionRank(Third);
230   return Rank;
231 }
232 
233 /// isPointerConversionToBool - Determines whether this conversion is
234 /// a conversion of a pointer or pointer-to-member to bool. This is
235 /// used as part of the ranking of standard conversion sequences
236 /// (C++ 13.3.3.2p4).
isPointerConversionToBool() const237 bool StandardConversionSequence::isPointerConversionToBool() const {
238   // Note that FromType has not necessarily been transformed by the
239   // array-to-pointer or function-to-pointer implicit conversions, so
240   // check for their presence as well as checking whether FromType is
241   // a pointer.
242   if (getToType(1)->isBooleanType() &&
243       (getFromType()->isPointerType() ||
244        getFromType()->isObjCObjectPointerType() ||
245        getFromType()->isBlockPointerType() ||
246        getFromType()->isNullPtrType() ||
247        First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
248     return true;
249 
250   return false;
251 }
252 
253 /// isPointerConversionToVoidPointer - Determines whether this
254 /// conversion is a conversion of a pointer to a void pointer. This is
255 /// used as part of the ranking of standard conversion sequences (C++
256 /// 13.3.3.2p4).
257 bool
258 StandardConversionSequence::
isPointerConversionToVoidPointer(ASTContext & Context) const259 isPointerConversionToVoidPointer(ASTContext& Context) const {
260   QualType FromType = getFromType();
261   QualType ToType = getToType(1);
262 
263   // Note that FromType has not necessarily been transformed by the
264   // array-to-pointer implicit conversion, so check for its presence
265   // and redo the conversion to get a pointer.
266   if (First == ICK_Array_To_Pointer)
267     FromType = Context.getArrayDecayedType(FromType);
268 
269   if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
270     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
271       return ToPtrType->getPointeeType()->isVoidType();
272 
273   return false;
274 }
275 
276 /// Skip any implicit casts which could be either part of a narrowing conversion
277 /// or after one in an implicit conversion.
IgnoreNarrowingConversion(const Expr * Converted)278 static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
279   while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
280     switch (ICE->getCastKind()) {
281     case CK_NoOp:
282     case CK_IntegralCast:
283     case CK_IntegralToBoolean:
284     case CK_IntegralToFloating:
285     case CK_FloatingToIntegral:
286     case CK_FloatingToBoolean:
287     case CK_FloatingCast:
288       Converted = ICE->getSubExpr();
289       continue;
290 
291     default:
292       return Converted;
293     }
294   }
295 
296   return Converted;
297 }
298 
299 /// Check if this standard conversion sequence represents a narrowing
300 /// conversion, according to C++11 [dcl.init.list]p7.
301 ///
302 /// \param Ctx  The AST context.
303 /// \param Converted  The result of applying this standard conversion sequence.
304 /// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
305 ///        value of the expression prior to the narrowing conversion.
306 /// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
307 ///        type of the expression prior to the narrowing conversion.
308 NarrowingKind
getNarrowingKind(ASTContext & Ctx,const Expr * Converted,APValue & ConstantValue,QualType & ConstantType) const309 StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
310                                              const Expr *Converted,
311                                              APValue &ConstantValue,
312                                              QualType &ConstantType) const {
313   assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
314 
315   // C++11 [dcl.init.list]p7:
316   //   A narrowing conversion is an implicit conversion ...
317   QualType FromType = getToType(0);
318   QualType ToType = getToType(1);
319   switch (Second) {
320   // -- from a floating-point type to an integer type, or
321   //
322   // -- from an integer type or unscoped enumeration type to a floating-point
323   //    type, except where the source is a constant expression and the actual
324   //    value after conversion will fit into the target type and will produce
325   //    the original value when converted back to the original type, or
326   case ICK_Floating_Integral:
327     if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
328       return NK_Type_Narrowing;
329     } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
330       llvm::APSInt IntConstantValue;
331       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
332       if (Initializer &&
333           Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
334         // Convert the integer to the floating type.
335         llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
336         Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
337                                 llvm::APFloat::rmNearestTiesToEven);
338         // And back.
339         llvm::APSInt ConvertedValue = IntConstantValue;
340         bool ignored;
341         Result.convertToInteger(ConvertedValue,
342                                 llvm::APFloat::rmTowardZero, &ignored);
343         // If the resulting value is different, this was a narrowing conversion.
344         if (IntConstantValue != ConvertedValue) {
345           ConstantValue = APValue(IntConstantValue);
346           ConstantType = Initializer->getType();
347           return NK_Constant_Narrowing;
348         }
349       } else {
350         // Variables are always narrowings.
351         return NK_Variable_Narrowing;
352       }
353     }
354     return NK_Not_Narrowing;
355 
356   // -- from long double to double or float, or from double to float, except
357   //    where the source is a constant expression and the actual value after
358   //    conversion is within the range of values that can be represented (even
359   //    if it cannot be represented exactly), or
360   case ICK_Floating_Conversion:
361     if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
362         Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
363       // FromType is larger than ToType.
364       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
365       if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
366         // Constant!
367         assert(ConstantValue.isFloat());
368         llvm::APFloat FloatVal = ConstantValue.getFloat();
369         // Convert the source value into the target type.
370         bool ignored;
371         llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
372           Ctx.getFloatTypeSemantics(ToType),
373           llvm::APFloat::rmNearestTiesToEven, &ignored);
374         // If there was no overflow, the source value is within the range of
375         // values that can be represented.
376         if (ConvertStatus & llvm::APFloat::opOverflow) {
377           ConstantType = Initializer->getType();
378           return NK_Constant_Narrowing;
379         }
380       } else {
381         return NK_Variable_Narrowing;
382       }
383     }
384     return NK_Not_Narrowing;
385 
386   // -- from an integer type or unscoped enumeration type to an integer type
387   //    that cannot represent all the values of the original type, except where
388   //    the source is a constant expression and the actual value after
389   //    conversion will fit into the target type and will produce the original
390   //    value when converted back to the original type.
391   case ICK_Boolean_Conversion:  // Bools are integers too.
392     if (!FromType->isIntegralOrUnscopedEnumerationType()) {
393       // Boolean conversions can be from pointers and pointers to members
394       // [conv.bool], and those aren't considered narrowing conversions.
395       return NK_Not_Narrowing;
396     }  // Otherwise, fall through to the integral case.
397   case ICK_Integral_Conversion: {
398     assert(FromType->isIntegralOrUnscopedEnumerationType());
399     assert(ToType->isIntegralOrUnscopedEnumerationType());
400     const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
401     const unsigned FromWidth = Ctx.getIntWidth(FromType);
402     const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
403     const unsigned ToWidth = Ctx.getIntWidth(ToType);
404 
405     if (FromWidth > ToWidth ||
406         (FromWidth == ToWidth && FromSigned != ToSigned) ||
407         (FromSigned && !ToSigned)) {
408       // Not all values of FromType can be represented in ToType.
409       llvm::APSInt InitializerValue;
410       const Expr *Initializer = IgnoreNarrowingConversion(Converted);
411       if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
412         // Such conversions on variables are always narrowing.
413         return NK_Variable_Narrowing;
414       }
415       bool Narrowing = false;
416       if (FromWidth < ToWidth) {
417         // Negative -> unsigned is narrowing. Otherwise, more bits is never
418         // narrowing.
419         if (InitializerValue.isSigned() && InitializerValue.isNegative())
420           Narrowing = true;
421       } else {
422         // Add a bit to the InitializerValue so we don't have to worry about
423         // signed vs. unsigned comparisons.
424         InitializerValue = InitializerValue.extend(
425           InitializerValue.getBitWidth() + 1);
426         // Convert the initializer to and from the target width and signed-ness.
427         llvm::APSInt ConvertedValue = InitializerValue;
428         ConvertedValue = ConvertedValue.trunc(ToWidth);
429         ConvertedValue.setIsSigned(ToSigned);
430         ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
431         ConvertedValue.setIsSigned(InitializerValue.isSigned());
432         // If the result is different, this was a narrowing conversion.
433         if (ConvertedValue != InitializerValue)
434           Narrowing = true;
435       }
436       if (Narrowing) {
437         ConstantType = Initializer->getType();
438         ConstantValue = APValue(InitializerValue);
439         return NK_Constant_Narrowing;
440       }
441     }
442     return NK_Not_Narrowing;
443   }
444 
445   default:
446     // Other kinds of conversions are not narrowings.
447     return NK_Not_Narrowing;
448   }
449 }
450 
451 /// DebugPrint - Print this standard conversion sequence to standard
452 /// error. Useful for debugging overloading issues.
DebugPrint() const453 void StandardConversionSequence::DebugPrint() const {
454   raw_ostream &OS = llvm::errs();
455   bool PrintedSomething = false;
456   if (First != ICK_Identity) {
457     OS << GetImplicitConversionName(First);
458     PrintedSomething = true;
459   }
460 
461   if (Second != ICK_Identity) {
462     if (PrintedSomething) {
463       OS << " -> ";
464     }
465     OS << GetImplicitConversionName(Second);
466 
467     if (CopyConstructor) {
468       OS << " (by copy constructor)";
469     } else if (DirectBinding) {
470       OS << " (direct reference binding)";
471     } else if (ReferenceBinding) {
472       OS << " (reference binding)";
473     }
474     PrintedSomething = true;
475   }
476 
477   if (Third != ICK_Identity) {
478     if (PrintedSomething) {
479       OS << " -> ";
480     }
481     OS << GetImplicitConversionName(Third);
482     PrintedSomething = true;
483   }
484 
485   if (!PrintedSomething) {
486     OS << "No conversions required";
487   }
488 }
489 
490 /// DebugPrint - Print this user-defined conversion sequence to standard
491 /// error. Useful for debugging overloading issues.
DebugPrint() const492 void UserDefinedConversionSequence::DebugPrint() const {
493   raw_ostream &OS = llvm::errs();
494   if (Before.First || Before.Second || Before.Third) {
495     Before.DebugPrint();
496     OS << " -> ";
497   }
498   if (ConversionFunction)
499     OS << '\'' << *ConversionFunction << '\'';
500   else
501     OS << "aggregate initialization";
502   if (After.First || After.Second || After.Third) {
503     OS << " -> ";
504     After.DebugPrint();
505   }
506 }
507 
508 /// DebugPrint - Print this implicit conversion sequence to standard
509 /// error. Useful for debugging overloading issues.
DebugPrint() const510 void ImplicitConversionSequence::DebugPrint() const {
511   raw_ostream &OS = llvm::errs();
512   switch (ConversionKind) {
513   case StandardConversion:
514     OS << "Standard conversion: ";
515     Standard.DebugPrint();
516     break;
517   case UserDefinedConversion:
518     OS << "User-defined conversion: ";
519     UserDefined.DebugPrint();
520     break;
521   case EllipsisConversion:
522     OS << "Ellipsis conversion";
523     break;
524   case AmbiguousConversion:
525     OS << "Ambiguous conversion";
526     break;
527   case BadConversion:
528     OS << "Bad conversion";
529     break;
530   }
531 
532   OS << "\n";
533 }
534 
construct()535 void AmbiguousConversionSequence::construct() {
536   new (&conversions()) ConversionSet();
537 }
538 
destruct()539 void AmbiguousConversionSequence::destruct() {
540   conversions().~ConversionSet();
541 }
542 
543 void
copyFrom(const AmbiguousConversionSequence & O)544 AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
545   FromTypePtr = O.FromTypePtr;
546   ToTypePtr = O.ToTypePtr;
547   new (&conversions()) ConversionSet(O.conversions());
548 }
549 
550 namespace {
551   // Structure used by DeductionFailureInfo to store
552   // template argument information.
553   struct DFIArguments {
554     TemplateArgument FirstArg;
555     TemplateArgument SecondArg;
556   };
557   // Structure used by DeductionFailureInfo to store
558   // template parameter and template argument information.
559   struct DFIParamWithArguments : DFIArguments {
560     TemplateParameter Param;
561   };
562 }
563 
564 /// \brief Convert from Sema's representation of template deduction information
565 /// to the form used in overload-candidate information.
MakeDeductionFailureInfo(ASTContext & Context,Sema::TemplateDeductionResult TDK,TemplateDeductionInfo & Info)566 DeductionFailureInfo MakeDeductionFailureInfo(ASTContext &Context,
567                                               Sema::TemplateDeductionResult TDK,
568                                               TemplateDeductionInfo &Info) {
569   DeductionFailureInfo Result;
570   Result.Result = static_cast<unsigned>(TDK);
571   Result.HasDiagnostic = false;
572   Result.Data = 0;
573   switch (TDK) {
574   case Sema::TDK_Success:
575   case Sema::TDK_Invalid:
576   case Sema::TDK_InstantiationDepth:
577   case Sema::TDK_TooManyArguments:
578   case Sema::TDK_TooFewArguments:
579     break;
580 
581   case Sema::TDK_Incomplete:
582   case Sema::TDK_InvalidExplicitArguments:
583     Result.Data = Info.Param.getOpaqueValue();
584     break;
585 
586   case Sema::TDK_NonDeducedMismatch: {
587     // FIXME: Should allocate from normal heap so that we can free this later.
588     DFIArguments *Saved = new (Context) DFIArguments;
589     Saved->FirstArg = Info.FirstArg;
590     Saved->SecondArg = Info.SecondArg;
591     Result.Data = Saved;
592     break;
593   }
594 
595   case Sema::TDK_Inconsistent:
596   case Sema::TDK_Underqualified: {
597     // FIXME: Should allocate from normal heap so that we can free this later.
598     DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
599     Saved->Param = Info.Param;
600     Saved->FirstArg = Info.FirstArg;
601     Saved->SecondArg = Info.SecondArg;
602     Result.Data = Saved;
603     break;
604   }
605 
606   case Sema::TDK_SubstitutionFailure:
607     Result.Data = Info.take();
608     if (Info.hasSFINAEDiagnostic()) {
609       PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
610           SourceLocation(), PartialDiagnostic::NullDiagnostic());
611       Info.takeSFINAEDiagnostic(*Diag);
612       Result.HasDiagnostic = true;
613     }
614     break;
615 
616   case Sema::TDK_FailedOverloadResolution:
617     Result.Data = Info.Expression;
618     break;
619 
620   case Sema::TDK_MiscellaneousDeductionFailure:
621     break;
622   }
623 
624   return Result;
625 }
626 
Destroy()627 void DeductionFailureInfo::Destroy() {
628   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
629   case Sema::TDK_Success:
630   case Sema::TDK_Invalid:
631   case Sema::TDK_InstantiationDepth:
632   case Sema::TDK_Incomplete:
633   case Sema::TDK_TooManyArguments:
634   case Sema::TDK_TooFewArguments:
635   case Sema::TDK_InvalidExplicitArguments:
636   case Sema::TDK_FailedOverloadResolution:
637     break;
638 
639   case Sema::TDK_Inconsistent:
640   case Sema::TDK_Underqualified:
641   case Sema::TDK_NonDeducedMismatch:
642     // FIXME: Destroy the data?
643     Data = 0;
644     break;
645 
646   case Sema::TDK_SubstitutionFailure:
647     // FIXME: Destroy the template argument list?
648     Data = 0;
649     if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
650       Diag->~PartialDiagnosticAt();
651       HasDiagnostic = false;
652     }
653     break;
654 
655   // Unhandled
656   case Sema::TDK_MiscellaneousDeductionFailure:
657     break;
658   }
659 }
660 
getSFINAEDiagnostic()661 PartialDiagnosticAt *DeductionFailureInfo::getSFINAEDiagnostic() {
662   if (HasDiagnostic)
663     return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
664   return 0;
665 }
666 
getTemplateParameter()667 TemplateParameter DeductionFailureInfo::getTemplateParameter() {
668   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
669   case Sema::TDK_Success:
670   case Sema::TDK_Invalid:
671   case Sema::TDK_InstantiationDepth:
672   case Sema::TDK_TooManyArguments:
673   case Sema::TDK_TooFewArguments:
674   case Sema::TDK_SubstitutionFailure:
675   case Sema::TDK_NonDeducedMismatch:
676   case Sema::TDK_FailedOverloadResolution:
677     return TemplateParameter();
678 
679   case Sema::TDK_Incomplete:
680   case Sema::TDK_InvalidExplicitArguments:
681     return TemplateParameter::getFromOpaqueValue(Data);
682 
683   case Sema::TDK_Inconsistent:
684   case Sema::TDK_Underqualified:
685     return static_cast<DFIParamWithArguments*>(Data)->Param;
686 
687   // Unhandled
688   case Sema::TDK_MiscellaneousDeductionFailure:
689     break;
690   }
691 
692   return TemplateParameter();
693 }
694 
getTemplateArgumentList()695 TemplateArgumentList *DeductionFailureInfo::getTemplateArgumentList() {
696   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
697   case Sema::TDK_Success:
698   case Sema::TDK_Invalid:
699   case Sema::TDK_InstantiationDepth:
700   case Sema::TDK_TooManyArguments:
701   case Sema::TDK_TooFewArguments:
702   case Sema::TDK_Incomplete:
703   case Sema::TDK_InvalidExplicitArguments:
704   case Sema::TDK_Inconsistent:
705   case Sema::TDK_Underqualified:
706   case Sema::TDK_NonDeducedMismatch:
707   case Sema::TDK_FailedOverloadResolution:
708     return 0;
709 
710   case Sema::TDK_SubstitutionFailure:
711     return static_cast<TemplateArgumentList*>(Data);
712 
713   // Unhandled
714   case Sema::TDK_MiscellaneousDeductionFailure:
715     break;
716   }
717 
718   return 0;
719 }
720 
getFirstArg()721 const TemplateArgument *DeductionFailureInfo::getFirstArg() {
722   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
723   case Sema::TDK_Success:
724   case Sema::TDK_Invalid:
725   case Sema::TDK_InstantiationDepth:
726   case Sema::TDK_Incomplete:
727   case Sema::TDK_TooManyArguments:
728   case Sema::TDK_TooFewArguments:
729   case Sema::TDK_InvalidExplicitArguments:
730   case Sema::TDK_SubstitutionFailure:
731   case Sema::TDK_FailedOverloadResolution:
732     return 0;
733 
734   case Sema::TDK_Inconsistent:
735   case Sema::TDK_Underqualified:
736   case Sema::TDK_NonDeducedMismatch:
737     return &static_cast<DFIArguments*>(Data)->FirstArg;
738 
739   // Unhandled
740   case Sema::TDK_MiscellaneousDeductionFailure:
741     break;
742   }
743 
744   return 0;
745 }
746 
getSecondArg()747 const TemplateArgument *DeductionFailureInfo::getSecondArg() {
748   switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
749   case Sema::TDK_Success:
750   case Sema::TDK_Invalid:
751   case Sema::TDK_InstantiationDepth:
752   case Sema::TDK_Incomplete:
753   case Sema::TDK_TooManyArguments:
754   case Sema::TDK_TooFewArguments:
755   case Sema::TDK_InvalidExplicitArguments:
756   case Sema::TDK_SubstitutionFailure:
757   case Sema::TDK_FailedOverloadResolution:
758     return 0;
759 
760   case Sema::TDK_Inconsistent:
761   case Sema::TDK_Underqualified:
762   case Sema::TDK_NonDeducedMismatch:
763     return &static_cast<DFIArguments*>(Data)->SecondArg;
764 
765   // Unhandled
766   case Sema::TDK_MiscellaneousDeductionFailure:
767     break;
768   }
769 
770   return 0;
771 }
772 
getExpr()773 Expr *DeductionFailureInfo::getExpr() {
774   if (static_cast<Sema::TemplateDeductionResult>(Result) ==
775         Sema::TDK_FailedOverloadResolution)
776     return static_cast<Expr*>(Data);
777 
778   return 0;
779 }
780 
destroyCandidates()781 void OverloadCandidateSet::destroyCandidates() {
782   for (iterator i = begin(), e = end(); i != e; ++i) {
783     for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
784       i->Conversions[ii].~ImplicitConversionSequence();
785     if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
786       i->DeductionFailure.Destroy();
787   }
788 }
789 
clear()790 void OverloadCandidateSet::clear() {
791   destroyCandidates();
792   NumInlineSequences = 0;
793   Candidates.clear();
794   Functions.clear();
795 }
796 
797 namespace {
798   class UnbridgedCastsSet {
799     struct Entry {
800       Expr **Addr;
801       Expr *Saved;
802     };
803     SmallVector<Entry, 2> Entries;
804 
805   public:
save(Sema & S,Expr * & E)806     void save(Sema &S, Expr *&E) {
807       assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
808       Entry entry = { &E, E };
809       Entries.push_back(entry);
810       E = S.stripARCUnbridgedCast(E);
811     }
812 
restore()813     void restore() {
814       for (SmallVectorImpl<Entry>::iterator
815              i = Entries.begin(), e = Entries.end(); i != e; ++i)
816         *i->Addr = i->Saved;
817     }
818   };
819 }
820 
821 /// checkPlaceholderForOverload - Do any interesting placeholder-like
822 /// preprocessing on the given expression.
823 ///
824 /// \param unbridgedCasts a collection to which to add unbridged casts;
825 ///   without this, they will be immediately diagnosed as errors
826 ///
827 /// Return true on unrecoverable error.
checkPlaceholderForOverload(Sema & S,Expr * & E,UnbridgedCastsSet * unbridgedCasts=0)828 static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
829                                         UnbridgedCastsSet *unbridgedCasts = 0) {
830   if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
831     // We can't handle overloaded expressions here because overload
832     // resolution might reasonably tweak them.
833     if (placeholder->getKind() == BuiltinType::Overload) return false;
834 
835     // If the context potentially accepts unbridged ARC casts, strip
836     // the unbridged cast and add it to the collection for later restoration.
837     if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
838         unbridgedCasts) {
839       unbridgedCasts->save(S, E);
840       return false;
841     }
842 
843     // Go ahead and check everything else.
844     ExprResult result = S.CheckPlaceholderExpr(E);
845     if (result.isInvalid())
846       return true;
847 
848     E = result.take();
849     return false;
850   }
851 
852   // Nothing to do.
853   return false;
854 }
855 
856 /// checkArgPlaceholdersForOverload - Check a set of call operands for
857 /// placeholders.
checkArgPlaceholdersForOverload(Sema & S,MultiExprArg Args,UnbridgedCastsSet & unbridged)858 static bool checkArgPlaceholdersForOverload(Sema &S,
859                                             MultiExprArg Args,
860                                             UnbridgedCastsSet &unbridged) {
861   for (unsigned i = 0, e = Args.size(); i != e; ++i)
862     if (checkPlaceholderForOverload(S, Args[i], &unbridged))
863       return true;
864 
865   return false;
866 }
867 
868 // IsOverload - Determine whether the given New declaration is an
869 // overload of the declarations in Old. This routine returns false if
870 // New and Old cannot be overloaded, e.g., if New has the same
871 // signature as some function in Old (C++ 1.3.10) or if the Old
872 // declarations aren't functions (or function templates) at all. When
873 // it does return false, MatchedDecl will point to the decl that New
874 // cannot be overloaded with.  This decl may be a UsingShadowDecl on
875 // top of the underlying declaration.
876 //
877 // Example: Given the following input:
878 //
879 //   void f(int, float); // #1
880 //   void f(int, int); // #2
881 //   int f(int, int); // #3
882 //
883 // When we process #1, there is no previous declaration of "f",
884 // so IsOverload will not be used.
885 //
886 // When we process #2, Old contains only the FunctionDecl for #1.  By
887 // comparing the parameter types, we see that #1 and #2 are overloaded
888 // (since they have different signatures), so this routine returns
889 // false; MatchedDecl is unchanged.
890 //
891 // When we process #3, Old is an overload set containing #1 and #2. We
892 // compare the signatures of #3 to #1 (they're overloaded, so we do
893 // nothing) and then #3 to #2. Since the signatures of #3 and #2 are
894 // identical (return types of functions are not part of the
895 // signature), IsOverload returns false and MatchedDecl will be set to
896 // point to the FunctionDecl for #2.
897 //
898 // 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
899 // into a class by a using declaration.  The rules for whether to hide
900 // shadow declarations ignore some properties which otherwise figure
901 // into a function template's signature.
902 Sema::OverloadKind
CheckOverload(Scope * S,FunctionDecl * New,const LookupResult & Old,NamedDecl * & Match,bool NewIsUsingDecl)903 Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
904                     NamedDecl *&Match, bool NewIsUsingDecl) {
905   for (LookupResult::iterator I = Old.begin(), E = Old.end();
906          I != E; ++I) {
907     NamedDecl *OldD = *I;
908 
909     bool OldIsUsingDecl = false;
910     if (isa<UsingShadowDecl>(OldD)) {
911       OldIsUsingDecl = true;
912 
913       // We can always introduce two using declarations into the same
914       // context, even if they have identical signatures.
915       if (NewIsUsingDecl) continue;
916 
917       OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
918     }
919 
920     // If either declaration was introduced by a using declaration,
921     // we'll need to use slightly different rules for matching.
922     // Essentially, these rules are the normal rules, except that
923     // function templates hide function templates with different
924     // return types or template parameter lists.
925     bool UseMemberUsingDeclRules =
926       (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
927       !New->getFriendObjectKind();
928 
929     if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
930       if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
931         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
932           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
933           continue;
934         }
935 
936         Match = *I;
937         return Ovl_Match;
938       }
939     } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
940       if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
941         if (UseMemberUsingDeclRules && OldIsUsingDecl) {
942           HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
943           continue;
944         }
945 
946         if (!shouldLinkPossiblyHiddenDecl(*I, New))
947           continue;
948 
949         Match = *I;
950         return Ovl_Match;
951       }
952     } else if (isa<UsingDecl>(OldD)) {
953       // We can overload with these, which can show up when doing
954       // redeclaration checks for UsingDecls.
955       assert(Old.getLookupKind() == LookupUsingDeclName);
956     } else if (isa<TagDecl>(OldD)) {
957       // We can always overload with tags by hiding them.
958     } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
959       // Optimistically assume that an unresolved using decl will
960       // overload; if it doesn't, we'll have to diagnose during
961       // template instantiation.
962     } else {
963       // (C++ 13p1):
964       //   Only function declarations can be overloaded; object and type
965       //   declarations cannot be overloaded.
966       Match = *I;
967       return Ovl_NonFunction;
968     }
969   }
970 
971   return Ovl_Overload;
972 }
973 
IsOverload(FunctionDecl * New,FunctionDecl * Old,bool UseUsingDeclRules)974 bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
975                       bool UseUsingDeclRules) {
976   // C++ [basic.start.main]p2: This function shall not be overloaded.
977   if (New->isMain())
978     return false;
979 
980   FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
981   FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
982 
983   // C++ [temp.fct]p2:
984   //   A function template can be overloaded with other function templates
985   //   and with normal (non-template) functions.
986   if ((OldTemplate == 0) != (NewTemplate == 0))
987     return true;
988 
989   // Is the function New an overload of the function Old?
990   QualType OldQType = Context.getCanonicalType(Old->getType());
991   QualType NewQType = Context.getCanonicalType(New->getType());
992 
993   // Compare the signatures (C++ 1.3.10) of the two functions to
994   // determine whether they are overloads. If we find any mismatch
995   // in the signature, they are overloads.
996 
997   // If either of these functions is a K&R-style function (no
998   // prototype), then we consider them to have matching signatures.
999   if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
1000       isa<FunctionNoProtoType>(NewQType.getTypePtr()))
1001     return false;
1002 
1003   const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
1004   const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
1005 
1006   // The signature of a function includes the types of its
1007   // parameters (C++ 1.3.10), which includes the presence or absence
1008   // of the ellipsis; see C++ DR 357).
1009   if (OldQType != NewQType &&
1010       (OldType->getNumArgs() != NewType->getNumArgs() ||
1011        OldType->isVariadic() != NewType->isVariadic() ||
1012        !FunctionArgTypesAreEqual(OldType, NewType)))
1013     return true;
1014 
1015   // C++ [temp.over.link]p4:
1016   //   The signature of a function template consists of its function
1017   //   signature, its return type and its template parameter list. The names
1018   //   of the template parameters are significant only for establishing the
1019   //   relationship between the template parameters and the rest of the
1020   //   signature.
1021   //
1022   // We check the return type and template parameter lists for function
1023   // templates first; the remaining checks follow.
1024   //
1025   // However, we don't consider either of these when deciding whether
1026   // a member introduced by a shadow declaration is hidden.
1027   if (!UseUsingDeclRules && NewTemplate &&
1028       (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
1029                                        OldTemplate->getTemplateParameters(),
1030                                        false, TPL_TemplateMatch) ||
1031        OldType->getResultType() != NewType->getResultType()))
1032     return true;
1033 
1034   // If the function is a class member, its signature includes the
1035   // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
1036   //
1037   // As part of this, also check whether one of the member functions
1038   // is static, in which case they are not overloads (C++
1039   // 13.1p2). While not part of the definition of the signature,
1040   // this check is important to determine whether these functions
1041   // can be overloaded.
1042   CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
1043   CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
1044   if (OldMethod && NewMethod &&
1045       !OldMethod->isStatic() && !NewMethod->isStatic()) {
1046     if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
1047       if (!UseUsingDeclRules &&
1048           (OldMethod->getRefQualifier() == RQ_None ||
1049            NewMethod->getRefQualifier() == RQ_None)) {
1050         // C++0x [over.load]p2:
1051         //   - Member function declarations with the same name and the same
1052         //     parameter-type-list as well as member function template
1053         //     declarations with the same name, the same parameter-type-list, and
1054         //     the same template parameter lists cannot be overloaded if any of
1055         //     them, but not all, have a ref-qualifier (8.3.5).
1056         Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1057           << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1058         Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1059       }
1060       return true;
1061     }
1062 
1063     // We may not have applied the implicit const for a constexpr member
1064     // function yet (because we haven't yet resolved whether this is a static
1065     // or non-static member function). Add it now, on the assumption that this
1066     // is a redeclaration of OldMethod.
1067     unsigned NewQuals = NewMethod->getTypeQualifiers();
1068     if (!getLangOpts().CPlusPlus1y && NewMethod->isConstexpr() &&
1069         !isa<CXXConstructorDecl>(NewMethod))
1070       NewQuals |= Qualifiers::Const;
1071     if (OldMethod->getTypeQualifiers() != NewQuals)
1072       return true;
1073   }
1074 
1075   // The signatures match; this is not an overload.
1076   return false;
1077 }
1078 
1079 /// \brief Checks availability of the function depending on the current
1080 /// function context. Inside an unavailable function, unavailability is ignored.
1081 ///
1082 /// \returns true if \arg FD is unavailable and current context is inside
1083 /// an available function, false otherwise.
isFunctionConsideredUnavailable(FunctionDecl * FD)1084 bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1085   return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1086 }
1087 
1088 /// \brief Tries a user-defined conversion from From to ToType.
1089 ///
1090 /// Produces an implicit conversion sequence for when a standard conversion
1091 /// is not an option. See TryImplicitConversion for more information.
1092 static ImplicitConversionSequence
TryUserDefinedConversion(Sema & S,Expr * From,QualType ToType,bool SuppressUserConversions,bool AllowExplicit,bool InOverloadResolution,bool CStyle,bool AllowObjCWritebackConversion)1093 TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1094                          bool SuppressUserConversions,
1095                          bool AllowExplicit,
1096                          bool InOverloadResolution,
1097                          bool CStyle,
1098                          bool AllowObjCWritebackConversion) {
1099   ImplicitConversionSequence ICS;
1100 
1101   if (SuppressUserConversions) {
1102     // We're not in the case above, so there is no conversion that
1103     // we can perform.
1104     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1105     return ICS;
1106   }
1107 
1108   // Attempt user-defined conversion.
1109   OverloadCandidateSet Conversions(From->getExprLoc());
1110   OverloadingResult UserDefResult
1111     = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1112                               AllowExplicit);
1113 
1114   if (UserDefResult == OR_Success) {
1115     ICS.setUserDefined();
1116     // C++ [over.ics.user]p4:
1117     //   A conversion of an expression of class type to the same class
1118     //   type is given Exact Match rank, and a conversion of an
1119     //   expression of class type to a base class of that type is
1120     //   given Conversion rank, in spite of the fact that a copy
1121     //   constructor (i.e., a user-defined conversion function) is
1122     //   called for those cases.
1123     if (CXXConstructorDecl *Constructor
1124           = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1125       QualType FromCanon
1126         = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1127       QualType ToCanon
1128         = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1129       if (Constructor->isCopyConstructor() &&
1130           (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1131         // Turn this into a "standard" conversion sequence, so that it
1132         // gets ranked with standard conversion sequences.
1133         ICS.setStandard();
1134         ICS.Standard.setAsIdentityConversion();
1135         ICS.Standard.setFromType(From->getType());
1136         ICS.Standard.setAllToTypes(ToType);
1137         ICS.Standard.CopyConstructor = Constructor;
1138         if (ToCanon != FromCanon)
1139           ICS.Standard.Second = ICK_Derived_To_Base;
1140       }
1141     }
1142 
1143     // C++ [over.best.ics]p4:
1144     //   However, when considering the argument of a user-defined
1145     //   conversion function that is a candidate by 13.3.1.3 when
1146     //   invoked for the copying of the temporary in the second step
1147     //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1148     //   13.3.1.6 in all cases, only standard conversion sequences and
1149     //   ellipsis conversion sequences are allowed.
1150     if (SuppressUserConversions && ICS.isUserDefined()) {
1151       ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1152     }
1153   } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1154     ICS.setAmbiguous();
1155     ICS.Ambiguous.setFromType(From->getType());
1156     ICS.Ambiguous.setToType(ToType);
1157     for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1158          Cand != Conversions.end(); ++Cand)
1159       if (Cand->Viable)
1160         ICS.Ambiguous.addConversion(Cand->Function);
1161   } else {
1162     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1163   }
1164 
1165   return ICS;
1166 }
1167 
1168 /// TryImplicitConversion - Attempt to perform an implicit conversion
1169 /// from the given expression (Expr) to the given type (ToType). This
1170 /// function returns an implicit conversion sequence that can be used
1171 /// to perform the initialization. Given
1172 ///
1173 ///   void f(float f);
1174 ///   void g(int i) { f(i); }
1175 ///
1176 /// this routine would produce an implicit conversion sequence to
1177 /// describe the initialization of f from i, which will be a standard
1178 /// conversion sequence containing an lvalue-to-rvalue conversion (C++
1179 /// 4.1) followed by a floating-integral conversion (C++ 4.9).
1180 //
1181 /// Note that this routine only determines how the conversion can be
1182 /// performed; it does not actually perform the conversion. As such,
1183 /// it will not produce any diagnostics if no conversion is available,
1184 /// but will instead return an implicit conversion sequence of kind
1185 /// "BadConversion".
1186 ///
1187 /// If @p SuppressUserConversions, then user-defined conversions are
1188 /// not permitted.
1189 /// If @p AllowExplicit, then explicit user-defined conversions are
1190 /// permitted.
1191 ///
1192 /// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1193 /// writeback conversion, which allows __autoreleasing id* parameters to
1194 /// be initialized with __strong id* or __weak id* arguments.
1195 static ImplicitConversionSequence
TryImplicitConversion(Sema & S,Expr * From,QualType ToType,bool SuppressUserConversions,bool AllowExplicit,bool InOverloadResolution,bool CStyle,bool AllowObjCWritebackConversion)1196 TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1197                       bool SuppressUserConversions,
1198                       bool AllowExplicit,
1199                       bool InOverloadResolution,
1200                       bool CStyle,
1201                       bool AllowObjCWritebackConversion) {
1202   ImplicitConversionSequence ICS;
1203   if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1204                            ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1205     ICS.setStandard();
1206     return ICS;
1207   }
1208 
1209   if (!S.getLangOpts().CPlusPlus) {
1210     ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1211     return ICS;
1212   }
1213 
1214   // C++ [over.ics.user]p4:
1215   //   A conversion of an expression of class type to the same class
1216   //   type is given Exact Match rank, and a conversion of an
1217   //   expression of class type to a base class of that type is
1218   //   given Conversion rank, in spite of the fact that a copy/move
1219   //   constructor (i.e., a user-defined conversion function) is
1220   //   called for those cases.
1221   QualType FromType = From->getType();
1222   if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1223       (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1224        S.IsDerivedFrom(FromType, ToType))) {
1225     ICS.setStandard();
1226     ICS.Standard.setAsIdentityConversion();
1227     ICS.Standard.setFromType(FromType);
1228     ICS.Standard.setAllToTypes(ToType);
1229 
1230     // We don't actually check at this point whether there is a valid
1231     // copy/move constructor, since overloading just assumes that it
1232     // exists. When we actually perform initialization, we'll find the
1233     // appropriate constructor to copy the returned object, if needed.
1234     ICS.Standard.CopyConstructor = 0;
1235 
1236     // Determine whether this is considered a derived-to-base conversion.
1237     if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1238       ICS.Standard.Second = ICK_Derived_To_Base;
1239 
1240     return ICS;
1241   }
1242 
1243   return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1244                                   AllowExplicit, InOverloadResolution, CStyle,
1245                                   AllowObjCWritebackConversion);
1246 }
1247 
1248 ImplicitConversionSequence
TryImplicitConversion(Expr * From,QualType ToType,bool SuppressUserConversions,bool AllowExplicit,bool InOverloadResolution,bool CStyle,bool AllowObjCWritebackConversion)1249 Sema::TryImplicitConversion(Expr *From, QualType ToType,
1250                             bool SuppressUserConversions,
1251                             bool AllowExplicit,
1252                             bool InOverloadResolution,
1253                             bool CStyle,
1254                             bool AllowObjCWritebackConversion) {
1255   return clang::TryImplicitConversion(*this, From, ToType,
1256                                       SuppressUserConversions, AllowExplicit,
1257                                       InOverloadResolution, CStyle,
1258                                       AllowObjCWritebackConversion);
1259 }
1260 
1261 /// PerformImplicitConversion - Perform an implicit conversion of the
1262 /// expression From to the type ToType. Returns the
1263 /// converted expression. Flavor is the kind of conversion we're
1264 /// performing, used in the error message. If @p AllowExplicit,
1265 /// explicit user-defined conversions are permitted.
1266 ExprResult
PerformImplicitConversion(Expr * From,QualType ToType,AssignmentAction Action,bool AllowExplicit)1267 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1268                                 AssignmentAction Action, bool AllowExplicit) {
1269   ImplicitConversionSequence ICS;
1270   return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1271 }
1272 
1273 ExprResult
PerformImplicitConversion(Expr * From,QualType ToType,AssignmentAction Action,bool AllowExplicit,ImplicitConversionSequence & ICS)1274 Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1275                                 AssignmentAction Action, bool AllowExplicit,
1276                                 ImplicitConversionSequence& ICS) {
1277   if (checkPlaceholderForOverload(*this, From))
1278     return ExprError();
1279 
1280   // Objective-C ARC: Determine whether we will allow the writeback conversion.
1281   bool AllowObjCWritebackConversion
1282     = getLangOpts().ObjCAutoRefCount &&
1283       (Action == AA_Passing || Action == AA_Sending);
1284 
1285   ICS = clang::TryImplicitConversion(*this, From, ToType,
1286                                      /*SuppressUserConversions=*/false,
1287                                      AllowExplicit,
1288                                      /*InOverloadResolution=*/false,
1289                                      /*CStyle=*/false,
1290                                      AllowObjCWritebackConversion);
1291   return PerformImplicitConversion(From, ToType, ICS, Action);
1292 }
1293 
1294 /// \brief Determine whether the conversion from FromType to ToType is a valid
1295 /// conversion that strips "noreturn" off the nested function type.
IsNoReturnConversion(QualType FromType,QualType ToType,QualType & ResultTy)1296 bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1297                                 QualType &ResultTy) {
1298   if (Context.hasSameUnqualifiedType(FromType, ToType))
1299     return false;
1300 
1301   // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1302   // where F adds one of the following at most once:
1303   //   - a pointer
1304   //   - a member pointer
1305   //   - a block pointer
1306   CanQualType CanTo = Context.getCanonicalType(ToType);
1307   CanQualType CanFrom = Context.getCanonicalType(FromType);
1308   Type::TypeClass TyClass = CanTo->getTypeClass();
1309   if (TyClass != CanFrom->getTypeClass()) return false;
1310   if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1311     if (TyClass == Type::Pointer) {
1312       CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1313       CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1314     } else if (TyClass == Type::BlockPointer) {
1315       CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1316       CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1317     } else if (TyClass == Type::MemberPointer) {
1318       CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1319       CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1320     } else {
1321       return false;
1322     }
1323 
1324     TyClass = CanTo->getTypeClass();
1325     if (TyClass != CanFrom->getTypeClass()) return false;
1326     if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1327       return false;
1328   }
1329 
1330   const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1331   FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1332   if (!EInfo.getNoReturn()) return false;
1333 
1334   FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1335   assert(QualType(FromFn, 0).isCanonical());
1336   if (QualType(FromFn, 0) != CanTo) return false;
1337 
1338   ResultTy = ToType;
1339   return true;
1340 }
1341 
1342 /// \brief Determine whether the conversion from FromType to ToType is a valid
1343 /// vector conversion.
1344 ///
1345 /// \param ICK Will be set to the vector conversion kind, if this is a vector
1346 /// conversion.
IsVectorConversion(ASTContext & Context,QualType FromType,QualType ToType,ImplicitConversionKind & ICK)1347 static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1348                                QualType ToType, ImplicitConversionKind &ICK) {
1349   // We need at least one of these types to be a vector type to have a vector
1350   // conversion.
1351   if (!ToType->isVectorType() && !FromType->isVectorType())
1352     return false;
1353 
1354   // Identical types require no conversions.
1355   if (Context.hasSameUnqualifiedType(FromType, ToType))
1356     return false;
1357 
1358   // There are no conversions between extended vector types, only identity.
1359   if (ToType->isExtVectorType()) {
1360     // There are no conversions between extended vector types other than the
1361     // identity conversion.
1362     if (FromType->isExtVectorType())
1363       return false;
1364 
1365     // Vector splat from any arithmetic type to a vector.
1366     if (FromType->isArithmeticType()) {
1367       ICK = ICK_Vector_Splat;
1368       return true;
1369     }
1370   }
1371 
1372   // We can perform the conversion between vector types in the following cases:
1373   // 1)vector types are equivalent AltiVec and GCC vector types
1374   // 2)lax vector conversions are permitted and the vector types are of the
1375   //   same size
1376   if (ToType->isVectorType() && FromType->isVectorType()) {
1377     if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1378         (Context.getLangOpts().LaxVectorConversions &&
1379          (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1380       ICK = ICK_Vector_Conversion;
1381       return true;
1382     }
1383   }
1384 
1385   return false;
1386 }
1387 
1388 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1389                                 bool InOverloadResolution,
1390                                 StandardConversionSequence &SCS,
1391                                 bool CStyle);
1392 
1393 /// IsStandardConversion - Determines whether there is a standard
1394 /// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1395 /// expression From to the type ToType. Standard conversion sequences
1396 /// only consider non-class types; for conversions that involve class
1397 /// types, use TryImplicitConversion. If a conversion exists, SCS will
1398 /// contain the standard conversion sequence required to perform this
1399 /// conversion and this routine will return true. Otherwise, this
1400 /// routine will return false and the value of SCS is unspecified.
IsStandardConversion(Sema & S,Expr * From,QualType ToType,bool InOverloadResolution,StandardConversionSequence & SCS,bool CStyle,bool AllowObjCWritebackConversion)1401 static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1402                                  bool InOverloadResolution,
1403                                  StandardConversionSequence &SCS,
1404                                  bool CStyle,
1405                                  bool AllowObjCWritebackConversion) {
1406   QualType FromType = From->getType();
1407 
1408   // Standard conversions (C++ [conv])
1409   SCS.setAsIdentityConversion();
1410   SCS.DeprecatedStringLiteralToCharPtr = false;
1411   SCS.IncompatibleObjC = false;
1412   SCS.setFromType(FromType);
1413   SCS.CopyConstructor = 0;
1414 
1415   // There are no standard conversions for class types in C++, so
1416   // abort early. When overloading in C, however, we do permit
1417   if (FromType->isRecordType() || ToType->isRecordType()) {
1418     if (S.getLangOpts().CPlusPlus)
1419       return false;
1420 
1421     // When we're overloading in C, we allow, as standard conversions,
1422   }
1423 
1424   // The first conversion can be an lvalue-to-rvalue conversion,
1425   // array-to-pointer conversion, or function-to-pointer conversion
1426   // (C++ 4p1).
1427 
1428   if (FromType == S.Context.OverloadTy) {
1429     DeclAccessPair AccessPair;
1430     if (FunctionDecl *Fn
1431           = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1432                                                  AccessPair)) {
1433       // We were able to resolve the address of the overloaded function,
1434       // so we can convert to the type of that function.
1435       FromType = Fn->getType();
1436 
1437       // we can sometimes resolve &foo<int> regardless of ToType, so check
1438       // if the type matches (identity) or we are converting to bool
1439       if (!S.Context.hasSameUnqualifiedType(
1440                       S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1441         QualType resultTy;
1442         // if the function type matches except for [[noreturn]], it's ok
1443         if (!S.IsNoReturnConversion(FromType,
1444               S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1445           // otherwise, only a boolean conversion is standard
1446           if (!ToType->isBooleanType())
1447             return false;
1448       }
1449 
1450       // Check if the "from" expression is taking the address of an overloaded
1451       // function and recompute the FromType accordingly. Take advantage of the
1452       // fact that non-static member functions *must* have such an address-of
1453       // expression.
1454       CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1455       if (Method && !Method->isStatic()) {
1456         assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1457                "Non-unary operator on non-static member address");
1458         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1459                == UO_AddrOf &&
1460                "Non-address-of operator on non-static member address");
1461         const Type *ClassType
1462           = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1463         FromType = S.Context.getMemberPointerType(FromType, ClassType);
1464       } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1465         assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1466                UO_AddrOf &&
1467                "Non-address-of operator for overloaded function expression");
1468         FromType = S.Context.getPointerType(FromType);
1469       }
1470 
1471       // Check that we've computed the proper type after overload resolution.
1472       assert(S.Context.hasSameType(
1473         FromType,
1474         S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1475     } else {
1476       return false;
1477     }
1478   }
1479   // Lvalue-to-rvalue conversion (C++11 4.1):
1480   //   A glvalue (3.10) of a non-function, non-array type T can
1481   //   be converted to a prvalue.
1482   bool argIsLValue = From->isGLValue();
1483   if (argIsLValue &&
1484       !FromType->isFunctionType() && !FromType->isArrayType() &&
1485       S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1486     SCS.First = ICK_Lvalue_To_Rvalue;
1487 
1488     // C11 6.3.2.1p2:
1489     //   ... if the lvalue has atomic type, the value has the non-atomic version
1490     //   of the type of the lvalue ...
1491     if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1492       FromType = Atomic->getValueType();
1493 
1494     // If T is a non-class type, the type of the rvalue is the
1495     // cv-unqualified version of T. Otherwise, the type of the rvalue
1496     // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1497     // just strip the qualifiers because they don't matter.
1498     FromType = FromType.getUnqualifiedType();
1499   } else if (FromType->isArrayType()) {
1500     // Array-to-pointer conversion (C++ 4.2)
1501     SCS.First = ICK_Array_To_Pointer;
1502 
1503     // An lvalue or rvalue of type "array of N T" or "array of unknown
1504     // bound of T" can be converted to an rvalue of type "pointer to
1505     // T" (C++ 4.2p1).
1506     FromType = S.Context.getArrayDecayedType(FromType);
1507 
1508     if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1509       // This conversion is deprecated. (C++ D.4).
1510       SCS.DeprecatedStringLiteralToCharPtr = true;
1511 
1512       // For the purpose of ranking in overload resolution
1513       // (13.3.3.1.1), this conversion is considered an
1514       // array-to-pointer conversion followed by a qualification
1515       // conversion (4.4). (C++ 4.2p2)
1516       SCS.Second = ICK_Identity;
1517       SCS.Third = ICK_Qualification;
1518       SCS.QualificationIncludesObjCLifetime = false;
1519       SCS.setAllToTypes(FromType);
1520       return true;
1521     }
1522   } else if (FromType->isFunctionType() && argIsLValue) {
1523     // Function-to-pointer conversion (C++ 4.3).
1524     SCS.First = ICK_Function_To_Pointer;
1525 
1526     // An lvalue of function type T can be converted to an rvalue of
1527     // type "pointer to T." The result is a pointer to the
1528     // function. (C++ 4.3p1).
1529     FromType = S.Context.getPointerType(FromType);
1530   } else {
1531     // We don't require any conversions for the first step.
1532     SCS.First = ICK_Identity;
1533   }
1534   SCS.setToType(0, FromType);
1535 
1536   // The second conversion can be an integral promotion, floating
1537   // point promotion, integral conversion, floating point conversion,
1538   // floating-integral conversion, pointer conversion,
1539   // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1540   // For overloading in C, this can also be a "compatible-type"
1541   // conversion.
1542   bool IncompatibleObjC = false;
1543   ImplicitConversionKind SecondICK = ICK_Identity;
1544   if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1545     // The unqualified versions of the types are the same: there's no
1546     // conversion to do.
1547     SCS.Second = ICK_Identity;
1548   } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1549     // Integral promotion (C++ 4.5).
1550     SCS.Second = ICK_Integral_Promotion;
1551     FromType = ToType.getUnqualifiedType();
1552   } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1553     // Floating point promotion (C++ 4.6).
1554     SCS.Second = ICK_Floating_Promotion;
1555     FromType = ToType.getUnqualifiedType();
1556   } else if (S.IsComplexPromotion(FromType, ToType)) {
1557     // Complex promotion (Clang extension)
1558     SCS.Second = ICK_Complex_Promotion;
1559     FromType = ToType.getUnqualifiedType();
1560   } else if (ToType->isBooleanType() &&
1561              (FromType->isArithmeticType() ||
1562               FromType->isAnyPointerType() ||
1563               FromType->isBlockPointerType() ||
1564               FromType->isMemberPointerType() ||
1565               FromType->isNullPtrType())) {
1566     // Boolean conversions (C++ 4.12).
1567     SCS.Second = ICK_Boolean_Conversion;
1568     FromType = S.Context.BoolTy;
1569   } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1570              ToType->isIntegralType(S.Context)) {
1571     // Integral conversions (C++ 4.7).
1572     SCS.Second = ICK_Integral_Conversion;
1573     FromType = ToType.getUnqualifiedType();
1574   } else if (FromType->isAnyComplexType() && ToType->isAnyComplexType()) {
1575     // Complex conversions (C99 6.3.1.6)
1576     SCS.Second = ICK_Complex_Conversion;
1577     FromType = ToType.getUnqualifiedType();
1578   } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1579              (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1580     // Complex-real conversions (C99 6.3.1.7)
1581     SCS.Second = ICK_Complex_Real;
1582     FromType = ToType.getUnqualifiedType();
1583   } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1584     // Floating point conversions (C++ 4.8).
1585     SCS.Second = ICK_Floating_Conversion;
1586     FromType = ToType.getUnqualifiedType();
1587   } else if ((FromType->isRealFloatingType() &&
1588               ToType->isIntegralType(S.Context)) ||
1589              (FromType->isIntegralOrUnscopedEnumerationType() &&
1590               ToType->isRealFloatingType())) {
1591     // Floating-integral conversions (C++ 4.9).
1592     SCS.Second = ICK_Floating_Integral;
1593     FromType = ToType.getUnqualifiedType();
1594   } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1595     SCS.Second = ICK_Block_Pointer_Conversion;
1596   } else if (AllowObjCWritebackConversion &&
1597              S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1598     SCS.Second = ICK_Writeback_Conversion;
1599   } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1600                                    FromType, IncompatibleObjC)) {
1601     // Pointer conversions (C++ 4.10).
1602     SCS.Second = ICK_Pointer_Conversion;
1603     SCS.IncompatibleObjC = IncompatibleObjC;
1604     FromType = FromType.getUnqualifiedType();
1605   } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1606                                          InOverloadResolution, FromType)) {
1607     // Pointer to member conversions (4.11).
1608     SCS.Second = ICK_Pointer_Member;
1609   } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1610     SCS.Second = SecondICK;
1611     FromType = ToType.getUnqualifiedType();
1612   } else if (!S.getLangOpts().CPlusPlus &&
1613              S.Context.typesAreCompatible(ToType, FromType)) {
1614     // Compatible conversions (Clang extension for C function overloading)
1615     SCS.Second = ICK_Compatible_Conversion;
1616     FromType = ToType.getUnqualifiedType();
1617   } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1618     // Treat a conversion that strips "noreturn" as an identity conversion.
1619     SCS.Second = ICK_NoReturn_Adjustment;
1620   } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1621                                              InOverloadResolution,
1622                                              SCS, CStyle)) {
1623     SCS.Second = ICK_TransparentUnionConversion;
1624     FromType = ToType;
1625   } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1626                                  CStyle)) {
1627     // tryAtomicConversion has updated the standard conversion sequence
1628     // appropriately.
1629     return true;
1630   } else if (ToType->isEventT() &&
1631              From->isIntegerConstantExpr(S.getASTContext()) &&
1632              (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
1633     SCS.Second = ICK_Zero_Event_Conversion;
1634     FromType = ToType;
1635   } else {
1636     // No second conversion required.
1637     SCS.Second = ICK_Identity;
1638   }
1639   SCS.setToType(1, FromType);
1640 
1641   QualType CanonFrom;
1642   QualType CanonTo;
1643   // The third conversion can be a qualification conversion (C++ 4p1).
1644   bool ObjCLifetimeConversion;
1645   if (S.IsQualificationConversion(FromType, ToType, CStyle,
1646                                   ObjCLifetimeConversion)) {
1647     SCS.Third = ICK_Qualification;
1648     SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1649     FromType = ToType;
1650     CanonFrom = S.Context.getCanonicalType(FromType);
1651     CanonTo = S.Context.getCanonicalType(ToType);
1652   } else {
1653     // No conversion required
1654     SCS.Third = ICK_Identity;
1655 
1656     // C++ [over.best.ics]p6:
1657     //   [...] Any difference in top-level cv-qualification is
1658     //   subsumed by the initialization itself and does not constitute
1659     //   a conversion. [...]
1660     CanonFrom = S.Context.getCanonicalType(FromType);
1661     CanonTo = S.Context.getCanonicalType(ToType);
1662     if (CanonFrom.getLocalUnqualifiedType()
1663                                        == CanonTo.getLocalUnqualifiedType() &&
1664         CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
1665       FromType = ToType;
1666       CanonFrom = CanonTo;
1667     }
1668   }
1669   SCS.setToType(2, FromType);
1670 
1671   // If we have not converted the argument type to the parameter type,
1672   // this is a bad conversion sequence.
1673   if (CanonFrom != CanonTo)
1674     return false;
1675 
1676   return true;
1677 }
1678 
1679 static bool
IsTransparentUnionStandardConversion(Sema & S,Expr * From,QualType & ToType,bool InOverloadResolution,StandardConversionSequence & SCS,bool CStyle)1680 IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1681                                      QualType &ToType,
1682                                      bool InOverloadResolution,
1683                                      StandardConversionSequence &SCS,
1684                                      bool CStyle) {
1685 
1686   const RecordType *UT = ToType->getAsUnionType();
1687   if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1688     return false;
1689   // The field to initialize within the transparent union.
1690   RecordDecl *UD = UT->getDecl();
1691   // It's compatible if the expression matches any of the fields.
1692   for (RecordDecl::field_iterator it = UD->field_begin(),
1693        itend = UD->field_end();
1694        it != itend; ++it) {
1695     if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1696                              CStyle, /*ObjCWritebackConversion=*/false)) {
1697       ToType = it->getType();
1698       return true;
1699     }
1700   }
1701   return false;
1702 }
1703 
1704 /// IsIntegralPromotion - Determines whether the conversion from the
1705 /// expression From (whose potentially-adjusted type is FromType) to
1706 /// ToType is an integral promotion (C++ 4.5). If so, returns true and
1707 /// sets PromotedType to the promoted type.
IsIntegralPromotion(Expr * From,QualType FromType,QualType ToType)1708 bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1709   const BuiltinType *To = ToType->getAs<BuiltinType>();
1710   // All integers are built-in.
1711   if (!To) {
1712     return false;
1713   }
1714 
1715   // An rvalue of type char, signed char, unsigned char, short int, or
1716   // unsigned short int can be converted to an rvalue of type int if
1717   // int can represent all the values of the source type; otherwise,
1718   // the source rvalue can be converted to an rvalue of type unsigned
1719   // int (C++ 4.5p1).
1720   if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1721       !FromType->isEnumeralType()) {
1722     if (// We can promote any signed, promotable integer type to an int
1723         (FromType->isSignedIntegerType() ||
1724          // We can promote any unsigned integer type whose size is
1725          // less than int to an int.
1726          (!FromType->isSignedIntegerType() &&
1727           Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1728       return To->getKind() == BuiltinType::Int;
1729     }
1730 
1731     return To->getKind() == BuiltinType::UInt;
1732   }
1733 
1734   // C++11 [conv.prom]p3:
1735   //   A prvalue of an unscoped enumeration type whose underlying type is not
1736   //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1737   //   following types that can represent all the values of the enumeration
1738   //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1739   //   unsigned int, long int, unsigned long int, long long int, or unsigned
1740   //   long long int. If none of the types in that list can represent all the
1741   //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1742   //   type can be converted to an rvalue a prvalue of the extended integer type
1743   //   with lowest integer conversion rank (4.13) greater than the rank of long
1744   //   long in which all the values of the enumeration can be represented. If
1745   //   there are two such extended types, the signed one is chosen.
1746   // C++11 [conv.prom]p4:
1747   //   A prvalue of an unscoped enumeration type whose underlying type is fixed
1748   //   can be converted to a prvalue of its underlying type. Moreover, if
1749   //   integral promotion can be applied to its underlying type, a prvalue of an
1750   //   unscoped enumeration type whose underlying type is fixed can also be
1751   //   converted to a prvalue of the promoted underlying type.
1752   if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1753     // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1754     // provided for a scoped enumeration.
1755     if (FromEnumType->getDecl()->isScoped())
1756       return false;
1757 
1758     // We can perform an integral promotion to the underlying type of the enum,
1759     // even if that's not the promoted type.
1760     if (FromEnumType->getDecl()->isFixed()) {
1761       QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1762       return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1763              IsIntegralPromotion(From, Underlying, ToType);
1764     }
1765 
1766     // We have already pre-calculated the promotion type, so this is trivial.
1767     if (ToType->isIntegerType() &&
1768         !RequireCompleteType(From->getLocStart(), FromType, 0))
1769       return Context.hasSameUnqualifiedType(ToType,
1770                                 FromEnumType->getDecl()->getPromotionType());
1771   }
1772 
1773   // C++0x [conv.prom]p2:
1774   //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1775   //   to an rvalue a prvalue of the first of the following types that can
1776   //   represent all the values of its underlying type: int, unsigned int,
1777   //   long int, unsigned long int, long long int, or unsigned long long int.
1778   //   If none of the types in that list can represent all the values of its
1779   //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1780   //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1781   //   type.
1782   if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1783       ToType->isIntegerType()) {
1784     // Determine whether the type we're converting from is signed or
1785     // unsigned.
1786     bool FromIsSigned = FromType->isSignedIntegerType();
1787     uint64_t FromSize = Context.getTypeSize(FromType);
1788 
1789     // The types we'll try to promote to, in the appropriate
1790     // order. Try each of these types.
1791     QualType PromoteTypes[6] = {
1792       Context.IntTy, Context.UnsignedIntTy,
1793       Context.LongTy, Context.UnsignedLongTy ,
1794       Context.LongLongTy, Context.UnsignedLongLongTy
1795     };
1796     for (int Idx = 0; Idx < 6; ++Idx) {
1797       uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1798       if (FromSize < ToSize ||
1799           (FromSize == ToSize &&
1800            FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1801         // We found the type that we can promote to. If this is the
1802         // type we wanted, we have a promotion. Otherwise, no
1803         // promotion.
1804         return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1805       }
1806     }
1807   }
1808 
1809   // An rvalue for an integral bit-field (9.6) can be converted to an
1810   // rvalue of type int if int can represent all the values of the
1811   // bit-field; otherwise, it can be converted to unsigned int if
1812   // unsigned int can represent all the values of the bit-field. If
1813   // the bit-field is larger yet, no integral promotion applies to
1814   // it. If the bit-field has an enumerated type, it is treated as any
1815   // other value of that type for promotion purposes (C++ 4.5p3).
1816   // FIXME: We should delay checking of bit-fields until we actually perform the
1817   // conversion.
1818   using llvm::APSInt;
1819   if (From)
1820     if (FieldDecl *MemberDecl = From->getSourceBitField()) {
1821       APSInt BitWidth;
1822       if (FromType->isIntegralType(Context) &&
1823           MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1824         APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1825         ToSize = Context.getTypeSize(ToType);
1826 
1827         // Are we promoting to an int from a bitfield that fits in an int?
1828         if (BitWidth < ToSize ||
1829             (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1830           return To->getKind() == BuiltinType::Int;
1831         }
1832 
1833         // Are we promoting to an unsigned int from an unsigned bitfield
1834         // that fits into an unsigned int?
1835         if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1836           return To->getKind() == BuiltinType::UInt;
1837         }
1838 
1839         return false;
1840       }
1841     }
1842 
1843   // An rvalue of type bool can be converted to an rvalue of type int,
1844   // with false becoming zero and true becoming one (C++ 4.5p4).
1845   if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1846     return true;
1847   }
1848 
1849   return false;
1850 }
1851 
1852 /// IsFloatingPointPromotion - Determines whether the conversion from
1853 /// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1854 /// returns true and sets PromotedType to the promoted type.
IsFloatingPointPromotion(QualType FromType,QualType ToType)1855 bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1856   if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1857     if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1858       /// An rvalue of type float can be converted to an rvalue of type
1859       /// double. (C++ 4.6p1).
1860       if (FromBuiltin->getKind() == BuiltinType::Float &&
1861           ToBuiltin->getKind() == BuiltinType::Double)
1862         return true;
1863 
1864       // C99 6.3.1.5p1:
1865       //   When a float is promoted to double or long double, or a
1866       //   double is promoted to long double [...].
1867       if (!getLangOpts().CPlusPlus &&
1868           (FromBuiltin->getKind() == BuiltinType::Float ||
1869            FromBuiltin->getKind() == BuiltinType::Double) &&
1870           (ToBuiltin->getKind() == BuiltinType::LongDouble))
1871         return true;
1872 
1873       // Half can be promoted to float.
1874       if (!getLangOpts().NativeHalfType &&
1875            FromBuiltin->getKind() == BuiltinType::Half &&
1876           ToBuiltin->getKind() == BuiltinType::Float)
1877         return true;
1878     }
1879 
1880   return false;
1881 }
1882 
1883 /// \brief Determine if a conversion is a complex promotion.
1884 ///
1885 /// A complex promotion is defined as a complex -> complex conversion
1886 /// where the conversion between the underlying real types is a
1887 /// floating-point or integral promotion.
IsComplexPromotion(QualType FromType,QualType ToType)1888 bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1889   const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1890   if (!FromComplex)
1891     return false;
1892 
1893   const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1894   if (!ToComplex)
1895     return false;
1896 
1897   return IsFloatingPointPromotion(FromComplex->getElementType(),
1898                                   ToComplex->getElementType()) ||
1899     IsIntegralPromotion(0, FromComplex->getElementType(),
1900                         ToComplex->getElementType());
1901 }
1902 
1903 /// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1904 /// the pointer type FromPtr to a pointer to type ToPointee, with the
1905 /// same type qualifiers as FromPtr has on its pointee type. ToType,
1906 /// if non-empty, will be a pointer to ToType that may or may not have
1907 /// the right set of qualifiers on its pointee.
1908 ///
1909 static QualType
BuildSimilarlyQualifiedPointerType(const Type * FromPtr,QualType ToPointee,QualType ToType,ASTContext & Context,bool StripObjCLifetime=false)1910 BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1911                                    QualType ToPointee, QualType ToType,
1912                                    ASTContext &Context,
1913                                    bool StripObjCLifetime = false) {
1914   assert((FromPtr->getTypeClass() == Type::Pointer ||
1915           FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1916          "Invalid similarly-qualified pointer type");
1917 
1918   /// Conversions to 'id' subsume cv-qualifier conversions.
1919   if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1920     return ToType.getUnqualifiedType();
1921 
1922   QualType CanonFromPointee
1923     = Context.getCanonicalType(FromPtr->getPointeeType());
1924   QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1925   Qualifiers Quals = CanonFromPointee.getQualifiers();
1926 
1927   if (StripObjCLifetime)
1928     Quals.removeObjCLifetime();
1929 
1930   // Exact qualifier match -> return the pointer type we're converting to.
1931   if (CanonToPointee.getLocalQualifiers() == Quals) {
1932     // ToType is exactly what we need. Return it.
1933     if (!ToType.isNull())
1934       return ToType.getUnqualifiedType();
1935 
1936     // Build a pointer to ToPointee. It has the right qualifiers
1937     // already.
1938     if (isa<ObjCObjectPointerType>(ToType))
1939       return Context.getObjCObjectPointerType(ToPointee);
1940     return Context.getPointerType(ToPointee);
1941   }
1942 
1943   // Just build a canonical type that has the right qualifiers.
1944   QualType QualifiedCanonToPointee
1945     = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1946 
1947   if (isa<ObjCObjectPointerType>(ToType))
1948     return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1949   return Context.getPointerType(QualifiedCanonToPointee);
1950 }
1951 
isNullPointerConstantForConversion(Expr * Expr,bool InOverloadResolution,ASTContext & Context)1952 static bool isNullPointerConstantForConversion(Expr *Expr,
1953                                                bool InOverloadResolution,
1954                                                ASTContext &Context) {
1955   // Handle value-dependent integral null pointer constants correctly.
1956   // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1957   if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1958       Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1959     return !InOverloadResolution;
1960 
1961   return Expr->isNullPointerConstant(Context,
1962                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1963                                         : Expr::NPC_ValueDependentIsNull);
1964 }
1965 
1966 /// IsPointerConversion - Determines whether the conversion of the
1967 /// expression From, which has the (possibly adjusted) type FromType,
1968 /// can be converted to the type ToType via a pointer conversion (C++
1969 /// 4.10). If so, returns true and places the converted type (that
1970 /// might differ from ToType in its cv-qualifiers at some level) into
1971 /// ConvertedType.
1972 ///
1973 /// This routine also supports conversions to and from block pointers
1974 /// and conversions with Objective-C's 'id', 'id<protocols...>', and
1975 /// pointers to interfaces. FIXME: Once we've determined the
1976 /// appropriate overloading rules for Objective-C, we may want to
1977 /// split the Objective-C checks into a different routine; however,
1978 /// GCC seems to consider all of these conversions to be pointer
1979 /// conversions, so for now they live here. IncompatibleObjC will be
1980 /// set if the conversion is an allowed Objective-C conversion that
1981 /// should result in a warning.
IsPointerConversion(Expr * From,QualType FromType,QualType ToType,bool InOverloadResolution,QualType & ConvertedType,bool & IncompatibleObjC)1982 bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
1983                                bool InOverloadResolution,
1984                                QualType& ConvertedType,
1985                                bool &IncompatibleObjC) {
1986   IncompatibleObjC = false;
1987   if (isObjCPointerConversion(FromType, ToType, ConvertedType,
1988                               IncompatibleObjC))
1989     return true;
1990 
1991   // Conversion from a null pointer constant to any Objective-C pointer type.
1992   if (ToType->isObjCObjectPointerType() &&
1993       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1994     ConvertedType = ToType;
1995     return true;
1996   }
1997 
1998   // Blocks: Block pointers can be converted to void*.
1999   if (FromType->isBlockPointerType() && ToType->isPointerType() &&
2000       ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
2001     ConvertedType = ToType;
2002     return true;
2003   }
2004   // Blocks: A null pointer constant can be converted to a block
2005   // pointer type.
2006   if (ToType->isBlockPointerType() &&
2007       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2008     ConvertedType = ToType;
2009     return true;
2010   }
2011 
2012   // If the left-hand-side is nullptr_t, the right side can be a null
2013   // pointer constant.
2014   if (ToType->isNullPtrType() &&
2015       isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2016     ConvertedType = ToType;
2017     return true;
2018   }
2019 
2020   const PointerType* ToTypePtr = ToType->getAs<PointerType>();
2021   if (!ToTypePtr)
2022     return false;
2023 
2024   // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
2025   if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2026     ConvertedType = ToType;
2027     return true;
2028   }
2029 
2030   // Beyond this point, both types need to be pointers
2031   // , including objective-c pointers.
2032   QualType ToPointeeType = ToTypePtr->getPointeeType();
2033   if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
2034       !getLangOpts().ObjCAutoRefCount) {
2035     ConvertedType = BuildSimilarlyQualifiedPointerType(
2036                                       FromType->getAs<ObjCObjectPointerType>(),
2037                                                        ToPointeeType,
2038                                                        ToType, Context);
2039     return true;
2040   }
2041   const PointerType *FromTypePtr = FromType->getAs<PointerType>();
2042   if (!FromTypePtr)
2043     return false;
2044 
2045   QualType FromPointeeType = FromTypePtr->getPointeeType();
2046 
2047   // If the unqualified pointee types are the same, this can't be a
2048   // pointer conversion, so don't do all of the work below.
2049   if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
2050     return false;
2051 
2052   // An rvalue of type "pointer to cv T," where T is an object type,
2053   // can be converted to an rvalue of type "pointer to cv void" (C++
2054   // 4.10p2).
2055   if (FromPointeeType->isIncompleteOrObjectType() &&
2056       ToPointeeType->isVoidType()) {
2057     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2058                                                        ToPointeeType,
2059                                                        ToType, Context,
2060                                                    /*StripObjCLifetime=*/true);
2061     return true;
2062   }
2063 
2064   // MSVC allows implicit function to void* type conversion.
2065   if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
2066       ToPointeeType->isVoidType()) {
2067     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2068                                                        ToPointeeType,
2069                                                        ToType, Context);
2070     return true;
2071   }
2072 
2073   // When we're overloading in C, we allow a special kind of pointer
2074   // conversion for compatible-but-not-identical pointee types.
2075   if (!getLangOpts().CPlusPlus &&
2076       Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2077     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2078                                                        ToPointeeType,
2079                                                        ToType, Context);
2080     return true;
2081   }
2082 
2083   // C++ [conv.ptr]p3:
2084   //
2085   //   An rvalue of type "pointer to cv D," where D is a class type,
2086   //   can be converted to an rvalue of type "pointer to cv B," where
2087   //   B is a base class (clause 10) of D. If B is an inaccessible
2088   //   (clause 11) or ambiguous (10.2) base class of D, a program that
2089   //   necessitates this conversion is ill-formed. The result of the
2090   //   conversion is a pointer to the base class sub-object of the
2091   //   derived class object. The null pointer value is converted to
2092   //   the null pointer value of the destination type.
2093   //
2094   // Note that we do not check for ambiguity or inaccessibility
2095   // here. That is handled by CheckPointerConversion.
2096   if (getLangOpts().CPlusPlus &&
2097       FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2098       !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2099       !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2100       IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2101     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2102                                                        ToPointeeType,
2103                                                        ToType, Context);
2104     return true;
2105   }
2106 
2107   if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2108       Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2109     ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2110                                                        ToPointeeType,
2111                                                        ToType, Context);
2112     return true;
2113   }
2114 
2115   return false;
2116 }
2117 
2118 /// \brief Adopt the given qualifiers for the given type.
AdoptQualifiers(ASTContext & Context,QualType T,Qualifiers Qs)2119 static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2120   Qualifiers TQs = T.getQualifiers();
2121 
2122   // Check whether qualifiers already match.
2123   if (TQs == Qs)
2124     return T;
2125 
2126   if (Qs.compatiblyIncludes(TQs))
2127     return Context.getQualifiedType(T, Qs);
2128 
2129   return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2130 }
2131 
2132 /// isObjCPointerConversion - Determines whether this is an
2133 /// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2134 /// with the same arguments and return values.
isObjCPointerConversion(QualType FromType,QualType ToType,QualType & ConvertedType,bool & IncompatibleObjC)2135 bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2136                                    QualType& ConvertedType,
2137                                    bool &IncompatibleObjC) {
2138   if (!getLangOpts().ObjC1)
2139     return false;
2140 
2141   // The set of qualifiers on the type we're converting from.
2142   Qualifiers FromQualifiers = FromType.getQualifiers();
2143 
2144   // First, we handle all conversions on ObjC object pointer types.
2145   const ObjCObjectPointerType* ToObjCPtr =
2146     ToType->getAs<ObjCObjectPointerType>();
2147   const ObjCObjectPointerType *FromObjCPtr =
2148     FromType->getAs<ObjCObjectPointerType>();
2149 
2150   if (ToObjCPtr && FromObjCPtr) {
2151     // If the pointee types are the same (ignoring qualifications),
2152     // then this is not a pointer conversion.
2153     if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2154                                        FromObjCPtr->getPointeeType()))
2155       return false;
2156 
2157     // Check for compatible
2158     // Objective C++: We're able to convert between "id" or "Class" and a
2159     // pointer to any interface (in both directions).
2160     if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2161       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2162       return true;
2163     }
2164     // Conversions with Objective-C's id<...>.
2165     if ((FromObjCPtr->isObjCQualifiedIdType() ||
2166          ToObjCPtr->isObjCQualifiedIdType()) &&
2167         Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2168                                                   /*compare=*/false)) {
2169       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2170       return true;
2171     }
2172     // Objective C++: We're able to convert from a pointer to an
2173     // interface to a pointer to a different interface.
2174     if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2175       const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2176       const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2177       if (getLangOpts().CPlusPlus && LHS && RHS &&
2178           !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2179                                                 FromObjCPtr->getPointeeType()))
2180         return false;
2181       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2182                                                    ToObjCPtr->getPointeeType(),
2183                                                          ToType, Context);
2184       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2185       return true;
2186     }
2187 
2188     if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2189       // Okay: this is some kind of implicit downcast of Objective-C
2190       // interfaces, which is permitted. However, we're going to
2191       // complain about it.
2192       IncompatibleObjC = true;
2193       ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2194                                                    ToObjCPtr->getPointeeType(),
2195                                                          ToType, Context);
2196       ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2197       return true;
2198     }
2199   }
2200   // Beyond this point, both types need to be C pointers or block pointers.
2201   QualType ToPointeeType;
2202   if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2203     ToPointeeType = ToCPtr->getPointeeType();
2204   else if (const BlockPointerType *ToBlockPtr =
2205             ToType->getAs<BlockPointerType>()) {
2206     // Objective C++: We're able to convert from a pointer to any object
2207     // to a block pointer type.
2208     if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2209       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2210       return true;
2211     }
2212     ToPointeeType = ToBlockPtr->getPointeeType();
2213   }
2214   else if (FromType->getAs<BlockPointerType>() &&
2215            ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2216     // Objective C++: We're able to convert from a block pointer type to a
2217     // pointer to any object.
2218     ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2219     return true;
2220   }
2221   else
2222     return false;
2223 
2224   QualType FromPointeeType;
2225   if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2226     FromPointeeType = FromCPtr->getPointeeType();
2227   else if (const BlockPointerType *FromBlockPtr =
2228            FromType->getAs<BlockPointerType>())
2229     FromPointeeType = FromBlockPtr->getPointeeType();
2230   else
2231     return false;
2232 
2233   // If we have pointers to pointers, recursively check whether this
2234   // is an Objective-C conversion.
2235   if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2236       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2237                               IncompatibleObjC)) {
2238     // We always complain about this conversion.
2239     IncompatibleObjC = true;
2240     ConvertedType = Context.getPointerType(ConvertedType);
2241     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2242     return true;
2243   }
2244   // Allow conversion of pointee being objective-c pointer to another one;
2245   // as in I* to id.
2246   if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2247       ToPointeeType->getAs<ObjCObjectPointerType>() &&
2248       isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2249                               IncompatibleObjC)) {
2250 
2251     ConvertedType = Context.getPointerType(ConvertedType);
2252     ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2253     return true;
2254   }
2255 
2256   // If we have pointers to functions or blocks, check whether the only
2257   // differences in the argument and result types are in Objective-C
2258   // pointer conversions. If so, we permit the conversion (but
2259   // complain about it).
2260   const FunctionProtoType *FromFunctionType
2261     = FromPointeeType->getAs<FunctionProtoType>();
2262   const FunctionProtoType *ToFunctionType
2263     = ToPointeeType->getAs<FunctionProtoType>();
2264   if (FromFunctionType && ToFunctionType) {
2265     // If the function types are exactly the same, this isn't an
2266     // Objective-C pointer conversion.
2267     if (Context.getCanonicalType(FromPointeeType)
2268           == Context.getCanonicalType(ToPointeeType))
2269       return false;
2270 
2271     // Perform the quick checks that will tell us whether these
2272     // function types are obviously different.
2273     if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2274         FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2275         FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2276       return false;
2277 
2278     bool HasObjCConversion = false;
2279     if (Context.getCanonicalType(FromFunctionType->getResultType())
2280           == Context.getCanonicalType(ToFunctionType->getResultType())) {
2281       // Okay, the types match exactly. Nothing to do.
2282     } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2283                                        ToFunctionType->getResultType(),
2284                                        ConvertedType, IncompatibleObjC)) {
2285       // Okay, we have an Objective-C pointer conversion.
2286       HasObjCConversion = true;
2287     } else {
2288       // Function types are too different. Abort.
2289       return false;
2290     }
2291 
2292     // Check argument types.
2293     for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2294          ArgIdx != NumArgs; ++ArgIdx) {
2295       QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2296       QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2297       if (Context.getCanonicalType(FromArgType)
2298             == Context.getCanonicalType(ToArgType)) {
2299         // Okay, the types match exactly. Nothing to do.
2300       } else if (isObjCPointerConversion(FromArgType, ToArgType,
2301                                          ConvertedType, IncompatibleObjC)) {
2302         // Okay, we have an Objective-C pointer conversion.
2303         HasObjCConversion = true;
2304       } else {
2305         // Argument types are too different. Abort.
2306         return false;
2307       }
2308     }
2309 
2310     if (HasObjCConversion) {
2311       // We had an Objective-C conversion. Allow this pointer
2312       // conversion, but complain about it.
2313       ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2314       IncompatibleObjC = true;
2315       return true;
2316     }
2317   }
2318 
2319   return false;
2320 }
2321 
2322 /// \brief Determine whether this is an Objective-C writeback conversion,
2323 /// used for parameter passing when performing automatic reference counting.
2324 ///
2325 /// \param FromType The type we're converting form.
2326 ///
2327 /// \param ToType The type we're converting to.
2328 ///
2329 /// \param ConvertedType The type that will be produced after applying
2330 /// this conversion.
isObjCWritebackConversion(QualType FromType,QualType ToType,QualType & ConvertedType)2331 bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2332                                      QualType &ConvertedType) {
2333   if (!getLangOpts().ObjCAutoRefCount ||
2334       Context.hasSameUnqualifiedType(FromType, ToType))
2335     return false;
2336 
2337   // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2338   QualType ToPointee;
2339   if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2340     ToPointee = ToPointer->getPointeeType();
2341   else
2342     return false;
2343 
2344   Qualifiers ToQuals = ToPointee.getQualifiers();
2345   if (!ToPointee->isObjCLifetimeType() ||
2346       ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2347       !ToQuals.withoutObjCLifetime().empty())
2348     return false;
2349 
2350   // Argument must be a pointer to __strong to __weak.
2351   QualType FromPointee;
2352   if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2353     FromPointee = FromPointer->getPointeeType();
2354   else
2355     return false;
2356 
2357   Qualifiers FromQuals = FromPointee.getQualifiers();
2358   if (!FromPointee->isObjCLifetimeType() ||
2359       (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2360        FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2361     return false;
2362 
2363   // Make sure that we have compatible qualifiers.
2364   FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2365   if (!ToQuals.compatiblyIncludes(FromQuals))
2366     return false;
2367 
2368   // Remove qualifiers from the pointee type we're converting from; they
2369   // aren't used in the compatibility check belong, and we'll be adding back
2370   // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2371   FromPointee = FromPointee.getUnqualifiedType();
2372 
2373   // The unqualified form of the pointee types must be compatible.
2374   ToPointee = ToPointee.getUnqualifiedType();
2375   bool IncompatibleObjC;
2376   if (Context.typesAreCompatible(FromPointee, ToPointee))
2377     FromPointee = ToPointee;
2378   else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2379                                     IncompatibleObjC))
2380     return false;
2381 
2382   /// \brief Construct the type we're converting to, which is a pointer to
2383   /// __autoreleasing pointee.
2384   FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2385   ConvertedType = Context.getPointerType(FromPointee);
2386   return true;
2387 }
2388 
IsBlockPointerConversion(QualType FromType,QualType ToType,QualType & ConvertedType)2389 bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2390                                     QualType& ConvertedType) {
2391   QualType ToPointeeType;
2392   if (const BlockPointerType *ToBlockPtr =
2393         ToType->getAs<BlockPointerType>())
2394     ToPointeeType = ToBlockPtr->getPointeeType();
2395   else
2396     return false;
2397 
2398   QualType FromPointeeType;
2399   if (const BlockPointerType *FromBlockPtr =
2400       FromType->getAs<BlockPointerType>())
2401     FromPointeeType = FromBlockPtr->getPointeeType();
2402   else
2403     return false;
2404   // We have pointer to blocks, check whether the only
2405   // differences in the argument and result types are in Objective-C
2406   // pointer conversions. If so, we permit the conversion.
2407 
2408   const FunctionProtoType *FromFunctionType
2409     = FromPointeeType->getAs<FunctionProtoType>();
2410   const FunctionProtoType *ToFunctionType
2411     = ToPointeeType->getAs<FunctionProtoType>();
2412 
2413   if (!FromFunctionType || !ToFunctionType)
2414     return false;
2415 
2416   if (Context.hasSameType(FromPointeeType, ToPointeeType))
2417     return true;
2418 
2419   // Perform the quick checks that will tell us whether these
2420   // function types are obviously different.
2421   if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2422       FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2423     return false;
2424 
2425   FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2426   FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2427   if (FromEInfo != ToEInfo)
2428     return false;
2429 
2430   bool IncompatibleObjC = false;
2431   if (Context.hasSameType(FromFunctionType->getResultType(),
2432                           ToFunctionType->getResultType())) {
2433     // Okay, the types match exactly. Nothing to do.
2434   } else {
2435     QualType RHS = FromFunctionType->getResultType();
2436     QualType LHS = ToFunctionType->getResultType();
2437     if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2438         !RHS.hasQualifiers() && LHS.hasQualifiers())
2439        LHS = LHS.getUnqualifiedType();
2440 
2441      if (Context.hasSameType(RHS,LHS)) {
2442        // OK exact match.
2443      } else if (isObjCPointerConversion(RHS, LHS,
2444                                         ConvertedType, IncompatibleObjC)) {
2445      if (IncompatibleObjC)
2446        return false;
2447      // Okay, we have an Objective-C pointer conversion.
2448      }
2449      else
2450        return false;
2451    }
2452 
2453    // Check argument types.
2454    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2455         ArgIdx != NumArgs; ++ArgIdx) {
2456      IncompatibleObjC = false;
2457      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2458      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2459      if (Context.hasSameType(FromArgType, ToArgType)) {
2460        // Okay, the types match exactly. Nothing to do.
2461      } else if (isObjCPointerConversion(ToArgType, FromArgType,
2462                                         ConvertedType, IncompatibleObjC)) {
2463        if (IncompatibleObjC)
2464          return false;
2465        // Okay, we have an Objective-C pointer conversion.
2466      } else
2467        // Argument types are too different. Abort.
2468        return false;
2469    }
2470    if (LangOpts.ObjCAutoRefCount &&
2471        !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2472                                                     ToFunctionType))
2473      return false;
2474 
2475    ConvertedType = ToType;
2476    return true;
2477 }
2478 
2479 enum {
2480   ft_default,
2481   ft_different_class,
2482   ft_parameter_arity,
2483   ft_parameter_mismatch,
2484   ft_return_type,
2485   ft_qualifer_mismatch
2486 };
2487 
2488 /// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2489 /// function types.  Catches different number of parameter, mismatch in
2490 /// parameter types, and different return types.
HandleFunctionTypeMismatch(PartialDiagnostic & PDiag,QualType FromType,QualType ToType)2491 void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2492                                       QualType FromType, QualType ToType) {
2493   // If either type is not valid, include no extra info.
2494   if (FromType.isNull() || ToType.isNull()) {
2495     PDiag << ft_default;
2496     return;
2497   }
2498 
2499   // Get the function type from the pointers.
2500   if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2501     const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2502                             *ToMember = ToType->getAs<MemberPointerType>();
2503     if (FromMember->getClass() != ToMember->getClass()) {
2504       PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2505             << QualType(FromMember->getClass(), 0);
2506       return;
2507     }
2508     FromType = FromMember->getPointeeType();
2509     ToType = ToMember->getPointeeType();
2510   }
2511 
2512   if (FromType->isPointerType())
2513     FromType = FromType->getPointeeType();
2514   if (ToType->isPointerType())
2515     ToType = ToType->getPointeeType();
2516 
2517   // Remove references.
2518   FromType = FromType.getNonReferenceType();
2519   ToType = ToType.getNonReferenceType();
2520 
2521   // Don't print extra info for non-specialized template functions.
2522   if (FromType->isInstantiationDependentType() &&
2523       !FromType->getAs<TemplateSpecializationType>()) {
2524     PDiag << ft_default;
2525     return;
2526   }
2527 
2528   // No extra info for same types.
2529   if (Context.hasSameType(FromType, ToType)) {
2530     PDiag << ft_default;
2531     return;
2532   }
2533 
2534   const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2535                           *ToFunction = ToType->getAs<FunctionProtoType>();
2536 
2537   // Both types need to be function types.
2538   if (!FromFunction || !ToFunction) {
2539     PDiag << ft_default;
2540     return;
2541   }
2542 
2543   if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2544     PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2545           << FromFunction->getNumArgs();
2546     return;
2547   }
2548 
2549   // Handle different parameter types.
2550   unsigned ArgPos;
2551   if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2552     PDiag << ft_parameter_mismatch << ArgPos + 1
2553           << ToFunction->getArgType(ArgPos)
2554           << FromFunction->getArgType(ArgPos);
2555     return;
2556   }
2557 
2558   // Handle different return type.
2559   if (!Context.hasSameType(FromFunction->getResultType(),
2560                            ToFunction->getResultType())) {
2561     PDiag << ft_return_type << ToFunction->getResultType()
2562           << FromFunction->getResultType();
2563     return;
2564   }
2565 
2566   unsigned FromQuals = FromFunction->getTypeQuals(),
2567            ToQuals = ToFunction->getTypeQuals();
2568   if (FromQuals != ToQuals) {
2569     PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2570     return;
2571   }
2572 
2573   // Unable to find a difference, so add no extra info.
2574   PDiag << ft_default;
2575 }
2576 
2577 /// FunctionArgTypesAreEqual - This routine checks two function proto types
2578 /// for equality of their argument types. Caller has already checked that
2579 /// they have same number of arguments.  If the parameters are different,
2580 /// ArgPos will have the parameter index of the first different parameter.
FunctionArgTypesAreEqual(const FunctionProtoType * OldType,const FunctionProtoType * NewType,unsigned * ArgPos)2581 bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2582                                     const FunctionProtoType *NewType,
2583                                     unsigned *ArgPos) {
2584   for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2585        N = NewType->arg_type_begin(),
2586        E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2587     if (!Context.hasSameType(*O, *N)) {
2588       if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2589       return false;
2590     }
2591   }
2592   return true;
2593 }
2594 
2595 /// CheckPointerConversion - Check the pointer conversion from the
2596 /// expression From to the type ToType. This routine checks for
2597 /// ambiguous or inaccessible derived-to-base pointer
2598 /// conversions for which IsPointerConversion has already returned
2599 /// true. It returns true and produces a diagnostic if there was an
2600 /// error, or returns false otherwise.
CheckPointerConversion(Expr * From,QualType ToType,CastKind & Kind,CXXCastPath & BasePath,bool IgnoreBaseAccess)2601 bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2602                                   CastKind &Kind,
2603                                   CXXCastPath& BasePath,
2604                                   bool IgnoreBaseAccess) {
2605   QualType FromType = From->getType();
2606   bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2607 
2608   Kind = CK_BitCast;
2609 
2610   if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2611       From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2612       Expr::NPCK_ZeroExpression) {
2613     if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2614       DiagRuntimeBehavior(From->getExprLoc(), From,
2615                           PDiag(diag::warn_impcast_bool_to_null_pointer)
2616                             << ToType << From->getSourceRange());
2617     else if (!isUnevaluatedContext())
2618       Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2619         << ToType << From->getSourceRange();
2620   }
2621   if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2622     if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2623       QualType FromPointeeType = FromPtrType->getPointeeType(),
2624                ToPointeeType   = ToPtrType->getPointeeType();
2625 
2626       if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2627           !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2628         // We must have a derived-to-base conversion. Check an
2629         // ambiguous or inaccessible conversion.
2630         if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2631                                          From->getExprLoc(),
2632                                          From->getSourceRange(), &BasePath,
2633                                          IgnoreBaseAccess))
2634           return true;
2635 
2636         // The conversion was successful.
2637         Kind = CK_DerivedToBase;
2638       }
2639     }
2640   } else if (const ObjCObjectPointerType *ToPtrType =
2641                ToType->getAs<ObjCObjectPointerType>()) {
2642     if (const ObjCObjectPointerType *FromPtrType =
2643           FromType->getAs<ObjCObjectPointerType>()) {
2644       // Objective-C++ conversions are always okay.
2645       // FIXME: We should have a different class of conversions for the
2646       // Objective-C++ implicit conversions.
2647       if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2648         return false;
2649     } else if (FromType->isBlockPointerType()) {
2650       Kind = CK_BlockPointerToObjCPointerCast;
2651     } else {
2652       Kind = CK_CPointerToObjCPointerCast;
2653     }
2654   } else if (ToType->isBlockPointerType()) {
2655     if (!FromType->isBlockPointerType())
2656       Kind = CK_AnyPointerToBlockPointerCast;
2657   }
2658 
2659   // We shouldn't fall into this case unless it's valid for other
2660   // reasons.
2661   if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2662     Kind = CK_NullToPointer;
2663 
2664   return false;
2665 }
2666 
2667 /// IsMemberPointerConversion - Determines whether the conversion of the
2668 /// expression From, which has the (possibly adjusted) type FromType, can be
2669 /// converted to the type ToType via a member pointer conversion (C++ 4.11).
2670 /// If so, returns true and places the converted type (that might differ from
2671 /// ToType in its cv-qualifiers at some level) into ConvertedType.
IsMemberPointerConversion(Expr * From,QualType FromType,QualType ToType,bool InOverloadResolution,QualType & ConvertedType)2672 bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2673                                      QualType ToType,
2674                                      bool InOverloadResolution,
2675                                      QualType &ConvertedType) {
2676   const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2677   if (!ToTypePtr)
2678     return false;
2679 
2680   // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2681   if (From->isNullPointerConstant(Context,
2682                     InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2683                                         : Expr::NPC_ValueDependentIsNull)) {
2684     ConvertedType = ToType;
2685     return true;
2686   }
2687 
2688   // Otherwise, both types have to be member pointers.
2689   const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2690   if (!FromTypePtr)
2691     return false;
2692 
2693   // A pointer to member of B can be converted to a pointer to member of D,
2694   // where D is derived from B (C++ 4.11p2).
2695   QualType FromClass(FromTypePtr->getClass(), 0);
2696   QualType ToClass(ToTypePtr->getClass(), 0);
2697 
2698   if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2699       !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2700       IsDerivedFrom(ToClass, FromClass)) {
2701     ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2702                                                  ToClass.getTypePtr());
2703     return true;
2704   }
2705 
2706   return false;
2707 }
2708 
2709 /// CheckMemberPointerConversion - Check the member pointer conversion from the
2710 /// expression From to the type ToType. This routine checks for ambiguous or
2711 /// virtual or inaccessible base-to-derived member pointer conversions
2712 /// for which IsMemberPointerConversion has already returned true. It returns
2713 /// true and produces a diagnostic if there was an error, or returns false
2714 /// otherwise.
CheckMemberPointerConversion(Expr * From,QualType ToType,CastKind & Kind,CXXCastPath & BasePath,bool IgnoreBaseAccess)2715 bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2716                                         CastKind &Kind,
2717                                         CXXCastPath &BasePath,
2718                                         bool IgnoreBaseAccess) {
2719   QualType FromType = From->getType();
2720   const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2721   if (!FromPtrType) {
2722     // This must be a null pointer to member pointer conversion
2723     assert(From->isNullPointerConstant(Context,
2724                                        Expr::NPC_ValueDependentIsNull) &&
2725            "Expr must be null pointer constant!");
2726     Kind = CK_NullToMemberPointer;
2727     return false;
2728   }
2729 
2730   const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2731   assert(ToPtrType && "No member pointer cast has a target type "
2732                       "that is not a member pointer.");
2733 
2734   QualType FromClass = QualType(FromPtrType->getClass(), 0);
2735   QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2736 
2737   // FIXME: What about dependent types?
2738   assert(FromClass->isRecordType() && "Pointer into non-class.");
2739   assert(ToClass->isRecordType() && "Pointer into non-class.");
2740 
2741   CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2742                      /*DetectVirtual=*/true);
2743   bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2744   assert(DerivationOkay &&
2745          "Should not have been called if derivation isn't OK.");
2746   (void)DerivationOkay;
2747 
2748   if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2749                                   getUnqualifiedType())) {
2750     std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2751     Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2752       << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2753     return true;
2754   }
2755 
2756   if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2757     Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2758       << FromClass << ToClass << QualType(VBase, 0)
2759       << From->getSourceRange();
2760     return true;
2761   }
2762 
2763   if (!IgnoreBaseAccess)
2764     CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2765                          Paths.front(),
2766                          diag::err_downcast_from_inaccessible_base);
2767 
2768   // Must be a base to derived member conversion.
2769   BuildBasePathArray(Paths, BasePath);
2770   Kind = CK_BaseToDerivedMemberPointer;
2771   return false;
2772 }
2773 
2774 /// IsQualificationConversion - Determines whether the conversion from
2775 /// an rvalue of type FromType to ToType is a qualification conversion
2776 /// (C++ 4.4).
2777 ///
2778 /// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2779 /// when the qualification conversion involves a change in the Objective-C
2780 /// object lifetime.
2781 bool
IsQualificationConversion(QualType FromType,QualType ToType,bool CStyle,bool & ObjCLifetimeConversion)2782 Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2783                                 bool CStyle, bool &ObjCLifetimeConversion) {
2784   FromType = Context.getCanonicalType(FromType);
2785   ToType = Context.getCanonicalType(ToType);
2786   ObjCLifetimeConversion = false;
2787 
2788   // If FromType and ToType are the same type, this is not a
2789   // qualification conversion.
2790   if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2791     return false;
2792 
2793   // (C++ 4.4p4):
2794   //   A conversion can add cv-qualifiers at levels other than the first
2795   //   in multi-level pointers, subject to the following rules: [...]
2796   bool PreviousToQualsIncludeConst = true;
2797   bool UnwrappedAnyPointer = false;
2798   while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2799     // Within each iteration of the loop, we check the qualifiers to
2800     // determine if this still looks like a qualification
2801     // conversion. Then, if all is well, we unwrap one more level of
2802     // pointers or pointers-to-members and do it all again
2803     // until there are no more pointers or pointers-to-members left to
2804     // unwrap.
2805     UnwrappedAnyPointer = true;
2806 
2807     Qualifiers FromQuals = FromType.getQualifiers();
2808     Qualifiers ToQuals = ToType.getQualifiers();
2809 
2810     // Objective-C ARC:
2811     //   Check Objective-C lifetime conversions.
2812     if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2813         UnwrappedAnyPointer) {
2814       if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2815         ObjCLifetimeConversion = true;
2816         FromQuals.removeObjCLifetime();
2817         ToQuals.removeObjCLifetime();
2818       } else {
2819         // Qualification conversions cannot cast between different
2820         // Objective-C lifetime qualifiers.
2821         return false;
2822       }
2823     }
2824 
2825     // Allow addition/removal of GC attributes but not changing GC attributes.
2826     if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2827         (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2828       FromQuals.removeObjCGCAttr();
2829       ToQuals.removeObjCGCAttr();
2830     }
2831 
2832     //   -- for every j > 0, if const is in cv 1,j then const is in cv
2833     //      2,j, and similarly for volatile.
2834     if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2835       return false;
2836 
2837     //   -- if the cv 1,j and cv 2,j are different, then const is in
2838     //      every cv for 0 < k < j.
2839     if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2840         && !PreviousToQualsIncludeConst)
2841       return false;
2842 
2843     // Keep track of whether all prior cv-qualifiers in the "to" type
2844     // include const.
2845     PreviousToQualsIncludeConst
2846       = PreviousToQualsIncludeConst && ToQuals.hasConst();
2847   }
2848 
2849   // We are left with FromType and ToType being the pointee types
2850   // after unwrapping the original FromType and ToType the same number
2851   // of types. If we unwrapped any pointers, and if FromType and
2852   // ToType have the same unqualified type (since we checked
2853   // qualifiers above), then this is a qualification conversion.
2854   return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2855 }
2856 
2857 /// \brief - Determine whether this is a conversion from a scalar type to an
2858 /// atomic type.
2859 ///
2860 /// If successful, updates \c SCS's second and third steps in the conversion
2861 /// sequence to finish the conversion.
tryAtomicConversion(Sema & S,Expr * From,QualType ToType,bool InOverloadResolution,StandardConversionSequence & SCS,bool CStyle)2862 static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2863                                 bool InOverloadResolution,
2864                                 StandardConversionSequence &SCS,
2865                                 bool CStyle) {
2866   const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2867   if (!ToAtomic)
2868     return false;
2869 
2870   StandardConversionSequence InnerSCS;
2871   if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2872                             InOverloadResolution, InnerSCS,
2873                             CStyle, /*AllowObjCWritebackConversion=*/false))
2874     return false;
2875 
2876   SCS.Second = InnerSCS.Second;
2877   SCS.setToType(1, InnerSCS.getToType(1));
2878   SCS.Third = InnerSCS.Third;
2879   SCS.QualificationIncludesObjCLifetime
2880     = InnerSCS.QualificationIncludesObjCLifetime;
2881   SCS.setToType(2, InnerSCS.getToType(2));
2882   return true;
2883 }
2884 
isFirstArgumentCompatibleWithType(ASTContext & Context,CXXConstructorDecl * Constructor,QualType Type)2885 static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2886                                               CXXConstructorDecl *Constructor,
2887                                               QualType Type) {
2888   const FunctionProtoType *CtorType =
2889       Constructor->getType()->getAs<FunctionProtoType>();
2890   if (CtorType->getNumArgs() > 0) {
2891     QualType FirstArg = CtorType->getArgType(0);
2892     if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2893       return true;
2894   }
2895   return false;
2896 }
2897 
2898 static OverloadingResult
IsInitializerListConstructorConversion(Sema & S,Expr * From,QualType ToType,CXXRecordDecl * To,UserDefinedConversionSequence & User,OverloadCandidateSet & CandidateSet,bool AllowExplicit)2899 IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2900                                        CXXRecordDecl *To,
2901                                        UserDefinedConversionSequence &User,
2902                                        OverloadCandidateSet &CandidateSet,
2903                                        bool AllowExplicit) {
2904   DeclContext::lookup_result R = S.LookupConstructors(To);
2905   for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
2906        Con != ConEnd; ++Con) {
2907     NamedDecl *D = *Con;
2908     DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2909 
2910     // Find the constructor (which may be a template).
2911     CXXConstructorDecl *Constructor = 0;
2912     FunctionTemplateDecl *ConstructorTmpl
2913       = dyn_cast<FunctionTemplateDecl>(D);
2914     if (ConstructorTmpl)
2915       Constructor
2916         = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2917     else
2918       Constructor = cast<CXXConstructorDecl>(D);
2919 
2920     bool Usable = !Constructor->isInvalidDecl() &&
2921                   S.isInitListConstructor(Constructor) &&
2922                   (AllowExplicit || !Constructor->isExplicit());
2923     if (Usable) {
2924       // If the first argument is (a reference to) the target type,
2925       // suppress conversions.
2926       bool SuppressUserConversions =
2927           isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2928       if (ConstructorTmpl)
2929         S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2930                                        /*ExplicitArgs*/ 0,
2931                                        From, CandidateSet,
2932                                        SuppressUserConversions);
2933       else
2934         S.AddOverloadCandidate(Constructor, FoundDecl,
2935                                From, CandidateSet,
2936                                SuppressUserConversions);
2937     }
2938   }
2939 
2940   bool HadMultipleCandidates = (CandidateSet.size() > 1);
2941 
2942   OverloadCandidateSet::iterator Best;
2943   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2944   case OR_Success: {
2945     // Record the standard conversion we used and the conversion function.
2946     CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2947     QualType ThisType = Constructor->getThisType(S.Context);
2948     // Initializer lists don't have conversions as such.
2949     User.Before.setAsIdentityConversion();
2950     User.HadMultipleCandidates = HadMultipleCandidates;
2951     User.ConversionFunction = Constructor;
2952     User.FoundConversionFunction = Best->FoundDecl;
2953     User.After.setAsIdentityConversion();
2954     User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
2955     User.After.setAllToTypes(ToType);
2956     return OR_Success;
2957   }
2958 
2959   case OR_No_Viable_Function:
2960     return OR_No_Viable_Function;
2961   case OR_Deleted:
2962     return OR_Deleted;
2963   case OR_Ambiguous:
2964     return OR_Ambiguous;
2965   }
2966 
2967   llvm_unreachable("Invalid OverloadResult!");
2968 }
2969 
2970 /// Determines whether there is a user-defined conversion sequence
2971 /// (C++ [over.ics.user]) that converts expression From to the type
2972 /// ToType. If such a conversion exists, User will contain the
2973 /// user-defined conversion sequence that performs such a conversion
2974 /// and this routine will return true. Otherwise, this routine returns
2975 /// false and User is unspecified.
2976 ///
2977 /// \param AllowExplicit  true if the conversion should consider C++0x
2978 /// "explicit" conversion functions as well as non-explicit conversion
2979 /// functions (C++0x [class.conv.fct]p2).
2980 static OverloadingResult
IsUserDefinedConversion(Sema & S,Expr * From,QualType ToType,UserDefinedConversionSequence & User,OverloadCandidateSet & CandidateSet,bool AllowExplicit)2981 IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
2982                         UserDefinedConversionSequence &User,
2983                         OverloadCandidateSet &CandidateSet,
2984                         bool AllowExplicit) {
2985   // Whether we will only visit constructors.
2986   bool ConstructorsOnly = false;
2987 
2988   // If the type we are conversion to is a class type, enumerate its
2989   // constructors.
2990   if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
2991     // C++ [over.match.ctor]p1:
2992     //   When objects of class type are direct-initialized (8.5), or
2993     //   copy-initialized from an expression of the same or a
2994     //   derived class type (8.5), overload resolution selects the
2995     //   constructor. [...] For copy-initialization, the candidate
2996     //   functions are all the converting constructors (12.3.1) of
2997     //   that class. The argument list is the expression-list within
2998     //   the parentheses of the initializer.
2999     if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
3000         (From->getType()->getAs<RecordType>() &&
3001          S.IsDerivedFrom(From->getType(), ToType)))
3002       ConstructorsOnly = true;
3003 
3004     S.RequireCompleteType(From->getExprLoc(), ToType, 0);
3005     // RequireCompleteType may have returned true due to some invalid decl
3006     // during template instantiation, but ToType may be complete enough now
3007     // to try to recover.
3008     if (ToType->isIncompleteType()) {
3009       // We're not going to find any constructors.
3010     } else if (CXXRecordDecl *ToRecordDecl
3011                  = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
3012 
3013       Expr **Args = &From;
3014       unsigned NumArgs = 1;
3015       bool ListInitializing = false;
3016       if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
3017         // But first, see if there is an init-list-contructor that will work.
3018         OverloadingResult Result = IsInitializerListConstructorConversion(
3019             S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3020         if (Result != OR_No_Viable_Function)
3021           return Result;
3022         // Never mind.
3023         CandidateSet.clear();
3024 
3025         // If we're list-initializing, we pass the individual elements as
3026         // arguments, not the entire list.
3027         Args = InitList->getInits();
3028         NumArgs = InitList->getNumInits();
3029         ListInitializing = true;
3030       }
3031 
3032       DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
3033       for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3034            Con != ConEnd; ++Con) {
3035         NamedDecl *D = *Con;
3036         DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3037 
3038         // Find the constructor (which may be a template).
3039         CXXConstructorDecl *Constructor = 0;
3040         FunctionTemplateDecl *ConstructorTmpl
3041           = dyn_cast<FunctionTemplateDecl>(D);
3042         if (ConstructorTmpl)
3043           Constructor
3044             = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3045         else
3046           Constructor = cast<CXXConstructorDecl>(D);
3047 
3048         bool Usable = !Constructor->isInvalidDecl();
3049         if (ListInitializing)
3050           Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3051         else
3052           Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3053         if (Usable) {
3054           bool SuppressUserConversions = !ConstructorsOnly;
3055           if (SuppressUserConversions && ListInitializing) {
3056             SuppressUserConversions = false;
3057             if (NumArgs == 1) {
3058               // If the first argument is (a reference to) the target type,
3059               // suppress conversions.
3060               SuppressUserConversions = isFirstArgumentCompatibleWithType(
3061                                                 S.Context, Constructor, ToType);
3062             }
3063           }
3064           if (ConstructorTmpl)
3065             S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3066                                            /*ExplicitArgs*/ 0,
3067                                            llvm::makeArrayRef(Args, NumArgs),
3068                                            CandidateSet, SuppressUserConversions);
3069           else
3070             // Allow one user-defined conversion when user specifies a
3071             // From->ToType conversion via an static cast (c-style, etc).
3072             S.AddOverloadCandidate(Constructor, FoundDecl,
3073                                    llvm::makeArrayRef(Args, NumArgs),
3074                                    CandidateSet, SuppressUserConversions);
3075         }
3076       }
3077     }
3078   }
3079 
3080   // Enumerate conversion functions, if we're allowed to.
3081   if (ConstructorsOnly || isa<InitListExpr>(From)) {
3082   } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3083     // No conversion functions from incomplete types.
3084   } else if (const RecordType *FromRecordType
3085                                    = From->getType()->getAs<RecordType>()) {
3086     if (CXXRecordDecl *FromRecordDecl
3087          = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3088       // Add all of the conversion functions as candidates.
3089       std::pair<CXXRecordDecl::conversion_iterator,
3090                 CXXRecordDecl::conversion_iterator>
3091         Conversions = FromRecordDecl->getVisibleConversionFunctions();
3092       for (CXXRecordDecl::conversion_iterator
3093              I = Conversions.first, E = Conversions.second; I != E; ++I) {
3094         DeclAccessPair FoundDecl = I.getPair();
3095         NamedDecl *D = FoundDecl.getDecl();
3096         CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3097         if (isa<UsingShadowDecl>(D))
3098           D = cast<UsingShadowDecl>(D)->getTargetDecl();
3099 
3100         CXXConversionDecl *Conv;
3101         FunctionTemplateDecl *ConvTemplate;
3102         if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3103           Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3104         else
3105           Conv = cast<CXXConversionDecl>(D);
3106 
3107         if (AllowExplicit || !Conv->isExplicit()) {
3108           if (ConvTemplate)
3109             S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3110                                              ActingContext, From, ToType,
3111                                              CandidateSet);
3112           else
3113             S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3114                                      From, ToType, CandidateSet);
3115         }
3116       }
3117     }
3118   }
3119 
3120   bool HadMultipleCandidates = (CandidateSet.size() > 1);
3121 
3122   OverloadCandidateSet::iterator Best;
3123   switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3124   case OR_Success:
3125     // Record the standard conversion we used and the conversion function.
3126     if (CXXConstructorDecl *Constructor
3127           = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3128       // C++ [over.ics.user]p1:
3129       //   If the user-defined conversion is specified by a
3130       //   constructor (12.3.1), the initial standard conversion
3131       //   sequence converts the source type to the type required by
3132       //   the argument of the constructor.
3133       //
3134       QualType ThisType = Constructor->getThisType(S.Context);
3135       if (isa<InitListExpr>(From)) {
3136         // Initializer lists don't have conversions as such.
3137         User.Before.setAsIdentityConversion();
3138       } else {
3139         if (Best->Conversions[0].isEllipsis())
3140           User.EllipsisConversion = true;
3141         else {
3142           User.Before = Best->Conversions[0].Standard;
3143           User.EllipsisConversion = false;
3144         }
3145       }
3146       User.HadMultipleCandidates = HadMultipleCandidates;
3147       User.ConversionFunction = Constructor;
3148       User.FoundConversionFunction = Best->FoundDecl;
3149       User.After.setAsIdentityConversion();
3150       User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3151       User.After.setAllToTypes(ToType);
3152       return OR_Success;
3153     }
3154     if (CXXConversionDecl *Conversion
3155                  = dyn_cast<CXXConversionDecl>(Best->Function)) {
3156       // C++ [over.ics.user]p1:
3157       //
3158       //   [...] If the user-defined conversion is specified by a
3159       //   conversion function (12.3.2), the initial standard
3160       //   conversion sequence converts the source type to the
3161       //   implicit object parameter of the conversion function.
3162       User.Before = Best->Conversions[0].Standard;
3163       User.HadMultipleCandidates = HadMultipleCandidates;
3164       User.ConversionFunction = Conversion;
3165       User.FoundConversionFunction = Best->FoundDecl;
3166       User.EllipsisConversion = false;
3167 
3168       // C++ [over.ics.user]p2:
3169       //   The second standard conversion sequence converts the
3170       //   result of the user-defined conversion to the target type
3171       //   for the sequence. Since an implicit conversion sequence
3172       //   is an initialization, the special rules for
3173       //   initialization by user-defined conversion apply when
3174       //   selecting the best user-defined conversion for a
3175       //   user-defined conversion sequence (see 13.3.3 and
3176       //   13.3.3.1).
3177       User.After = Best->FinalConversion;
3178       return OR_Success;
3179     }
3180     llvm_unreachable("Not a constructor or conversion function?");
3181 
3182   case OR_No_Viable_Function:
3183     return OR_No_Viable_Function;
3184   case OR_Deleted:
3185     // No conversion here! We're done.
3186     return OR_Deleted;
3187 
3188   case OR_Ambiguous:
3189     return OR_Ambiguous;
3190   }
3191 
3192   llvm_unreachable("Invalid OverloadResult!");
3193 }
3194 
3195 bool
DiagnoseMultipleUserDefinedConversion(Expr * From,QualType ToType)3196 Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3197   ImplicitConversionSequence ICS;
3198   OverloadCandidateSet CandidateSet(From->getExprLoc());
3199   OverloadingResult OvResult =
3200     IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3201                             CandidateSet, false);
3202   if (OvResult == OR_Ambiguous)
3203     Diag(From->getLocStart(),
3204          diag::err_typecheck_ambiguous_condition)
3205           << From->getType() << ToType << From->getSourceRange();
3206   else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty()) {
3207     if (!RequireCompleteType(From->getLocStart(), ToType,
3208                           diag::err_typecheck_nonviable_condition_incomplete,
3209                              From->getType(), From->getSourceRange()))
3210       Diag(From->getLocStart(),
3211            diag::err_typecheck_nonviable_condition)
3212            << From->getType() << From->getSourceRange() << ToType;
3213   }
3214   else
3215     return false;
3216   CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3217   return true;
3218 }
3219 
3220 /// \brief Compare the user-defined conversion functions or constructors
3221 /// of two user-defined conversion sequences to determine whether any ordering
3222 /// is possible.
3223 static ImplicitConversionSequence::CompareKind
compareConversionFunctions(Sema & S,FunctionDecl * Function1,FunctionDecl * Function2)3224 compareConversionFunctions(Sema &S,
3225                            FunctionDecl *Function1,
3226                            FunctionDecl *Function2) {
3227   if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
3228     return ImplicitConversionSequence::Indistinguishable;
3229 
3230   // Objective-C++:
3231   //   If both conversion functions are implicitly-declared conversions from
3232   //   a lambda closure type to a function pointer and a block pointer,
3233   //   respectively, always prefer the conversion to a function pointer,
3234   //   because the function pointer is more lightweight and is more likely
3235   //   to keep code working.
3236   CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3237   if (!Conv1)
3238     return ImplicitConversionSequence::Indistinguishable;
3239 
3240   CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3241   if (!Conv2)
3242     return ImplicitConversionSequence::Indistinguishable;
3243 
3244   if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3245     bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3246     bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3247     if (Block1 != Block2)
3248       return Block1? ImplicitConversionSequence::Worse
3249                    : ImplicitConversionSequence::Better;
3250   }
3251 
3252   return ImplicitConversionSequence::Indistinguishable;
3253 }
3254 
3255 /// CompareImplicitConversionSequences - Compare two implicit
3256 /// conversion sequences to determine whether one is better than the
3257 /// other or if they are indistinguishable (C++ 13.3.3.2).
3258 static ImplicitConversionSequence::CompareKind
CompareImplicitConversionSequences(Sema & S,const ImplicitConversionSequence & ICS1,const ImplicitConversionSequence & ICS2)3259 CompareImplicitConversionSequences(Sema &S,
3260                                    const ImplicitConversionSequence& ICS1,
3261                                    const ImplicitConversionSequence& ICS2)
3262 {
3263   // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3264   // conversion sequences (as defined in 13.3.3.1)
3265   //   -- a standard conversion sequence (13.3.3.1.1) is a better
3266   //      conversion sequence than a user-defined conversion sequence or
3267   //      an ellipsis conversion sequence, and
3268   //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3269   //      conversion sequence than an ellipsis conversion sequence
3270   //      (13.3.3.1.3).
3271   //
3272   // C++0x [over.best.ics]p10:
3273   //   For the purpose of ranking implicit conversion sequences as
3274   //   described in 13.3.3.2, the ambiguous conversion sequence is
3275   //   treated as a user-defined sequence that is indistinguishable
3276   //   from any other user-defined conversion sequence.
3277   if (ICS1.getKindRank() < ICS2.getKindRank())
3278     return ImplicitConversionSequence::Better;
3279   if (ICS2.getKindRank() < ICS1.getKindRank())
3280     return ImplicitConversionSequence::Worse;
3281 
3282   // The following checks require both conversion sequences to be of
3283   // the same kind.
3284   if (ICS1.getKind() != ICS2.getKind())
3285     return ImplicitConversionSequence::Indistinguishable;
3286 
3287   ImplicitConversionSequence::CompareKind Result =
3288       ImplicitConversionSequence::Indistinguishable;
3289 
3290   // Two implicit conversion sequences of the same form are
3291   // indistinguishable conversion sequences unless one of the
3292   // following rules apply: (C++ 13.3.3.2p3):
3293   if (ICS1.isStandard())
3294     Result = CompareStandardConversionSequences(S,
3295                                                 ICS1.Standard, ICS2.Standard);
3296   else if (ICS1.isUserDefined()) {
3297     // User-defined conversion sequence U1 is a better conversion
3298     // sequence than another user-defined conversion sequence U2 if
3299     // they contain the same user-defined conversion function or
3300     // constructor and if the second standard conversion sequence of
3301     // U1 is better than the second standard conversion sequence of
3302     // U2 (C++ 13.3.3.2p3).
3303     if (ICS1.UserDefined.ConversionFunction ==
3304           ICS2.UserDefined.ConversionFunction)
3305       Result = CompareStandardConversionSequences(S,
3306                                                   ICS1.UserDefined.After,
3307                                                   ICS2.UserDefined.After);
3308     else
3309       Result = compareConversionFunctions(S,
3310                                           ICS1.UserDefined.ConversionFunction,
3311                                           ICS2.UserDefined.ConversionFunction);
3312   }
3313 
3314   // List-initialization sequence L1 is a better conversion sequence than
3315   // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3316   // for some X and L2 does not.
3317   if (Result == ImplicitConversionSequence::Indistinguishable &&
3318       !ICS1.isBad() &&
3319       ICS1.isListInitializationSequence() &&
3320       ICS2.isListInitializationSequence()) {
3321     if (ICS1.isStdInitializerListElement() &&
3322         !ICS2.isStdInitializerListElement())
3323       return ImplicitConversionSequence::Better;
3324     if (!ICS1.isStdInitializerListElement() &&
3325         ICS2.isStdInitializerListElement())
3326       return ImplicitConversionSequence::Worse;
3327   }
3328 
3329   return Result;
3330 }
3331 
hasSimilarType(ASTContext & Context,QualType T1,QualType T2)3332 static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3333   while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3334     Qualifiers Quals;
3335     T1 = Context.getUnqualifiedArrayType(T1, Quals);
3336     T2 = Context.getUnqualifiedArrayType(T2, Quals);
3337   }
3338 
3339   return Context.hasSameUnqualifiedType(T1, T2);
3340 }
3341 
3342 // Per 13.3.3.2p3, compare the given standard conversion sequences to
3343 // determine if one is a proper subset of the other.
3344 static ImplicitConversionSequence::CompareKind
compareStandardConversionSubsets(ASTContext & Context,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3345 compareStandardConversionSubsets(ASTContext &Context,
3346                                  const StandardConversionSequence& SCS1,
3347                                  const StandardConversionSequence& SCS2) {
3348   ImplicitConversionSequence::CompareKind Result
3349     = ImplicitConversionSequence::Indistinguishable;
3350 
3351   // the identity conversion sequence is considered to be a subsequence of
3352   // any non-identity conversion sequence
3353   if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3354     return ImplicitConversionSequence::Better;
3355   else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3356     return ImplicitConversionSequence::Worse;
3357 
3358   if (SCS1.Second != SCS2.Second) {
3359     if (SCS1.Second == ICK_Identity)
3360       Result = ImplicitConversionSequence::Better;
3361     else if (SCS2.Second == ICK_Identity)
3362       Result = ImplicitConversionSequence::Worse;
3363     else
3364       return ImplicitConversionSequence::Indistinguishable;
3365   } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3366     return ImplicitConversionSequence::Indistinguishable;
3367 
3368   if (SCS1.Third == SCS2.Third) {
3369     return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3370                              : ImplicitConversionSequence::Indistinguishable;
3371   }
3372 
3373   if (SCS1.Third == ICK_Identity)
3374     return Result == ImplicitConversionSequence::Worse
3375              ? ImplicitConversionSequence::Indistinguishable
3376              : ImplicitConversionSequence::Better;
3377 
3378   if (SCS2.Third == ICK_Identity)
3379     return Result == ImplicitConversionSequence::Better
3380              ? ImplicitConversionSequence::Indistinguishable
3381              : ImplicitConversionSequence::Worse;
3382 
3383   return ImplicitConversionSequence::Indistinguishable;
3384 }
3385 
3386 /// \brief Determine whether one of the given reference bindings is better
3387 /// than the other based on what kind of bindings they are.
isBetterReferenceBindingKind(const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3388 static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3389                                        const StandardConversionSequence &SCS2) {
3390   // C++0x [over.ics.rank]p3b4:
3391   //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3392   //      implicit object parameter of a non-static member function declared
3393   //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3394   //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3395   //      lvalue reference to a function lvalue and S2 binds an rvalue
3396   //      reference*.
3397   //
3398   // FIXME: Rvalue references. We're going rogue with the above edits,
3399   // because the semantics in the current C++0x working paper (N3225 at the
3400   // time of this writing) break the standard definition of std::forward
3401   // and std::reference_wrapper when dealing with references to functions.
3402   // Proposed wording changes submitted to CWG for consideration.
3403   if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3404       SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3405     return false;
3406 
3407   return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3408           SCS2.IsLvalueReference) ||
3409          (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3410           !SCS2.IsLvalueReference);
3411 }
3412 
3413 /// CompareStandardConversionSequences - Compare two standard
3414 /// conversion sequences to determine whether one is better than the
3415 /// other or if they are indistinguishable (C++ 13.3.3.2p3).
3416 static ImplicitConversionSequence::CompareKind
CompareStandardConversionSequences(Sema & S,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3417 CompareStandardConversionSequences(Sema &S,
3418                                    const StandardConversionSequence& SCS1,
3419                                    const StandardConversionSequence& SCS2)
3420 {
3421   // Standard conversion sequence S1 is a better conversion sequence
3422   // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3423 
3424   //  -- S1 is a proper subsequence of S2 (comparing the conversion
3425   //     sequences in the canonical form defined by 13.3.3.1.1,
3426   //     excluding any Lvalue Transformation; the identity conversion
3427   //     sequence is considered to be a subsequence of any
3428   //     non-identity conversion sequence) or, if not that,
3429   if (ImplicitConversionSequence::CompareKind CK
3430         = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3431     return CK;
3432 
3433   //  -- the rank of S1 is better than the rank of S2 (by the rules
3434   //     defined below), or, if not that,
3435   ImplicitConversionRank Rank1 = SCS1.getRank();
3436   ImplicitConversionRank Rank2 = SCS2.getRank();
3437   if (Rank1 < Rank2)
3438     return ImplicitConversionSequence::Better;
3439   else if (Rank2 < Rank1)
3440     return ImplicitConversionSequence::Worse;
3441 
3442   // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3443   // are indistinguishable unless one of the following rules
3444   // applies:
3445 
3446   //   A conversion that is not a conversion of a pointer, or
3447   //   pointer to member, to bool is better than another conversion
3448   //   that is such a conversion.
3449   if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3450     return SCS2.isPointerConversionToBool()
3451              ? ImplicitConversionSequence::Better
3452              : ImplicitConversionSequence::Worse;
3453 
3454   // C++ [over.ics.rank]p4b2:
3455   //
3456   //   If class B is derived directly or indirectly from class A,
3457   //   conversion of B* to A* is better than conversion of B* to
3458   //   void*, and conversion of A* to void* is better than conversion
3459   //   of B* to void*.
3460   bool SCS1ConvertsToVoid
3461     = SCS1.isPointerConversionToVoidPointer(S.Context);
3462   bool SCS2ConvertsToVoid
3463     = SCS2.isPointerConversionToVoidPointer(S.Context);
3464   if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3465     // Exactly one of the conversion sequences is a conversion to
3466     // a void pointer; it's the worse conversion.
3467     return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3468                               : ImplicitConversionSequence::Worse;
3469   } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3470     // Neither conversion sequence converts to a void pointer; compare
3471     // their derived-to-base conversions.
3472     if (ImplicitConversionSequence::CompareKind DerivedCK
3473           = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3474       return DerivedCK;
3475   } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3476              !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3477     // Both conversion sequences are conversions to void
3478     // pointers. Compare the source types to determine if there's an
3479     // inheritance relationship in their sources.
3480     QualType FromType1 = SCS1.getFromType();
3481     QualType FromType2 = SCS2.getFromType();
3482 
3483     // Adjust the types we're converting from via the array-to-pointer
3484     // conversion, if we need to.
3485     if (SCS1.First == ICK_Array_To_Pointer)
3486       FromType1 = S.Context.getArrayDecayedType(FromType1);
3487     if (SCS2.First == ICK_Array_To_Pointer)
3488       FromType2 = S.Context.getArrayDecayedType(FromType2);
3489 
3490     QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3491     QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3492 
3493     if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3494       return ImplicitConversionSequence::Better;
3495     else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3496       return ImplicitConversionSequence::Worse;
3497 
3498     // Objective-C++: If one interface is more specific than the
3499     // other, it is the better one.
3500     const ObjCObjectPointerType* FromObjCPtr1
3501       = FromType1->getAs<ObjCObjectPointerType>();
3502     const ObjCObjectPointerType* FromObjCPtr2
3503       = FromType2->getAs<ObjCObjectPointerType>();
3504     if (FromObjCPtr1 && FromObjCPtr2) {
3505       bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3506                                                           FromObjCPtr2);
3507       bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3508                                                            FromObjCPtr1);
3509       if (AssignLeft != AssignRight) {
3510         return AssignLeft? ImplicitConversionSequence::Better
3511                          : ImplicitConversionSequence::Worse;
3512       }
3513     }
3514   }
3515 
3516   // Compare based on qualification conversions (C++ 13.3.3.2p3,
3517   // bullet 3).
3518   if (ImplicitConversionSequence::CompareKind QualCK
3519         = CompareQualificationConversions(S, SCS1, SCS2))
3520     return QualCK;
3521 
3522   if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3523     // Check for a better reference binding based on the kind of bindings.
3524     if (isBetterReferenceBindingKind(SCS1, SCS2))
3525       return ImplicitConversionSequence::Better;
3526     else if (isBetterReferenceBindingKind(SCS2, SCS1))
3527       return ImplicitConversionSequence::Worse;
3528 
3529     // C++ [over.ics.rank]p3b4:
3530     //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3531     //      which the references refer are the same type except for
3532     //      top-level cv-qualifiers, and the type to which the reference
3533     //      initialized by S2 refers is more cv-qualified than the type
3534     //      to which the reference initialized by S1 refers.
3535     QualType T1 = SCS1.getToType(2);
3536     QualType T2 = SCS2.getToType(2);
3537     T1 = S.Context.getCanonicalType(T1);
3538     T2 = S.Context.getCanonicalType(T2);
3539     Qualifiers T1Quals, T2Quals;
3540     QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3541     QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3542     if (UnqualT1 == UnqualT2) {
3543       // Objective-C++ ARC: If the references refer to objects with different
3544       // lifetimes, prefer bindings that don't change lifetime.
3545       if (SCS1.ObjCLifetimeConversionBinding !=
3546                                           SCS2.ObjCLifetimeConversionBinding) {
3547         return SCS1.ObjCLifetimeConversionBinding
3548                                            ? ImplicitConversionSequence::Worse
3549                                            : ImplicitConversionSequence::Better;
3550       }
3551 
3552       // If the type is an array type, promote the element qualifiers to the
3553       // type for comparison.
3554       if (isa<ArrayType>(T1) && T1Quals)
3555         T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3556       if (isa<ArrayType>(T2) && T2Quals)
3557         T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3558       if (T2.isMoreQualifiedThan(T1))
3559         return ImplicitConversionSequence::Better;
3560       else if (T1.isMoreQualifiedThan(T2))
3561         return ImplicitConversionSequence::Worse;
3562     }
3563   }
3564 
3565   // In Microsoft mode, prefer an integral conversion to a
3566   // floating-to-integral conversion if the integral conversion
3567   // is between types of the same size.
3568   // For example:
3569   // void f(float);
3570   // void f(int);
3571   // int main {
3572   //    long a;
3573   //    f(a);
3574   // }
3575   // Here, MSVC will call f(int) instead of generating a compile error
3576   // as clang will do in standard mode.
3577   if (S.getLangOpts().MicrosoftMode &&
3578       SCS1.Second == ICK_Integral_Conversion &&
3579       SCS2.Second == ICK_Floating_Integral &&
3580       S.Context.getTypeSize(SCS1.getFromType()) ==
3581       S.Context.getTypeSize(SCS1.getToType(2)))
3582     return ImplicitConversionSequence::Better;
3583 
3584   return ImplicitConversionSequence::Indistinguishable;
3585 }
3586 
3587 /// CompareQualificationConversions - Compares two standard conversion
3588 /// sequences to determine whether they can be ranked based on their
3589 /// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3590 ImplicitConversionSequence::CompareKind
CompareQualificationConversions(Sema & S,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3591 CompareQualificationConversions(Sema &S,
3592                                 const StandardConversionSequence& SCS1,
3593                                 const StandardConversionSequence& SCS2) {
3594   // C++ 13.3.3.2p3:
3595   //  -- S1 and S2 differ only in their qualification conversion and
3596   //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3597   //     cv-qualification signature of type T1 is a proper subset of
3598   //     the cv-qualification signature of type T2, and S1 is not the
3599   //     deprecated string literal array-to-pointer conversion (4.2).
3600   if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3601       SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3602     return ImplicitConversionSequence::Indistinguishable;
3603 
3604   // FIXME: the example in the standard doesn't use a qualification
3605   // conversion (!)
3606   QualType T1 = SCS1.getToType(2);
3607   QualType T2 = SCS2.getToType(2);
3608   T1 = S.Context.getCanonicalType(T1);
3609   T2 = S.Context.getCanonicalType(T2);
3610   Qualifiers T1Quals, T2Quals;
3611   QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3612   QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3613 
3614   // If the types are the same, we won't learn anything by unwrapped
3615   // them.
3616   if (UnqualT1 == UnqualT2)
3617     return ImplicitConversionSequence::Indistinguishable;
3618 
3619   // If the type is an array type, promote the element qualifiers to the type
3620   // for comparison.
3621   if (isa<ArrayType>(T1) && T1Quals)
3622     T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3623   if (isa<ArrayType>(T2) && T2Quals)
3624     T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3625 
3626   ImplicitConversionSequence::CompareKind Result
3627     = ImplicitConversionSequence::Indistinguishable;
3628 
3629   // Objective-C++ ARC:
3630   //   Prefer qualification conversions not involving a change in lifetime
3631   //   to qualification conversions that do not change lifetime.
3632   if (SCS1.QualificationIncludesObjCLifetime !=
3633                                       SCS2.QualificationIncludesObjCLifetime) {
3634     Result = SCS1.QualificationIncludesObjCLifetime
3635                ? ImplicitConversionSequence::Worse
3636                : ImplicitConversionSequence::Better;
3637   }
3638 
3639   while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3640     // Within each iteration of the loop, we check the qualifiers to
3641     // determine if this still looks like a qualification
3642     // conversion. Then, if all is well, we unwrap one more level of
3643     // pointers or pointers-to-members and do it all again
3644     // until there are no more pointers or pointers-to-members left
3645     // to unwrap. This essentially mimics what
3646     // IsQualificationConversion does, but here we're checking for a
3647     // strict subset of qualifiers.
3648     if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3649       // The qualifiers are the same, so this doesn't tell us anything
3650       // about how the sequences rank.
3651       ;
3652     else if (T2.isMoreQualifiedThan(T1)) {
3653       // T1 has fewer qualifiers, so it could be the better sequence.
3654       if (Result == ImplicitConversionSequence::Worse)
3655         // Neither has qualifiers that are a subset of the other's
3656         // qualifiers.
3657         return ImplicitConversionSequence::Indistinguishable;
3658 
3659       Result = ImplicitConversionSequence::Better;
3660     } else if (T1.isMoreQualifiedThan(T2)) {
3661       // T2 has fewer qualifiers, so it could be the better sequence.
3662       if (Result == ImplicitConversionSequence::Better)
3663         // Neither has qualifiers that are a subset of the other's
3664         // qualifiers.
3665         return ImplicitConversionSequence::Indistinguishable;
3666 
3667       Result = ImplicitConversionSequence::Worse;
3668     } else {
3669       // Qualifiers are disjoint.
3670       return ImplicitConversionSequence::Indistinguishable;
3671     }
3672 
3673     // If the types after this point are equivalent, we're done.
3674     if (S.Context.hasSameUnqualifiedType(T1, T2))
3675       break;
3676   }
3677 
3678   // Check that the winning standard conversion sequence isn't using
3679   // the deprecated string literal array to pointer conversion.
3680   switch (Result) {
3681   case ImplicitConversionSequence::Better:
3682     if (SCS1.DeprecatedStringLiteralToCharPtr)
3683       Result = ImplicitConversionSequence::Indistinguishable;
3684     break;
3685 
3686   case ImplicitConversionSequence::Indistinguishable:
3687     break;
3688 
3689   case ImplicitConversionSequence::Worse:
3690     if (SCS2.DeprecatedStringLiteralToCharPtr)
3691       Result = ImplicitConversionSequence::Indistinguishable;
3692     break;
3693   }
3694 
3695   return Result;
3696 }
3697 
3698 /// CompareDerivedToBaseConversions - Compares two standard conversion
3699 /// sequences to determine whether they can be ranked based on their
3700 /// various kinds of derived-to-base conversions (C++
3701 /// [over.ics.rank]p4b3).  As part of these checks, we also look at
3702 /// conversions between Objective-C interface types.
3703 ImplicitConversionSequence::CompareKind
CompareDerivedToBaseConversions(Sema & S,const StandardConversionSequence & SCS1,const StandardConversionSequence & SCS2)3704 CompareDerivedToBaseConversions(Sema &S,
3705                                 const StandardConversionSequence& SCS1,
3706                                 const StandardConversionSequence& SCS2) {
3707   QualType FromType1 = SCS1.getFromType();
3708   QualType ToType1 = SCS1.getToType(1);
3709   QualType FromType2 = SCS2.getFromType();
3710   QualType ToType2 = SCS2.getToType(1);
3711 
3712   // Adjust the types we're converting from via the array-to-pointer
3713   // conversion, if we need to.
3714   if (SCS1.First == ICK_Array_To_Pointer)
3715     FromType1 = S.Context.getArrayDecayedType(FromType1);
3716   if (SCS2.First == ICK_Array_To_Pointer)
3717     FromType2 = S.Context.getArrayDecayedType(FromType2);
3718 
3719   // Canonicalize all of the types.
3720   FromType1 = S.Context.getCanonicalType(FromType1);
3721   ToType1 = S.Context.getCanonicalType(ToType1);
3722   FromType2 = S.Context.getCanonicalType(FromType2);
3723   ToType2 = S.Context.getCanonicalType(ToType2);
3724 
3725   // C++ [over.ics.rank]p4b3:
3726   //
3727   //   If class B is derived directly or indirectly from class A and
3728   //   class C is derived directly or indirectly from B,
3729   //
3730   // Compare based on pointer conversions.
3731   if (SCS1.Second == ICK_Pointer_Conversion &&
3732       SCS2.Second == ICK_Pointer_Conversion &&
3733       /*FIXME: Remove if Objective-C id conversions get their own rank*/
3734       FromType1->isPointerType() && FromType2->isPointerType() &&
3735       ToType1->isPointerType() && ToType2->isPointerType()) {
3736     QualType FromPointee1
3737       = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3738     QualType ToPointee1
3739       = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3740     QualType FromPointee2
3741       = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3742     QualType ToPointee2
3743       = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3744 
3745     //   -- conversion of C* to B* is better than conversion of C* to A*,
3746     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3747       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3748         return ImplicitConversionSequence::Better;
3749       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3750         return ImplicitConversionSequence::Worse;
3751     }
3752 
3753     //   -- conversion of B* to A* is better than conversion of C* to A*,
3754     if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3755       if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3756         return ImplicitConversionSequence::Better;
3757       else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3758         return ImplicitConversionSequence::Worse;
3759     }
3760   } else if (SCS1.Second == ICK_Pointer_Conversion &&
3761              SCS2.Second == ICK_Pointer_Conversion) {
3762     const ObjCObjectPointerType *FromPtr1
3763       = FromType1->getAs<ObjCObjectPointerType>();
3764     const ObjCObjectPointerType *FromPtr2
3765       = FromType2->getAs<ObjCObjectPointerType>();
3766     const ObjCObjectPointerType *ToPtr1
3767       = ToType1->getAs<ObjCObjectPointerType>();
3768     const ObjCObjectPointerType *ToPtr2
3769       = ToType2->getAs<ObjCObjectPointerType>();
3770 
3771     if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3772       // Apply the same conversion ranking rules for Objective-C pointer types
3773       // that we do for C++ pointers to class types. However, we employ the
3774       // Objective-C pseudo-subtyping relationship used for assignment of
3775       // Objective-C pointer types.
3776       bool FromAssignLeft
3777         = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3778       bool FromAssignRight
3779         = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3780       bool ToAssignLeft
3781         = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3782       bool ToAssignRight
3783         = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3784 
3785       // A conversion to an a non-id object pointer type or qualified 'id'
3786       // type is better than a conversion to 'id'.
3787       if (ToPtr1->isObjCIdType() &&
3788           (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3789         return ImplicitConversionSequence::Worse;
3790       if (ToPtr2->isObjCIdType() &&
3791           (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3792         return ImplicitConversionSequence::Better;
3793 
3794       // A conversion to a non-id object pointer type is better than a
3795       // conversion to a qualified 'id' type
3796       if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3797         return ImplicitConversionSequence::Worse;
3798       if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3799         return ImplicitConversionSequence::Better;
3800 
3801       // A conversion to an a non-Class object pointer type or qualified 'Class'
3802       // type is better than a conversion to 'Class'.
3803       if (ToPtr1->isObjCClassType() &&
3804           (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3805         return ImplicitConversionSequence::Worse;
3806       if (ToPtr2->isObjCClassType() &&
3807           (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3808         return ImplicitConversionSequence::Better;
3809 
3810       // A conversion to a non-Class object pointer type is better than a
3811       // conversion to a qualified 'Class' type.
3812       if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3813         return ImplicitConversionSequence::Worse;
3814       if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3815         return ImplicitConversionSequence::Better;
3816 
3817       //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3818       if (S.Context.hasSameType(FromType1, FromType2) &&
3819           !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3820           (ToAssignLeft != ToAssignRight))
3821         return ToAssignLeft? ImplicitConversionSequence::Worse
3822                            : ImplicitConversionSequence::Better;
3823 
3824       //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3825       if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3826           (FromAssignLeft != FromAssignRight))
3827         return FromAssignLeft? ImplicitConversionSequence::Better
3828         : ImplicitConversionSequence::Worse;
3829     }
3830   }
3831 
3832   // Ranking of member-pointer types.
3833   if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3834       FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3835       ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3836     const MemberPointerType * FromMemPointer1 =
3837                                         FromType1->getAs<MemberPointerType>();
3838     const MemberPointerType * ToMemPointer1 =
3839                                           ToType1->getAs<MemberPointerType>();
3840     const MemberPointerType * FromMemPointer2 =
3841                                           FromType2->getAs<MemberPointerType>();
3842     const MemberPointerType * ToMemPointer2 =
3843                                           ToType2->getAs<MemberPointerType>();
3844     const Type *FromPointeeType1 = FromMemPointer1->getClass();
3845     const Type *ToPointeeType1 = ToMemPointer1->getClass();
3846     const Type *FromPointeeType2 = FromMemPointer2->getClass();
3847     const Type *ToPointeeType2 = ToMemPointer2->getClass();
3848     QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3849     QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3850     QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3851     QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3852     // conversion of A::* to B::* is better than conversion of A::* to C::*,
3853     if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3854       if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3855         return ImplicitConversionSequence::Worse;
3856       else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3857         return ImplicitConversionSequence::Better;
3858     }
3859     // conversion of B::* to C::* is better than conversion of A::* to C::*
3860     if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3861       if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3862         return ImplicitConversionSequence::Better;
3863       else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3864         return ImplicitConversionSequence::Worse;
3865     }
3866   }
3867 
3868   if (SCS1.Second == ICK_Derived_To_Base) {
3869     //   -- conversion of C to B is better than conversion of C to A,
3870     //   -- binding of an expression of type C to a reference of type
3871     //      B& is better than binding an expression of type C to a
3872     //      reference of type A&,
3873     if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3874         !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3875       if (S.IsDerivedFrom(ToType1, ToType2))
3876         return ImplicitConversionSequence::Better;
3877       else if (S.IsDerivedFrom(ToType2, ToType1))
3878         return ImplicitConversionSequence::Worse;
3879     }
3880 
3881     //   -- conversion of B to A is better than conversion of C to A.
3882     //   -- binding of an expression of type B to a reference of type
3883     //      A& is better than binding an expression of type C to a
3884     //      reference of type A&,
3885     if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3886         S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3887       if (S.IsDerivedFrom(FromType2, FromType1))
3888         return ImplicitConversionSequence::Better;
3889       else if (S.IsDerivedFrom(FromType1, FromType2))
3890         return ImplicitConversionSequence::Worse;
3891     }
3892   }
3893 
3894   return ImplicitConversionSequence::Indistinguishable;
3895 }
3896 
3897 /// \brief Determine whether the given type is valid, e.g., it is not an invalid
3898 /// C++ class.
isTypeValid(QualType T)3899 static bool isTypeValid(QualType T) {
3900   if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
3901     return !Record->isInvalidDecl();
3902 
3903   return true;
3904 }
3905 
3906 /// CompareReferenceRelationship - Compare the two types T1 and T2 to
3907 /// determine whether they are reference-related,
3908 /// reference-compatible, reference-compatible with added
3909 /// qualification, or incompatible, for use in C++ initialization by
3910 /// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3911 /// type, and the first type (T1) is the pointee type of the reference
3912 /// type being initialized.
3913 Sema::ReferenceCompareResult
CompareReferenceRelationship(SourceLocation Loc,QualType OrigT1,QualType OrigT2,bool & DerivedToBase,bool & ObjCConversion,bool & ObjCLifetimeConversion)3914 Sema::CompareReferenceRelationship(SourceLocation Loc,
3915                                    QualType OrigT1, QualType OrigT2,
3916                                    bool &DerivedToBase,
3917                                    bool &ObjCConversion,
3918                                    bool &ObjCLifetimeConversion) {
3919   assert(!OrigT1->isReferenceType() &&
3920     "T1 must be the pointee type of the reference type");
3921   assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3922 
3923   QualType T1 = Context.getCanonicalType(OrigT1);
3924   QualType T2 = Context.getCanonicalType(OrigT2);
3925   Qualifiers T1Quals, T2Quals;
3926   QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3927   QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3928 
3929   // C++ [dcl.init.ref]p4:
3930   //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3931   //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3932   //   T1 is a base class of T2.
3933   DerivedToBase = false;
3934   ObjCConversion = false;
3935   ObjCLifetimeConversion = false;
3936   if (UnqualT1 == UnqualT2) {
3937     // Nothing to do.
3938   } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3939              isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
3940              IsDerivedFrom(UnqualT2, UnqualT1))
3941     DerivedToBase = true;
3942   else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3943            UnqualT2->isObjCObjectOrInterfaceType() &&
3944            Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3945     ObjCConversion = true;
3946   else
3947     return Ref_Incompatible;
3948 
3949   // At this point, we know that T1 and T2 are reference-related (at
3950   // least).
3951 
3952   // If the type is an array type, promote the element qualifiers to the type
3953   // for comparison.
3954   if (isa<ArrayType>(T1) && T1Quals)
3955     T1 = Context.getQualifiedType(UnqualT1, T1Quals);
3956   if (isa<ArrayType>(T2) && T2Quals)
3957     T2 = Context.getQualifiedType(UnqualT2, T2Quals);
3958 
3959   // C++ [dcl.init.ref]p4:
3960   //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
3961   //   reference-related to T2 and cv1 is the same cv-qualification
3962   //   as, or greater cv-qualification than, cv2. For purposes of
3963   //   overload resolution, cases for which cv1 is greater
3964   //   cv-qualification than cv2 are identified as
3965   //   reference-compatible with added qualification (see 13.3.3.2).
3966   //
3967   // Note that we also require equivalence of Objective-C GC and address-space
3968   // qualifiers when performing these computations, so that e.g., an int in
3969   // address space 1 is not reference-compatible with an int in address
3970   // space 2.
3971   if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
3972       T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
3973     T1Quals.removeObjCLifetime();
3974     T2Quals.removeObjCLifetime();
3975     ObjCLifetimeConversion = true;
3976   }
3977 
3978   if (T1Quals == T2Quals)
3979     return Ref_Compatible;
3980   else if (T1Quals.compatiblyIncludes(T2Quals))
3981     return Ref_Compatible_With_Added_Qualification;
3982   else
3983     return Ref_Related;
3984 }
3985 
3986 /// \brief Look for a user-defined conversion to an value reference-compatible
3987 ///        with DeclType. Return true if something definite is found.
3988 static bool
FindConversionForRefInit(Sema & S,ImplicitConversionSequence & ICS,QualType DeclType,SourceLocation DeclLoc,Expr * Init,QualType T2,bool AllowRvalues,bool AllowExplicit)3989 FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
3990                          QualType DeclType, SourceLocation DeclLoc,
3991                          Expr *Init, QualType T2, bool AllowRvalues,
3992                          bool AllowExplicit) {
3993   assert(T2->isRecordType() && "Can only find conversions of record types.");
3994   CXXRecordDecl *T2RecordDecl
3995     = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
3996 
3997   OverloadCandidateSet CandidateSet(DeclLoc);
3998   std::pair<CXXRecordDecl::conversion_iterator,
3999             CXXRecordDecl::conversion_iterator>
4000     Conversions = T2RecordDecl->getVisibleConversionFunctions();
4001   for (CXXRecordDecl::conversion_iterator
4002          I = Conversions.first, E = Conversions.second; I != E; ++I) {
4003     NamedDecl *D = *I;
4004     CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
4005     if (isa<UsingShadowDecl>(D))
4006       D = cast<UsingShadowDecl>(D)->getTargetDecl();
4007 
4008     FunctionTemplateDecl *ConvTemplate
4009       = dyn_cast<FunctionTemplateDecl>(D);
4010     CXXConversionDecl *Conv;
4011     if (ConvTemplate)
4012       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
4013     else
4014       Conv = cast<CXXConversionDecl>(D);
4015 
4016     // If this is an explicit conversion, and we're not allowed to consider
4017     // explicit conversions, skip it.
4018     if (!AllowExplicit && Conv->isExplicit())
4019       continue;
4020 
4021     if (AllowRvalues) {
4022       bool DerivedToBase = false;
4023       bool ObjCConversion = false;
4024       bool ObjCLifetimeConversion = false;
4025 
4026       // If we are initializing an rvalue reference, don't permit conversion
4027       // functions that return lvalues.
4028       if (!ConvTemplate && DeclType->isRValueReferenceType()) {
4029         const ReferenceType *RefType
4030           = Conv->getConversionType()->getAs<LValueReferenceType>();
4031         if (RefType && !RefType->getPointeeType()->isFunctionType())
4032           continue;
4033       }
4034 
4035       if (!ConvTemplate &&
4036           S.CompareReferenceRelationship(
4037             DeclLoc,
4038             Conv->getConversionType().getNonReferenceType()
4039               .getUnqualifiedType(),
4040             DeclType.getNonReferenceType().getUnqualifiedType(),
4041             DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4042           Sema::Ref_Incompatible)
4043         continue;
4044     } else {
4045       // If the conversion function doesn't return a reference type,
4046       // it can't be considered for this conversion. An rvalue reference
4047       // is only acceptable if its referencee is a function type.
4048 
4049       const ReferenceType *RefType =
4050         Conv->getConversionType()->getAs<ReferenceType>();
4051       if (!RefType ||
4052           (!RefType->isLValueReferenceType() &&
4053            !RefType->getPointeeType()->isFunctionType()))
4054         continue;
4055     }
4056 
4057     if (ConvTemplate)
4058       S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4059                                        Init, DeclType, CandidateSet);
4060     else
4061       S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4062                                DeclType, CandidateSet);
4063   }
4064 
4065   bool HadMultipleCandidates = (CandidateSet.size() > 1);
4066 
4067   OverloadCandidateSet::iterator Best;
4068   switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4069   case OR_Success:
4070     // C++ [over.ics.ref]p1:
4071     //
4072     //   [...] If the parameter binds directly to the result of
4073     //   applying a conversion function to the argument
4074     //   expression, the implicit conversion sequence is a
4075     //   user-defined conversion sequence (13.3.3.1.2), with the
4076     //   second standard conversion sequence either an identity
4077     //   conversion or, if the conversion function returns an
4078     //   entity of a type that is a derived class of the parameter
4079     //   type, a derived-to-base Conversion.
4080     if (!Best->FinalConversion.DirectBinding)
4081       return false;
4082 
4083     ICS.setUserDefined();
4084     ICS.UserDefined.Before = Best->Conversions[0].Standard;
4085     ICS.UserDefined.After = Best->FinalConversion;
4086     ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4087     ICS.UserDefined.ConversionFunction = Best->Function;
4088     ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4089     ICS.UserDefined.EllipsisConversion = false;
4090     assert(ICS.UserDefined.After.ReferenceBinding &&
4091            ICS.UserDefined.After.DirectBinding &&
4092            "Expected a direct reference binding!");
4093     return true;
4094 
4095   case OR_Ambiguous:
4096     ICS.setAmbiguous();
4097     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4098          Cand != CandidateSet.end(); ++Cand)
4099       if (Cand->Viable)
4100         ICS.Ambiguous.addConversion(Cand->Function);
4101     return true;
4102 
4103   case OR_No_Viable_Function:
4104   case OR_Deleted:
4105     // There was no suitable conversion, or we found a deleted
4106     // conversion; continue with other checks.
4107     return false;
4108   }
4109 
4110   llvm_unreachable("Invalid OverloadResult!");
4111 }
4112 
4113 /// \brief Compute an implicit conversion sequence for reference
4114 /// initialization.
4115 static ImplicitConversionSequence
TryReferenceInit(Sema & S,Expr * Init,QualType DeclType,SourceLocation DeclLoc,bool SuppressUserConversions,bool AllowExplicit)4116 TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4117                  SourceLocation DeclLoc,
4118                  bool SuppressUserConversions,
4119                  bool AllowExplicit) {
4120   assert(DeclType->isReferenceType() && "Reference init needs a reference");
4121 
4122   // Most paths end in a failed conversion.
4123   ImplicitConversionSequence ICS;
4124   ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4125 
4126   QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4127   QualType T2 = Init->getType();
4128 
4129   // If the initializer is the address of an overloaded function, try
4130   // to resolve the overloaded function. If all goes well, T2 is the
4131   // type of the resulting function.
4132   if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4133     DeclAccessPair Found;
4134     if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4135                                                                 false, Found))
4136       T2 = Fn->getType();
4137   }
4138 
4139   // Compute some basic properties of the types and the initializer.
4140   bool isRValRef = DeclType->isRValueReferenceType();
4141   bool DerivedToBase = false;
4142   bool ObjCConversion = false;
4143   bool ObjCLifetimeConversion = false;
4144   Expr::Classification InitCategory = Init->Classify(S.Context);
4145   Sema::ReferenceCompareResult RefRelationship
4146     = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4147                                      ObjCConversion, ObjCLifetimeConversion);
4148 
4149 
4150   // C++0x [dcl.init.ref]p5:
4151   //   A reference to type "cv1 T1" is initialized by an expression
4152   //   of type "cv2 T2" as follows:
4153 
4154   //     -- If reference is an lvalue reference and the initializer expression
4155   if (!isRValRef) {
4156     //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4157     //        reference-compatible with "cv2 T2," or
4158     //
4159     // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4160     if (InitCategory.isLValue() &&
4161         RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4162       // C++ [over.ics.ref]p1:
4163       //   When a parameter of reference type binds directly (8.5.3)
4164       //   to an argument expression, the implicit conversion sequence
4165       //   is the identity conversion, unless the argument expression
4166       //   has a type that is a derived class of the parameter type,
4167       //   in which case the implicit conversion sequence is a
4168       //   derived-to-base Conversion (13.3.3.1).
4169       ICS.setStandard();
4170       ICS.Standard.First = ICK_Identity;
4171       ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4172                          : ObjCConversion? ICK_Compatible_Conversion
4173                          : ICK_Identity;
4174       ICS.Standard.Third = ICK_Identity;
4175       ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4176       ICS.Standard.setToType(0, T2);
4177       ICS.Standard.setToType(1, T1);
4178       ICS.Standard.setToType(2, T1);
4179       ICS.Standard.ReferenceBinding = true;
4180       ICS.Standard.DirectBinding = true;
4181       ICS.Standard.IsLvalueReference = !isRValRef;
4182       ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4183       ICS.Standard.BindsToRvalue = false;
4184       ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4185       ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4186       ICS.Standard.CopyConstructor = 0;
4187 
4188       // Nothing more to do: the inaccessibility/ambiguity check for
4189       // derived-to-base conversions is suppressed when we're
4190       // computing the implicit conversion sequence (C++
4191       // [over.best.ics]p2).
4192       return ICS;
4193     }
4194 
4195     //       -- has a class type (i.e., T2 is a class type), where T1 is
4196     //          not reference-related to T2, and can be implicitly
4197     //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4198     //          is reference-compatible with "cv3 T3" 92) (this
4199     //          conversion is selected by enumerating the applicable
4200     //          conversion functions (13.3.1.6) and choosing the best
4201     //          one through overload resolution (13.3)),
4202     if (!SuppressUserConversions && T2->isRecordType() &&
4203         !S.RequireCompleteType(DeclLoc, T2, 0) &&
4204         RefRelationship == Sema::Ref_Incompatible) {
4205       if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4206                                    Init, T2, /*AllowRvalues=*/false,
4207                                    AllowExplicit))
4208         return ICS;
4209     }
4210   }
4211 
4212   //     -- Otherwise, the reference shall be an lvalue reference to a
4213   //        non-volatile const type (i.e., cv1 shall be const), or the reference
4214   //        shall be an rvalue reference.
4215   //
4216   // We actually handle one oddity of C++ [over.ics.ref] at this
4217   // point, which is that, due to p2 (which short-circuits reference
4218   // binding by only attempting a simple conversion for non-direct
4219   // bindings) and p3's strange wording, we allow a const volatile
4220   // reference to bind to an rvalue. Hence the check for the presence
4221   // of "const" rather than checking for "const" being the only
4222   // qualifier.
4223   // This is also the point where rvalue references and lvalue inits no longer
4224   // go together.
4225   if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4226     return ICS;
4227 
4228   //       -- If the initializer expression
4229   //
4230   //            -- is an xvalue, class prvalue, array prvalue or function
4231   //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4232   if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4233       (InitCategory.isXValue() ||
4234       (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4235       (InitCategory.isLValue() && T2->isFunctionType()))) {
4236     ICS.setStandard();
4237     ICS.Standard.First = ICK_Identity;
4238     ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4239                       : ObjCConversion? ICK_Compatible_Conversion
4240                       : ICK_Identity;
4241     ICS.Standard.Third = ICK_Identity;
4242     ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4243     ICS.Standard.setToType(0, T2);
4244     ICS.Standard.setToType(1, T1);
4245     ICS.Standard.setToType(2, T1);
4246     ICS.Standard.ReferenceBinding = true;
4247     // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4248     // binding unless we're binding to a class prvalue.
4249     // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4250     // allow the use of rvalue references in C++98/03 for the benefit of
4251     // standard library implementors; therefore, we need the xvalue check here.
4252     ICS.Standard.DirectBinding =
4253       S.getLangOpts().CPlusPlus11 ||
4254       (InitCategory.isPRValue() && !T2->isRecordType());
4255     ICS.Standard.IsLvalueReference = !isRValRef;
4256     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4257     ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4258     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4259     ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4260     ICS.Standard.CopyConstructor = 0;
4261     return ICS;
4262   }
4263 
4264   //            -- has a class type (i.e., T2 is a class type), where T1 is not
4265   //               reference-related to T2, and can be implicitly converted to
4266   //               an xvalue, class prvalue, or function lvalue of type
4267   //               "cv3 T3", where "cv1 T1" is reference-compatible with
4268   //               "cv3 T3",
4269   //
4270   //          then the reference is bound to the value of the initializer
4271   //          expression in the first case and to the result of the conversion
4272   //          in the second case (or, in either case, to an appropriate base
4273   //          class subobject).
4274   if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4275       T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4276       FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4277                                Init, T2, /*AllowRvalues=*/true,
4278                                AllowExplicit)) {
4279     // In the second case, if the reference is an rvalue reference
4280     // and the second standard conversion sequence of the
4281     // user-defined conversion sequence includes an lvalue-to-rvalue
4282     // conversion, the program is ill-formed.
4283     if (ICS.isUserDefined() && isRValRef &&
4284         ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4285       ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4286 
4287     return ICS;
4288   }
4289 
4290   //       -- Otherwise, a temporary of type "cv1 T1" is created and
4291   //          initialized from the initializer expression using the
4292   //          rules for a non-reference copy initialization (8.5). The
4293   //          reference is then bound to the temporary. If T1 is
4294   //          reference-related to T2, cv1 must be the same
4295   //          cv-qualification as, or greater cv-qualification than,
4296   //          cv2; otherwise, the program is ill-formed.
4297   if (RefRelationship == Sema::Ref_Related) {
4298     // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4299     // we would be reference-compatible or reference-compatible with
4300     // added qualification. But that wasn't the case, so the reference
4301     // initialization fails.
4302     //
4303     // Note that we only want to check address spaces and cvr-qualifiers here.
4304     // ObjC GC and lifetime qualifiers aren't important.
4305     Qualifiers T1Quals = T1.getQualifiers();
4306     Qualifiers T2Quals = T2.getQualifiers();
4307     T1Quals.removeObjCGCAttr();
4308     T1Quals.removeObjCLifetime();
4309     T2Quals.removeObjCGCAttr();
4310     T2Quals.removeObjCLifetime();
4311     if (!T1Quals.compatiblyIncludes(T2Quals))
4312       return ICS;
4313   }
4314 
4315   // If at least one of the types is a class type, the types are not
4316   // related, and we aren't allowed any user conversions, the
4317   // reference binding fails. This case is important for breaking
4318   // recursion, since TryImplicitConversion below will attempt to
4319   // create a temporary through the use of a copy constructor.
4320   if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4321       (T1->isRecordType() || T2->isRecordType()))
4322     return ICS;
4323 
4324   // If T1 is reference-related to T2 and the reference is an rvalue
4325   // reference, the initializer expression shall not be an lvalue.
4326   if (RefRelationship >= Sema::Ref_Related &&
4327       isRValRef && Init->Classify(S.Context).isLValue())
4328     return ICS;
4329 
4330   // C++ [over.ics.ref]p2:
4331   //   When a parameter of reference type is not bound directly to
4332   //   an argument expression, the conversion sequence is the one
4333   //   required to convert the argument expression to the
4334   //   underlying type of the reference according to
4335   //   13.3.3.1. Conceptually, this conversion sequence corresponds
4336   //   to copy-initializing a temporary of the underlying type with
4337   //   the argument expression. Any difference in top-level
4338   //   cv-qualification is subsumed by the initialization itself
4339   //   and does not constitute a conversion.
4340   ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4341                               /*AllowExplicit=*/false,
4342                               /*InOverloadResolution=*/false,
4343                               /*CStyle=*/false,
4344                               /*AllowObjCWritebackConversion=*/false);
4345 
4346   // Of course, that's still a reference binding.
4347   if (ICS.isStandard()) {
4348     ICS.Standard.ReferenceBinding = true;
4349     ICS.Standard.IsLvalueReference = !isRValRef;
4350     ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4351     ICS.Standard.BindsToRvalue = true;
4352     ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4353     ICS.Standard.ObjCLifetimeConversionBinding = false;
4354   } else if (ICS.isUserDefined()) {
4355     // Don't allow rvalue references to bind to lvalues.
4356     if (DeclType->isRValueReferenceType()) {
4357       if (const ReferenceType *RefType
4358             = ICS.UserDefined.ConversionFunction->getResultType()
4359                 ->getAs<LValueReferenceType>()) {
4360         if (!RefType->getPointeeType()->isFunctionType()) {
4361           ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4362                      DeclType);
4363           return ICS;
4364         }
4365       }
4366     }
4367 
4368     ICS.UserDefined.After.ReferenceBinding = true;
4369     ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4370     ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4371     ICS.UserDefined.After.BindsToRvalue = true;
4372     ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4373     ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4374   }
4375 
4376   return ICS;
4377 }
4378 
4379 static ImplicitConversionSequence
4380 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4381                       bool SuppressUserConversions,
4382                       bool InOverloadResolution,
4383                       bool AllowObjCWritebackConversion,
4384                       bool AllowExplicit = false);
4385 
4386 /// TryListConversion - Try to copy-initialize a value of type ToType from the
4387 /// initializer list From.
4388 static ImplicitConversionSequence
TryListConversion(Sema & S,InitListExpr * From,QualType ToType,bool SuppressUserConversions,bool InOverloadResolution,bool AllowObjCWritebackConversion)4389 TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4390                   bool SuppressUserConversions,
4391                   bool InOverloadResolution,
4392                   bool AllowObjCWritebackConversion) {
4393   // C++11 [over.ics.list]p1:
4394   //   When an argument is an initializer list, it is not an expression and
4395   //   special rules apply for converting it to a parameter type.
4396 
4397   ImplicitConversionSequence Result;
4398   Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4399   Result.setListInitializationSequence();
4400 
4401   // We need a complete type for what follows. Incomplete types can never be
4402   // initialized from init lists.
4403   if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4404     return Result;
4405 
4406   // C++11 [over.ics.list]p2:
4407   //   If the parameter type is std::initializer_list<X> or "array of X" and
4408   //   all the elements can be implicitly converted to X, the implicit
4409   //   conversion sequence is the worst conversion necessary to convert an
4410   //   element of the list to X.
4411   bool toStdInitializerList = false;
4412   QualType X;
4413   if (ToType->isArrayType())
4414     X = S.Context.getAsArrayType(ToType)->getElementType();
4415   else
4416     toStdInitializerList = S.isStdInitializerList(ToType, &X);
4417   if (!X.isNull()) {
4418     for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4419       Expr *Init = From->getInit(i);
4420       ImplicitConversionSequence ICS =
4421           TryCopyInitialization(S, Init, X, SuppressUserConversions,
4422                                 InOverloadResolution,
4423                                 AllowObjCWritebackConversion);
4424       // If a single element isn't convertible, fail.
4425       if (ICS.isBad()) {
4426         Result = ICS;
4427         break;
4428       }
4429       // Otherwise, look for the worst conversion.
4430       if (Result.isBad() ||
4431           CompareImplicitConversionSequences(S, ICS, Result) ==
4432               ImplicitConversionSequence::Worse)
4433         Result = ICS;
4434     }
4435 
4436     // For an empty list, we won't have computed any conversion sequence.
4437     // Introduce the identity conversion sequence.
4438     if (From->getNumInits() == 0) {
4439       Result.setStandard();
4440       Result.Standard.setAsIdentityConversion();
4441       Result.Standard.setFromType(ToType);
4442       Result.Standard.setAllToTypes(ToType);
4443     }
4444 
4445     Result.setListInitializationSequence();
4446     Result.setStdInitializerListElement(toStdInitializerList);
4447     return Result;
4448   }
4449 
4450   // C++11 [over.ics.list]p3:
4451   //   Otherwise, if the parameter is a non-aggregate class X and overload
4452   //   resolution chooses a single best constructor [...] the implicit
4453   //   conversion sequence is a user-defined conversion sequence. If multiple
4454   //   constructors are viable but none is better than the others, the
4455   //   implicit conversion sequence is a user-defined conversion sequence.
4456   if (ToType->isRecordType() && !ToType->isAggregateType()) {
4457     // This function can deal with initializer lists.
4458     Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4459                                       /*AllowExplicit=*/false,
4460                                       InOverloadResolution, /*CStyle=*/false,
4461                                       AllowObjCWritebackConversion);
4462     Result.setListInitializationSequence();
4463     return Result;
4464   }
4465 
4466   // C++11 [over.ics.list]p4:
4467   //   Otherwise, if the parameter has an aggregate type which can be
4468   //   initialized from the initializer list [...] the implicit conversion
4469   //   sequence is a user-defined conversion sequence.
4470   if (ToType->isAggregateType()) {
4471     // Type is an aggregate, argument is an init list. At this point it comes
4472     // down to checking whether the initialization works.
4473     // FIXME: Find out whether this parameter is consumed or not.
4474     InitializedEntity Entity =
4475         InitializedEntity::InitializeParameter(S.Context, ToType,
4476                                                /*Consumed=*/false);
4477     if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4478       Result.setUserDefined();
4479       Result.UserDefined.Before.setAsIdentityConversion();
4480       // Initializer lists don't have a type.
4481       Result.UserDefined.Before.setFromType(QualType());
4482       Result.UserDefined.Before.setAllToTypes(QualType());
4483 
4484       Result.UserDefined.After.setAsIdentityConversion();
4485       Result.UserDefined.After.setFromType(ToType);
4486       Result.UserDefined.After.setAllToTypes(ToType);
4487       Result.UserDefined.ConversionFunction = 0;
4488     }
4489     return Result;
4490   }
4491 
4492   // C++11 [over.ics.list]p5:
4493   //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4494   if (ToType->isReferenceType()) {
4495     // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4496     // mention initializer lists in any way. So we go by what list-
4497     // initialization would do and try to extrapolate from that.
4498 
4499     QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4500 
4501     // If the initializer list has a single element that is reference-related
4502     // to the parameter type, we initialize the reference from that.
4503     if (From->getNumInits() == 1) {
4504       Expr *Init = From->getInit(0);
4505 
4506       QualType T2 = Init->getType();
4507 
4508       // If the initializer is the address of an overloaded function, try
4509       // to resolve the overloaded function. If all goes well, T2 is the
4510       // type of the resulting function.
4511       if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4512         DeclAccessPair Found;
4513         if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4514                                    Init, ToType, false, Found))
4515           T2 = Fn->getType();
4516       }
4517 
4518       // Compute some basic properties of the types and the initializer.
4519       bool dummy1 = false;
4520       bool dummy2 = false;
4521       bool dummy3 = false;
4522       Sema::ReferenceCompareResult RefRelationship
4523         = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4524                                          dummy2, dummy3);
4525 
4526       if (RefRelationship >= Sema::Ref_Related)
4527         return TryReferenceInit(S, Init, ToType,
4528                                 /*FIXME:*/From->getLocStart(),
4529                                 SuppressUserConversions,
4530                                 /*AllowExplicit=*/false);
4531     }
4532 
4533     // Otherwise, we bind the reference to a temporary created from the
4534     // initializer list.
4535     Result = TryListConversion(S, From, T1, SuppressUserConversions,
4536                                InOverloadResolution,
4537                                AllowObjCWritebackConversion);
4538     if (Result.isFailure())
4539       return Result;
4540     assert(!Result.isEllipsis() &&
4541            "Sub-initialization cannot result in ellipsis conversion.");
4542 
4543     // Can we even bind to a temporary?
4544     if (ToType->isRValueReferenceType() ||
4545         (T1.isConstQualified() && !T1.isVolatileQualified())) {
4546       StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4547                                             Result.UserDefined.After;
4548       SCS.ReferenceBinding = true;
4549       SCS.IsLvalueReference = ToType->isLValueReferenceType();
4550       SCS.BindsToRvalue = true;
4551       SCS.BindsToFunctionLvalue = false;
4552       SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4553       SCS.ObjCLifetimeConversionBinding = false;
4554     } else
4555       Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4556                     From, ToType);
4557     return Result;
4558   }
4559 
4560   // C++11 [over.ics.list]p6:
4561   //   Otherwise, if the parameter type is not a class:
4562   if (!ToType->isRecordType()) {
4563     //    - if the initializer list has one element, the implicit conversion
4564     //      sequence is the one required to convert the element to the
4565     //      parameter type.
4566     unsigned NumInits = From->getNumInits();
4567     if (NumInits == 1)
4568       Result = TryCopyInitialization(S, From->getInit(0), ToType,
4569                                      SuppressUserConversions,
4570                                      InOverloadResolution,
4571                                      AllowObjCWritebackConversion);
4572     //    - if the initializer list has no elements, the implicit conversion
4573     //      sequence is the identity conversion.
4574     else if (NumInits == 0) {
4575       Result.setStandard();
4576       Result.Standard.setAsIdentityConversion();
4577       Result.Standard.setFromType(ToType);
4578       Result.Standard.setAllToTypes(ToType);
4579     }
4580     Result.setListInitializationSequence();
4581     return Result;
4582   }
4583 
4584   // C++11 [over.ics.list]p7:
4585   //   In all cases other than those enumerated above, no conversion is possible
4586   return Result;
4587 }
4588 
4589 /// TryCopyInitialization - Try to copy-initialize a value of type
4590 /// ToType from the expression From. Return the implicit conversion
4591 /// sequence required to pass this argument, which may be a bad
4592 /// conversion sequence (meaning that the argument cannot be passed to
4593 /// a parameter of this type). If @p SuppressUserConversions, then we
4594 /// do not permit any user-defined conversion sequences.
4595 static ImplicitConversionSequence
TryCopyInitialization(Sema & S,Expr * From,QualType ToType,bool SuppressUserConversions,bool InOverloadResolution,bool AllowObjCWritebackConversion,bool AllowExplicit)4596 TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4597                       bool SuppressUserConversions,
4598                       bool InOverloadResolution,
4599                       bool AllowObjCWritebackConversion,
4600                       bool AllowExplicit) {
4601   if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4602     return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4603                              InOverloadResolution,AllowObjCWritebackConversion);
4604 
4605   if (ToType->isReferenceType())
4606     return TryReferenceInit(S, From, ToType,
4607                             /*FIXME:*/From->getLocStart(),
4608                             SuppressUserConversions,
4609                             AllowExplicit);
4610 
4611   return TryImplicitConversion(S, From, ToType,
4612                                SuppressUserConversions,
4613                                /*AllowExplicit=*/false,
4614                                InOverloadResolution,
4615                                /*CStyle=*/false,
4616                                AllowObjCWritebackConversion);
4617 }
4618 
TryCopyInitialization(const CanQualType FromQTy,const CanQualType ToQTy,Sema & S,SourceLocation Loc,ExprValueKind FromVK)4619 static bool TryCopyInitialization(const CanQualType FromQTy,
4620                                   const CanQualType ToQTy,
4621                                   Sema &S,
4622                                   SourceLocation Loc,
4623                                   ExprValueKind FromVK) {
4624   OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4625   ImplicitConversionSequence ICS =
4626     TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4627 
4628   return !ICS.isBad();
4629 }
4630 
4631 /// TryObjectArgumentInitialization - Try to initialize the object
4632 /// parameter of the given member function (@c Method) from the
4633 /// expression @p From.
4634 static ImplicitConversionSequence
TryObjectArgumentInitialization(Sema & S,QualType FromType,Expr::Classification FromClassification,CXXMethodDecl * Method,CXXRecordDecl * ActingContext)4635 TryObjectArgumentInitialization(Sema &S, QualType FromType,
4636                                 Expr::Classification FromClassification,
4637                                 CXXMethodDecl *Method,
4638                                 CXXRecordDecl *ActingContext) {
4639   QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4640   // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4641   //                 const volatile object.
4642   unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4643     Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4644   QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4645 
4646   // Set up the conversion sequence as a "bad" conversion, to allow us
4647   // to exit early.
4648   ImplicitConversionSequence ICS;
4649 
4650   // We need to have an object of class type.
4651   if (const PointerType *PT = FromType->getAs<PointerType>()) {
4652     FromType = PT->getPointeeType();
4653 
4654     // When we had a pointer, it's implicitly dereferenced, so we
4655     // better have an lvalue.
4656     assert(FromClassification.isLValue());
4657   }
4658 
4659   assert(FromType->isRecordType());
4660 
4661   // C++0x [over.match.funcs]p4:
4662   //   For non-static member functions, the type of the implicit object
4663   //   parameter is
4664   //
4665   //     - "lvalue reference to cv X" for functions declared without a
4666   //        ref-qualifier or with the & ref-qualifier
4667   //     - "rvalue reference to cv X" for functions declared with the &&
4668   //        ref-qualifier
4669   //
4670   // where X is the class of which the function is a member and cv is the
4671   // cv-qualification on the member function declaration.
4672   //
4673   // However, when finding an implicit conversion sequence for the argument, we
4674   // are not allowed to create temporaries or perform user-defined conversions
4675   // (C++ [over.match.funcs]p5). We perform a simplified version of
4676   // reference binding here, that allows class rvalues to bind to
4677   // non-constant references.
4678 
4679   // First check the qualifiers.
4680   QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4681   if (ImplicitParamType.getCVRQualifiers()
4682                                     != FromTypeCanon.getLocalCVRQualifiers() &&
4683       !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4684     ICS.setBad(BadConversionSequence::bad_qualifiers,
4685                FromType, ImplicitParamType);
4686     return ICS;
4687   }
4688 
4689   // Check that we have either the same type or a derived type. It
4690   // affects the conversion rank.
4691   QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4692   ImplicitConversionKind SecondKind;
4693   if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4694     SecondKind = ICK_Identity;
4695   } else if (S.IsDerivedFrom(FromType, ClassType))
4696     SecondKind = ICK_Derived_To_Base;
4697   else {
4698     ICS.setBad(BadConversionSequence::unrelated_class,
4699                FromType, ImplicitParamType);
4700     return ICS;
4701   }
4702 
4703   // Check the ref-qualifier.
4704   switch (Method->getRefQualifier()) {
4705   case RQ_None:
4706     // Do nothing; we don't care about lvalueness or rvalueness.
4707     break;
4708 
4709   case RQ_LValue:
4710     if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4711       // non-const lvalue reference cannot bind to an rvalue
4712       ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4713                  ImplicitParamType);
4714       return ICS;
4715     }
4716     break;
4717 
4718   case RQ_RValue:
4719     if (!FromClassification.isRValue()) {
4720       // rvalue reference cannot bind to an lvalue
4721       ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4722                  ImplicitParamType);
4723       return ICS;
4724     }
4725     break;
4726   }
4727 
4728   // Success. Mark this as a reference binding.
4729   ICS.setStandard();
4730   ICS.Standard.setAsIdentityConversion();
4731   ICS.Standard.Second = SecondKind;
4732   ICS.Standard.setFromType(FromType);
4733   ICS.Standard.setAllToTypes(ImplicitParamType);
4734   ICS.Standard.ReferenceBinding = true;
4735   ICS.Standard.DirectBinding = true;
4736   ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4737   ICS.Standard.BindsToFunctionLvalue = false;
4738   ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4739   ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4740     = (Method->getRefQualifier() == RQ_None);
4741   return ICS;
4742 }
4743 
4744 /// PerformObjectArgumentInitialization - Perform initialization of
4745 /// the implicit object parameter for the given Method with the given
4746 /// expression.
4747 ExprResult
PerformObjectArgumentInitialization(Expr * From,NestedNameSpecifier * Qualifier,NamedDecl * FoundDecl,CXXMethodDecl * Method)4748 Sema::PerformObjectArgumentInitialization(Expr *From,
4749                                           NestedNameSpecifier *Qualifier,
4750                                           NamedDecl *FoundDecl,
4751                                           CXXMethodDecl *Method) {
4752   QualType FromRecordType, DestType;
4753   QualType ImplicitParamRecordType  =
4754     Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4755 
4756   Expr::Classification FromClassification;
4757   if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4758     FromRecordType = PT->getPointeeType();
4759     DestType = Method->getThisType(Context);
4760     FromClassification = Expr::Classification::makeSimpleLValue();
4761   } else {
4762     FromRecordType = From->getType();
4763     DestType = ImplicitParamRecordType;
4764     FromClassification = From->Classify(Context);
4765   }
4766 
4767   // Note that we always use the true parent context when performing
4768   // the actual argument initialization.
4769   ImplicitConversionSequence ICS
4770     = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4771                                       Method, Method->getParent());
4772   if (ICS.isBad()) {
4773     if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4774       Qualifiers FromQs = FromRecordType.getQualifiers();
4775       Qualifiers ToQs = DestType.getQualifiers();
4776       unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4777       if (CVR) {
4778         Diag(From->getLocStart(),
4779              diag::err_member_function_call_bad_cvr)
4780           << Method->getDeclName() << FromRecordType << (CVR - 1)
4781           << From->getSourceRange();
4782         Diag(Method->getLocation(), diag::note_previous_decl)
4783           << Method->getDeclName();
4784         return ExprError();
4785       }
4786     }
4787 
4788     return Diag(From->getLocStart(),
4789                 diag::err_implicit_object_parameter_init)
4790        << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4791   }
4792 
4793   if (ICS.Standard.Second == ICK_Derived_To_Base) {
4794     ExprResult FromRes =
4795       PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4796     if (FromRes.isInvalid())
4797       return ExprError();
4798     From = FromRes.take();
4799   }
4800 
4801   if (!Context.hasSameType(From->getType(), DestType))
4802     From = ImpCastExprToType(From, DestType, CK_NoOp,
4803                              From->getValueKind()).take();
4804   return Owned(From);
4805 }
4806 
4807 /// TryContextuallyConvertToBool - Attempt to contextually convert the
4808 /// expression From to bool (C++0x [conv]p3).
4809 static ImplicitConversionSequence
TryContextuallyConvertToBool(Sema & S,Expr * From)4810 TryContextuallyConvertToBool(Sema &S, Expr *From) {
4811   // FIXME: This is pretty broken.
4812   return TryImplicitConversion(S, From, S.Context.BoolTy,
4813                                // FIXME: Are these flags correct?
4814                                /*SuppressUserConversions=*/false,
4815                                /*AllowExplicit=*/true,
4816                                /*InOverloadResolution=*/false,
4817                                /*CStyle=*/false,
4818                                /*AllowObjCWritebackConversion=*/false);
4819 }
4820 
4821 /// PerformContextuallyConvertToBool - Perform a contextual conversion
4822 /// of the expression From to bool (C++0x [conv]p3).
PerformContextuallyConvertToBool(Expr * From)4823 ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4824   if (checkPlaceholderForOverload(*this, From))
4825     return ExprError();
4826 
4827   ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4828   if (!ICS.isBad())
4829     return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4830 
4831   if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4832     return Diag(From->getLocStart(),
4833                 diag::err_typecheck_bool_condition)
4834                   << From->getType() << From->getSourceRange();
4835   return ExprError();
4836 }
4837 
4838 /// Check that the specified conversion is permitted in a converted constant
4839 /// expression, according to C++11 [expr.const]p3. Return true if the conversion
4840 /// is acceptable.
CheckConvertedConstantConversions(Sema & S,StandardConversionSequence & SCS)4841 static bool CheckConvertedConstantConversions(Sema &S,
4842                                               StandardConversionSequence &SCS) {
4843   // Since we know that the target type is an integral or unscoped enumeration
4844   // type, most conversion kinds are impossible. All possible First and Third
4845   // conversions are fine.
4846   switch (SCS.Second) {
4847   case ICK_Identity:
4848   case ICK_Integral_Promotion:
4849   case ICK_Integral_Conversion:
4850   case ICK_Zero_Event_Conversion:
4851     return true;
4852 
4853   case ICK_Boolean_Conversion:
4854     // Conversion from an integral or unscoped enumeration type to bool is
4855     // classified as ICK_Boolean_Conversion, but it's also an integral
4856     // conversion, so it's permitted in a converted constant expression.
4857     return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4858            SCS.getToType(2)->isBooleanType();
4859 
4860   case ICK_Floating_Integral:
4861   case ICK_Complex_Real:
4862     return false;
4863 
4864   case ICK_Lvalue_To_Rvalue:
4865   case ICK_Array_To_Pointer:
4866   case ICK_Function_To_Pointer:
4867   case ICK_NoReturn_Adjustment:
4868   case ICK_Qualification:
4869   case ICK_Compatible_Conversion:
4870   case ICK_Vector_Conversion:
4871   case ICK_Vector_Splat:
4872   case ICK_Derived_To_Base:
4873   case ICK_Pointer_Conversion:
4874   case ICK_Pointer_Member:
4875   case ICK_Block_Pointer_Conversion:
4876   case ICK_Writeback_Conversion:
4877   case ICK_Floating_Promotion:
4878   case ICK_Complex_Promotion:
4879   case ICK_Complex_Conversion:
4880   case ICK_Floating_Conversion:
4881   case ICK_TransparentUnionConversion:
4882     llvm_unreachable("unexpected second conversion kind");
4883 
4884   case ICK_Num_Conversion_Kinds:
4885     break;
4886   }
4887 
4888   llvm_unreachable("unknown conversion kind");
4889 }
4890 
4891 /// CheckConvertedConstantExpression - Check that the expression From is a
4892 /// converted constant expression of type T, perform the conversion and produce
4893 /// the converted expression, per C++11 [expr.const]p3.
CheckConvertedConstantExpression(Expr * From,QualType T,llvm::APSInt & Value,CCEKind CCE)4894 ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4895                                                   llvm::APSInt &Value,
4896                                                   CCEKind CCE) {
4897   assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
4898   assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4899 
4900   if (checkPlaceholderForOverload(*this, From))
4901     return ExprError();
4902 
4903   // C++11 [expr.const]p3 with proposed wording fixes:
4904   //  A converted constant expression of type T is a core constant expression,
4905   //  implicitly converted to a prvalue of type T, where the converted
4906   //  expression is a literal constant expression and the implicit conversion
4907   //  sequence contains only user-defined conversions, lvalue-to-rvalue
4908   //  conversions, integral promotions, and integral conversions other than
4909   //  narrowing conversions.
4910   ImplicitConversionSequence ICS =
4911     TryImplicitConversion(From, T,
4912                           /*SuppressUserConversions=*/false,
4913                           /*AllowExplicit=*/false,
4914                           /*InOverloadResolution=*/false,
4915                           /*CStyle=*/false,
4916                           /*AllowObjcWritebackConversion=*/false);
4917   StandardConversionSequence *SCS = 0;
4918   switch (ICS.getKind()) {
4919   case ImplicitConversionSequence::StandardConversion:
4920     if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4921       return Diag(From->getLocStart(),
4922                   diag::err_typecheck_converted_constant_expression_disallowed)
4923                << From->getType() << From->getSourceRange() << T;
4924     SCS = &ICS.Standard;
4925     break;
4926   case ImplicitConversionSequence::UserDefinedConversion:
4927     // We are converting from class type to an integral or enumeration type, so
4928     // the Before sequence must be trivial.
4929     if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4930       return Diag(From->getLocStart(),
4931                   diag::err_typecheck_converted_constant_expression_disallowed)
4932                << From->getType() << From->getSourceRange() << T;
4933     SCS = &ICS.UserDefined.After;
4934     break;
4935   case ImplicitConversionSequence::AmbiguousConversion:
4936   case ImplicitConversionSequence::BadConversion:
4937     if (!DiagnoseMultipleUserDefinedConversion(From, T))
4938       return Diag(From->getLocStart(),
4939                   diag::err_typecheck_converted_constant_expression)
4940                     << From->getType() << From->getSourceRange() << T;
4941     return ExprError();
4942 
4943   case ImplicitConversionSequence::EllipsisConversion:
4944     llvm_unreachable("ellipsis conversion in converted constant expression");
4945   }
4946 
4947   ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4948   if (Result.isInvalid())
4949     return Result;
4950 
4951   // Check for a narrowing implicit conversion.
4952   APValue PreNarrowingValue;
4953   QualType PreNarrowingType;
4954   switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
4955                                 PreNarrowingType)) {
4956   case NK_Variable_Narrowing:
4957     // Implicit conversion to a narrower type, and the value is not a constant
4958     // expression. We'll diagnose this in a moment.
4959   case NK_Not_Narrowing:
4960     break;
4961 
4962   case NK_Constant_Narrowing:
4963     Diag(From->getLocStart(),
4964          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4965                              diag::err_cce_narrowing)
4966       << CCE << /*Constant*/1
4967       << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
4968     break;
4969 
4970   case NK_Type_Narrowing:
4971     Diag(From->getLocStart(),
4972          isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4973                              diag::err_cce_narrowing)
4974       << CCE << /*Constant*/0 << From->getType() << T;
4975     break;
4976   }
4977 
4978   // Check the expression is a constant expression.
4979   SmallVector<PartialDiagnosticAt, 8> Notes;
4980   Expr::EvalResult Eval;
4981   Eval.Diag = &Notes;
4982 
4983   if (!Result.get()->EvaluateAsRValue(Eval, Context) || !Eval.Val.isInt()) {
4984     // The expression can't be folded, so we can't keep it at this position in
4985     // the AST.
4986     Result = ExprError();
4987   } else {
4988     Value = Eval.Val.getInt();
4989 
4990     if (Notes.empty()) {
4991       // It's a constant expression.
4992       return Result;
4993     }
4994   }
4995 
4996   // It's not a constant expression. Produce an appropriate diagnostic.
4997   if (Notes.size() == 1 &&
4998       Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
4999     Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
5000   else {
5001     Diag(From->getLocStart(), diag::err_expr_not_cce)
5002       << CCE << From->getSourceRange();
5003     for (unsigned I = 0; I < Notes.size(); ++I)
5004       Diag(Notes[I].first, Notes[I].second);
5005   }
5006   return Result;
5007 }
5008 
5009 /// dropPointerConversions - If the given standard conversion sequence
5010 /// involves any pointer conversions, remove them.  This may change
5011 /// the result type of the conversion sequence.
dropPointerConversion(StandardConversionSequence & SCS)5012 static void dropPointerConversion(StandardConversionSequence &SCS) {
5013   if (SCS.Second == ICK_Pointer_Conversion) {
5014     SCS.Second = ICK_Identity;
5015     SCS.Third = ICK_Identity;
5016     SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
5017   }
5018 }
5019 
5020 /// TryContextuallyConvertToObjCPointer - Attempt to contextually
5021 /// convert the expression From to an Objective-C pointer type.
5022 static ImplicitConversionSequence
TryContextuallyConvertToObjCPointer(Sema & S,Expr * From)5023 TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
5024   // Do an implicit conversion to 'id'.
5025   QualType Ty = S.Context.getObjCIdType();
5026   ImplicitConversionSequence ICS
5027     = TryImplicitConversion(S, From, Ty,
5028                             // FIXME: Are these flags correct?
5029                             /*SuppressUserConversions=*/false,
5030                             /*AllowExplicit=*/true,
5031                             /*InOverloadResolution=*/false,
5032                             /*CStyle=*/false,
5033                             /*AllowObjCWritebackConversion=*/false);
5034 
5035   // Strip off any final conversions to 'id'.
5036   switch (ICS.getKind()) {
5037   case ImplicitConversionSequence::BadConversion:
5038   case ImplicitConversionSequence::AmbiguousConversion:
5039   case ImplicitConversionSequence::EllipsisConversion:
5040     break;
5041 
5042   case ImplicitConversionSequence::UserDefinedConversion:
5043     dropPointerConversion(ICS.UserDefined.After);
5044     break;
5045 
5046   case ImplicitConversionSequence::StandardConversion:
5047     dropPointerConversion(ICS.Standard);
5048     break;
5049   }
5050 
5051   return ICS;
5052 }
5053 
5054 /// PerformContextuallyConvertToObjCPointer - Perform a contextual
5055 /// conversion of the expression From to an Objective-C pointer type.
PerformContextuallyConvertToObjCPointer(Expr * From)5056 ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5057   if (checkPlaceholderForOverload(*this, From))
5058     return ExprError();
5059 
5060   QualType Ty = Context.getObjCIdType();
5061   ImplicitConversionSequence ICS =
5062     TryContextuallyConvertToObjCPointer(*this, From);
5063   if (!ICS.isBad())
5064     return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5065   return ExprError();
5066 }
5067 
5068 /// Determine whether the provided type is an integral type, or an enumeration
5069 /// type of a permitted flavor.
match(QualType T)5070 bool Sema::ICEConvertDiagnoser::match(QualType T) {
5071   return AllowScopedEnumerations ? T->isIntegralOrEnumerationType()
5072                                  : T->isIntegralOrUnscopedEnumerationType();
5073 }
5074 
5075 static ExprResult
diagnoseAmbiguousConversion(Sema & SemaRef,SourceLocation Loc,Expr * From,Sema::ContextualImplicitConverter & Converter,QualType T,UnresolvedSetImpl & ViableConversions)5076 diagnoseAmbiguousConversion(Sema &SemaRef, SourceLocation Loc, Expr *From,
5077                             Sema::ContextualImplicitConverter &Converter,
5078                             QualType T, UnresolvedSetImpl &ViableConversions) {
5079 
5080   if (Converter.Suppress)
5081     return ExprError();
5082 
5083   Converter.diagnoseAmbiguous(SemaRef, Loc, T) << From->getSourceRange();
5084   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5085     CXXConversionDecl *Conv =
5086         cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5087     QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5088     Converter.noteAmbiguous(SemaRef, Conv, ConvTy);
5089   }
5090   return SemaRef.Owned(From);
5091 }
5092 
5093 static bool
diagnoseNoViableConversion(Sema & SemaRef,SourceLocation Loc,Expr * & From,Sema::ContextualImplicitConverter & Converter,QualType T,bool HadMultipleCandidates,UnresolvedSetImpl & ExplicitConversions)5094 diagnoseNoViableConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5095                            Sema::ContextualImplicitConverter &Converter,
5096                            QualType T, bool HadMultipleCandidates,
5097                            UnresolvedSetImpl &ExplicitConversions) {
5098   if (ExplicitConversions.size() == 1 && !Converter.Suppress) {
5099     DeclAccessPair Found = ExplicitConversions[0];
5100     CXXConversionDecl *Conversion =
5101         cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5102 
5103     // The user probably meant to invoke the given explicit
5104     // conversion; use it.
5105     QualType ConvTy = Conversion->getConversionType().getNonReferenceType();
5106     std::string TypeStr;
5107     ConvTy.getAsStringInternal(TypeStr, SemaRef.getPrintingPolicy());
5108 
5109     Converter.diagnoseExplicitConv(SemaRef, Loc, T, ConvTy)
5110         << FixItHint::CreateInsertion(From->getLocStart(),
5111                                       "static_cast<" + TypeStr + ">(")
5112         << FixItHint::CreateInsertion(
5113                SemaRef.PP.getLocForEndOfToken(From->getLocEnd()), ")");
5114     Converter.noteExplicitConv(SemaRef, Conversion, ConvTy);
5115 
5116     // If we aren't in a SFINAE context, build a call to the
5117     // explicit conversion function.
5118     if (SemaRef.isSFINAEContext())
5119       return true;
5120 
5121     SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5122     ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5123                                                        HadMultipleCandidates);
5124     if (Result.isInvalid())
5125       return true;
5126     // Record usage of conversion in an implicit cast.
5127     From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5128                                     CK_UserDefinedConversion, Result.get(), 0,
5129                                     Result.get()->getValueKind());
5130   }
5131   return false;
5132 }
5133 
recordConversion(Sema & SemaRef,SourceLocation Loc,Expr * & From,Sema::ContextualImplicitConverter & Converter,QualType T,bool HadMultipleCandidates,DeclAccessPair & Found)5134 static bool recordConversion(Sema &SemaRef, SourceLocation Loc, Expr *&From,
5135                              Sema::ContextualImplicitConverter &Converter,
5136                              QualType T, bool HadMultipleCandidates,
5137                              DeclAccessPair &Found) {
5138   CXXConversionDecl *Conversion =
5139       cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5140   SemaRef.CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5141 
5142   QualType ToType = Conversion->getConversionType().getNonReferenceType();
5143   if (!Converter.SuppressConversion) {
5144     if (SemaRef.isSFINAEContext())
5145       return true;
5146 
5147     Converter.diagnoseConversion(SemaRef, Loc, T, ToType)
5148         << From->getSourceRange();
5149   }
5150 
5151   ExprResult Result = SemaRef.BuildCXXMemberCallExpr(From, Found, Conversion,
5152                                                      HadMultipleCandidates);
5153   if (Result.isInvalid())
5154     return true;
5155   // Record usage of conversion in an implicit cast.
5156   From = ImplicitCastExpr::Create(SemaRef.Context, Result.get()->getType(),
5157                                   CK_UserDefinedConversion, Result.get(), 0,
5158                                   Result.get()->getValueKind());
5159   return false;
5160 }
5161 
finishContextualImplicitConversion(Sema & SemaRef,SourceLocation Loc,Expr * From,Sema::ContextualImplicitConverter & Converter)5162 static ExprResult finishContextualImplicitConversion(
5163     Sema &SemaRef, SourceLocation Loc, Expr *From,
5164     Sema::ContextualImplicitConverter &Converter) {
5165   if (!Converter.match(From->getType()) && !Converter.Suppress)
5166     Converter.diagnoseNoMatch(SemaRef, Loc, From->getType())
5167         << From->getSourceRange();
5168 
5169   return SemaRef.DefaultLvalueConversion(From);
5170 }
5171 
5172 static void
collectViableConversionCandidates(Sema & SemaRef,Expr * From,QualType ToType,UnresolvedSetImpl & ViableConversions,OverloadCandidateSet & CandidateSet)5173 collectViableConversionCandidates(Sema &SemaRef, Expr *From, QualType ToType,
5174                                   UnresolvedSetImpl &ViableConversions,
5175                                   OverloadCandidateSet &CandidateSet) {
5176   for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5177     DeclAccessPair FoundDecl = ViableConversions[I];
5178     NamedDecl *D = FoundDecl.getDecl();
5179     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
5180     if (isa<UsingShadowDecl>(D))
5181       D = cast<UsingShadowDecl>(D)->getTargetDecl();
5182 
5183     CXXConversionDecl *Conv;
5184     FunctionTemplateDecl *ConvTemplate;
5185     if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
5186       Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5187     else
5188       Conv = cast<CXXConversionDecl>(D);
5189 
5190     if (ConvTemplate)
5191       SemaRef.AddTemplateConversionCandidate(
5192           ConvTemplate, FoundDecl, ActingContext, From, ToType, CandidateSet);
5193     else
5194       SemaRef.AddConversionCandidate(Conv, FoundDecl, ActingContext, From,
5195                                      ToType, CandidateSet);
5196   }
5197 }
5198 
5199 /// \brief Attempt to convert the given expression to a type which is accepted
5200 /// by the given converter.
5201 ///
5202 /// This routine will attempt to convert an expression of class type to a
5203 /// type accepted by the specified converter. In C++11 and before, the class
5204 /// must have a single non-explicit conversion function converting to a matching
5205 /// type. In C++1y, there can be multiple such conversion functions, but only
5206 /// one target type.
5207 ///
5208 /// \param Loc The source location of the construct that requires the
5209 /// conversion.
5210 ///
5211 /// \param From The expression we're converting from.
5212 ///
5213 /// \param Converter Used to control and diagnose the conversion process.
5214 ///
5215 /// \returns The expression, converted to an integral or enumeration type if
5216 /// successful.
PerformContextualImplicitConversion(SourceLocation Loc,Expr * From,ContextualImplicitConverter & Converter)5217 ExprResult Sema::PerformContextualImplicitConversion(
5218     SourceLocation Loc, Expr *From, ContextualImplicitConverter &Converter) {
5219   // We can't perform any more checking for type-dependent expressions.
5220   if (From->isTypeDependent())
5221     return Owned(From);
5222 
5223   // Process placeholders immediately.
5224   if (From->hasPlaceholderType()) {
5225     ExprResult result = CheckPlaceholderExpr(From);
5226     if (result.isInvalid())
5227       return result;
5228     From = result.take();
5229   }
5230 
5231   // If the expression already has a matching type, we're golden.
5232   QualType T = From->getType();
5233   if (Converter.match(T))
5234     return DefaultLvalueConversion(From);
5235 
5236   // FIXME: Check for missing '()' if T is a function type?
5237 
5238   // We can only perform contextual implicit conversions on objects of class
5239   // type.
5240   const RecordType *RecordTy = T->getAs<RecordType>();
5241   if (!RecordTy || !getLangOpts().CPlusPlus) {
5242     if (!Converter.Suppress)
5243       Converter.diagnoseNoMatch(*this, Loc, T) << From->getSourceRange();
5244     return Owned(From);
5245   }
5246 
5247   // We must have a complete class type.
5248   struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5249     ContextualImplicitConverter &Converter;
5250     Expr *From;
5251 
5252     TypeDiagnoserPartialDiag(ContextualImplicitConverter &Converter, Expr *From)
5253         : TypeDiagnoser(Converter.Suppress), Converter(Converter), From(From) {}
5254 
5255     virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5256       Converter.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5257     }
5258   } IncompleteDiagnoser(Converter, From);
5259 
5260   if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5261     return Owned(From);
5262 
5263   // Look for a conversion to an integral or enumeration type.
5264   UnresolvedSet<4>
5265       ViableConversions; // These are *potentially* viable in C++1y.
5266   UnresolvedSet<4> ExplicitConversions;
5267   std::pair<CXXRecordDecl::conversion_iterator,
5268             CXXRecordDecl::conversion_iterator> Conversions =
5269       cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5270 
5271   bool HadMultipleCandidates =
5272       (std::distance(Conversions.first, Conversions.second) > 1);
5273 
5274   // To check that there is only one target type, in C++1y:
5275   QualType ToType;
5276   bool HasUniqueTargetType = true;
5277 
5278   // Collect explicit or viable (potentially in C++1y) conversions.
5279   for (CXXRecordDecl::conversion_iterator I = Conversions.first,
5280                                           E = Conversions.second;
5281        I != E; ++I) {
5282     NamedDecl *D = (*I)->getUnderlyingDecl();
5283     CXXConversionDecl *Conversion;
5284     FunctionTemplateDecl *ConvTemplate = dyn_cast<FunctionTemplateDecl>(D);
5285     if (ConvTemplate) {
5286       if (getLangOpts().CPlusPlus1y)
5287         Conversion = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
5288       else
5289         continue; // C++11 does not consider conversion operator templates(?).
5290     } else
5291       Conversion = cast<CXXConversionDecl>(D);
5292 
5293     assert((!ConvTemplate || getLangOpts().CPlusPlus1y) &&
5294            "Conversion operator templates are considered potentially "
5295            "viable in C++1y");
5296 
5297     QualType CurToType = Conversion->getConversionType().getNonReferenceType();
5298     if (Converter.match(CurToType) || ConvTemplate) {
5299 
5300       if (Conversion->isExplicit()) {
5301         // FIXME: For C++1y, do we need this restriction?
5302         // cf. diagnoseNoViableConversion()
5303         if (!ConvTemplate)
5304           ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5305       } else {
5306         if (!ConvTemplate && getLangOpts().CPlusPlus1y) {
5307           if (ToType.isNull())
5308             ToType = CurToType.getUnqualifiedType();
5309           else if (HasUniqueTargetType &&
5310                    (CurToType.getUnqualifiedType() != ToType))
5311             HasUniqueTargetType = false;
5312         }
5313         ViableConversions.addDecl(I.getDecl(), I.getAccess());
5314       }
5315     }
5316   }
5317 
5318   if (getLangOpts().CPlusPlus1y) {
5319     // C++1y [conv]p6:
5320     // ... An expression e of class type E appearing in such a context
5321     // is said to be contextually implicitly converted to a specified
5322     // type T and is well-formed if and only if e can be implicitly
5323     // converted to a type T that is determined as follows: E is searched
5324     // for conversion functions whose return type is cv T or reference to
5325     // cv T such that T is allowed by the context. There shall be
5326     // exactly one such T.
5327 
5328     // If no unique T is found:
5329     if (ToType.isNull()) {
5330       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5331                                      HadMultipleCandidates,
5332                                      ExplicitConversions))
5333         return ExprError();
5334       return finishContextualImplicitConversion(*this, Loc, From, Converter);
5335     }
5336 
5337     // If more than one unique Ts are found:
5338     if (!HasUniqueTargetType)
5339       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5340                                          ViableConversions);
5341 
5342     // If one unique T is found:
5343     // First, build a candidate set from the previously recorded
5344     // potentially viable conversions.
5345     OverloadCandidateSet CandidateSet(Loc);
5346     collectViableConversionCandidates(*this, From, ToType, ViableConversions,
5347                                       CandidateSet);
5348 
5349     // Then, perform overload resolution over the candidate set.
5350     OverloadCandidateSet::iterator Best;
5351     switch (CandidateSet.BestViableFunction(*this, Loc, Best)) {
5352     case OR_Success: {
5353       // Apply this conversion.
5354       DeclAccessPair Found =
5355           DeclAccessPair::make(Best->Function, Best->FoundDecl.getAccess());
5356       if (recordConversion(*this, Loc, From, Converter, T,
5357                            HadMultipleCandidates, Found))
5358         return ExprError();
5359       break;
5360     }
5361     case OR_Ambiguous:
5362       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5363                                          ViableConversions);
5364     case OR_No_Viable_Function:
5365       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5366                                      HadMultipleCandidates,
5367                                      ExplicitConversions))
5368         return ExprError();
5369     // fall through 'OR_Deleted' case.
5370     case OR_Deleted:
5371       // We'll complain below about a non-integral condition type.
5372       break;
5373     }
5374   } else {
5375     switch (ViableConversions.size()) {
5376     case 0: {
5377       if (diagnoseNoViableConversion(*this, Loc, From, Converter, T,
5378                                      HadMultipleCandidates,
5379                                      ExplicitConversions))
5380         return ExprError();
5381 
5382       // We'll complain below about a non-integral condition type.
5383       break;
5384     }
5385     case 1: {
5386       // Apply this conversion.
5387       DeclAccessPair Found = ViableConversions[0];
5388       if (recordConversion(*this, Loc, From, Converter, T,
5389                            HadMultipleCandidates, Found))
5390         return ExprError();
5391       break;
5392     }
5393     default:
5394       return diagnoseAmbiguousConversion(*this, Loc, From, Converter, T,
5395                                          ViableConversions);
5396     }
5397   }
5398 
5399   return finishContextualImplicitConversion(*this, Loc, From, Converter);
5400 }
5401 
5402 /// AddOverloadCandidate - Adds the given function to the set of
5403 /// candidate functions, using the given function call arguments.  If
5404 /// @p SuppressUserConversions, then don't allow user-defined
5405 /// conversions via constructors or conversion operators.
5406 ///
5407 /// \param PartialOverloading true if we are performing "partial" overloading
5408 /// based on an incomplete set of function arguments. This feature is used by
5409 /// code completion.
5410 void
AddOverloadCandidate(FunctionDecl * Function,DeclAccessPair FoundDecl,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions,bool PartialOverloading,bool AllowExplicit)5411 Sema::AddOverloadCandidate(FunctionDecl *Function,
5412                            DeclAccessPair FoundDecl,
5413                            ArrayRef<Expr *> Args,
5414                            OverloadCandidateSet& CandidateSet,
5415                            bool SuppressUserConversions,
5416                            bool PartialOverloading,
5417                            bool AllowExplicit) {
5418   const FunctionProtoType* Proto
5419     = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5420   assert(Proto && "Functions without a prototype cannot be overloaded");
5421   assert(!Function->getDescribedFunctionTemplate() &&
5422          "Use AddTemplateOverloadCandidate for function templates");
5423 
5424   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5425     if (!isa<CXXConstructorDecl>(Method)) {
5426       // If we get here, it's because we're calling a member function
5427       // that is named without a member access expression (e.g.,
5428       // "this->f") that was either written explicitly or created
5429       // implicitly. This can happen with a qualified call to a member
5430       // function, e.g., X::f(). We use an empty type for the implied
5431       // object argument (C++ [over.call.func]p3), and the acting context
5432       // is irrelevant.
5433       AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5434                          QualType(), Expr::Classification::makeSimpleLValue(),
5435                          Args, CandidateSet, SuppressUserConversions);
5436       return;
5437     }
5438     // We treat a constructor like a non-member function, since its object
5439     // argument doesn't participate in overload resolution.
5440   }
5441 
5442   if (!CandidateSet.isNewCandidate(Function))
5443     return;
5444 
5445   // Overload resolution is always an unevaluated context.
5446   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5447 
5448   if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5449     // C++ [class.copy]p3:
5450     //   A member function template is never instantiated to perform the copy
5451     //   of a class object to an object of its class type.
5452     QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5453     if (Args.size() == 1 &&
5454         Constructor->isSpecializationCopyingObject() &&
5455         (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5456          IsDerivedFrom(Args[0]->getType(), ClassType)))
5457       return;
5458   }
5459 
5460   // Add this candidate
5461   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5462   Candidate.FoundDecl = FoundDecl;
5463   Candidate.Function = Function;
5464   Candidate.Viable = true;
5465   Candidate.IsSurrogate = false;
5466   Candidate.IgnoreObjectArgument = false;
5467   Candidate.ExplicitCallArguments = Args.size();
5468 
5469   unsigned NumArgsInProto = Proto->getNumArgs();
5470 
5471   // (C++ 13.3.2p2): A candidate function having fewer than m
5472   // parameters is viable only if it has an ellipsis in its parameter
5473   // list (8.3.5).
5474   if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5475       !Proto->isVariadic()) {
5476     Candidate.Viable = false;
5477     Candidate.FailureKind = ovl_fail_too_many_arguments;
5478     return;
5479   }
5480 
5481   // (C++ 13.3.2p2): A candidate function having more than m parameters
5482   // is viable only if the (m+1)st parameter has a default argument
5483   // (8.3.6). For the purposes of overload resolution, the
5484   // parameter list is truncated on the right, so that there are
5485   // exactly m parameters.
5486   unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5487   if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5488     // Not enough arguments.
5489     Candidate.Viable = false;
5490     Candidate.FailureKind = ovl_fail_too_few_arguments;
5491     return;
5492   }
5493 
5494   // (CUDA B.1): Check for invalid calls between targets.
5495   if (getLangOpts().CUDA)
5496     if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5497       if (CheckCUDATarget(Caller, Function)) {
5498         Candidate.Viable = false;
5499         Candidate.FailureKind = ovl_fail_bad_target;
5500         return;
5501       }
5502 
5503   // Determine the implicit conversion sequences for each of the
5504   // arguments.
5505   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5506     if (ArgIdx < NumArgsInProto) {
5507       // (C++ 13.3.2p3): for F to be a viable function, there shall
5508       // exist for each argument an implicit conversion sequence
5509       // (13.3.3.1) that converts that argument to the corresponding
5510       // parameter of F.
5511       QualType ParamType = Proto->getArgType(ArgIdx);
5512       Candidate.Conversions[ArgIdx]
5513         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5514                                 SuppressUserConversions,
5515                                 /*InOverloadResolution=*/true,
5516                                 /*AllowObjCWritebackConversion=*/
5517                                   getLangOpts().ObjCAutoRefCount,
5518                                 AllowExplicit);
5519       if (Candidate.Conversions[ArgIdx].isBad()) {
5520         Candidate.Viable = false;
5521         Candidate.FailureKind = ovl_fail_bad_conversion;
5522         break;
5523       }
5524     } else {
5525       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5526       // argument for which there is no corresponding parameter is
5527       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5528       Candidate.Conversions[ArgIdx].setEllipsis();
5529     }
5530   }
5531 }
5532 
5533 /// \brief Add all of the function declarations in the given function set to
5534 /// the overload canddiate set.
AddFunctionCandidates(const UnresolvedSetImpl & Fns,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions,TemplateArgumentListInfo * ExplicitTemplateArgs)5535 void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5536                                  ArrayRef<Expr *> Args,
5537                                  OverloadCandidateSet& CandidateSet,
5538                                  bool SuppressUserConversions,
5539                                TemplateArgumentListInfo *ExplicitTemplateArgs) {
5540   for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5541     NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5542     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5543       if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5544         AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5545                            cast<CXXMethodDecl>(FD)->getParent(),
5546                            Args[0]->getType(), Args[0]->Classify(Context),
5547                            Args.slice(1), CandidateSet,
5548                            SuppressUserConversions);
5549       else
5550         AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5551                              SuppressUserConversions);
5552     } else {
5553       FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5554       if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5555           !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5556         AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5557                               cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5558                                    ExplicitTemplateArgs,
5559                                    Args[0]->getType(),
5560                                    Args[0]->Classify(Context), Args.slice(1),
5561                                    CandidateSet, SuppressUserConversions);
5562       else
5563         AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5564                                      ExplicitTemplateArgs, Args,
5565                                      CandidateSet, SuppressUserConversions);
5566     }
5567   }
5568 }
5569 
5570 /// AddMethodCandidate - Adds a named decl (which is some kind of
5571 /// method) as a method candidate to the given overload set.
AddMethodCandidate(DeclAccessPair FoundDecl,QualType ObjectType,Expr::Classification ObjectClassification,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5572 void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5573                               QualType ObjectType,
5574                               Expr::Classification ObjectClassification,
5575                               ArrayRef<Expr *> Args,
5576                               OverloadCandidateSet& CandidateSet,
5577                               bool SuppressUserConversions) {
5578   NamedDecl *Decl = FoundDecl.getDecl();
5579   CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5580 
5581   if (isa<UsingShadowDecl>(Decl))
5582     Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5583 
5584   if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5585     assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5586            "Expected a member function template");
5587     AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5588                                /*ExplicitArgs*/ 0,
5589                                ObjectType, ObjectClassification,
5590                                Args, CandidateSet,
5591                                SuppressUserConversions);
5592   } else {
5593     AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5594                        ObjectType, ObjectClassification,
5595                        Args,
5596                        CandidateSet, SuppressUserConversions);
5597   }
5598 }
5599 
5600 /// AddMethodCandidate - Adds the given C++ member function to the set
5601 /// of candidate functions, using the given function call arguments
5602 /// and the object argument (@c Object). For example, in a call
5603 /// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5604 /// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5605 /// allow user-defined conversions via constructors or conversion
5606 /// operators.
5607 void
AddMethodCandidate(CXXMethodDecl * Method,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,QualType ObjectType,Expr::Classification ObjectClassification,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5608 Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5609                          CXXRecordDecl *ActingContext, QualType ObjectType,
5610                          Expr::Classification ObjectClassification,
5611                          ArrayRef<Expr *> Args,
5612                          OverloadCandidateSet& CandidateSet,
5613                          bool SuppressUserConversions) {
5614   const FunctionProtoType* Proto
5615     = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5616   assert(Proto && "Methods without a prototype cannot be overloaded");
5617   assert(!isa<CXXConstructorDecl>(Method) &&
5618          "Use AddOverloadCandidate for constructors");
5619 
5620   if (!CandidateSet.isNewCandidate(Method))
5621     return;
5622 
5623   // Overload resolution is always an unevaluated context.
5624   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5625 
5626   // Add this candidate
5627   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5628   Candidate.FoundDecl = FoundDecl;
5629   Candidate.Function = Method;
5630   Candidate.IsSurrogate = false;
5631   Candidate.IgnoreObjectArgument = false;
5632   Candidate.ExplicitCallArguments = Args.size();
5633 
5634   unsigned NumArgsInProto = Proto->getNumArgs();
5635 
5636   // (C++ 13.3.2p2): A candidate function having fewer than m
5637   // parameters is viable only if it has an ellipsis in its parameter
5638   // list (8.3.5).
5639   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5640     Candidate.Viable = false;
5641     Candidate.FailureKind = ovl_fail_too_many_arguments;
5642     return;
5643   }
5644 
5645   // (C++ 13.3.2p2): A candidate function having more than m parameters
5646   // is viable only if the (m+1)st parameter has a default argument
5647   // (8.3.6). For the purposes of overload resolution, the
5648   // parameter list is truncated on the right, so that there are
5649   // exactly m parameters.
5650   unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5651   if (Args.size() < MinRequiredArgs) {
5652     // Not enough arguments.
5653     Candidate.Viable = false;
5654     Candidate.FailureKind = ovl_fail_too_few_arguments;
5655     return;
5656   }
5657 
5658   Candidate.Viable = true;
5659 
5660   if (Method->isStatic() || ObjectType.isNull())
5661     // The implicit object argument is ignored.
5662     Candidate.IgnoreObjectArgument = true;
5663   else {
5664     // Determine the implicit conversion sequence for the object
5665     // parameter.
5666     Candidate.Conversions[0]
5667       = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5668                                         Method, ActingContext);
5669     if (Candidate.Conversions[0].isBad()) {
5670       Candidate.Viable = false;
5671       Candidate.FailureKind = ovl_fail_bad_conversion;
5672       return;
5673     }
5674   }
5675 
5676   // Determine the implicit conversion sequences for each of the
5677   // arguments.
5678   for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5679     if (ArgIdx < NumArgsInProto) {
5680       // (C++ 13.3.2p3): for F to be a viable function, there shall
5681       // exist for each argument an implicit conversion sequence
5682       // (13.3.3.1) that converts that argument to the corresponding
5683       // parameter of F.
5684       QualType ParamType = Proto->getArgType(ArgIdx);
5685       Candidate.Conversions[ArgIdx + 1]
5686         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5687                                 SuppressUserConversions,
5688                                 /*InOverloadResolution=*/true,
5689                                 /*AllowObjCWritebackConversion=*/
5690                                   getLangOpts().ObjCAutoRefCount);
5691       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5692         Candidate.Viable = false;
5693         Candidate.FailureKind = ovl_fail_bad_conversion;
5694         break;
5695       }
5696     } else {
5697       // (C++ 13.3.2p2): For the purposes of overload resolution, any
5698       // argument for which there is no corresponding parameter is
5699       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5700       Candidate.Conversions[ArgIdx + 1].setEllipsis();
5701     }
5702   }
5703 }
5704 
5705 /// \brief Add a C++ member function template as a candidate to the candidate
5706 /// set, using template argument deduction to produce an appropriate member
5707 /// function template specialization.
5708 void
AddMethodTemplateCandidate(FunctionTemplateDecl * MethodTmpl,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,TemplateArgumentListInfo * ExplicitTemplateArgs,QualType ObjectType,Expr::Classification ObjectClassification,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5709 Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5710                                  DeclAccessPair FoundDecl,
5711                                  CXXRecordDecl *ActingContext,
5712                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5713                                  QualType ObjectType,
5714                                  Expr::Classification ObjectClassification,
5715                                  ArrayRef<Expr *> Args,
5716                                  OverloadCandidateSet& CandidateSet,
5717                                  bool SuppressUserConversions) {
5718   if (!CandidateSet.isNewCandidate(MethodTmpl))
5719     return;
5720 
5721   // C++ [over.match.funcs]p7:
5722   //   In each case where a candidate is a function template, candidate
5723   //   function template specializations are generated using template argument
5724   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5725   //   candidate functions in the usual way.113) A given name can refer to one
5726   //   or more function templates and also to a set of overloaded non-template
5727   //   functions. In such a case, the candidate functions generated from each
5728   //   function template are combined with the set of non-template candidate
5729   //   functions.
5730   TemplateDeductionInfo Info(CandidateSet.getLocation());
5731   FunctionDecl *Specialization = 0;
5732   if (TemplateDeductionResult Result
5733       = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5734                                 Specialization, Info)) {
5735     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5736     Candidate.FoundDecl = FoundDecl;
5737     Candidate.Function = MethodTmpl->getTemplatedDecl();
5738     Candidate.Viable = false;
5739     Candidate.FailureKind = ovl_fail_bad_deduction;
5740     Candidate.IsSurrogate = false;
5741     Candidate.IgnoreObjectArgument = false;
5742     Candidate.ExplicitCallArguments = Args.size();
5743     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5744                                                           Info);
5745     return;
5746   }
5747 
5748   // Add the function template specialization produced by template argument
5749   // deduction as a candidate.
5750   assert(Specialization && "Missing member function template specialization?");
5751   assert(isa<CXXMethodDecl>(Specialization) &&
5752          "Specialization is not a member function?");
5753   AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5754                      ActingContext, ObjectType, ObjectClassification, Args,
5755                      CandidateSet, SuppressUserConversions);
5756 }
5757 
5758 /// \brief Add a C++ function template specialization as a candidate
5759 /// in the candidate set, using template argument deduction to produce
5760 /// an appropriate function template specialization.
5761 void
AddTemplateOverloadCandidate(FunctionTemplateDecl * FunctionTemplate,DeclAccessPair FoundDecl,TemplateArgumentListInfo * ExplicitTemplateArgs,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool SuppressUserConversions)5762 Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5763                                    DeclAccessPair FoundDecl,
5764                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
5765                                    ArrayRef<Expr *> Args,
5766                                    OverloadCandidateSet& CandidateSet,
5767                                    bool SuppressUserConversions) {
5768   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5769     return;
5770 
5771   // C++ [over.match.funcs]p7:
5772   //   In each case where a candidate is a function template, candidate
5773   //   function template specializations are generated using template argument
5774   //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5775   //   candidate functions in the usual way.113) A given name can refer to one
5776   //   or more function templates and also to a set of overloaded non-template
5777   //   functions. In such a case, the candidate functions generated from each
5778   //   function template are combined with the set of non-template candidate
5779   //   functions.
5780   TemplateDeductionInfo Info(CandidateSet.getLocation());
5781   FunctionDecl *Specialization = 0;
5782   if (TemplateDeductionResult Result
5783         = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5784                                   Specialization, Info)) {
5785     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5786     Candidate.FoundDecl = FoundDecl;
5787     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5788     Candidate.Viable = false;
5789     Candidate.FailureKind = ovl_fail_bad_deduction;
5790     Candidate.IsSurrogate = false;
5791     Candidate.IgnoreObjectArgument = false;
5792     Candidate.ExplicitCallArguments = Args.size();
5793     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5794                                                           Info);
5795     return;
5796   }
5797 
5798   // Add the function template specialization produced by template argument
5799   // deduction as a candidate.
5800   assert(Specialization && "Missing function template specialization?");
5801   AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5802                        SuppressUserConversions);
5803 }
5804 
5805 /// AddConversionCandidate - Add a C++ conversion function as a
5806 /// candidate in the candidate set (C++ [over.match.conv],
5807 /// C++ [over.match.copy]). From is the expression we're converting from,
5808 /// and ToType is the type that we're eventually trying to convert to
5809 /// (which may or may not be the same type as the type that the
5810 /// conversion function produces).
5811 void
AddConversionCandidate(CXXConversionDecl * Conversion,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,Expr * From,QualType ToType,OverloadCandidateSet & CandidateSet)5812 Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5813                              DeclAccessPair FoundDecl,
5814                              CXXRecordDecl *ActingContext,
5815                              Expr *From, QualType ToType,
5816                              OverloadCandidateSet& CandidateSet) {
5817   assert(!Conversion->getDescribedFunctionTemplate() &&
5818          "Conversion function templates use AddTemplateConversionCandidate");
5819   QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5820   if (!CandidateSet.isNewCandidate(Conversion))
5821     return;
5822 
5823   // If the conversion function has an undeduced return type, trigger its
5824   // deduction now.
5825   if (getLangOpts().CPlusPlus1y && ConvType->isUndeducedType()) {
5826     if (DeduceReturnType(Conversion, From->getExprLoc()))
5827       return;
5828     ConvType = Conversion->getConversionType().getNonReferenceType();
5829   }
5830 
5831   // Overload resolution is always an unevaluated context.
5832   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5833 
5834   // Add this candidate
5835   OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5836   Candidate.FoundDecl = FoundDecl;
5837   Candidate.Function = Conversion;
5838   Candidate.IsSurrogate = false;
5839   Candidate.IgnoreObjectArgument = false;
5840   Candidate.FinalConversion.setAsIdentityConversion();
5841   Candidate.FinalConversion.setFromType(ConvType);
5842   Candidate.FinalConversion.setAllToTypes(ToType);
5843   Candidate.Viable = true;
5844   Candidate.ExplicitCallArguments = 1;
5845 
5846   // C++ [over.match.funcs]p4:
5847   //   For conversion functions, the function is considered to be a member of
5848   //   the class of the implicit implied object argument for the purpose of
5849   //   defining the type of the implicit object parameter.
5850   //
5851   // Determine the implicit conversion sequence for the implicit
5852   // object parameter.
5853   QualType ImplicitParamType = From->getType();
5854   if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5855     ImplicitParamType = FromPtrType->getPointeeType();
5856   CXXRecordDecl *ConversionContext
5857     = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5858 
5859   Candidate.Conversions[0]
5860     = TryObjectArgumentInitialization(*this, From->getType(),
5861                                       From->Classify(Context),
5862                                       Conversion, ConversionContext);
5863 
5864   if (Candidate.Conversions[0].isBad()) {
5865     Candidate.Viable = false;
5866     Candidate.FailureKind = ovl_fail_bad_conversion;
5867     return;
5868   }
5869 
5870   // We won't go through a user-define type conversion function to convert a
5871   // derived to base as such conversions are given Conversion Rank. They only
5872   // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5873   QualType FromCanon
5874     = Context.getCanonicalType(From->getType().getUnqualifiedType());
5875   QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5876   if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5877     Candidate.Viable = false;
5878     Candidate.FailureKind = ovl_fail_trivial_conversion;
5879     return;
5880   }
5881 
5882   // To determine what the conversion from the result of calling the
5883   // conversion function to the type we're eventually trying to
5884   // convert to (ToType), we need to synthesize a call to the
5885   // conversion function and attempt copy initialization from it. This
5886   // makes sure that we get the right semantics with respect to
5887   // lvalues/rvalues and the type. Fortunately, we can allocate this
5888   // call on the stack and we don't need its arguments to be
5889   // well-formed.
5890   DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5891                             VK_LValue, From->getLocStart());
5892   ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5893                                 Context.getPointerType(Conversion->getType()),
5894                                 CK_FunctionToPointerDecay,
5895                                 &ConversionRef, VK_RValue);
5896 
5897   QualType ConversionType = Conversion->getConversionType();
5898   if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5899     Candidate.Viable = false;
5900     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5901     return;
5902   }
5903 
5904   ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5905 
5906   // Note that it is safe to allocate CallExpr on the stack here because
5907   // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5908   // allocator).
5909   QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5910   CallExpr Call(Context, &ConversionFn, None, CallResultType, VK,
5911                 From->getLocStart());
5912   ImplicitConversionSequence ICS =
5913     TryCopyInitialization(*this, &Call, ToType,
5914                           /*SuppressUserConversions=*/true,
5915                           /*InOverloadResolution=*/false,
5916                           /*AllowObjCWritebackConversion=*/false);
5917 
5918   switch (ICS.getKind()) {
5919   case ImplicitConversionSequence::StandardConversion:
5920     Candidate.FinalConversion = ICS.Standard;
5921 
5922     // C++ [over.ics.user]p3:
5923     //   If the user-defined conversion is specified by a specialization of a
5924     //   conversion function template, the second standard conversion sequence
5925     //   shall have exact match rank.
5926     if (Conversion->getPrimaryTemplate() &&
5927         GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5928       Candidate.Viable = false;
5929       Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5930     }
5931 
5932     // C++0x [dcl.init.ref]p5:
5933     //    In the second case, if the reference is an rvalue reference and
5934     //    the second standard conversion sequence of the user-defined
5935     //    conversion sequence includes an lvalue-to-rvalue conversion, the
5936     //    program is ill-formed.
5937     if (ToType->isRValueReferenceType() &&
5938         ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5939       Candidate.Viable = false;
5940       Candidate.FailureKind = ovl_fail_bad_final_conversion;
5941     }
5942     break;
5943 
5944   case ImplicitConversionSequence::BadConversion:
5945     Candidate.Viable = false;
5946     Candidate.FailureKind = ovl_fail_bad_final_conversion;
5947     break;
5948 
5949   default:
5950     llvm_unreachable(
5951            "Can only end up with a standard conversion sequence or failure");
5952   }
5953 }
5954 
5955 /// \brief Adds a conversion function template specialization
5956 /// candidate to the overload set, using template argument deduction
5957 /// to deduce the template arguments of the conversion function
5958 /// template from the type that we are converting to (C++
5959 /// [temp.deduct.conv]).
5960 void
AddTemplateConversionCandidate(FunctionTemplateDecl * FunctionTemplate,DeclAccessPair FoundDecl,CXXRecordDecl * ActingDC,Expr * From,QualType ToType,OverloadCandidateSet & CandidateSet)5961 Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5962                                      DeclAccessPair FoundDecl,
5963                                      CXXRecordDecl *ActingDC,
5964                                      Expr *From, QualType ToType,
5965                                      OverloadCandidateSet &CandidateSet) {
5966   assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5967          "Only conversion function templates permitted here");
5968 
5969   if (!CandidateSet.isNewCandidate(FunctionTemplate))
5970     return;
5971 
5972   TemplateDeductionInfo Info(CandidateSet.getLocation());
5973   CXXConversionDecl *Specialization = 0;
5974   if (TemplateDeductionResult Result
5975         = DeduceTemplateArguments(FunctionTemplate, ToType,
5976                                   Specialization, Info)) {
5977     OverloadCandidate &Candidate = CandidateSet.addCandidate();
5978     Candidate.FoundDecl = FoundDecl;
5979     Candidate.Function = FunctionTemplate->getTemplatedDecl();
5980     Candidate.Viable = false;
5981     Candidate.FailureKind = ovl_fail_bad_deduction;
5982     Candidate.IsSurrogate = false;
5983     Candidate.IgnoreObjectArgument = false;
5984     Candidate.ExplicitCallArguments = 1;
5985     Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5986                                                           Info);
5987     return;
5988   }
5989 
5990   // Add the conversion function template specialization produced by
5991   // template argument deduction as a candidate.
5992   assert(Specialization && "Missing function template specialization?");
5993   AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5994                          CandidateSet);
5995 }
5996 
5997 /// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5998 /// converts the given @c Object to a function pointer via the
5999 /// conversion function @c Conversion, and then attempts to call it
6000 /// with the given arguments (C++ [over.call.object]p2-4). Proto is
6001 /// the type of function that we'll eventually be calling.
AddSurrogateCandidate(CXXConversionDecl * Conversion,DeclAccessPair FoundDecl,CXXRecordDecl * ActingContext,const FunctionProtoType * Proto,Expr * Object,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet)6002 void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
6003                                  DeclAccessPair FoundDecl,
6004                                  CXXRecordDecl *ActingContext,
6005                                  const FunctionProtoType *Proto,
6006                                  Expr *Object,
6007                                  ArrayRef<Expr *> Args,
6008                                  OverloadCandidateSet& CandidateSet) {
6009   if (!CandidateSet.isNewCandidate(Conversion))
6010     return;
6011 
6012   // Overload resolution is always an unevaluated context.
6013   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6014 
6015   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
6016   Candidate.FoundDecl = FoundDecl;
6017   Candidate.Function = 0;
6018   Candidate.Surrogate = Conversion;
6019   Candidate.Viable = true;
6020   Candidate.IsSurrogate = true;
6021   Candidate.IgnoreObjectArgument = false;
6022   Candidate.ExplicitCallArguments = Args.size();
6023 
6024   // Determine the implicit conversion sequence for the implicit
6025   // object parameter.
6026   ImplicitConversionSequence ObjectInit
6027     = TryObjectArgumentInitialization(*this, Object->getType(),
6028                                       Object->Classify(Context),
6029                                       Conversion, ActingContext);
6030   if (ObjectInit.isBad()) {
6031     Candidate.Viable = false;
6032     Candidate.FailureKind = ovl_fail_bad_conversion;
6033     Candidate.Conversions[0] = ObjectInit;
6034     return;
6035   }
6036 
6037   // The first conversion is actually a user-defined conversion whose
6038   // first conversion is ObjectInit's standard conversion (which is
6039   // effectively a reference binding). Record it as such.
6040   Candidate.Conversions[0].setUserDefined();
6041   Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
6042   Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
6043   Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
6044   Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
6045   Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
6046   Candidate.Conversions[0].UserDefined.After
6047     = Candidate.Conversions[0].UserDefined.Before;
6048   Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
6049 
6050   // Find the
6051   unsigned NumArgsInProto = Proto->getNumArgs();
6052 
6053   // (C++ 13.3.2p2): A candidate function having fewer than m
6054   // parameters is viable only if it has an ellipsis in its parameter
6055   // list (8.3.5).
6056   if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
6057     Candidate.Viable = false;
6058     Candidate.FailureKind = ovl_fail_too_many_arguments;
6059     return;
6060   }
6061 
6062   // Function types don't have any default arguments, so just check if
6063   // we have enough arguments.
6064   if (Args.size() < NumArgsInProto) {
6065     // Not enough arguments.
6066     Candidate.Viable = false;
6067     Candidate.FailureKind = ovl_fail_too_few_arguments;
6068     return;
6069   }
6070 
6071   // Determine the implicit conversion sequences for each of the
6072   // arguments.
6073   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6074     if (ArgIdx < NumArgsInProto) {
6075       // (C++ 13.3.2p3): for F to be a viable function, there shall
6076       // exist for each argument an implicit conversion sequence
6077       // (13.3.3.1) that converts that argument to the corresponding
6078       // parameter of F.
6079       QualType ParamType = Proto->getArgType(ArgIdx);
6080       Candidate.Conversions[ArgIdx + 1]
6081         = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
6082                                 /*SuppressUserConversions=*/false,
6083                                 /*InOverloadResolution=*/false,
6084                                 /*AllowObjCWritebackConversion=*/
6085                                   getLangOpts().ObjCAutoRefCount);
6086       if (Candidate.Conversions[ArgIdx + 1].isBad()) {
6087         Candidate.Viable = false;
6088         Candidate.FailureKind = ovl_fail_bad_conversion;
6089         break;
6090       }
6091     } else {
6092       // (C++ 13.3.2p2): For the purposes of overload resolution, any
6093       // argument for which there is no corresponding parameter is
6094       // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
6095       Candidate.Conversions[ArgIdx + 1].setEllipsis();
6096     }
6097   }
6098 }
6099 
6100 /// \brief Add overload candidates for overloaded operators that are
6101 /// member functions.
6102 ///
6103 /// Add the overloaded operator candidates that are member functions
6104 /// for the operator Op that was used in an operator expression such
6105 /// as "x Op y". , Args/NumArgs provides the operator arguments, and
6106 /// CandidateSet will store the added overload candidates. (C++
6107 /// [over.match.oper]).
AddMemberOperatorCandidates(OverloadedOperatorKind Op,SourceLocation OpLoc,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,SourceRange OpRange)6108 void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
6109                                        SourceLocation OpLoc,
6110                                        ArrayRef<Expr *> Args,
6111                                        OverloadCandidateSet& CandidateSet,
6112                                        SourceRange OpRange) {
6113   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6114 
6115   // C++ [over.match.oper]p3:
6116   //   For a unary operator @ with an operand of a type whose
6117   //   cv-unqualified version is T1, and for a binary operator @ with
6118   //   a left operand of a type whose cv-unqualified version is T1 and
6119   //   a right operand of a type whose cv-unqualified version is T2,
6120   //   three sets of candidate functions, designated member
6121   //   candidates, non-member candidates and built-in candidates, are
6122   //   constructed as follows:
6123   QualType T1 = Args[0]->getType();
6124 
6125   //     -- If T1 is a complete class type or a class currently being
6126   //        defined, the set of member candidates is the result of the
6127   //        qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
6128   //        the set of member candidates is empty.
6129   if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
6130     // Complete the type if it can be completed.
6131     RequireCompleteType(OpLoc, T1, 0);
6132     // If the type is neither complete nor being defined, bail out now.
6133     if (!T1Rec->getDecl()->getDefinition())
6134       return;
6135 
6136     LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
6137     LookupQualifiedName(Operators, T1Rec->getDecl());
6138     Operators.suppressDiagnostics();
6139 
6140     for (LookupResult::iterator Oper = Operators.begin(),
6141                              OperEnd = Operators.end();
6142          Oper != OperEnd;
6143          ++Oper)
6144       AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
6145                          Args[0]->Classify(Context),
6146                          Args.slice(1),
6147                          CandidateSet,
6148                          /* SuppressUserConversions = */ false);
6149   }
6150 }
6151 
6152 /// AddBuiltinCandidate - Add a candidate for a built-in
6153 /// operator. ResultTy and ParamTys are the result and parameter types
6154 /// of the built-in candidate, respectively. Args and NumArgs are the
6155 /// arguments being passed to the candidate. IsAssignmentOperator
6156 /// should be true when this built-in candidate is an assignment
6157 /// operator. NumContextualBoolArguments is the number of arguments
6158 /// (at the beginning of the argument list) that will be contextually
6159 /// converted to bool.
AddBuiltinCandidate(QualType ResultTy,QualType * ParamTys,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool IsAssignmentOperator,unsigned NumContextualBoolArguments)6160 void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
6161                                ArrayRef<Expr *> Args,
6162                                OverloadCandidateSet& CandidateSet,
6163                                bool IsAssignmentOperator,
6164                                unsigned NumContextualBoolArguments) {
6165   // Overload resolution is always an unevaluated context.
6166   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6167 
6168   // Add this candidate
6169   OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
6170   Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
6171   Candidate.Function = 0;
6172   Candidate.IsSurrogate = false;
6173   Candidate.IgnoreObjectArgument = false;
6174   Candidate.BuiltinTypes.ResultTy = ResultTy;
6175   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
6176     Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
6177 
6178   // Determine the implicit conversion sequences for each of the
6179   // arguments.
6180   Candidate.Viable = true;
6181   Candidate.ExplicitCallArguments = Args.size();
6182   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6183     // C++ [over.match.oper]p4:
6184     //   For the built-in assignment operators, conversions of the
6185     //   left operand are restricted as follows:
6186     //     -- no temporaries are introduced to hold the left operand, and
6187     //     -- no user-defined conversions are applied to the left
6188     //        operand to achieve a type match with the left-most
6189     //        parameter of a built-in candidate.
6190     //
6191     // We block these conversions by turning off user-defined
6192     // conversions, since that is the only way that initialization of
6193     // a reference to a non-class type can occur from something that
6194     // is not of the same type.
6195     if (ArgIdx < NumContextualBoolArguments) {
6196       assert(ParamTys[ArgIdx] == Context.BoolTy &&
6197              "Contextual conversion to bool requires bool type");
6198       Candidate.Conversions[ArgIdx]
6199         = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6200     } else {
6201       Candidate.Conversions[ArgIdx]
6202         = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6203                                 ArgIdx == 0 && IsAssignmentOperator,
6204                                 /*InOverloadResolution=*/false,
6205                                 /*AllowObjCWritebackConversion=*/
6206                                   getLangOpts().ObjCAutoRefCount);
6207     }
6208     if (Candidate.Conversions[ArgIdx].isBad()) {
6209       Candidate.Viable = false;
6210       Candidate.FailureKind = ovl_fail_bad_conversion;
6211       break;
6212     }
6213   }
6214 }
6215 
6216 namespace {
6217 
6218 /// BuiltinCandidateTypeSet - A set of types that will be used for the
6219 /// candidate operator functions for built-in operators (C++
6220 /// [over.built]). The types are separated into pointer types and
6221 /// enumeration types.
6222 class BuiltinCandidateTypeSet  {
6223   /// TypeSet - A set of types.
6224   typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6225 
6226   /// PointerTypes - The set of pointer types that will be used in the
6227   /// built-in candidates.
6228   TypeSet PointerTypes;
6229 
6230   /// MemberPointerTypes - The set of member pointer types that will be
6231   /// used in the built-in candidates.
6232   TypeSet MemberPointerTypes;
6233 
6234   /// EnumerationTypes - The set of enumeration types that will be
6235   /// used in the built-in candidates.
6236   TypeSet EnumerationTypes;
6237 
6238   /// \brief The set of vector types that will be used in the built-in
6239   /// candidates.
6240   TypeSet VectorTypes;
6241 
6242   /// \brief A flag indicating non-record types are viable candidates
6243   bool HasNonRecordTypes;
6244 
6245   /// \brief A flag indicating whether either arithmetic or enumeration types
6246   /// were present in the candidate set.
6247   bool HasArithmeticOrEnumeralTypes;
6248 
6249   /// \brief A flag indicating whether the nullptr type was present in the
6250   /// candidate set.
6251   bool HasNullPtrType;
6252 
6253   /// Sema - The semantic analysis instance where we are building the
6254   /// candidate type set.
6255   Sema &SemaRef;
6256 
6257   /// Context - The AST context in which we will build the type sets.
6258   ASTContext &Context;
6259 
6260   bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6261                                                const Qualifiers &VisibleQuals);
6262   bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6263 
6264 public:
6265   /// iterator - Iterates through the types that are part of the set.
6266   typedef TypeSet::iterator iterator;
6267 
BuiltinCandidateTypeSet(Sema & SemaRef)6268   BuiltinCandidateTypeSet(Sema &SemaRef)
6269     : HasNonRecordTypes(false),
6270       HasArithmeticOrEnumeralTypes(false),
6271       HasNullPtrType(false),
6272       SemaRef(SemaRef),
6273       Context(SemaRef.Context) { }
6274 
6275   void AddTypesConvertedFrom(QualType Ty,
6276                              SourceLocation Loc,
6277                              bool AllowUserConversions,
6278                              bool AllowExplicitConversions,
6279                              const Qualifiers &VisibleTypeConversionsQuals);
6280 
6281   /// pointer_begin - First pointer type found;
pointer_begin()6282   iterator pointer_begin() { return PointerTypes.begin(); }
6283 
6284   /// pointer_end - Past the last pointer type found;
pointer_end()6285   iterator pointer_end() { return PointerTypes.end(); }
6286 
6287   /// member_pointer_begin - First member pointer type found;
member_pointer_begin()6288   iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6289 
6290   /// member_pointer_end - Past the last member pointer type found;
member_pointer_end()6291   iterator member_pointer_end() { return MemberPointerTypes.end(); }
6292 
6293   /// enumeration_begin - First enumeration type found;
enumeration_begin()6294   iterator enumeration_begin() { return EnumerationTypes.begin(); }
6295 
6296   /// enumeration_end - Past the last enumeration type found;
enumeration_end()6297   iterator enumeration_end() { return EnumerationTypes.end(); }
6298 
vector_begin()6299   iterator vector_begin() { return VectorTypes.begin(); }
vector_end()6300   iterator vector_end() { return VectorTypes.end(); }
6301 
hasNonRecordTypes()6302   bool hasNonRecordTypes() { return HasNonRecordTypes; }
hasArithmeticOrEnumeralTypes()6303   bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
hasNullPtrType() const6304   bool hasNullPtrType() const { return HasNullPtrType; }
6305 };
6306 
6307 } // end anonymous namespace
6308 
6309 /// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6310 /// the set of pointer types along with any more-qualified variants of
6311 /// that type. For example, if @p Ty is "int const *", this routine
6312 /// will add "int const *", "int const volatile *", "int const
6313 /// restrict *", and "int const volatile restrict *" to the set of
6314 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6315 /// false otherwise.
6316 ///
6317 /// FIXME: what to do about extended qualifiers?
6318 bool
AddPointerWithMoreQualifiedTypeVariants(QualType Ty,const Qualifiers & VisibleQuals)6319 BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6320                                              const Qualifiers &VisibleQuals) {
6321 
6322   // Insert this type.
6323   if (!PointerTypes.insert(Ty))
6324     return false;
6325 
6326   QualType PointeeTy;
6327   const PointerType *PointerTy = Ty->getAs<PointerType>();
6328   bool buildObjCPtr = false;
6329   if (!PointerTy) {
6330     const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6331     PointeeTy = PTy->getPointeeType();
6332     buildObjCPtr = true;
6333   } else {
6334     PointeeTy = PointerTy->getPointeeType();
6335   }
6336 
6337   // Don't add qualified variants of arrays. For one, they're not allowed
6338   // (the qualifier would sink to the element type), and for another, the
6339   // only overload situation where it matters is subscript or pointer +- int,
6340   // and those shouldn't have qualifier variants anyway.
6341   if (PointeeTy->isArrayType())
6342     return true;
6343 
6344   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6345   bool hasVolatile = VisibleQuals.hasVolatile();
6346   bool hasRestrict = VisibleQuals.hasRestrict();
6347 
6348   // Iterate through all strict supersets of BaseCVR.
6349   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6350     if ((CVR | BaseCVR) != CVR) continue;
6351     // Skip over volatile if no volatile found anywhere in the types.
6352     if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6353 
6354     // Skip over restrict if no restrict found anywhere in the types, or if
6355     // the type cannot be restrict-qualified.
6356     if ((CVR & Qualifiers::Restrict) &&
6357         (!hasRestrict ||
6358          (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6359       continue;
6360 
6361     // Build qualified pointee type.
6362     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6363 
6364     // Build qualified pointer type.
6365     QualType QPointerTy;
6366     if (!buildObjCPtr)
6367       QPointerTy = Context.getPointerType(QPointeeTy);
6368     else
6369       QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6370 
6371     // Insert qualified pointer type.
6372     PointerTypes.insert(QPointerTy);
6373   }
6374 
6375   return true;
6376 }
6377 
6378 /// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6379 /// to the set of pointer types along with any more-qualified variants of
6380 /// that type. For example, if @p Ty is "int const *", this routine
6381 /// will add "int const *", "int const volatile *", "int const
6382 /// restrict *", and "int const volatile restrict *" to the set of
6383 /// pointer types. Returns true if the add of @p Ty itself succeeded,
6384 /// false otherwise.
6385 ///
6386 /// FIXME: what to do about extended qualifiers?
6387 bool
AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty)6388 BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6389     QualType Ty) {
6390   // Insert this type.
6391   if (!MemberPointerTypes.insert(Ty))
6392     return false;
6393 
6394   const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6395   assert(PointerTy && "type was not a member pointer type!");
6396 
6397   QualType PointeeTy = PointerTy->getPointeeType();
6398   // Don't add qualified variants of arrays. For one, they're not allowed
6399   // (the qualifier would sink to the element type), and for another, the
6400   // only overload situation where it matters is subscript or pointer +- int,
6401   // and those shouldn't have qualifier variants anyway.
6402   if (PointeeTy->isArrayType())
6403     return true;
6404   const Type *ClassTy = PointerTy->getClass();
6405 
6406   // Iterate through all strict supersets of the pointee type's CVR
6407   // qualifiers.
6408   unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6409   for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6410     if ((CVR | BaseCVR) != CVR) continue;
6411 
6412     QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6413     MemberPointerTypes.insert(
6414       Context.getMemberPointerType(QPointeeTy, ClassTy));
6415   }
6416 
6417   return true;
6418 }
6419 
6420 /// AddTypesConvertedFrom - Add each of the types to which the type @p
6421 /// Ty can be implicit converted to the given set of @p Types. We're
6422 /// primarily interested in pointer types and enumeration types. We also
6423 /// take member pointer types, for the conditional operator.
6424 /// AllowUserConversions is true if we should look at the conversion
6425 /// functions of a class type, and AllowExplicitConversions if we
6426 /// should also include the explicit conversion functions of a class
6427 /// type.
6428 void
AddTypesConvertedFrom(QualType Ty,SourceLocation Loc,bool AllowUserConversions,bool AllowExplicitConversions,const Qualifiers & VisibleQuals)6429 BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6430                                                SourceLocation Loc,
6431                                                bool AllowUserConversions,
6432                                                bool AllowExplicitConversions,
6433                                                const Qualifiers &VisibleQuals) {
6434   // Only deal with canonical types.
6435   Ty = Context.getCanonicalType(Ty);
6436 
6437   // Look through reference types; they aren't part of the type of an
6438   // expression for the purposes of conversions.
6439   if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6440     Ty = RefTy->getPointeeType();
6441 
6442   // If we're dealing with an array type, decay to the pointer.
6443   if (Ty->isArrayType())
6444     Ty = SemaRef.Context.getArrayDecayedType(Ty);
6445 
6446   // Otherwise, we don't care about qualifiers on the type.
6447   Ty = Ty.getLocalUnqualifiedType();
6448 
6449   // Flag if we ever add a non-record type.
6450   const RecordType *TyRec = Ty->getAs<RecordType>();
6451   HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6452 
6453   // Flag if we encounter an arithmetic type.
6454   HasArithmeticOrEnumeralTypes =
6455     HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6456 
6457   if (Ty->isObjCIdType() || Ty->isObjCClassType())
6458     PointerTypes.insert(Ty);
6459   else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6460     // Insert our type, and its more-qualified variants, into the set
6461     // of types.
6462     if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6463       return;
6464   } else if (Ty->isMemberPointerType()) {
6465     // Member pointers are far easier, since the pointee can't be converted.
6466     if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6467       return;
6468   } else if (Ty->isEnumeralType()) {
6469     HasArithmeticOrEnumeralTypes = true;
6470     EnumerationTypes.insert(Ty);
6471   } else if (Ty->isVectorType()) {
6472     // We treat vector types as arithmetic types in many contexts as an
6473     // extension.
6474     HasArithmeticOrEnumeralTypes = true;
6475     VectorTypes.insert(Ty);
6476   } else if (Ty->isNullPtrType()) {
6477     HasNullPtrType = true;
6478   } else if (AllowUserConversions && TyRec) {
6479     // No conversion functions in incomplete types.
6480     if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6481       return;
6482 
6483     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6484     std::pair<CXXRecordDecl::conversion_iterator,
6485               CXXRecordDecl::conversion_iterator>
6486       Conversions = ClassDecl->getVisibleConversionFunctions();
6487     for (CXXRecordDecl::conversion_iterator
6488            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6489       NamedDecl *D = I.getDecl();
6490       if (isa<UsingShadowDecl>(D))
6491         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6492 
6493       // Skip conversion function templates; they don't tell us anything
6494       // about which builtin types we can convert to.
6495       if (isa<FunctionTemplateDecl>(D))
6496         continue;
6497 
6498       CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6499       if (AllowExplicitConversions || !Conv->isExplicit()) {
6500         AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6501                               VisibleQuals);
6502       }
6503     }
6504   }
6505 }
6506 
6507 /// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6508 /// the volatile- and non-volatile-qualified assignment operators for the
6509 /// given type to the candidate set.
AddBuiltinAssignmentOperatorCandidates(Sema & S,QualType T,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet)6510 static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6511                                                    QualType T,
6512                                                    ArrayRef<Expr *> Args,
6513                                     OverloadCandidateSet &CandidateSet) {
6514   QualType ParamTypes[2];
6515 
6516   // T& operator=(T&, T)
6517   ParamTypes[0] = S.Context.getLValueReferenceType(T);
6518   ParamTypes[1] = T;
6519   S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6520                         /*IsAssignmentOperator=*/true);
6521 
6522   if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6523     // volatile T& operator=(volatile T&, T)
6524     ParamTypes[0]
6525       = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6526     ParamTypes[1] = T;
6527     S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
6528                           /*IsAssignmentOperator=*/true);
6529   }
6530 }
6531 
6532 /// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6533 /// if any, found in visible type conversion functions found in ArgExpr's type.
CollectVRQualifiers(ASTContext & Context,Expr * ArgExpr)6534 static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6535     Qualifiers VRQuals;
6536     const RecordType *TyRec;
6537     if (const MemberPointerType *RHSMPType =
6538         ArgExpr->getType()->getAs<MemberPointerType>())
6539       TyRec = RHSMPType->getClass()->getAs<RecordType>();
6540     else
6541       TyRec = ArgExpr->getType()->getAs<RecordType>();
6542     if (!TyRec) {
6543       // Just to be safe, assume the worst case.
6544       VRQuals.addVolatile();
6545       VRQuals.addRestrict();
6546       return VRQuals;
6547     }
6548 
6549     CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6550     if (!ClassDecl->hasDefinition())
6551       return VRQuals;
6552 
6553     std::pair<CXXRecordDecl::conversion_iterator,
6554               CXXRecordDecl::conversion_iterator>
6555       Conversions = ClassDecl->getVisibleConversionFunctions();
6556 
6557     for (CXXRecordDecl::conversion_iterator
6558            I = Conversions.first, E = Conversions.second; I != E; ++I) {
6559       NamedDecl *D = I.getDecl();
6560       if (isa<UsingShadowDecl>(D))
6561         D = cast<UsingShadowDecl>(D)->getTargetDecl();
6562       if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6563         QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6564         if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6565           CanTy = ResTypeRef->getPointeeType();
6566         // Need to go down the pointer/mempointer chain and add qualifiers
6567         // as see them.
6568         bool done = false;
6569         while (!done) {
6570           if (CanTy.isRestrictQualified())
6571             VRQuals.addRestrict();
6572           if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6573             CanTy = ResTypePtr->getPointeeType();
6574           else if (const MemberPointerType *ResTypeMPtr =
6575                 CanTy->getAs<MemberPointerType>())
6576             CanTy = ResTypeMPtr->getPointeeType();
6577           else
6578             done = true;
6579           if (CanTy.isVolatileQualified())
6580             VRQuals.addVolatile();
6581           if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6582             return VRQuals;
6583         }
6584       }
6585     }
6586     return VRQuals;
6587 }
6588 
6589 namespace {
6590 
6591 /// \brief Helper class to manage the addition of builtin operator overload
6592 /// candidates. It provides shared state and utility methods used throughout
6593 /// the process, as well as a helper method to add each group of builtin
6594 /// operator overloads from the standard to a candidate set.
6595 class BuiltinOperatorOverloadBuilder {
6596   // Common instance state available to all overload candidate addition methods.
6597   Sema &S;
6598   ArrayRef<Expr *> Args;
6599   Qualifiers VisibleTypeConversionsQuals;
6600   bool HasArithmeticOrEnumeralCandidateType;
6601   SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6602   OverloadCandidateSet &CandidateSet;
6603 
6604   // Define some constants used to index and iterate over the arithemetic types
6605   // provided via the getArithmeticType() method below.
6606   // The "promoted arithmetic types" are the arithmetic
6607   // types are that preserved by promotion (C++ [over.built]p2).
6608   static const unsigned FirstIntegralType = 3;
6609   static const unsigned LastIntegralType = 20;
6610   static const unsigned FirstPromotedIntegralType = 3,
6611                         LastPromotedIntegralType = 11;
6612   static const unsigned FirstPromotedArithmeticType = 0,
6613                         LastPromotedArithmeticType = 11;
6614   static const unsigned NumArithmeticTypes = 20;
6615 
6616   /// \brief Get the canonical type for a given arithmetic type index.
getArithmeticType(unsigned index)6617   CanQualType getArithmeticType(unsigned index) {
6618     assert(index < NumArithmeticTypes);
6619     static CanQualType ASTContext::* const
6620       ArithmeticTypes[NumArithmeticTypes] = {
6621       // Start of promoted types.
6622       &ASTContext::FloatTy,
6623       &ASTContext::DoubleTy,
6624       &ASTContext::LongDoubleTy,
6625 
6626       // Start of integral types.
6627       &ASTContext::IntTy,
6628       &ASTContext::LongTy,
6629       &ASTContext::LongLongTy,
6630       &ASTContext::Int128Ty,
6631       &ASTContext::UnsignedIntTy,
6632       &ASTContext::UnsignedLongTy,
6633       &ASTContext::UnsignedLongLongTy,
6634       &ASTContext::UnsignedInt128Ty,
6635       // End of promoted types.
6636 
6637       &ASTContext::BoolTy,
6638       &ASTContext::CharTy,
6639       &ASTContext::WCharTy,
6640       &ASTContext::Char16Ty,
6641       &ASTContext::Char32Ty,
6642       &ASTContext::SignedCharTy,
6643       &ASTContext::ShortTy,
6644       &ASTContext::UnsignedCharTy,
6645       &ASTContext::UnsignedShortTy,
6646       // End of integral types.
6647       // FIXME: What about complex? What about half?
6648     };
6649     return S.Context.*ArithmeticTypes[index];
6650   }
6651 
6652   /// \brief Gets the canonical type resulting from the usual arithemetic
6653   /// converions for the given arithmetic types.
getUsualArithmeticConversions(unsigned L,unsigned R)6654   CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6655     // Accelerator table for performing the usual arithmetic conversions.
6656     // The rules are basically:
6657     //   - if either is floating-point, use the wider floating-point
6658     //   - if same signedness, use the higher rank
6659     //   - if same size, use unsigned of the higher rank
6660     //   - use the larger type
6661     // These rules, together with the axiom that higher ranks are
6662     // never smaller, are sufficient to precompute all of these results
6663     // *except* when dealing with signed types of higher rank.
6664     // (we could precompute SLL x UI for all known platforms, but it's
6665     // better not to make any assumptions).
6666     // We assume that int128 has a higher rank than long long on all platforms.
6667     enum PromotedType {
6668             Dep=-1,
6669             Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6670     };
6671     static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6672                                         [LastPromotedArithmeticType] = {
6673 /* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6674 /* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6675 /*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6676 /*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6677 /*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6678 /* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6679 /*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6680 /*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6681 /*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6682 /* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6683 /*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6684     };
6685 
6686     assert(L < LastPromotedArithmeticType);
6687     assert(R < LastPromotedArithmeticType);
6688     int Idx = ConversionsTable[L][R];
6689 
6690     // Fast path: the table gives us a concrete answer.
6691     if (Idx != Dep) return getArithmeticType(Idx);
6692 
6693     // Slow path: we need to compare widths.
6694     // An invariant is that the signed type has higher rank.
6695     CanQualType LT = getArithmeticType(L),
6696                 RT = getArithmeticType(R);
6697     unsigned LW = S.Context.getIntWidth(LT),
6698              RW = S.Context.getIntWidth(RT);
6699 
6700     // If they're different widths, use the signed type.
6701     if (LW > RW) return LT;
6702     else if (LW < RW) return RT;
6703 
6704     // Otherwise, use the unsigned type of the signed type's rank.
6705     if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6706     assert(L == SLL || R == SLL);
6707     return S.Context.UnsignedLongLongTy;
6708   }
6709 
6710   /// \brief Helper method to factor out the common pattern of adding overloads
6711   /// for '++' and '--' builtin operators.
addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,bool HasVolatile,bool HasRestrict)6712   void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6713                                            bool HasVolatile,
6714                                            bool HasRestrict) {
6715     QualType ParamTypes[2] = {
6716       S.Context.getLValueReferenceType(CandidateTy),
6717       S.Context.IntTy
6718     };
6719 
6720     // Non-volatile version.
6721     if (Args.size() == 1)
6722       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6723     else
6724       S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6725 
6726     // Use a heuristic to reduce number of builtin candidates in the set:
6727     // add volatile version only if there are conversions to a volatile type.
6728     if (HasVolatile) {
6729       ParamTypes[0] =
6730         S.Context.getLValueReferenceType(
6731           S.Context.getVolatileType(CandidateTy));
6732       if (Args.size() == 1)
6733         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6734       else
6735         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6736     }
6737 
6738     // Add restrict version only if there are conversions to a restrict type
6739     // and our candidate type is a non-restrict-qualified pointer.
6740     if (HasRestrict && CandidateTy->isAnyPointerType() &&
6741         !CandidateTy.isRestrictQualified()) {
6742       ParamTypes[0]
6743         = S.Context.getLValueReferenceType(
6744             S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6745       if (Args.size() == 1)
6746         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6747       else
6748         S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6749 
6750       if (HasVolatile) {
6751         ParamTypes[0]
6752           = S.Context.getLValueReferenceType(
6753               S.Context.getCVRQualifiedType(CandidateTy,
6754                                             (Qualifiers::Volatile |
6755                                              Qualifiers::Restrict)));
6756         if (Args.size() == 1)
6757           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
6758         else
6759           S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, CandidateSet);
6760       }
6761     }
6762 
6763   }
6764 
6765 public:
BuiltinOperatorOverloadBuilder(Sema & S,ArrayRef<Expr * > Args,Qualifiers VisibleTypeConversionsQuals,bool HasArithmeticOrEnumeralCandidateType,SmallVectorImpl<BuiltinCandidateTypeSet> & CandidateTypes,OverloadCandidateSet & CandidateSet)6766   BuiltinOperatorOverloadBuilder(
6767     Sema &S, ArrayRef<Expr *> Args,
6768     Qualifiers VisibleTypeConversionsQuals,
6769     bool HasArithmeticOrEnumeralCandidateType,
6770     SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6771     OverloadCandidateSet &CandidateSet)
6772     : S(S), Args(Args),
6773       VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6774       HasArithmeticOrEnumeralCandidateType(
6775         HasArithmeticOrEnumeralCandidateType),
6776       CandidateTypes(CandidateTypes),
6777       CandidateSet(CandidateSet) {
6778     // Validate some of our static helper constants in debug builds.
6779     assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6780            "Invalid first promoted integral type");
6781     assert(getArithmeticType(LastPromotedIntegralType - 1)
6782              == S.Context.UnsignedInt128Ty &&
6783            "Invalid last promoted integral type");
6784     assert(getArithmeticType(FirstPromotedArithmeticType)
6785              == S.Context.FloatTy &&
6786            "Invalid first promoted arithmetic type");
6787     assert(getArithmeticType(LastPromotedArithmeticType - 1)
6788              == S.Context.UnsignedInt128Ty &&
6789            "Invalid last promoted arithmetic type");
6790   }
6791 
6792   // C++ [over.built]p3:
6793   //
6794   //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6795   //   is either volatile or empty, there exist candidate operator
6796   //   functions of the form
6797   //
6798   //       VQ T&      operator++(VQ T&);
6799   //       T          operator++(VQ T&, int);
6800   //
6801   // C++ [over.built]p4:
6802   //
6803   //   For every pair (T, VQ), where T is an arithmetic type other
6804   //   than bool, and VQ is either volatile or empty, there exist
6805   //   candidate operator functions of the form
6806   //
6807   //       VQ T&      operator--(VQ T&);
6808   //       T          operator--(VQ T&, int);
addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op)6809   void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6810     if (!HasArithmeticOrEnumeralCandidateType)
6811       return;
6812 
6813     for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6814          Arith < NumArithmeticTypes; ++Arith) {
6815       addPlusPlusMinusMinusStyleOverloads(
6816         getArithmeticType(Arith),
6817         VisibleTypeConversionsQuals.hasVolatile(),
6818         VisibleTypeConversionsQuals.hasRestrict());
6819     }
6820   }
6821 
6822   // C++ [over.built]p5:
6823   //
6824   //   For every pair (T, VQ), where T is a cv-qualified or
6825   //   cv-unqualified object type, and VQ is either volatile or
6826   //   empty, there exist candidate operator functions of the form
6827   //
6828   //       T*VQ&      operator++(T*VQ&);
6829   //       T*VQ&      operator--(T*VQ&);
6830   //       T*         operator++(T*VQ&, int);
6831   //       T*         operator--(T*VQ&, int);
addPlusPlusMinusMinusPointerOverloads()6832   void addPlusPlusMinusMinusPointerOverloads() {
6833     for (BuiltinCandidateTypeSet::iterator
6834               Ptr = CandidateTypes[0].pointer_begin(),
6835            PtrEnd = CandidateTypes[0].pointer_end();
6836          Ptr != PtrEnd; ++Ptr) {
6837       // Skip pointer types that aren't pointers to object types.
6838       if (!(*Ptr)->getPointeeType()->isObjectType())
6839         continue;
6840 
6841       addPlusPlusMinusMinusStyleOverloads(*Ptr,
6842         (!(*Ptr).isVolatileQualified() &&
6843          VisibleTypeConversionsQuals.hasVolatile()),
6844         (!(*Ptr).isRestrictQualified() &&
6845          VisibleTypeConversionsQuals.hasRestrict()));
6846     }
6847   }
6848 
6849   // C++ [over.built]p6:
6850   //   For every cv-qualified or cv-unqualified object type T, there
6851   //   exist candidate operator functions of the form
6852   //
6853   //       T&         operator*(T*);
6854   //
6855   // C++ [over.built]p7:
6856   //   For every function type T that does not have cv-qualifiers or a
6857   //   ref-qualifier, there exist candidate operator functions of the form
6858   //       T&         operator*(T*);
addUnaryStarPointerOverloads()6859   void addUnaryStarPointerOverloads() {
6860     for (BuiltinCandidateTypeSet::iterator
6861               Ptr = CandidateTypes[0].pointer_begin(),
6862            PtrEnd = CandidateTypes[0].pointer_end();
6863          Ptr != PtrEnd; ++Ptr) {
6864       QualType ParamTy = *Ptr;
6865       QualType PointeeTy = ParamTy->getPointeeType();
6866       if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6867         continue;
6868 
6869       if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6870         if (Proto->getTypeQuals() || Proto->getRefQualifier())
6871           continue;
6872 
6873       S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6874                             &ParamTy, Args, CandidateSet);
6875     }
6876   }
6877 
6878   // C++ [over.built]p9:
6879   //  For every promoted arithmetic type T, there exist candidate
6880   //  operator functions of the form
6881   //
6882   //       T         operator+(T);
6883   //       T         operator-(T);
addUnaryPlusOrMinusArithmeticOverloads()6884   void addUnaryPlusOrMinusArithmeticOverloads() {
6885     if (!HasArithmeticOrEnumeralCandidateType)
6886       return;
6887 
6888     for (unsigned Arith = FirstPromotedArithmeticType;
6889          Arith < LastPromotedArithmeticType; ++Arith) {
6890       QualType ArithTy = getArithmeticType(Arith);
6891       S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, CandidateSet);
6892     }
6893 
6894     // Extension: We also add these operators for vector types.
6895     for (BuiltinCandidateTypeSet::iterator
6896               Vec = CandidateTypes[0].vector_begin(),
6897            VecEnd = CandidateTypes[0].vector_end();
6898          Vec != VecEnd; ++Vec) {
6899       QualType VecTy = *Vec;
6900       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6901     }
6902   }
6903 
6904   // C++ [over.built]p8:
6905   //   For every type T, there exist candidate operator functions of
6906   //   the form
6907   //
6908   //       T*         operator+(T*);
addUnaryPlusPointerOverloads()6909   void addUnaryPlusPointerOverloads() {
6910     for (BuiltinCandidateTypeSet::iterator
6911               Ptr = CandidateTypes[0].pointer_begin(),
6912            PtrEnd = CandidateTypes[0].pointer_end();
6913          Ptr != PtrEnd; ++Ptr) {
6914       QualType ParamTy = *Ptr;
6915       S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet);
6916     }
6917   }
6918 
6919   // C++ [over.built]p10:
6920   //   For every promoted integral type T, there exist candidate
6921   //   operator functions of the form
6922   //
6923   //        T         operator~(T);
addUnaryTildePromotedIntegralOverloads()6924   void addUnaryTildePromotedIntegralOverloads() {
6925     if (!HasArithmeticOrEnumeralCandidateType)
6926       return;
6927 
6928     for (unsigned Int = FirstPromotedIntegralType;
6929          Int < LastPromotedIntegralType; ++Int) {
6930       QualType IntTy = getArithmeticType(Int);
6931       S.AddBuiltinCandidate(IntTy, &IntTy, Args, CandidateSet);
6932     }
6933 
6934     // Extension: We also add this operator for vector types.
6935     for (BuiltinCandidateTypeSet::iterator
6936               Vec = CandidateTypes[0].vector_begin(),
6937            VecEnd = CandidateTypes[0].vector_end();
6938          Vec != VecEnd; ++Vec) {
6939       QualType VecTy = *Vec;
6940       S.AddBuiltinCandidate(VecTy, &VecTy, Args, CandidateSet);
6941     }
6942   }
6943 
6944   // C++ [over.match.oper]p16:
6945   //   For every pointer to member type T, there exist candidate operator
6946   //   functions of the form
6947   //
6948   //        bool operator==(T,T);
6949   //        bool operator!=(T,T);
addEqualEqualOrNotEqualMemberPointerOverloads()6950   void addEqualEqualOrNotEqualMemberPointerOverloads() {
6951     /// Set of (canonical) types that we've already handled.
6952     llvm::SmallPtrSet<QualType, 8> AddedTypes;
6953 
6954     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6955       for (BuiltinCandidateTypeSet::iterator
6956                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6957              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6958            MemPtr != MemPtrEnd;
6959            ++MemPtr) {
6960         // Don't add the same builtin candidate twice.
6961         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6962           continue;
6963 
6964         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6965         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
6966       }
6967     }
6968   }
6969 
6970   // C++ [over.built]p15:
6971   //
6972   //   For every T, where T is an enumeration type, a pointer type, or
6973   //   std::nullptr_t, there exist candidate operator functions of the form
6974   //
6975   //        bool       operator<(T, T);
6976   //        bool       operator>(T, T);
6977   //        bool       operator<=(T, T);
6978   //        bool       operator>=(T, T);
6979   //        bool       operator==(T, T);
6980   //        bool       operator!=(T, T);
addRelationalPointerOrEnumeralOverloads()6981   void addRelationalPointerOrEnumeralOverloads() {
6982     // C++ [over.match.oper]p3:
6983     //   [...]the built-in candidates include all of the candidate operator
6984     //   functions defined in 13.6 that, compared to the given operator, [...]
6985     //   do not have the same parameter-type-list as any non-template non-member
6986     //   candidate.
6987     //
6988     // Note that in practice, this only affects enumeration types because there
6989     // aren't any built-in candidates of record type, and a user-defined operator
6990     // must have an operand of record or enumeration type. Also, the only other
6991     // overloaded operator with enumeration arguments, operator=,
6992     // cannot be overloaded for enumeration types, so this is the only place
6993     // where we must suppress candidates like this.
6994     llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6995       UserDefinedBinaryOperators;
6996 
6997     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
6998       if (CandidateTypes[ArgIdx].enumeration_begin() !=
6999           CandidateTypes[ArgIdx].enumeration_end()) {
7000         for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
7001                                          CEnd = CandidateSet.end();
7002              C != CEnd; ++C) {
7003           if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
7004             continue;
7005 
7006           if (C->Function->isFunctionTemplateSpecialization())
7007             continue;
7008 
7009           QualType FirstParamType =
7010             C->Function->getParamDecl(0)->getType().getUnqualifiedType();
7011           QualType SecondParamType =
7012             C->Function->getParamDecl(1)->getType().getUnqualifiedType();
7013 
7014           // Skip if either parameter isn't of enumeral type.
7015           if (!FirstParamType->isEnumeralType() ||
7016               !SecondParamType->isEnumeralType())
7017             continue;
7018 
7019           // Add this operator to the set of known user-defined operators.
7020           UserDefinedBinaryOperators.insert(
7021             std::make_pair(S.Context.getCanonicalType(FirstParamType),
7022                            S.Context.getCanonicalType(SecondParamType)));
7023         }
7024       }
7025     }
7026 
7027     /// Set of (canonical) types that we've already handled.
7028     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7029 
7030     for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7031       for (BuiltinCandidateTypeSet::iterator
7032                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7033              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7034            Ptr != PtrEnd; ++Ptr) {
7035         // Don't add the same builtin candidate twice.
7036         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7037           continue;
7038 
7039         QualType ParamTypes[2] = { *Ptr, *Ptr };
7040         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7041       }
7042       for (BuiltinCandidateTypeSet::iterator
7043                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7044              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7045            Enum != EnumEnd; ++Enum) {
7046         CanQualType CanonType = S.Context.getCanonicalType(*Enum);
7047 
7048         // Don't add the same builtin candidate twice, or if a user defined
7049         // candidate exists.
7050         if (!AddedTypes.insert(CanonType) ||
7051             UserDefinedBinaryOperators.count(std::make_pair(CanonType,
7052                                                             CanonType)))
7053           continue;
7054 
7055         QualType ParamTypes[2] = { *Enum, *Enum };
7056         S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet);
7057       }
7058 
7059       if (CandidateTypes[ArgIdx].hasNullPtrType()) {
7060         CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
7061         if (AddedTypes.insert(NullPtrTy) &&
7062             !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
7063                                                              NullPtrTy))) {
7064           QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
7065           S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args,
7066                                 CandidateSet);
7067         }
7068       }
7069     }
7070   }
7071 
7072   // C++ [over.built]p13:
7073   //
7074   //   For every cv-qualified or cv-unqualified object type T
7075   //   there exist candidate operator functions of the form
7076   //
7077   //      T*         operator+(T*, ptrdiff_t);
7078   //      T&         operator[](T*, ptrdiff_t);    [BELOW]
7079   //      T*         operator-(T*, ptrdiff_t);
7080   //      T*         operator+(ptrdiff_t, T*);
7081   //      T&         operator[](ptrdiff_t, T*);    [BELOW]
7082   //
7083   // C++ [over.built]p14:
7084   //
7085   //   For every T, where T is a pointer to object type, there
7086   //   exist candidate operator functions of the form
7087   //
7088   //      ptrdiff_t  operator-(T, T);
addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op)7089   void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
7090     /// Set of (canonical) types that we've already handled.
7091     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7092 
7093     for (int Arg = 0; Arg < 2; ++Arg) {
7094       QualType AsymetricParamTypes[2] = {
7095         S.Context.getPointerDiffType(),
7096         S.Context.getPointerDiffType(),
7097       };
7098       for (BuiltinCandidateTypeSet::iterator
7099                 Ptr = CandidateTypes[Arg].pointer_begin(),
7100              PtrEnd = CandidateTypes[Arg].pointer_end();
7101            Ptr != PtrEnd; ++Ptr) {
7102         QualType PointeeTy = (*Ptr)->getPointeeType();
7103         if (!PointeeTy->isObjectType())
7104           continue;
7105 
7106         AsymetricParamTypes[Arg] = *Ptr;
7107         if (Arg == 0 || Op == OO_Plus) {
7108           // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
7109           // T* operator+(ptrdiff_t, T*);
7110           S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, CandidateSet);
7111         }
7112         if (Op == OO_Minus) {
7113           // ptrdiff_t operator-(T, T);
7114           if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7115             continue;
7116 
7117           QualType ParamTypes[2] = { *Ptr, *Ptr };
7118           S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
7119                                 Args, CandidateSet);
7120         }
7121       }
7122     }
7123   }
7124 
7125   // C++ [over.built]p12:
7126   //
7127   //   For every pair of promoted arithmetic types L and R, there
7128   //   exist candidate operator functions of the form
7129   //
7130   //        LR         operator*(L, R);
7131   //        LR         operator/(L, R);
7132   //        LR         operator+(L, R);
7133   //        LR         operator-(L, R);
7134   //        bool       operator<(L, R);
7135   //        bool       operator>(L, R);
7136   //        bool       operator<=(L, R);
7137   //        bool       operator>=(L, R);
7138   //        bool       operator==(L, R);
7139   //        bool       operator!=(L, R);
7140   //
7141   //   where LR is the result of the usual arithmetic conversions
7142   //   between types L and R.
7143   //
7144   // C++ [over.built]p24:
7145   //
7146   //   For every pair of promoted arithmetic types L and R, there exist
7147   //   candidate operator functions of the form
7148   //
7149   //        LR       operator?(bool, L, R);
7150   //
7151   //   where LR is the result of the usual arithmetic conversions
7152   //   between types L and R.
7153   // Our candidates ignore the first parameter.
addGenericBinaryArithmeticOverloads(bool isComparison)7154   void addGenericBinaryArithmeticOverloads(bool isComparison) {
7155     if (!HasArithmeticOrEnumeralCandidateType)
7156       return;
7157 
7158     for (unsigned Left = FirstPromotedArithmeticType;
7159          Left < LastPromotedArithmeticType; ++Left) {
7160       for (unsigned Right = FirstPromotedArithmeticType;
7161            Right < LastPromotedArithmeticType; ++Right) {
7162         QualType LandR[2] = { getArithmeticType(Left),
7163                               getArithmeticType(Right) };
7164         QualType Result =
7165           isComparison ? S.Context.BoolTy
7166                        : getUsualArithmeticConversions(Left, Right);
7167         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7168       }
7169     }
7170 
7171     // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
7172     // conditional operator for vector types.
7173     for (BuiltinCandidateTypeSet::iterator
7174               Vec1 = CandidateTypes[0].vector_begin(),
7175            Vec1End = CandidateTypes[0].vector_end();
7176          Vec1 != Vec1End; ++Vec1) {
7177       for (BuiltinCandidateTypeSet::iterator
7178                 Vec2 = CandidateTypes[1].vector_begin(),
7179              Vec2End = CandidateTypes[1].vector_end();
7180            Vec2 != Vec2End; ++Vec2) {
7181         QualType LandR[2] = { *Vec1, *Vec2 };
7182         QualType Result = S.Context.BoolTy;
7183         if (!isComparison) {
7184           if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7185             Result = *Vec1;
7186           else
7187             Result = *Vec2;
7188         }
7189 
7190         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7191       }
7192     }
7193   }
7194 
7195   // C++ [over.built]p17:
7196   //
7197   //   For every pair of promoted integral types L and R, there
7198   //   exist candidate operator functions of the form
7199   //
7200   //      LR         operator%(L, R);
7201   //      LR         operator&(L, R);
7202   //      LR         operator^(L, R);
7203   //      LR         operator|(L, R);
7204   //      L          operator<<(L, R);
7205   //      L          operator>>(L, R);
7206   //
7207   //   where LR is the result of the usual arithmetic conversions
7208   //   between types L and R.
addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op)7209   void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7210     if (!HasArithmeticOrEnumeralCandidateType)
7211       return;
7212 
7213     for (unsigned Left = FirstPromotedIntegralType;
7214          Left < LastPromotedIntegralType; ++Left) {
7215       for (unsigned Right = FirstPromotedIntegralType;
7216            Right < LastPromotedIntegralType; ++Right) {
7217         QualType LandR[2] = { getArithmeticType(Left),
7218                               getArithmeticType(Right) };
7219         QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7220             ? LandR[0]
7221             : getUsualArithmeticConversions(Left, Right);
7222         S.AddBuiltinCandidate(Result, LandR, Args, CandidateSet);
7223       }
7224     }
7225   }
7226 
7227   // C++ [over.built]p20:
7228   //
7229   //   For every pair (T, VQ), where T is an enumeration or
7230   //   pointer to member type and VQ is either volatile or
7231   //   empty, there exist candidate operator functions of the form
7232   //
7233   //        VQ T&      operator=(VQ T&, T);
addAssignmentMemberPointerOrEnumeralOverloads()7234   void addAssignmentMemberPointerOrEnumeralOverloads() {
7235     /// Set of (canonical) types that we've already handled.
7236     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7237 
7238     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7239       for (BuiltinCandidateTypeSet::iterator
7240                 Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7241              EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7242            Enum != EnumEnd; ++Enum) {
7243         if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7244           continue;
7245 
7246         AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, CandidateSet);
7247       }
7248 
7249       for (BuiltinCandidateTypeSet::iterator
7250                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7251              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7252            MemPtr != MemPtrEnd; ++MemPtr) {
7253         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7254           continue;
7255 
7256         AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, CandidateSet);
7257       }
7258     }
7259   }
7260 
7261   // C++ [over.built]p19:
7262   //
7263   //   For every pair (T, VQ), where T is any type and VQ is either
7264   //   volatile or empty, there exist candidate operator functions
7265   //   of the form
7266   //
7267   //        T*VQ&      operator=(T*VQ&, T*);
7268   //
7269   // C++ [over.built]p21:
7270   //
7271   //   For every pair (T, VQ), where T is a cv-qualified or
7272   //   cv-unqualified object type and VQ is either volatile or
7273   //   empty, there exist candidate operator functions of the form
7274   //
7275   //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7276   //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
addAssignmentPointerOverloads(bool isEqualOp)7277   void addAssignmentPointerOverloads(bool isEqualOp) {
7278     /// Set of (canonical) types that we've already handled.
7279     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7280 
7281     for (BuiltinCandidateTypeSet::iterator
7282               Ptr = CandidateTypes[0].pointer_begin(),
7283            PtrEnd = CandidateTypes[0].pointer_end();
7284          Ptr != PtrEnd; ++Ptr) {
7285       // If this is operator=, keep track of the builtin candidates we added.
7286       if (isEqualOp)
7287         AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7288       else if (!(*Ptr)->getPointeeType()->isObjectType())
7289         continue;
7290 
7291       // non-volatile version
7292       QualType ParamTypes[2] = {
7293         S.Context.getLValueReferenceType(*Ptr),
7294         isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7295       };
7296       S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7297                             /*IsAssigmentOperator=*/ isEqualOp);
7298 
7299       bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7300                           VisibleTypeConversionsQuals.hasVolatile();
7301       if (NeedVolatile) {
7302         // volatile version
7303         ParamTypes[0] =
7304           S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7305         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7306                               /*IsAssigmentOperator=*/isEqualOp);
7307       }
7308 
7309       if (!(*Ptr).isRestrictQualified() &&
7310           VisibleTypeConversionsQuals.hasRestrict()) {
7311         // restrict version
7312         ParamTypes[0]
7313           = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7314         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7315                               /*IsAssigmentOperator=*/isEqualOp);
7316 
7317         if (NeedVolatile) {
7318           // volatile restrict version
7319           ParamTypes[0]
7320             = S.Context.getLValueReferenceType(
7321                 S.Context.getCVRQualifiedType(*Ptr,
7322                                               (Qualifiers::Volatile |
7323                                                Qualifiers::Restrict)));
7324           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7325                                 /*IsAssigmentOperator=*/isEqualOp);
7326         }
7327       }
7328     }
7329 
7330     if (isEqualOp) {
7331       for (BuiltinCandidateTypeSet::iterator
7332                 Ptr = CandidateTypes[1].pointer_begin(),
7333              PtrEnd = CandidateTypes[1].pointer_end();
7334            Ptr != PtrEnd; ++Ptr) {
7335         // Make sure we don't add the same candidate twice.
7336         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7337           continue;
7338 
7339         QualType ParamTypes[2] = {
7340           S.Context.getLValueReferenceType(*Ptr),
7341           *Ptr,
7342         };
7343 
7344         // non-volatile version
7345         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7346                               /*IsAssigmentOperator=*/true);
7347 
7348         bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7349                            VisibleTypeConversionsQuals.hasVolatile();
7350         if (NeedVolatile) {
7351           // volatile version
7352           ParamTypes[0] =
7353             S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7354           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7355                                 /*IsAssigmentOperator=*/true);
7356         }
7357 
7358         if (!(*Ptr).isRestrictQualified() &&
7359             VisibleTypeConversionsQuals.hasRestrict()) {
7360           // restrict version
7361           ParamTypes[0]
7362             = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7363           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7364                                 /*IsAssigmentOperator=*/true);
7365 
7366           if (NeedVolatile) {
7367             // volatile restrict version
7368             ParamTypes[0]
7369               = S.Context.getLValueReferenceType(
7370                   S.Context.getCVRQualifiedType(*Ptr,
7371                                                 (Qualifiers::Volatile |
7372                                                  Qualifiers::Restrict)));
7373             S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7374                                   /*IsAssigmentOperator=*/true);
7375           }
7376         }
7377       }
7378     }
7379   }
7380 
7381   // C++ [over.built]p18:
7382   //
7383   //   For every triple (L, VQ, R), where L is an arithmetic type,
7384   //   VQ is either volatile or empty, and R is a promoted
7385   //   arithmetic type, there exist candidate operator functions of
7386   //   the form
7387   //
7388   //        VQ L&      operator=(VQ L&, R);
7389   //        VQ L&      operator*=(VQ L&, R);
7390   //        VQ L&      operator/=(VQ L&, R);
7391   //        VQ L&      operator+=(VQ L&, R);
7392   //        VQ L&      operator-=(VQ L&, R);
addAssignmentArithmeticOverloads(bool isEqualOp)7393   void addAssignmentArithmeticOverloads(bool isEqualOp) {
7394     if (!HasArithmeticOrEnumeralCandidateType)
7395       return;
7396 
7397     for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7398       for (unsigned Right = FirstPromotedArithmeticType;
7399            Right < LastPromotedArithmeticType; ++Right) {
7400         QualType ParamTypes[2];
7401         ParamTypes[1] = getArithmeticType(Right);
7402 
7403         // Add this built-in operator as a candidate (VQ is empty).
7404         ParamTypes[0] =
7405           S.Context.getLValueReferenceType(getArithmeticType(Left));
7406         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7407                               /*IsAssigmentOperator=*/isEqualOp);
7408 
7409         // Add this built-in operator as a candidate (VQ is 'volatile').
7410         if (VisibleTypeConversionsQuals.hasVolatile()) {
7411           ParamTypes[0] =
7412             S.Context.getVolatileType(getArithmeticType(Left));
7413           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7414           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7415                                 /*IsAssigmentOperator=*/isEqualOp);
7416         }
7417       }
7418     }
7419 
7420     // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7421     for (BuiltinCandidateTypeSet::iterator
7422               Vec1 = CandidateTypes[0].vector_begin(),
7423            Vec1End = CandidateTypes[0].vector_end();
7424          Vec1 != Vec1End; ++Vec1) {
7425       for (BuiltinCandidateTypeSet::iterator
7426                 Vec2 = CandidateTypes[1].vector_begin(),
7427              Vec2End = CandidateTypes[1].vector_end();
7428            Vec2 != Vec2End; ++Vec2) {
7429         QualType ParamTypes[2];
7430         ParamTypes[1] = *Vec2;
7431         // Add this built-in operator as a candidate (VQ is empty).
7432         ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7433         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7434                               /*IsAssigmentOperator=*/isEqualOp);
7435 
7436         // Add this built-in operator as a candidate (VQ is 'volatile').
7437         if (VisibleTypeConversionsQuals.hasVolatile()) {
7438           ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7439           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7440           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet,
7441                                 /*IsAssigmentOperator=*/isEqualOp);
7442         }
7443       }
7444     }
7445   }
7446 
7447   // C++ [over.built]p22:
7448   //
7449   //   For every triple (L, VQ, R), where L is an integral type, VQ
7450   //   is either volatile or empty, and R is a promoted integral
7451   //   type, there exist candidate operator functions of the form
7452   //
7453   //        VQ L&       operator%=(VQ L&, R);
7454   //        VQ L&       operator<<=(VQ L&, R);
7455   //        VQ L&       operator>>=(VQ L&, R);
7456   //        VQ L&       operator&=(VQ L&, R);
7457   //        VQ L&       operator^=(VQ L&, R);
7458   //        VQ L&       operator|=(VQ L&, R);
addAssignmentIntegralOverloads()7459   void addAssignmentIntegralOverloads() {
7460     if (!HasArithmeticOrEnumeralCandidateType)
7461       return;
7462 
7463     for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7464       for (unsigned Right = FirstPromotedIntegralType;
7465            Right < LastPromotedIntegralType; ++Right) {
7466         QualType ParamTypes[2];
7467         ParamTypes[1] = getArithmeticType(Right);
7468 
7469         // Add this built-in operator as a candidate (VQ is empty).
7470         ParamTypes[0] =
7471           S.Context.getLValueReferenceType(getArithmeticType(Left));
7472         S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7473         if (VisibleTypeConversionsQuals.hasVolatile()) {
7474           // Add this built-in operator as a candidate (VQ is 'volatile').
7475           ParamTypes[0] = getArithmeticType(Left);
7476           ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7477           ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7478           S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, CandidateSet);
7479         }
7480       }
7481     }
7482   }
7483 
7484   // C++ [over.operator]p23:
7485   //
7486   //   There also exist candidate operator functions of the form
7487   //
7488   //        bool        operator!(bool);
7489   //        bool        operator&&(bool, bool);
7490   //        bool        operator||(bool, bool);
addExclaimOverload()7491   void addExclaimOverload() {
7492     QualType ParamTy = S.Context.BoolTy;
7493     S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, CandidateSet,
7494                           /*IsAssignmentOperator=*/false,
7495                           /*NumContextualBoolArguments=*/1);
7496   }
addAmpAmpOrPipePipeOverload()7497   void addAmpAmpOrPipePipeOverload() {
7498     QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7499     S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, CandidateSet,
7500                           /*IsAssignmentOperator=*/false,
7501                           /*NumContextualBoolArguments=*/2);
7502   }
7503 
7504   // C++ [over.built]p13:
7505   //
7506   //   For every cv-qualified or cv-unqualified object type T there
7507   //   exist candidate operator functions of the form
7508   //
7509   //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7510   //        T&         operator[](T*, ptrdiff_t);
7511   //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7512   //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7513   //        T&         operator[](ptrdiff_t, T*);
addSubscriptOverloads()7514   void addSubscriptOverloads() {
7515     for (BuiltinCandidateTypeSet::iterator
7516               Ptr = CandidateTypes[0].pointer_begin(),
7517            PtrEnd = CandidateTypes[0].pointer_end();
7518          Ptr != PtrEnd; ++Ptr) {
7519       QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7520       QualType PointeeType = (*Ptr)->getPointeeType();
7521       if (!PointeeType->isObjectType())
7522         continue;
7523 
7524       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7525 
7526       // T& operator[](T*, ptrdiff_t)
7527       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7528     }
7529 
7530     for (BuiltinCandidateTypeSet::iterator
7531               Ptr = CandidateTypes[1].pointer_begin(),
7532            PtrEnd = CandidateTypes[1].pointer_end();
7533          Ptr != PtrEnd; ++Ptr) {
7534       QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7535       QualType PointeeType = (*Ptr)->getPointeeType();
7536       if (!PointeeType->isObjectType())
7537         continue;
7538 
7539       QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7540 
7541       // T& operator[](ptrdiff_t, T*)
7542       S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7543     }
7544   }
7545 
7546   // C++ [over.built]p11:
7547   //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7548   //    C1 is the same type as C2 or is a derived class of C2, T is an object
7549   //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7550   //    there exist candidate operator functions of the form
7551   //
7552   //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7553   //
7554   //    where CV12 is the union of CV1 and CV2.
addArrowStarOverloads()7555   void addArrowStarOverloads() {
7556     for (BuiltinCandidateTypeSet::iterator
7557              Ptr = CandidateTypes[0].pointer_begin(),
7558            PtrEnd = CandidateTypes[0].pointer_end();
7559          Ptr != PtrEnd; ++Ptr) {
7560       QualType C1Ty = (*Ptr);
7561       QualType C1;
7562       QualifierCollector Q1;
7563       C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7564       if (!isa<RecordType>(C1))
7565         continue;
7566       // heuristic to reduce number of builtin candidates in the set.
7567       // Add volatile/restrict version only if there are conversions to a
7568       // volatile/restrict type.
7569       if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7570         continue;
7571       if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7572         continue;
7573       for (BuiltinCandidateTypeSet::iterator
7574                 MemPtr = CandidateTypes[1].member_pointer_begin(),
7575              MemPtrEnd = CandidateTypes[1].member_pointer_end();
7576            MemPtr != MemPtrEnd; ++MemPtr) {
7577         const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7578         QualType C2 = QualType(mptr->getClass(), 0);
7579         C2 = C2.getUnqualifiedType();
7580         if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7581           break;
7582         QualType ParamTypes[2] = { *Ptr, *MemPtr };
7583         // build CV12 T&
7584         QualType T = mptr->getPointeeType();
7585         if (!VisibleTypeConversionsQuals.hasVolatile() &&
7586             T.isVolatileQualified())
7587           continue;
7588         if (!VisibleTypeConversionsQuals.hasRestrict() &&
7589             T.isRestrictQualified())
7590           continue;
7591         T = Q1.apply(S.Context, T);
7592         QualType ResultTy = S.Context.getLValueReferenceType(T);
7593         S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, CandidateSet);
7594       }
7595     }
7596   }
7597 
7598   // Note that we don't consider the first argument, since it has been
7599   // contextually converted to bool long ago. The candidates below are
7600   // therefore added as binary.
7601   //
7602   // C++ [over.built]p25:
7603   //   For every type T, where T is a pointer, pointer-to-member, or scoped
7604   //   enumeration type, there exist candidate operator functions of the form
7605   //
7606   //        T        operator?(bool, T, T);
7607   //
addConditionalOperatorOverloads()7608   void addConditionalOperatorOverloads() {
7609     /// Set of (canonical) types that we've already handled.
7610     llvm::SmallPtrSet<QualType, 8> AddedTypes;
7611 
7612     for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7613       for (BuiltinCandidateTypeSet::iterator
7614                 Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7615              PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7616            Ptr != PtrEnd; ++Ptr) {
7617         if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7618           continue;
7619 
7620         QualType ParamTypes[2] = { *Ptr, *Ptr };
7621         S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, CandidateSet);
7622       }
7623 
7624       for (BuiltinCandidateTypeSet::iterator
7625                 MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7626              MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7627            MemPtr != MemPtrEnd; ++MemPtr) {
7628         if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7629           continue;
7630 
7631         QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7632         S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, CandidateSet);
7633       }
7634 
7635       if (S.getLangOpts().CPlusPlus11) {
7636         for (BuiltinCandidateTypeSet::iterator
7637                   Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7638                EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7639              Enum != EnumEnd; ++Enum) {
7640           if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7641             continue;
7642 
7643           if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7644             continue;
7645 
7646           QualType ParamTypes[2] = { *Enum, *Enum };
7647           S.AddBuiltinCandidate(*Enum, ParamTypes, Args, CandidateSet);
7648         }
7649       }
7650     }
7651   }
7652 };
7653 
7654 } // end anonymous namespace
7655 
7656 /// AddBuiltinOperatorCandidates - Add the appropriate built-in
7657 /// operator overloads to the candidate set (C++ [over.built]), based
7658 /// on the operator @p Op and the arguments given. For example, if the
7659 /// operator is a binary '+', this routine might add "int
7660 /// operator+(int, int)" to cover integer addition.
7661 void
AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,SourceLocation OpLoc,llvm::ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet)7662 Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7663                                    SourceLocation OpLoc,
7664                                    llvm::ArrayRef<Expr *> Args,
7665                                    OverloadCandidateSet& CandidateSet) {
7666   // Find all of the types that the arguments can convert to, but only
7667   // if the operator we're looking at has built-in operator candidates
7668   // that make use of these types. Also record whether we encounter non-record
7669   // candidate types or either arithmetic or enumeral candidate types.
7670   Qualifiers VisibleTypeConversionsQuals;
7671   VisibleTypeConversionsQuals.addConst();
7672   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx)
7673     VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7674 
7675   bool HasNonRecordCandidateType = false;
7676   bool HasArithmeticOrEnumeralCandidateType = false;
7677   SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7678   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
7679     CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7680     CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7681                                                  OpLoc,
7682                                                  true,
7683                                                  (Op == OO_Exclaim ||
7684                                                   Op == OO_AmpAmp ||
7685                                                   Op == OO_PipePipe),
7686                                                  VisibleTypeConversionsQuals);
7687     HasNonRecordCandidateType = HasNonRecordCandidateType ||
7688         CandidateTypes[ArgIdx].hasNonRecordTypes();
7689     HasArithmeticOrEnumeralCandidateType =
7690         HasArithmeticOrEnumeralCandidateType ||
7691         CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7692   }
7693 
7694   // Exit early when no non-record types have been added to the candidate set
7695   // for any of the arguments to the operator.
7696   //
7697   // We can't exit early for !, ||, or &&, since there we have always have
7698   // 'bool' overloads.
7699   if (!HasNonRecordCandidateType &&
7700       !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7701     return;
7702 
7703   // Setup an object to manage the common state for building overloads.
7704   BuiltinOperatorOverloadBuilder OpBuilder(*this, Args,
7705                                            VisibleTypeConversionsQuals,
7706                                            HasArithmeticOrEnumeralCandidateType,
7707                                            CandidateTypes, CandidateSet);
7708 
7709   // Dispatch over the operation to add in only those overloads which apply.
7710   switch (Op) {
7711   case OO_None:
7712   case NUM_OVERLOADED_OPERATORS:
7713     llvm_unreachable("Expected an overloaded operator");
7714 
7715   case OO_New:
7716   case OO_Delete:
7717   case OO_Array_New:
7718   case OO_Array_Delete:
7719   case OO_Call:
7720     llvm_unreachable(
7721                     "Special operators don't use AddBuiltinOperatorCandidates");
7722 
7723   case OO_Comma:
7724   case OO_Arrow:
7725     // C++ [over.match.oper]p3:
7726     //   -- For the operator ',', the unary operator '&', or the
7727     //      operator '->', the built-in candidates set is empty.
7728     break;
7729 
7730   case OO_Plus: // '+' is either unary or binary
7731     if (Args.size() == 1)
7732       OpBuilder.addUnaryPlusPointerOverloads();
7733     // Fall through.
7734 
7735   case OO_Minus: // '-' is either unary or binary
7736     if (Args.size() == 1) {
7737       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7738     } else {
7739       OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7740       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7741     }
7742     break;
7743 
7744   case OO_Star: // '*' is either unary or binary
7745     if (Args.size() == 1)
7746       OpBuilder.addUnaryStarPointerOverloads();
7747     else
7748       OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7749     break;
7750 
7751   case OO_Slash:
7752     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7753     break;
7754 
7755   case OO_PlusPlus:
7756   case OO_MinusMinus:
7757     OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7758     OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7759     break;
7760 
7761   case OO_EqualEqual:
7762   case OO_ExclaimEqual:
7763     OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7764     // Fall through.
7765 
7766   case OO_Less:
7767   case OO_Greater:
7768   case OO_LessEqual:
7769   case OO_GreaterEqual:
7770     OpBuilder.addRelationalPointerOrEnumeralOverloads();
7771     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7772     break;
7773 
7774   case OO_Percent:
7775   case OO_Caret:
7776   case OO_Pipe:
7777   case OO_LessLess:
7778   case OO_GreaterGreater:
7779     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7780     break;
7781 
7782   case OO_Amp: // '&' is either unary or binary
7783     if (Args.size() == 1)
7784       // C++ [over.match.oper]p3:
7785       //   -- For the operator ',', the unary operator '&', or the
7786       //      operator '->', the built-in candidates set is empty.
7787       break;
7788 
7789     OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7790     break;
7791 
7792   case OO_Tilde:
7793     OpBuilder.addUnaryTildePromotedIntegralOverloads();
7794     break;
7795 
7796   case OO_Equal:
7797     OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7798     // Fall through.
7799 
7800   case OO_PlusEqual:
7801   case OO_MinusEqual:
7802     OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7803     // Fall through.
7804 
7805   case OO_StarEqual:
7806   case OO_SlashEqual:
7807     OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7808     break;
7809 
7810   case OO_PercentEqual:
7811   case OO_LessLessEqual:
7812   case OO_GreaterGreaterEqual:
7813   case OO_AmpEqual:
7814   case OO_CaretEqual:
7815   case OO_PipeEqual:
7816     OpBuilder.addAssignmentIntegralOverloads();
7817     break;
7818 
7819   case OO_Exclaim:
7820     OpBuilder.addExclaimOverload();
7821     break;
7822 
7823   case OO_AmpAmp:
7824   case OO_PipePipe:
7825     OpBuilder.addAmpAmpOrPipePipeOverload();
7826     break;
7827 
7828   case OO_Subscript:
7829     OpBuilder.addSubscriptOverloads();
7830     break;
7831 
7832   case OO_ArrowStar:
7833     OpBuilder.addArrowStarOverloads();
7834     break;
7835 
7836   case OO_Conditional:
7837     OpBuilder.addConditionalOperatorOverloads();
7838     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7839     break;
7840   }
7841 }
7842 
7843 /// \brief Add function candidates found via argument-dependent lookup
7844 /// to the set of overloading candidates.
7845 ///
7846 /// This routine performs argument-dependent name lookup based on the
7847 /// given function name (which may also be an operator name) and adds
7848 /// all of the overload candidates found by ADL to the overload
7849 /// candidate set (C++ [basic.lookup.argdep]).
7850 void
AddArgumentDependentLookupCandidates(DeclarationName Name,bool Operator,SourceLocation Loc,ArrayRef<Expr * > Args,TemplateArgumentListInfo * ExplicitTemplateArgs,OverloadCandidateSet & CandidateSet,bool PartialOverloading)7851 Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7852                                            bool Operator, SourceLocation Loc,
7853                                            ArrayRef<Expr *> Args,
7854                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
7855                                            OverloadCandidateSet& CandidateSet,
7856                                            bool PartialOverloading) {
7857   ADLResult Fns;
7858 
7859   // FIXME: This approach for uniquing ADL results (and removing
7860   // redundant candidates from the set) relies on pointer-equality,
7861   // which means we need to key off the canonical decl.  However,
7862   // always going back to the canonical decl might not get us the
7863   // right set of default arguments.  What default arguments are
7864   // we supposed to consider on ADL candidates, anyway?
7865 
7866   // FIXME: Pass in the explicit template arguments?
7867   ArgumentDependentLookup(Name, Operator, Loc, Args, Fns);
7868 
7869   // Erase all of the candidates we already knew about.
7870   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7871                                    CandEnd = CandidateSet.end();
7872        Cand != CandEnd; ++Cand)
7873     if (Cand->Function) {
7874       Fns.erase(Cand->Function);
7875       if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7876         Fns.erase(FunTmpl);
7877     }
7878 
7879   // For each of the ADL candidates we found, add it to the overload
7880   // set.
7881   for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7882     DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7883     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7884       if (ExplicitTemplateArgs)
7885         continue;
7886 
7887       AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7888                            PartialOverloading);
7889     } else
7890       AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7891                                    FoundDecl, ExplicitTemplateArgs,
7892                                    Args, CandidateSet);
7893   }
7894 }
7895 
7896 /// isBetterOverloadCandidate - Determines whether the first overload
7897 /// candidate is a better candidate than the second (C++ 13.3.3p1).
7898 bool
isBetterOverloadCandidate(Sema & S,const OverloadCandidate & Cand1,const OverloadCandidate & Cand2,SourceLocation Loc,bool UserDefinedConversion)7899 isBetterOverloadCandidate(Sema &S,
7900                           const OverloadCandidate &Cand1,
7901                           const OverloadCandidate &Cand2,
7902                           SourceLocation Loc,
7903                           bool UserDefinedConversion) {
7904   // Define viable functions to be better candidates than non-viable
7905   // functions.
7906   if (!Cand2.Viable)
7907     return Cand1.Viable;
7908   else if (!Cand1.Viable)
7909     return false;
7910 
7911   // C++ [over.match.best]p1:
7912   //
7913   //   -- if F is a static member function, ICS1(F) is defined such
7914   //      that ICS1(F) is neither better nor worse than ICS1(G) for
7915   //      any function G, and, symmetrically, ICS1(G) is neither
7916   //      better nor worse than ICS1(F).
7917   unsigned StartArg = 0;
7918   if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7919     StartArg = 1;
7920 
7921   // C++ [over.match.best]p1:
7922   //   A viable function F1 is defined to be a better function than another
7923   //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7924   //   conversion sequence than ICSi(F2), and then...
7925   unsigned NumArgs = Cand1.NumConversions;
7926   assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7927   bool HasBetterConversion = false;
7928   for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7929     switch (CompareImplicitConversionSequences(S,
7930                                                Cand1.Conversions[ArgIdx],
7931                                                Cand2.Conversions[ArgIdx])) {
7932     case ImplicitConversionSequence::Better:
7933       // Cand1 has a better conversion sequence.
7934       HasBetterConversion = true;
7935       break;
7936 
7937     case ImplicitConversionSequence::Worse:
7938       // Cand1 can't be better than Cand2.
7939       return false;
7940 
7941     case ImplicitConversionSequence::Indistinguishable:
7942       // Do nothing.
7943       break;
7944     }
7945   }
7946 
7947   //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7948   //       ICSj(F2), or, if not that,
7949   if (HasBetterConversion)
7950     return true;
7951 
7952   //     - F1 is a non-template function and F2 is a function template
7953   //       specialization, or, if not that,
7954   if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7955       Cand2.Function && Cand2.Function->getPrimaryTemplate())
7956     return true;
7957 
7958   //   -- F1 and F2 are function template specializations, and the function
7959   //      template for F1 is more specialized than the template for F2
7960   //      according to the partial ordering rules described in 14.5.5.2, or,
7961   //      if not that,
7962   if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7963       Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7964     if (FunctionTemplateDecl *BetterTemplate
7965           = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7966                                          Cand2.Function->getPrimaryTemplate(),
7967                                          Loc,
7968                        isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7969                                                              : TPOC_Call,
7970                                          Cand1.ExplicitCallArguments))
7971       return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7972   }
7973 
7974   //   -- the context is an initialization by user-defined conversion
7975   //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7976   //      from the return type of F1 to the destination type (i.e.,
7977   //      the type of the entity being initialized) is a better
7978   //      conversion sequence than the standard conversion sequence
7979   //      from the return type of F2 to the destination type.
7980   if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7981       isa<CXXConversionDecl>(Cand1.Function) &&
7982       isa<CXXConversionDecl>(Cand2.Function)) {
7983     // First check whether we prefer one of the conversion functions over the
7984     // other. This only distinguishes the results in non-standard, extension
7985     // cases such as the conversion from a lambda closure type to a function
7986     // pointer or block.
7987     ImplicitConversionSequence::CompareKind FuncResult
7988       = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7989     if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7990       return FuncResult;
7991 
7992     switch (CompareStandardConversionSequences(S,
7993                                                Cand1.FinalConversion,
7994                                                Cand2.FinalConversion)) {
7995     case ImplicitConversionSequence::Better:
7996       // Cand1 has a better conversion sequence.
7997       return true;
7998 
7999     case ImplicitConversionSequence::Worse:
8000       // Cand1 can't be better than Cand2.
8001       return false;
8002 
8003     case ImplicitConversionSequence::Indistinguishable:
8004       // Do nothing
8005       break;
8006     }
8007   }
8008 
8009   return false;
8010 }
8011 
8012 /// \brief Computes the best viable function (C++ 13.3.3)
8013 /// within an overload candidate set.
8014 ///
8015 /// \param Loc The location of the function name (or operator symbol) for
8016 /// which overload resolution occurs.
8017 ///
8018 /// \param Best If overload resolution was successful or found a deleted
8019 /// function, \p Best points to the candidate function found.
8020 ///
8021 /// \returns The result of overload resolution.
8022 OverloadingResult
BestViableFunction(Sema & S,SourceLocation Loc,iterator & Best,bool UserDefinedConversion)8023 OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
8024                                          iterator &Best,
8025                                          bool UserDefinedConversion) {
8026   // Find the best viable function.
8027   Best = end();
8028   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8029     if (Cand->Viable)
8030       if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
8031                                                      UserDefinedConversion))
8032         Best = Cand;
8033   }
8034 
8035   // If we didn't find any viable functions, abort.
8036   if (Best == end())
8037     return OR_No_Viable_Function;
8038 
8039   // Make sure that this function is better than every other viable
8040   // function. If not, we have an ambiguity.
8041   for (iterator Cand = begin(); Cand != end(); ++Cand) {
8042     if (Cand->Viable &&
8043         Cand != Best &&
8044         !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
8045                                    UserDefinedConversion)) {
8046       Best = end();
8047       return OR_Ambiguous;
8048     }
8049   }
8050 
8051   // Best is the best viable function.
8052   if (Best->Function &&
8053       (Best->Function->isDeleted() ||
8054        S.isFunctionConsideredUnavailable(Best->Function)))
8055     return OR_Deleted;
8056 
8057   return OR_Success;
8058 }
8059 
8060 namespace {
8061 
8062 enum OverloadCandidateKind {
8063   oc_function,
8064   oc_method,
8065   oc_constructor,
8066   oc_function_template,
8067   oc_method_template,
8068   oc_constructor_template,
8069   oc_implicit_default_constructor,
8070   oc_implicit_copy_constructor,
8071   oc_implicit_move_constructor,
8072   oc_implicit_copy_assignment,
8073   oc_implicit_move_assignment,
8074   oc_implicit_inherited_constructor
8075 };
8076 
ClassifyOverloadCandidate(Sema & S,FunctionDecl * Fn,std::string & Description)8077 OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
8078                                                 FunctionDecl *Fn,
8079                                                 std::string &Description) {
8080   bool isTemplate = false;
8081 
8082   if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
8083     isTemplate = true;
8084     Description = S.getTemplateArgumentBindingsText(
8085       FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
8086   }
8087 
8088   if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
8089     if (!Ctor->isImplicit())
8090       return isTemplate ? oc_constructor_template : oc_constructor;
8091 
8092     if (Ctor->getInheritedConstructor())
8093       return oc_implicit_inherited_constructor;
8094 
8095     if (Ctor->isDefaultConstructor())
8096       return oc_implicit_default_constructor;
8097 
8098     if (Ctor->isMoveConstructor())
8099       return oc_implicit_move_constructor;
8100 
8101     assert(Ctor->isCopyConstructor() &&
8102            "unexpected sort of implicit constructor");
8103     return oc_implicit_copy_constructor;
8104   }
8105 
8106   if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
8107     // This actually gets spelled 'candidate function' for now, but
8108     // it doesn't hurt to split it out.
8109     if (!Meth->isImplicit())
8110       return isTemplate ? oc_method_template : oc_method;
8111 
8112     if (Meth->isMoveAssignmentOperator())
8113       return oc_implicit_move_assignment;
8114 
8115     if (Meth->isCopyAssignmentOperator())
8116       return oc_implicit_copy_assignment;
8117 
8118     assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
8119     return oc_method;
8120   }
8121 
8122   return isTemplate ? oc_function_template : oc_function;
8123 }
8124 
MaybeEmitInheritedConstructorNote(Sema & S,Decl * Fn)8125 void MaybeEmitInheritedConstructorNote(Sema &S, Decl *Fn) {
8126   const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
8127   if (!Ctor) return;
8128 
8129   Ctor = Ctor->getInheritedConstructor();
8130   if (!Ctor) return;
8131 
8132   S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
8133 }
8134 
8135 } // end anonymous namespace
8136 
8137 // Notes the location of an overload candidate.
NoteOverloadCandidate(FunctionDecl * Fn,QualType DestType)8138 void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
8139   std::string FnDesc;
8140   OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
8141   PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
8142                              << (unsigned) K << FnDesc;
8143   HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
8144   Diag(Fn->getLocation(), PD);
8145   MaybeEmitInheritedConstructorNote(*this, Fn);
8146 }
8147 
8148 //Notes the location of all overload candidates designated through
8149 // OverloadedExpr
NoteAllOverloadCandidates(Expr * OverloadedExpr,QualType DestType)8150 void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
8151   assert(OverloadedExpr->getType() == Context.OverloadTy);
8152 
8153   OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
8154   OverloadExpr *OvlExpr = Ovl.Expression;
8155 
8156   for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8157                             IEnd = OvlExpr->decls_end();
8158        I != IEnd; ++I) {
8159     if (FunctionTemplateDecl *FunTmpl =
8160                 dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
8161       NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
8162     } else if (FunctionDecl *Fun
8163                       = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
8164       NoteOverloadCandidate(Fun, DestType);
8165     }
8166   }
8167 }
8168 
8169 /// Diagnoses an ambiguous conversion.  The partial diagnostic is the
8170 /// "lead" diagnostic; it will be given two arguments, the source and
8171 /// target types of the conversion.
DiagnoseAmbiguousConversion(Sema & S,SourceLocation CaretLoc,const PartialDiagnostic & PDiag) const8172 void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8173                                  Sema &S,
8174                                  SourceLocation CaretLoc,
8175                                  const PartialDiagnostic &PDiag) const {
8176   S.Diag(CaretLoc, PDiag)
8177     << Ambiguous.getFromType() << Ambiguous.getToType();
8178   // FIXME: The note limiting machinery is borrowed from
8179   // OverloadCandidateSet::NoteCandidates; there's an opportunity for
8180   // refactoring here.
8181   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8182   unsigned CandsShown = 0;
8183   AmbiguousConversionSequence::const_iterator I, E;
8184   for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8185     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
8186       break;
8187     ++CandsShown;
8188     S.NoteOverloadCandidate(*I);
8189   }
8190   if (I != E)
8191     S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
8192 }
8193 
8194 namespace {
8195 
DiagnoseBadConversion(Sema & S,OverloadCandidate * Cand,unsigned I)8196 void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8197   const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8198   assert(Conv.isBad());
8199   assert(Cand->Function && "for now, candidate must be a function");
8200   FunctionDecl *Fn = Cand->Function;
8201 
8202   // There's a conversion slot for the object argument if this is a
8203   // non-constructor method.  Note that 'I' corresponds the
8204   // conversion-slot index.
8205   bool isObjectArgument = false;
8206   if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8207     if (I == 0)
8208       isObjectArgument = true;
8209     else
8210       I--;
8211   }
8212 
8213   std::string FnDesc;
8214   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8215 
8216   Expr *FromExpr = Conv.Bad.FromExpr;
8217   QualType FromTy = Conv.Bad.getFromType();
8218   QualType ToTy = Conv.Bad.getToType();
8219 
8220   if (FromTy == S.Context.OverloadTy) {
8221     assert(FromExpr && "overload set argument came from implicit argument?");
8222     Expr *E = FromExpr->IgnoreParens();
8223     if (isa<UnaryOperator>(E))
8224       E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8225     DeclarationName Name = cast<OverloadExpr>(E)->getName();
8226 
8227     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8228       << (unsigned) FnKind << FnDesc
8229       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8230       << ToTy << Name << I+1;
8231     MaybeEmitInheritedConstructorNote(S, Fn);
8232     return;
8233   }
8234 
8235   // Do some hand-waving analysis to see if the non-viability is due
8236   // to a qualifier mismatch.
8237   CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8238   CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8239   if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8240     CToTy = RT->getPointeeType();
8241   else {
8242     // TODO: detect and diagnose the full richness of const mismatches.
8243     if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8244       if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8245         CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8246   }
8247 
8248   if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8249       !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8250     Qualifiers FromQs = CFromTy.getQualifiers();
8251     Qualifiers ToQs = CToTy.getQualifiers();
8252 
8253     if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8254       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8255         << (unsigned) FnKind << FnDesc
8256         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8257         << FromTy
8258         << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8259         << (unsigned) isObjectArgument << I+1;
8260       MaybeEmitInheritedConstructorNote(S, Fn);
8261       return;
8262     }
8263 
8264     if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8265       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8266         << (unsigned) FnKind << FnDesc
8267         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8268         << FromTy
8269         << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8270         << (unsigned) isObjectArgument << I+1;
8271       MaybeEmitInheritedConstructorNote(S, Fn);
8272       return;
8273     }
8274 
8275     if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8276       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8277       << (unsigned) FnKind << FnDesc
8278       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8279       << FromTy
8280       << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8281       << (unsigned) isObjectArgument << I+1;
8282       MaybeEmitInheritedConstructorNote(S, Fn);
8283       return;
8284     }
8285 
8286     unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8287     assert(CVR && "unexpected qualifiers mismatch");
8288 
8289     if (isObjectArgument) {
8290       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8291         << (unsigned) FnKind << FnDesc
8292         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8293         << FromTy << (CVR - 1);
8294     } else {
8295       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8296         << (unsigned) FnKind << FnDesc
8297         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8298         << FromTy << (CVR - 1) << I+1;
8299     }
8300     MaybeEmitInheritedConstructorNote(S, Fn);
8301     return;
8302   }
8303 
8304   // Special diagnostic for failure to convert an initializer list, since
8305   // telling the user that it has type void is not useful.
8306   if (FromExpr && isa<InitListExpr>(FromExpr)) {
8307     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8308       << (unsigned) FnKind << FnDesc
8309       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8310       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8311     MaybeEmitInheritedConstructorNote(S, Fn);
8312     return;
8313   }
8314 
8315   // Diagnose references or pointers to incomplete types differently,
8316   // since it's far from impossible that the incompleteness triggered
8317   // the failure.
8318   QualType TempFromTy = FromTy.getNonReferenceType();
8319   if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8320     TempFromTy = PTy->getPointeeType();
8321   if (TempFromTy->isIncompleteType()) {
8322     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8323       << (unsigned) FnKind << FnDesc
8324       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8325       << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8326     MaybeEmitInheritedConstructorNote(S, Fn);
8327     return;
8328   }
8329 
8330   // Diagnose base -> derived pointer conversions.
8331   unsigned BaseToDerivedConversion = 0;
8332   if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8333     if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8334       if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8335                                                FromPtrTy->getPointeeType()) &&
8336           !FromPtrTy->getPointeeType()->isIncompleteType() &&
8337           !ToPtrTy->getPointeeType()->isIncompleteType() &&
8338           S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8339                           FromPtrTy->getPointeeType()))
8340         BaseToDerivedConversion = 1;
8341     }
8342   } else if (const ObjCObjectPointerType *FromPtrTy
8343                                     = FromTy->getAs<ObjCObjectPointerType>()) {
8344     if (const ObjCObjectPointerType *ToPtrTy
8345                                         = ToTy->getAs<ObjCObjectPointerType>())
8346       if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8347         if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8348           if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8349                                                 FromPtrTy->getPointeeType()) &&
8350               FromIface->isSuperClassOf(ToIface))
8351             BaseToDerivedConversion = 2;
8352   } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8353     if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8354         !FromTy->isIncompleteType() &&
8355         !ToRefTy->getPointeeType()->isIncompleteType() &&
8356         S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8357       BaseToDerivedConversion = 3;
8358     } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8359                ToTy.getNonReferenceType().getCanonicalType() ==
8360                FromTy.getNonReferenceType().getCanonicalType()) {
8361       S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8362         << (unsigned) FnKind << FnDesc
8363         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8364         << (unsigned) isObjectArgument << I + 1;
8365       MaybeEmitInheritedConstructorNote(S, Fn);
8366       return;
8367     }
8368   }
8369 
8370   if (BaseToDerivedConversion) {
8371     S.Diag(Fn->getLocation(),
8372            diag::note_ovl_candidate_bad_base_to_derived_conv)
8373       << (unsigned) FnKind << FnDesc
8374       << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8375       << (BaseToDerivedConversion - 1)
8376       << FromTy << ToTy << I+1;
8377     MaybeEmitInheritedConstructorNote(S, Fn);
8378     return;
8379   }
8380 
8381   if (isa<ObjCObjectPointerType>(CFromTy) &&
8382       isa<PointerType>(CToTy)) {
8383       Qualifiers FromQs = CFromTy.getQualifiers();
8384       Qualifiers ToQs = CToTy.getQualifiers();
8385       if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8386         S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8387         << (unsigned) FnKind << FnDesc
8388         << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8389         << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8390         MaybeEmitInheritedConstructorNote(S, Fn);
8391         return;
8392       }
8393   }
8394 
8395   // Emit the generic diagnostic and, optionally, add the hints to it.
8396   PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8397   FDiag << (unsigned) FnKind << FnDesc
8398     << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8399     << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8400     << (unsigned) (Cand->Fix.Kind);
8401 
8402   // If we can fix the conversion, suggest the FixIts.
8403   for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8404        HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8405     FDiag << *HI;
8406   S.Diag(Fn->getLocation(), FDiag);
8407 
8408   MaybeEmitInheritedConstructorNote(S, Fn);
8409 }
8410 
8411 /// Additional arity mismatch diagnosis specific to a function overload
8412 /// candidates. This is not covered by the more general DiagnoseArityMismatch()
8413 /// over a candidate in any candidate set.
CheckArityMismatch(Sema & S,OverloadCandidate * Cand,unsigned NumArgs)8414 bool CheckArityMismatch(Sema &S, OverloadCandidate *Cand,
8415                         unsigned NumArgs) {
8416   FunctionDecl *Fn = Cand->Function;
8417   unsigned MinParams = Fn->getMinRequiredArguments();
8418 
8419   // With invalid overloaded operators, it's possible that we think we
8420   // have an arity mismatch when in fact it looks like we have the
8421   // right number of arguments, because only overloaded operators have
8422   // the weird behavior of overloading member and non-member functions.
8423   // Just don't report anything.
8424   if (Fn->isInvalidDecl() &&
8425       Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8426     return true;
8427 
8428   if (NumArgs < MinParams) {
8429     assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8430            (Cand->FailureKind == ovl_fail_bad_deduction &&
8431             Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8432   } else {
8433     assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8434            (Cand->FailureKind == ovl_fail_bad_deduction &&
8435             Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8436   }
8437 
8438   return false;
8439 }
8440 
8441 /// General arity mismatch diagnosis over a candidate in a candidate set.
DiagnoseArityMismatch(Sema & S,Decl * D,unsigned NumFormalArgs)8442 void DiagnoseArityMismatch(Sema &S, Decl *D, unsigned NumFormalArgs) {
8443   assert(isa<FunctionDecl>(D) &&
8444       "The templated declaration should at least be a function"
8445       " when diagnosing bad template argument deduction due to too many"
8446       " or too few arguments");
8447 
8448   FunctionDecl *Fn = cast<FunctionDecl>(D);
8449 
8450   // TODO: treat calls to a missing default constructor as a special case
8451   const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8452   unsigned MinParams = Fn->getMinRequiredArguments();
8453 
8454   // at least / at most / exactly
8455   unsigned mode, modeCount;
8456   if (NumFormalArgs < MinParams) {
8457     if (MinParams != FnTy->getNumArgs() ||
8458         FnTy->isVariadic() || FnTy->isTemplateVariadic())
8459       mode = 0; // "at least"
8460     else
8461       mode = 2; // "exactly"
8462     modeCount = MinParams;
8463   } else {
8464     if (MinParams != FnTy->getNumArgs())
8465       mode = 1; // "at most"
8466     else
8467       mode = 2; // "exactly"
8468     modeCount = FnTy->getNumArgs();
8469   }
8470 
8471   std::string Description;
8472   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8473 
8474   if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8475     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8476       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8477       << Fn->getParamDecl(0) << NumFormalArgs;
8478   else
8479     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8480       << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8481       << modeCount << NumFormalArgs;
8482   MaybeEmitInheritedConstructorNote(S, Fn);
8483 }
8484 
8485 /// Arity mismatch diagnosis specific to a function overload candidate.
DiagnoseArityMismatch(Sema & S,OverloadCandidate * Cand,unsigned NumFormalArgs)8486 void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8487                            unsigned NumFormalArgs) {
8488   if (!CheckArityMismatch(S, Cand, NumFormalArgs))
8489     DiagnoseArityMismatch(S, Cand->Function, NumFormalArgs);
8490 }
8491 
getDescribedTemplate(Decl * Templated)8492 TemplateDecl *getDescribedTemplate(Decl *Templated) {
8493   if (FunctionDecl *FD = dyn_cast<FunctionDecl>(Templated))
8494     return FD->getDescribedFunctionTemplate();
8495   else if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Templated))
8496     return RD->getDescribedClassTemplate();
8497 
8498   llvm_unreachable("Unsupported: Getting the described template declaration"
8499                    " for bad deduction diagnosis");
8500 }
8501 
8502 /// Diagnose a failed template-argument deduction.
DiagnoseBadDeduction(Sema & S,Decl * Templated,DeductionFailureInfo & DeductionFailure,unsigned NumArgs)8503 void DiagnoseBadDeduction(Sema &S, Decl *Templated,
8504                           DeductionFailureInfo &DeductionFailure,
8505                           unsigned NumArgs) {
8506   TemplateParameter Param = DeductionFailure.getTemplateParameter();
8507   NamedDecl *ParamD;
8508   (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8509   (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8510   (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8511   switch (DeductionFailure.Result) {
8512   case Sema::TDK_Success:
8513     llvm_unreachable("TDK_success while diagnosing bad deduction");
8514 
8515   case Sema::TDK_Incomplete: {
8516     assert(ParamD && "no parameter found for incomplete deduction result");
8517     S.Diag(Templated->getLocation(),
8518            diag::note_ovl_candidate_incomplete_deduction)
8519         << ParamD->getDeclName();
8520     MaybeEmitInheritedConstructorNote(S, Templated);
8521     return;
8522   }
8523 
8524   case Sema::TDK_Underqualified: {
8525     assert(ParamD && "no parameter found for bad qualifiers deduction result");
8526     TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8527 
8528     QualType Param = DeductionFailure.getFirstArg()->getAsType();
8529 
8530     // Param will have been canonicalized, but it should just be a
8531     // qualified version of ParamD, so move the qualifiers to that.
8532     QualifierCollector Qs;
8533     Qs.strip(Param);
8534     QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8535     assert(S.Context.hasSameType(Param, NonCanonParam));
8536 
8537     // Arg has also been canonicalized, but there's nothing we can do
8538     // about that.  It also doesn't matter as much, because it won't
8539     // have any template parameters in it (because deduction isn't
8540     // done on dependent types).
8541     QualType Arg = DeductionFailure.getSecondArg()->getAsType();
8542 
8543     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_underqualified)
8544         << ParamD->getDeclName() << Arg << NonCanonParam;
8545     MaybeEmitInheritedConstructorNote(S, Templated);
8546     return;
8547   }
8548 
8549   case Sema::TDK_Inconsistent: {
8550     assert(ParamD && "no parameter found for inconsistent deduction result");
8551     int which = 0;
8552     if (isa<TemplateTypeParmDecl>(ParamD))
8553       which = 0;
8554     else if (isa<NonTypeTemplateParmDecl>(ParamD))
8555       which = 1;
8556     else {
8557       which = 2;
8558     }
8559 
8560     S.Diag(Templated->getLocation(),
8561            diag::note_ovl_candidate_inconsistent_deduction)
8562         << which << ParamD->getDeclName() << *DeductionFailure.getFirstArg()
8563         << *DeductionFailure.getSecondArg();
8564     MaybeEmitInheritedConstructorNote(S, Templated);
8565     return;
8566   }
8567 
8568   case Sema::TDK_InvalidExplicitArguments:
8569     assert(ParamD && "no parameter found for invalid explicit arguments");
8570     if (ParamD->getDeclName())
8571       S.Diag(Templated->getLocation(),
8572              diag::note_ovl_candidate_explicit_arg_mismatch_named)
8573           << ParamD->getDeclName();
8574     else {
8575       int index = 0;
8576       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8577         index = TTP->getIndex();
8578       else if (NonTypeTemplateParmDecl *NTTP
8579                                   = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8580         index = NTTP->getIndex();
8581       else
8582         index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8583       S.Diag(Templated->getLocation(),
8584              diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8585           << (index + 1);
8586     }
8587     MaybeEmitInheritedConstructorNote(S, Templated);
8588     return;
8589 
8590   case Sema::TDK_TooManyArguments:
8591   case Sema::TDK_TooFewArguments:
8592     DiagnoseArityMismatch(S, Templated, NumArgs);
8593     return;
8594 
8595   case Sema::TDK_InstantiationDepth:
8596     S.Diag(Templated->getLocation(),
8597            diag::note_ovl_candidate_instantiation_depth);
8598     MaybeEmitInheritedConstructorNote(S, Templated);
8599     return;
8600 
8601   case Sema::TDK_SubstitutionFailure: {
8602     // Format the template argument list into the argument string.
8603     SmallString<128> TemplateArgString;
8604     if (TemplateArgumentList *Args =
8605             DeductionFailure.getTemplateArgumentList()) {
8606       TemplateArgString = " ";
8607       TemplateArgString += S.getTemplateArgumentBindingsText(
8608           getDescribedTemplate(Templated)->getTemplateParameters(), *Args);
8609     }
8610 
8611     // If this candidate was disabled by enable_if, say so.
8612     PartialDiagnosticAt *PDiag = DeductionFailure.getSFINAEDiagnostic();
8613     if (PDiag && PDiag->second.getDiagID() ==
8614           diag::err_typename_nested_not_found_enable_if) {
8615       // FIXME: Use the source range of the condition, and the fully-qualified
8616       //        name of the enable_if template. These are both present in PDiag.
8617       S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8618         << "'enable_if'" << TemplateArgString;
8619       return;
8620     }
8621 
8622     // Format the SFINAE diagnostic into the argument string.
8623     // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8624     //        formatted message in another diagnostic.
8625     SmallString<128> SFINAEArgString;
8626     SourceRange R;
8627     if (PDiag) {
8628       SFINAEArgString = ": ";
8629       R = SourceRange(PDiag->first, PDiag->first);
8630       PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8631     }
8632 
8633     S.Diag(Templated->getLocation(),
8634            diag::note_ovl_candidate_substitution_failure)
8635         << TemplateArgString << SFINAEArgString << R;
8636     MaybeEmitInheritedConstructorNote(S, Templated);
8637     return;
8638   }
8639 
8640   case Sema::TDK_FailedOverloadResolution: {
8641     OverloadExpr::FindResult R = OverloadExpr::find(DeductionFailure.getExpr());
8642     S.Diag(Templated->getLocation(),
8643            diag::note_ovl_candidate_failed_overload_resolution)
8644         << R.Expression->getName();
8645     return;
8646   }
8647 
8648   case Sema::TDK_NonDeducedMismatch: {
8649     // FIXME: Provide a source location to indicate what we couldn't match.
8650     TemplateArgument FirstTA = *DeductionFailure.getFirstArg();
8651     TemplateArgument SecondTA = *DeductionFailure.getSecondArg();
8652     if (FirstTA.getKind() == TemplateArgument::Template &&
8653         SecondTA.getKind() == TemplateArgument::Template) {
8654       TemplateName FirstTN = FirstTA.getAsTemplate();
8655       TemplateName SecondTN = SecondTA.getAsTemplate();
8656       if (FirstTN.getKind() == TemplateName::Template &&
8657           SecondTN.getKind() == TemplateName::Template) {
8658         if (FirstTN.getAsTemplateDecl()->getName() ==
8659             SecondTN.getAsTemplateDecl()->getName()) {
8660           // FIXME: This fixes a bad diagnostic where both templates are named
8661           // the same.  This particular case is a bit difficult since:
8662           // 1) It is passed as a string to the diagnostic printer.
8663           // 2) The diagnostic printer only attempts to find a better
8664           //    name for types, not decls.
8665           // Ideally, this should folded into the diagnostic printer.
8666           S.Diag(Templated->getLocation(),
8667                  diag::note_ovl_candidate_non_deduced_mismatch_qualified)
8668               << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
8669           return;
8670         }
8671       }
8672     }
8673     S.Diag(Templated->getLocation(),
8674            diag::note_ovl_candidate_non_deduced_mismatch)
8675         << FirstTA << SecondTA;
8676     return;
8677   }
8678   // TODO: diagnose these individually, then kill off
8679   // note_ovl_candidate_bad_deduction, which is uselessly vague.
8680   case Sema::TDK_MiscellaneousDeductionFailure:
8681     S.Diag(Templated->getLocation(), diag::note_ovl_candidate_bad_deduction);
8682     MaybeEmitInheritedConstructorNote(S, Templated);
8683     return;
8684   }
8685 }
8686 
8687 /// Diagnose a failed template-argument deduction, for function calls.
DiagnoseBadDeduction(Sema & S,OverloadCandidate * Cand,unsigned NumArgs)8688 void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand, unsigned NumArgs) {
8689   unsigned TDK = Cand->DeductionFailure.Result;
8690   if (TDK == Sema::TDK_TooFewArguments || TDK == Sema::TDK_TooManyArguments) {
8691     if (CheckArityMismatch(S, Cand, NumArgs))
8692       return;
8693   }
8694   DiagnoseBadDeduction(S, Cand->Function, // pattern
8695                        Cand->DeductionFailure, NumArgs);
8696 }
8697 
8698 /// CUDA: diagnose an invalid call across targets.
DiagnoseBadTarget(Sema & S,OverloadCandidate * Cand)8699 void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8700   FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8701   FunctionDecl *Callee = Cand->Function;
8702 
8703   Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8704                            CalleeTarget = S.IdentifyCUDATarget(Callee);
8705 
8706   std::string FnDesc;
8707   OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8708 
8709   S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8710       << (unsigned) FnKind << CalleeTarget << CallerTarget;
8711 }
8712 
8713 /// Generates a 'note' diagnostic for an overload candidate.  We've
8714 /// already generated a primary error at the call site.
8715 ///
8716 /// It really does need to be a single diagnostic with its caret
8717 /// pointed at the candidate declaration.  Yes, this creates some
8718 /// major challenges of technical writing.  Yes, this makes pointing
8719 /// out problems with specific arguments quite awkward.  It's still
8720 /// better than generating twenty screens of text for every failed
8721 /// overload.
8722 ///
8723 /// It would be great to be able to express per-candidate problems
8724 /// more richly for those diagnostic clients that cared, but we'd
8725 /// still have to be just as careful with the default diagnostics.
NoteFunctionCandidate(Sema & S,OverloadCandidate * Cand,unsigned NumArgs)8726 void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8727                            unsigned NumArgs) {
8728   FunctionDecl *Fn = Cand->Function;
8729 
8730   // Note deleted candidates, but only if they're viable.
8731   if (Cand->Viable && (Fn->isDeleted() ||
8732       S.isFunctionConsideredUnavailable(Fn))) {
8733     std::string FnDesc;
8734     OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8735 
8736     S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8737       << FnKind << FnDesc
8738       << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8739     MaybeEmitInheritedConstructorNote(S, Fn);
8740     return;
8741   }
8742 
8743   // We don't really have anything else to say about viable candidates.
8744   if (Cand->Viable) {
8745     S.NoteOverloadCandidate(Fn);
8746     return;
8747   }
8748 
8749   switch (Cand->FailureKind) {
8750   case ovl_fail_too_many_arguments:
8751   case ovl_fail_too_few_arguments:
8752     return DiagnoseArityMismatch(S, Cand, NumArgs);
8753 
8754   case ovl_fail_bad_deduction:
8755     return DiagnoseBadDeduction(S, Cand, NumArgs);
8756 
8757   case ovl_fail_trivial_conversion:
8758   case ovl_fail_bad_final_conversion:
8759   case ovl_fail_final_conversion_not_exact:
8760     return S.NoteOverloadCandidate(Fn);
8761 
8762   case ovl_fail_bad_conversion: {
8763     unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8764     for (unsigned N = Cand->NumConversions; I != N; ++I)
8765       if (Cand->Conversions[I].isBad())
8766         return DiagnoseBadConversion(S, Cand, I);
8767 
8768     // FIXME: this currently happens when we're called from SemaInit
8769     // when user-conversion overload fails.  Figure out how to handle
8770     // those conditions and diagnose them well.
8771     return S.NoteOverloadCandidate(Fn);
8772   }
8773 
8774   case ovl_fail_bad_target:
8775     return DiagnoseBadTarget(S, Cand);
8776   }
8777 }
8778 
NoteSurrogateCandidate(Sema & S,OverloadCandidate * Cand)8779 void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8780   // Desugar the type of the surrogate down to a function type,
8781   // retaining as many typedefs as possible while still showing
8782   // the function type (and, therefore, its parameter types).
8783   QualType FnType = Cand->Surrogate->getConversionType();
8784   bool isLValueReference = false;
8785   bool isRValueReference = false;
8786   bool isPointer = false;
8787   if (const LValueReferenceType *FnTypeRef =
8788         FnType->getAs<LValueReferenceType>()) {
8789     FnType = FnTypeRef->getPointeeType();
8790     isLValueReference = true;
8791   } else if (const RValueReferenceType *FnTypeRef =
8792                FnType->getAs<RValueReferenceType>()) {
8793     FnType = FnTypeRef->getPointeeType();
8794     isRValueReference = true;
8795   }
8796   if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8797     FnType = FnTypePtr->getPointeeType();
8798     isPointer = true;
8799   }
8800   // Desugar down to a function type.
8801   FnType = QualType(FnType->getAs<FunctionType>(), 0);
8802   // Reconstruct the pointer/reference as appropriate.
8803   if (isPointer) FnType = S.Context.getPointerType(FnType);
8804   if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8805   if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8806 
8807   S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8808     << FnType;
8809   MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8810 }
8811 
NoteBuiltinOperatorCandidate(Sema & S,StringRef Opc,SourceLocation OpLoc,OverloadCandidate * Cand)8812 void NoteBuiltinOperatorCandidate(Sema &S,
8813                                   StringRef Opc,
8814                                   SourceLocation OpLoc,
8815                                   OverloadCandidate *Cand) {
8816   assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8817   std::string TypeStr("operator");
8818   TypeStr += Opc;
8819   TypeStr += "(";
8820   TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8821   if (Cand->NumConversions == 1) {
8822     TypeStr += ")";
8823     S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8824   } else {
8825     TypeStr += ", ";
8826     TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8827     TypeStr += ")";
8828     S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8829   }
8830 }
8831 
NoteAmbiguousUserConversions(Sema & S,SourceLocation OpLoc,OverloadCandidate * Cand)8832 void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8833                                   OverloadCandidate *Cand) {
8834   unsigned NoOperands = Cand->NumConversions;
8835   for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8836     const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8837     if (ICS.isBad()) break; // all meaningless after first invalid
8838     if (!ICS.isAmbiguous()) continue;
8839 
8840     ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8841                               S.PDiag(diag::note_ambiguous_type_conversion));
8842   }
8843 }
8844 
GetLocationForCandidate(const OverloadCandidate * Cand)8845 static SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8846   if (Cand->Function)
8847     return Cand->Function->getLocation();
8848   if (Cand->IsSurrogate)
8849     return Cand->Surrogate->getLocation();
8850   return SourceLocation();
8851 }
8852 
RankDeductionFailure(const DeductionFailureInfo & DFI)8853 static unsigned RankDeductionFailure(const DeductionFailureInfo &DFI) {
8854   switch ((Sema::TemplateDeductionResult)DFI.Result) {
8855   case Sema::TDK_Success:
8856     llvm_unreachable("TDK_success while diagnosing bad deduction");
8857 
8858   case Sema::TDK_Invalid:
8859   case Sema::TDK_Incomplete:
8860     return 1;
8861 
8862   case Sema::TDK_Underqualified:
8863   case Sema::TDK_Inconsistent:
8864     return 2;
8865 
8866   case Sema::TDK_SubstitutionFailure:
8867   case Sema::TDK_NonDeducedMismatch:
8868   case Sema::TDK_MiscellaneousDeductionFailure:
8869     return 3;
8870 
8871   case Sema::TDK_InstantiationDepth:
8872   case Sema::TDK_FailedOverloadResolution:
8873     return 4;
8874 
8875   case Sema::TDK_InvalidExplicitArguments:
8876     return 5;
8877 
8878   case Sema::TDK_TooManyArguments:
8879   case Sema::TDK_TooFewArguments:
8880     return 6;
8881   }
8882   llvm_unreachable("Unhandled deduction result");
8883 }
8884 
8885 struct CompareOverloadCandidatesForDisplay {
8886   Sema &S;
CompareOverloadCandidatesForDisplayclang::__anon0637eb3d0711::CompareOverloadCandidatesForDisplay8887   CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8888 
operator ()clang::__anon0637eb3d0711::CompareOverloadCandidatesForDisplay8889   bool operator()(const OverloadCandidate *L,
8890                   const OverloadCandidate *R) {
8891     // Fast-path this check.
8892     if (L == R) return false;
8893 
8894     // Order first by viability.
8895     if (L->Viable) {
8896       if (!R->Viable) return true;
8897 
8898       // TODO: introduce a tri-valued comparison for overload
8899       // candidates.  Would be more worthwhile if we had a sort
8900       // that could exploit it.
8901       if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8902       if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8903     } else if (R->Viable)
8904       return false;
8905 
8906     assert(L->Viable == R->Viable);
8907 
8908     // Criteria by which we can sort non-viable candidates:
8909     if (!L->Viable) {
8910       // 1. Arity mismatches come after other candidates.
8911       if (L->FailureKind == ovl_fail_too_many_arguments ||
8912           L->FailureKind == ovl_fail_too_few_arguments)
8913         return false;
8914       if (R->FailureKind == ovl_fail_too_many_arguments ||
8915           R->FailureKind == ovl_fail_too_few_arguments)
8916         return true;
8917 
8918       // 2. Bad conversions come first and are ordered by the number
8919       // of bad conversions and quality of good conversions.
8920       if (L->FailureKind == ovl_fail_bad_conversion) {
8921         if (R->FailureKind != ovl_fail_bad_conversion)
8922           return true;
8923 
8924         // The conversion that can be fixed with a smaller number of changes,
8925         // comes first.
8926         unsigned numLFixes = L->Fix.NumConversionsFixed;
8927         unsigned numRFixes = R->Fix.NumConversionsFixed;
8928         numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8929         numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8930         if (numLFixes != numRFixes) {
8931           if (numLFixes < numRFixes)
8932             return true;
8933           else
8934             return false;
8935         }
8936 
8937         // If there's any ordering between the defined conversions...
8938         // FIXME: this might not be transitive.
8939         assert(L->NumConversions == R->NumConversions);
8940 
8941         int leftBetter = 0;
8942         unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8943         for (unsigned E = L->NumConversions; I != E; ++I) {
8944           switch (CompareImplicitConversionSequences(S,
8945                                                      L->Conversions[I],
8946                                                      R->Conversions[I])) {
8947           case ImplicitConversionSequence::Better:
8948             leftBetter++;
8949             break;
8950 
8951           case ImplicitConversionSequence::Worse:
8952             leftBetter--;
8953             break;
8954 
8955           case ImplicitConversionSequence::Indistinguishable:
8956             break;
8957           }
8958         }
8959         if (leftBetter > 0) return true;
8960         if (leftBetter < 0) return false;
8961 
8962       } else if (R->FailureKind == ovl_fail_bad_conversion)
8963         return false;
8964 
8965       if (L->FailureKind == ovl_fail_bad_deduction) {
8966         if (R->FailureKind != ovl_fail_bad_deduction)
8967           return true;
8968 
8969         if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8970           return RankDeductionFailure(L->DeductionFailure)
8971                < RankDeductionFailure(R->DeductionFailure);
8972       } else if (R->FailureKind == ovl_fail_bad_deduction)
8973         return false;
8974 
8975       // TODO: others?
8976     }
8977 
8978     // Sort everything else by location.
8979     SourceLocation LLoc = GetLocationForCandidate(L);
8980     SourceLocation RLoc = GetLocationForCandidate(R);
8981 
8982     // Put candidates without locations (e.g. builtins) at the end.
8983     if (LLoc.isInvalid()) return false;
8984     if (RLoc.isInvalid()) return true;
8985 
8986     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8987   }
8988 };
8989 
8990 /// CompleteNonViableCandidate - Normally, overload resolution only
8991 /// computes up to the first. Produces the FixIt set if possible.
CompleteNonViableCandidate(Sema & S,OverloadCandidate * Cand,ArrayRef<Expr * > Args)8992 void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8993                                 ArrayRef<Expr *> Args) {
8994   assert(!Cand->Viable);
8995 
8996   // Don't do anything on failures other than bad conversion.
8997   if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8998 
8999   // We only want the FixIts if all the arguments can be corrected.
9000   bool Unfixable = false;
9001   // Use a implicit copy initialization to check conversion fixes.
9002   Cand->Fix.setConversionChecker(TryCopyInitialization);
9003 
9004   // Skip forward to the first bad conversion.
9005   unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
9006   unsigned ConvCount = Cand->NumConversions;
9007   while (true) {
9008     assert(ConvIdx != ConvCount && "no bad conversion in candidate");
9009     ConvIdx++;
9010     if (Cand->Conversions[ConvIdx - 1].isBad()) {
9011       Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
9012       break;
9013     }
9014   }
9015 
9016   if (ConvIdx == ConvCount)
9017     return;
9018 
9019   assert(!Cand->Conversions[ConvIdx].isInitialized() &&
9020          "remaining conversion is initialized?");
9021 
9022   // FIXME: this should probably be preserved from the overload
9023   // operation somehow.
9024   bool SuppressUserConversions = false;
9025 
9026   const FunctionProtoType* Proto;
9027   unsigned ArgIdx = ConvIdx;
9028 
9029   if (Cand->IsSurrogate) {
9030     QualType ConvType
9031       = Cand->Surrogate->getConversionType().getNonReferenceType();
9032     if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
9033       ConvType = ConvPtrType->getPointeeType();
9034     Proto = ConvType->getAs<FunctionProtoType>();
9035     ArgIdx--;
9036   } else if (Cand->Function) {
9037     Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
9038     if (isa<CXXMethodDecl>(Cand->Function) &&
9039         !isa<CXXConstructorDecl>(Cand->Function))
9040       ArgIdx--;
9041   } else {
9042     // Builtin binary operator with a bad first conversion.
9043     assert(ConvCount <= 3);
9044     for (; ConvIdx != ConvCount; ++ConvIdx)
9045       Cand->Conversions[ConvIdx]
9046         = TryCopyInitialization(S, Args[ConvIdx],
9047                                 Cand->BuiltinTypes.ParamTypes[ConvIdx],
9048                                 SuppressUserConversions,
9049                                 /*InOverloadResolution*/ true,
9050                                 /*AllowObjCWritebackConversion=*/
9051                                   S.getLangOpts().ObjCAutoRefCount);
9052     return;
9053   }
9054 
9055   // Fill in the rest of the conversions.
9056   unsigned NumArgsInProto = Proto->getNumArgs();
9057   for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
9058     if (ArgIdx < NumArgsInProto) {
9059       Cand->Conversions[ConvIdx]
9060         = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
9061                                 SuppressUserConversions,
9062                                 /*InOverloadResolution=*/true,
9063                                 /*AllowObjCWritebackConversion=*/
9064                                   S.getLangOpts().ObjCAutoRefCount);
9065       // Store the FixIt in the candidate if it exists.
9066       if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
9067         Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
9068     }
9069     else
9070       Cand->Conversions[ConvIdx].setEllipsis();
9071   }
9072 }
9073 
9074 } // end anonymous namespace
9075 
9076 /// PrintOverloadCandidates - When overload resolution fails, prints
9077 /// diagnostic messages containing the candidates in the candidate
9078 /// set.
NoteCandidates(Sema & S,OverloadCandidateDisplayKind OCD,ArrayRef<Expr * > Args,StringRef Opc,SourceLocation OpLoc)9079 void OverloadCandidateSet::NoteCandidates(Sema &S,
9080                                           OverloadCandidateDisplayKind OCD,
9081                                           ArrayRef<Expr *> Args,
9082                                           StringRef Opc,
9083                                           SourceLocation OpLoc) {
9084   // Sort the candidates by viability and position.  Sorting directly would
9085   // be prohibitive, so we make a set of pointers and sort those.
9086   SmallVector<OverloadCandidate*, 32> Cands;
9087   if (OCD == OCD_AllCandidates) Cands.reserve(size());
9088   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9089     if (Cand->Viable)
9090       Cands.push_back(Cand);
9091     else if (OCD == OCD_AllCandidates) {
9092       CompleteNonViableCandidate(S, Cand, Args);
9093       if (Cand->Function || Cand->IsSurrogate)
9094         Cands.push_back(Cand);
9095       // Otherwise, this a non-viable builtin candidate.  We do not, in general,
9096       // want to list every possible builtin candidate.
9097     }
9098   }
9099 
9100   std::sort(Cands.begin(), Cands.end(),
9101             CompareOverloadCandidatesForDisplay(S));
9102 
9103   bool ReportedAmbiguousConversions = false;
9104 
9105   SmallVectorImpl<OverloadCandidate*>::iterator I, E;
9106   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
9107   unsigned CandsShown = 0;
9108   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
9109     OverloadCandidate *Cand = *I;
9110 
9111     // Set an arbitrary limit on the number of candidate functions we'll spam
9112     // the user with.  FIXME: This limit should depend on details of the
9113     // candidate list.
9114     if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
9115       break;
9116     }
9117     ++CandsShown;
9118 
9119     if (Cand->Function)
9120       NoteFunctionCandidate(S, Cand, Args.size());
9121     else if (Cand->IsSurrogate)
9122       NoteSurrogateCandidate(S, Cand);
9123     else {
9124       assert(Cand->Viable &&
9125              "Non-viable built-in candidates are not added to Cands.");
9126       // Generally we only see ambiguities including viable builtin
9127       // operators if overload resolution got screwed up by an
9128       // ambiguous user-defined conversion.
9129       //
9130       // FIXME: It's quite possible for different conversions to see
9131       // different ambiguities, though.
9132       if (!ReportedAmbiguousConversions) {
9133         NoteAmbiguousUserConversions(S, OpLoc, Cand);
9134         ReportedAmbiguousConversions = true;
9135       }
9136 
9137       // If this is a viable builtin, print it.
9138       NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
9139     }
9140   }
9141 
9142   if (I != E)
9143     S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
9144 }
9145 
9146 static SourceLocation
GetLocationForCandidate(const TemplateSpecCandidate * Cand)9147 GetLocationForCandidate(const TemplateSpecCandidate *Cand) {
9148   return Cand->Specialization ? Cand->Specialization->getLocation()
9149                               : SourceLocation();
9150 }
9151 
9152 struct CompareTemplateSpecCandidatesForDisplay {
9153   Sema &S;
CompareTemplateSpecCandidatesForDisplayclang::CompareTemplateSpecCandidatesForDisplay9154   CompareTemplateSpecCandidatesForDisplay(Sema &S) : S(S) {}
9155 
operator ()clang::CompareTemplateSpecCandidatesForDisplay9156   bool operator()(const TemplateSpecCandidate *L,
9157                   const TemplateSpecCandidate *R) {
9158     // Fast-path this check.
9159     if (L == R)
9160       return false;
9161 
9162     // Assuming that both candidates are not matches...
9163 
9164     // Sort by the ranking of deduction failures.
9165     if (L->DeductionFailure.Result != R->DeductionFailure.Result)
9166       return RankDeductionFailure(L->DeductionFailure) <
9167              RankDeductionFailure(R->DeductionFailure);
9168 
9169     // Sort everything else by location.
9170     SourceLocation LLoc = GetLocationForCandidate(L);
9171     SourceLocation RLoc = GetLocationForCandidate(R);
9172 
9173     // Put candidates without locations (e.g. builtins) at the end.
9174     if (LLoc.isInvalid())
9175       return false;
9176     if (RLoc.isInvalid())
9177       return true;
9178 
9179     return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
9180   }
9181 };
9182 
9183 /// Diagnose a template argument deduction failure.
9184 /// We are treating these failures as overload failures due to bad
9185 /// deductions.
NoteDeductionFailure(Sema & S)9186 void TemplateSpecCandidate::NoteDeductionFailure(Sema &S) {
9187   DiagnoseBadDeduction(S, Specialization, // pattern
9188                        DeductionFailure, /*NumArgs=*/0);
9189 }
9190 
destroyCandidates()9191 void TemplateSpecCandidateSet::destroyCandidates() {
9192   for (iterator i = begin(), e = end(); i != e; ++i) {
9193     i->DeductionFailure.Destroy();
9194   }
9195 }
9196 
clear()9197 void TemplateSpecCandidateSet::clear() {
9198   destroyCandidates();
9199   Candidates.clear();
9200 }
9201 
9202 /// NoteCandidates - When no template specialization match is found, prints
9203 /// diagnostic messages containing the non-matching specializations that form
9204 /// the candidate set.
9205 /// This is analoguous to OverloadCandidateSet::NoteCandidates() with
9206 /// OCD == OCD_AllCandidates and Cand->Viable == false.
NoteCandidates(Sema & S,SourceLocation Loc)9207 void TemplateSpecCandidateSet::NoteCandidates(Sema &S, SourceLocation Loc) {
9208   // Sort the candidates by position (assuming no candidate is a match).
9209   // Sorting directly would be prohibitive, so we make a set of pointers
9210   // and sort those.
9211   SmallVector<TemplateSpecCandidate *, 32> Cands;
9212   Cands.reserve(size());
9213   for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
9214     if (Cand->Specialization)
9215       Cands.push_back(Cand);
9216     // Otherwise, this is a non matching builtin candidate.  We do not,
9217     // in general, want to list every possible builtin candidate.
9218   }
9219 
9220   std::sort(Cands.begin(), Cands.end(),
9221             CompareTemplateSpecCandidatesForDisplay(S));
9222 
9223   // FIXME: Perhaps rename OverloadsShown and getShowOverloads()
9224   // for generalization purposes (?).
9225   const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
9226 
9227   SmallVectorImpl<TemplateSpecCandidate *>::iterator I, E;
9228   unsigned CandsShown = 0;
9229   for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
9230     TemplateSpecCandidate *Cand = *I;
9231 
9232     // Set an arbitrary limit on the number of candidates we'll spam
9233     // the user with.  FIXME: This limit should depend on details of the
9234     // candidate list.
9235     if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
9236       break;
9237     ++CandsShown;
9238 
9239     assert(Cand->Specialization &&
9240            "Non-matching built-in candidates are not added to Cands.");
9241     Cand->NoteDeductionFailure(S);
9242   }
9243 
9244   if (I != E)
9245     S.Diag(Loc, diag::note_ovl_too_many_candidates) << int(E - I);
9246 }
9247 
9248 // [PossiblyAFunctionType]  -->   [Return]
9249 // NonFunctionType --> NonFunctionType
9250 // R (A) --> R(A)
9251 // R (*)(A) --> R (A)
9252 // R (&)(A) --> R (A)
9253 // R (S::*)(A) --> R (A)
ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType)9254 QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
9255   QualType Ret = PossiblyAFunctionType;
9256   if (const PointerType *ToTypePtr =
9257     PossiblyAFunctionType->getAs<PointerType>())
9258     Ret = ToTypePtr->getPointeeType();
9259   else if (const ReferenceType *ToTypeRef =
9260     PossiblyAFunctionType->getAs<ReferenceType>())
9261     Ret = ToTypeRef->getPointeeType();
9262   else if (const MemberPointerType *MemTypePtr =
9263     PossiblyAFunctionType->getAs<MemberPointerType>())
9264     Ret = MemTypePtr->getPointeeType();
9265   Ret =
9266     Context.getCanonicalType(Ret).getUnqualifiedType();
9267   return Ret;
9268 }
9269 
9270 // A helper class to help with address of function resolution
9271 // - allows us to avoid passing around all those ugly parameters
9272 class AddressOfFunctionResolver
9273 {
9274   Sema& S;
9275   Expr* SourceExpr;
9276   const QualType& TargetType;
9277   QualType TargetFunctionType; // Extracted function type from target type
9278 
9279   bool Complain;
9280   //DeclAccessPair& ResultFunctionAccessPair;
9281   ASTContext& Context;
9282 
9283   bool TargetTypeIsNonStaticMemberFunction;
9284   bool FoundNonTemplateFunction;
9285   bool StaticMemberFunctionFromBoundPointer;
9286 
9287   OverloadExpr::FindResult OvlExprInfo;
9288   OverloadExpr *OvlExpr;
9289   TemplateArgumentListInfo OvlExplicitTemplateArgs;
9290   SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
9291   TemplateSpecCandidateSet FailedCandidates;
9292 
9293 public:
AddressOfFunctionResolver(Sema & S,Expr * SourceExpr,const QualType & TargetType,bool Complain)9294   AddressOfFunctionResolver(Sema &S, Expr *SourceExpr,
9295                             const QualType &TargetType, bool Complain)
9296       : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
9297         Complain(Complain), Context(S.getASTContext()),
9298         TargetTypeIsNonStaticMemberFunction(
9299             !!TargetType->getAs<MemberPointerType>()),
9300         FoundNonTemplateFunction(false),
9301         StaticMemberFunctionFromBoundPointer(false),
9302         OvlExprInfo(OverloadExpr::find(SourceExpr)),
9303         OvlExpr(OvlExprInfo.Expression),
9304         FailedCandidates(OvlExpr->getNameLoc()) {
9305     ExtractUnqualifiedFunctionTypeFromTargetType();
9306 
9307     if (TargetFunctionType->isFunctionType()) {
9308       if (UnresolvedMemberExpr *UME = dyn_cast<UnresolvedMemberExpr>(OvlExpr))
9309         if (!UME->isImplicitAccess() &&
9310             !S.ResolveSingleFunctionTemplateSpecialization(UME))
9311           StaticMemberFunctionFromBoundPointer = true;
9312     } else if (OvlExpr->hasExplicitTemplateArgs()) {
9313       DeclAccessPair dap;
9314       if (FunctionDecl *Fn = S.ResolveSingleFunctionTemplateSpecialization(
9315               OvlExpr, false, &dap)) {
9316         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn))
9317           if (!Method->isStatic()) {
9318             // If the target type is a non-function type and the function found
9319             // is a non-static member function, pretend as if that was the
9320             // target, it's the only possible type to end up with.
9321             TargetTypeIsNonStaticMemberFunction = true;
9322 
9323             // And skip adding the function if its not in the proper form.
9324             // We'll diagnose this due to an empty set of functions.
9325             if (!OvlExprInfo.HasFormOfMemberPointer)
9326               return;
9327           }
9328 
9329         Matches.push_back(std::make_pair(dap, Fn));
9330       }
9331       return;
9332     }
9333 
9334     if (OvlExpr->hasExplicitTemplateArgs())
9335       OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
9336 
9337     if (FindAllFunctionsThatMatchTargetTypeExactly()) {
9338       // C++ [over.over]p4:
9339       //   If more than one function is selected, [...]
9340       if (Matches.size() > 1) {
9341         if (FoundNonTemplateFunction)
9342           EliminateAllTemplateMatches();
9343         else
9344           EliminateAllExceptMostSpecializedTemplate();
9345       }
9346     }
9347   }
9348 
9349 private:
isTargetTypeAFunction() const9350   bool isTargetTypeAFunction() const {
9351     return TargetFunctionType->isFunctionType();
9352   }
9353 
9354   // [ToType]     [Return]
9355 
9356   // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
9357   // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
9358   // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
ExtractUnqualifiedFunctionTypeFromTargetType()9359   void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
9360     TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
9361   }
9362 
9363   // return true if any matching specializations were found
AddMatchingTemplateFunction(FunctionTemplateDecl * FunctionTemplate,const DeclAccessPair & CurAccessFunPair)9364   bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
9365                                    const DeclAccessPair& CurAccessFunPair) {
9366     if (CXXMethodDecl *Method
9367               = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
9368       // Skip non-static function templates when converting to pointer, and
9369       // static when converting to member pointer.
9370       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9371         return false;
9372     }
9373     else if (TargetTypeIsNonStaticMemberFunction)
9374       return false;
9375 
9376     // C++ [over.over]p2:
9377     //   If the name is a function template, template argument deduction is
9378     //   done (14.8.2.2), and if the argument deduction succeeds, the
9379     //   resulting template argument list is used to generate a single
9380     //   function template specialization, which is added to the set of
9381     //   overloaded functions considered.
9382     FunctionDecl *Specialization = 0;
9383     TemplateDeductionInfo Info(FailedCandidates.getLocation());
9384     if (Sema::TemplateDeductionResult Result
9385           = S.DeduceTemplateArguments(FunctionTemplate,
9386                                       &OvlExplicitTemplateArgs,
9387                                       TargetFunctionType, Specialization,
9388                                       Info, /*InOverloadResolution=*/true)) {
9389       // Make a note of the failed deduction for diagnostics.
9390       FailedCandidates.addCandidate()
9391           .set(FunctionTemplate->getTemplatedDecl(),
9392                MakeDeductionFailureInfo(Context, Result, Info));
9393       (void)Result;
9394       return false;
9395     }
9396 
9397     // Template argument deduction ensures that we have an exact match or
9398     // compatible pointer-to-function arguments that would be adjusted by ICS.
9399     // This function template specicalization works.
9400     Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
9401     assert(S.isSameOrCompatibleFunctionType(
9402               Context.getCanonicalType(Specialization->getType()),
9403               Context.getCanonicalType(TargetFunctionType)));
9404     Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9405     return true;
9406   }
9407 
AddMatchingNonTemplateFunction(NamedDecl * Fn,const DeclAccessPair & CurAccessFunPair)9408   bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9409                                       const DeclAccessPair& CurAccessFunPair) {
9410     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9411       // Skip non-static functions when converting to pointer, and static
9412       // when converting to member pointer.
9413       if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9414         return false;
9415     }
9416     else if (TargetTypeIsNonStaticMemberFunction)
9417       return false;
9418 
9419     if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9420       if (S.getLangOpts().CUDA)
9421         if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9422           if (S.CheckCUDATarget(Caller, FunDecl))
9423             return false;
9424 
9425       // If any candidate has a placeholder return type, trigger its deduction
9426       // now.
9427       if (S.getLangOpts().CPlusPlus1y &&
9428           FunDecl->getResultType()->isUndeducedType() &&
9429           S.DeduceReturnType(FunDecl, SourceExpr->getLocStart(), Complain))
9430         return false;
9431 
9432       QualType ResultTy;
9433       if (Context.hasSameUnqualifiedType(TargetFunctionType,
9434                                          FunDecl->getType()) ||
9435           S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9436                                  ResultTy)) {
9437         Matches.push_back(std::make_pair(CurAccessFunPair,
9438           cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9439         FoundNonTemplateFunction = true;
9440         return true;
9441       }
9442     }
9443 
9444     return false;
9445   }
9446 
FindAllFunctionsThatMatchTargetTypeExactly()9447   bool FindAllFunctionsThatMatchTargetTypeExactly() {
9448     bool Ret = false;
9449 
9450     // If the overload expression doesn't have the form of a pointer to
9451     // member, don't try to convert it to a pointer-to-member type.
9452     if (IsInvalidFormOfPointerToMemberFunction())
9453       return false;
9454 
9455     for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9456                                E = OvlExpr->decls_end();
9457          I != E; ++I) {
9458       // Look through any using declarations to find the underlying function.
9459       NamedDecl *Fn = (*I)->getUnderlyingDecl();
9460 
9461       // C++ [over.over]p3:
9462       //   Non-member functions and static member functions match
9463       //   targets of type "pointer-to-function" or "reference-to-function."
9464       //   Nonstatic member functions match targets of
9465       //   type "pointer-to-member-function."
9466       // Note that according to DR 247, the containing class does not matter.
9467       if (FunctionTemplateDecl *FunctionTemplate
9468                                         = dyn_cast<FunctionTemplateDecl>(Fn)) {
9469         if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9470           Ret = true;
9471       }
9472       // If we have explicit template arguments supplied, skip non-templates.
9473       else if (!OvlExpr->hasExplicitTemplateArgs() &&
9474                AddMatchingNonTemplateFunction(Fn, I.getPair()))
9475         Ret = true;
9476     }
9477     assert(Ret || Matches.empty());
9478     return Ret;
9479   }
9480 
EliminateAllExceptMostSpecializedTemplate()9481   void EliminateAllExceptMostSpecializedTemplate() {
9482     //   [...] and any given function template specialization F1 is
9483     //   eliminated if the set contains a second function template
9484     //   specialization whose function template is more specialized
9485     //   than the function template of F1 according to the partial
9486     //   ordering rules of 14.5.5.2.
9487 
9488     // The algorithm specified above is quadratic. We instead use a
9489     // two-pass algorithm (similar to the one used to identify the
9490     // best viable function in an overload set) that identifies the
9491     // best function template (if it exists).
9492 
9493     UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9494     for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9495       MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9496 
9497     // TODO: It looks like FailedCandidates does not serve much purpose
9498     // here, since the no_viable diagnostic has index 0.
9499     UnresolvedSetIterator Result = S.getMostSpecialized(
9500         MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, TPOC_Other, 0,
9501         SourceExpr->getLocStart(), S.PDiag(),
9502         S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0]
9503                                                      .second->getDeclName(),
9504         S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function_template,
9505         Complain, TargetFunctionType);
9506 
9507     if (Result != MatchesCopy.end()) {
9508       // Make it the first and only element
9509       Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9510       Matches[0].second = cast<FunctionDecl>(*Result);
9511       Matches.resize(1);
9512     }
9513   }
9514 
EliminateAllTemplateMatches()9515   void EliminateAllTemplateMatches() {
9516     //   [...] any function template specializations in the set are
9517     //   eliminated if the set also contains a non-template function, [...]
9518     for (unsigned I = 0, N = Matches.size(); I != N; ) {
9519       if (Matches[I].second->getPrimaryTemplate() == 0)
9520         ++I;
9521       else {
9522         Matches[I] = Matches[--N];
9523         Matches.set_size(N);
9524       }
9525     }
9526   }
9527 
9528 public:
ComplainNoMatchesFound() const9529   void ComplainNoMatchesFound() const {
9530     assert(Matches.empty());
9531     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9532         << OvlExpr->getName() << TargetFunctionType
9533         << OvlExpr->getSourceRange();
9534     FailedCandidates.NoteCandidates(S, OvlExpr->getLocStart());
9535     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9536   }
9537 
IsInvalidFormOfPointerToMemberFunction() const9538   bool IsInvalidFormOfPointerToMemberFunction() const {
9539     return TargetTypeIsNonStaticMemberFunction &&
9540       !OvlExprInfo.HasFormOfMemberPointer;
9541   }
9542 
ComplainIsInvalidFormOfPointerToMemberFunction() const9543   void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9544       // TODO: Should we condition this on whether any functions might
9545       // have matched, or is it more appropriate to do that in callers?
9546       // TODO: a fixit wouldn't hurt.
9547       S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9548         << TargetType << OvlExpr->getSourceRange();
9549   }
9550 
IsStaticMemberFunctionFromBoundPointer() const9551   bool IsStaticMemberFunctionFromBoundPointer() const {
9552     return StaticMemberFunctionFromBoundPointer;
9553   }
9554 
ComplainIsStaticMemberFunctionFromBoundPointer() const9555   void ComplainIsStaticMemberFunctionFromBoundPointer() const {
9556     S.Diag(OvlExpr->getLocStart(),
9557            diag::err_invalid_form_pointer_member_function)
9558       << OvlExpr->getSourceRange();
9559   }
9560 
ComplainOfInvalidConversion() const9561   void ComplainOfInvalidConversion() const {
9562     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9563       << OvlExpr->getName() << TargetType;
9564   }
9565 
ComplainMultipleMatchesFound() const9566   void ComplainMultipleMatchesFound() const {
9567     assert(Matches.size() > 1);
9568     S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9569       << OvlExpr->getName()
9570       << OvlExpr->getSourceRange();
9571     S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9572   }
9573 
hadMultipleCandidates() const9574   bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9575 
getNumMatches() const9576   int getNumMatches() const { return Matches.size(); }
9577 
getMatchingFunctionDecl() const9578   FunctionDecl* getMatchingFunctionDecl() const {
9579     if (Matches.size() != 1) return 0;
9580     return Matches[0].second;
9581   }
9582 
getMatchingFunctionAccessPair() const9583   const DeclAccessPair* getMatchingFunctionAccessPair() const {
9584     if (Matches.size() != 1) return 0;
9585     return &Matches[0].first;
9586   }
9587 };
9588 
9589 /// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9590 /// an overloaded function (C++ [over.over]), where @p From is an
9591 /// expression with overloaded function type and @p ToType is the type
9592 /// we're trying to resolve to. For example:
9593 ///
9594 /// @code
9595 /// int f(double);
9596 /// int f(int);
9597 ///
9598 /// int (*pfd)(double) = f; // selects f(double)
9599 /// @endcode
9600 ///
9601 /// This routine returns the resulting FunctionDecl if it could be
9602 /// resolved, and NULL otherwise. When @p Complain is true, this
9603 /// routine will emit diagnostics if there is an error.
9604 FunctionDecl *
ResolveAddressOfOverloadedFunction(Expr * AddressOfExpr,QualType TargetType,bool Complain,DeclAccessPair & FoundResult,bool * pHadMultipleCandidates)9605 Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9606                                          QualType TargetType,
9607                                          bool Complain,
9608                                          DeclAccessPair &FoundResult,
9609                                          bool *pHadMultipleCandidates) {
9610   assert(AddressOfExpr->getType() == Context.OverloadTy);
9611 
9612   AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9613                                      Complain);
9614   int NumMatches = Resolver.getNumMatches();
9615   FunctionDecl* Fn = 0;
9616   if (NumMatches == 0 && Complain) {
9617     if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9618       Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9619     else
9620       Resolver.ComplainNoMatchesFound();
9621   }
9622   else if (NumMatches > 1 && Complain)
9623     Resolver.ComplainMultipleMatchesFound();
9624   else if (NumMatches == 1) {
9625     Fn = Resolver.getMatchingFunctionDecl();
9626     assert(Fn);
9627     FoundResult = *Resolver.getMatchingFunctionAccessPair();
9628     if (Complain) {
9629       if (Resolver.IsStaticMemberFunctionFromBoundPointer())
9630         Resolver.ComplainIsStaticMemberFunctionFromBoundPointer();
9631       else
9632         CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9633     }
9634   }
9635 
9636   if (pHadMultipleCandidates)
9637     *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9638   return Fn;
9639 }
9640 
9641 /// \brief Given an expression that refers to an overloaded function, try to
9642 /// resolve that overloaded function expression down to a single function.
9643 ///
9644 /// This routine can only resolve template-ids that refer to a single function
9645 /// template, where that template-id refers to a single template whose template
9646 /// arguments are either provided by the template-id or have defaults,
9647 /// as described in C++0x [temp.arg.explicit]p3.
9648 FunctionDecl *
ResolveSingleFunctionTemplateSpecialization(OverloadExpr * ovl,bool Complain,DeclAccessPair * FoundResult)9649 Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9650                                                   bool Complain,
9651                                                   DeclAccessPair *FoundResult) {
9652   // C++ [over.over]p1:
9653   //   [...] [Note: any redundant set of parentheses surrounding the
9654   //   overloaded function name is ignored (5.1). ]
9655   // C++ [over.over]p1:
9656   //   [...] The overloaded function name can be preceded by the &
9657   //   operator.
9658 
9659   // If we didn't actually find any template-ids, we're done.
9660   if (!ovl->hasExplicitTemplateArgs())
9661     return 0;
9662 
9663   TemplateArgumentListInfo ExplicitTemplateArgs;
9664   ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9665   TemplateSpecCandidateSet FailedCandidates(ovl->getNameLoc());
9666 
9667   // Look through all of the overloaded functions, searching for one
9668   // whose type matches exactly.
9669   FunctionDecl *Matched = 0;
9670   for (UnresolvedSetIterator I = ovl->decls_begin(),
9671          E = ovl->decls_end(); I != E; ++I) {
9672     // C++0x [temp.arg.explicit]p3:
9673     //   [...] In contexts where deduction is done and fails, or in contexts
9674     //   where deduction is not done, if a template argument list is
9675     //   specified and it, along with any default template arguments,
9676     //   identifies a single function template specialization, then the
9677     //   template-id is an lvalue for the function template specialization.
9678     FunctionTemplateDecl *FunctionTemplate
9679       = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9680 
9681     // C++ [over.over]p2:
9682     //   If the name is a function template, template argument deduction is
9683     //   done (14.8.2.2), and if the argument deduction succeeds, the
9684     //   resulting template argument list is used to generate a single
9685     //   function template specialization, which is added to the set of
9686     //   overloaded functions considered.
9687     FunctionDecl *Specialization = 0;
9688     TemplateDeductionInfo Info(FailedCandidates.getLocation());
9689     if (TemplateDeductionResult Result
9690           = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9691                                     Specialization, Info,
9692                                     /*InOverloadResolution=*/true)) {
9693       // Make a note of the failed deduction for diagnostics.
9694       // TODO: Actually use the failed-deduction info?
9695       FailedCandidates.addCandidate()
9696           .set(FunctionTemplate->getTemplatedDecl(),
9697                MakeDeductionFailureInfo(Context, Result, Info));
9698       (void)Result;
9699       continue;
9700     }
9701 
9702     assert(Specialization && "no specialization and no error?");
9703 
9704     // Multiple matches; we can't resolve to a single declaration.
9705     if (Matched) {
9706       if (Complain) {
9707         Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9708           << ovl->getName();
9709         NoteAllOverloadCandidates(ovl);
9710       }
9711       return 0;
9712     }
9713 
9714     Matched = Specialization;
9715     if (FoundResult) *FoundResult = I.getPair();
9716   }
9717 
9718   if (Matched && getLangOpts().CPlusPlus1y &&
9719       Matched->getResultType()->isUndeducedType() &&
9720       DeduceReturnType(Matched, ovl->getExprLoc(), Complain))
9721     return 0;
9722 
9723   return Matched;
9724 }
9725 
9726 
9727 
9728 
9729 // Resolve and fix an overloaded expression that can be resolved
9730 // because it identifies a single function template specialization.
9731 //
9732 // Last three arguments should only be supplied if Complain = true
9733 //
9734 // Return true if it was logically possible to so resolve the
9735 // expression, regardless of whether or not it succeeded.  Always
9736 // returns true if 'complain' is set.
ResolveAndFixSingleFunctionTemplateSpecialization(ExprResult & SrcExpr,bool doFunctionPointerConverion,bool complain,const SourceRange & OpRangeForComplaining,QualType DestTypeForComplaining,unsigned DiagIDForComplaining)9737 bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9738                       ExprResult &SrcExpr, bool doFunctionPointerConverion,
9739                    bool complain, const SourceRange& OpRangeForComplaining,
9740                                            QualType DestTypeForComplaining,
9741                                             unsigned DiagIDForComplaining) {
9742   assert(SrcExpr.get()->getType() == Context.OverloadTy);
9743 
9744   OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9745 
9746   DeclAccessPair found;
9747   ExprResult SingleFunctionExpression;
9748   if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9749                            ovl.Expression, /*complain*/ false, &found)) {
9750     if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9751       SrcExpr = ExprError();
9752       return true;
9753     }
9754 
9755     // It is only correct to resolve to an instance method if we're
9756     // resolving a form that's permitted to be a pointer to member.
9757     // Otherwise we'll end up making a bound member expression, which
9758     // is illegal in all the contexts we resolve like this.
9759     if (!ovl.HasFormOfMemberPointer &&
9760         isa<CXXMethodDecl>(fn) &&
9761         cast<CXXMethodDecl>(fn)->isInstance()) {
9762       if (!complain) return false;
9763 
9764       Diag(ovl.Expression->getExprLoc(),
9765            diag::err_bound_member_function)
9766         << 0 << ovl.Expression->getSourceRange();
9767 
9768       // TODO: I believe we only end up here if there's a mix of
9769       // static and non-static candidates (otherwise the expression
9770       // would have 'bound member' type, not 'overload' type).
9771       // Ideally we would note which candidate was chosen and why
9772       // the static candidates were rejected.
9773       SrcExpr = ExprError();
9774       return true;
9775     }
9776 
9777     // Fix the expression to refer to 'fn'.
9778     SingleFunctionExpression =
9779       Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9780 
9781     // If desired, do function-to-pointer decay.
9782     if (doFunctionPointerConverion) {
9783       SingleFunctionExpression =
9784         DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9785       if (SingleFunctionExpression.isInvalid()) {
9786         SrcExpr = ExprError();
9787         return true;
9788       }
9789     }
9790   }
9791 
9792   if (!SingleFunctionExpression.isUsable()) {
9793     if (complain) {
9794       Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9795         << ovl.Expression->getName()
9796         << DestTypeForComplaining
9797         << OpRangeForComplaining
9798         << ovl.Expression->getQualifierLoc().getSourceRange();
9799       NoteAllOverloadCandidates(SrcExpr.get());
9800 
9801       SrcExpr = ExprError();
9802       return true;
9803     }
9804 
9805     return false;
9806   }
9807 
9808   SrcExpr = SingleFunctionExpression;
9809   return true;
9810 }
9811 
9812 /// \brief Add a single candidate to the overload set.
AddOverloadedCallCandidate(Sema & S,DeclAccessPair FoundDecl,TemplateArgumentListInfo * ExplicitTemplateArgs,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool PartialOverloading,bool KnownValid)9813 static void AddOverloadedCallCandidate(Sema &S,
9814                                        DeclAccessPair FoundDecl,
9815                                  TemplateArgumentListInfo *ExplicitTemplateArgs,
9816                                        ArrayRef<Expr *> Args,
9817                                        OverloadCandidateSet &CandidateSet,
9818                                        bool PartialOverloading,
9819                                        bool KnownValid) {
9820   NamedDecl *Callee = FoundDecl.getDecl();
9821   if (isa<UsingShadowDecl>(Callee))
9822     Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9823 
9824   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9825     if (ExplicitTemplateArgs) {
9826       assert(!KnownValid && "Explicit template arguments?");
9827       return;
9828     }
9829     S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9830                            PartialOverloading);
9831     return;
9832   }
9833 
9834   if (FunctionTemplateDecl *FuncTemplate
9835       = dyn_cast<FunctionTemplateDecl>(Callee)) {
9836     S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9837                                    ExplicitTemplateArgs, Args, CandidateSet);
9838     return;
9839   }
9840 
9841   assert(!KnownValid && "unhandled case in overloaded call candidate");
9842 }
9843 
9844 /// \brief Add the overload candidates named by callee and/or found by argument
9845 /// dependent lookup to the given overload set.
AddOverloadedCallCandidates(UnresolvedLookupExpr * ULE,ArrayRef<Expr * > Args,OverloadCandidateSet & CandidateSet,bool PartialOverloading)9846 void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9847                                        ArrayRef<Expr *> Args,
9848                                        OverloadCandidateSet &CandidateSet,
9849                                        bool PartialOverloading) {
9850 
9851 #ifndef NDEBUG
9852   // Verify that ArgumentDependentLookup is consistent with the rules
9853   // in C++0x [basic.lookup.argdep]p3:
9854   //
9855   //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9856   //   and let Y be the lookup set produced by argument dependent
9857   //   lookup (defined as follows). If X contains
9858   //
9859   //     -- a declaration of a class member, or
9860   //
9861   //     -- a block-scope function declaration that is not a
9862   //        using-declaration, or
9863   //
9864   //     -- a declaration that is neither a function or a function
9865   //        template
9866   //
9867   //   then Y is empty.
9868 
9869   if (ULE->requiresADL()) {
9870     for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9871            E = ULE->decls_end(); I != E; ++I) {
9872       assert(!(*I)->getDeclContext()->isRecord());
9873       assert(isa<UsingShadowDecl>(*I) ||
9874              !(*I)->getDeclContext()->isFunctionOrMethod());
9875       assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9876     }
9877   }
9878 #endif
9879 
9880   // It would be nice to avoid this copy.
9881   TemplateArgumentListInfo TABuffer;
9882   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9883   if (ULE->hasExplicitTemplateArgs()) {
9884     ULE->copyTemplateArgumentsInto(TABuffer);
9885     ExplicitTemplateArgs = &TABuffer;
9886   }
9887 
9888   for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9889          E = ULE->decls_end(); I != E; ++I)
9890     AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9891                                CandidateSet, PartialOverloading,
9892                                /*KnownValid*/ true);
9893 
9894   if (ULE->requiresADL())
9895     AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9896                                          ULE->getExprLoc(),
9897                                          Args, ExplicitTemplateArgs,
9898                                          CandidateSet, PartialOverloading);
9899 }
9900 
9901 /// Determine whether a declaration with the specified name could be moved into
9902 /// a different namespace.
canBeDeclaredInNamespace(const DeclarationName & Name)9903 static bool canBeDeclaredInNamespace(const DeclarationName &Name) {
9904   switch (Name.getCXXOverloadedOperator()) {
9905   case OO_New: case OO_Array_New:
9906   case OO_Delete: case OO_Array_Delete:
9907     return false;
9908 
9909   default:
9910     return true;
9911   }
9912 }
9913 
9914 /// Attempt to recover from an ill-formed use of a non-dependent name in a
9915 /// template, where the non-dependent name was declared after the template
9916 /// was defined. This is common in code written for a compilers which do not
9917 /// correctly implement two-stage name lookup.
9918 ///
9919 /// Returns true if a viable candidate was found and a diagnostic was issued.
9920 static bool
DiagnoseTwoPhaseLookup(Sema & SemaRef,SourceLocation FnLoc,const CXXScopeSpec & SS,LookupResult & R,TemplateArgumentListInfo * ExplicitTemplateArgs,ArrayRef<Expr * > Args)9921 DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9922                        const CXXScopeSpec &SS, LookupResult &R,
9923                        TemplateArgumentListInfo *ExplicitTemplateArgs,
9924                        ArrayRef<Expr *> Args) {
9925   if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9926     return false;
9927 
9928   for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9929     if (DC->isTransparentContext())
9930       continue;
9931 
9932     SemaRef.LookupQualifiedName(R, DC);
9933 
9934     if (!R.empty()) {
9935       R.suppressDiagnostics();
9936 
9937       if (isa<CXXRecordDecl>(DC)) {
9938         // Don't diagnose names we find in classes; we get much better
9939         // diagnostics for these from DiagnoseEmptyLookup.
9940         R.clear();
9941         return false;
9942       }
9943 
9944       OverloadCandidateSet Candidates(FnLoc);
9945       for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9946         AddOverloadedCallCandidate(SemaRef, I.getPair(),
9947                                    ExplicitTemplateArgs, Args,
9948                                    Candidates, false, /*KnownValid*/ false);
9949 
9950       OverloadCandidateSet::iterator Best;
9951       if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9952         // No viable functions. Don't bother the user with notes for functions
9953         // which don't work and shouldn't be found anyway.
9954         R.clear();
9955         return false;
9956       }
9957 
9958       // Find the namespaces where ADL would have looked, and suggest
9959       // declaring the function there instead.
9960       Sema::AssociatedNamespaceSet AssociatedNamespaces;
9961       Sema::AssociatedClassSet AssociatedClasses;
9962       SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9963                                                  AssociatedNamespaces,
9964                                                  AssociatedClasses);
9965       Sema::AssociatedNamespaceSet SuggestedNamespaces;
9966       if (canBeDeclaredInNamespace(R.getLookupName())) {
9967         DeclContext *Std = SemaRef.getStdNamespace();
9968         for (Sema::AssociatedNamespaceSet::iterator
9969                it = AssociatedNamespaces.begin(),
9970                end = AssociatedNamespaces.end(); it != end; ++it) {
9971           // Never suggest declaring a function within namespace 'std'.
9972           if (Std && Std->Encloses(*it))
9973             continue;
9974 
9975           // Never suggest declaring a function within a namespace with a
9976           // reserved name, like __gnu_cxx.
9977           NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
9978           if (NS &&
9979               NS->getQualifiedNameAsString().find("__") != std::string::npos)
9980             continue;
9981 
9982           SuggestedNamespaces.insert(*it);
9983         }
9984       }
9985 
9986       SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9987         << R.getLookupName();
9988       if (SuggestedNamespaces.empty()) {
9989         SemaRef.Diag(Best->Function->getLocation(),
9990                      diag::note_not_found_by_two_phase_lookup)
9991           << R.getLookupName() << 0;
9992       } else if (SuggestedNamespaces.size() == 1) {
9993         SemaRef.Diag(Best->Function->getLocation(),
9994                      diag::note_not_found_by_two_phase_lookup)
9995           << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9996       } else {
9997         // FIXME: It would be useful to list the associated namespaces here,
9998         // but the diagnostics infrastructure doesn't provide a way to produce
9999         // a localized representation of a list of items.
10000         SemaRef.Diag(Best->Function->getLocation(),
10001                      diag::note_not_found_by_two_phase_lookup)
10002           << R.getLookupName() << 2;
10003       }
10004 
10005       // Try to recover by calling this function.
10006       return true;
10007     }
10008 
10009     R.clear();
10010   }
10011 
10012   return false;
10013 }
10014 
10015 /// Attempt to recover from ill-formed use of a non-dependent operator in a
10016 /// template, where the non-dependent operator was declared after the template
10017 /// was defined.
10018 ///
10019 /// Returns true if a viable candidate was found and a diagnostic was issued.
10020 static bool
DiagnoseTwoPhaseOperatorLookup(Sema & SemaRef,OverloadedOperatorKind Op,SourceLocation OpLoc,ArrayRef<Expr * > Args)10021 DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
10022                                SourceLocation OpLoc,
10023                                ArrayRef<Expr *> Args) {
10024   DeclarationName OpName =
10025     SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
10026   LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
10027   return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
10028                                 /*ExplicitTemplateArgs=*/0, Args);
10029 }
10030 
10031 namespace {
10032 class BuildRecoveryCallExprRAII {
10033   Sema &SemaRef;
10034 public:
BuildRecoveryCallExprRAII(Sema & S)10035   BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
10036     assert(SemaRef.IsBuildingRecoveryCallExpr == false);
10037     SemaRef.IsBuildingRecoveryCallExpr = true;
10038   }
10039 
~BuildRecoveryCallExprRAII()10040   ~BuildRecoveryCallExprRAII() {
10041     SemaRef.IsBuildingRecoveryCallExpr = false;
10042   }
10043 };
10044 
10045 }
10046 
10047 /// Attempts to recover from a call where no functions were found.
10048 ///
10049 /// Returns true if new candidates were found.
10050 static ExprResult
BuildRecoveryCallExpr(Sema & SemaRef,Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,SourceLocation LParenLoc,llvm::MutableArrayRef<Expr * > Args,SourceLocation RParenLoc,bool EmptyLookup,bool AllowTypoCorrection)10051 BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
10052                       UnresolvedLookupExpr *ULE,
10053                       SourceLocation LParenLoc,
10054                       llvm::MutableArrayRef<Expr *> Args,
10055                       SourceLocation RParenLoc,
10056                       bool EmptyLookup, bool AllowTypoCorrection) {
10057   // Do not try to recover if it is already building a recovery call.
10058   // This stops infinite loops for template instantiations like
10059   //
10060   // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
10061   // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
10062   //
10063   if (SemaRef.IsBuildingRecoveryCallExpr)
10064     return ExprError();
10065   BuildRecoveryCallExprRAII RCE(SemaRef);
10066 
10067   CXXScopeSpec SS;
10068   SS.Adopt(ULE->getQualifierLoc());
10069   SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
10070 
10071   TemplateArgumentListInfo TABuffer;
10072   TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
10073   if (ULE->hasExplicitTemplateArgs()) {
10074     ULE->copyTemplateArgumentsInto(TABuffer);
10075     ExplicitTemplateArgs = &TABuffer;
10076   }
10077 
10078   LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
10079                  Sema::LookupOrdinaryName);
10080   FunctionCallFilterCCC Validator(SemaRef, Args.size(),
10081                                   ExplicitTemplateArgs != 0);
10082   NoTypoCorrectionCCC RejectAll;
10083   CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
10084       (CorrectionCandidateCallback*)&Validator :
10085       (CorrectionCandidateCallback*)&RejectAll;
10086   if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
10087                               ExplicitTemplateArgs, Args) &&
10088       (!EmptyLookup ||
10089        SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
10090                                    ExplicitTemplateArgs, Args)))
10091     return ExprError();
10092 
10093   assert(!R.empty() && "lookup results empty despite recovery");
10094 
10095   // Build an implicit member call if appropriate.  Just drop the
10096   // casts and such from the call, we don't really care.
10097   ExprResult NewFn = ExprError();
10098   if ((*R.begin())->isCXXClassMember())
10099     NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
10100                                                     R, ExplicitTemplateArgs);
10101   else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
10102     NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
10103                                         ExplicitTemplateArgs);
10104   else
10105     NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
10106 
10107   if (NewFn.isInvalid())
10108     return ExprError();
10109 
10110   // This shouldn't cause an infinite loop because we're giving it
10111   // an expression with viable lookup results, which should never
10112   // end up here.
10113   return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
10114                                MultiExprArg(Args.data(), Args.size()),
10115                                RParenLoc);
10116 }
10117 
10118 /// \brief Constructs and populates an OverloadedCandidateSet from
10119 /// the given function.
10120 /// \returns true when an the ExprResult output parameter has been set.
buildOverloadedCallSet(Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,MultiExprArg Args,SourceLocation RParenLoc,OverloadCandidateSet * CandidateSet,ExprResult * Result)10121 bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
10122                                   UnresolvedLookupExpr *ULE,
10123                                   MultiExprArg Args,
10124                                   SourceLocation RParenLoc,
10125                                   OverloadCandidateSet *CandidateSet,
10126                                   ExprResult *Result) {
10127 #ifndef NDEBUG
10128   if (ULE->requiresADL()) {
10129     // To do ADL, we must have found an unqualified name.
10130     assert(!ULE->getQualifier() && "qualified name with ADL");
10131 
10132     // We don't perform ADL for implicit declarations of builtins.
10133     // Verify that this was correctly set up.
10134     FunctionDecl *F;
10135     if (ULE->decls_begin() + 1 == ULE->decls_end() &&
10136         (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
10137         F->getBuiltinID() && F->isImplicit())
10138       llvm_unreachable("performing ADL for builtin");
10139 
10140     // We don't perform ADL in C.
10141     assert(getLangOpts().CPlusPlus && "ADL enabled in C");
10142   }
10143 #endif
10144 
10145   UnbridgedCastsSet UnbridgedCasts;
10146   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts)) {
10147     *Result = ExprError();
10148     return true;
10149   }
10150 
10151   // Add the functions denoted by the callee to the set of candidate
10152   // functions, including those from argument-dependent lookup.
10153   AddOverloadedCallCandidates(ULE, Args, *CandidateSet);
10154 
10155   // If we found nothing, try to recover.
10156   // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
10157   // out if it fails.
10158   if (CandidateSet->empty()) {
10159     // In Microsoft mode, if we are inside a template class member function then
10160     // create a type dependent CallExpr. The goal is to postpone name lookup
10161     // to instantiation time to be able to search into type dependent base
10162     // classes.
10163     if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
10164         (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
10165       CallExpr *CE = new (Context) CallExpr(Context, Fn, Args,
10166                                             Context.DependentTy, VK_RValue,
10167                                             RParenLoc);
10168       CE->setTypeDependent(true);
10169       *Result = Owned(CE);
10170       return true;
10171     }
10172     return false;
10173   }
10174 
10175   UnbridgedCasts.restore();
10176   return false;
10177 }
10178 
10179 /// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
10180 /// the completed call expression. If overload resolution fails, emits
10181 /// diagnostics and returns ExprError()
FinishOverloadedCallExpr(Sema & SemaRef,Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc,Expr * ExecConfig,OverloadCandidateSet * CandidateSet,OverloadCandidateSet::iterator * Best,OverloadingResult OverloadResult,bool AllowTypoCorrection)10182 static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
10183                                            UnresolvedLookupExpr *ULE,
10184                                            SourceLocation LParenLoc,
10185                                            MultiExprArg Args,
10186                                            SourceLocation RParenLoc,
10187                                            Expr *ExecConfig,
10188                                            OverloadCandidateSet *CandidateSet,
10189                                            OverloadCandidateSet::iterator *Best,
10190                                            OverloadingResult OverloadResult,
10191                                            bool AllowTypoCorrection) {
10192   if (CandidateSet->empty())
10193     return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc, Args,
10194                                  RParenLoc, /*EmptyLookup=*/true,
10195                                  AllowTypoCorrection);
10196 
10197   switch (OverloadResult) {
10198   case OR_Success: {
10199     FunctionDecl *FDecl = (*Best)->Function;
10200     SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
10201     if (SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc()))
10202       return ExprError();
10203     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10204     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10205                                          ExecConfig);
10206   }
10207 
10208   case OR_No_Viable_Function: {
10209     // Try to recover by looking for viable functions which the user might
10210     // have meant to call.
10211     ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
10212                                                 Args, RParenLoc,
10213                                                 /*EmptyLookup=*/false,
10214                                                 AllowTypoCorrection);
10215     if (!Recovery.isInvalid())
10216       return Recovery;
10217 
10218     SemaRef.Diag(Fn->getLocStart(),
10219          diag::err_ovl_no_viable_function_in_call)
10220       << ULE->getName() << Fn->getSourceRange();
10221     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10222     break;
10223   }
10224 
10225   case OR_Ambiguous:
10226     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
10227       << ULE->getName() << Fn->getSourceRange();
10228     CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates, Args);
10229     break;
10230 
10231   case OR_Deleted: {
10232     SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
10233       << (*Best)->Function->isDeleted()
10234       << ULE->getName()
10235       << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
10236       << Fn->getSourceRange();
10237     CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates, Args);
10238 
10239     // We emitted an error for the unvailable/deleted function call but keep
10240     // the call in the AST.
10241     FunctionDecl *FDecl = (*Best)->Function;
10242     Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10243     return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, RParenLoc,
10244                                          ExecConfig);
10245   }
10246   }
10247 
10248   // Overload resolution failed.
10249   return ExprError();
10250 }
10251 
10252 /// BuildOverloadedCallExpr - Given the call expression that calls Fn
10253 /// (which eventually refers to the declaration Func) and the call
10254 /// arguments Args/NumArgs, attempt to resolve the function call down
10255 /// to a specific function. If overload resolution succeeds, returns
10256 /// the call expression produced by overload resolution.
10257 /// Otherwise, emits diagnostics and returns ExprError.
BuildOverloadedCallExpr(Scope * S,Expr * Fn,UnresolvedLookupExpr * ULE,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc,Expr * ExecConfig,bool AllowTypoCorrection)10258 ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
10259                                          UnresolvedLookupExpr *ULE,
10260                                          SourceLocation LParenLoc,
10261                                          MultiExprArg Args,
10262                                          SourceLocation RParenLoc,
10263                                          Expr *ExecConfig,
10264                                          bool AllowTypoCorrection) {
10265   OverloadCandidateSet CandidateSet(Fn->getExprLoc());
10266   ExprResult result;
10267 
10268   if (buildOverloadedCallSet(S, Fn, ULE, Args, LParenLoc, &CandidateSet,
10269                              &result))
10270     return result;
10271 
10272   OverloadCandidateSet::iterator Best;
10273   OverloadingResult OverloadResult =
10274       CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
10275 
10276   return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args,
10277                                   RParenLoc, ExecConfig, &CandidateSet,
10278                                   &Best, OverloadResult,
10279                                   AllowTypoCorrection);
10280 }
10281 
IsOverloaded(const UnresolvedSetImpl & Functions)10282 static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
10283   return Functions.size() > 1 ||
10284     (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
10285 }
10286 
10287 /// \brief Create a unary operation that may resolve to an overloaded
10288 /// operator.
10289 ///
10290 /// \param OpLoc The location of the operator itself (e.g., '*').
10291 ///
10292 /// \param OpcIn The UnaryOperator::Opcode that describes this
10293 /// operator.
10294 ///
10295 /// \param Fns The set of non-member functions that will be
10296 /// considered by overload resolution. The caller needs to build this
10297 /// set based on the context using, e.g.,
10298 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10299 /// set should not contain any member functions; those will be added
10300 /// by CreateOverloadedUnaryOp().
10301 ///
10302 /// \param Input The input argument.
10303 ExprResult
CreateOverloadedUnaryOp(SourceLocation OpLoc,unsigned OpcIn,const UnresolvedSetImpl & Fns,Expr * Input)10304 Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
10305                               const UnresolvedSetImpl &Fns,
10306                               Expr *Input) {
10307   UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
10308 
10309   OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
10310   assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
10311   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10312   // TODO: provide better source location info.
10313   DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10314 
10315   if (checkPlaceholderForOverload(*this, Input))
10316     return ExprError();
10317 
10318   Expr *Args[2] = { Input, 0 };
10319   unsigned NumArgs = 1;
10320 
10321   // For post-increment and post-decrement, add the implicit '0' as
10322   // the second argument, so that we know this is a post-increment or
10323   // post-decrement.
10324   if (Opc == UO_PostInc || Opc == UO_PostDec) {
10325     llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
10326     Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
10327                                      SourceLocation());
10328     NumArgs = 2;
10329   }
10330 
10331   ArrayRef<Expr *> ArgsArray(Args, NumArgs);
10332 
10333   if (Input->isTypeDependent()) {
10334     if (Fns.empty())
10335       return Owned(new (Context) UnaryOperator(Input,
10336                                                Opc,
10337                                                Context.DependentTy,
10338                                                VK_RValue, OK_Ordinary,
10339                                                OpLoc));
10340 
10341     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10342     UnresolvedLookupExpr *Fn
10343       = UnresolvedLookupExpr::Create(Context, NamingClass,
10344                                      NestedNameSpecifierLoc(), OpNameInfo,
10345                                      /*ADL*/ true, IsOverloaded(Fns),
10346                                      Fns.begin(), Fns.end());
10347     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, ArgsArray,
10348                                                    Context.DependentTy,
10349                                                    VK_RValue,
10350                                                    OpLoc, false));
10351   }
10352 
10353   // Build an empty overload set.
10354   OverloadCandidateSet CandidateSet(OpLoc);
10355 
10356   // Add the candidates from the given function set.
10357   AddFunctionCandidates(Fns, ArgsArray, CandidateSet, false);
10358 
10359   // Add operator candidates that are member functions.
10360   AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10361 
10362   // Add candidates from ADL.
10363   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true, OpLoc,
10364                                        ArgsArray, /*ExplicitTemplateArgs*/ 0,
10365                                        CandidateSet);
10366 
10367   // Add builtin operator candidates.
10368   AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet);
10369 
10370   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10371 
10372   // Perform overload resolution.
10373   OverloadCandidateSet::iterator Best;
10374   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10375   case OR_Success: {
10376     // We found a built-in operator or an overloaded operator.
10377     FunctionDecl *FnDecl = Best->Function;
10378 
10379     if (FnDecl) {
10380       // We matched an overloaded operator. Build a call to that
10381       // operator.
10382 
10383       // Convert the arguments.
10384       if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10385         CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
10386 
10387         ExprResult InputRes =
10388           PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
10389                                               Best->FoundDecl, Method);
10390         if (InputRes.isInvalid())
10391           return ExprError();
10392         Input = InputRes.take();
10393       } else {
10394         // Convert the arguments.
10395         ExprResult InputInit
10396           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10397                                                       Context,
10398                                                       FnDecl->getParamDecl(0)),
10399                                       SourceLocation(),
10400                                       Input);
10401         if (InputInit.isInvalid())
10402           return ExprError();
10403         Input = InputInit.take();
10404       }
10405 
10406       // Determine the result type.
10407       QualType ResultTy = FnDecl->getResultType();
10408       ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10409       ResultTy = ResultTy.getNonLValueExprType(Context);
10410 
10411       // Build the actual expression node.
10412       ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
10413                                                 HadMultipleCandidates, OpLoc);
10414       if (FnExpr.isInvalid())
10415         return ExprError();
10416 
10417       Args[0] = Input;
10418       CallExpr *TheCall =
10419         new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(), ArgsArray,
10420                                           ResultTy, VK, OpLoc, false);
10421 
10422       if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10423                               FnDecl))
10424         return ExprError();
10425 
10426       return MaybeBindToTemporary(TheCall);
10427     } else {
10428       // We matched a built-in operator. Convert the arguments, then
10429       // break out so that we will build the appropriate built-in
10430       // operator node.
10431       ExprResult InputRes =
10432         PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10433                                   Best->Conversions[0], AA_Passing);
10434       if (InputRes.isInvalid())
10435         return ExprError();
10436       Input = InputRes.take();
10437       break;
10438     }
10439   }
10440 
10441   case OR_No_Viable_Function:
10442     // This is an erroneous use of an operator which can be overloaded by
10443     // a non-member function. Check for non-member operators which were
10444     // defined too late to be candidates.
10445     if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, ArgsArray))
10446       // FIXME: Recover by calling the found function.
10447       return ExprError();
10448 
10449     // No viable function; fall through to handling this as a
10450     // built-in operator, which will produce an error message for us.
10451     break;
10452 
10453   case OR_Ambiguous:
10454     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10455         << UnaryOperator::getOpcodeStr(Opc)
10456         << Input->getType()
10457         << Input->getSourceRange();
10458     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, ArgsArray,
10459                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10460     return ExprError();
10461 
10462   case OR_Deleted:
10463     Diag(OpLoc, diag::err_ovl_deleted_oper)
10464       << Best->Function->isDeleted()
10465       << UnaryOperator::getOpcodeStr(Opc)
10466       << getDeletedOrUnavailableSuffix(Best->Function)
10467       << Input->getSourceRange();
10468     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, ArgsArray,
10469                                 UnaryOperator::getOpcodeStr(Opc), OpLoc);
10470     return ExprError();
10471   }
10472 
10473   // Either we found no viable overloaded operator or we matched a
10474   // built-in operator. In either case, fall through to trying to
10475   // build a built-in operation.
10476   return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10477 }
10478 
10479 /// \brief Create a binary operation that may resolve to an overloaded
10480 /// operator.
10481 ///
10482 /// \param OpLoc The location of the operator itself (e.g., '+').
10483 ///
10484 /// \param OpcIn The BinaryOperator::Opcode that describes this
10485 /// operator.
10486 ///
10487 /// \param Fns The set of non-member functions that will be
10488 /// considered by overload resolution. The caller needs to build this
10489 /// set based on the context using, e.g.,
10490 /// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10491 /// set should not contain any member functions; those will be added
10492 /// by CreateOverloadedBinOp().
10493 ///
10494 /// \param LHS Left-hand argument.
10495 /// \param RHS Right-hand argument.
10496 ExprResult
CreateOverloadedBinOp(SourceLocation OpLoc,unsigned OpcIn,const UnresolvedSetImpl & Fns,Expr * LHS,Expr * RHS)10497 Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10498                             unsigned OpcIn,
10499                             const UnresolvedSetImpl &Fns,
10500                             Expr *LHS, Expr *RHS) {
10501   Expr *Args[2] = { LHS, RHS };
10502   LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10503 
10504   BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10505   OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10506   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10507 
10508   // If either side is type-dependent, create an appropriate dependent
10509   // expression.
10510   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10511     if (Fns.empty()) {
10512       // If there are no functions to store, just build a dependent
10513       // BinaryOperator or CompoundAssignment.
10514       if (Opc <= BO_Assign || Opc > BO_OrAssign)
10515         return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10516                                                   Context.DependentTy,
10517                                                   VK_RValue, OK_Ordinary,
10518                                                   OpLoc,
10519                                                   FPFeatures.fp_contract));
10520 
10521       return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10522                                                         Context.DependentTy,
10523                                                         VK_LValue,
10524                                                         OK_Ordinary,
10525                                                         Context.DependentTy,
10526                                                         Context.DependentTy,
10527                                                         OpLoc,
10528                                                         FPFeatures.fp_contract));
10529     }
10530 
10531     // FIXME: save results of ADL from here?
10532     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10533     // TODO: provide better source location info in DNLoc component.
10534     DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10535     UnresolvedLookupExpr *Fn
10536       = UnresolvedLookupExpr::Create(Context, NamingClass,
10537                                      NestedNameSpecifierLoc(), OpNameInfo,
10538                                      /*ADL*/ true, IsOverloaded(Fns),
10539                                      Fns.begin(), Fns.end());
10540     return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
10541                                                 Context.DependentTy, VK_RValue,
10542                                                 OpLoc, FPFeatures.fp_contract));
10543   }
10544 
10545   // Always do placeholder-like conversions on the RHS.
10546   if (checkPlaceholderForOverload(*this, Args[1]))
10547     return ExprError();
10548 
10549   // Do placeholder-like conversion on the LHS; note that we should
10550   // not get here with a PseudoObject LHS.
10551   assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10552   if (checkPlaceholderForOverload(*this, Args[0]))
10553     return ExprError();
10554 
10555   // If this is the assignment operator, we only perform overload resolution
10556   // if the left-hand side is a class or enumeration type. This is actually
10557   // a hack. The standard requires that we do overload resolution between the
10558   // various built-in candidates, but as DR507 points out, this can lead to
10559   // problems. So we do it this way, which pretty much follows what GCC does.
10560   // Note that we go the traditional code path for compound assignment forms.
10561   if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10562     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10563 
10564   // If this is the .* operator, which is not overloadable, just
10565   // create a built-in binary operator.
10566   if (Opc == BO_PtrMemD)
10567     return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10568 
10569   // Build an empty overload set.
10570   OverloadCandidateSet CandidateSet(OpLoc);
10571 
10572   // Add the candidates from the given function set.
10573   AddFunctionCandidates(Fns, Args, CandidateSet, false);
10574 
10575   // Add operator candidates that are member functions.
10576   AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10577 
10578   // Add candidates from ADL.
10579   AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10580                                        OpLoc, Args,
10581                                        /*ExplicitTemplateArgs*/ 0,
10582                                        CandidateSet);
10583 
10584   // Add builtin operator candidates.
10585   AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet);
10586 
10587   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10588 
10589   // Perform overload resolution.
10590   OverloadCandidateSet::iterator Best;
10591   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10592     case OR_Success: {
10593       // We found a built-in operator or an overloaded operator.
10594       FunctionDecl *FnDecl = Best->Function;
10595 
10596       if (FnDecl) {
10597         // We matched an overloaded operator. Build a call to that
10598         // operator.
10599 
10600         // Convert the arguments.
10601         if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10602           // Best->Access is only meaningful for class members.
10603           CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10604 
10605           ExprResult Arg1 =
10606             PerformCopyInitialization(
10607               InitializedEntity::InitializeParameter(Context,
10608                                                      FnDecl->getParamDecl(0)),
10609               SourceLocation(), Owned(Args[1]));
10610           if (Arg1.isInvalid())
10611             return ExprError();
10612 
10613           ExprResult Arg0 =
10614             PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10615                                                 Best->FoundDecl, Method);
10616           if (Arg0.isInvalid())
10617             return ExprError();
10618           Args[0] = Arg0.takeAs<Expr>();
10619           Args[1] = RHS = Arg1.takeAs<Expr>();
10620         } else {
10621           // Convert the arguments.
10622           ExprResult Arg0 = PerformCopyInitialization(
10623             InitializedEntity::InitializeParameter(Context,
10624                                                    FnDecl->getParamDecl(0)),
10625             SourceLocation(), Owned(Args[0]));
10626           if (Arg0.isInvalid())
10627             return ExprError();
10628 
10629           ExprResult Arg1 =
10630             PerformCopyInitialization(
10631               InitializedEntity::InitializeParameter(Context,
10632                                                      FnDecl->getParamDecl(1)),
10633               SourceLocation(), Owned(Args[1]));
10634           if (Arg1.isInvalid())
10635             return ExprError();
10636           Args[0] = LHS = Arg0.takeAs<Expr>();
10637           Args[1] = RHS = Arg1.takeAs<Expr>();
10638         }
10639 
10640         // Determine the result type.
10641         QualType ResultTy = FnDecl->getResultType();
10642         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10643         ResultTy = ResultTy.getNonLValueExprType(Context);
10644 
10645         // Build the actual expression node.
10646         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10647                                                   Best->FoundDecl,
10648                                                   HadMultipleCandidates, OpLoc);
10649         if (FnExpr.isInvalid())
10650           return ExprError();
10651 
10652         CXXOperatorCallExpr *TheCall =
10653           new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10654                                             Args, ResultTy, VK, OpLoc,
10655                                             FPFeatures.fp_contract);
10656 
10657         if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10658                                 FnDecl))
10659           return ExprError();
10660 
10661         ArrayRef<const Expr *> ArgsArray(Args, 2);
10662         // Cut off the implicit 'this'.
10663         if (isa<CXXMethodDecl>(FnDecl))
10664           ArgsArray = ArgsArray.slice(1);
10665         checkCall(FnDecl, ArgsArray, 0, isa<CXXMethodDecl>(FnDecl), OpLoc,
10666                   TheCall->getSourceRange(), VariadicDoesNotApply);
10667 
10668         return MaybeBindToTemporary(TheCall);
10669       } else {
10670         // We matched a built-in operator. Convert the arguments, then
10671         // break out so that we will build the appropriate built-in
10672         // operator node.
10673         ExprResult ArgsRes0 =
10674           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10675                                     Best->Conversions[0], AA_Passing);
10676         if (ArgsRes0.isInvalid())
10677           return ExprError();
10678         Args[0] = ArgsRes0.take();
10679 
10680         ExprResult ArgsRes1 =
10681           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10682                                     Best->Conversions[1], AA_Passing);
10683         if (ArgsRes1.isInvalid())
10684           return ExprError();
10685         Args[1] = ArgsRes1.take();
10686         break;
10687       }
10688     }
10689 
10690     case OR_No_Viable_Function: {
10691       // C++ [over.match.oper]p9:
10692       //   If the operator is the operator , [...] and there are no
10693       //   viable functions, then the operator is assumed to be the
10694       //   built-in operator and interpreted according to clause 5.
10695       if (Opc == BO_Comma)
10696         break;
10697 
10698       // For class as left operand for assignment or compound assigment
10699       // operator do not fall through to handling in built-in, but report that
10700       // no overloaded assignment operator found
10701       ExprResult Result = ExprError();
10702       if (Args[0]->getType()->isRecordType() &&
10703           Opc >= BO_Assign && Opc <= BO_OrAssign) {
10704         Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10705              << BinaryOperator::getOpcodeStr(Opc)
10706              << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10707       } else {
10708         // This is an erroneous use of an operator which can be overloaded by
10709         // a non-member function. Check for non-member operators which were
10710         // defined too late to be candidates.
10711         if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10712           // FIXME: Recover by calling the found function.
10713           return ExprError();
10714 
10715         // No viable function; try to create a built-in operation, which will
10716         // produce an error. Then, show the non-viable candidates.
10717         Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10718       }
10719       assert(Result.isInvalid() &&
10720              "C++ binary operator overloading is missing candidates!");
10721       if (Result.isInvalid())
10722         CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10723                                     BinaryOperator::getOpcodeStr(Opc), OpLoc);
10724       return Result;
10725     }
10726 
10727     case OR_Ambiguous:
10728       Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10729           << BinaryOperator::getOpcodeStr(Opc)
10730           << Args[0]->getType() << Args[1]->getType()
10731           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10732       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10733                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10734       return ExprError();
10735 
10736     case OR_Deleted:
10737       if (isImplicitlyDeleted(Best->Function)) {
10738         CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10739         Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10740           << Context.getRecordType(Method->getParent())
10741           << getSpecialMember(Method);
10742 
10743         // The user probably meant to call this special member. Just
10744         // explain why it's deleted.
10745         NoteDeletedFunction(Method);
10746         return ExprError();
10747       } else {
10748         Diag(OpLoc, diag::err_ovl_deleted_oper)
10749           << Best->Function->isDeleted()
10750           << BinaryOperator::getOpcodeStr(Opc)
10751           << getDeletedOrUnavailableSuffix(Best->Function)
10752           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10753       }
10754       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10755                                   BinaryOperator::getOpcodeStr(Opc), OpLoc);
10756       return ExprError();
10757   }
10758 
10759   // We matched a built-in operator; build it.
10760   return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10761 }
10762 
10763 ExprResult
CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,SourceLocation RLoc,Expr * Base,Expr * Idx)10764 Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10765                                          SourceLocation RLoc,
10766                                          Expr *Base, Expr *Idx) {
10767   Expr *Args[2] = { Base, Idx };
10768   DeclarationName OpName =
10769       Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10770 
10771   // If either side is type-dependent, create an appropriate dependent
10772   // expression.
10773   if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10774 
10775     CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10776     // CHECKME: no 'operator' keyword?
10777     DeclarationNameInfo OpNameInfo(OpName, LLoc);
10778     OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10779     UnresolvedLookupExpr *Fn
10780       = UnresolvedLookupExpr::Create(Context, NamingClass,
10781                                      NestedNameSpecifierLoc(), OpNameInfo,
10782                                      /*ADL*/ true, /*Overloaded*/ false,
10783                                      UnresolvedSetIterator(),
10784                                      UnresolvedSetIterator());
10785     // Can't add any actual overloads yet
10786 
10787     return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10788                                                    Args,
10789                                                    Context.DependentTy,
10790                                                    VK_RValue,
10791                                                    RLoc, false));
10792   }
10793 
10794   // Handle placeholders on both operands.
10795   if (checkPlaceholderForOverload(*this, Args[0]))
10796     return ExprError();
10797   if (checkPlaceholderForOverload(*this, Args[1]))
10798     return ExprError();
10799 
10800   // Build an empty overload set.
10801   OverloadCandidateSet CandidateSet(LLoc);
10802 
10803   // Subscript can only be overloaded as a member function.
10804 
10805   // Add operator candidates that are member functions.
10806   AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10807 
10808   // Add builtin operator candidates.
10809   AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, CandidateSet);
10810 
10811   bool HadMultipleCandidates = (CandidateSet.size() > 1);
10812 
10813   // Perform overload resolution.
10814   OverloadCandidateSet::iterator Best;
10815   switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10816     case OR_Success: {
10817       // We found a built-in operator or an overloaded operator.
10818       FunctionDecl *FnDecl = Best->Function;
10819 
10820       if (FnDecl) {
10821         // We matched an overloaded operator. Build a call to that
10822         // operator.
10823 
10824         CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10825 
10826         // Convert the arguments.
10827         CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10828         ExprResult Arg0 =
10829           PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10830                                               Best->FoundDecl, Method);
10831         if (Arg0.isInvalid())
10832           return ExprError();
10833         Args[0] = Arg0.take();
10834 
10835         // Convert the arguments.
10836         ExprResult InputInit
10837           = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10838                                                       Context,
10839                                                       FnDecl->getParamDecl(0)),
10840                                       SourceLocation(),
10841                                       Owned(Args[1]));
10842         if (InputInit.isInvalid())
10843           return ExprError();
10844 
10845         Args[1] = InputInit.takeAs<Expr>();
10846 
10847         // Determine the result type
10848         QualType ResultTy = FnDecl->getResultType();
10849         ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10850         ResultTy = ResultTy.getNonLValueExprType(Context);
10851 
10852         // Build the actual expression node.
10853         DeclarationNameInfo OpLocInfo(OpName, LLoc);
10854         OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10855         ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10856                                                   Best->FoundDecl,
10857                                                   HadMultipleCandidates,
10858                                                   OpLocInfo.getLoc(),
10859                                                   OpLocInfo.getInfo());
10860         if (FnExpr.isInvalid())
10861           return ExprError();
10862 
10863         CXXOperatorCallExpr *TheCall =
10864           new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10865                                             FnExpr.take(), Args,
10866                                             ResultTy, VK, RLoc,
10867                                             false);
10868 
10869         if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10870                                 FnDecl))
10871           return ExprError();
10872 
10873         return MaybeBindToTemporary(TheCall);
10874       } else {
10875         // We matched a built-in operator. Convert the arguments, then
10876         // break out so that we will build the appropriate built-in
10877         // operator node.
10878         ExprResult ArgsRes0 =
10879           PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10880                                     Best->Conversions[0], AA_Passing);
10881         if (ArgsRes0.isInvalid())
10882           return ExprError();
10883         Args[0] = ArgsRes0.take();
10884 
10885         ExprResult ArgsRes1 =
10886           PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10887                                     Best->Conversions[1], AA_Passing);
10888         if (ArgsRes1.isInvalid())
10889           return ExprError();
10890         Args[1] = ArgsRes1.take();
10891 
10892         break;
10893       }
10894     }
10895 
10896     case OR_No_Viable_Function: {
10897       if (CandidateSet.empty())
10898         Diag(LLoc, diag::err_ovl_no_oper)
10899           << Args[0]->getType() << /*subscript*/ 0
10900           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10901       else
10902         Diag(LLoc, diag::err_ovl_no_viable_subscript)
10903           << Args[0]->getType()
10904           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10905       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10906                                   "[]", LLoc);
10907       return ExprError();
10908     }
10909 
10910     case OR_Ambiguous:
10911       Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10912           << "[]"
10913           << Args[0]->getType() << Args[1]->getType()
10914           << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10915       CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10916                                   "[]", LLoc);
10917       return ExprError();
10918 
10919     case OR_Deleted:
10920       Diag(LLoc, diag::err_ovl_deleted_oper)
10921         << Best->Function->isDeleted() << "[]"
10922         << getDeletedOrUnavailableSuffix(Best->Function)
10923         << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10924       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10925                                   "[]", LLoc);
10926       return ExprError();
10927     }
10928 
10929   // We matched a built-in operator; build it.
10930   return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10931 }
10932 
10933 /// BuildCallToMemberFunction - Build a call to a member
10934 /// function. MemExpr is the expression that refers to the member
10935 /// function (and includes the object parameter), Args/NumArgs are the
10936 /// arguments to the function call (not including the object
10937 /// parameter). The caller needs to validate that the member
10938 /// expression refers to a non-static member function or an overloaded
10939 /// member function.
10940 ExprResult
BuildCallToMemberFunction(Scope * S,Expr * MemExprE,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc)10941 Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10942                                 SourceLocation LParenLoc,
10943                                 MultiExprArg Args,
10944                                 SourceLocation RParenLoc) {
10945   assert(MemExprE->getType() == Context.BoundMemberTy ||
10946          MemExprE->getType() == Context.OverloadTy);
10947 
10948   // Dig out the member expression. This holds both the object
10949   // argument and the member function we're referring to.
10950   Expr *NakedMemExpr = MemExprE->IgnoreParens();
10951 
10952   // Determine whether this is a call to a pointer-to-member function.
10953   if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10954     assert(op->getType() == Context.BoundMemberTy);
10955     assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10956 
10957     QualType fnType =
10958       op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10959 
10960     const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10961     QualType resultType = proto->getCallResultType(Context);
10962     ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10963 
10964     // Check that the object type isn't more qualified than the
10965     // member function we're calling.
10966     Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10967 
10968     QualType objectType = op->getLHS()->getType();
10969     if (op->getOpcode() == BO_PtrMemI)
10970       objectType = objectType->castAs<PointerType>()->getPointeeType();
10971     Qualifiers objectQuals = objectType.getQualifiers();
10972 
10973     Qualifiers difference = objectQuals - funcQuals;
10974     difference.removeObjCGCAttr();
10975     difference.removeAddressSpace();
10976     if (difference) {
10977       std::string qualsString = difference.getAsString();
10978       Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10979         << fnType.getUnqualifiedType()
10980         << qualsString
10981         << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10982     }
10983 
10984     CXXMemberCallExpr *call
10985       = new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
10986                                         resultType, valueKind, RParenLoc);
10987 
10988     if (CheckCallReturnType(proto->getResultType(),
10989                             op->getRHS()->getLocStart(),
10990                             call, 0))
10991       return ExprError();
10992 
10993     if (ConvertArgumentsForCall(call, op, 0, proto, Args, RParenLoc))
10994       return ExprError();
10995 
10996     if (CheckOtherCall(call, proto))
10997       return ExprError();
10998 
10999     return MaybeBindToTemporary(call);
11000   }
11001 
11002   UnbridgedCastsSet UnbridgedCasts;
11003   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
11004     return ExprError();
11005 
11006   MemberExpr *MemExpr;
11007   CXXMethodDecl *Method = 0;
11008   DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
11009   NestedNameSpecifier *Qualifier = 0;
11010   if (isa<MemberExpr>(NakedMemExpr)) {
11011     MemExpr = cast<MemberExpr>(NakedMemExpr);
11012     Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
11013     FoundDecl = MemExpr->getFoundDecl();
11014     Qualifier = MemExpr->getQualifier();
11015     UnbridgedCasts.restore();
11016   } else {
11017     UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
11018     Qualifier = UnresExpr->getQualifier();
11019 
11020     QualType ObjectType = UnresExpr->getBaseType();
11021     Expr::Classification ObjectClassification
11022       = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
11023                             : UnresExpr->getBase()->Classify(Context);
11024 
11025     // Add overload candidates
11026     OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
11027 
11028     // FIXME: avoid copy.
11029     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11030     if (UnresExpr->hasExplicitTemplateArgs()) {
11031       UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11032       TemplateArgs = &TemplateArgsBuffer;
11033     }
11034 
11035     for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
11036            E = UnresExpr->decls_end(); I != E; ++I) {
11037 
11038       NamedDecl *Func = *I;
11039       CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
11040       if (isa<UsingShadowDecl>(Func))
11041         Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
11042 
11043 
11044       // Microsoft supports direct constructor calls.
11045       if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
11046         AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
11047                              Args, CandidateSet);
11048       } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
11049         // If explicit template arguments were provided, we can't call a
11050         // non-template member function.
11051         if (TemplateArgs)
11052           continue;
11053 
11054         AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
11055                            ObjectClassification, Args, CandidateSet,
11056                            /*SuppressUserConversions=*/false);
11057       } else {
11058         AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
11059                                    I.getPair(), ActingDC, TemplateArgs,
11060                                    ObjectType,  ObjectClassification,
11061                                    Args, CandidateSet,
11062                                    /*SuppressUsedConversions=*/false);
11063       }
11064     }
11065 
11066     DeclarationName DeclName = UnresExpr->getMemberName();
11067 
11068     UnbridgedCasts.restore();
11069 
11070     OverloadCandidateSet::iterator Best;
11071     switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
11072                                             Best)) {
11073     case OR_Success:
11074       Method = cast<CXXMethodDecl>(Best->Function);
11075       FoundDecl = Best->FoundDecl;
11076       CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
11077       if (DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc()))
11078         return ExprError();
11079       // If FoundDecl is different from Method (such as if one is a template
11080       // and the other a specialization), make sure DiagnoseUseOfDecl is
11081       // called on both.
11082       // FIXME: This would be more comprehensively addressed by modifying
11083       // DiagnoseUseOfDecl to accept both the FoundDecl and the decl
11084       // being used.
11085       if (Method != FoundDecl.getDecl() &&
11086                       DiagnoseUseOfDecl(Method, UnresExpr->getNameLoc()))
11087         return ExprError();
11088       break;
11089 
11090     case OR_No_Viable_Function:
11091       Diag(UnresExpr->getMemberLoc(),
11092            diag::err_ovl_no_viable_member_function_in_call)
11093         << DeclName << MemExprE->getSourceRange();
11094       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11095       // FIXME: Leaking incoming expressions!
11096       return ExprError();
11097 
11098     case OR_Ambiguous:
11099       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
11100         << DeclName << MemExprE->getSourceRange();
11101       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11102       // FIXME: Leaking incoming expressions!
11103       return ExprError();
11104 
11105     case OR_Deleted:
11106       Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
11107         << Best->Function->isDeleted()
11108         << DeclName
11109         << getDeletedOrUnavailableSuffix(Best->Function)
11110         << MemExprE->getSourceRange();
11111       CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11112       // FIXME: Leaking incoming expressions!
11113       return ExprError();
11114     }
11115 
11116     MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
11117 
11118     // If overload resolution picked a static member, build a
11119     // non-member call based on that function.
11120     if (Method->isStatic()) {
11121       return BuildResolvedCallExpr(MemExprE, Method, LParenLoc, Args,
11122                                    RParenLoc);
11123     }
11124 
11125     MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
11126   }
11127 
11128   QualType ResultType = Method->getResultType();
11129   ExprValueKind VK = Expr::getValueKindForType(ResultType);
11130   ResultType = ResultType.getNonLValueExprType(Context);
11131 
11132   assert(Method && "Member call to something that isn't a method?");
11133   CXXMemberCallExpr *TheCall =
11134     new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
11135                                     ResultType, VK, RParenLoc);
11136 
11137   // Check for a valid return type.
11138   if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
11139                           TheCall, Method))
11140     return ExprError();
11141 
11142   // Convert the object argument (for a non-static member function call).
11143   // We only need to do this if there was actually an overload; otherwise
11144   // it was done at lookup.
11145   if (!Method->isStatic()) {
11146     ExprResult ObjectArg =
11147       PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
11148                                           FoundDecl, Method);
11149     if (ObjectArg.isInvalid())
11150       return ExprError();
11151     MemExpr->setBase(ObjectArg.take());
11152   }
11153 
11154   // Convert the rest of the arguments
11155   const FunctionProtoType *Proto =
11156     Method->getType()->getAs<FunctionProtoType>();
11157   if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args,
11158                               RParenLoc))
11159     return ExprError();
11160 
11161   DiagnoseSentinelCalls(Method, LParenLoc, Args);
11162 
11163   if (CheckFunctionCall(Method, TheCall, Proto))
11164     return ExprError();
11165 
11166   if ((isa<CXXConstructorDecl>(CurContext) ||
11167        isa<CXXDestructorDecl>(CurContext)) &&
11168       TheCall->getMethodDecl()->isPure()) {
11169     const CXXMethodDecl *MD = TheCall->getMethodDecl();
11170 
11171     if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
11172       Diag(MemExpr->getLocStart(),
11173            diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
11174         << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
11175         << MD->getParent()->getDeclName();
11176 
11177       Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
11178     }
11179   }
11180   return MaybeBindToTemporary(TheCall);
11181 }
11182 
11183 /// BuildCallToObjectOfClassType - Build a call to an object of class
11184 /// type (C++ [over.call.object]), which can end up invoking an
11185 /// overloaded function call operator (@c operator()) or performing a
11186 /// user-defined conversion on the object argument.
11187 ExprResult
BuildCallToObjectOfClassType(Scope * S,Expr * Obj,SourceLocation LParenLoc,MultiExprArg Args,SourceLocation RParenLoc)11188 Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
11189                                    SourceLocation LParenLoc,
11190                                    MultiExprArg Args,
11191                                    SourceLocation RParenLoc) {
11192   if (checkPlaceholderForOverload(*this, Obj))
11193     return ExprError();
11194   ExprResult Object = Owned(Obj);
11195 
11196   UnbridgedCastsSet UnbridgedCasts;
11197   if (checkArgPlaceholdersForOverload(*this, Args, UnbridgedCasts))
11198     return ExprError();
11199 
11200   assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
11201   const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
11202 
11203   // C++ [over.call.object]p1:
11204   //  If the primary-expression E in the function call syntax
11205   //  evaluates to a class object of type "cv T", then the set of
11206   //  candidate functions includes at least the function call
11207   //  operators of T. The function call operators of T are obtained by
11208   //  ordinary lookup of the name operator() in the context of
11209   //  (E).operator().
11210   OverloadCandidateSet CandidateSet(LParenLoc);
11211   DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
11212 
11213   if (RequireCompleteType(LParenLoc, Object.get()->getType(),
11214                           diag::err_incomplete_object_call, Object.get()))
11215     return true;
11216 
11217   LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
11218   LookupQualifiedName(R, Record->getDecl());
11219   R.suppressDiagnostics();
11220 
11221   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11222        Oper != OperEnd; ++Oper) {
11223     AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
11224                        Object.get()->Classify(Context),
11225                        Args, CandidateSet,
11226                        /*SuppressUserConversions=*/ false);
11227   }
11228 
11229   // C++ [over.call.object]p2:
11230   //   In addition, for each (non-explicit in C++0x) conversion function
11231   //   declared in T of the form
11232   //
11233   //        operator conversion-type-id () cv-qualifier;
11234   //
11235   //   where cv-qualifier is the same cv-qualification as, or a
11236   //   greater cv-qualification than, cv, and where conversion-type-id
11237   //   denotes the type "pointer to function of (P1,...,Pn) returning
11238   //   R", or the type "reference to pointer to function of
11239   //   (P1,...,Pn) returning R", or the type "reference to function
11240   //   of (P1,...,Pn) returning R", a surrogate call function [...]
11241   //   is also considered as a candidate function. Similarly,
11242   //   surrogate call functions are added to the set of candidate
11243   //   functions for each conversion function declared in an
11244   //   accessible base class provided the function is not hidden
11245   //   within T by another intervening declaration.
11246   std::pair<CXXRecordDecl::conversion_iterator,
11247             CXXRecordDecl::conversion_iterator> Conversions
11248     = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
11249   for (CXXRecordDecl::conversion_iterator
11250          I = Conversions.first, E = Conversions.second; I != E; ++I) {
11251     NamedDecl *D = *I;
11252     CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
11253     if (isa<UsingShadowDecl>(D))
11254       D = cast<UsingShadowDecl>(D)->getTargetDecl();
11255 
11256     // Skip over templated conversion functions; they aren't
11257     // surrogates.
11258     if (isa<FunctionTemplateDecl>(D))
11259       continue;
11260 
11261     CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
11262     if (!Conv->isExplicit()) {
11263       // Strip the reference type (if any) and then the pointer type (if
11264       // any) to get down to what might be a function type.
11265       QualType ConvType = Conv->getConversionType().getNonReferenceType();
11266       if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
11267         ConvType = ConvPtrType->getPointeeType();
11268 
11269       if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
11270       {
11271         AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
11272                               Object.get(), Args, CandidateSet);
11273       }
11274     }
11275   }
11276 
11277   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11278 
11279   // Perform overload resolution.
11280   OverloadCandidateSet::iterator Best;
11281   switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
11282                              Best)) {
11283   case OR_Success:
11284     // Overload resolution succeeded; we'll build the appropriate call
11285     // below.
11286     break;
11287 
11288   case OR_No_Viable_Function:
11289     if (CandidateSet.empty())
11290       Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
11291         << Object.get()->getType() << /*call*/ 1
11292         << Object.get()->getSourceRange();
11293     else
11294       Diag(Object.get()->getLocStart(),
11295            diag::err_ovl_no_viable_object_call)
11296         << Object.get()->getType() << Object.get()->getSourceRange();
11297     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11298     break;
11299 
11300   case OR_Ambiguous:
11301     Diag(Object.get()->getLocStart(),
11302          diag::err_ovl_ambiguous_object_call)
11303       << Object.get()->getType() << Object.get()->getSourceRange();
11304     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11305     break;
11306 
11307   case OR_Deleted:
11308     Diag(Object.get()->getLocStart(),
11309          diag::err_ovl_deleted_object_call)
11310       << Best->Function->isDeleted()
11311       << Object.get()->getType()
11312       << getDeletedOrUnavailableSuffix(Best->Function)
11313       << Object.get()->getSourceRange();
11314     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11315     break;
11316   }
11317 
11318   if (Best == CandidateSet.end())
11319     return true;
11320 
11321   UnbridgedCasts.restore();
11322 
11323   if (Best->Function == 0) {
11324     // Since there is no function declaration, this is one of the
11325     // surrogate candidates. Dig out the conversion function.
11326     CXXConversionDecl *Conv
11327       = cast<CXXConversionDecl>(
11328                          Best->Conversions[0].UserDefined.ConversionFunction);
11329 
11330     CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11331     if (DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc))
11332       return ExprError();
11333     assert(Conv == Best->FoundDecl.getDecl() &&
11334              "Found Decl & conversion-to-functionptr should be same, right?!");
11335     // We selected one of the surrogate functions that converts the
11336     // object parameter to a function pointer. Perform the conversion
11337     // on the object argument, then let ActOnCallExpr finish the job.
11338 
11339     // Create an implicit member expr to refer to the conversion operator.
11340     // and then call it.
11341     ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
11342                                              Conv, HadMultipleCandidates);
11343     if (Call.isInvalid())
11344       return ExprError();
11345     // Record usage of conversion in an implicit cast.
11346     Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
11347                                           CK_UserDefinedConversion,
11348                                           Call.get(), 0, VK_RValue));
11349 
11350     return ActOnCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc);
11351   }
11352 
11353   CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11354 
11355   // We found an overloaded operator(). Build a CXXOperatorCallExpr
11356   // that calls this method, using Object for the implicit object
11357   // parameter and passing along the remaining arguments.
11358   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11359 
11360   // An error diagnostic has already been printed when parsing the declaration.
11361   if (Method->isInvalidDecl())
11362     return ExprError();
11363 
11364   const FunctionProtoType *Proto =
11365     Method->getType()->getAs<FunctionProtoType>();
11366 
11367   unsigned NumArgsInProto = Proto->getNumArgs();
11368   unsigned NumArgsToCheck = Args.size();
11369 
11370   // Build the full argument list for the method call (the
11371   // implicit object parameter is placed at the beginning of the
11372   // list).
11373   Expr **MethodArgs;
11374   if (Args.size() < NumArgsInProto) {
11375     NumArgsToCheck = NumArgsInProto;
11376     MethodArgs = new Expr*[NumArgsInProto + 1];
11377   } else {
11378     MethodArgs = new Expr*[Args.size() + 1];
11379   }
11380   MethodArgs[0] = Object.get();
11381   for (unsigned ArgIdx = 0, e = Args.size(); ArgIdx != e; ++ArgIdx)
11382     MethodArgs[ArgIdx + 1] = Args[ArgIdx];
11383 
11384   DeclarationNameInfo OpLocInfo(
11385                Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
11386   OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
11387   ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11388                                            HadMultipleCandidates,
11389                                            OpLocInfo.getLoc(),
11390                                            OpLocInfo.getInfo());
11391   if (NewFn.isInvalid())
11392     return true;
11393 
11394   // Once we've built TheCall, all of the expressions are properly
11395   // owned.
11396   QualType ResultTy = Method->getResultType();
11397   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11398   ResultTy = ResultTy.getNonLValueExprType(Context);
11399 
11400   CXXOperatorCallExpr *TheCall =
11401     new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
11402                                       llvm::makeArrayRef(MethodArgs, Args.size()+1),
11403                                       ResultTy, VK, RParenLoc, false);
11404   delete [] MethodArgs;
11405 
11406   if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
11407                           Method))
11408     return true;
11409 
11410   // We may have default arguments. If so, we need to allocate more
11411   // slots in the call for them.
11412   if (Args.size() < NumArgsInProto)
11413     TheCall->setNumArgs(Context, NumArgsInProto + 1);
11414   else if (Args.size() > NumArgsInProto)
11415     NumArgsToCheck = NumArgsInProto;
11416 
11417   bool IsError = false;
11418 
11419   // Initialize the implicit object parameter.
11420   ExprResult ObjRes =
11421     PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11422                                         Best->FoundDecl, Method);
11423   if (ObjRes.isInvalid())
11424     IsError = true;
11425   else
11426     Object = ObjRes;
11427   TheCall->setArg(0, Object.take());
11428 
11429   // Check the argument types.
11430   for (unsigned i = 0; i != NumArgsToCheck; i++) {
11431     Expr *Arg;
11432     if (i < Args.size()) {
11433       Arg = Args[i];
11434 
11435       // Pass the argument.
11436 
11437       ExprResult InputInit
11438         = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11439                                                     Context,
11440                                                     Method->getParamDecl(i)),
11441                                     SourceLocation(), Arg);
11442 
11443       IsError |= InputInit.isInvalid();
11444       Arg = InputInit.takeAs<Expr>();
11445     } else {
11446       ExprResult DefArg
11447         = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11448       if (DefArg.isInvalid()) {
11449         IsError = true;
11450         break;
11451       }
11452 
11453       Arg = DefArg.takeAs<Expr>();
11454     }
11455 
11456     TheCall->setArg(i + 1, Arg);
11457   }
11458 
11459   // If this is a variadic call, handle args passed through "...".
11460   if (Proto->isVariadic()) {
11461     // Promote the arguments (C99 6.5.2.2p7).
11462     for (unsigned i = NumArgsInProto, e = Args.size(); i < e; i++) {
11463       ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11464       IsError |= Arg.isInvalid();
11465       TheCall->setArg(i + 1, Arg.take());
11466     }
11467   }
11468 
11469   if (IsError) return true;
11470 
11471   DiagnoseSentinelCalls(Method, LParenLoc, Args);
11472 
11473   if (CheckFunctionCall(Method, TheCall, Proto))
11474     return true;
11475 
11476   return MaybeBindToTemporary(TheCall);
11477 }
11478 
11479 /// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11480 ///  (if one exists), where @c Base is an expression of class type and
11481 /// @c Member is the name of the member we're trying to find.
11482 ExprResult
BuildOverloadedArrowExpr(Scope * S,Expr * Base,SourceLocation OpLoc,bool * NoArrowOperatorFound)11483 Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc,
11484                                bool *NoArrowOperatorFound) {
11485   assert(Base->getType()->isRecordType() &&
11486          "left-hand side must have class type");
11487 
11488   if (checkPlaceholderForOverload(*this, Base))
11489     return ExprError();
11490 
11491   SourceLocation Loc = Base->getExprLoc();
11492 
11493   // C++ [over.ref]p1:
11494   //
11495   //   [...] An expression x->m is interpreted as (x.operator->())->m
11496   //   for a class object x of type T if T::operator->() exists and if
11497   //   the operator is selected as the best match function by the
11498   //   overload resolution mechanism (13.3).
11499   DeclarationName OpName =
11500     Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11501   OverloadCandidateSet CandidateSet(Loc);
11502   const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11503 
11504   if (RequireCompleteType(Loc, Base->getType(),
11505                           diag::err_typecheck_incomplete_tag, Base))
11506     return ExprError();
11507 
11508   LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11509   LookupQualifiedName(R, BaseRecord->getDecl());
11510   R.suppressDiagnostics();
11511 
11512   for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11513        Oper != OperEnd; ++Oper) {
11514     AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11515                        None, CandidateSet, /*SuppressUserConversions=*/false);
11516   }
11517 
11518   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11519 
11520   // Perform overload resolution.
11521   OverloadCandidateSet::iterator Best;
11522   switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11523   case OR_Success:
11524     // Overload resolution succeeded; we'll build the call below.
11525     break;
11526 
11527   case OR_No_Viable_Function:
11528     if (CandidateSet.empty()) {
11529       QualType BaseType = Base->getType();
11530       if (NoArrowOperatorFound) {
11531         // Report this specific error to the caller instead of emitting a
11532         // diagnostic, as requested.
11533         *NoArrowOperatorFound = true;
11534         return ExprError();
11535       }
11536       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11537         << BaseType << Base->getSourceRange();
11538       if (BaseType->isRecordType() && !BaseType->isPointerType()) {
11539         Diag(OpLoc, diag::note_typecheck_member_reference_suggestion)
11540           << FixItHint::CreateReplacement(OpLoc, ".");
11541       }
11542     } else
11543       Diag(OpLoc, diag::err_ovl_no_viable_oper)
11544         << "operator->" << Base->getSourceRange();
11545     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11546     return ExprError();
11547 
11548   case OR_Ambiguous:
11549     Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11550       << "->" << Base->getType() << Base->getSourceRange();
11551     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11552     return ExprError();
11553 
11554   case OR_Deleted:
11555     Diag(OpLoc,  diag::err_ovl_deleted_oper)
11556       << Best->Function->isDeleted()
11557       << "->"
11558       << getDeletedOrUnavailableSuffix(Best->Function)
11559       << Base->getSourceRange();
11560     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11561     return ExprError();
11562   }
11563 
11564   CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11565 
11566   // Convert the object parameter.
11567   CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11568   ExprResult BaseResult =
11569     PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11570                                         Best->FoundDecl, Method);
11571   if (BaseResult.isInvalid())
11572     return ExprError();
11573   Base = BaseResult.take();
11574 
11575   // Build the operator call.
11576   ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11577                                             HadMultipleCandidates, OpLoc);
11578   if (FnExpr.isInvalid())
11579     return ExprError();
11580 
11581   QualType ResultTy = Method->getResultType();
11582   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11583   ResultTy = ResultTy.getNonLValueExprType(Context);
11584   CXXOperatorCallExpr *TheCall =
11585     new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11586                                       Base, ResultTy, VK, OpLoc, false);
11587 
11588   if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11589                           Method))
11590           return ExprError();
11591 
11592   return MaybeBindToTemporary(TheCall);
11593 }
11594 
11595 /// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11596 /// a literal operator described by the provided lookup results.
BuildLiteralOperatorCall(LookupResult & R,DeclarationNameInfo & SuffixInfo,ArrayRef<Expr * > Args,SourceLocation LitEndLoc,TemplateArgumentListInfo * TemplateArgs)11597 ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11598                                           DeclarationNameInfo &SuffixInfo,
11599                                           ArrayRef<Expr*> Args,
11600                                           SourceLocation LitEndLoc,
11601                                        TemplateArgumentListInfo *TemplateArgs) {
11602   SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11603 
11604   OverloadCandidateSet CandidateSet(UDSuffixLoc);
11605   AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11606                         TemplateArgs);
11607 
11608   bool HadMultipleCandidates = (CandidateSet.size() > 1);
11609 
11610   // Perform overload resolution. This will usually be trivial, but might need
11611   // to perform substitutions for a literal operator template.
11612   OverloadCandidateSet::iterator Best;
11613   switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11614   case OR_Success:
11615   case OR_Deleted:
11616     break;
11617 
11618   case OR_No_Viable_Function:
11619     Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11620       << R.getLookupName();
11621     CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11622     return ExprError();
11623 
11624   case OR_Ambiguous:
11625     Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11626     CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11627     return ExprError();
11628   }
11629 
11630   FunctionDecl *FD = Best->Function;
11631   ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
11632                                         HadMultipleCandidates,
11633                                         SuffixInfo.getLoc(),
11634                                         SuffixInfo.getInfo());
11635   if (Fn.isInvalid())
11636     return true;
11637 
11638   // Check the argument types. This should almost always be a no-op, except
11639   // that array-to-pointer decay is applied to string literals.
11640   Expr *ConvArgs[2];
11641   for (unsigned ArgIdx = 0, N = Args.size(); ArgIdx != N; ++ArgIdx) {
11642     ExprResult InputInit = PerformCopyInitialization(
11643       InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11644       SourceLocation(), Args[ArgIdx]);
11645     if (InputInit.isInvalid())
11646       return true;
11647     ConvArgs[ArgIdx] = InputInit.take();
11648   }
11649 
11650   QualType ResultTy = FD->getResultType();
11651   ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11652   ResultTy = ResultTy.getNonLValueExprType(Context);
11653 
11654   UserDefinedLiteral *UDL =
11655     new (Context) UserDefinedLiteral(Context, Fn.take(),
11656                                      llvm::makeArrayRef(ConvArgs, Args.size()),
11657                                      ResultTy, VK, LitEndLoc, UDSuffixLoc);
11658 
11659   if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11660     return ExprError();
11661 
11662   if (CheckFunctionCall(FD, UDL, NULL))
11663     return ExprError();
11664 
11665   return MaybeBindToTemporary(UDL);
11666 }
11667 
11668 /// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11669 /// given LookupResult is non-empty, it is assumed to describe a member which
11670 /// will be invoked. Otherwise, the function will be found via argument
11671 /// dependent lookup.
11672 /// CallExpr is set to a valid expression and FRS_Success returned on success,
11673 /// otherwise CallExpr is set to ExprError() and some non-success value
11674 /// is returned.
11675 Sema::ForRangeStatus
BuildForRangeBeginEndCall(Scope * S,SourceLocation Loc,SourceLocation RangeLoc,VarDecl * Decl,BeginEndFunction BEF,const DeclarationNameInfo & NameInfo,LookupResult & MemberLookup,OverloadCandidateSet * CandidateSet,Expr * Range,ExprResult * CallExpr)11676 Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11677                                 SourceLocation RangeLoc, VarDecl *Decl,
11678                                 BeginEndFunction BEF,
11679                                 const DeclarationNameInfo &NameInfo,
11680                                 LookupResult &MemberLookup,
11681                                 OverloadCandidateSet *CandidateSet,
11682                                 Expr *Range, ExprResult *CallExpr) {
11683   CandidateSet->clear();
11684   if (!MemberLookup.empty()) {
11685     ExprResult MemberRef =
11686         BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11687                                  /*IsPtr=*/false, CXXScopeSpec(),
11688                                  /*TemplateKWLoc=*/SourceLocation(),
11689                                  /*FirstQualifierInScope=*/0,
11690                                  MemberLookup,
11691                                  /*TemplateArgs=*/0);
11692     if (MemberRef.isInvalid()) {
11693       *CallExpr = ExprError();
11694       Diag(Range->getLocStart(), diag::note_in_for_range)
11695           << RangeLoc << BEF << Range->getType();
11696       return FRS_DiagnosticIssued;
11697     }
11698     *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, None, Loc, 0);
11699     if (CallExpr->isInvalid()) {
11700       *CallExpr = ExprError();
11701       Diag(Range->getLocStart(), diag::note_in_for_range)
11702           << RangeLoc << BEF << Range->getType();
11703       return FRS_DiagnosticIssued;
11704     }
11705   } else {
11706     UnresolvedSet<0> FoundNames;
11707     UnresolvedLookupExpr *Fn =
11708       UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11709                                    NestedNameSpecifierLoc(), NameInfo,
11710                                    /*NeedsADL=*/true, /*Overloaded=*/false,
11711                                    FoundNames.begin(), FoundNames.end());
11712 
11713     bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, Range, Loc,
11714                                                     CandidateSet, CallExpr);
11715     if (CandidateSet->empty() || CandidateSetError) {
11716       *CallExpr = ExprError();
11717       return FRS_NoViableFunction;
11718     }
11719     OverloadCandidateSet::iterator Best;
11720     OverloadingResult OverloadResult =
11721         CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11722 
11723     if (OverloadResult == OR_No_Viable_Function) {
11724       *CallExpr = ExprError();
11725       return FRS_NoViableFunction;
11726     }
11727     *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, Range,
11728                                          Loc, 0, CandidateSet, &Best,
11729                                          OverloadResult,
11730                                          /*AllowTypoCorrection=*/false);
11731     if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11732       *CallExpr = ExprError();
11733       Diag(Range->getLocStart(), diag::note_in_for_range)
11734           << RangeLoc << BEF << Range->getType();
11735       return FRS_DiagnosticIssued;
11736     }
11737   }
11738   return FRS_Success;
11739 }
11740 
11741 
11742 /// FixOverloadedFunctionReference - E is an expression that refers to
11743 /// a C++ overloaded function (possibly with some parentheses and
11744 /// perhaps a '&' around it). We have resolved the overloaded function
11745 /// to the function declaration Fn, so patch up the expression E to
11746 /// refer (possibly indirectly) to Fn. Returns the new expr.
FixOverloadedFunctionReference(Expr * E,DeclAccessPair Found,FunctionDecl * Fn)11747 Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11748                                            FunctionDecl *Fn) {
11749   if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11750     Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11751                                                    Found, Fn);
11752     if (SubExpr == PE->getSubExpr())
11753       return PE;
11754 
11755     return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11756   }
11757 
11758   if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11759     Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11760                                                    Found, Fn);
11761     assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11762                                SubExpr->getType()) &&
11763            "Implicit cast type cannot be determined from overload");
11764     assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11765     if (SubExpr == ICE->getSubExpr())
11766       return ICE;
11767 
11768     return ImplicitCastExpr::Create(Context, ICE->getType(),
11769                                     ICE->getCastKind(),
11770                                     SubExpr, 0,
11771                                     ICE->getValueKind());
11772   }
11773 
11774   if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11775     assert(UnOp->getOpcode() == UO_AddrOf &&
11776            "Can only take the address of an overloaded function");
11777     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11778       if (Method->isStatic()) {
11779         // Do nothing: static member functions aren't any different
11780         // from non-member functions.
11781       } else {
11782         // Fix the sub expression, which really has to be an
11783         // UnresolvedLookupExpr holding an overloaded member function
11784         // or template.
11785         Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11786                                                        Found, Fn);
11787         if (SubExpr == UnOp->getSubExpr())
11788           return UnOp;
11789 
11790         assert(isa<DeclRefExpr>(SubExpr)
11791                && "fixed to something other than a decl ref");
11792         assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11793                && "fixed to a member ref with no nested name qualifier");
11794 
11795         // We have taken the address of a pointer to member
11796         // function. Perform the computation here so that we get the
11797         // appropriate pointer to member type.
11798         QualType ClassType
11799           = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11800         QualType MemPtrType
11801           = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11802 
11803         return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11804                                            VK_RValue, OK_Ordinary,
11805                                            UnOp->getOperatorLoc());
11806       }
11807     }
11808     Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11809                                                    Found, Fn);
11810     if (SubExpr == UnOp->getSubExpr())
11811       return UnOp;
11812 
11813     return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11814                                      Context.getPointerType(SubExpr->getType()),
11815                                        VK_RValue, OK_Ordinary,
11816                                        UnOp->getOperatorLoc());
11817   }
11818 
11819   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11820     // FIXME: avoid copy.
11821     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11822     if (ULE->hasExplicitTemplateArgs()) {
11823       ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11824       TemplateArgs = &TemplateArgsBuffer;
11825     }
11826 
11827     DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11828                                            ULE->getQualifierLoc(),
11829                                            ULE->getTemplateKeywordLoc(),
11830                                            Fn,
11831                                            /*enclosing*/ false, // FIXME?
11832                                            ULE->getNameLoc(),
11833                                            Fn->getType(),
11834                                            VK_LValue,
11835                                            Found.getDecl(),
11836                                            TemplateArgs);
11837     MarkDeclRefReferenced(DRE);
11838     DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11839     return DRE;
11840   }
11841 
11842   if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11843     // FIXME: avoid copy.
11844     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11845     if (MemExpr->hasExplicitTemplateArgs()) {
11846       MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11847       TemplateArgs = &TemplateArgsBuffer;
11848     }
11849 
11850     Expr *Base;
11851 
11852     // If we're filling in a static method where we used to have an
11853     // implicit member access, rewrite to a simple decl ref.
11854     if (MemExpr->isImplicitAccess()) {
11855       if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11856         DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11857                                                MemExpr->getQualifierLoc(),
11858                                                MemExpr->getTemplateKeywordLoc(),
11859                                                Fn,
11860                                                /*enclosing*/ false,
11861                                                MemExpr->getMemberLoc(),
11862                                                Fn->getType(),
11863                                                VK_LValue,
11864                                                Found.getDecl(),
11865                                                TemplateArgs);
11866         MarkDeclRefReferenced(DRE);
11867         DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11868         return DRE;
11869       } else {
11870         SourceLocation Loc = MemExpr->getMemberLoc();
11871         if (MemExpr->getQualifier())
11872           Loc = MemExpr->getQualifierLoc().getBeginLoc();
11873         CheckCXXThisCapture(Loc);
11874         Base = new (Context) CXXThisExpr(Loc,
11875                                          MemExpr->getBaseType(),
11876                                          /*isImplicit=*/true);
11877       }
11878     } else
11879       Base = MemExpr->getBase();
11880 
11881     ExprValueKind valueKind;
11882     QualType type;
11883     if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11884       valueKind = VK_LValue;
11885       type = Fn->getType();
11886     } else {
11887       valueKind = VK_RValue;
11888       type = Context.BoundMemberTy;
11889     }
11890 
11891     MemberExpr *ME = MemberExpr::Create(Context, Base,
11892                                         MemExpr->isArrow(),
11893                                         MemExpr->getQualifierLoc(),
11894                                         MemExpr->getTemplateKeywordLoc(),
11895                                         Fn,
11896                                         Found,
11897                                         MemExpr->getMemberNameInfo(),
11898                                         TemplateArgs,
11899                                         type, valueKind, OK_Ordinary);
11900     ME->setHadMultipleCandidates(true);
11901     MarkMemberReferenced(ME);
11902     return ME;
11903   }
11904 
11905   llvm_unreachable("Invalid reference to overloaded function");
11906 }
11907 
FixOverloadedFunctionReference(ExprResult E,DeclAccessPair Found,FunctionDecl * Fn)11908 ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11909                                                 DeclAccessPair Found,
11910                                                 FunctionDecl *Fn) {
11911   return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11912 }
11913 
11914 } // end namespace clang
11915