1//===--- SemaOverload.cpp - C++ Overloading ---------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file provides Sema routines for C++ overloading.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Sema/SemaInternal.h"
15#include "clang/Sema/Lookup.h"
16#include "clang/Sema/Initialization.h"
17#include "clang/Sema/Template.h"
18#include "clang/Sema/TemplateDeduction.h"
19#include "clang/Basic/Diagnostic.h"
20#include "clang/Lex/Preprocessor.h"
21#include "clang/AST/ASTContext.h"
22#include "clang/AST/CXXInheritance.h"
23#include "clang/AST/DeclObjC.h"
24#include "clang/AST/Expr.h"
25#include "clang/AST/ExprCXX.h"
26#include "clang/AST/ExprObjC.h"
27#include "clang/AST/TypeOrdering.h"
28#include "clang/Basic/PartialDiagnostic.h"
29#include "llvm/ADT/DenseSet.h"
30#include "llvm/ADT/SmallPtrSet.h"
31#include "llvm/ADT/SmallString.h"
32#include "llvm/ADT/STLExtras.h"
33#include <algorithm>
34
35namespace clang {
36using namespace sema;
37
38/// A convenience routine for creating a decayed reference to a
39/// function.
40static ExprResult
41CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, bool HadMultipleCandidates,
42                      SourceLocation Loc = SourceLocation(),
43                      const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
44  DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
45                                                 VK_LValue, Loc, LocInfo);
46  if (HadMultipleCandidates)
47    DRE->setHadMultipleCandidates(true);
48  ExprResult E = S.Owned(DRE);
49  E = S.DefaultFunctionArrayConversion(E.take());
50  if (E.isInvalid())
51    return ExprError();
52  return E;
53}
54
55static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
56                                 bool InOverloadResolution,
57                                 StandardConversionSequence &SCS,
58                                 bool CStyle,
59                                 bool AllowObjCWritebackConversion);
60
61static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
62                                                 QualType &ToType,
63                                                 bool InOverloadResolution,
64                                                 StandardConversionSequence &SCS,
65                                                 bool CStyle);
66static OverloadingResult
67IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
68                        UserDefinedConversionSequence& User,
69                        OverloadCandidateSet& Conversions,
70                        bool AllowExplicit);
71
72
73static ImplicitConversionSequence::CompareKind
74CompareStandardConversionSequences(Sema &S,
75                                   const StandardConversionSequence& SCS1,
76                                   const StandardConversionSequence& SCS2);
77
78static ImplicitConversionSequence::CompareKind
79CompareQualificationConversions(Sema &S,
80                                const StandardConversionSequence& SCS1,
81                                const StandardConversionSequence& SCS2);
82
83static ImplicitConversionSequence::CompareKind
84CompareDerivedToBaseConversions(Sema &S,
85                                const StandardConversionSequence& SCS1,
86                                const StandardConversionSequence& SCS2);
87
88
89
90/// GetConversionCategory - Retrieve the implicit conversion
91/// category corresponding to the given implicit conversion kind.
92ImplicitConversionCategory
93GetConversionCategory(ImplicitConversionKind Kind) {
94  static const ImplicitConversionCategory
95    Category[(int)ICK_Num_Conversion_Kinds] = {
96    ICC_Identity,
97    ICC_Lvalue_Transformation,
98    ICC_Lvalue_Transformation,
99    ICC_Lvalue_Transformation,
100    ICC_Identity,
101    ICC_Qualification_Adjustment,
102    ICC_Promotion,
103    ICC_Promotion,
104    ICC_Promotion,
105    ICC_Conversion,
106    ICC_Conversion,
107    ICC_Conversion,
108    ICC_Conversion,
109    ICC_Conversion,
110    ICC_Conversion,
111    ICC_Conversion,
112    ICC_Conversion,
113    ICC_Conversion,
114    ICC_Conversion,
115    ICC_Conversion,
116    ICC_Conversion,
117    ICC_Conversion
118  };
119  return Category[(int)Kind];
120}
121
122/// GetConversionRank - Retrieve the implicit conversion rank
123/// corresponding to the given implicit conversion kind.
124ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
125  static const ImplicitConversionRank
126    Rank[(int)ICK_Num_Conversion_Kinds] = {
127    ICR_Exact_Match,
128    ICR_Exact_Match,
129    ICR_Exact_Match,
130    ICR_Exact_Match,
131    ICR_Exact_Match,
132    ICR_Exact_Match,
133    ICR_Promotion,
134    ICR_Promotion,
135    ICR_Promotion,
136    ICR_Conversion,
137    ICR_Conversion,
138    ICR_Conversion,
139    ICR_Conversion,
140    ICR_Conversion,
141    ICR_Conversion,
142    ICR_Conversion,
143    ICR_Conversion,
144    ICR_Conversion,
145    ICR_Conversion,
146    ICR_Conversion,
147    ICR_Complex_Real_Conversion,
148    ICR_Conversion,
149    ICR_Conversion,
150    ICR_Writeback_Conversion
151  };
152  return Rank[(int)Kind];
153}
154
155/// GetImplicitConversionName - Return the name of this kind of
156/// implicit conversion.
157const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
158  static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
159    "No conversion",
160    "Lvalue-to-rvalue",
161    "Array-to-pointer",
162    "Function-to-pointer",
163    "Noreturn adjustment",
164    "Qualification",
165    "Integral promotion",
166    "Floating point promotion",
167    "Complex promotion",
168    "Integral conversion",
169    "Floating conversion",
170    "Complex conversion",
171    "Floating-integral conversion",
172    "Pointer conversion",
173    "Pointer-to-member conversion",
174    "Boolean conversion",
175    "Compatible-types conversion",
176    "Derived-to-base conversion",
177    "Vector conversion",
178    "Vector splat",
179    "Complex-real conversion",
180    "Block Pointer conversion",
181    "Transparent Union Conversion"
182    "Writeback conversion"
183  };
184  return Name[Kind];
185}
186
187/// StandardConversionSequence - Set the standard conversion
188/// sequence to the identity conversion.
189void StandardConversionSequence::setAsIdentityConversion() {
190  First = ICK_Identity;
191  Second = ICK_Identity;
192  Third = ICK_Identity;
193  DeprecatedStringLiteralToCharPtr = false;
194  QualificationIncludesObjCLifetime = false;
195  ReferenceBinding = false;
196  DirectBinding = false;
197  IsLvalueReference = true;
198  BindsToFunctionLvalue = false;
199  BindsToRvalue = false;
200  BindsImplicitObjectArgumentWithoutRefQualifier = false;
201  ObjCLifetimeConversionBinding = false;
202  CopyConstructor = 0;
203}
204
205/// getRank - Retrieve the rank of this standard conversion sequence
206/// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
207/// implicit conversions.
208ImplicitConversionRank StandardConversionSequence::getRank() const {
209  ImplicitConversionRank Rank = ICR_Exact_Match;
210  if  (GetConversionRank(First) > Rank)
211    Rank = GetConversionRank(First);
212  if  (GetConversionRank(Second) > Rank)
213    Rank = GetConversionRank(Second);
214  if  (GetConversionRank(Third) > Rank)
215    Rank = GetConversionRank(Third);
216  return Rank;
217}
218
219/// isPointerConversionToBool - Determines whether this conversion is
220/// a conversion of a pointer or pointer-to-member to bool. This is
221/// used as part of the ranking of standard conversion sequences
222/// (C++ 13.3.3.2p4).
223bool StandardConversionSequence::isPointerConversionToBool() const {
224  // Note that FromType has not necessarily been transformed by the
225  // array-to-pointer or function-to-pointer implicit conversions, so
226  // check for their presence as well as checking whether FromType is
227  // a pointer.
228  if (getToType(1)->isBooleanType() &&
229      (getFromType()->isPointerType() ||
230       getFromType()->isObjCObjectPointerType() ||
231       getFromType()->isBlockPointerType() ||
232       getFromType()->isNullPtrType() ||
233       First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
234    return true;
235
236  return false;
237}
238
239/// isPointerConversionToVoidPointer - Determines whether this
240/// conversion is a conversion of a pointer to a void pointer. This is
241/// used as part of the ranking of standard conversion sequences (C++
242/// 13.3.3.2p4).
243bool
244StandardConversionSequence::
245isPointerConversionToVoidPointer(ASTContext& Context) const {
246  QualType FromType = getFromType();
247  QualType ToType = getToType(1);
248
249  // Note that FromType has not necessarily been transformed by the
250  // array-to-pointer implicit conversion, so check for its presence
251  // and redo the conversion to get a pointer.
252  if (First == ICK_Array_To_Pointer)
253    FromType = Context.getArrayDecayedType(FromType);
254
255  if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
256    if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
257      return ToPtrType->getPointeeType()->isVoidType();
258
259  return false;
260}
261
262/// Skip any implicit casts which could be either part of a narrowing conversion
263/// or after one in an implicit conversion.
264static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
265  while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
266    switch (ICE->getCastKind()) {
267    case CK_NoOp:
268    case CK_IntegralCast:
269    case CK_IntegralToBoolean:
270    case CK_IntegralToFloating:
271    case CK_FloatingToIntegral:
272    case CK_FloatingToBoolean:
273    case CK_FloatingCast:
274      Converted = ICE->getSubExpr();
275      continue;
276
277    default:
278      return Converted;
279    }
280  }
281
282  return Converted;
283}
284
285/// Check if this standard conversion sequence represents a narrowing
286/// conversion, according to C++11 [dcl.init.list]p7.
287///
288/// \param Ctx  The AST context.
289/// \param Converted  The result of applying this standard conversion sequence.
290/// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
291///        value of the expression prior to the narrowing conversion.
292/// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
293///        type of the expression prior to the narrowing conversion.
294NarrowingKind
295StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
296                                             const Expr *Converted,
297                                             APValue &ConstantValue,
298                                             QualType &ConstantType) const {
299  assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
300
301  // C++11 [dcl.init.list]p7:
302  //   A narrowing conversion is an implicit conversion ...
303  QualType FromType = getToType(0);
304  QualType ToType = getToType(1);
305  switch (Second) {
306  // -- from a floating-point type to an integer type, or
307  //
308  // -- from an integer type or unscoped enumeration type to a floating-point
309  //    type, except where the source is a constant expression and the actual
310  //    value after conversion will fit into the target type and will produce
311  //    the original value when converted back to the original type, or
312  case ICK_Floating_Integral:
313    if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
314      return NK_Type_Narrowing;
315    } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
316      llvm::APSInt IntConstantValue;
317      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
318      if (Initializer &&
319          Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
320        // Convert the integer to the floating type.
321        llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
322        Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
323                                llvm::APFloat::rmNearestTiesToEven);
324        // And back.
325        llvm::APSInt ConvertedValue = IntConstantValue;
326        bool ignored;
327        Result.convertToInteger(ConvertedValue,
328                                llvm::APFloat::rmTowardZero, &ignored);
329        // If the resulting value is different, this was a narrowing conversion.
330        if (IntConstantValue != ConvertedValue) {
331          ConstantValue = APValue(IntConstantValue);
332          ConstantType = Initializer->getType();
333          return NK_Constant_Narrowing;
334        }
335      } else {
336        // Variables are always narrowings.
337        return NK_Variable_Narrowing;
338      }
339    }
340    return NK_Not_Narrowing;
341
342  // -- from long double to double or float, or from double to float, except
343  //    where the source is a constant expression and the actual value after
344  //    conversion is within the range of values that can be represented (even
345  //    if it cannot be represented exactly), or
346  case ICK_Floating_Conversion:
347    if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
348        Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
349      // FromType is larger than ToType.
350      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
351      if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
352        // Constant!
353        assert(ConstantValue.isFloat());
354        llvm::APFloat FloatVal = ConstantValue.getFloat();
355        // Convert the source value into the target type.
356        bool ignored;
357        llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
358          Ctx.getFloatTypeSemantics(ToType),
359          llvm::APFloat::rmNearestTiesToEven, &ignored);
360        // If there was no overflow, the source value is within the range of
361        // values that can be represented.
362        if (ConvertStatus & llvm::APFloat::opOverflow) {
363          ConstantType = Initializer->getType();
364          return NK_Constant_Narrowing;
365        }
366      } else {
367        return NK_Variable_Narrowing;
368      }
369    }
370    return NK_Not_Narrowing;
371
372  // -- from an integer type or unscoped enumeration type to an integer type
373  //    that cannot represent all the values of the original type, except where
374  //    the source is a constant expression and the actual value after
375  //    conversion will fit into the target type and will produce the original
376  //    value when converted back to the original type.
377  case ICK_Boolean_Conversion:  // Bools are integers too.
378    if (!FromType->isIntegralOrUnscopedEnumerationType()) {
379      // Boolean conversions can be from pointers and pointers to members
380      // [conv.bool], and those aren't considered narrowing conversions.
381      return NK_Not_Narrowing;
382    }  // Otherwise, fall through to the integral case.
383  case ICK_Integral_Conversion: {
384    assert(FromType->isIntegralOrUnscopedEnumerationType());
385    assert(ToType->isIntegralOrUnscopedEnumerationType());
386    const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
387    const unsigned FromWidth = Ctx.getIntWidth(FromType);
388    const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
389    const unsigned ToWidth = Ctx.getIntWidth(ToType);
390
391    if (FromWidth > ToWidth ||
392        (FromWidth == ToWidth && FromSigned != ToSigned) ||
393        (FromSigned && !ToSigned)) {
394      // Not all values of FromType can be represented in ToType.
395      llvm::APSInt InitializerValue;
396      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
397      if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
398        // Such conversions on variables are always narrowing.
399        return NK_Variable_Narrowing;
400      }
401      bool Narrowing = false;
402      if (FromWidth < ToWidth) {
403        // Negative -> unsigned is narrowing. Otherwise, more bits is never
404        // narrowing.
405        if (InitializerValue.isSigned() && InitializerValue.isNegative())
406          Narrowing = true;
407      } else {
408        // Add a bit to the InitializerValue so we don't have to worry about
409        // signed vs. unsigned comparisons.
410        InitializerValue = InitializerValue.extend(
411          InitializerValue.getBitWidth() + 1);
412        // Convert the initializer to and from the target width and signed-ness.
413        llvm::APSInt ConvertedValue = InitializerValue;
414        ConvertedValue = ConvertedValue.trunc(ToWidth);
415        ConvertedValue.setIsSigned(ToSigned);
416        ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
417        ConvertedValue.setIsSigned(InitializerValue.isSigned());
418        // If the result is different, this was a narrowing conversion.
419        if (ConvertedValue != InitializerValue)
420          Narrowing = true;
421      }
422      if (Narrowing) {
423        ConstantType = Initializer->getType();
424        ConstantValue = APValue(InitializerValue);
425        return NK_Constant_Narrowing;
426      }
427    }
428    return NK_Not_Narrowing;
429  }
430
431  default:
432    // Other kinds of conversions are not narrowings.
433    return NK_Not_Narrowing;
434  }
435}
436
437/// DebugPrint - Print this standard conversion sequence to standard
438/// error. Useful for debugging overloading issues.
439void StandardConversionSequence::DebugPrint() const {
440  raw_ostream &OS = llvm::errs();
441  bool PrintedSomething = false;
442  if (First != ICK_Identity) {
443    OS << GetImplicitConversionName(First);
444    PrintedSomething = true;
445  }
446
447  if (Second != ICK_Identity) {
448    if (PrintedSomething) {
449      OS << " -> ";
450    }
451    OS << GetImplicitConversionName(Second);
452
453    if (CopyConstructor) {
454      OS << " (by copy constructor)";
455    } else if (DirectBinding) {
456      OS << " (direct reference binding)";
457    } else if (ReferenceBinding) {
458      OS << " (reference binding)";
459    }
460    PrintedSomething = true;
461  }
462
463  if (Third != ICK_Identity) {
464    if (PrintedSomething) {
465      OS << " -> ";
466    }
467    OS << GetImplicitConversionName(Third);
468    PrintedSomething = true;
469  }
470
471  if (!PrintedSomething) {
472    OS << "No conversions required";
473  }
474}
475
476/// DebugPrint - Print this user-defined conversion sequence to standard
477/// error. Useful for debugging overloading issues.
478void UserDefinedConversionSequence::DebugPrint() const {
479  raw_ostream &OS = llvm::errs();
480  if (Before.First || Before.Second || Before.Third) {
481    Before.DebugPrint();
482    OS << " -> ";
483  }
484  if (ConversionFunction)
485    OS << '\'' << *ConversionFunction << '\'';
486  else
487    OS << "aggregate initialization";
488  if (After.First || After.Second || After.Third) {
489    OS << " -> ";
490    After.DebugPrint();
491  }
492}
493
494/// DebugPrint - Print this implicit conversion sequence to standard
495/// error. Useful for debugging overloading issues.
496void ImplicitConversionSequence::DebugPrint() const {
497  raw_ostream &OS = llvm::errs();
498  switch (ConversionKind) {
499  case StandardConversion:
500    OS << "Standard conversion: ";
501    Standard.DebugPrint();
502    break;
503  case UserDefinedConversion:
504    OS << "User-defined conversion: ";
505    UserDefined.DebugPrint();
506    break;
507  case EllipsisConversion:
508    OS << "Ellipsis conversion";
509    break;
510  case AmbiguousConversion:
511    OS << "Ambiguous conversion";
512    break;
513  case BadConversion:
514    OS << "Bad conversion";
515    break;
516  }
517
518  OS << "\n";
519}
520
521void AmbiguousConversionSequence::construct() {
522  new (&conversions()) ConversionSet();
523}
524
525void AmbiguousConversionSequence::destruct() {
526  conversions().~ConversionSet();
527}
528
529void
530AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
531  FromTypePtr = O.FromTypePtr;
532  ToTypePtr = O.ToTypePtr;
533  new (&conversions()) ConversionSet(O.conversions());
534}
535
536namespace {
537  // Structure used by OverloadCandidate::DeductionFailureInfo to store
538  // template parameter and template argument information.
539  struct DFIParamWithArguments {
540    TemplateParameter Param;
541    TemplateArgument FirstArg;
542    TemplateArgument SecondArg;
543  };
544}
545
546/// \brief Convert from Sema's representation of template deduction information
547/// to the form used in overload-candidate information.
548OverloadCandidate::DeductionFailureInfo
549static MakeDeductionFailureInfo(ASTContext &Context,
550                                Sema::TemplateDeductionResult TDK,
551                                TemplateDeductionInfo &Info) {
552  OverloadCandidate::DeductionFailureInfo Result;
553  Result.Result = static_cast<unsigned>(TDK);
554  Result.HasDiagnostic = false;
555  Result.Data = 0;
556  switch (TDK) {
557  case Sema::TDK_Success:
558  case Sema::TDK_InstantiationDepth:
559  case Sema::TDK_TooManyArguments:
560  case Sema::TDK_TooFewArguments:
561    break;
562
563  case Sema::TDK_Incomplete:
564  case Sema::TDK_InvalidExplicitArguments:
565    Result.Data = Info.Param.getOpaqueValue();
566    break;
567
568  case Sema::TDK_Inconsistent:
569  case Sema::TDK_Underqualified: {
570    // FIXME: Should allocate from normal heap so that we can free this later.
571    DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
572    Saved->Param = Info.Param;
573    Saved->FirstArg = Info.FirstArg;
574    Saved->SecondArg = Info.SecondArg;
575    Result.Data = Saved;
576    break;
577  }
578
579  case Sema::TDK_SubstitutionFailure:
580    Result.Data = Info.take();
581    if (Info.hasSFINAEDiagnostic()) {
582      PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
583          SourceLocation(), PartialDiagnostic::NullDiagnostic());
584      Info.takeSFINAEDiagnostic(*Diag);
585      Result.HasDiagnostic = true;
586    }
587    break;
588
589  case Sema::TDK_NonDeducedMismatch:
590  case Sema::TDK_FailedOverloadResolution:
591    break;
592  }
593
594  return Result;
595}
596
597void OverloadCandidate::DeductionFailureInfo::Destroy() {
598  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
599  case Sema::TDK_Success:
600  case Sema::TDK_InstantiationDepth:
601  case Sema::TDK_Incomplete:
602  case Sema::TDK_TooManyArguments:
603  case Sema::TDK_TooFewArguments:
604  case Sema::TDK_InvalidExplicitArguments:
605    break;
606
607  case Sema::TDK_Inconsistent:
608  case Sema::TDK_Underqualified:
609    // FIXME: Destroy the data?
610    Data = 0;
611    break;
612
613  case Sema::TDK_SubstitutionFailure:
614    // FIXME: Destroy the template argument list?
615    Data = 0;
616    if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
617      Diag->~PartialDiagnosticAt();
618      HasDiagnostic = false;
619    }
620    break;
621
622  // Unhandled
623  case Sema::TDK_NonDeducedMismatch:
624  case Sema::TDK_FailedOverloadResolution:
625    break;
626  }
627}
628
629PartialDiagnosticAt *
630OverloadCandidate::DeductionFailureInfo::getSFINAEDiagnostic() {
631  if (HasDiagnostic)
632    return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
633  return 0;
634}
635
636TemplateParameter
637OverloadCandidate::DeductionFailureInfo::getTemplateParameter() {
638  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
639  case Sema::TDK_Success:
640  case Sema::TDK_InstantiationDepth:
641  case Sema::TDK_TooManyArguments:
642  case Sema::TDK_TooFewArguments:
643  case Sema::TDK_SubstitutionFailure:
644    return TemplateParameter();
645
646  case Sema::TDK_Incomplete:
647  case Sema::TDK_InvalidExplicitArguments:
648    return TemplateParameter::getFromOpaqueValue(Data);
649
650  case Sema::TDK_Inconsistent:
651  case Sema::TDK_Underqualified:
652    return static_cast<DFIParamWithArguments*>(Data)->Param;
653
654  // Unhandled
655  case Sema::TDK_NonDeducedMismatch:
656  case Sema::TDK_FailedOverloadResolution:
657    break;
658  }
659
660  return TemplateParameter();
661}
662
663TemplateArgumentList *
664OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() {
665  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
666    case Sema::TDK_Success:
667    case Sema::TDK_InstantiationDepth:
668    case Sema::TDK_TooManyArguments:
669    case Sema::TDK_TooFewArguments:
670    case Sema::TDK_Incomplete:
671    case Sema::TDK_InvalidExplicitArguments:
672    case Sema::TDK_Inconsistent:
673    case Sema::TDK_Underqualified:
674      return 0;
675
676    case Sema::TDK_SubstitutionFailure:
677      return static_cast<TemplateArgumentList*>(Data);
678
679    // Unhandled
680    case Sema::TDK_NonDeducedMismatch:
681    case Sema::TDK_FailedOverloadResolution:
682      break;
683  }
684
685  return 0;
686}
687
688const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() {
689  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
690  case Sema::TDK_Success:
691  case Sema::TDK_InstantiationDepth:
692  case Sema::TDK_Incomplete:
693  case Sema::TDK_TooManyArguments:
694  case Sema::TDK_TooFewArguments:
695  case Sema::TDK_InvalidExplicitArguments:
696  case Sema::TDK_SubstitutionFailure:
697    return 0;
698
699  case Sema::TDK_Inconsistent:
700  case Sema::TDK_Underqualified:
701    return &static_cast<DFIParamWithArguments*>(Data)->FirstArg;
702
703  // Unhandled
704  case Sema::TDK_NonDeducedMismatch:
705  case Sema::TDK_FailedOverloadResolution:
706    break;
707  }
708
709  return 0;
710}
711
712const TemplateArgument *
713OverloadCandidate::DeductionFailureInfo::getSecondArg() {
714  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
715  case Sema::TDK_Success:
716  case Sema::TDK_InstantiationDepth:
717  case Sema::TDK_Incomplete:
718  case Sema::TDK_TooManyArguments:
719  case Sema::TDK_TooFewArguments:
720  case Sema::TDK_InvalidExplicitArguments:
721  case Sema::TDK_SubstitutionFailure:
722    return 0;
723
724  case Sema::TDK_Inconsistent:
725  case Sema::TDK_Underqualified:
726    return &static_cast<DFIParamWithArguments*>(Data)->SecondArg;
727
728  // Unhandled
729  case Sema::TDK_NonDeducedMismatch:
730  case Sema::TDK_FailedOverloadResolution:
731    break;
732  }
733
734  return 0;
735}
736
737void OverloadCandidateSet::clear() {
738  for (iterator i = begin(), e = end(); i != e; ++i) {
739    for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
740      i->Conversions[ii].~ImplicitConversionSequence();
741    if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
742      i->DeductionFailure.Destroy();
743  }
744  NumInlineSequences = 0;
745  Candidates.clear();
746  Functions.clear();
747}
748
749namespace {
750  class UnbridgedCastsSet {
751    struct Entry {
752      Expr **Addr;
753      Expr *Saved;
754    };
755    SmallVector<Entry, 2> Entries;
756
757  public:
758    void save(Sema &S, Expr *&E) {
759      assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
760      Entry entry = { &E, E };
761      Entries.push_back(entry);
762      E = S.stripARCUnbridgedCast(E);
763    }
764
765    void restore() {
766      for (SmallVectorImpl<Entry>::iterator
767             i = Entries.begin(), e = Entries.end(); i != e; ++i)
768        *i->Addr = i->Saved;
769    }
770  };
771}
772
773/// checkPlaceholderForOverload - Do any interesting placeholder-like
774/// preprocessing on the given expression.
775///
776/// \param unbridgedCasts a collection to which to add unbridged casts;
777///   without this, they will be immediately diagnosed as errors
778///
779/// Return true on unrecoverable error.
780static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
781                                        UnbridgedCastsSet *unbridgedCasts = 0) {
782  if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
783    // We can't handle overloaded expressions here because overload
784    // resolution might reasonably tweak them.
785    if (placeholder->getKind() == BuiltinType::Overload) return false;
786
787    // If the context potentially accepts unbridged ARC casts, strip
788    // the unbridged cast and add it to the collection for later restoration.
789    if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
790        unbridgedCasts) {
791      unbridgedCasts->save(S, E);
792      return false;
793    }
794
795    // Go ahead and check everything else.
796    ExprResult result = S.CheckPlaceholderExpr(E);
797    if (result.isInvalid())
798      return true;
799
800    E = result.take();
801    return false;
802  }
803
804  // Nothing to do.
805  return false;
806}
807
808/// checkArgPlaceholdersForOverload - Check a set of call operands for
809/// placeholders.
810static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args,
811                                            unsigned numArgs,
812                                            UnbridgedCastsSet &unbridged) {
813  for (unsigned i = 0; i != numArgs; ++i)
814    if (checkPlaceholderForOverload(S, args[i], &unbridged))
815      return true;
816
817  return false;
818}
819
820// IsOverload - Determine whether the given New declaration is an
821// overload of the declarations in Old. This routine returns false if
822// New and Old cannot be overloaded, e.g., if New has the same
823// signature as some function in Old (C++ 1.3.10) or if the Old
824// declarations aren't functions (or function templates) at all. When
825// it does return false, MatchedDecl will point to the decl that New
826// cannot be overloaded with.  This decl may be a UsingShadowDecl on
827// top of the underlying declaration.
828//
829// Example: Given the following input:
830//
831//   void f(int, float); // #1
832//   void f(int, int); // #2
833//   int f(int, int); // #3
834//
835// When we process #1, there is no previous declaration of "f",
836// so IsOverload will not be used.
837//
838// When we process #2, Old contains only the FunctionDecl for #1.  By
839// comparing the parameter types, we see that #1 and #2 are overloaded
840// (since they have different signatures), so this routine returns
841// false; MatchedDecl is unchanged.
842//
843// When we process #3, Old is an overload set containing #1 and #2. We
844// compare the signatures of #3 to #1 (they're overloaded, so we do
845// nothing) and then #3 to #2. Since the signatures of #3 and #2 are
846// identical (return types of functions are not part of the
847// signature), IsOverload returns false and MatchedDecl will be set to
848// point to the FunctionDecl for #2.
849//
850// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
851// into a class by a using declaration.  The rules for whether to hide
852// shadow declarations ignore some properties which otherwise figure
853// into a function template's signature.
854Sema::OverloadKind
855Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
856                    NamedDecl *&Match, bool NewIsUsingDecl) {
857  for (LookupResult::iterator I = Old.begin(), E = Old.end();
858         I != E; ++I) {
859    NamedDecl *OldD = *I;
860
861    bool OldIsUsingDecl = false;
862    if (isa<UsingShadowDecl>(OldD)) {
863      OldIsUsingDecl = true;
864
865      // We can always introduce two using declarations into the same
866      // context, even if they have identical signatures.
867      if (NewIsUsingDecl) continue;
868
869      OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
870    }
871
872    // If either declaration was introduced by a using declaration,
873    // we'll need to use slightly different rules for matching.
874    // Essentially, these rules are the normal rules, except that
875    // function templates hide function templates with different
876    // return types or template parameter lists.
877    bool UseMemberUsingDeclRules =
878      (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord();
879
880    if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
881      if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
882        if (UseMemberUsingDeclRules && OldIsUsingDecl) {
883          HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
884          continue;
885        }
886
887        Match = *I;
888        return Ovl_Match;
889      }
890    } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
891      if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
892        if (UseMemberUsingDeclRules && OldIsUsingDecl) {
893          HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
894          continue;
895        }
896
897        Match = *I;
898        return Ovl_Match;
899      }
900    } else if (isa<UsingDecl>(OldD)) {
901      // We can overload with these, which can show up when doing
902      // redeclaration checks for UsingDecls.
903      assert(Old.getLookupKind() == LookupUsingDeclName);
904    } else if (isa<TagDecl>(OldD)) {
905      // We can always overload with tags by hiding them.
906    } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
907      // Optimistically assume that an unresolved using decl will
908      // overload; if it doesn't, we'll have to diagnose during
909      // template instantiation.
910    } else {
911      // (C++ 13p1):
912      //   Only function declarations can be overloaded; object and type
913      //   declarations cannot be overloaded.
914      Match = *I;
915      return Ovl_NonFunction;
916    }
917  }
918
919  return Ovl_Overload;
920}
921
922bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
923                      bool UseUsingDeclRules) {
924  // If both of the functions are extern "C", then they are not
925  // overloads.
926  if (Old->isExternC() && New->isExternC())
927    return false;
928
929  FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
930  FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
931
932  // C++ [temp.fct]p2:
933  //   A function template can be overloaded with other function templates
934  //   and with normal (non-template) functions.
935  if ((OldTemplate == 0) != (NewTemplate == 0))
936    return true;
937
938  // Is the function New an overload of the function Old?
939  QualType OldQType = Context.getCanonicalType(Old->getType());
940  QualType NewQType = Context.getCanonicalType(New->getType());
941
942  // Compare the signatures (C++ 1.3.10) of the two functions to
943  // determine whether they are overloads. If we find any mismatch
944  // in the signature, they are overloads.
945
946  // If either of these functions is a K&R-style function (no
947  // prototype), then we consider them to have matching signatures.
948  if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
949      isa<FunctionNoProtoType>(NewQType.getTypePtr()))
950    return false;
951
952  const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
953  const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
954
955  // The signature of a function includes the types of its
956  // parameters (C++ 1.3.10), which includes the presence or absence
957  // of the ellipsis; see C++ DR 357).
958  if (OldQType != NewQType &&
959      (OldType->getNumArgs() != NewType->getNumArgs() ||
960       OldType->isVariadic() != NewType->isVariadic() ||
961       !FunctionArgTypesAreEqual(OldType, NewType)))
962    return true;
963
964  // C++ [temp.over.link]p4:
965  //   The signature of a function template consists of its function
966  //   signature, its return type and its template parameter list. The names
967  //   of the template parameters are significant only for establishing the
968  //   relationship between the template parameters and the rest of the
969  //   signature.
970  //
971  // We check the return type and template parameter lists for function
972  // templates first; the remaining checks follow.
973  //
974  // However, we don't consider either of these when deciding whether
975  // a member introduced by a shadow declaration is hidden.
976  if (!UseUsingDeclRules && NewTemplate &&
977      (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
978                                       OldTemplate->getTemplateParameters(),
979                                       false, TPL_TemplateMatch) ||
980       OldType->getResultType() != NewType->getResultType()))
981    return true;
982
983  // If the function is a class member, its signature includes the
984  // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
985  //
986  // As part of this, also check whether one of the member functions
987  // is static, in which case they are not overloads (C++
988  // 13.1p2). While not part of the definition of the signature,
989  // this check is important to determine whether these functions
990  // can be overloaded.
991  CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
992  CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
993  if (OldMethod && NewMethod &&
994      !OldMethod->isStatic() && !NewMethod->isStatic() &&
995      (OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers() ||
996       OldMethod->getRefQualifier() != NewMethod->getRefQualifier())) {
997    if (!UseUsingDeclRules &&
998        OldMethod->getRefQualifier() != NewMethod->getRefQualifier() &&
999        (OldMethod->getRefQualifier() == RQ_None ||
1000         NewMethod->getRefQualifier() == RQ_None)) {
1001      // C++0x [over.load]p2:
1002      //   - Member function declarations with the same name and the same
1003      //     parameter-type-list as well as member function template
1004      //     declarations with the same name, the same parameter-type-list, and
1005      //     the same template parameter lists cannot be overloaded if any of
1006      //     them, but not all, have a ref-qualifier (8.3.5).
1007      Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1008        << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1009      Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1010    }
1011
1012    return true;
1013  }
1014
1015  // The signatures match; this is not an overload.
1016  return false;
1017}
1018
1019/// \brief Checks availability of the function depending on the current
1020/// function context. Inside an unavailable function, unavailability is ignored.
1021///
1022/// \returns true if \arg FD is unavailable and current context is inside
1023/// an available function, false otherwise.
1024bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1025  return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1026}
1027
1028/// \brief Tries a user-defined conversion from From to ToType.
1029///
1030/// Produces an implicit conversion sequence for when a standard conversion
1031/// is not an option. See TryImplicitConversion for more information.
1032static ImplicitConversionSequence
1033TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1034                         bool SuppressUserConversions,
1035                         bool AllowExplicit,
1036                         bool InOverloadResolution,
1037                         bool CStyle,
1038                         bool AllowObjCWritebackConversion) {
1039  ImplicitConversionSequence ICS;
1040
1041  if (SuppressUserConversions) {
1042    // We're not in the case above, so there is no conversion that
1043    // we can perform.
1044    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1045    return ICS;
1046  }
1047
1048  // Attempt user-defined conversion.
1049  OverloadCandidateSet Conversions(From->getExprLoc());
1050  OverloadingResult UserDefResult
1051    = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1052                              AllowExplicit);
1053
1054  if (UserDefResult == OR_Success) {
1055    ICS.setUserDefined();
1056    // C++ [over.ics.user]p4:
1057    //   A conversion of an expression of class type to the same class
1058    //   type is given Exact Match rank, and a conversion of an
1059    //   expression of class type to a base class of that type is
1060    //   given Conversion rank, in spite of the fact that a copy
1061    //   constructor (i.e., a user-defined conversion function) is
1062    //   called for those cases.
1063    if (CXXConstructorDecl *Constructor
1064          = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1065      QualType FromCanon
1066        = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1067      QualType ToCanon
1068        = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1069      if (Constructor->isCopyConstructor() &&
1070          (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1071        // Turn this into a "standard" conversion sequence, so that it
1072        // gets ranked with standard conversion sequences.
1073        ICS.setStandard();
1074        ICS.Standard.setAsIdentityConversion();
1075        ICS.Standard.setFromType(From->getType());
1076        ICS.Standard.setAllToTypes(ToType);
1077        ICS.Standard.CopyConstructor = Constructor;
1078        if (ToCanon != FromCanon)
1079          ICS.Standard.Second = ICK_Derived_To_Base;
1080      }
1081    }
1082
1083    // C++ [over.best.ics]p4:
1084    //   However, when considering the argument of a user-defined
1085    //   conversion function that is a candidate by 13.3.1.3 when
1086    //   invoked for the copying of the temporary in the second step
1087    //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1088    //   13.3.1.6 in all cases, only standard conversion sequences and
1089    //   ellipsis conversion sequences are allowed.
1090    if (SuppressUserConversions && ICS.isUserDefined()) {
1091      ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1092    }
1093  } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1094    ICS.setAmbiguous();
1095    ICS.Ambiguous.setFromType(From->getType());
1096    ICS.Ambiguous.setToType(ToType);
1097    for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1098         Cand != Conversions.end(); ++Cand)
1099      if (Cand->Viable)
1100        ICS.Ambiguous.addConversion(Cand->Function);
1101  } else {
1102    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1103  }
1104
1105  return ICS;
1106}
1107
1108/// TryImplicitConversion - Attempt to perform an implicit conversion
1109/// from the given expression (Expr) to the given type (ToType). This
1110/// function returns an implicit conversion sequence that can be used
1111/// to perform the initialization. Given
1112///
1113///   void f(float f);
1114///   void g(int i) { f(i); }
1115///
1116/// this routine would produce an implicit conversion sequence to
1117/// describe the initialization of f from i, which will be a standard
1118/// conversion sequence containing an lvalue-to-rvalue conversion (C++
1119/// 4.1) followed by a floating-integral conversion (C++ 4.9).
1120//
1121/// Note that this routine only determines how the conversion can be
1122/// performed; it does not actually perform the conversion. As such,
1123/// it will not produce any diagnostics if no conversion is available,
1124/// but will instead return an implicit conversion sequence of kind
1125/// "BadConversion".
1126///
1127/// If @p SuppressUserConversions, then user-defined conversions are
1128/// not permitted.
1129/// If @p AllowExplicit, then explicit user-defined conversions are
1130/// permitted.
1131///
1132/// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1133/// writeback conversion, which allows __autoreleasing id* parameters to
1134/// be initialized with __strong id* or __weak id* arguments.
1135static ImplicitConversionSequence
1136TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1137                      bool SuppressUserConversions,
1138                      bool AllowExplicit,
1139                      bool InOverloadResolution,
1140                      bool CStyle,
1141                      bool AllowObjCWritebackConversion) {
1142  ImplicitConversionSequence ICS;
1143  if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1144                           ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1145    ICS.setStandard();
1146    return ICS;
1147  }
1148
1149  if (!S.getLangOpts().CPlusPlus) {
1150    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1151    return ICS;
1152  }
1153
1154  // C++ [over.ics.user]p4:
1155  //   A conversion of an expression of class type to the same class
1156  //   type is given Exact Match rank, and a conversion of an
1157  //   expression of class type to a base class of that type is
1158  //   given Conversion rank, in spite of the fact that a copy/move
1159  //   constructor (i.e., a user-defined conversion function) is
1160  //   called for those cases.
1161  QualType FromType = From->getType();
1162  if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1163      (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1164       S.IsDerivedFrom(FromType, ToType))) {
1165    ICS.setStandard();
1166    ICS.Standard.setAsIdentityConversion();
1167    ICS.Standard.setFromType(FromType);
1168    ICS.Standard.setAllToTypes(ToType);
1169
1170    // We don't actually check at this point whether there is a valid
1171    // copy/move constructor, since overloading just assumes that it
1172    // exists. When we actually perform initialization, we'll find the
1173    // appropriate constructor to copy the returned object, if needed.
1174    ICS.Standard.CopyConstructor = 0;
1175
1176    // Determine whether this is considered a derived-to-base conversion.
1177    if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1178      ICS.Standard.Second = ICK_Derived_To_Base;
1179
1180    return ICS;
1181  }
1182
1183  return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1184                                  AllowExplicit, InOverloadResolution, CStyle,
1185                                  AllowObjCWritebackConversion);
1186}
1187
1188ImplicitConversionSequence
1189Sema::TryImplicitConversion(Expr *From, QualType ToType,
1190                            bool SuppressUserConversions,
1191                            bool AllowExplicit,
1192                            bool InOverloadResolution,
1193                            bool CStyle,
1194                            bool AllowObjCWritebackConversion) {
1195  return clang::TryImplicitConversion(*this, From, ToType,
1196                                      SuppressUserConversions, AllowExplicit,
1197                                      InOverloadResolution, CStyle,
1198                                      AllowObjCWritebackConversion);
1199}
1200
1201/// PerformImplicitConversion - Perform an implicit conversion of the
1202/// expression From to the type ToType. Returns the
1203/// converted expression. Flavor is the kind of conversion we're
1204/// performing, used in the error message. If @p AllowExplicit,
1205/// explicit user-defined conversions are permitted.
1206ExprResult
1207Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1208                                AssignmentAction Action, bool AllowExplicit) {
1209  ImplicitConversionSequence ICS;
1210  return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1211}
1212
1213ExprResult
1214Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1215                                AssignmentAction Action, bool AllowExplicit,
1216                                ImplicitConversionSequence& ICS) {
1217  if (checkPlaceholderForOverload(*this, From))
1218    return ExprError();
1219
1220  // Objective-C ARC: Determine whether we will allow the writeback conversion.
1221  bool AllowObjCWritebackConversion
1222    = getLangOpts().ObjCAutoRefCount &&
1223      (Action == AA_Passing || Action == AA_Sending);
1224
1225  ICS = clang::TryImplicitConversion(*this, From, ToType,
1226                                     /*SuppressUserConversions=*/false,
1227                                     AllowExplicit,
1228                                     /*InOverloadResolution=*/false,
1229                                     /*CStyle=*/false,
1230                                     AllowObjCWritebackConversion);
1231  return PerformImplicitConversion(From, ToType, ICS, Action);
1232}
1233
1234/// \brief Determine whether the conversion from FromType to ToType is a valid
1235/// conversion that strips "noreturn" off the nested function type.
1236bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1237                                QualType &ResultTy) {
1238  if (Context.hasSameUnqualifiedType(FromType, ToType))
1239    return false;
1240
1241  // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1242  // where F adds one of the following at most once:
1243  //   - a pointer
1244  //   - a member pointer
1245  //   - a block pointer
1246  CanQualType CanTo = Context.getCanonicalType(ToType);
1247  CanQualType CanFrom = Context.getCanonicalType(FromType);
1248  Type::TypeClass TyClass = CanTo->getTypeClass();
1249  if (TyClass != CanFrom->getTypeClass()) return false;
1250  if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1251    if (TyClass == Type::Pointer) {
1252      CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1253      CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1254    } else if (TyClass == Type::BlockPointer) {
1255      CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1256      CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1257    } else if (TyClass == Type::MemberPointer) {
1258      CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1259      CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1260    } else {
1261      return false;
1262    }
1263
1264    TyClass = CanTo->getTypeClass();
1265    if (TyClass != CanFrom->getTypeClass()) return false;
1266    if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1267      return false;
1268  }
1269
1270  const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1271  FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1272  if (!EInfo.getNoReturn()) return false;
1273
1274  FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1275  assert(QualType(FromFn, 0).isCanonical());
1276  if (QualType(FromFn, 0) != CanTo) return false;
1277
1278  ResultTy = ToType;
1279  return true;
1280}
1281
1282/// \brief Determine whether the conversion from FromType to ToType is a valid
1283/// vector conversion.
1284///
1285/// \param ICK Will be set to the vector conversion kind, if this is a vector
1286/// conversion.
1287static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1288                               QualType ToType, ImplicitConversionKind &ICK) {
1289  // We need at least one of these types to be a vector type to have a vector
1290  // conversion.
1291  if (!ToType->isVectorType() && !FromType->isVectorType())
1292    return false;
1293
1294  // Identical types require no conversions.
1295  if (Context.hasSameUnqualifiedType(FromType, ToType))
1296    return false;
1297
1298  // There are no conversions between extended vector types, only identity.
1299  if (ToType->isExtVectorType()) {
1300    // There are no conversions between extended vector types other than the
1301    // identity conversion.
1302    if (FromType->isExtVectorType())
1303      return false;
1304
1305    // Vector splat from any arithmetic type to a vector.
1306    if (FromType->isArithmeticType()) {
1307      ICK = ICK_Vector_Splat;
1308      return true;
1309    }
1310  }
1311
1312  // We can perform the conversion between vector types in the following cases:
1313  // 1)vector types are equivalent AltiVec and GCC vector types
1314  // 2)lax vector conversions are permitted and the vector types are of the
1315  //   same size
1316  if (ToType->isVectorType() && FromType->isVectorType()) {
1317    if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1318        (Context.getLangOpts().LaxVectorConversions &&
1319         (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1320      ICK = ICK_Vector_Conversion;
1321      return true;
1322    }
1323  }
1324
1325  return false;
1326}
1327
1328static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1329                                bool InOverloadResolution,
1330                                StandardConversionSequence &SCS,
1331                                bool CStyle);
1332
1333/// IsStandardConversion - Determines whether there is a standard
1334/// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1335/// expression From to the type ToType. Standard conversion sequences
1336/// only consider non-class types; for conversions that involve class
1337/// types, use TryImplicitConversion. If a conversion exists, SCS will
1338/// contain the standard conversion sequence required to perform this
1339/// conversion and this routine will return true. Otherwise, this
1340/// routine will return false and the value of SCS is unspecified.
1341static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1342                                 bool InOverloadResolution,
1343                                 StandardConversionSequence &SCS,
1344                                 bool CStyle,
1345                                 bool AllowObjCWritebackConversion) {
1346  QualType FromType = From->getType();
1347
1348  // Standard conversions (C++ [conv])
1349  SCS.setAsIdentityConversion();
1350  SCS.DeprecatedStringLiteralToCharPtr = false;
1351  SCS.IncompatibleObjC = false;
1352  SCS.setFromType(FromType);
1353  SCS.CopyConstructor = 0;
1354
1355  // There are no standard conversions for class types in C++, so
1356  // abort early. When overloading in C, however, we do permit
1357  if (FromType->isRecordType() || ToType->isRecordType()) {
1358    if (S.getLangOpts().CPlusPlus)
1359      return false;
1360
1361    // When we're overloading in C, we allow, as standard conversions,
1362  }
1363
1364  // The first conversion can be an lvalue-to-rvalue conversion,
1365  // array-to-pointer conversion, or function-to-pointer conversion
1366  // (C++ 4p1).
1367
1368  if (FromType == S.Context.OverloadTy) {
1369    DeclAccessPair AccessPair;
1370    if (FunctionDecl *Fn
1371          = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1372                                                 AccessPair)) {
1373      // We were able to resolve the address of the overloaded function,
1374      // so we can convert to the type of that function.
1375      FromType = Fn->getType();
1376
1377      // we can sometimes resolve &foo<int> regardless of ToType, so check
1378      // if the type matches (identity) or we are converting to bool
1379      if (!S.Context.hasSameUnqualifiedType(
1380                      S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1381        QualType resultTy;
1382        // if the function type matches except for [[noreturn]], it's ok
1383        if (!S.IsNoReturnConversion(FromType,
1384              S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1385          // otherwise, only a boolean conversion is standard
1386          if (!ToType->isBooleanType())
1387            return false;
1388      }
1389
1390      // Check if the "from" expression is taking the address of an overloaded
1391      // function and recompute the FromType accordingly. Take advantage of the
1392      // fact that non-static member functions *must* have such an address-of
1393      // expression.
1394      CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1395      if (Method && !Method->isStatic()) {
1396        assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1397               "Non-unary operator on non-static member address");
1398        assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1399               == UO_AddrOf &&
1400               "Non-address-of operator on non-static member address");
1401        const Type *ClassType
1402          = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1403        FromType = S.Context.getMemberPointerType(FromType, ClassType);
1404      } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1405        assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1406               UO_AddrOf &&
1407               "Non-address-of operator for overloaded function expression");
1408        FromType = S.Context.getPointerType(FromType);
1409      }
1410
1411      // Check that we've computed the proper type after overload resolution.
1412      assert(S.Context.hasSameType(
1413        FromType,
1414        S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1415    } else {
1416      return false;
1417    }
1418  }
1419  // Lvalue-to-rvalue conversion (C++11 4.1):
1420  //   A glvalue (3.10) of a non-function, non-array type T can
1421  //   be converted to a prvalue.
1422  bool argIsLValue = From->isGLValue();
1423  if (argIsLValue &&
1424      !FromType->isFunctionType() && !FromType->isArrayType() &&
1425      S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1426    SCS.First = ICK_Lvalue_To_Rvalue;
1427
1428    // C11 6.3.2.1p2:
1429    //   ... if the lvalue has atomic type, the value has the non-atomic version
1430    //   of the type of the lvalue ...
1431    if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1432      FromType = Atomic->getValueType();
1433
1434    // If T is a non-class type, the type of the rvalue is the
1435    // cv-unqualified version of T. Otherwise, the type of the rvalue
1436    // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1437    // just strip the qualifiers because they don't matter.
1438    FromType = FromType.getUnqualifiedType();
1439  } else if (FromType->isArrayType()) {
1440    // Array-to-pointer conversion (C++ 4.2)
1441    SCS.First = ICK_Array_To_Pointer;
1442
1443    // An lvalue or rvalue of type "array of N T" or "array of unknown
1444    // bound of T" can be converted to an rvalue of type "pointer to
1445    // T" (C++ 4.2p1).
1446    FromType = S.Context.getArrayDecayedType(FromType);
1447
1448    if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1449      // This conversion is deprecated. (C++ D.4).
1450      SCS.DeprecatedStringLiteralToCharPtr = true;
1451
1452      // For the purpose of ranking in overload resolution
1453      // (13.3.3.1.1), this conversion is considered an
1454      // array-to-pointer conversion followed by a qualification
1455      // conversion (4.4). (C++ 4.2p2)
1456      SCS.Second = ICK_Identity;
1457      SCS.Third = ICK_Qualification;
1458      SCS.QualificationIncludesObjCLifetime = false;
1459      SCS.setAllToTypes(FromType);
1460      return true;
1461    }
1462  } else if (FromType->isFunctionType() && argIsLValue) {
1463    // Function-to-pointer conversion (C++ 4.3).
1464    SCS.First = ICK_Function_To_Pointer;
1465
1466    // An lvalue of function type T can be converted to an rvalue of
1467    // type "pointer to T." The result is a pointer to the
1468    // function. (C++ 4.3p1).
1469    FromType = S.Context.getPointerType(FromType);
1470  } else {
1471    // We don't require any conversions for the first step.
1472    SCS.First = ICK_Identity;
1473  }
1474  SCS.setToType(0, FromType);
1475
1476  // The second conversion can be an integral promotion, floating
1477  // point promotion, integral conversion, floating point conversion,
1478  // floating-integral conversion, pointer conversion,
1479  // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1480  // For overloading in C, this can also be a "compatible-type"
1481  // conversion.
1482  bool IncompatibleObjC = false;
1483  ImplicitConversionKind SecondICK = ICK_Identity;
1484  if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1485    // The unqualified versions of the types are the same: there's no
1486    // conversion to do.
1487    SCS.Second = ICK_Identity;
1488  } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1489    // Integral promotion (C++ 4.5).
1490    SCS.Second = ICK_Integral_Promotion;
1491    FromType = ToType.getUnqualifiedType();
1492  } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1493    // Floating point promotion (C++ 4.6).
1494    SCS.Second = ICK_Floating_Promotion;
1495    FromType = ToType.getUnqualifiedType();
1496  } else if (S.IsComplexPromotion(FromType, ToType)) {
1497    // Complex promotion (Clang extension)
1498    SCS.Second = ICK_Complex_Promotion;
1499    FromType = ToType.getUnqualifiedType();
1500  } else if (ToType->isBooleanType() &&
1501             (FromType->isArithmeticType() ||
1502              FromType->isAnyPointerType() ||
1503              FromType->isBlockPointerType() ||
1504              FromType->isMemberPointerType() ||
1505              FromType->isNullPtrType())) {
1506    // Boolean conversions (C++ 4.12).
1507    SCS.Second = ICK_Boolean_Conversion;
1508    FromType = S.Context.BoolTy;
1509  } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1510             ToType->isIntegralType(S.Context)) {
1511    // Integral conversions (C++ 4.7).
1512    SCS.Second = ICK_Integral_Conversion;
1513    FromType = ToType.getUnqualifiedType();
1514  } else if (FromType->isAnyComplexType() && ToType->isComplexType()) {
1515    // Complex conversions (C99 6.3.1.6)
1516    SCS.Second = ICK_Complex_Conversion;
1517    FromType = ToType.getUnqualifiedType();
1518  } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1519             (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1520    // Complex-real conversions (C99 6.3.1.7)
1521    SCS.Second = ICK_Complex_Real;
1522    FromType = ToType.getUnqualifiedType();
1523  } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1524    // Floating point conversions (C++ 4.8).
1525    SCS.Second = ICK_Floating_Conversion;
1526    FromType = ToType.getUnqualifiedType();
1527  } else if ((FromType->isRealFloatingType() &&
1528              ToType->isIntegralType(S.Context)) ||
1529             (FromType->isIntegralOrUnscopedEnumerationType() &&
1530              ToType->isRealFloatingType())) {
1531    // Floating-integral conversions (C++ 4.9).
1532    SCS.Second = ICK_Floating_Integral;
1533    FromType = ToType.getUnqualifiedType();
1534  } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1535    SCS.Second = ICK_Block_Pointer_Conversion;
1536  } else if (AllowObjCWritebackConversion &&
1537             S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1538    SCS.Second = ICK_Writeback_Conversion;
1539  } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1540                                   FromType, IncompatibleObjC)) {
1541    // Pointer conversions (C++ 4.10).
1542    SCS.Second = ICK_Pointer_Conversion;
1543    SCS.IncompatibleObjC = IncompatibleObjC;
1544    FromType = FromType.getUnqualifiedType();
1545  } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1546                                         InOverloadResolution, FromType)) {
1547    // Pointer to member conversions (4.11).
1548    SCS.Second = ICK_Pointer_Member;
1549  } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1550    SCS.Second = SecondICK;
1551    FromType = ToType.getUnqualifiedType();
1552  } else if (!S.getLangOpts().CPlusPlus &&
1553             S.Context.typesAreCompatible(ToType, FromType)) {
1554    // Compatible conversions (Clang extension for C function overloading)
1555    SCS.Second = ICK_Compatible_Conversion;
1556    FromType = ToType.getUnqualifiedType();
1557  } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1558    // Treat a conversion that strips "noreturn" as an identity conversion.
1559    SCS.Second = ICK_NoReturn_Adjustment;
1560  } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1561                                             InOverloadResolution,
1562                                             SCS, CStyle)) {
1563    SCS.Second = ICK_TransparentUnionConversion;
1564    FromType = ToType;
1565  } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1566                                 CStyle)) {
1567    // tryAtomicConversion has updated the standard conversion sequence
1568    // appropriately.
1569    return true;
1570  } else {
1571    // No second conversion required.
1572    SCS.Second = ICK_Identity;
1573  }
1574  SCS.setToType(1, FromType);
1575
1576  QualType CanonFrom;
1577  QualType CanonTo;
1578  // The third conversion can be a qualification conversion (C++ 4p1).
1579  bool ObjCLifetimeConversion;
1580  if (S.IsQualificationConversion(FromType, ToType, CStyle,
1581                                  ObjCLifetimeConversion)) {
1582    SCS.Third = ICK_Qualification;
1583    SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1584    FromType = ToType;
1585    CanonFrom = S.Context.getCanonicalType(FromType);
1586    CanonTo = S.Context.getCanonicalType(ToType);
1587  } else {
1588    // No conversion required
1589    SCS.Third = ICK_Identity;
1590
1591    // C++ [over.best.ics]p6:
1592    //   [...] Any difference in top-level cv-qualification is
1593    //   subsumed by the initialization itself and does not constitute
1594    //   a conversion. [...]
1595    CanonFrom = S.Context.getCanonicalType(FromType);
1596    CanonTo = S.Context.getCanonicalType(ToType);
1597    if (CanonFrom.getLocalUnqualifiedType()
1598                                       == CanonTo.getLocalUnqualifiedType() &&
1599        (CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers()
1600         || CanonFrom.getObjCGCAttr() != CanonTo.getObjCGCAttr()
1601         || CanonFrom.getObjCLifetime() != CanonTo.getObjCLifetime())) {
1602      FromType = ToType;
1603      CanonFrom = CanonTo;
1604    }
1605  }
1606  SCS.setToType(2, FromType);
1607
1608  // If we have not converted the argument type to the parameter type,
1609  // this is a bad conversion sequence.
1610  if (CanonFrom != CanonTo)
1611    return false;
1612
1613  return true;
1614}
1615
1616static bool
1617IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1618                                     QualType &ToType,
1619                                     bool InOverloadResolution,
1620                                     StandardConversionSequence &SCS,
1621                                     bool CStyle) {
1622
1623  const RecordType *UT = ToType->getAsUnionType();
1624  if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1625    return false;
1626  // The field to initialize within the transparent union.
1627  RecordDecl *UD = UT->getDecl();
1628  // It's compatible if the expression matches any of the fields.
1629  for (RecordDecl::field_iterator it = UD->field_begin(),
1630       itend = UD->field_end();
1631       it != itend; ++it) {
1632    if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1633                             CStyle, /*ObjCWritebackConversion=*/false)) {
1634      ToType = it->getType();
1635      return true;
1636    }
1637  }
1638  return false;
1639}
1640
1641/// IsIntegralPromotion - Determines whether the conversion from the
1642/// expression From (whose potentially-adjusted type is FromType) to
1643/// ToType is an integral promotion (C++ 4.5). If so, returns true and
1644/// sets PromotedType to the promoted type.
1645bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1646  const BuiltinType *To = ToType->getAs<BuiltinType>();
1647  // All integers are built-in.
1648  if (!To) {
1649    return false;
1650  }
1651
1652  // An rvalue of type char, signed char, unsigned char, short int, or
1653  // unsigned short int can be converted to an rvalue of type int if
1654  // int can represent all the values of the source type; otherwise,
1655  // the source rvalue can be converted to an rvalue of type unsigned
1656  // int (C++ 4.5p1).
1657  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1658      !FromType->isEnumeralType()) {
1659    if (// We can promote any signed, promotable integer type to an int
1660        (FromType->isSignedIntegerType() ||
1661         // We can promote any unsigned integer type whose size is
1662         // less than int to an int.
1663         (!FromType->isSignedIntegerType() &&
1664          Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1665      return To->getKind() == BuiltinType::Int;
1666    }
1667
1668    return To->getKind() == BuiltinType::UInt;
1669  }
1670
1671  // C++0x [conv.prom]p3:
1672  //   A prvalue of an unscoped enumeration type whose underlying type is not
1673  //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1674  //   following types that can represent all the values of the enumeration
1675  //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1676  //   unsigned int, long int, unsigned long int, long long int, or unsigned
1677  //   long long int. If none of the types in that list can represent all the
1678  //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1679  //   type can be converted to an rvalue a prvalue of the extended integer type
1680  //   with lowest integer conversion rank (4.13) greater than the rank of long
1681  //   long in which all the values of the enumeration can be represented. If
1682  //   there are two such extended types, the signed one is chosen.
1683  if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1684    // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1685    // provided for a scoped enumeration.
1686    if (FromEnumType->getDecl()->isScoped())
1687      return false;
1688
1689    // We have already pre-calculated the promotion type, so this is trivial.
1690    if (ToType->isIntegerType() &&
1691        !RequireCompleteType(From->getLocStart(), FromType, 0))
1692      return Context.hasSameUnqualifiedType(ToType,
1693                                FromEnumType->getDecl()->getPromotionType());
1694  }
1695
1696  // C++0x [conv.prom]p2:
1697  //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1698  //   to an rvalue a prvalue of the first of the following types that can
1699  //   represent all the values of its underlying type: int, unsigned int,
1700  //   long int, unsigned long int, long long int, or unsigned long long int.
1701  //   If none of the types in that list can represent all the values of its
1702  //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1703  //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1704  //   type.
1705  if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1706      ToType->isIntegerType()) {
1707    // Determine whether the type we're converting from is signed or
1708    // unsigned.
1709    bool FromIsSigned = FromType->isSignedIntegerType();
1710    uint64_t FromSize = Context.getTypeSize(FromType);
1711
1712    // The types we'll try to promote to, in the appropriate
1713    // order. Try each of these types.
1714    QualType PromoteTypes[6] = {
1715      Context.IntTy, Context.UnsignedIntTy,
1716      Context.LongTy, Context.UnsignedLongTy ,
1717      Context.LongLongTy, Context.UnsignedLongLongTy
1718    };
1719    for (int Idx = 0; Idx < 6; ++Idx) {
1720      uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1721      if (FromSize < ToSize ||
1722          (FromSize == ToSize &&
1723           FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1724        // We found the type that we can promote to. If this is the
1725        // type we wanted, we have a promotion. Otherwise, no
1726        // promotion.
1727        return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1728      }
1729    }
1730  }
1731
1732  // An rvalue for an integral bit-field (9.6) can be converted to an
1733  // rvalue of type int if int can represent all the values of the
1734  // bit-field; otherwise, it can be converted to unsigned int if
1735  // unsigned int can represent all the values of the bit-field. If
1736  // the bit-field is larger yet, no integral promotion applies to
1737  // it. If the bit-field has an enumerated type, it is treated as any
1738  // other value of that type for promotion purposes (C++ 4.5p3).
1739  // FIXME: We should delay checking of bit-fields until we actually perform the
1740  // conversion.
1741  using llvm::APSInt;
1742  if (From)
1743    if (FieldDecl *MemberDecl = From->getBitField()) {
1744      APSInt BitWidth;
1745      if (FromType->isIntegralType(Context) &&
1746          MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1747        APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1748        ToSize = Context.getTypeSize(ToType);
1749
1750        // Are we promoting to an int from a bitfield that fits in an int?
1751        if (BitWidth < ToSize ||
1752            (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1753          return To->getKind() == BuiltinType::Int;
1754        }
1755
1756        // Are we promoting to an unsigned int from an unsigned bitfield
1757        // that fits into an unsigned int?
1758        if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1759          return To->getKind() == BuiltinType::UInt;
1760        }
1761
1762        return false;
1763      }
1764    }
1765
1766  // An rvalue of type bool can be converted to an rvalue of type int,
1767  // with false becoming zero and true becoming one (C++ 4.5p4).
1768  if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1769    return true;
1770  }
1771
1772  return false;
1773}
1774
1775/// IsFloatingPointPromotion - Determines whether the conversion from
1776/// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1777/// returns true and sets PromotedType to the promoted type.
1778bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1779  if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1780    if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1781      /// An rvalue of type float can be converted to an rvalue of type
1782      /// double. (C++ 4.6p1).
1783      if (FromBuiltin->getKind() == BuiltinType::Float &&
1784          ToBuiltin->getKind() == BuiltinType::Double)
1785        return true;
1786
1787      // C99 6.3.1.5p1:
1788      //   When a float is promoted to double or long double, or a
1789      //   double is promoted to long double [...].
1790      if (!getLangOpts().CPlusPlus &&
1791          (FromBuiltin->getKind() == BuiltinType::Float ||
1792           FromBuiltin->getKind() == BuiltinType::Double) &&
1793          (ToBuiltin->getKind() == BuiltinType::LongDouble))
1794        return true;
1795
1796      // Half can be promoted to float.
1797      if (FromBuiltin->getKind() == BuiltinType::Half &&
1798          ToBuiltin->getKind() == BuiltinType::Float)
1799        return true;
1800    }
1801
1802  return false;
1803}
1804
1805/// \brief Determine if a conversion is a complex promotion.
1806///
1807/// A complex promotion is defined as a complex -> complex conversion
1808/// where the conversion between the underlying real types is a
1809/// floating-point or integral promotion.
1810bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1811  const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1812  if (!FromComplex)
1813    return false;
1814
1815  const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1816  if (!ToComplex)
1817    return false;
1818
1819  return IsFloatingPointPromotion(FromComplex->getElementType(),
1820                                  ToComplex->getElementType()) ||
1821    IsIntegralPromotion(0, FromComplex->getElementType(),
1822                        ToComplex->getElementType());
1823}
1824
1825/// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1826/// the pointer type FromPtr to a pointer to type ToPointee, with the
1827/// same type qualifiers as FromPtr has on its pointee type. ToType,
1828/// if non-empty, will be a pointer to ToType that may or may not have
1829/// the right set of qualifiers on its pointee.
1830///
1831static QualType
1832BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1833                                   QualType ToPointee, QualType ToType,
1834                                   ASTContext &Context,
1835                                   bool StripObjCLifetime = false) {
1836  assert((FromPtr->getTypeClass() == Type::Pointer ||
1837          FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1838         "Invalid similarly-qualified pointer type");
1839
1840  /// Conversions to 'id' subsume cv-qualifier conversions.
1841  if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1842    return ToType.getUnqualifiedType();
1843
1844  QualType CanonFromPointee
1845    = Context.getCanonicalType(FromPtr->getPointeeType());
1846  QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1847  Qualifiers Quals = CanonFromPointee.getQualifiers();
1848
1849  if (StripObjCLifetime)
1850    Quals.removeObjCLifetime();
1851
1852  // Exact qualifier match -> return the pointer type we're converting to.
1853  if (CanonToPointee.getLocalQualifiers() == Quals) {
1854    // ToType is exactly what we need. Return it.
1855    if (!ToType.isNull())
1856      return ToType.getUnqualifiedType();
1857
1858    // Build a pointer to ToPointee. It has the right qualifiers
1859    // already.
1860    if (isa<ObjCObjectPointerType>(ToType))
1861      return Context.getObjCObjectPointerType(ToPointee);
1862    return Context.getPointerType(ToPointee);
1863  }
1864
1865  // Just build a canonical type that has the right qualifiers.
1866  QualType QualifiedCanonToPointee
1867    = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1868
1869  if (isa<ObjCObjectPointerType>(ToType))
1870    return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1871  return Context.getPointerType(QualifiedCanonToPointee);
1872}
1873
1874static bool isNullPointerConstantForConversion(Expr *Expr,
1875                                               bool InOverloadResolution,
1876                                               ASTContext &Context) {
1877  // Handle value-dependent integral null pointer constants correctly.
1878  // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1879  if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1880      Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1881    return !InOverloadResolution;
1882
1883  return Expr->isNullPointerConstant(Context,
1884                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1885                                        : Expr::NPC_ValueDependentIsNull);
1886}
1887
1888/// IsPointerConversion - Determines whether the conversion of the
1889/// expression From, which has the (possibly adjusted) type FromType,
1890/// can be converted to the type ToType via a pointer conversion (C++
1891/// 4.10). If so, returns true and places the converted type (that
1892/// might differ from ToType in its cv-qualifiers at some level) into
1893/// ConvertedType.
1894///
1895/// This routine also supports conversions to and from block pointers
1896/// and conversions with Objective-C's 'id', 'id<protocols...>', and
1897/// pointers to interfaces. FIXME: Once we've determined the
1898/// appropriate overloading rules for Objective-C, we may want to
1899/// split the Objective-C checks into a different routine; however,
1900/// GCC seems to consider all of these conversions to be pointer
1901/// conversions, so for now they live here. IncompatibleObjC will be
1902/// set if the conversion is an allowed Objective-C conversion that
1903/// should result in a warning.
1904bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
1905                               bool InOverloadResolution,
1906                               QualType& ConvertedType,
1907                               bool &IncompatibleObjC) {
1908  IncompatibleObjC = false;
1909  if (isObjCPointerConversion(FromType, ToType, ConvertedType,
1910                              IncompatibleObjC))
1911    return true;
1912
1913  // Conversion from a null pointer constant to any Objective-C pointer type.
1914  if (ToType->isObjCObjectPointerType() &&
1915      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1916    ConvertedType = ToType;
1917    return true;
1918  }
1919
1920  // Blocks: Block pointers can be converted to void*.
1921  if (FromType->isBlockPointerType() && ToType->isPointerType() &&
1922      ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
1923    ConvertedType = ToType;
1924    return true;
1925  }
1926  // Blocks: A null pointer constant can be converted to a block
1927  // pointer type.
1928  if (ToType->isBlockPointerType() &&
1929      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1930    ConvertedType = ToType;
1931    return true;
1932  }
1933
1934  // If the left-hand-side is nullptr_t, the right side can be a null
1935  // pointer constant.
1936  if (ToType->isNullPtrType() &&
1937      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1938    ConvertedType = ToType;
1939    return true;
1940  }
1941
1942  const PointerType* ToTypePtr = ToType->getAs<PointerType>();
1943  if (!ToTypePtr)
1944    return false;
1945
1946  // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
1947  if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1948    ConvertedType = ToType;
1949    return true;
1950  }
1951
1952  // Beyond this point, both types need to be pointers
1953  // , including objective-c pointers.
1954  QualType ToPointeeType = ToTypePtr->getPointeeType();
1955  if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
1956      !getLangOpts().ObjCAutoRefCount) {
1957    ConvertedType = BuildSimilarlyQualifiedPointerType(
1958                                      FromType->getAs<ObjCObjectPointerType>(),
1959                                                       ToPointeeType,
1960                                                       ToType, Context);
1961    return true;
1962  }
1963  const PointerType *FromTypePtr = FromType->getAs<PointerType>();
1964  if (!FromTypePtr)
1965    return false;
1966
1967  QualType FromPointeeType = FromTypePtr->getPointeeType();
1968
1969  // If the unqualified pointee types are the same, this can't be a
1970  // pointer conversion, so don't do all of the work below.
1971  if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
1972    return false;
1973
1974  // An rvalue of type "pointer to cv T," where T is an object type,
1975  // can be converted to an rvalue of type "pointer to cv void" (C++
1976  // 4.10p2).
1977  if (FromPointeeType->isIncompleteOrObjectType() &&
1978      ToPointeeType->isVoidType()) {
1979    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1980                                                       ToPointeeType,
1981                                                       ToType, Context,
1982                                                   /*StripObjCLifetime=*/true);
1983    return true;
1984  }
1985
1986  // MSVC allows implicit function to void* type conversion.
1987  if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
1988      ToPointeeType->isVoidType()) {
1989    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1990                                                       ToPointeeType,
1991                                                       ToType, Context);
1992    return true;
1993  }
1994
1995  // When we're overloading in C, we allow a special kind of pointer
1996  // conversion for compatible-but-not-identical pointee types.
1997  if (!getLangOpts().CPlusPlus &&
1998      Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
1999    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2000                                                       ToPointeeType,
2001                                                       ToType, Context);
2002    return true;
2003  }
2004
2005  // C++ [conv.ptr]p3:
2006  //
2007  //   An rvalue of type "pointer to cv D," where D is a class type,
2008  //   can be converted to an rvalue of type "pointer to cv B," where
2009  //   B is a base class (clause 10) of D. If B is an inaccessible
2010  //   (clause 11) or ambiguous (10.2) base class of D, a program that
2011  //   necessitates this conversion is ill-formed. The result of the
2012  //   conversion is a pointer to the base class sub-object of the
2013  //   derived class object. The null pointer value is converted to
2014  //   the null pointer value of the destination type.
2015  //
2016  // Note that we do not check for ambiguity or inaccessibility
2017  // here. That is handled by CheckPointerConversion.
2018  if (getLangOpts().CPlusPlus &&
2019      FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2020      !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2021      !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2022      IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2023    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2024                                                       ToPointeeType,
2025                                                       ToType, Context);
2026    return true;
2027  }
2028
2029  if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2030      Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2031    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2032                                                       ToPointeeType,
2033                                                       ToType, Context);
2034    return true;
2035  }
2036
2037  return false;
2038}
2039
2040/// \brief Adopt the given qualifiers for the given type.
2041static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2042  Qualifiers TQs = T.getQualifiers();
2043
2044  // Check whether qualifiers already match.
2045  if (TQs == Qs)
2046    return T;
2047
2048  if (Qs.compatiblyIncludes(TQs))
2049    return Context.getQualifiedType(T, Qs);
2050
2051  return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2052}
2053
2054/// isObjCPointerConversion - Determines whether this is an
2055/// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2056/// with the same arguments and return values.
2057bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2058                                   QualType& ConvertedType,
2059                                   bool &IncompatibleObjC) {
2060  if (!getLangOpts().ObjC1)
2061    return false;
2062
2063  // The set of qualifiers on the type we're converting from.
2064  Qualifiers FromQualifiers = FromType.getQualifiers();
2065
2066  // First, we handle all conversions on ObjC object pointer types.
2067  const ObjCObjectPointerType* ToObjCPtr =
2068    ToType->getAs<ObjCObjectPointerType>();
2069  const ObjCObjectPointerType *FromObjCPtr =
2070    FromType->getAs<ObjCObjectPointerType>();
2071
2072  if (ToObjCPtr && FromObjCPtr) {
2073    // If the pointee types are the same (ignoring qualifications),
2074    // then this is not a pointer conversion.
2075    if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2076                                       FromObjCPtr->getPointeeType()))
2077      return false;
2078
2079    // Check for compatible
2080    // Objective C++: We're able to convert between "id" or "Class" and a
2081    // pointer to any interface (in both directions).
2082    if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2083      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2084      return true;
2085    }
2086    // Conversions with Objective-C's id<...>.
2087    if ((FromObjCPtr->isObjCQualifiedIdType() ||
2088         ToObjCPtr->isObjCQualifiedIdType()) &&
2089        Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2090                                                  /*compare=*/false)) {
2091      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2092      return true;
2093    }
2094    // Objective C++: We're able to convert from a pointer to an
2095    // interface to a pointer to a different interface.
2096    if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2097      const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2098      const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2099      if (getLangOpts().CPlusPlus && LHS && RHS &&
2100          !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2101                                                FromObjCPtr->getPointeeType()))
2102        return false;
2103      ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2104                                                   ToObjCPtr->getPointeeType(),
2105                                                         ToType, Context);
2106      ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2107      return true;
2108    }
2109
2110    if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2111      // Okay: this is some kind of implicit downcast of Objective-C
2112      // interfaces, which is permitted. However, we're going to
2113      // complain about it.
2114      IncompatibleObjC = true;
2115      ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2116                                                   ToObjCPtr->getPointeeType(),
2117                                                         ToType, Context);
2118      ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2119      return true;
2120    }
2121  }
2122  // Beyond this point, both types need to be C pointers or block pointers.
2123  QualType ToPointeeType;
2124  if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2125    ToPointeeType = ToCPtr->getPointeeType();
2126  else if (const BlockPointerType *ToBlockPtr =
2127            ToType->getAs<BlockPointerType>()) {
2128    // Objective C++: We're able to convert from a pointer to any object
2129    // to a block pointer type.
2130    if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2131      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2132      return true;
2133    }
2134    ToPointeeType = ToBlockPtr->getPointeeType();
2135  }
2136  else if (FromType->getAs<BlockPointerType>() &&
2137           ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2138    // Objective C++: We're able to convert from a block pointer type to a
2139    // pointer to any object.
2140    ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2141    return true;
2142  }
2143  else
2144    return false;
2145
2146  QualType FromPointeeType;
2147  if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2148    FromPointeeType = FromCPtr->getPointeeType();
2149  else if (const BlockPointerType *FromBlockPtr =
2150           FromType->getAs<BlockPointerType>())
2151    FromPointeeType = FromBlockPtr->getPointeeType();
2152  else
2153    return false;
2154
2155  // If we have pointers to pointers, recursively check whether this
2156  // is an Objective-C conversion.
2157  if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2158      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2159                              IncompatibleObjC)) {
2160    // We always complain about this conversion.
2161    IncompatibleObjC = true;
2162    ConvertedType = Context.getPointerType(ConvertedType);
2163    ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2164    return true;
2165  }
2166  // Allow conversion of pointee being objective-c pointer to another one;
2167  // as in I* to id.
2168  if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2169      ToPointeeType->getAs<ObjCObjectPointerType>() &&
2170      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2171                              IncompatibleObjC)) {
2172
2173    ConvertedType = Context.getPointerType(ConvertedType);
2174    ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2175    return true;
2176  }
2177
2178  // If we have pointers to functions or blocks, check whether the only
2179  // differences in the argument and result types are in Objective-C
2180  // pointer conversions. If so, we permit the conversion (but
2181  // complain about it).
2182  const FunctionProtoType *FromFunctionType
2183    = FromPointeeType->getAs<FunctionProtoType>();
2184  const FunctionProtoType *ToFunctionType
2185    = ToPointeeType->getAs<FunctionProtoType>();
2186  if (FromFunctionType && ToFunctionType) {
2187    // If the function types are exactly the same, this isn't an
2188    // Objective-C pointer conversion.
2189    if (Context.getCanonicalType(FromPointeeType)
2190          == Context.getCanonicalType(ToPointeeType))
2191      return false;
2192
2193    // Perform the quick checks that will tell us whether these
2194    // function types are obviously different.
2195    if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2196        FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2197        FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2198      return false;
2199
2200    bool HasObjCConversion = false;
2201    if (Context.getCanonicalType(FromFunctionType->getResultType())
2202          == Context.getCanonicalType(ToFunctionType->getResultType())) {
2203      // Okay, the types match exactly. Nothing to do.
2204    } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2205                                       ToFunctionType->getResultType(),
2206                                       ConvertedType, IncompatibleObjC)) {
2207      // Okay, we have an Objective-C pointer conversion.
2208      HasObjCConversion = true;
2209    } else {
2210      // Function types are too different. Abort.
2211      return false;
2212    }
2213
2214    // Check argument types.
2215    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2216         ArgIdx != NumArgs; ++ArgIdx) {
2217      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2218      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2219      if (Context.getCanonicalType(FromArgType)
2220            == Context.getCanonicalType(ToArgType)) {
2221        // Okay, the types match exactly. Nothing to do.
2222      } else if (isObjCPointerConversion(FromArgType, ToArgType,
2223                                         ConvertedType, IncompatibleObjC)) {
2224        // Okay, we have an Objective-C pointer conversion.
2225        HasObjCConversion = true;
2226      } else {
2227        // Argument types are too different. Abort.
2228        return false;
2229      }
2230    }
2231
2232    if (HasObjCConversion) {
2233      // We had an Objective-C conversion. Allow this pointer
2234      // conversion, but complain about it.
2235      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2236      IncompatibleObjC = true;
2237      return true;
2238    }
2239  }
2240
2241  return false;
2242}
2243
2244/// \brief Determine whether this is an Objective-C writeback conversion,
2245/// used for parameter passing when performing automatic reference counting.
2246///
2247/// \param FromType The type we're converting form.
2248///
2249/// \param ToType The type we're converting to.
2250///
2251/// \param ConvertedType The type that will be produced after applying
2252/// this conversion.
2253bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2254                                     QualType &ConvertedType) {
2255  if (!getLangOpts().ObjCAutoRefCount ||
2256      Context.hasSameUnqualifiedType(FromType, ToType))
2257    return false;
2258
2259  // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2260  QualType ToPointee;
2261  if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2262    ToPointee = ToPointer->getPointeeType();
2263  else
2264    return false;
2265
2266  Qualifiers ToQuals = ToPointee.getQualifiers();
2267  if (!ToPointee->isObjCLifetimeType() ||
2268      ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2269      !ToQuals.withoutObjCLifetime().empty())
2270    return false;
2271
2272  // Argument must be a pointer to __strong to __weak.
2273  QualType FromPointee;
2274  if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2275    FromPointee = FromPointer->getPointeeType();
2276  else
2277    return false;
2278
2279  Qualifiers FromQuals = FromPointee.getQualifiers();
2280  if (!FromPointee->isObjCLifetimeType() ||
2281      (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2282       FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2283    return false;
2284
2285  // Make sure that we have compatible qualifiers.
2286  FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2287  if (!ToQuals.compatiblyIncludes(FromQuals))
2288    return false;
2289
2290  // Remove qualifiers from the pointee type we're converting from; they
2291  // aren't used in the compatibility check belong, and we'll be adding back
2292  // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2293  FromPointee = FromPointee.getUnqualifiedType();
2294
2295  // The unqualified form of the pointee types must be compatible.
2296  ToPointee = ToPointee.getUnqualifiedType();
2297  bool IncompatibleObjC;
2298  if (Context.typesAreCompatible(FromPointee, ToPointee))
2299    FromPointee = ToPointee;
2300  else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2301                                    IncompatibleObjC))
2302    return false;
2303
2304  /// \brief Construct the type we're converting to, which is a pointer to
2305  /// __autoreleasing pointee.
2306  FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2307  ConvertedType = Context.getPointerType(FromPointee);
2308  return true;
2309}
2310
2311bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2312                                    QualType& ConvertedType) {
2313  QualType ToPointeeType;
2314  if (const BlockPointerType *ToBlockPtr =
2315        ToType->getAs<BlockPointerType>())
2316    ToPointeeType = ToBlockPtr->getPointeeType();
2317  else
2318    return false;
2319
2320  QualType FromPointeeType;
2321  if (const BlockPointerType *FromBlockPtr =
2322      FromType->getAs<BlockPointerType>())
2323    FromPointeeType = FromBlockPtr->getPointeeType();
2324  else
2325    return false;
2326  // We have pointer to blocks, check whether the only
2327  // differences in the argument and result types are in Objective-C
2328  // pointer conversions. If so, we permit the conversion.
2329
2330  const FunctionProtoType *FromFunctionType
2331    = FromPointeeType->getAs<FunctionProtoType>();
2332  const FunctionProtoType *ToFunctionType
2333    = ToPointeeType->getAs<FunctionProtoType>();
2334
2335  if (!FromFunctionType || !ToFunctionType)
2336    return false;
2337
2338  if (Context.hasSameType(FromPointeeType, ToPointeeType))
2339    return true;
2340
2341  // Perform the quick checks that will tell us whether these
2342  // function types are obviously different.
2343  if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2344      FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2345    return false;
2346
2347  FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2348  FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2349  if (FromEInfo != ToEInfo)
2350    return false;
2351
2352  bool IncompatibleObjC = false;
2353  if (Context.hasSameType(FromFunctionType->getResultType(),
2354                          ToFunctionType->getResultType())) {
2355    // Okay, the types match exactly. Nothing to do.
2356  } else {
2357    QualType RHS = FromFunctionType->getResultType();
2358    QualType LHS = ToFunctionType->getResultType();
2359    if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2360        !RHS.hasQualifiers() && LHS.hasQualifiers())
2361       LHS = LHS.getUnqualifiedType();
2362
2363     if (Context.hasSameType(RHS,LHS)) {
2364       // OK exact match.
2365     } else if (isObjCPointerConversion(RHS, LHS,
2366                                        ConvertedType, IncompatibleObjC)) {
2367     if (IncompatibleObjC)
2368       return false;
2369     // Okay, we have an Objective-C pointer conversion.
2370     }
2371     else
2372       return false;
2373   }
2374
2375   // Check argument types.
2376   for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2377        ArgIdx != NumArgs; ++ArgIdx) {
2378     IncompatibleObjC = false;
2379     QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2380     QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2381     if (Context.hasSameType(FromArgType, ToArgType)) {
2382       // Okay, the types match exactly. Nothing to do.
2383     } else if (isObjCPointerConversion(ToArgType, FromArgType,
2384                                        ConvertedType, IncompatibleObjC)) {
2385       if (IncompatibleObjC)
2386         return false;
2387       // Okay, we have an Objective-C pointer conversion.
2388     } else
2389       // Argument types are too different. Abort.
2390       return false;
2391   }
2392   if (LangOpts.ObjCAutoRefCount &&
2393       !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2394                                                    ToFunctionType))
2395     return false;
2396
2397   ConvertedType = ToType;
2398   return true;
2399}
2400
2401enum {
2402  ft_default,
2403  ft_different_class,
2404  ft_parameter_arity,
2405  ft_parameter_mismatch,
2406  ft_return_type,
2407  ft_qualifer_mismatch
2408};
2409
2410/// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2411/// function types.  Catches different number of parameter, mismatch in
2412/// parameter types, and different return types.
2413void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2414                                      QualType FromType, QualType ToType) {
2415  // If either type is not valid, include no extra info.
2416  if (FromType.isNull() || ToType.isNull()) {
2417    PDiag << ft_default;
2418    return;
2419  }
2420
2421  // Get the function type from the pointers.
2422  if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2423    const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2424                            *ToMember = ToType->getAs<MemberPointerType>();
2425    if (FromMember->getClass() != ToMember->getClass()) {
2426      PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2427            << QualType(FromMember->getClass(), 0);
2428      return;
2429    }
2430    FromType = FromMember->getPointeeType();
2431    ToType = ToMember->getPointeeType();
2432  }
2433
2434  if (FromType->isPointerType())
2435    FromType = FromType->getPointeeType();
2436  if (ToType->isPointerType())
2437    ToType = ToType->getPointeeType();
2438
2439  // Remove references.
2440  FromType = FromType.getNonReferenceType();
2441  ToType = ToType.getNonReferenceType();
2442
2443  // Don't print extra info for non-specialized template functions.
2444  if (FromType->isInstantiationDependentType() &&
2445      !FromType->getAs<TemplateSpecializationType>()) {
2446    PDiag << ft_default;
2447    return;
2448  }
2449
2450  // No extra info for same types.
2451  if (Context.hasSameType(FromType, ToType)) {
2452    PDiag << ft_default;
2453    return;
2454  }
2455
2456  const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2457                          *ToFunction = ToType->getAs<FunctionProtoType>();
2458
2459  // Both types need to be function types.
2460  if (!FromFunction || !ToFunction) {
2461    PDiag << ft_default;
2462    return;
2463  }
2464
2465  if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2466    PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2467          << FromFunction->getNumArgs();
2468    return;
2469  }
2470
2471  // Handle different parameter types.
2472  unsigned ArgPos;
2473  if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2474    PDiag << ft_parameter_mismatch << ArgPos + 1
2475          << ToFunction->getArgType(ArgPos)
2476          << FromFunction->getArgType(ArgPos);
2477    return;
2478  }
2479
2480  // Handle different return type.
2481  if (!Context.hasSameType(FromFunction->getResultType(),
2482                           ToFunction->getResultType())) {
2483    PDiag << ft_return_type << ToFunction->getResultType()
2484          << FromFunction->getResultType();
2485    return;
2486  }
2487
2488  unsigned FromQuals = FromFunction->getTypeQuals(),
2489           ToQuals = ToFunction->getTypeQuals();
2490  if (FromQuals != ToQuals) {
2491    PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2492    return;
2493  }
2494
2495  // Unable to find a difference, so add no extra info.
2496  PDiag << ft_default;
2497}
2498
2499/// FunctionArgTypesAreEqual - This routine checks two function proto types
2500/// for equality of their argument types. Caller has already checked that
2501/// they have same number of arguments. This routine assumes that Objective-C
2502/// pointer types which only differ in their protocol qualifiers are equal.
2503/// If the parameters are different, ArgPos will have the parameter index
2504/// of the first different parameter.
2505bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2506                                    const FunctionProtoType *NewType,
2507                                    unsigned *ArgPos) {
2508  if (!getLangOpts().ObjC1) {
2509    for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2510         N = NewType->arg_type_begin(),
2511         E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2512      if (!Context.hasSameType(*O, *N)) {
2513        if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2514        return false;
2515      }
2516    }
2517    return true;
2518  }
2519
2520  for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2521       N = NewType->arg_type_begin(),
2522       E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2523    QualType ToType = (*O);
2524    QualType FromType = (*N);
2525    if (!Context.hasSameType(ToType, FromType)) {
2526      if (const PointerType *PTTo = ToType->getAs<PointerType>()) {
2527        if (const PointerType *PTFr = FromType->getAs<PointerType>())
2528          if ((PTTo->getPointeeType()->isObjCQualifiedIdType() &&
2529               PTFr->getPointeeType()->isObjCQualifiedIdType()) ||
2530              (PTTo->getPointeeType()->isObjCQualifiedClassType() &&
2531               PTFr->getPointeeType()->isObjCQualifiedClassType()))
2532            continue;
2533      }
2534      else if (const ObjCObjectPointerType *PTTo =
2535                 ToType->getAs<ObjCObjectPointerType>()) {
2536        if (const ObjCObjectPointerType *PTFr =
2537              FromType->getAs<ObjCObjectPointerType>())
2538          if (Context.hasSameUnqualifiedType(
2539                PTTo->getObjectType()->getBaseType(),
2540                PTFr->getObjectType()->getBaseType()))
2541            continue;
2542      }
2543      if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2544      return false;
2545    }
2546  }
2547  return true;
2548}
2549
2550/// CheckPointerConversion - Check the pointer conversion from the
2551/// expression From to the type ToType. This routine checks for
2552/// ambiguous or inaccessible derived-to-base pointer
2553/// conversions for which IsPointerConversion has already returned
2554/// true. It returns true and produces a diagnostic if there was an
2555/// error, or returns false otherwise.
2556bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2557                                  CastKind &Kind,
2558                                  CXXCastPath& BasePath,
2559                                  bool IgnoreBaseAccess) {
2560  QualType FromType = From->getType();
2561  bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2562
2563  Kind = CK_BitCast;
2564
2565  if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2566      From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2567      Expr::NPCK_ZeroExpression) {
2568    if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2569      DiagRuntimeBehavior(From->getExprLoc(), From,
2570                          PDiag(diag::warn_impcast_bool_to_null_pointer)
2571                            << ToType << From->getSourceRange());
2572    else if (!isUnevaluatedContext())
2573      Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2574        << ToType << From->getSourceRange();
2575  }
2576  if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2577    if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2578      QualType FromPointeeType = FromPtrType->getPointeeType(),
2579               ToPointeeType   = ToPtrType->getPointeeType();
2580
2581      if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2582          !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2583        // We must have a derived-to-base conversion. Check an
2584        // ambiguous or inaccessible conversion.
2585        if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2586                                         From->getExprLoc(),
2587                                         From->getSourceRange(), &BasePath,
2588                                         IgnoreBaseAccess))
2589          return true;
2590
2591        // The conversion was successful.
2592        Kind = CK_DerivedToBase;
2593      }
2594    }
2595  } else if (const ObjCObjectPointerType *ToPtrType =
2596               ToType->getAs<ObjCObjectPointerType>()) {
2597    if (const ObjCObjectPointerType *FromPtrType =
2598          FromType->getAs<ObjCObjectPointerType>()) {
2599      // Objective-C++ conversions are always okay.
2600      // FIXME: We should have a different class of conversions for the
2601      // Objective-C++ implicit conversions.
2602      if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2603        return false;
2604    } else if (FromType->isBlockPointerType()) {
2605      Kind = CK_BlockPointerToObjCPointerCast;
2606    } else {
2607      Kind = CK_CPointerToObjCPointerCast;
2608    }
2609  } else if (ToType->isBlockPointerType()) {
2610    if (!FromType->isBlockPointerType())
2611      Kind = CK_AnyPointerToBlockPointerCast;
2612  }
2613
2614  // We shouldn't fall into this case unless it's valid for other
2615  // reasons.
2616  if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2617    Kind = CK_NullToPointer;
2618
2619  return false;
2620}
2621
2622/// IsMemberPointerConversion - Determines whether the conversion of the
2623/// expression From, which has the (possibly adjusted) type FromType, can be
2624/// converted to the type ToType via a member pointer conversion (C++ 4.11).
2625/// If so, returns true and places the converted type (that might differ from
2626/// ToType in its cv-qualifiers at some level) into ConvertedType.
2627bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2628                                     QualType ToType,
2629                                     bool InOverloadResolution,
2630                                     QualType &ConvertedType) {
2631  const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2632  if (!ToTypePtr)
2633    return false;
2634
2635  // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2636  if (From->isNullPointerConstant(Context,
2637                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2638                                        : Expr::NPC_ValueDependentIsNull)) {
2639    ConvertedType = ToType;
2640    return true;
2641  }
2642
2643  // Otherwise, both types have to be member pointers.
2644  const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2645  if (!FromTypePtr)
2646    return false;
2647
2648  // A pointer to member of B can be converted to a pointer to member of D,
2649  // where D is derived from B (C++ 4.11p2).
2650  QualType FromClass(FromTypePtr->getClass(), 0);
2651  QualType ToClass(ToTypePtr->getClass(), 0);
2652
2653  if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2654      !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2655      IsDerivedFrom(ToClass, FromClass)) {
2656    ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2657                                                 ToClass.getTypePtr());
2658    return true;
2659  }
2660
2661  return false;
2662}
2663
2664/// CheckMemberPointerConversion - Check the member pointer conversion from the
2665/// expression From to the type ToType. This routine checks for ambiguous or
2666/// virtual or inaccessible base-to-derived member pointer conversions
2667/// for which IsMemberPointerConversion has already returned true. It returns
2668/// true and produces a diagnostic if there was an error, or returns false
2669/// otherwise.
2670bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2671                                        CastKind &Kind,
2672                                        CXXCastPath &BasePath,
2673                                        bool IgnoreBaseAccess) {
2674  QualType FromType = From->getType();
2675  const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2676  if (!FromPtrType) {
2677    // This must be a null pointer to member pointer conversion
2678    assert(From->isNullPointerConstant(Context,
2679                                       Expr::NPC_ValueDependentIsNull) &&
2680           "Expr must be null pointer constant!");
2681    Kind = CK_NullToMemberPointer;
2682    return false;
2683  }
2684
2685  const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2686  assert(ToPtrType && "No member pointer cast has a target type "
2687                      "that is not a member pointer.");
2688
2689  QualType FromClass = QualType(FromPtrType->getClass(), 0);
2690  QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2691
2692  // FIXME: What about dependent types?
2693  assert(FromClass->isRecordType() && "Pointer into non-class.");
2694  assert(ToClass->isRecordType() && "Pointer into non-class.");
2695
2696  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2697                     /*DetectVirtual=*/true);
2698  bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2699  assert(DerivationOkay &&
2700         "Should not have been called if derivation isn't OK.");
2701  (void)DerivationOkay;
2702
2703  if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2704                                  getUnqualifiedType())) {
2705    std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2706    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2707      << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2708    return true;
2709  }
2710
2711  if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2712    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2713      << FromClass << ToClass << QualType(VBase, 0)
2714      << From->getSourceRange();
2715    return true;
2716  }
2717
2718  if (!IgnoreBaseAccess)
2719    CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2720                         Paths.front(),
2721                         diag::err_downcast_from_inaccessible_base);
2722
2723  // Must be a base to derived member conversion.
2724  BuildBasePathArray(Paths, BasePath);
2725  Kind = CK_BaseToDerivedMemberPointer;
2726  return false;
2727}
2728
2729/// IsQualificationConversion - Determines whether the conversion from
2730/// an rvalue of type FromType to ToType is a qualification conversion
2731/// (C++ 4.4).
2732///
2733/// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2734/// when the qualification conversion involves a change in the Objective-C
2735/// object lifetime.
2736bool
2737Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2738                                bool CStyle, bool &ObjCLifetimeConversion) {
2739  FromType = Context.getCanonicalType(FromType);
2740  ToType = Context.getCanonicalType(ToType);
2741  ObjCLifetimeConversion = false;
2742
2743  // If FromType and ToType are the same type, this is not a
2744  // qualification conversion.
2745  if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2746    return false;
2747
2748  // (C++ 4.4p4):
2749  //   A conversion can add cv-qualifiers at levels other than the first
2750  //   in multi-level pointers, subject to the following rules: [...]
2751  bool PreviousToQualsIncludeConst = true;
2752  bool UnwrappedAnyPointer = false;
2753  while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2754    // Within each iteration of the loop, we check the qualifiers to
2755    // determine if this still looks like a qualification
2756    // conversion. Then, if all is well, we unwrap one more level of
2757    // pointers or pointers-to-members and do it all again
2758    // until there are no more pointers or pointers-to-members left to
2759    // unwrap.
2760    UnwrappedAnyPointer = true;
2761
2762    Qualifiers FromQuals = FromType.getQualifiers();
2763    Qualifiers ToQuals = ToType.getQualifiers();
2764
2765    // Objective-C ARC:
2766    //   Check Objective-C lifetime conversions.
2767    if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2768        UnwrappedAnyPointer) {
2769      if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2770        ObjCLifetimeConversion = true;
2771        FromQuals.removeObjCLifetime();
2772        ToQuals.removeObjCLifetime();
2773      } else {
2774        // Qualification conversions cannot cast between different
2775        // Objective-C lifetime qualifiers.
2776        return false;
2777      }
2778    }
2779
2780    // Allow addition/removal of GC attributes but not changing GC attributes.
2781    if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2782        (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2783      FromQuals.removeObjCGCAttr();
2784      ToQuals.removeObjCGCAttr();
2785    }
2786
2787    //   -- for every j > 0, if const is in cv 1,j then const is in cv
2788    //      2,j, and similarly for volatile.
2789    if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2790      return false;
2791
2792    //   -- if the cv 1,j and cv 2,j are different, then const is in
2793    //      every cv for 0 < k < j.
2794    if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2795        && !PreviousToQualsIncludeConst)
2796      return false;
2797
2798    // Keep track of whether all prior cv-qualifiers in the "to" type
2799    // include const.
2800    PreviousToQualsIncludeConst
2801      = PreviousToQualsIncludeConst && ToQuals.hasConst();
2802  }
2803
2804  // We are left with FromType and ToType being the pointee types
2805  // after unwrapping the original FromType and ToType the same number
2806  // of types. If we unwrapped any pointers, and if FromType and
2807  // ToType have the same unqualified type (since we checked
2808  // qualifiers above), then this is a qualification conversion.
2809  return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2810}
2811
2812/// \brief - Determine whether this is a conversion from a scalar type to an
2813/// atomic type.
2814///
2815/// If successful, updates \c SCS's second and third steps in the conversion
2816/// sequence to finish the conversion.
2817static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2818                                bool InOverloadResolution,
2819                                StandardConversionSequence &SCS,
2820                                bool CStyle) {
2821  const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2822  if (!ToAtomic)
2823    return false;
2824
2825  StandardConversionSequence InnerSCS;
2826  if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2827                            InOverloadResolution, InnerSCS,
2828                            CStyle, /*AllowObjCWritebackConversion=*/false))
2829    return false;
2830
2831  SCS.Second = InnerSCS.Second;
2832  SCS.setToType(1, InnerSCS.getToType(1));
2833  SCS.Third = InnerSCS.Third;
2834  SCS.QualificationIncludesObjCLifetime
2835    = InnerSCS.QualificationIncludesObjCLifetime;
2836  SCS.setToType(2, InnerSCS.getToType(2));
2837  return true;
2838}
2839
2840static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2841                                              CXXConstructorDecl *Constructor,
2842                                              QualType Type) {
2843  const FunctionProtoType *CtorType =
2844      Constructor->getType()->getAs<FunctionProtoType>();
2845  if (CtorType->getNumArgs() > 0) {
2846    QualType FirstArg = CtorType->getArgType(0);
2847    if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2848      return true;
2849  }
2850  return false;
2851}
2852
2853static OverloadingResult
2854IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2855                                       CXXRecordDecl *To,
2856                                       UserDefinedConversionSequence &User,
2857                                       OverloadCandidateSet &CandidateSet,
2858                                       bool AllowExplicit) {
2859  DeclContext::lookup_iterator Con, ConEnd;
2860  for (llvm::tie(Con, ConEnd) = S.LookupConstructors(To);
2861       Con != ConEnd; ++Con) {
2862    NamedDecl *D = *Con;
2863    DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2864
2865    // Find the constructor (which may be a template).
2866    CXXConstructorDecl *Constructor = 0;
2867    FunctionTemplateDecl *ConstructorTmpl
2868      = dyn_cast<FunctionTemplateDecl>(D);
2869    if (ConstructorTmpl)
2870      Constructor
2871        = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2872    else
2873      Constructor = cast<CXXConstructorDecl>(D);
2874
2875    bool Usable = !Constructor->isInvalidDecl() &&
2876                  S.isInitListConstructor(Constructor) &&
2877                  (AllowExplicit || !Constructor->isExplicit());
2878    if (Usable) {
2879      // If the first argument is (a reference to) the target type,
2880      // suppress conversions.
2881      bool SuppressUserConversions =
2882          isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2883      if (ConstructorTmpl)
2884        S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2885                                       /*ExplicitArgs*/ 0,
2886                                       From, CandidateSet,
2887                                       SuppressUserConversions);
2888      else
2889        S.AddOverloadCandidate(Constructor, FoundDecl,
2890                               From, CandidateSet,
2891                               SuppressUserConversions);
2892    }
2893  }
2894
2895  bool HadMultipleCandidates = (CandidateSet.size() > 1);
2896
2897  OverloadCandidateSet::iterator Best;
2898  switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2899  case OR_Success: {
2900    // Record the standard conversion we used and the conversion function.
2901    CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2902    S.MarkFunctionReferenced(From->getLocStart(), Constructor);
2903
2904    QualType ThisType = Constructor->getThisType(S.Context);
2905    // Initializer lists don't have conversions as such.
2906    User.Before.setAsIdentityConversion();
2907    User.HadMultipleCandidates = HadMultipleCandidates;
2908    User.ConversionFunction = Constructor;
2909    User.FoundConversionFunction = Best->FoundDecl;
2910    User.After.setAsIdentityConversion();
2911    User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
2912    User.After.setAllToTypes(ToType);
2913    return OR_Success;
2914  }
2915
2916  case OR_No_Viable_Function:
2917    return OR_No_Viable_Function;
2918  case OR_Deleted:
2919    return OR_Deleted;
2920  case OR_Ambiguous:
2921    return OR_Ambiguous;
2922  }
2923
2924  llvm_unreachable("Invalid OverloadResult!");
2925}
2926
2927/// Determines whether there is a user-defined conversion sequence
2928/// (C++ [over.ics.user]) that converts expression From to the type
2929/// ToType. If such a conversion exists, User will contain the
2930/// user-defined conversion sequence that performs such a conversion
2931/// and this routine will return true. Otherwise, this routine returns
2932/// false and User is unspecified.
2933///
2934/// \param AllowExplicit  true if the conversion should consider C++0x
2935/// "explicit" conversion functions as well as non-explicit conversion
2936/// functions (C++0x [class.conv.fct]p2).
2937static OverloadingResult
2938IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
2939                        UserDefinedConversionSequence &User,
2940                        OverloadCandidateSet &CandidateSet,
2941                        bool AllowExplicit) {
2942  // Whether we will only visit constructors.
2943  bool ConstructorsOnly = false;
2944
2945  // If the type we are conversion to is a class type, enumerate its
2946  // constructors.
2947  if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
2948    // C++ [over.match.ctor]p1:
2949    //   When objects of class type are direct-initialized (8.5), or
2950    //   copy-initialized from an expression of the same or a
2951    //   derived class type (8.5), overload resolution selects the
2952    //   constructor. [...] For copy-initialization, the candidate
2953    //   functions are all the converting constructors (12.3.1) of
2954    //   that class. The argument list is the expression-list within
2955    //   the parentheses of the initializer.
2956    if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
2957        (From->getType()->getAs<RecordType>() &&
2958         S.IsDerivedFrom(From->getType(), ToType)))
2959      ConstructorsOnly = true;
2960
2961    S.RequireCompleteType(From->getLocStart(), ToType, 0);
2962    // RequireCompleteType may have returned true due to some invalid decl
2963    // during template instantiation, but ToType may be complete enough now
2964    // to try to recover.
2965    if (ToType->isIncompleteType()) {
2966      // We're not going to find any constructors.
2967    } else if (CXXRecordDecl *ToRecordDecl
2968                 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
2969
2970      Expr **Args = &From;
2971      unsigned NumArgs = 1;
2972      bool ListInitializing = false;
2973      if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
2974        // But first, see if there is an init-list-contructor that will work.
2975        OverloadingResult Result = IsInitializerListConstructorConversion(
2976            S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
2977        if (Result != OR_No_Viable_Function)
2978          return Result;
2979        // Never mind.
2980        CandidateSet.clear();
2981
2982        // If we're list-initializing, we pass the individual elements as
2983        // arguments, not the entire list.
2984        Args = InitList->getInits();
2985        NumArgs = InitList->getNumInits();
2986        ListInitializing = true;
2987      }
2988
2989      DeclContext::lookup_iterator Con, ConEnd;
2990      for (llvm::tie(Con, ConEnd) = S.LookupConstructors(ToRecordDecl);
2991           Con != ConEnd; ++Con) {
2992        NamedDecl *D = *Con;
2993        DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2994
2995        // Find the constructor (which may be a template).
2996        CXXConstructorDecl *Constructor = 0;
2997        FunctionTemplateDecl *ConstructorTmpl
2998          = dyn_cast<FunctionTemplateDecl>(D);
2999        if (ConstructorTmpl)
3000          Constructor
3001            = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3002        else
3003          Constructor = cast<CXXConstructorDecl>(D);
3004
3005        bool Usable = !Constructor->isInvalidDecl();
3006        if (ListInitializing)
3007          Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3008        else
3009          Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3010        if (Usable) {
3011          bool SuppressUserConversions = !ConstructorsOnly;
3012          if (SuppressUserConversions && ListInitializing) {
3013            SuppressUserConversions = false;
3014            if (NumArgs == 1) {
3015              // If the first argument is (a reference to) the target type,
3016              // suppress conversions.
3017              SuppressUserConversions = isFirstArgumentCompatibleWithType(
3018                                                S.Context, Constructor, ToType);
3019            }
3020          }
3021          if (ConstructorTmpl)
3022            S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3023                                           /*ExplicitArgs*/ 0,
3024                                           llvm::makeArrayRef(Args, NumArgs),
3025                                           CandidateSet, SuppressUserConversions);
3026          else
3027            // Allow one user-defined conversion when user specifies a
3028            // From->ToType conversion via an static cast (c-style, etc).
3029            S.AddOverloadCandidate(Constructor, FoundDecl,
3030                                   llvm::makeArrayRef(Args, NumArgs),
3031                                   CandidateSet, SuppressUserConversions);
3032        }
3033      }
3034    }
3035  }
3036
3037  // Enumerate conversion functions, if we're allowed to.
3038  if (ConstructorsOnly || isa<InitListExpr>(From)) {
3039  } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3040    // No conversion functions from incomplete types.
3041  } else if (const RecordType *FromRecordType
3042                                   = From->getType()->getAs<RecordType>()) {
3043    if (CXXRecordDecl *FromRecordDecl
3044         = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3045      // Add all of the conversion functions as candidates.
3046      const UnresolvedSetImpl *Conversions
3047        = FromRecordDecl->getVisibleConversionFunctions();
3048      for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3049             E = Conversions->end(); I != E; ++I) {
3050        DeclAccessPair FoundDecl = I.getPair();
3051        NamedDecl *D = FoundDecl.getDecl();
3052        CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3053        if (isa<UsingShadowDecl>(D))
3054          D = cast<UsingShadowDecl>(D)->getTargetDecl();
3055
3056        CXXConversionDecl *Conv;
3057        FunctionTemplateDecl *ConvTemplate;
3058        if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3059          Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3060        else
3061          Conv = cast<CXXConversionDecl>(D);
3062
3063        if (AllowExplicit || !Conv->isExplicit()) {
3064          if (ConvTemplate)
3065            S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3066                                             ActingContext, From, ToType,
3067                                             CandidateSet);
3068          else
3069            S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3070                                     From, ToType, CandidateSet);
3071        }
3072      }
3073    }
3074  }
3075
3076  bool HadMultipleCandidates = (CandidateSet.size() > 1);
3077
3078  OverloadCandidateSet::iterator Best;
3079  switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3080  case OR_Success:
3081    // Record the standard conversion we used and the conversion function.
3082    if (CXXConstructorDecl *Constructor
3083          = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3084      S.MarkFunctionReferenced(From->getLocStart(), Constructor);
3085
3086      // C++ [over.ics.user]p1:
3087      //   If the user-defined conversion is specified by a
3088      //   constructor (12.3.1), the initial standard conversion
3089      //   sequence converts the source type to the type required by
3090      //   the argument of the constructor.
3091      //
3092      QualType ThisType = Constructor->getThisType(S.Context);
3093      if (isa<InitListExpr>(From)) {
3094        // Initializer lists don't have conversions as such.
3095        User.Before.setAsIdentityConversion();
3096      } else {
3097        if (Best->Conversions[0].isEllipsis())
3098          User.EllipsisConversion = true;
3099        else {
3100          User.Before = Best->Conversions[0].Standard;
3101          User.EllipsisConversion = false;
3102        }
3103      }
3104      User.HadMultipleCandidates = HadMultipleCandidates;
3105      User.ConversionFunction = Constructor;
3106      User.FoundConversionFunction = Best->FoundDecl;
3107      User.After.setAsIdentityConversion();
3108      User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3109      User.After.setAllToTypes(ToType);
3110      return OR_Success;
3111    }
3112    if (CXXConversionDecl *Conversion
3113                 = dyn_cast<CXXConversionDecl>(Best->Function)) {
3114      S.MarkFunctionReferenced(From->getLocStart(), Conversion);
3115
3116      // C++ [over.ics.user]p1:
3117      //
3118      //   [...] If the user-defined conversion is specified by a
3119      //   conversion function (12.3.2), the initial standard
3120      //   conversion sequence converts the source type to the
3121      //   implicit object parameter of the conversion function.
3122      User.Before = Best->Conversions[0].Standard;
3123      User.HadMultipleCandidates = HadMultipleCandidates;
3124      User.ConversionFunction = Conversion;
3125      User.FoundConversionFunction = Best->FoundDecl;
3126      User.EllipsisConversion = false;
3127
3128      // C++ [over.ics.user]p2:
3129      //   The second standard conversion sequence converts the
3130      //   result of the user-defined conversion to the target type
3131      //   for the sequence. Since an implicit conversion sequence
3132      //   is an initialization, the special rules for
3133      //   initialization by user-defined conversion apply when
3134      //   selecting the best user-defined conversion for a
3135      //   user-defined conversion sequence (see 13.3.3 and
3136      //   13.3.3.1).
3137      User.After = Best->FinalConversion;
3138      return OR_Success;
3139    }
3140    llvm_unreachable("Not a constructor or conversion function?");
3141
3142  case OR_No_Viable_Function:
3143    return OR_No_Viable_Function;
3144  case OR_Deleted:
3145    // No conversion here! We're done.
3146    return OR_Deleted;
3147
3148  case OR_Ambiguous:
3149    return OR_Ambiguous;
3150  }
3151
3152  llvm_unreachable("Invalid OverloadResult!");
3153}
3154
3155bool
3156Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3157  ImplicitConversionSequence ICS;
3158  OverloadCandidateSet CandidateSet(From->getExprLoc());
3159  OverloadingResult OvResult =
3160    IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3161                            CandidateSet, false);
3162  if (OvResult == OR_Ambiguous)
3163    Diag(From->getLocStart(),
3164         diag::err_typecheck_ambiguous_condition)
3165          << From->getType() << ToType << From->getSourceRange();
3166  else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
3167    Diag(From->getLocStart(),
3168         diag::err_typecheck_nonviable_condition)
3169    << From->getType() << ToType << From->getSourceRange();
3170  else
3171    return false;
3172  CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3173  return true;
3174}
3175
3176/// \brief Compare the user-defined conversion functions or constructors
3177/// of two user-defined conversion sequences to determine whether any ordering
3178/// is possible.
3179static ImplicitConversionSequence::CompareKind
3180compareConversionFunctions(Sema &S,
3181                           FunctionDecl *Function1,
3182                           FunctionDecl *Function2) {
3183  if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus0x)
3184    return ImplicitConversionSequence::Indistinguishable;
3185
3186  // Objective-C++:
3187  //   If both conversion functions are implicitly-declared conversions from
3188  //   a lambda closure type to a function pointer and a block pointer,
3189  //   respectively, always prefer the conversion to a function pointer,
3190  //   because the function pointer is more lightweight and is more likely
3191  //   to keep code working.
3192  CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3193  if (!Conv1)
3194    return ImplicitConversionSequence::Indistinguishable;
3195
3196  CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3197  if (!Conv2)
3198    return ImplicitConversionSequence::Indistinguishable;
3199
3200  if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3201    bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3202    bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3203    if (Block1 != Block2)
3204      return Block1? ImplicitConversionSequence::Worse
3205                   : ImplicitConversionSequence::Better;
3206  }
3207
3208  return ImplicitConversionSequence::Indistinguishable;
3209}
3210
3211/// CompareImplicitConversionSequences - Compare two implicit
3212/// conversion sequences to determine whether one is better than the
3213/// other or if they are indistinguishable (C++ 13.3.3.2).
3214static ImplicitConversionSequence::CompareKind
3215CompareImplicitConversionSequences(Sema &S,
3216                                   const ImplicitConversionSequence& ICS1,
3217                                   const ImplicitConversionSequence& ICS2)
3218{
3219  // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3220  // conversion sequences (as defined in 13.3.3.1)
3221  //   -- a standard conversion sequence (13.3.3.1.1) is a better
3222  //      conversion sequence than a user-defined conversion sequence or
3223  //      an ellipsis conversion sequence, and
3224  //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3225  //      conversion sequence than an ellipsis conversion sequence
3226  //      (13.3.3.1.3).
3227  //
3228  // C++0x [over.best.ics]p10:
3229  //   For the purpose of ranking implicit conversion sequences as
3230  //   described in 13.3.3.2, the ambiguous conversion sequence is
3231  //   treated as a user-defined sequence that is indistinguishable
3232  //   from any other user-defined conversion sequence.
3233  if (ICS1.getKindRank() < ICS2.getKindRank())
3234    return ImplicitConversionSequence::Better;
3235  if (ICS2.getKindRank() < ICS1.getKindRank())
3236    return ImplicitConversionSequence::Worse;
3237
3238  // The following checks require both conversion sequences to be of
3239  // the same kind.
3240  if (ICS1.getKind() != ICS2.getKind())
3241    return ImplicitConversionSequence::Indistinguishable;
3242
3243  ImplicitConversionSequence::CompareKind Result =
3244      ImplicitConversionSequence::Indistinguishable;
3245
3246  // Two implicit conversion sequences of the same form are
3247  // indistinguishable conversion sequences unless one of the
3248  // following rules apply: (C++ 13.3.3.2p3):
3249  if (ICS1.isStandard())
3250    Result = CompareStandardConversionSequences(S,
3251                                                ICS1.Standard, ICS2.Standard);
3252  else if (ICS1.isUserDefined()) {
3253    // User-defined conversion sequence U1 is a better conversion
3254    // sequence than another user-defined conversion sequence U2 if
3255    // they contain the same user-defined conversion function or
3256    // constructor and if the second standard conversion sequence of
3257    // U1 is better than the second standard conversion sequence of
3258    // U2 (C++ 13.3.3.2p3).
3259    if (ICS1.UserDefined.ConversionFunction ==
3260          ICS2.UserDefined.ConversionFunction)
3261      Result = CompareStandardConversionSequences(S,
3262                                                  ICS1.UserDefined.After,
3263                                                  ICS2.UserDefined.After);
3264    else
3265      Result = compareConversionFunctions(S,
3266                                          ICS1.UserDefined.ConversionFunction,
3267                                          ICS2.UserDefined.ConversionFunction);
3268  }
3269
3270  // List-initialization sequence L1 is a better conversion sequence than
3271  // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3272  // for some X and L2 does not.
3273  if (Result == ImplicitConversionSequence::Indistinguishable &&
3274      !ICS1.isBad() &&
3275      ICS1.isListInitializationSequence() &&
3276      ICS2.isListInitializationSequence()) {
3277    if (ICS1.isStdInitializerListElement() &&
3278        !ICS2.isStdInitializerListElement())
3279      return ImplicitConversionSequence::Better;
3280    if (!ICS1.isStdInitializerListElement() &&
3281        ICS2.isStdInitializerListElement())
3282      return ImplicitConversionSequence::Worse;
3283  }
3284
3285  return Result;
3286}
3287
3288static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3289  while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3290    Qualifiers Quals;
3291    T1 = Context.getUnqualifiedArrayType(T1, Quals);
3292    T2 = Context.getUnqualifiedArrayType(T2, Quals);
3293  }
3294
3295  return Context.hasSameUnqualifiedType(T1, T2);
3296}
3297
3298// Per 13.3.3.2p3, compare the given standard conversion sequences to
3299// determine if one is a proper subset of the other.
3300static ImplicitConversionSequence::CompareKind
3301compareStandardConversionSubsets(ASTContext &Context,
3302                                 const StandardConversionSequence& SCS1,
3303                                 const StandardConversionSequence& SCS2) {
3304  ImplicitConversionSequence::CompareKind Result
3305    = ImplicitConversionSequence::Indistinguishable;
3306
3307  // the identity conversion sequence is considered to be a subsequence of
3308  // any non-identity conversion sequence
3309  if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3310    return ImplicitConversionSequence::Better;
3311  else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3312    return ImplicitConversionSequence::Worse;
3313
3314  if (SCS1.Second != SCS2.Second) {
3315    if (SCS1.Second == ICK_Identity)
3316      Result = ImplicitConversionSequence::Better;
3317    else if (SCS2.Second == ICK_Identity)
3318      Result = ImplicitConversionSequence::Worse;
3319    else
3320      return ImplicitConversionSequence::Indistinguishable;
3321  } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3322    return ImplicitConversionSequence::Indistinguishable;
3323
3324  if (SCS1.Third == SCS2.Third) {
3325    return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3326                             : ImplicitConversionSequence::Indistinguishable;
3327  }
3328
3329  if (SCS1.Third == ICK_Identity)
3330    return Result == ImplicitConversionSequence::Worse
3331             ? ImplicitConversionSequence::Indistinguishable
3332             : ImplicitConversionSequence::Better;
3333
3334  if (SCS2.Third == ICK_Identity)
3335    return Result == ImplicitConversionSequence::Better
3336             ? ImplicitConversionSequence::Indistinguishable
3337             : ImplicitConversionSequence::Worse;
3338
3339  return ImplicitConversionSequence::Indistinguishable;
3340}
3341
3342/// \brief Determine whether one of the given reference bindings is better
3343/// than the other based on what kind of bindings they are.
3344static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3345                                       const StandardConversionSequence &SCS2) {
3346  // C++0x [over.ics.rank]p3b4:
3347  //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3348  //      implicit object parameter of a non-static member function declared
3349  //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3350  //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3351  //      lvalue reference to a function lvalue and S2 binds an rvalue
3352  //      reference*.
3353  //
3354  // FIXME: Rvalue references. We're going rogue with the above edits,
3355  // because the semantics in the current C++0x working paper (N3225 at the
3356  // time of this writing) break the standard definition of std::forward
3357  // and std::reference_wrapper when dealing with references to functions.
3358  // Proposed wording changes submitted to CWG for consideration.
3359  if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3360      SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3361    return false;
3362
3363  return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3364          SCS2.IsLvalueReference) ||
3365         (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3366          !SCS2.IsLvalueReference);
3367}
3368
3369/// CompareStandardConversionSequences - Compare two standard
3370/// conversion sequences to determine whether one is better than the
3371/// other or if they are indistinguishable (C++ 13.3.3.2p3).
3372static ImplicitConversionSequence::CompareKind
3373CompareStandardConversionSequences(Sema &S,
3374                                   const StandardConversionSequence& SCS1,
3375                                   const StandardConversionSequence& SCS2)
3376{
3377  // Standard conversion sequence S1 is a better conversion sequence
3378  // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3379
3380  //  -- S1 is a proper subsequence of S2 (comparing the conversion
3381  //     sequences in the canonical form defined by 13.3.3.1.1,
3382  //     excluding any Lvalue Transformation; the identity conversion
3383  //     sequence is considered to be a subsequence of any
3384  //     non-identity conversion sequence) or, if not that,
3385  if (ImplicitConversionSequence::CompareKind CK
3386        = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3387    return CK;
3388
3389  //  -- the rank of S1 is better than the rank of S2 (by the rules
3390  //     defined below), or, if not that,
3391  ImplicitConversionRank Rank1 = SCS1.getRank();
3392  ImplicitConversionRank Rank2 = SCS2.getRank();
3393  if (Rank1 < Rank2)
3394    return ImplicitConversionSequence::Better;
3395  else if (Rank2 < Rank1)
3396    return ImplicitConversionSequence::Worse;
3397
3398  // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3399  // are indistinguishable unless one of the following rules
3400  // applies:
3401
3402  //   A conversion that is not a conversion of a pointer, or
3403  //   pointer to member, to bool is better than another conversion
3404  //   that is such a conversion.
3405  if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3406    return SCS2.isPointerConversionToBool()
3407             ? ImplicitConversionSequence::Better
3408             : ImplicitConversionSequence::Worse;
3409
3410  // C++ [over.ics.rank]p4b2:
3411  //
3412  //   If class B is derived directly or indirectly from class A,
3413  //   conversion of B* to A* is better than conversion of B* to
3414  //   void*, and conversion of A* to void* is better than conversion
3415  //   of B* to void*.
3416  bool SCS1ConvertsToVoid
3417    = SCS1.isPointerConversionToVoidPointer(S.Context);
3418  bool SCS2ConvertsToVoid
3419    = SCS2.isPointerConversionToVoidPointer(S.Context);
3420  if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3421    // Exactly one of the conversion sequences is a conversion to
3422    // a void pointer; it's the worse conversion.
3423    return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3424                              : ImplicitConversionSequence::Worse;
3425  } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3426    // Neither conversion sequence converts to a void pointer; compare
3427    // their derived-to-base conversions.
3428    if (ImplicitConversionSequence::CompareKind DerivedCK
3429          = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3430      return DerivedCK;
3431  } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3432             !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3433    // Both conversion sequences are conversions to void
3434    // pointers. Compare the source types to determine if there's an
3435    // inheritance relationship in their sources.
3436    QualType FromType1 = SCS1.getFromType();
3437    QualType FromType2 = SCS2.getFromType();
3438
3439    // Adjust the types we're converting from via the array-to-pointer
3440    // conversion, if we need to.
3441    if (SCS1.First == ICK_Array_To_Pointer)
3442      FromType1 = S.Context.getArrayDecayedType(FromType1);
3443    if (SCS2.First == ICK_Array_To_Pointer)
3444      FromType2 = S.Context.getArrayDecayedType(FromType2);
3445
3446    QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3447    QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3448
3449    if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3450      return ImplicitConversionSequence::Better;
3451    else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3452      return ImplicitConversionSequence::Worse;
3453
3454    // Objective-C++: If one interface is more specific than the
3455    // other, it is the better one.
3456    const ObjCObjectPointerType* FromObjCPtr1
3457      = FromType1->getAs<ObjCObjectPointerType>();
3458    const ObjCObjectPointerType* FromObjCPtr2
3459      = FromType2->getAs<ObjCObjectPointerType>();
3460    if (FromObjCPtr1 && FromObjCPtr2) {
3461      bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3462                                                          FromObjCPtr2);
3463      bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3464                                                           FromObjCPtr1);
3465      if (AssignLeft != AssignRight) {
3466        return AssignLeft? ImplicitConversionSequence::Better
3467                         : ImplicitConversionSequence::Worse;
3468      }
3469    }
3470  }
3471
3472  // Compare based on qualification conversions (C++ 13.3.3.2p3,
3473  // bullet 3).
3474  if (ImplicitConversionSequence::CompareKind QualCK
3475        = CompareQualificationConversions(S, SCS1, SCS2))
3476    return QualCK;
3477
3478  if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3479    // Check for a better reference binding based on the kind of bindings.
3480    if (isBetterReferenceBindingKind(SCS1, SCS2))
3481      return ImplicitConversionSequence::Better;
3482    else if (isBetterReferenceBindingKind(SCS2, SCS1))
3483      return ImplicitConversionSequence::Worse;
3484
3485    // C++ [over.ics.rank]p3b4:
3486    //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3487    //      which the references refer are the same type except for
3488    //      top-level cv-qualifiers, and the type to which the reference
3489    //      initialized by S2 refers is more cv-qualified than the type
3490    //      to which the reference initialized by S1 refers.
3491    QualType T1 = SCS1.getToType(2);
3492    QualType T2 = SCS2.getToType(2);
3493    T1 = S.Context.getCanonicalType(T1);
3494    T2 = S.Context.getCanonicalType(T2);
3495    Qualifiers T1Quals, T2Quals;
3496    QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3497    QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3498    if (UnqualT1 == UnqualT2) {
3499      // Objective-C++ ARC: If the references refer to objects with different
3500      // lifetimes, prefer bindings that don't change lifetime.
3501      if (SCS1.ObjCLifetimeConversionBinding !=
3502                                          SCS2.ObjCLifetimeConversionBinding) {
3503        return SCS1.ObjCLifetimeConversionBinding
3504                                           ? ImplicitConversionSequence::Worse
3505                                           : ImplicitConversionSequence::Better;
3506      }
3507
3508      // If the type is an array type, promote the element qualifiers to the
3509      // type for comparison.
3510      if (isa<ArrayType>(T1) && T1Quals)
3511        T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3512      if (isa<ArrayType>(T2) && T2Quals)
3513        T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3514      if (T2.isMoreQualifiedThan(T1))
3515        return ImplicitConversionSequence::Better;
3516      else if (T1.isMoreQualifiedThan(T2))
3517        return ImplicitConversionSequence::Worse;
3518    }
3519  }
3520
3521  // In Microsoft mode, prefer an integral conversion to a
3522  // floating-to-integral conversion if the integral conversion
3523  // is between types of the same size.
3524  // For example:
3525  // void f(float);
3526  // void f(int);
3527  // int main {
3528  //    long a;
3529  //    f(a);
3530  // }
3531  // Here, MSVC will call f(int) instead of generating a compile error
3532  // as clang will do in standard mode.
3533  if (S.getLangOpts().MicrosoftMode &&
3534      SCS1.Second == ICK_Integral_Conversion &&
3535      SCS2.Second == ICK_Floating_Integral &&
3536      S.Context.getTypeSize(SCS1.getFromType()) ==
3537      S.Context.getTypeSize(SCS1.getToType(2)))
3538    return ImplicitConversionSequence::Better;
3539
3540  return ImplicitConversionSequence::Indistinguishable;
3541}
3542
3543/// CompareQualificationConversions - Compares two standard conversion
3544/// sequences to determine whether they can be ranked based on their
3545/// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3546ImplicitConversionSequence::CompareKind
3547CompareQualificationConversions(Sema &S,
3548                                const StandardConversionSequence& SCS1,
3549                                const StandardConversionSequence& SCS2) {
3550  // C++ 13.3.3.2p3:
3551  //  -- S1 and S2 differ only in their qualification conversion and
3552  //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3553  //     cv-qualification signature of type T1 is a proper subset of
3554  //     the cv-qualification signature of type T2, and S1 is not the
3555  //     deprecated string literal array-to-pointer conversion (4.2).
3556  if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3557      SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3558    return ImplicitConversionSequence::Indistinguishable;
3559
3560  // FIXME: the example in the standard doesn't use a qualification
3561  // conversion (!)
3562  QualType T1 = SCS1.getToType(2);
3563  QualType T2 = SCS2.getToType(2);
3564  T1 = S.Context.getCanonicalType(T1);
3565  T2 = S.Context.getCanonicalType(T2);
3566  Qualifiers T1Quals, T2Quals;
3567  QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3568  QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3569
3570  // If the types are the same, we won't learn anything by unwrapped
3571  // them.
3572  if (UnqualT1 == UnqualT2)
3573    return ImplicitConversionSequence::Indistinguishable;
3574
3575  // If the type is an array type, promote the element qualifiers to the type
3576  // for comparison.
3577  if (isa<ArrayType>(T1) && T1Quals)
3578    T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3579  if (isa<ArrayType>(T2) && T2Quals)
3580    T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3581
3582  ImplicitConversionSequence::CompareKind Result
3583    = ImplicitConversionSequence::Indistinguishable;
3584
3585  // Objective-C++ ARC:
3586  //   Prefer qualification conversions not involving a change in lifetime
3587  //   to qualification conversions that do not change lifetime.
3588  if (SCS1.QualificationIncludesObjCLifetime !=
3589                                      SCS2.QualificationIncludesObjCLifetime) {
3590    Result = SCS1.QualificationIncludesObjCLifetime
3591               ? ImplicitConversionSequence::Worse
3592               : ImplicitConversionSequence::Better;
3593  }
3594
3595  while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3596    // Within each iteration of the loop, we check the qualifiers to
3597    // determine if this still looks like a qualification
3598    // conversion. Then, if all is well, we unwrap one more level of
3599    // pointers or pointers-to-members and do it all again
3600    // until there are no more pointers or pointers-to-members left
3601    // to unwrap. This essentially mimics what
3602    // IsQualificationConversion does, but here we're checking for a
3603    // strict subset of qualifiers.
3604    if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3605      // The qualifiers are the same, so this doesn't tell us anything
3606      // about how the sequences rank.
3607      ;
3608    else if (T2.isMoreQualifiedThan(T1)) {
3609      // T1 has fewer qualifiers, so it could be the better sequence.
3610      if (Result == ImplicitConversionSequence::Worse)
3611        // Neither has qualifiers that are a subset of the other's
3612        // qualifiers.
3613        return ImplicitConversionSequence::Indistinguishable;
3614
3615      Result = ImplicitConversionSequence::Better;
3616    } else if (T1.isMoreQualifiedThan(T2)) {
3617      // T2 has fewer qualifiers, so it could be the better sequence.
3618      if (Result == ImplicitConversionSequence::Better)
3619        // Neither has qualifiers that are a subset of the other's
3620        // qualifiers.
3621        return ImplicitConversionSequence::Indistinguishable;
3622
3623      Result = ImplicitConversionSequence::Worse;
3624    } else {
3625      // Qualifiers are disjoint.
3626      return ImplicitConversionSequence::Indistinguishable;
3627    }
3628
3629    // If the types after this point are equivalent, we're done.
3630    if (S.Context.hasSameUnqualifiedType(T1, T2))
3631      break;
3632  }
3633
3634  // Check that the winning standard conversion sequence isn't using
3635  // the deprecated string literal array to pointer conversion.
3636  switch (Result) {
3637  case ImplicitConversionSequence::Better:
3638    if (SCS1.DeprecatedStringLiteralToCharPtr)
3639      Result = ImplicitConversionSequence::Indistinguishable;
3640    break;
3641
3642  case ImplicitConversionSequence::Indistinguishable:
3643    break;
3644
3645  case ImplicitConversionSequence::Worse:
3646    if (SCS2.DeprecatedStringLiteralToCharPtr)
3647      Result = ImplicitConversionSequence::Indistinguishable;
3648    break;
3649  }
3650
3651  return Result;
3652}
3653
3654/// CompareDerivedToBaseConversions - Compares two standard conversion
3655/// sequences to determine whether they can be ranked based on their
3656/// various kinds of derived-to-base conversions (C++
3657/// [over.ics.rank]p4b3).  As part of these checks, we also look at
3658/// conversions between Objective-C interface types.
3659ImplicitConversionSequence::CompareKind
3660CompareDerivedToBaseConversions(Sema &S,
3661                                const StandardConversionSequence& SCS1,
3662                                const StandardConversionSequence& SCS2) {
3663  QualType FromType1 = SCS1.getFromType();
3664  QualType ToType1 = SCS1.getToType(1);
3665  QualType FromType2 = SCS2.getFromType();
3666  QualType ToType2 = SCS2.getToType(1);
3667
3668  // Adjust the types we're converting from via the array-to-pointer
3669  // conversion, if we need to.
3670  if (SCS1.First == ICK_Array_To_Pointer)
3671    FromType1 = S.Context.getArrayDecayedType(FromType1);
3672  if (SCS2.First == ICK_Array_To_Pointer)
3673    FromType2 = S.Context.getArrayDecayedType(FromType2);
3674
3675  // Canonicalize all of the types.
3676  FromType1 = S.Context.getCanonicalType(FromType1);
3677  ToType1 = S.Context.getCanonicalType(ToType1);
3678  FromType2 = S.Context.getCanonicalType(FromType2);
3679  ToType2 = S.Context.getCanonicalType(ToType2);
3680
3681  // C++ [over.ics.rank]p4b3:
3682  //
3683  //   If class B is derived directly or indirectly from class A and
3684  //   class C is derived directly or indirectly from B,
3685  //
3686  // Compare based on pointer conversions.
3687  if (SCS1.Second == ICK_Pointer_Conversion &&
3688      SCS2.Second == ICK_Pointer_Conversion &&
3689      /*FIXME: Remove if Objective-C id conversions get their own rank*/
3690      FromType1->isPointerType() && FromType2->isPointerType() &&
3691      ToType1->isPointerType() && ToType2->isPointerType()) {
3692    QualType FromPointee1
3693      = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3694    QualType ToPointee1
3695      = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3696    QualType FromPointee2
3697      = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3698    QualType ToPointee2
3699      = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3700
3701    //   -- conversion of C* to B* is better than conversion of C* to A*,
3702    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3703      if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3704        return ImplicitConversionSequence::Better;
3705      else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3706        return ImplicitConversionSequence::Worse;
3707    }
3708
3709    //   -- conversion of B* to A* is better than conversion of C* to A*,
3710    if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3711      if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3712        return ImplicitConversionSequence::Better;
3713      else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3714        return ImplicitConversionSequence::Worse;
3715    }
3716  } else if (SCS1.Second == ICK_Pointer_Conversion &&
3717             SCS2.Second == ICK_Pointer_Conversion) {
3718    const ObjCObjectPointerType *FromPtr1
3719      = FromType1->getAs<ObjCObjectPointerType>();
3720    const ObjCObjectPointerType *FromPtr2
3721      = FromType2->getAs<ObjCObjectPointerType>();
3722    const ObjCObjectPointerType *ToPtr1
3723      = ToType1->getAs<ObjCObjectPointerType>();
3724    const ObjCObjectPointerType *ToPtr2
3725      = ToType2->getAs<ObjCObjectPointerType>();
3726
3727    if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3728      // Apply the same conversion ranking rules for Objective-C pointer types
3729      // that we do for C++ pointers to class types. However, we employ the
3730      // Objective-C pseudo-subtyping relationship used for assignment of
3731      // Objective-C pointer types.
3732      bool FromAssignLeft
3733        = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3734      bool FromAssignRight
3735        = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3736      bool ToAssignLeft
3737        = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3738      bool ToAssignRight
3739        = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3740
3741      // A conversion to an a non-id object pointer type or qualified 'id'
3742      // type is better than a conversion to 'id'.
3743      if (ToPtr1->isObjCIdType() &&
3744          (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3745        return ImplicitConversionSequence::Worse;
3746      if (ToPtr2->isObjCIdType() &&
3747          (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3748        return ImplicitConversionSequence::Better;
3749
3750      // A conversion to a non-id object pointer type is better than a
3751      // conversion to a qualified 'id' type
3752      if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3753        return ImplicitConversionSequence::Worse;
3754      if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3755        return ImplicitConversionSequence::Better;
3756
3757      // A conversion to an a non-Class object pointer type or qualified 'Class'
3758      // type is better than a conversion to 'Class'.
3759      if (ToPtr1->isObjCClassType() &&
3760          (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3761        return ImplicitConversionSequence::Worse;
3762      if (ToPtr2->isObjCClassType() &&
3763          (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3764        return ImplicitConversionSequence::Better;
3765
3766      // A conversion to a non-Class object pointer type is better than a
3767      // conversion to a qualified 'Class' type.
3768      if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3769        return ImplicitConversionSequence::Worse;
3770      if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3771        return ImplicitConversionSequence::Better;
3772
3773      //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3774      if (S.Context.hasSameType(FromType1, FromType2) &&
3775          !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3776          (ToAssignLeft != ToAssignRight))
3777        return ToAssignLeft? ImplicitConversionSequence::Worse
3778                           : ImplicitConversionSequence::Better;
3779
3780      //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3781      if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3782          (FromAssignLeft != FromAssignRight))
3783        return FromAssignLeft? ImplicitConversionSequence::Better
3784        : ImplicitConversionSequence::Worse;
3785    }
3786  }
3787
3788  // Ranking of member-pointer types.
3789  if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3790      FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3791      ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3792    const MemberPointerType * FromMemPointer1 =
3793                                        FromType1->getAs<MemberPointerType>();
3794    const MemberPointerType * ToMemPointer1 =
3795                                          ToType1->getAs<MemberPointerType>();
3796    const MemberPointerType * FromMemPointer2 =
3797                                          FromType2->getAs<MemberPointerType>();
3798    const MemberPointerType * ToMemPointer2 =
3799                                          ToType2->getAs<MemberPointerType>();
3800    const Type *FromPointeeType1 = FromMemPointer1->getClass();
3801    const Type *ToPointeeType1 = ToMemPointer1->getClass();
3802    const Type *FromPointeeType2 = FromMemPointer2->getClass();
3803    const Type *ToPointeeType2 = ToMemPointer2->getClass();
3804    QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3805    QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3806    QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3807    QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3808    // conversion of A::* to B::* is better than conversion of A::* to C::*,
3809    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3810      if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3811        return ImplicitConversionSequence::Worse;
3812      else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3813        return ImplicitConversionSequence::Better;
3814    }
3815    // conversion of B::* to C::* is better than conversion of A::* to C::*
3816    if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3817      if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3818        return ImplicitConversionSequence::Better;
3819      else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3820        return ImplicitConversionSequence::Worse;
3821    }
3822  }
3823
3824  if (SCS1.Second == ICK_Derived_To_Base) {
3825    //   -- conversion of C to B is better than conversion of C to A,
3826    //   -- binding of an expression of type C to a reference of type
3827    //      B& is better than binding an expression of type C to a
3828    //      reference of type A&,
3829    if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3830        !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3831      if (S.IsDerivedFrom(ToType1, ToType2))
3832        return ImplicitConversionSequence::Better;
3833      else if (S.IsDerivedFrom(ToType2, ToType1))
3834        return ImplicitConversionSequence::Worse;
3835    }
3836
3837    //   -- conversion of B to A is better than conversion of C to A.
3838    //   -- binding of an expression of type B to a reference of type
3839    //      A& is better than binding an expression of type C to a
3840    //      reference of type A&,
3841    if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3842        S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3843      if (S.IsDerivedFrom(FromType2, FromType1))
3844        return ImplicitConversionSequence::Better;
3845      else if (S.IsDerivedFrom(FromType1, FromType2))
3846        return ImplicitConversionSequence::Worse;
3847    }
3848  }
3849
3850  return ImplicitConversionSequence::Indistinguishable;
3851}
3852
3853/// CompareReferenceRelationship - Compare the two types T1 and T2 to
3854/// determine whether they are reference-related,
3855/// reference-compatible, reference-compatible with added
3856/// qualification, or incompatible, for use in C++ initialization by
3857/// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3858/// type, and the first type (T1) is the pointee type of the reference
3859/// type being initialized.
3860Sema::ReferenceCompareResult
3861Sema::CompareReferenceRelationship(SourceLocation Loc,
3862                                   QualType OrigT1, QualType OrigT2,
3863                                   bool &DerivedToBase,
3864                                   bool &ObjCConversion,
3865                                   bool &ObjCLifetimeConversion) {
3866  assert(!OrigT1->isReferenceType() &&
3867    "T1 must be the pointee type of the reference type");
3868  assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3869
3870  QualType T1 = Context.getCanonicalType(OrigT1);
3871  QualType T2 = Context.getCanonicalType(OrigT2);
3872  Qualifiers T1Quals, T2Quals;
3873  QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3874  QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3875
3876  // C++ [dcl.init.ref]p4:
3877  //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3878  //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3879  //   T1 is a base class of T2.
3880  DerivedToBase = false;
3881  ObjCConversion = false;
3882  ObjCLifetimeConversion = false;
3883  if (UnqualT1 == UnqualT2) {
3884    // Nothing to do.
3885  } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3886           IsDerivedFrom(UnqualT2, UnqualT1))
3887    DerivedToBase = true;
3888  else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3889           UnqualT2->isObjCObjectOrInterfaceType() &&
3890           Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3891    ObjCConversion = true;
3892  else
3893    return Ref_Incompatible;
3894
3895  // At this point, we know that T1 and T2 are reference-related (at
3896  // least).
3897
3898  // If the type is an array type, promote the element qualifiers to the type
3899  // for comparison.
3900  if (isa<ArrayType>(T1) && T1Quals)
3901    T1 = Context.getQualifiedType(UnqualT1, T1Quals);
3902  if (isa<ArrayType>(T2) && T2Quals)
3903    T2 = Context.getQualifiedType(UnqualT2, T2Quals);
3904
3905  // C++ [dcl.init.ref]p4:
3906  //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
3907  //   reference-related to T2 and cv1 is the same cv-qualification
3908  //   as, or greater cv-qualification than, cv2. For purposes of
3909  //   overload resolution, cases for which cv1 is greater
3910  //   cv-qualification than cv2 are identified as
3911  //   reference-compatible with added qualification (see 13.3.3.2).
3912  //
3913  // Note that we also require equivalence of Objective-C GC and address-space
3914  // qualifiers when performing these computations, so that e.g., an int in
3915  // address space 1 is not reference-compatible with an int in address
3916  // space 2.
3917  if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
3918      T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
3919    T1Quals.removeObjCLifetime();
3920    T2Quals.removeObjCLifetime();
3921    ObjCLifetimeConversion = true;
3922  }
3923
3924  if (T1Quals == T2Quals)
3925    return Ref_Compatible;
3926  else if (T1Quals.compatiblyIncludes(T2Quals))
3927    return Ref_Compatible_With_Added_Qualification;
3928  else
3929    return Ref_Related;
3930}
3931
3932/// \brief Look for a user-defined conversion to an value reference-compatible
3933///        with DeclType. Return true if something definite is found.
3934static bool
3935FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
3936                         QualType DeclType, SourceLocation DeclLoc,
3937                         Expr *Init, QualType T2, bool AllowRvalues,
3938                         bool AllowExplicit) {
3939  assert(T2->isRecordType() && "Can only find conversions of record types.");
3940  CXXRecordDecl *T2RecordDecl
3941    = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
3942
3943  OverloadCandidateSet CandidateSet(DeclLoc);
3944  const UnresolvedSetImpl *Conversions
3945    = T2RecordDecl->getVisibleConversionFunctions();
3946  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3947         E = Conversions->end(); I != E; ++I) {
3948    NamedDecl *D = *I;
3949    CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
3950    if (isa<UsingShadowDecl>(D))
3951      D = cast<UsingShadowDecl>(D)->getTargetDecl();
3952
3953    FunctionTemplateDecl *ConvTemplate
3954      = dyn_cast<FunctionTemplateDecl>(D);
3955    CXXConversionDecl *Conv;
3956    if (ConvTemplate)
3957      Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3958    else
3959      Conv = cast<CXXConversionDecl>(D);
3960
3961    // If this is an explicit conversion, and we're not allowed to consider
3962    // explicit conversions, skip it.
3963    if (!AllowExplicit && Conv->isExplicit())
3964      continue;
3965
3966    if (AllowRvalues) {
3967      bool DerivedToBase = false;
3968      bool ObjCConversion = false;
3969      bool ObjCLifetimeConversion = false;
3970
3971      // If we are initializing an rvalue reference, don't permit conversion
3972      // functions that return lvalues.
3973      if (!ConvTemplate && DeclType->isRValueReferenceType()) {
3974        const ReferenceType *RefType
3975          = Conv->getConversionType()->getAs<LValueReferenceType>();
3976        if (RefType && !RefType->getPointeeType()->isFunctionType())
3977          continue;
3978      }
3979
3980      if (!ConvTemplate &&
3981          S.CompareReferenceRelationship(
3982            DeclLoc,
3983            Conv->getConversionType().getNonReferenceType()
3984              .getUnqualifiedType(),
3985            DeclType.getNonReferenceType().getUnqualifiedType(),
3986            DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
3987          Sema::Ref_Incompatible)
3988        continue;
3989    } else {
3990      // If the conversion function doesn't return a reference type,
3991      // it can't be considered for this conversion. An rvalue reference
3992      // is only acceptable if its referencee is a function type.
3993
3994      const ReferenceType *RefType =
3995        Conv->getConversionType()->getAs<ReferenceType>();
3996      if (!RefType ||
3997          (!RefType->isLValueReferenceType() &&
3998           !RefType->getPointeeType()->isFunctionType()))
3999        continue;
4000    }
4001
4002    if (ConvTemplate)
4003      S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4004                                       Init, DeclType, CandidateSet);
4005    else
4006      S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4007                               DeclType, CandidateSet);
4008  }
4009
4010  bool HadMultipleCandidates = (CandidateSet.size() > 1);
4011
4012  OverloadCandidateSet::iterator Best;
4013  switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4014  case OR_Success:
4015    // C++ [over.ics.ref]p1:
4016    //
4017    //   [...] If the parameter binds directly to the result of
4018    //   applying a conversion function to the argument
4019    //   expression, the implicit conversion sequence is a
4020    //   user-defined conversion sequence (13.3.3.1.2), with the
4021    //   second standard conversion sequence either an identity
4022    //   conversion or, if the conversion function returns an
4023    //   entity of a type that is a derived class of the parameter
4024    //   type, a derived-to-base Conversion.
4025    if (!Best->FinalConversion.DirectBinding)
4026      return false;
4027
4028    if (Best->Function)
4029      S.MarkFunctionReferenced(DeclLoc, Best->Function);
4030    ICS.setUserDefined();
4031    ICS.UserDefined.Before = Best->Conversions[0].Standard;
4032    ICS.UserDefined.After = Best->FinalConversion;
4033    ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4034    ICS.UserDefined.ConversionFunction = Best->Function;
4035    ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4036    ICS.UserDefined.EllipsisConversion = false;
4037    assert(ICS.UserDefined.After.ReferenceBinding &&
4038           ICS.UserDefined.After.DirectBinding &&
4039           "Expected a direct reference binding!");
4040    return true;
4041
4042  case OR_Ambiguous:
4043    ICS.setAmbiguous();
4044    for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4045         Cand != CandidateSet.end(); ++Cand)
4046      if (Cand->Viable)
4047        ICS.Ambiguous.addConversion(Cand->Function);
4048    return true;
4049
4050  case OR_No_Viable_Function:
4051  case OR_Deleted:
4052    // There was no suitable conversion, or we found a deleted
4053    // conversion; continue with other checks.
4054    return false;
4055  }
4056
4057  llvm_unreachable("Invalid OverloadResult!");
4058}
4059
4060/// \brief Compute an implicit conversion sequence for reference
4061/// initialization.
4062static ImplicitConversionSequence
4063TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4064                 SourceLocation DeclLoc,
4065                 bool SuppressUserConversions,
4066                 bool AllowExplicit) {
4067  assert(DeclType->isReferenceType() && "Reference init needs a reference");
4068
4069  // Most paths end in a failed conversion.
4070  ImplicitConversionSequence ICS;
4071  ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4072
4073  QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4074  QualType T2 = Init->getType();
4075
4076  // If the initializer is the address of an overloaded function, try
4077  // to resolve the overloaded function. If all goes well, T2 is the
4078  // type of the resulting function.
4079  if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4080    DeclAccessPair Found;
4081    if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4082                                                                false, Found))
4083      T2 = Fn->getType();
4084  }
4085
4086  // Compute some basic properties of the types and the initializer.
4087  bool isRValRef = DeclType->isRValueReferenceType();
4088  bool DerivedToBase = false;
4089  bool ObjCConversion = false;
4090  bool ObjCLifetimeConversion = false;
4091  Expr::Classification InitCategory = Init->Classify(S.Context);
4092  Sema::ReferenceCompareResult RefRelationship
4093    = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4094                                     ObjCConversion, ObjCLifetimeConversion);
4095
4096
4097  // C++0x [dcl.init.ref]p5:
4098  //   A reference to type "cv1 T1" is initialized by an expression
4099  //   of type "cv2 T2" as follows:
4100
4101  //     -- If reference is an lvalue reference and the initializer expression
4102  if (!isRValRef) {
4103    //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4104    //        reference-compatible with "cv2 T2," or
4105    //
4106    // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4107    if (InitCategory.isLValue() &&
4108        RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4109      // C++ [over.ics.ref]p1:
4110      //   When a parameter of reference type binds directly (8.5.3)
4111      //   to an argument expression, the implicit conversion sequence
4112      //   is the identity conversion, unless the argument expression
4113      //   has a type that is a derived class of the parameter type,
4114      //   in which case the implicit conversion sequence is a
4115      //   derived-to-base Conversion (13.3.3.1).
4116      ICS.setStandard();
4117      ICS.Standard.First = ICK_Identity;
4118      ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4119                         : ObjCConversion? ICK_Compatible_Conversion
4120                         : ICK_Identity;
4121      ICS.Standard.Third = ICK_Identity;
4122      ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4123      ICS.Standard.setToType(0, T2);
4124      ICS.Standard.setToType(1, T1);
4125      ICS.Standard.setToType(2, T1);
4126      ICS.Standard.ReferenceBinding = true;
4127      ICS.Standard.DirectBinding = true;
4128      ICS.Standard.IsLvalueReference = !isRValRef;
4129      ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4130      ICS.Standard.BindsToRvalue = false;
4131      ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4132      ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4133      ICS.Standard.CopyConstructor = 0;
4134
4135      // Nothing more to do: the inaccessibility/ambiguity check for
4136      // derived-to-base conversions is suppressed when we're
4137      // computing the implicit conversion sequence (C++
4138      // [over.best.ics]p2).
4139      return ICS;
4140    }
4141
4142    //       -- has a class type (i.e., T2 is a class type), where T1 is
4143    //          not reference-related to T2, and can be implicitly
4144    //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4145    //          is reference-compatible with "cv3 T3" 92) (this
4146    //          conversion is selected by enumerating the applicable
4147    //          conversion functions (13.3.1.6) and choosing the best
4148    //          one through overload resolution (13.3)),
4149    if (!SuppressUserConversions && T2->isRecordType() &&
4150        !S.RequireCompleteType(DeclLoc, T2, 0) &&
4151        RefRelationship == Sema::Ref_Incompatible) {
4152      if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4153                                   Init, T2, /*AllowRvalues=*/false,
4154                                   AllowExplicit))
4155        return ICS;
4156    }
4157  }
4158
4159  //     -- Otherwise, the reference shall be an lvalue reference to a
4160  //        non-volatile const type (i.e., cv1 shall be const), or the reference
4161  //        shall be an rvalue reference.
4162  //
4163  // We actually handle one oddity of C++ [over.ics.ref] at this
4164  // point, which is that, due to p2 (which short-circuits reference
4165  // binding by only attempting a simple conversion for non-direct
4166  // bindings) and p3's strange wording, we allow a const volatile
4167  // reference to bind to an rvalue. Hence the check for the presence
4168  // of "const" rather than checking for "const" being the only
4169  // qualifier.
4170  // This is also the point where rvalue references and lvalue inits no longer
4171  // go together.
4172  if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4173    return ICS;
4174
4175  //       -- If the initializer expression
4176  //
4177  //            -- is an xvalue, class prvalue, array prvalue or function
4178  //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4179  if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4180      (InitCategory.isXValue() ||
4181      (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4182      (InitCategory.isLValue() && T2->isFunctionType()))) {
4183    ICS.setStandard();
4184    ICS.Standard.First = ICK_Identity;
4185    ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4186                      : ObjCConversion? ICK_Compatible_Conversion
4187                      : ICK_Identity;
4188    ICS.Standard.Third = ICK_Identity;
4189    ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4190    ICS.Standard.setToType(0, T2);
4191    ICS.Standard.setToType(1, T1);
4192    ICS.Standard.setToType(2, T1);
4193    ICS.Standard.ReferenceBinding = true;
4194    // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4195    // binding unless we're binding to a class prvalue.
4196    // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4197    // allow the use of rvalue references in C++98/03 for the benefit of
4198    // standard library implementors; therefore, we need the xvalue check here.
4199    ICS.Standard.DirectBinding =
4200      S.getLangOpts().CPlusPlus0x ||
4201      (InitCategory.isPRValue() && !T2->isRecordType());
4202    ICS.Standard.IsLvalueReference = !isRValRef;
4203    ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4204    ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4205    ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4206    ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4207    ICS.Standard.CopyConstructor = 0;
4208    return ICS;
4209  }
4210
4211  //            -- has a class type (i.e., T2 is a class type), where T1 is not
4212  //               reference-related to T2, and can be implicitly converted to
4213  //               an xvalue, class prvalue, or function lvalue of type
4214  //               "cv3 T3", where "cv1 T1" is reference-compatible with
4215  //               "cv3 T3",
4216  //
4217  //          then the reference is bound to the value of the initializer
4218  //          expression in the first case and to the result of the conversion
4219  //          in the second case (or, in either case, to an appropriate base
4220  //          class subobject).
4221  if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4222      T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4223      FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4224                               Init, T2, /*AllowRvalues=*/true,
4225                               AllowExplicit)) {
4226    // In the second case, if the reference is an rvalue reference
4227    // and the second standard conversion sequence of the
4228    // user-defined conversion sequence includes an lvalue-to-rvalue
4229    // conversion, the program is ill-formed.
4230    if (ICS.isUserDefined() && isRValRef &&
4231        ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4232      ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4233
4234    return ICS;
4235  }
4236
4237  //       -- Otherwise, a temporary of type "cv1 T1" is created and
4238  //          initialized from the initializer expression using the
4239  //          rules for a non-reference copy initialization (8.5). The
4240  //          reference is then bound to the temporary. If T1 is
4241  //          reference-related to T2, cv1 must be the same
4242  //          cv-qualification as, or greater cv-qualification than,
4243  //          cv2; otherwise, the program is ill-formed.
4244  if (RefRelationship == Sema::Ref_Related) {
4245    // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4246    // we would be reference-compatible or reference-compatible with
4247    // added qualification. But that wasn't the case, so the reference
4248    // initialization fails.
4249    //
4250    // Note that we only want to check address spaces and cvr-qualifiers here.
4251    // ObjC GC and lifetime qualifiers aren't important.
4252    Qualifiers T1Quals = T1.getQualifiers();
4253    Qualifiers T2Quals = T2.getQualifiers();
4254    T1Quals.removeObjCGCAttr();
4255    T1Quals.removeObjCLifetime();
4256    T2Quals.removeObjCGCAttr();
4257    T2Quals.removeObjCLifetime();
4258    if (!T1Quals.compatiblyIncludes(T2Quals))
4259      return ICS;
4260  }
4261
4262  // If at least one of the types is a class type, the types are not
4263  // related, and we aren't allowed any user conversions, the
4264  // reference binding fails. This case is important for breaking
4265  // recursion, since TryImplicitConversion below will attempt to
4266  // create a temporary through the use of a copy constructor.
4267  if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4268      (T1->isRecordType() || T2->isRecordType()))
4269    return ICS;
4270
4271  // If T1 is reference-related to T2 and the reference is an rvalue
4272  // reference, the initializer expression shall not be an lvalue.
4273  if (RefRelationship >= Sema::Ref_Related &&
4274      isRValRef && Init->Classify(S.Context).isLValue())
4275    return ICS;
4276
4277  // C++ [over.ics.ref]p2:
4278  //   When a parameter of reference type is not bound directly to
4279  //   an argument expression, the conversion sequence is the one
4280  //   required to convert the argument expression to the
4281  //   underlying type of the reference according to
4282  //   13.3.3.1. Conceptually, this conversion sequence corresponds
4283  //   to copy-initializing a temporary of the underlying type with
4284  //   the argument expression. Any difference in top-level
4285  //   cv-qualification is subsumed by the initialization itself
4286  //   and does not constitute a conversion.
4287  ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4288                              /*AllowExplicit=*/false,
4289                              /*InOverloadResolution=*/false,
4290                              /*CStyle=*/false,
4291                              /*AllowObjCWritebackConversion=*/false);
4292
4293  // Of course, that's still a reference binding.
4294  if (ICS.isStandard()) {
4295    ICS.Standard.ReferenceBinding = true;
4296    ICS.Standard.IsLvalueReference = !isRValRef;
4297    ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4298    ICS.Standard.BindsToRvalue = true;
4299    ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4300    ICS.Standard.ObjCLifetimeConversionBinding = false;
4301  } else if (ICS.isUserDefined()) {
4302    // Don't allow rvalue references to bind to lvalues.
4303    if (DeclType->isRValueReferenceType()) {
4304      if (const ReferenceType *RefType
4305            = ICS.UserDefined.ConversionFunction->getResultType()
4306                ->getAs<LValueReferenceType>()) {
4307        if (!RefType->getPointeeType()->isFunctionType()) {
4308          ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4309                     DeclType);
4310          return ICS;
4311        }
4312      }
4313    }
4314
4315    ICS.UserDefined.After.ReferenceBinding = true;
4316    ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4317    ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4318    ICS.UserDefined.After.BindsToRvalue = true;
4319    ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4320    ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4321  }
4322
4323  return ICS;
4324}
4325
4326static ImplicitConversionSequence
4327TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4328                      bool SuppressUserConversions,
4329                      bool InOverloadResolution,
4330                      bool AllowObjCWritebackConversion,
4331                      bool AllowExplicit = false);
4332
4333/// TryListConversion - Try to copy-initialize a value of type ToType from the
4334/// initializer list From.
4335static ImplicitConversionSequence
4336TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4337                  bool SuppressUserConversions,
4338                  bool InOverloadResolution,
4339                  bool AllowObjCWritebackConversion) {
4340  // C++11 [over.ics.list]p1:
4341  //   When an argument is an initializer list, it is not an expression and
4342  //   special rules apply for converting it to a parameter type.
4343
4344  ImplicitConversionSequence Result;
4345  Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4346  Result.setListInitializationSequence();
4347
4348  // We need a complete type for what follows. Incomplete types can never be
4349  // initialized from init lists.
4350  if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4351    return Result;
4352
4353  // C++11 [over.ics.list]p2:
4354  //   If the parameter type is std::initializer_list<X> or "array of X" and
4355  //   all the elements can be implicitly converted to X, the implicit
4356  //   conversion sequence is the worst conversion necessary to convert an
4357  //   element of the list to X.
4358  bool toStdInitializerList = false;
4359  QualType X;
4360  if (ToType->isArrayType())
4361    X = S.Context.getBaseElementType(ToType);
4362  else
4363    toStdInitializerList = S.isStdInitializerList(ToType, &X);
4364  if (!X.isNull()) {
4365    for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4366      Expr *Init = From->getInit(i);
4367      ImplicitConversionSequence ICS =
4368          TryCopyInitialization(S, Init, X, SuppressUserConversions,
4369                                InOverloadResolution,
4370                                AllowObjCWritebackConversion);
4371      // If a single element isn't convertible, fail.
4372      if (ICS.isBad()) {
4373        Result = ICS;
4374        break;
4375      }
4376      // Otherwise, look for the worst conversion.
4377      if (Result.isBad() ||
4378          CompareImplicitConversionSequences(S, ICS, Result) ==
4379              ImplicitConversionSequence::Worse)
4380        Result = ICS;
4381    }
4382
4383    // For an empty list, we won't have computed any conversion sequence.
4384    // Introduce the identity conversion sequence.
4385    if (From->getNumInits() == 0) {
4386      Result.setStandard();
4387      Result.Standard.setAsIdentityConversion();
4388      Result.Standard.setFromType(ToType);
4389      Result.Standard.setAllToTypes(ToType);
4390    }
4391
4392    Result.setListInitializationSequence();
4393    Result.setStdInitializerListElement(toStdInitializerList);
4394    return Result;
4395  }
4396
4397  // C++11 [over.ics.list]p3:
4398  //   Otherwise, if the parameter is a non-aggregate class X and overload
4399  //   resolution chooses a single best constructor [...] the implicit
4400  //   conversion sequence is a user-defined conversion sequence. If multiple
4401  //   constructors are viable but none is better than the others, the
4402  //   implicit conversion sequence is a user-defined conversion sequence.
4403  if (ToType->isRecordType() && !ToType->isAggregateType()) {
4404    // This function can deal with initializer lists.
4405    Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4406                                      /*AllowExplicit=*/false,
4407                                      InOverloadResolution, /*CStyle=*/false,
4408                                      AllowObjCWritebackConversion);
4409    Result.setListInitializationSequence();
4410    return Result;
4411  }
4412
4413  // C++11 [over.ics.list]p4:
4414  //   Otherwise, if the parameter has an aggregate type which can be
4415  //   initialized from the initializer list [...] the implicit conversion
4416  //   sequence is a user-defined conversion sequence.
4417  if (ToType->isAggregateType()) {
4418    // Type is an aggregate, argument is an init list. At this point it comes
4419    // down to checking whether the initialization works.
4420    // FIXME: Find out whether this parameter is consumed or not.
4421    InitializedEntity Entity =
4422        InitializedEntity::InitializeParameter(S.Context, ToType,
4423                                               /*Consumed=*/false);
4424    if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4425      Result.setUserDefined();
4426      Result.UserDefined.Before.setAsIdentityConversion();
4427      // Initializer lists don't have a type.
4428      Result.UserDefined.Before.setFromType(QualType());
4429      Result.UserDefined.Before.setAllToTypes(QualType());
4430
4431      Result.UserDefined.After.setAsIdentityConversion();
4432      Result.UserDefined.After.setFromType(ToType);
4433      Result.UserDefined.After.setAllToTypes(ToType);
4434      Result.UserDefined.ConversionFunction = 0;
4435    }
4436    return Result;
4437  }
4438
4439  // C++11 [over.ics.list]p5:
4440  //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4441  if (ToType->isReferenceType()) {
4442    // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4443    // mention initializer lists in any way. So we go by what list-
4444    // initialization would do and try to extrapolate from that.
4445
4446    QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4447
4448    // If the initializer list has a single element that is reference-related
4449    // to the parameter type, we initialize the reference from that.
4450    if (From->getNumInits() == 1) {
4451      Expr *Init = From->getInit(0);
4452
4453      QualType T2 = Init->getType();
4454
4455      // If the initializer is the address of an overloaded function, try
4456      // to resolve the overloaded function. If all goes well, T2 is the
4457      // type of the resulting function.
4458      if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4459        DeclAccessPair Found;
4460        if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4461                                   Init, ToType, false, Found))
4462          T2 = Fn->getType();
4463      }
4464
4465      // Compute some basic properties of the types and the initializer.
4466      bool dummy1 = false;
4467      bool dummy2 = false;
4468      bool dummy3 = false;
4469      Sema::ReferenceCompareResult RefRelationship
4470        = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4471                                         dummy2, dummy3);
4472
4473      if (RefRelationship >= Sema::Ref_Related)
4474        return TryReferenceInit(S, Init, ToType,
4475                                /*FIXME:*/From->getLocStart(),
4476                                SuppressUserConversions,
4477                                /*AllowExplicit=*/false);
4478    }
4479
4480    // Otherwise, we bind the reference to a temporary created from the
4481    // initializer list.
4482    Result = TryListConversion(S, From, T1, SuppressUserConversions,
4483                               InOverloadResolution,
4484                               AllowObjCWritebackConversion);
4485    if (Result.isFailure())
4486      return Result;
4487    assert(!Result.isEllipsis() &&
4488           "Sub-initialization cannot result in ellipsis conversion.");
4489
4490    // Can we even bind to a temporary?
4491    if (ToType->isRValueReferenceType() ||
4492        (T1.isConstQualified() && !T1.isVolatileQualified())) {
4493      StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4494                                            Result.UserDefined.After;
4495      SCS.ReferenceBinding = true;
4496      SCS.IsLvalueReference = ToType->isLValueReferenceType();
4497      SCS.BindsToRvalue = true;
4498      SCS.BindsToFunctionLvalue = false;
4499      SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4500      SCS.ObjCLifetimeConversionBinding = false;
4501    } else
4502      Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4503                    From, ToType);
4504    return Result;
4505  }
4506
4507  // C++11 [over.ics.list]p6:
4508  //   Otherwise, if the parameter type is not a class:
4509  if (!ToType->isRecordType()) {
4510    //    - if the initializer list has one element, the implicit conversion
4511    //      sequence is the one required to convert the element to the
4512    //      parameter type.
4513    unsigned NumInits = From->getNumInits();
4514    if (NumInits == 1)
4515      Result = TryCopyInitialization(S, From->getInit(0), ToType,
4516                                     SuppressUserConversions,
4517                                     InOverloadResolution,
4518                                     AllowObjCWritebackConversion);
4519    //    - if the initializer list has no elements, the implicit conversion
4520    //      sequence is the identity conversion.
4521    else if (NumInits == 0) {
4522      Result.setStandard();
4523      Result.Standard.setAsIdentityConversion();
4524      Result.Standard.setFromType(ToType);
4525      Result.Standard.setAllToTypes(ToType);
4526    }
4527    Result.setListInitializationSequence();
4528    return Result;
4529  }
4530
4531  // C++11 [over.ics.list]p7:
4532  //   In all cases other than those enumerated above, no conversion is possible
4533  return Result;
4534}
4535
4536/// TryCopyInitialization - Try to copy-initialize a value of type
4537/// ToType from the expression From. Return the implicit conversion
4538/// sequence required to pass this argument, which may be a bad
4539/// conversion sequence (meaning that the argument cannot be passed to
4540/// a parameter of this type). If @p SuppressUserConversions, then we
4541/// do not permit any user-defined conversion sequences.
4542static ImplicitConversionSequence
4543TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4544                      bool SuppressUserConversions,
4545                      bool InOverloadResolution,
4546                      bool AllowObjCWritebackConversion,
4547                      bool AllowExplicit) {
4548  if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4549    return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4550                             InOverloadResolution,AllowObjCWritebackConversion);
4551
4552  if (ToType->isReferenceType())
4553    return TryReferenceInit(S, From, ToType,
4554                            /*FIXME:*/From->getLocStart(),
4555                            SuppressUserConversions,
4556                            AllowExplicit);
4557
4558  return TryImplicitConversion(S, From, ToType,
4559                               SuppressUserConversions,
4560                               /*AllowExplicit=*/false,
4561                               InOverloadResolution,
4562                               /*CStyle=*/false,
4563                               AllowObjCWritebackConversion);
4564}
4565
4566static bool TryCopyInitialization(const CanQualType FromQTy,
4567                                  const CanQualType ToQTy,
4568                                  Sema &S,
4569                                  SourceLocation Loc,
4570                                  ExprValueKind FromVK) {
4571  OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4572  ImplicitConversionSequence ICS =
4573    TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4574
4575  return !ICS.isBad();
4576}
4577
4578/// TryObjectArgumentInitialization - Try to initialize the object
4579/// parameter of the given member function (@c Method) from the
4580/// expression @p From.
4581static ImplicitConversionSequence
4582TryObjectArgumentInitialization(Sema &S, QualType OrigFromType,
4583                                Expr::Classification FromClassification,
4584                                CXXMethodDecl *Method,
4585                                CXXRecordDecl *ActingContext) {
4586  QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4587  // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4588  //                 const volatile object.
4589  unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4590    Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4591  QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4592
4593  // Set up the conversion sequence as a "bad" conversion, to allow us
4594  // to exit early.
4595  ImplicitConversionSequence ICS;
4596
4597  // We need to have an object of class type.
4598  QualType FromType = OrigFromType;
4599  if (const PointerType *PT = FromType->getAs<PointerType>()) {
4600    FromType = PT->getPointeeType();
4601
4602    // When we had a pointer, it's implicitly dereferenced, so we
4603    // better have an lvalue.
4604    assert(FromClassification.isLValue());
4605  }
4606
4607  assert(FromType->isRecordType());
4608
4609  // C++0x [over.match.funcs]p4:
4610  //   For non-static member functions, the type of the implicit object
4611  //   parameter is
4612  //
4613  //     - "lvalue reference to cv X" for functions declared without a
4614  //        ref-qualifier or with the & ref-qualifier
4615  //     - "rvalue reference to cv X" for functions declared with the &&
4616  //        ref-qualifier
4617  //
4618  // where X is the class of which the function is a member and cv is the
4619  // cv-qualification on the member function declaration.
4620  //
4621  // However, when finding an implicit conversion sequence for the argument, we
4622  // are not allowed to create temporaries or perform user-defined conversions
4623  // (C++ [over.match.funcs]p5). We perform a simplified version of
4624  // reference binding here, that allows class rvalues to bind to
4625  // non-constant references.
4626
4627  // First check the qualifiers.
4628  QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4629  if (ImplicitParamType.getCVRQualifiers()
4630                                    != FromTypeCanon.getLocalCVRQualifiers() &&
4631      !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4632    ICS.setBad(BadConversionSequence::bad_qualifiers,
4633               OrigFromType, ImplicitParamType);
4634    return ICS;
4635  }
4636
4637  // Check that we have either the same type or a derived type. It
4638  // affects the conversion rank.
4639  QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4640  ImplicitConversionKind SecondKind;
4641  if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4642    SecondKind = ICK_Identity;
4643  } else if (S.IsDerivedFrom(FromType, ClassType))
4644    SecondKind = ICK_Derived_To_Base;
4645  else {
4646    ICS.setBad(BadConversionSequence::unrelated_class,
4647               FromType, ImplicitParamType);
4648    return ICS;
4649  }
4650
4651  // Check the ref-qualifier.
4652  switch (Method->getRefQualifier()) {
4653  case RQ_None:
4654    // Do nothing; we don't care about lvalueness or rvalueness.
4655    break;
4656
4657  case RQ_LValue:
4658    if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4659      // non-const lvalue reference cannot bind to an rvalue
4660      ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4661                 ImplicitParamType);
4662      return ICS;
4663    }
4664    break;
4665
4666  case RQ_RValue:
4667    if (!FromClassification.isRValue()) {
4668      // rvalue reference cannot bind to an lvalue
4669      ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4670                 ImplicitParamType);
4671      return ICS;
4672    }
4673    break;
4674  }
4675
4676  // Success. Mark this as a reference binding.
4677  ICS.setStandard();
4678  ICS.Standard.setAsIdentityConversion();
4679  ICS.Standard.Second = SecondKind;
4680  ICS.Standard.setFromType(FromType);
4681  ICS.Standard.setAllToTypes(ImplicitParamType);
4682  ICS.Standard.ReferenceBinding = true;
4683  ICS.Standard.DirectBinding = true;
4684  ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4685  ICS.Standard.BindsToFunctionLvalue = false;
4686  ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4687  ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4688    = (Method->getRefQualifier() == RQ_None);
4689  return ICS;
4690}
4691
4692/// PerformObjectArgumentInitialization - Perform initialization of
4693/// the implicit object parameter for the given Method with the given
4694/// expression.
4695ExprResult
4696Sema::PerformObjectArgumentInitialization(Expr *From,
4697                                          NestedNameSpecifier *Qualifier,
4698                                          NamedDecl *FoundDecl,
4699                                          CXXMethodDecl *Method) {
4700  QualType FromRecordType, DestType;
4701  QualType ImplicitParamRecordType  =
4702    Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4703
4704  Expr::Classification FromClassification;
4705  if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4706    FromRecordType = PT->getPointeeType();
4707    DestType = Method->getThisType(Context);
4708    FromClassification = Expr::Classification::makeSimpleLValue();
4709  } else {
4710    FromRecordType = From->getType();
4711    DestType = ImplicitParamRecordType;
4712    FromClassification = From->Classify(Context);
4713  }
4714
4715  // Note that we always use the true parent context when performing
4716  // the actual argument initialization.
4717  ImplicitConversionSequence ICS
4718    = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4719                                      Method, Method->getParent());
4720  if (ICS.isBad()) {
4721    if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4722      Qualifiers FromQs = FromRecordType.getQualifiers();
4723      Qualifiers ToQs = DestType.getQualifiers();
4724      unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4725      if (CVR) {
4726        Diag(From->getLocStart(),
4727             diag::err_member_function_call_bad_cvr)
4728          << Method->getDeclName() << FromRecordType << (CVR - 1)
4729          << From->getSourceRange();
4730        Diag(Method->getLocation(), diag::note_previous_decl)
4731          << Method->getDeclName();
4732        return ExprError();
4733      }
4734    }
4735
4736    return Diag(From->getLocStart(),
4737                diag::err_implicit_object_parameter_init)
4738       << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4739  }
4740
4741  if (ICS.Standard.Second == ICK_Derived_To_Base) {
4742    ExprResult FromRes =
4743      PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4744    if (FromRes.isInvalid())
4745      return ExprError();
4746    From = FromRes.take();
4747  }
4748
4749  if (!Context.hasSameType(From->getType(), DestType))
4750    From = ImpCastExprToType(From, DestType, CK_NoOp,
4751                             From->getValueKind()).take();
4752  return Owned(From);
4753}
4754
4755/// TryContextuallyConvertToBool - Attempt to contextually convert the
4756/// expression From to bool (C++0x [conv]p3).
4757static ImplicitConversionSequence
4758TryContextuallyConvertToBool(Sema &S, Expr *From) {
4759  // FIXME: This is pretty broken.
4760  return TryImplicitConversion(S, From, S.Context.BoolTy,
4761                               // FIXME: Are these flags correct?
4762                               /*SuppressUserConversions=*/false,
4763                               /*AllowExplicit=*/true,
4764                               /*InOverloadResolution=*/false,
4765                               /*CStyle=*/false,
4766                               /*AllowObjCWritebackConversion=*/false);
4767}
4768
4769/// PerformContextuallyConvertToBool - Perform a contextual conversion
4770/// of the expression From to bool (C++0x [conv]p3).
4771ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4772  if (checkPlaceholderForOverload(*this, From))
4773    return ExprError();
4774
4775  ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4776  if (!ICS.isBad())
4777    return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4778
4779  if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4780    return Diag(From->getLocStart(),
4781                diag::err_typecheck_bool_condition)
4782                  << From->getType() << From->getSourceRange();
4783  return ExprError();
4784}
4785
4786/// Check that the specified conversion is permitted in a converted constant
4787/// expression, according to C++11 [expr.const]p3. Return true if the conversion
4788/// is acceptable.
4789static bool CheckConvertedConstantConversions(Sema &S,
4790                                              StandardConversionSequence &SCS) {
4791  // Since we know that the target type is an integral or unscoped enumeration
4792  // type, most conversion kinds are impossible. All possible First and Third
4793  // conversions are fine.
4794  switch (SCS.Second) {
4795  case ICK_Identity:
4796  case ICK_Integral_Promotion:
4797  case ICK_Integral_Conversion:
4798    return true;
4799
4800  case ICK_Boolean_Conversion:
4801    // Conversion from an integral or unscoped enumeration type to bool is
4802    // classified as ICK_Boolean_Conversion, but it's also an integral
4803    // conversion, so it's permitted in a converted constant expression.
4804    return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4805           SCS.getToType(2)->isBooleanType();
4806
4807  case ICK_Floating_Integral:
4808  case ICK_Complex_Real:
4809    return false;
4810
4811  case ICK_Lvalue_To_Rvalue:
4812  case ICK_Array_To_Pointer:
4813  case ICK_Function_To_Pointer:
4814  case ICK_NoReturn_Adjustment:
4815  case ICK_Qualification:
4816  case ICK_Compatible_Conversion:
4817  case ICK_Vector_Conversion:
4818  case ICK_Vector_Splat:
4819  case ICK_Derived_To_Base:
4820  case ICK_Pointer_Conversion:
4821  case ICK_Pointer_Member:
4822  case ICK_Block_Pointer_Conversion:
4823  case ICK_Writeback_Conversion:
4824  case ICK_Floating_Promotion:
4825  case ICK_Complex_Promotion:
4826  case ICK_Complex_Conversion:
4827  case ICK_Floating_Conversion:
4828  case ICK_TransparentUnionConversion:
4829    llvm_unreachable("unexpected second conversion kind");
4830
4831  case ICK_Num_Conversion_Kinds:
4832    break;
4833  }
4834
4835  llvm_unreachable("unknown conversion kind");
4836}
4837
4838/// CheckConvertedConstantExpression - Check that the expression From is a
4839/// converted constant expression of type T, perform the conversion and produce
4840/// the converted expression, per C++11 [expr.const]p3.
4841ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4842                                                  llvm::APSInt &Value,
4843                                                  CCEKind CCE) {
4844  assert(LangOpts.CPlusPlus0x && "converted constant expression outside C++11");
4845  assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4846
4847  if (checkPlaceholderForOverload(*this, From))
4848    return ExprError();
4849
4850  // C++11 [expr.const]p3 with proposed wording fixes:
4851  //  A converted constant expression of type T is a core constant expression,
4852  //  implicitly converted to a prvalue of type T, where the converted
4853  //  expression is a literal constant expression and the implicit conversion
4854  //  sequence contains only user-defined conversions, lvalue-to-rvalue
4855  //  conversions, integral promotions, and integral conversions other than
4856  //  narrowing conversions.
4857  ImplicitConversionSequence ICS =
4858    TryImplicitConversion(From, T,
4859                          /*SuppressUserConversions=*/false,
4860                          /*AllowExplicit=*/false,
4861                          /*InOverloadResolution=*/false,
4862                          /*CStyle=*/false,
4863                          /*AllowObjcWritebackConversion=*/false);
4864  StandardConversionSequence *SCS = 0;
4865  switch (ICS.getKind()) {
4866  case ImplicitConversionSequence::StandardConversion:
4867    if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4868      return Diag(From->getLocStart(),
4869                  diag::err_typecheck_converted_constant_expression_disallowed)
4870               << From->getType() << From->getSourceRange() << T;
4871    SCS = &ICS.Standard;
4872    break;
4873  case ImplicitConversionSequence::UserDefinedConversion:
4874    // We are converting from class type to an integral or enumeration type, so
4875    // the Before sequence must be trivial.
4876    if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4877      return Diag(From->getLocStart(),
4878                  diag::err_typecheck_converted_constant_expression_disallowed)
4879               << From->getType() << From->getSourceRange() << T;
4880    SCS = &ICS.UserDefined.After;
4881    break;
4882  case ImplicitConversionSequence::AmbiguousConversion:
4883  case ImplicitConversionSequence::BadConversion:
4884    if (!DiagnoseMultipleUserDefinedConversion(From, T))
4885      return Diag(From->getLocStart(),
4886                  diag::err_typecheck_converted_constant_expression)
4887                    << From->getType() << From->getSourceRange() << T;
4888    return ExprError();
4889
4890  case ImplicitConversionSequence::EllipsisConversion:
4891    llvm_unreachable("ellipsis conversion in converted constant expression");
4892  }
4893
4894  ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4895  if (Result.isInvalid())
4896    return Result;
4897
4898  // Check for a narrowing implicit conversion.
4899  APValue PreNarrowingValue;
4900  QualType PreNarrowingType;
4901  switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
4902                                PreNarrowingType)) {
4903  case NK_Variable_Narrowing:
4904    // Implicit conversion to a narrower type, and the value is not a constant
4905    // expression. We'll diagnose this in a moment.
4906  case NK_Not_Narrowing:
4907    break;
4908
4909  case NK_Constant_Narrowing:
4910    Diag(From->getLocStart(),
4911         isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4912                             diag::err_cce_narrowing)
4913      << CCE << /*Constant*/1
4914      << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
4915    break;
4916
4917  case NK_Type_Narrowing:
4918    Diag(From->getLocStart(),
4919         isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
4920                             diag::err_cce_narrowing)
4921      << CCE << /*Constant*/0 << From->getType() << T;
4922    break;
4923  }
4924
4925  // Check the expression is a constant expression.
4926  llvm::SmallVector<PartialDiagnosticAt, 8> Notes;
4927  Expr::EvalResult Eval;
4928  Eval.Diag = &Notes;
4929
4930  if (!Result.get()->EvaluateAsRValue(Eval, Context)) {
4931    // The expression can't be folded, so we can't keep it at this position in
4932    // the AST.
4933    Result = ExprError();
4934  } else {
4935    Value = Eval.Val.getInt();
4936
4937    if (Notes.empty()) {
4938      // It's a constant expression.
4939      return Result;
4940    }
4941  }
4942
4943  // It's not a constant expression. Produce an appropriate diagnostic.
4944  if (Notes.size() == 1 &&
4945      Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
4946    Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
4947  else {
4948    Diag(From->getLocStart(), diag::err_expr_not_cce)
4949      << CCE << From->getSourceRange();
4950    for (unsigned I = 0; I < Notes.size(); ++I)
4951      Diag(Notes[I].first, Notes[I].second);
4952  }
4953  return Result;
4954}
4955
4956/// dropPointerConversions - If the given standard conversion sequence
4957/// involves any pointer conversions, remove them.  This may change
4958/// the result type of the conversion sequence.
4959static void dropPointerConversion(StandardConversionSequence &SCS) {
4960  if (SCS.Second == ICK_Pointer_Conversion) {
4961    SCS.Second = ICK_Identity;
4962    SCS.Third = ICK_Identity;
4963    SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
4964  }
4965}
4966
4967/// TryContextuallyConvertToObjCPointer - Attempt to contextually
4968/// convert the expression From to an Objective-C pointer type.
4969static ImplicitConversionSequence
4970TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
4971  // Do an implicit conversion to 'id'.
4972  QualType Ty = S.Context.getObjCIdType();
4973  ImplicitConversionSequence ICS
4974    = TryImplicitConversion(S, From, Ty,
4975                            // FIXME: Are these flags correct?
4976                            /*SuppressUserConversions=*/false,
4977                            /*AllowExplicit=*/true,
4978                            /*InOverloadResolution=*/false,
4979                            /*CStyle=*/false,
4980                            /*AllowObjCWritebackConversion=*/false);
4981
4982  // Strip off any final conversions to 'id'.
4983  switch (ICS.getKind()) {
4984  case ImplicitConversionSequence::BadConversion:
4985  case ImplicitConversionSequence::AmbiguousConversion:
4986  case ImplicitConversionSequence::EllipsisConversion:
4987    break;
4988
4989  case ImplicitConversionSequence::UserDefinedConversion:
4990    dropPointerConversion(ICS.UserDefined.After);
4991    break;
4992
4993  case ImplicitConversionSequence::StandardConversion:
4994    dropPointerConversion(ICS.Standard);
4995    break;
4996  }
4997
4998  return ICS;
4999}
5000
5001/// PerformContextuallyConvertToObjCPointer - Perform a contextual
5002/// conversion of the expression From to an Objective-C pointer type.
5003ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5004  if (checkPlaceholderForOverload(*this, From))
5005    return ExprError();
5006
5007  QualType Ty = Context.getObjCIdType();
5008  ImplicitConversionSequence ICS =
5009    TryContextuallyConvertToObjCPointer(*this, From);
5010  if (!ICS.isBad())
5011    return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5012  return ExprError();
5013}
5014
5015/// Determine whether the provided type is an integral type, or an enumeration
5016/// type of a permitted flavor.
5017static bool isIntegralOrEnumerationType(QualType T, bool AllowScopedEnum) {
5018  return AllowScopedEnum ? T->isIntegralOrEnumerationType()
5019                         : T->isIntegralOrUnscopedEnumerationType();
5020}
5021
5022/// \brief Attempt to convert the given expression to an integral or
5023/// enumeration type.
5024///
5025/// This routine will attempt to convert an expression of class type to an
5026/// integral or enumeration type, if that class type only has a single
5027/// conversion to an integral or enumeration type.
5028///
5029/// \param Loc The source location of the construct that requires the
5030/// conversion.
5031///
5032/// \param From The expression we're converting from.
5033///
5034/// \param Diagnoser Used to output any diagnostics.
5035///
5036/// \param AllowScopedEnumerations Specifies whether conversions to scoped
5037/// enumerations should be considered.
5038///
5039/// \returns The expression, converted to an integral or enumeration type if
5040/// successful.
5041ExprResult
5042Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From,
5043                                         ICEConvertDiagnoser &Diagnoser,
5044                                         bool AllowScopedEnumerations) {
5045  // We can't perform any more checking for type-dependent expressions.
5046  if (From->isTypeDependent())
5047    return Owned(From);
5048
5049  // Process placeholders immediately.
5050  if (From->hasPlaceholderType()) {
5051    ExprResult result = CheckPlaceholderExpr(From);
5052    if (result.isInvalid()) return result;
5053    From = result.take();
5054  }
5055
5056  // If the expression already has integral or enumeration type, we're golden.
5057  QualType T = From->getType();
5058  if (isIntegralOrEnumerationType(T, AllowScopedEnumerations))
5059    return DefaultLvalueConversion(From);
5060
5061  // FIXME: Check for missing '()' if T is a function type?
5062
5063  // If we don't have a class type in C++, there's no way we can get an
5064  // expression of integral or enumeration type.
5065  const RecordType *RecordTy = T->getAs<RecordType>();
5066  if (!RecordTy || !getLangOpts().CPlusPlus) {
5067    if (!Diagnoser.Suppress)
5068      Diagnoser.diagnoseNotInt(*this, Loc, T) << From->getSourceRange();
5069    return Owned(From);
5070  }
5071
5072  // We must have a complete class type.
5073  struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5074    ICEConvertDiagnoser &Diagnoser;
5075    Expr *From;
5076
5077    TypeDiagnoserPartialDiag(ICEConvertDiagnoser &Diagnoser, Expr *From)
5078      : TypeDiagnoser(Diagnoser.Suppress), Diagnoser(Diagnoser), From(From) {}
5079
5080    virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5081      Diagnoser.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5082    }
5083  } IncompleteDiagnoser(Diagnoser, From);
5084
5085  if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5086    return Owned(From);
5087
5088  // Look for a conversion to an integral or enumeration type.
5089  UnresolvedSet<4> ViableConversions;
5090  UnresolvedSet<4> ExplicitConversions;
5091  const UnresolvedSetImpl *Conversions
5092    = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5093
5094  bool HadMultipleCandidates = (Conversions->size() > 1);
5095
5096  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
5097                                   E = Conversions->end();
5098       I != E;
5099       ++I) {
5100    if (CXXConversionDecl *Conversion
5101          = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl())) {
5102      if (isIntegralOrEnumerationType(
5103            Conversion->getConversionType().getNonReferenceType(),
5104            AllowScopedEnumerations)) {
5105        if (Conversion->isExplicit())
5106          ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5107        else
5108          ViableConversions.addDecl(I.getDecl(), I.getAccess());
5109      }
5110    }
5111  }
5112
5113  switch (ViableConversions.size()) {
5114  case 0:
5115    if (ExplicitConversions.size() == 1 && !Diagnoser.Suppress) {
5116      DeclAccessPair Found = ExplicitConversions[0];
5117      CXXConversionDecl *Conversion
5118        = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5119
5120      // The user probably meant to invoke the given explicit
5121      // conversion; use it.
5122      QualType ConvTy
5123        = Conversion->getConversionType().getNonReferenceType();
5124      std::string TypeStr;
5125      ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy());
5126
5127      Diagnoser.diagnoseExplicitConv(*this, Loc, T, ConvTy)
5128        << FixItHint::CreateInsertion(From->getLocStart(),
5129                                      "static_cast<" + TypeStr + ">(")
5130        << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()),
5131                                      ")");
5132      Diagnoser.noteExplicitConv(*this, Conversion, ConvTy);
5133
5134      // If we aren't in a SFINAE context, build a call to the
5135      // explicit conversion function.
5136      if (isSFINAEContext())
5137        return ExprError();
5138
5139      CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5140      ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5141                                                 HadMultipleCandidates);
5142      if (Result.isInvalid())
5143        return ExprError();
5144      // Record usage of conversion in an implicit cast.
5145      From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5146                                      CK_UserDefinedConversion,
5147                                      Result.get(), 0,
5148                                      Result.get()->getValueKind());
5149    }
5150
5151    // We'll complain below about a non-integral condition type.
5152    break;
5153
5154  case 1: {
5155    // Apply this conversion.
5156    DeclAccessPair Found = ViableConversions[0];
5157    CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5158
5159    CXXConversionDecl *Conversion
5160      = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5161    QualType ConvTy
5162      = Conversion->getConversionType().getNonReferenceType();
5163    if (!Diagnoser.SuppressConversion) {
5164      if (isSFINAEContext())
5165        return ExprError();
5166
5167      Diagnoser.diagnoseConversion(*this, Loc, T, ConvTy)
5168        << From->getSourceRange();
5169    }
5170
5171    ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5172                                               HadMultipleCandidates);
5173    if (Result.isInvalid())
5174      return ExprError();
5175    // Record usage of conversion in an implicit cast.
5176    From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5177                                    CK_UserDefinedConversion,
5178                                    Result.get(), 0,
5179                                    Result.get()->getValueKind());
5180    break;
5181  }
5182
5183  default:
5184    if (Diagnoser.Suppress)
5185      return ExprError();
5186
5187    Diagnoser.diagnoseAmbiguous(*this, Loc, T) << From->getSourceRange();
5188    for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5189      CXXConversionDecl *Conv
5190        = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5191      QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5192      Diagnoser.noteAmbiguous(*this, Conv, ConvTy);
5193    }
5194    return Owned(From);
5195  }
5196
5197  if (!isIntegralOrEnumerationType(From->getType(), AllowScopedEnumerations) &&
5198      !Diagnoser.Suppress) {
5199    Diagnoser.diagnoseNotInt(*this, Loc, From->getType())
5200      << From->getSourceRange();
5201  }
5202
5203  return DefaultLvalueConversion(From);
5204}
5205
5206/// AddOverloadCandidate - Adds the given function to the set of
5207/// candidate functions, using the given function call arguments.  If
5208/// @p SuppressUserConversions, then don't allow user-defined
5209/// conversions via constructors or conversion operators.
5210///
5211/// \param PartialOverloading true if we are performing "partial" overloading
5212/// based on an incomplete set of function arguments. This feature is used by
5213/// code completion.
5214void
5215Sema::AddOverloadCandidate(FunctionDecl *Function,
5216                           DeclAccessPair FoundDecl,
5217                           llvm::ArrayRef<Expr *> Args,
5218                           OverloadCandidateSet& CandidateSet,
5219                           bool SuppressUserConversions,
5220                           bool PartialOverloading,
5221                           bool AllowExplicit) {
5222  const FunctionProtoType* Proto
5223    = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5224  assert(Proto && "Functions without a prototype cannot be overloaded");
5225  assert(!Function->getDescribedFunctionTemplate() &&
5226         "Use AddTemplateOverloadCandidate for function templates");
5227
5228  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5229    if (!isa<CXXConstructorDecl>(Method)) {
5230      // If we get here, it's because we're calling a member function
5231      // that is named without a member access expression (e.g.,
5232      // "this->f") that was either written explicitly or created
5233      // implicitly. This can happen with a qualified call to a member
5234      // function, e.g., X::f(). We use an empty type for the implied
5235      // object argument (C++ [over.call.func]p3), and the acting context
5236      // is irrelevant.
5237      AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5238                         QualType(), Expr::Classification::makeSimpleLValue(),
5239                         Args, CandidateSet, SuppressUserConversions);
5240      return;
5241    }
5242    // We treat a constructor like a non-member function, since its object
5243    // argument doesn't participate in overload resolution.
5244  }
5245
5246  if (!CandidateSet.isNewCandidate(Function))
5247    return;
5248
5249  // Overload resolution is always an unevaluated context.
5250  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5251
5252  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5253    // C++ [class.copy]p3:
5254    //   A member function template is never instantiated to perform the copy
5255    //   of a class object to an object of its class type.
5256    QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5257    if (Args.size() == 1 &&
5258        Constructor->isSpecializationCopyingObject() &&
5259        (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5260         IsDerivedFrom(Args[0]->getType(), ClassType)))
5261      return;
5262  }
5263
5264  // Add this candidate
5265  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5266  Candidate.FoundDecl = FoundDecl;
5267  Candidate.Function = Function;
5268  Candidate.Viable = true;
5269  Candidate.IsSurrogate = false;
5270  Candidate.IgnoreObjectArgument = false;
5271  Candidate.ExplicitCallArguments = Args.size();
5272
5273  unsigned NumArgsInProto = Proto->getNumArgs();
5274
5275  // (C++ 13.3.2p2): A candidate function having fewer than m
5276  // parameters is viable only if it has an ellipsis in its parameter
5277  // list (8.3.5).
5278  if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5279      !Proto->isVariadic()) {
5280    Candidate.Viable = false;
5281    Candidate.FailureKind = ovl_fail_too_many_arguments;
5282    return;
5283  }
5284
5285  // (C++ 13.3.2p2): A candidate function having more than m parameters
5286  // is viable only if the (m+1)st parameter has a default argument
5287  // (8.3.6). For the purposes of overload resolution, the
5288  // parameter list is truncated on the right, so that there are
5289  // exactly m parameters.
5290  unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5291  if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5292    // Not enough arguments.
5293    Candidate.Viable = false;
5294    Candidate.FailureKind = ovl_fail_too_few_arguments;
5295    return;
5296  }
5297
5298  // (CUDA B.1): Check for invalid calls between targets.
5299  if (getLangOpts().CUDA)
5300    if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5301      if (CheckCUDATarget(Caller, Function)) {
5302        Candidate.Viable = false;
5303        Candidate.FailureKind = ovl_fail_bad_target;
5304        return;
5305      }
5306
5307  // Determine the implicit conversion sequences for each of the
5308  // arguments.
5309  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5310    if (ArgIdx < NumArgsInProto) {
5311      // (C++ 13.3.2p3): for F to be a viable function, there shall
5312      // exist for each argument an implicit conversion sequence
5313      // (13.3.3.1) that converts that argument to the corresponding
5314      // parameter of F.
5315      QualType ParamType = Proto->getArgType(ArgIdx);
5316      Candidate.Conversions[ArgIdx]
5317        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5318                                SuppressUserConversions,
5319                                /*InOverloadResolution=*/true,
5320                                /*AllowObjCWritebackConversion=*/
5321                                  getLangOpts().ObjCAutoRefCount,
5322                                AllowExplicit);
5323      if (Candidate.Conversions[ArgIdx].isBad()) {
5324        Candidate.Viable = false;
5325        Candidate.FailureKind = ovl_fail_bad_conversion;
5326        break;
5327      }
5328    } else {
5329      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5330      // argument for which there is no corresponding parameter is
5331      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5332      Candidate.Conversions[ArgIdx].setEllipsis();
5333    }
5334  }
5335}
5336
5337/// \brief Add all of the function declarations in the given function set to
5338/// the overload canddiate set.
5339void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5340                                 llvm::ArrayRef<Expr *> Args,
5341                                 OverloadCandidateSet& CandidateSet,
5342                                 bool SuppressUserConversions,
5343                               TemplateArgumentListInfo *ExplicitTemplateArgs) {
5344  for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5345    NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5346    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5347      if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5348        AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5349                           cast<CXXMethodDecl>(FD)->getParent(),
5350                           Args[0]->getType(), Args[0]->Classify(Context),
5351                           Args.slice(1), CandidateSet,
5352                           SuppressUserConversions);
5353      else
5354        AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5355                             SuppressUserConversions);
5356    } else {
5357      FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5358      if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5359          !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5360        AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5361                              cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5362                                   ExplicitTemplateArgs,
5363                                   Args[0]->getType(),
5364                                   Args[0]->Classify(Context), Args.slice(1),
5365                                   CandidateSet, SuppressUserConversions);
5366      else
5367        AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5368                                     ExplicitTemplateArgs, Args,
5369                                     CandidateSet, SuppressUserConversions);
5370    }
5371  }
5372}
5373
5374/// AddMethodCandidate - Adds a named decl (which is some kind of
5375/// method) as a method candidate to the given overload set.
5376void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5377                              QualType ObjectType,
5378                              Expr::Classification ObjectClassification,
5379                              Expr **Args, unsigned NumArgs,
5380                              OverloadCandidateSet& CandidateSet,
5381                              bool SuppressUserConversions) {
5382  NamedDecl *Decl = FoundDecl.getDecl();
5383  CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5384
5385  if (isa<UsingShadowDecl>(Decl))
5386    Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5387
5388  if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5389    assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5390           "Expected a member function template");
5391    AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5392                               /*ExplicitArgs*/ 0,
5393                               ObjectType, ObjectClassification,
5394                               llvm::makeArrayRef(Args, NumArgs), CandidateSet,
5395                               SuppressUserConversions);
5396  } else {
5397    AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5398                       ObjectType, ObjectClassification,
5399                       llvm::makeArrayRef(Args, NumArgs),
5400                       CandidateSet, SuppressUserConversions);
5401  }
5402}
5403
5404/// AddMethodCandidate - Adds the given C++ member function to the set
5405/// of candidate functions, using the given function call arguments
5406/// and the object argument (@c Object). For example, in a call
5407/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5408/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5409/// allow user-defined conversions via constructors or conversion
5410/// operators.
5411void
5412Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5413                         CXXRecordDecl *ActingContext, QualType ObjectType,
5414                         Expr::Classification ObjectClassification,
5415                         llvm::ArrayRef<Expr *> Args,
5416                         OverloadCandidateSet& CandidateSet,
5417                         bool SuppressUserConversions) {
5418  const FunctionProtoType* Proto
5419    = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5420  assert(Proto && "Methods without a prototype cannot be overloaded");
5421  assert(!isa<CXXConstructorDecl>(Method) &&
5422         "Use AddOverloadCandidate for constructors");
5423
5424  if (!CandidateSet.isNewCandidate(Method))
5425    return;
5426
5427  // Overload resolution is always an unevaluated context.
5428  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5429
5430  // Add this candidate
5431  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5432  Candidate.FoundDecl = FoundDecl;
5433  Candidate.Function = Method;
5434  Candidate.IsSurrogate = false;
5435  Candidate.IgnoreObjectArgument = false;
5436  Candidate.ExplicitCallArguments = Args.size();
5437
5438  unsigned NumArgsInProto = Proto->getNumArgs();
5439
5440  // (C++ 13.3.2p2): A candidate function having fewer than m
5441  // parameters is viable only if it has an ellipsis in its parameter
5442  // list (8.3.5).
5443  if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5444    Candidate.Viable = false;
5445    Candidate.FailureKind = ovl_fail_too_many_arguments;
5446    return;
5447  }
5448
5449  // (C++ 13.3.2p2): A candidate function having more than m parameters
5450  // is viable only if the (m+1)st parameter has a default argument
5451  // (8.3.6). For the purposes of overload resolution, the
5452  // parameter list is truncated on the right, so that there are
5453  // exactly m parameters.
5454  unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5455  if (Args.size() < MinRequiredArgs) {
5456    // Not enough arguments.
5457    Candidate.Viable = false;
5458    Candidate.FailureKind = ovl_fail_too_few_arguments;
5459    return;
5460  }
5461
5462  Candidate.Viable = true;
5463
5464  if (Method->isStatic() || ObjectType.isNull())
5465    // The implicit object argument is ignored.
5466    Candidate.IgnoreObjectArgument = true;
5467  else {
5468    // Determine the implicit conversion sequence for the object
5469    // parameter.
5470    Candidate.Conversions[0]
5471      = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5472                                        Method, ActingContext);
5473    if (Candidate.Conversions[0].isBad()) {
5474      Candidate.Viable = false;
5475      Candidate.FailureKind = ovl_fail_bad_conversion;
5476      return;
5477    }
5478  }
5479
5480  // Determine the implicit conversion sequences for each of the
5481  // arguments.
5482  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5483    if (ArgIdx < NumArgsInProto) {
5484      // (C++ 13.3.2p3): for F to be a viable function, there shall
5485      // exist for each argument an implicit conversion sequence
5486      // (13.3.3.1) that converts that argument to the corresponding
5487      // parameter of F.
5488      QualType ParamType = Proto->getArgType(ArgIdx);
5489      Candidate.Conversions[ArgIdx + 1]
5490        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5491                                SuppressUserConversions,
5492                                /*InOverloadResolution=*/true,
5493                                /*AllowObjCWritebackConversion=*/
5494                                  getLangOpts().ObjCAutoRefCount);
5495      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5496        Candidate.Viable = false;
5497        Candidate.FailureKind = ovl_fail_bad_conversion;
5498        break;
5499      }
5500    } else {
5501      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5502      // argument for which there is no corresponding parameter is
5503      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5504      Candidate.Conversions[ArgIdx + 1].setEllipsis();
5505    }
5506  }
5507}
5508
5509/// \brief Add a C++ member function template as a candidate to the candidate
5510/// set, using template argument deduction to produce an appropriate member
5511/// function template specialization.
5512void
5513Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5514                                 DeclAccessPair FoundDecl,
5515                                 CXXRecordDecl *ActingContext,
5516                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
5517                                 QualType ObjectType,
5518                                 Expr::Classification ObjectClassification,
5519                                 llvm::ArrayRef<Expr *> Args,
5520                                 OverloadCandidateSet& CandidateSet,
5521                                 bool SuppressUserConversions) {
5522  if (!CandidateSet.isNewCandidate(MethodTmpl))
5523    return;
5524
5525  // C++ [over.match.funcs]p7:
5526  //   In each case where a candidate is a function template, candidate
5527  //   function template specializations are generated using template argument
5528  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5529  //   candidate functions in the usual way.113) A given name can refer to one
5530  //   or more function templates and also to a set of overloaded non-template
5531  //   functions. In such a case, the candidate functions generated from each
5532  //   function template are combined with the set of non-template candidate
5533  //   functions.
5534  TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5535  FunctionDecl *Specialization = 0;
5536  if (TemplateDeductionResult Result
5537      = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5538                                Specialization, Info)) {
5539    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5540    Candidate.FoundDecl = FoundDecl;
5541    Candidate.Function = MethodTmpl->getTemplatedDecl();
5542    Candidate.Viable = false;
5543    Candidate.FailureKind = ovl_fail_bad_deduction;
5544    Candidate.IsSurrogate = false;
5545    Candidate.IgnoreObjectArgument = false;
5546    Candidate.ExplicitCallArguments = Args.size();
5547    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5548                                                          Info);
5549    return;
5550  }
5551
5552  // Add the function template specialization produced by template argument
5553  // deduction as a candidate.
5554  assert(Specialization && "Missing member function template specialization?");
5555  assert(isa<CXXMethodDecl>(Specialization) &&
5556         "Specialization is not a member function?");
5557  AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5558                     ActingContext, ObjectType, ObjectClassification, Args,
5559                     CandidateSet, SuppressUserConversions);
5560}
5561
5562/// \brief Add a C++ function template specialization as a candidate
5563/// in the candidate set, using template argument deduction to produce
5564/// an appropriate function template specialization.
5565void
5566Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5567                                   DeclAccessPair FoundDecl,
5568                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
5569                                   llvm::ArrayRef<Expr *> Args,
5570                                   OverloadCandidateSet& CandidateSet,
5571                                   bool SuppressUserConversions) {
5572  if (!CandidateSet.isNewCandidate(FunctionTemplate))
5573    return;
5574
5575  // C++ [over.match.funcs]p7:
5576  //   In each case where a candidate is a function template, candidate
5577  //   function template specializations are generated using template argument
5578  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5579  //   candidate functions in the usual way.113) A given name can refer to one
5580  //   or more function templates and also to a set of overloaded non-template
5581  //   functions. In such a case, the candidate functions generated from each
5582  //   function template are combined with the set of non-template candidate
5583  //   functions.
5584  TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5585  FunctionDecl *Specialization = 0;
5586  if (TemplateDeductionResult Result
5587        = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5588                                  Specialization, Info)) {
5589    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5590    Candidate.FoundDecl = FoundDecl;
5591    Candidate.Function = FunctionTemplate->getTemplatedDecl();
5592    Candidate.Viable = false;
5593    Candidate.FailureKind = ovl_fail_bad_deduction;
5594    Candidate.IsSurrogate = false;
5595    Candidate.IgnoreObjectArgument = false;
5596    Candidate.ExplicitCallArguments = Args.size();
5597    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5598                                                          Info);
5599    return;
5600  }
5601
5602  // Add the function template specialization produced by template argument
5603  // deduction as a candidate.
5604  assert(Specialization && "Missing function template specialization?");
5605  AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5606                       SuppressUserConversions);
5607}
5608
5609/// AddConversionCandidate - Add a C++ conversion function as a
5610/// candidate in the candidate set (C++ [over.match.conv],
5611/// C++ [over.match.copy]). From is the expression we're converting from,
5612/// and ToType is the type that we're eventually trying to convert to
5613/// (which may or may not be the same type as the type that the
5614/// conversion function produces).
5615void
5616Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5617                             DeclAccessPair FoundDecl,
5618                             CXXRecordDecl *ActingContext,
5619                             Expr *From, QualType ToType,
5620                             OverloadCandidateSet& CandidateSet) {
5621  assert(!Conversion->getDescribedFunctionTemplate() &&
5622         "Conversion function templates use AddTemplateConversionCandidate");
5623  QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5624  if (!CandidateSet.isNewCandidate(Conversion))
5625    return;
5626
5627  // Overload resolution is always an unevaluated context.
5628  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5629
5630  // Add this candidate
5631  OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5632  Candidate.FoundDecl = FoundDecl;
5633  Candidate.Function = Conversion;
5634  Candidate.IsSurrogate = false;
5635  Candidate.IgnoreObjectArgument = false;
5636  Candidate.FinalConversion.setAsIdentityConversion();
5637  Candidate.FinalConversion.setFromType(ConvType);
5638  Candidate.FinalConversion.setAllToTypes(ToType);
5639  Candidate.Viable = true;
5640  Candidate.ExplicitCallArguments = 1;
5641
5642  // C++ [over.match.funcs]p4:
5643  //   For conversion functions, the function is considered to be a member of
5644  //   the class of the implicit implied object argument for the purpose of
5645  //   defining the type of the implicit object parameter.
5646  //
5647  // Determine the implicit conversion sequence for the implicit
5648  // object parameter.
5649  QualType ImplicitParamType = From->getType();
5650  if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5651    ImplicitParamType = FromPtrType->getPointeeType();
5652  CXXRecordDecl *ConversionContext
5653    = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5654
5655  Candidate.Conversions[0]
5656    = TryObjectArgumentInitialization(*this, From->getType(),
5657                                      From->Classify(Context),
5658                                      Conversion, ConversionContext);
5659
5660  if (Candidate.Conversions[0].isBad()) {
5661    Candidate.Viable = false;
5662    Candidate.FailureKind = ovl_fail_bad_conversion;
5663    return;
5664  }
5665
5666  // We won't go through a user-define type conversion function to convert a
5667  // derived to base as such conversions are given Conversion Rank. They only
5668  // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5669  QualType FromCanon
5670    = Context.getCanonicalType(From->getType().getUnqualifiedType());
5671  QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5672  if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5673    Candidate.Viable = false;
5674    Candidate.FailureKind = ovl_fail_trivial_conversion;
5675    return;
5676  }
5677
5678  // To determine what the conversion from the result of calling the
5679  // conversion function to the type we're eventually trying to
5680  // convert to (ToType), we need to synthesize a call to the
5681  // conversion function and attempt copy initialization from it. This
5682  // makes sure that we get the right semantics with respect to
5683  // lvalues/rvalues and the type. Fortunately, we can allocate this
5684  // call on the stack and we don't need its arguments to be
5685  // well-formed.
5686  DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5687                            VK_LValue, From->getLocStart());
5688  ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5689                                Context.getPointerType(Conversion->getType()),
5690                                CK_FunctionToPointerDecay,
5691                                &ConversionRef, VK_RValue);
5692
5693  QualType ConversionType = Conversion->getConversionType();
5694  if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5695    Candidate.Viable = false;
5696    Candidate.FailureKind = ovl_fail_bad_final_conversion;
5697    return;
5698  }
5699
5700  ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5701
5702  // Note that it is safe to allocate CallExpr on the stack here because
5703  // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5704  // allocator).
5705  QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5706  CallExpr Call(Context, &ConversionFn, MultiExprArg(), CallResultType, VK,
5707                From->getLocStart());
5708  ImplicitConversionSequence ICS =
5709    TryCopyInitialization(*this, &Call, ToType,
5710                          /*SuppressUserConversions=*/true,
5711                          /*InOverloadResolution=*/false,
5712                          /*AllowObjCWritebackConversion=*/false);
5713
5714  switch (ICS.getKind()) {
5715  case ImplicitConversionSequence::StandardConversion:
5716    Candidate.FinalConversion = ICS.Standard;
5717
5718    // C++ [over.ics.user]p3:
5719    //   If the user-defined conversion is specified by a specialization of a
5720    //   conversion function template, the second standard conversion sequence
5721    //   shall have exact match rank.
5722    if (Conversion->getPrimaryTemplate() &&
5723        GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5724      Candidate.Viable = false;
5725      Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5726    }
5727
5728    // C++0x [dcl.init.ref]p5:
5729    //    In the second case, if the reference is an rvalue reference and
5730    //    the second standard conversion sequence of the user-defined
5731    //    conversion sequence includes an lvalue-to-rvalue conversion, the
5732    //    program is ill-formed.
5733    if (ToType->isRValueReferenceType() &&
5734        ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5735      Candidate.Viable = false;
5736      Candidate.FailureKind = ovl_fail_bad_final_conversion;
5737    }
5738    break;
5739
5740  case ImplicitConversionSequence::BadConversion:
5741    Candidate.Viable = false;
5742    Candidate.FailureKind = ovl_fail_bad_final_conversion;
5743    break;
5744
5745  default:
5746    llvm_unreachable(
5747           "Can only end up with a standard conversion sequence or failure");
5748  }
5749}
5750
5751/// \brief Adds a conversion function template specialization
5752/// candidate to the overload set, using template argument deduction
5753/// to deduce the template arguments of the conversion function
5754/// template from the type that we are converting to (C++
5755/// [temp.deduct.conv]).
5756void
5757Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5758                                     DeclAccessPair FoundDecl,
5759                                     CXXRecordDecl *ActingDC,
5760                                     Expr *From, QualType ToType,
5761                                     OverloadCandidateSet &CandidateSet) {
5762  assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5763         "Only conversion function templates permitted here");
5764
5765  if (!CandidateSet.isNewCandidate(FunctionTemplate))
5766    return;
5767
5768  TemplateDeductionInfo Info(Context, CandidateSet.getLocation());
5769  CXXConversionDecl *Specialization = 0;
5770  if (TemplateDeductionResult Result
5771        = DeduceTemplateArguments(FunctionTemplate, ToType,
5772                                  Specialization, Info)) {
5773    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5774    Candidate.FoundDecl = FoundDecl;
5775    Candidate.Function = FunctionTemplate->getTemplatedDecl();
5776    Candidate.Viable = false;
5777    Candidate.FailureKind = ovl_fail_bad_deduction;
5778    Candidate.IsSurrogate = false;
5779    Candidate.IgnoreObjectArgument = false;
5780    Candidate.ExplicitCallArguments = 1;
5781    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5782                                                          Info);
5783    return;
5784  }
5785
5786  // Add the conversion function template specialization produced by
5787  // template argument deduction as a candidate.
5788  assert(Specialization && "Missing function template specialization?");
5789  AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5790                         CandidateSet);
5791}
5792
5793/// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5794/// converts the given @c Object to a function pointer via the
5795/// conversion function @c Conversion, and then attempts to call it
5796/// with the given arguments (C++ [over.call.object]p2-4). Proto is
5797/// the type of function that we'll eventually be calling.
5798void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
5799                                 DeclAccessPair FoundDecl,
5800                                 CXXRecordDecl *ActingContext,
5801                                 const FunctionProtoType *Proto,
5802                                 Expr *Object,
5803                                 llvm::ArrayRef<Expr *> Args,
5804                                 OverloadCandidateSet& CandidateSet) {
5805  if (!CandidateSet.isNewCandidate(Conversion))
5806    return;
5807
5808  // Overload resolution is always an unevaluated context.
5809  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5810
5811  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5812  Candidate.FoundDecl = FoundDecl;
5813  Candidate.Function = 0;
5814  Candidate.Surrogate = Conversion;
5815  Candidate.Viable = true;
5816  Candidate.IsSurrogate = true;
5817  Candidate.IgnoreObjectArgument = false;
5818  Candidate.ExplicitCallArguments = Args.size();
5819
5820  // Determine the implicit conversion sequence for the implicit
5821  // object parameter.
5822  ImplicitConversionSequence ObjectInit
5823    = TryObjectArgumentInitialization(*this, Object->getType(),
5824                                      Object->Classify(Context),
5825                                      Conversion, ActingContext);
5826  if (ObjectInit.isBad()) {
5827    Candidate.Viable = false;
5828    Candidate.FailureKind = ovl_fail_bad_conversion;
5829    Candidate.Conversions[0] = ObjectInit;
5830    return;
5831  }
5832
5833  // The first conversion is actually a user-defined conversion whose
5834  // first conversion is ObjectInit's standard conversion (which is
5835  // effectively a reference binding). Record it as such.
5836  Candidate.Conversions[0].setUserDefined();
5837  Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
5838  Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
5839  Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
5840  Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
5841  Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
5842  Candidate.Conversions[0].UserDefined.After
5843    = Candidate.Conversions[0].UserDefined.Before;
5844  Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
5845
5846  // Find the
5847  unsigned NumArgsInProto = Proto->getNumArgs();
5848
5849  // (C++ 13.3.2p2): A candidate function having fewer than m
5850  // parameters is viable only if it has an ellipsis in its parameter
5851  // list (8.3.5).
5852  if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5853    Candidate.Viable = false;
5854    Candidate.FailureKind = ovl_fail_too_many_arguments;
5855    return;
5856  }
5857
5858  // Function types don't have any default arguments, so just check if
5859  // we have enough arguments.
5860  if (Args.size() < NumArgsInProto) {
5861    // Not enough arguments.
5862    Candidate.Viable = false;
5863    Candidate.FailureKind = ovl_fail_too_few_arguments;
5864    return;
5865  }
5866
5867  // Determine the implicit conversion sequences for each of the
5868  // arguments.
5869  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5870    if (ArgIdx < NumArgsInProto) {
5871      // (C++ 13.3.2p3): for F to be a viable function, there shall
5872      // exist for each argument an implicit conversion sequence
5873      // (13.3.3.1) that converts that argument to the corresponding
5874      // parameter of F.
5875      QualType ParamType = Proto->getArgType(ArgIdx);
5876      Candidate.Conversions[ArgIdx + 1]
5877        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5878                                /*SuppressUserConversions=*/false,
5879                                /*InOverloadResolution=*/false,
5880                                /*AllowObjCWritebackConversion=*/
5881                                  getLangOpts().ObjCAutoRefCount);
5882      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5883        Candidate.Viable = false;
5884        Candidate.FailureKind = ovl_fail_bad_conversion;
5885        break;
5886      }
5887    } else {
5888      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5889      // argument for which there is no corresponding parameter is
5890      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5891      Candidate.Conversions[ArgIdx + 1].setEllipsis();
5892    }
5893  }
5894}
5895
5896/// \brief Add overload candidates for overloaded operators that are
5897/// member functions.
5898///
5899/// Add the overloaded operator candidates that are member functions
5900/// for the operator Op that was used in an operator expression such
5901/// as "x Op y". , Args/NumArgs provides the operator arguments, and
5902/// CandidateSet will store the added overload candidates. (C++
5903/// [over.match.oper]).
5904void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
5905                                       SourceLocation OpLoc,
5906                                       Expr **Args, unsigned NumArgs,
5907                                       OverloadCandidateSet& CandidateSet,
5908                                       SourceRange OpRange) {
5909  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5910
5911  // C++ [over.match.oper]p3:
5912  //   For a unary operator @ with an operand of a type whose
5913  //   cv-unqualified version is T1, and for a binary operator @ with
5914  //   a left operand of a type whose cv-unqualified version is T1 and
5915  //   a right operand of a type whose cv-unqualified version is T2,
5916  //   three sets of candidate functions, designated member
5917  //   candidates, non-member candidates and built-in candidates, are
5918  //   constructed as follows:
5919  QualType T1 = Args[0]->getType();
5920
5921  //     -- If T1 is a class type, the set of member candidates is the
5922  //        result of the qualified lookup of T1::operator@
5923  //        (13.3.1.1.1); otherwise, the set of member candidates is
5924  //        empty.
5925  if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
5926    // Complete the type if it can be completed. Otherwise, we're done.
5927    if (RequireCompleteType(OpLoc, T1, 0))
5928      return;
5929
5930    LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
5931    LookupQualifiedName(Operators, T1Rec->getDecl());
5932    Operators.suppressDiagnostics();
5933
5934    for (LookupResult::iterator Oper = Operators.begin(),
5935                             OperEnd = Operators.end();
5936         Oper != OperEnd;
5937         ++Oper)
5938      AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
5939                         Args[0]->Classify(Context), Args + 1, NumArgs - 1,
5940                         CandidateSet,
5941                         /* SuppressUserConversions = */ false);
5942  }
5943}
5944
5945/// AddBuiltinCandidate - Add a candidate for a built-in
5946/// operator. ResultTy and ParamTys are the result and parameter types
5947/// of the built-in candidate, respectively. Args and NumArgs are the
5948/// arguments being passed to the candidate. IsAssignmentOperator
5949/// should be true when this built-in candidate is an assignment
5950/// operator. NumContextualBoolArguments is the number of arguments
5951/// (at the beginning of the argument list) that will be contextually
5952/// converted to bool.
5953void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
5954                               Expr **Args, unsigned NumArgs,
5955                               OverloadCandidateSet& CandidateSet,
5956                               bool IsAssignmentOperator,
5957                               unsigned NumContextualBoolArguments) {
5958  // Overload resolution is always an unevaluated context.
5959  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5960
5961  // Add this candidate
5962  OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs);
5963  Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
5964  Candidate.Function = 0;
5965  Candidate.IsSurrogate = false;
5966  Candidate.IgnoreObjectArgument = false;
5967  Candidate.BuiltinTypes.ResultTy = ResultTy;
5968  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
5969    Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
5970
5971  // Determine the implicit conversion sequences for each of the
5972  // arguments.
5973  Candidate.Viable = true;
5974  Candidate.ExplicitCallArguments = NumArgs;
5975  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
5976    // C++ [over.match.oper]p4:
5977    //   For the built-in assignment operators, conversions of the
5978    //   left operand are restricted as follows:
5979    //     -- no temporaries are introduced to hold the left operand, and
5980    //     -- no user-defined conversions are applied to the left
5981    //        operand to achieve a type match with the left-most
5982    //        parameter of a built-in candidate.
5983    //
5984    // We block these conversions by turning off user-defined
5985    // conversions, since that is the only way that initialization of
5986    // a reference to a non-class type can occur from something that
5987    // is not of the same type.
5988    if (ArgIdx < NumContextualBoolArguments) {
5989      assert(ParamTys[ArgIdx] == Context.BoolTy &&
5990             "Contextual conversion to bool requires bool type");
5991      Candidate.Conversions[ArgIdx]
5992        = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
5993    } else {
5994      Candidate.Conversions[ArgIdx]
5995        = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
5996                                ArgIdx == 0 && IsAssignmentOperator,
5997                                /*InOverloadResolution=*/false,
5998                                /*AllowObjCWritebackConversion=*/
5999                                  getLangOpts().ObjCAutoRefCount);
6000    }
6001    if (Candidate.Conversions[ArgIdx].isBad()) {
6002      Candidate.Viable = false;
6003      Candidate.FailureKind = ovl_fail_bad_conversion;
6004      break;
6005    }
6006  }
6007}
6008
6009/// BuiltinCandidateTypeSet - A set of types that will be used for the
6010/// candidate operator functions for built-in operators (C++
6011/// [over.built]). The types are separated into pointer types and
6012/// enumeration types.
6013class BuiltinCandidateTypeSet  {
6014  /// TypeSet - A set of types.
6015  typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6016
6017  /// PointerTypes - The set of pointer types that will be used in the
6018  /// built-in candidates.
6019  TypeSet PointerTypes;
6020
6021  /// MemberPointerTypes - The set of member pointer types that will be
6022  /// used in the built-in candidates.
6023  TypeSet MemberPointerTypes;
6024
6025  /// EnumerationTypes - The set of enumeration types that will be
6026  /// used in the built-in candidates.
6027  TypeSet EnumerationTypes;
6028
6029  /// \brief The set of vector types that will be used in the built-in
6030  /// candidates.
6031  TypeSet VectorTypes;
6032
6033  /// \brief A flag indicating non-record types are viable candidates
6034  bool HasNonRecordTypes;
6035
6036  /// \brief A flag indicating whether either arithmetic or enumeration types
6037  /// were present in the candidate set.
6038  bool HasArithmeticOrEnumeralTypes;
6039
6040  /// \brief A flag indicating whether the nullptr type was present in the
6041  /// candidate set.
6042  bool HasNullPtrType;
6043
6044  /// Sema - The semantic analysis instance where we are building the
6045  /// candidate type set.
6046  Sema &SemaRef;
6047
6048  /// Context - The AST context in which we will build the type sets.
6049  ASTContext &Context;
6050
6051  bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6052                                               const Qualifiers &VisibleQuals);
6053  bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6054
6055public:
6056  /// iterator - Iterates through the types that are part of the set.
6057  typedef TypeSet::iterator iterator;
6058
6059  BuiltinCandidateTypeSet(Sema &SemaRef)
6060    : HasNonRecordTypes(false),
6061      HasArithmeticOrEnumeralTypes(false),
6062      HasNullPtrType(false),
6063      SemaRef(SemaRef),
6064      Context(SemaRef.Context) { }
6065
6066  void AddTypesConvertedFrom(QualType Ty,
6067                             SourceLocation Loc,
6068                             bool AllowUserConversions,
6069                             bool AllowExplicitConversions,
6070                             const Qualifiers &VisibleTypeConversionsQuals);
6071
6072  /// pointer_begin - First pointer type found;
6073  iterator pointer_begin() { return PointerTypes.begin(); }
6074
6075  /// pointer_end - Past the last pointer type found;
6076  iterator pointer_end() { return PointerTypes.end(); }
6077
6078  /// member_pointer_begin - First member pointer type found;
6079  iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6080
6081  /// member_pointer_end - Past the last member pointer type found;
6082  iterator member_pointer_end() { return MemberPointerTypes.end(); }
6083
6084  /// enumeration_begin - First enumeration type found;
6085  iterator enumeration_begin() { return EnumerationTypes.begin(); }
6086
6087  /// enumeration_end - Past the last enumeration type found;
6088  iterator enumeration_end() { return EnumerationTypes.end(); }
6089
6090  iterator vector_begin() { return VectorTypes.begin(); }
6091  iterator vector_end() { return VectorTypes.end(); }
6092
6093  bool hasNonRecordTypes() { return HasNonRecordTypes; }
6094  bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6095  bool hasNullPtrType() const { return HasNullPtrType; }
6096};
6097
6098/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6099/// the set of pointer types along with any more-qualified variants of
6100/// that type. For example, if @p Ty is "int const *", this routine
6101/// will add "int const *", "int const volatile *", "int const
6102/// restrict *", and "int const volatile restrict *" to the set of
6103/// pointer types. Returns true if the add of @p Ty itself succeeded,
6104/// false otherwise.
6105///
6106/// FIXME: what to do about extended qualifiers?
6107bool
6108BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6109                                             const Qualifiers &VisibleQuals) {
6110
6111  // Insert this type.
6112  if (!PointerTypes.insert(Ty))
6113    return false;
6114
6115  QualType PointeeTy;
6116  const PointerType *PointerTy = Ty->getAs<PointerType>();
6117  bool buildObjCPtr = false;
6118  if (!PointerTy) {
6119    const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6120    PointeeTy = PTy->getPointeeType();
6121    buildObjCPtr = true;
6122  } else {
6123    PointeeTy = PointerTy->getPointeeType();
6124  }
6125
6126  // Don't add qualified variants of arrays. For one, they're not allowed
6127  // (the qualifier would sink to the element type), and for another, the
6128  // only overload situation where it matters is subscript or pointer +- int,
6129  // and those shouldn't have qualifier variants anyway.
6130  if (PointeeTy->isArrayType())
6131    return true;
6132
6133  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6134  bool hasVolatile = VisibleQuals.hasVolatile();
6135  bool hasRestrict = VisibleQuals.hasRestrict();
6136
6137  // Iterate through all strict supersets of BaseCVR.
6138  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6139    if ((CVR | BaseCVR) != CVR) continue;
6140    // Skip over volatile if no volatile found anywhere in the types.
6141    if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6142
6143    // Skip over restrict if no restrict found anywhere in the types, or if
6144    // the type cannot be restrict-qualified.
6145    if ((CVR & Qualifiers::Restrict) &&
6146        (!hasRestrict ||
6147         (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6148      continue;
6149
6150    // Build qualified pointee type.
6151    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6152
6153    // Build qualified pointer type.
6154    QualType QPointerTy;
6155    if (!buildObjCPtr)
6156      QPointerTy = Context.getPointerType(QPointeeTy);
6157    else
6158      QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6159
6160    // Insert qualified pointer type.
6161    PointerTypes.insert(QPointerTy);
6162  }
6163
6164  return true;
6165}
6166
6167/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6168/// to the set of pointer types along with any more-qualified variants of
6169/// that type. For example, if @p Ty is "int const *", this routine
6170/// will add "int const *", "int const volatile *", "int const
6171/// restrict *", and "int const volatile restrict *" to the set of
6172/// pointer types. Returns true if the add of @p Ty itself succeeded,
6173/// false otherwise.
6174///
6175/// FIXME: what to do about extended qualifiers?
6176bool
6177BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6178    QualType Ty) {
6179  // Insert this type.
6180  if (!MemberPointerTypes.insert(Ty))
6181    return false;
6182
6183  const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6184  assert(PointerTy && "type was not a member pointer type!");
6185
6186  QualType PointeeTy = PointerTy->getPointeeType();
6187  // Don't add qualified variants of arrays. For one, they're not allowed
6188  // (the qualifier would sink to the element type), and for another, the
6189  // only overload situation where it matters is subscript or pointer +- int,
6190  // and those shouldn't have qualifier variants anyway.
6191  if (PointeeTy->isArrayType())
6192    return true;
6193  const Type *ClassTy = PointerTy->getClass();
6194
6195  // Iterate through all strict supersets of the pointee type's CVR
6196  // qualifiers.
6197  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6198  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6199    if ((CVR | BaseCVR) != CVR) continue;
6200
6201    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6202    MemberPointerTypes.insert(
6203      Context.getMemberPointerType(QPointeeTy, ClassTy));
6204  }
6205
6206  return true;
6207}
6208
6209/// AddTypesConvertedFrom - Add each of the types to which the type @p
6210/// Ty can be implicit converted to the given set of @p Types. We're
6211/// primarily interested in pointer types and enumeration types. We also
6212/// take member pointer types, for the conditional operator.
6213/// AllowUserConversions is true if we should look at the conversion
6214/// functions of a class type, and AllowExplicitConversions if we
6215/// should also include the explicit conversion functions of a class
6216/// type.
6217void
6218BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6219                                               SourceLocation Loc,
6220                                               bool AllowUserConversions,
6221                                               bool AllowExplicitConversions,
6222                                               const Qualifiers &VisibleQuals) {
6223  // Only deal with canonical types.
6224  Ty = Context.getCanonicalType(Ty);
6225
6226  // Look through reference types; they aren't part of the type of an
6227  // expression for the purposes of conversions.
6228  if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6229    Ty = RefTy->getPointeeType();
6230
6231  // If we're dealing with an array type, decay to the pointer.
6232  if (Ty->isArrayType())
6233    Ty = SemaRef.Context.getArrayDecayedType(Ty);
6234
6235  // Otherwise, we don't care about qualifiers on the type.
6236  Ty = Ty.getLocalUnqualifiedType();
6237
6238  // Flag if we ever add a non-record type.
6239  const RecordType *TyRec = Ty->getAs<RecordType>();
6240  HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6241
6242  // Flag if we encounter an arithmetic type.
6243  HasArithmeticOrEnumeralTypes =
6244    HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6245
6246  if (Ty->isObjCIdType() || Ty->isObjCClassType())
6247    PointerTypes.insert(Ty);
6248  else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6249    // Insert our type, and its more-qualified variants, into the set
6250    // of types.
6251    if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6252      return;
6253  } else if (Ty->isMemberPointerType()) {
6254    // Member pointers are far easier, since the pointee can't be converted.
6255    if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6256      return;
6257  } else if (Ty->isEnumeralType()) {
6258    HasArithmeticOrEnumeralTypes = true;
6259    EnumerationTypes.insert(Ty);
6260  } else if (Ty->isVectorType()) {
6261    // We treat vector types as arithmetic types in many contexts as an
6262    // extension.
6263    HasArithmeticOrEnumeralTypes = true;
6264    VectorTypes.insert(Ty);
6265  } else if (Ty->isNullPtrType()) {
6266    HasNullPtrType = true;
6267  } else if (AllowUserConversions && TyRec) {
6268    // No conversion functions in incomplete types.
6269    if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6270      return;
6271
6272    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6273    const UnresolvedSetImpl *Conversions
6274      = ClassDecl->getVisibleConversionFunctions();
6275    for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6276           E = Conversions->end(); I != E; ++I) {
6277      NamedDecl *D = I.getDecl();
6278      if (isa<UsingShadowDecl>(D))
6279        D = cast<UsingShadowDecl>(D)->getTargetDecl();
6280
6281      // Skip conversion function templates; they don't tell us anything
6282      // about which builtin types we can convert to.
6283      if (isa<FunctionTemplateDecl>(D))
6284        continue;
6285
6286      CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6287      if (AllowExplicitConversions || !Conv->isExplicit()) {
6288        AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6289                              VisibleQuals);
6290      }
6291    }
6292  }
6293}
6294
6295/// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6296/// the volatile- and non-volatile-qualified assignment operators for the
6297/// given type to the candidate set.
6298static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6299                                                   QualType T,
6300                                                   Expr **Args,
6301                                                   unsigned NumArgs,
6302                                    OverloadCandidateSet &CandidateSet) {
6303  QualType ParamTypes[2];
6304
6305  // T& operator=(T&, T)
6306  ParamTypes[0] = S.Context.getLValueReferenceType(T);
6307  ParamTypes[1] = T;
6308  S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6309                        /*IsAssignmentOperator=*/true);
6310
6311  if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6312    // volatile T& operator=(volatile T&, T)
6313    ParamTypes[0]
6314      = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6315    ParamTypes[1] = T;
6316    S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6317                          /*IsAssignmentOperator=*/true);
6318  }
6319}
6320
6321/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6322/// if any, found in visible type conversion functions found in ArgExpr's type.
6323static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6324    Qualifiers VRQuals;
6325    const RecordType *TyRec;
6326    if (const MemberPointerType *RHSMPType =
6327        ArgExpr->getType()->getAs<MemberPointerType>())
6328      TyRec = RHSMPType->getClass()->getAs<RecordType>();
6329    else
6330      TyRec = ArgExpr->getType()->getAs<RecordType>();
6331    if (!TyRec) {
6332      // Just to be safe, assume the worst case.
6333      VRQuals.addVolatile();
6334      VRQuals.addRestrict();
6335      return VRQuals;
6336    }
6337
6338    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6339    if (!ClassDecl->hasDefinition())
6340      return VRQuals;
6341
6342    const UnresolvedSetImpl *Conversions =
6343      ClassDecl->getVisibleConversionFunctions();
6344
6345    for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6346           E = Conversions->end(); I != E; ++I) {
6347      NamedDecl *D = I.getDecl();
6348      if (isa<UsingShadowDecl>(D))
6349        D = cast<UsingShadowDecl>(D)->getTargetDecl();
6350      if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6351        QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6352        if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6353          CanTy = ResTypeRef->getPointeeType();
6354        // Need to go down the pointer/mempointer chain and add qualifiers
6355        // as see them.
6356        bool done = false;
6357        while (!done) {
6358          if (CanTy.isRestrictQualified())
6359            VRQuals.addRestrict();
6360          if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6361            CanTy = ResTypePtr->getPointeeType();
6362          else if (const MemberPointerType *ResTypeMPtr =
6363                CanTy->getAs<MemberPointerType>())
6364            CanTy = ResTypeMPtr->getPointeeType();
6365          else
6366            done = true;
6367          if (CanTy.isVolatileQualified())
6368            VRQuals.addVolatile();
6369          if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6370            return VRQuals;
6371        }
6372      }
6373    }
6374    return VRQuals;
6375}
6376
6377namespace {
6378
6379/// \brief Helper class to manage the addition of builtin operator overload
6380/// candidates. It provides shared state and utility methods used throughout
6381/// the process, as well as a helper method to add each group of builtin
6382/// operator overloads from the standard to a candidate set.
6383class BuiltinOperatorOverloadBuilder {
6384  // Common instance state available to all overload candidate addition methods.
6385  Sema &S;
6386  Expr **Args;
6387  unsigned NumArgs;
6388  Qualifiers VisibleTypeConversionsQuals;
6389  bool HasArithmeticOrEnumeralCandidateType;
6390  SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6391  OverloadCandidateSet &CandidateSet;
6392
6393  // Define some constants used to index and iterate over the arithemetic types
6394  // provided via the getArithmeticType() method below.
6395  // The "promoted arithmetic types" are the arithmetic
6396  // types are that preserved by promotion (C++ [over.built]p2).
6397  static const unsigned FirstIntegralType = 3;
6398  static const unsigned LastIntegralType = 20;
6399  static const unsigned FirstPromotedIntegralType = 3,
6400                        LastPromotedIntegralType = 11;
6401  static const unsigned FirstPromotedArithmeticType = 0,
6402                        LastPromotedArithmeticType = 11;
6403  static const unsigned NumArithmeticTypes = 20;
6404
6405  /// \brief Get the canonical type for a given arithmetic type index.
6406  CanQualType getArithmeticType(unsigned index) {
6407    assert(index < NumArithmeticTypes);
6408    static CanQualType ASTContext::* const
6409      ArithmeticTypes[NumArithmeticTypes] = {
6410      // Start of promoted types.
6411      &ASTContext::FloatTy,
6412      &ASTContext::DoubleTy,
6413      &ASTContext::LongDoubleTy,
6414
6415      // Start of integral types.
6416      &ASTContext::IntTy,
6417      &ASTContext::LongTy,
6418      &ASTContext::LongLongTy,
6419      &ASTContext::Int128Ty,
6420      &ASTContext::UnsignedIntTy,
6421      &ASTContext::UnsignedLongTy,
6422      &ASTContext::UnsignedLongLongTy,
6423      &ASTContext::UnsignedInt128Ty,
6424      // End of promoted types.
6425
6426      &ASTContext::BoolTy,
6427      &ASTContext::CharTy,
6428      &ASTContext::WCharTy,
6429      &ASTContext::Char16Ty,
6430      &ASTContext::Char32Ty,
6431      &ASTContext::SignedCharTy,
6432      &ASTContext::ShortTy,
6433      &ASTContext::UnsignedCharTy,
6434      &ASTContext::UnsignedShortTy,
6435      // End of integral types.
6436      // FIXME: What about complex? What about half?
6437    };
6438    return S.Context.*ArithmeticTypes[index];
6439  }
6440
6441  /// \brief Gets the canonical type resulting from the usual arithemetic
6442  /// converions for the given arithmetic types.
6443  CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6444    // Accelerator table for performing the usual arithmetic conversions.
6445    // The rules are basically:
6446    //   - if either is floating-point, use the wider floating-point
6447    //   - if same signedness, use the higher rank
6448    //   - if same size, use unsigned of the higher rank
6449    //   - use the larger type
6450    // These rules, together with the axiom that higher ranks are
6451    // never smaller, are sufficient to precompute all of these results
6452    // *except* when dealing with signed types of higher rank.
6453    // (we could precompute SLL x UI for all known platforms, but it's
6454    // better not to make any assumptions).
6455    // We assume that int128 has a higher rank than long long on all platforms.
6456    enum PromotedType {
6457            Dep=-1,
6458            Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6459    };
6460    static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6461                                        [LastPromotedArithmeticType] = {
6462/* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6463/* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6464/*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6465/*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6466/*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6467/* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6468/*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6469/*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6470/*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6471/* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6472/*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6473    };
6474
6475    assert(L < LastPromotedArithmeticType);
6476    assert(R < LastPromotedArithmeticType);
6477    int Idx = ConversionsTable[L][R];
6478
6479    // Fast path: the table gives us a concrete answer.
6480    if (Idx != Dep) return getArithmeticType(Idx);
6481
6482    // Slow path: we need to compare widths.
6483    // An invariant is that the signed type has higher rank.
6484    CanQualType LT = getArithmeticType(L),
6485                RT = getArithmeticType(R);
6486    unsigned LW = S.Context.getIntWidth(LT),
6487             RW = S.Context.getIntWidth(RT);
6488
6489    // If they're different widths, use the signed type.
6490    if (LW > RW) return LT;
6491    else if (LW < RW) return RT;
6492
6493    // Otherwise, use the unsigned type of the signed type's rank.
6494    if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6495    assert(L == SLL || R == SLL);
6496    return S.Context.UnsignedLongLongTy;
6497  }
6498
6499  /// \brief Helper method to factor out the common pattern of adding overloads
6500  /// for '++' and '--' builtin operators.
6501  void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6502                                           bool HasVolatile,
6503                                           bool HasRestrict) {
6504    QualType ParamTypes[2] = {
6505      S.Context.getLValueReferenceType(CandidateTy),
6506      S.Context.IntTy
6507    };
6508
6509    // Non-volatile version.
6510    if (NumArgs == 1)
6511      S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6512    else
6513      S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6514
6515    // Use a heuristic to reduce number of builtin candidates in the set:
6516    // add volatile version only if there are conversions to a volatile type.
6517    if (HasVolatile) {
6518      ParamTypes[0] =
6519        S.Context.getLValueReferenceType(
6520          S.Context.getVolatileType(CandidateTy));
6521      if (NumArgs == 1)
6522        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6523      else
6524        S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6525    }
6526
6527    // Add restrict version only if there are conversions to a restrict type
6528    // and our candidate type is a non-restrict-qualified pointer.
6529    if (HasRestrict && CandidateTy->isAnyPointerType() &&
6530        !CandidateTy.isRestrictQualified()) {
6531      ParamTypes[0]
6532        = S.Context.getLValueReferenceType(
6533            S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6534      if (NumArgs == 1)
6535        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6536      else
6537        S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6538
6539      if (HasVolatile) {
6540        ParamTypes[0]
6541          = S.Context.getLValueReferenceType(
6542              S.Context.getCVRQualifiedType(CandidateTy,
6543                                            (Qualifiers::Volatile |
6544                                             Qualifiers::Restrict)));
6545        if (NumArgs == 1)
6546          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1,
6547                                CandidateSet);
6548        else
6549          S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6550      }
6551    }
6552
6553  }
6554
6555public:
6556  BuiltinOperatorOverloadBuilder(
6557    Sema &S, Expr **Args, unsigned NumArgs,
6558    Qualifiers VisibleTypeConversionsQuals,
6559    bool HasArithmeticOrEnumeralCandidateType,
6560    SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6561    OverloadCandidateSet &CandidateSet)
6562    : S(S), Args(Args), NumArgs(NumArgs),
6563      VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6564      HasArithmeticOrEnumeralCandidateType(
6565        HasArithmeticOrEnumeralCandidateType),
6566      CandidateTypes(CandidateTypes),
6567      CandidateSet(CandidateSet) {
6568    // Validate some of our static helper constants in debug builds.
6569    assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6570           "Invalid first promoted integral type");
6571    assert(getArithmeticType(LastPromotedIntegralType - 1)
6572             == S.Context.UnsignedInt128Ty &&
6573           "Invalid last promoted integral type");
6574    assert(getArithmeticType(FirstPromotedArithmeticType)
6575             == S.Context.FloatTy &&
6576           "Invalid first promoted arithmetic type");
6577    assert(getArithmeticType(LastPromotedArithmeticType - 1)
6578             == S.Context.UnsignedInt128Ty &&
6579           "Invalid last promoted arithmetic type");
6580  }
6581
6582  // C++ [over.built]p3:
6583  //
6584  //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6585  //   is either volatile or empty, there exist candidate operator
6586  //   functions of the form
6587  //
6588  //       VQ T&      operator++(VQ T&);
6589  //       T          operator++(VQ T&, int);
6590  //
6591  // C++ [over.built]p4:
6592  //
6593  //   For every pair (T, VQ), where T is an arithmetic type other
6594  //   than bool, and VQ is either volatile or empty, there exist
6595  //   candidate operator functions of the form
6596  //
6597  //       VQ T&      operator--(VQ T&);
6598  //       T          operator--(VQ T&, int);
6599  void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6600    if (!HasArithmeticOrEnumeralCandidateType)
6601      return;
6602
6603    for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6604         Arith < NumArithmeticTypes; ++Arith) {
6605      addPlusPlusMinusMinusStyleOverloads(
6606        getArithmeticType(Arith),
6607        VisibleTypeConversionsQuals.hasVolatile(),
6608        VisibleTypeConversionsQuals.hasRestrict());
6609    }
6610  }
6611
6612  // C++ [over.built]p5:
6613  //
6614  //   For every pair (T, VQ), where T is a cv-qualified or
6615  //   cv-unqualified object type, and VQ is either volatile or
6616  //   empty, there exist candidate operator functions of the form
6617  //
6618  //       T*VQ&      operator++(T*VQ&);
6619  //       T*VQ&      operator--(T*VQ&);
6620  //       T*         operator++(T*VQ&, int);
6621  //       T*         operator--(T*VQ&, int);
6622  void addPlusPlusMinusMinusPointerOverloads() {
6623    for (BuiltinCandidateTypeSet::iterator
6624              Ptr = CandidateTypes[0].pointer_begin(),
6625           PtrEnd = CandidateTypes[0].pointer_end();
6626         Ptr != PtrEnd; ++Ptr) {
6627      // Skip pointer types that aren't pointers to object types.
6628      if (!(*Ptr)->getPointeeType()->isObjectType())
6629        continue;
6630
6631      addPlusPlusMinusMinusStyleOverloads(*Ptr,
6632        (!(*Ptr).isVolatileQualified() &&
6633         VisibleTypeConversionsQuals.hasVolatile()),
6634        (!(*Ptr).isRestrictQualified() &&
6635         VisibleTypeConversionsQuals.hasRestrict()));
6636    }
6637  }
6638
6639  // C++ [over.built]p6:
6640  //   For every cv-qualified or cv-unqualified object type T, there
6641  //   exist candidate operator functions of the form
6642  //
6643  //       T&         operator*(T*);
6644  //
6645  // C++ [over.built]p7:
6646  //   For every function type T that does not have cv-qualifiers or a
6647  //   ref-qualifier, there exist candidate operator functions of the form
6648  //       T&         operator*(T*);
6649  void addUnaryStarPointerOverloads() {
6650    for (BuiltinCandidateTypeSet::iterator
6651              Ptr = CandidateTypes[0].pointer_begin(),
6652           PtrEnd = CandidateTypes[0].pointer_end();
6653         Ptr != PtrEnd; ++Ptr) {
6654      QualType ParamTy = *Ptr;
6655      QualType PointeeTy = ParamTy->getPointeeType();
6656      if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6657        continue;
6658
6659      if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6660        if (Proto->getTypeQuals() || Proto->getRefQualifier())
6661          continue;
6662
6663      S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6664                            &ParamTy, Args, 1, CandidateSet);
6665    }
6666  }
6667
6668  // C++ [over.built]p9:
6669  //  For every promoted arithmetic type T, there exist candidate
6670  //  operator functions of the form
6671  //
6672  //       T         operator+(T);
6673  //       T         operator-(T);
6674  void addUnaryPlusOrMinusArithmeticOverloads() {
6675    if (!HasArithmeticOrEnumeralCandidateType)
6676      return;
6677
6678    for (unsigned Arith = FirstPromotedArithmeticType;
6679         Arith < LastPromotedArithmeticType; ++Arith) {
6680      QualType ArithTy = getArithmeticType(Arith);
6681      S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
6682    }
6683
6684    // Extension: We also add these operators for vector types.
6685    for (BuiltinCandidateTypeSet::iterator
6686              Vec = CandidateTypes[0].vector_begin(),
6687           VecEnd = CandidateTypes[0].vector_end();
6688         Vec != VecEnd; ++Vec) {
6689      QualType VecTy = *Vec;
6690      S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6691    }
6692  }
6693
6694  // C++ [over.built]p8:
6695  //   For every type T, there exist candidate operator functions of
6696  //   the form
6697  //
6698  //       T*         operator+(T*);
6699  void addUnaryPlusPointerOverloads() {
6700    for (BuiltinCandidateTypeSet::iterator
6701              Ptr = CandidateTypes[0].pointer_begin(),
6702           PtrEnd = CandidateTypes[0].pointer_end();
6703         Ptr != PtrEnd; ++Ptr) {
6704      QualType ParamTy = *Ptr;
6705      S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
6706    }
6707  }
6708
6709  // C++ [over.built]p10:
6710  //   For every promoted integral type T, there exist candidate
6711  //   operator functions of the form
6712  //
6713  //        T         operator~(T);
6714  void addUnaryTildePromotedIntegralOverloads() {
6715    if (!HasArithmeticOrEnumeralCandidateType)
6716      return;
6717
6718    for (unsigned Int = FirstPromotedIntegralType;
6719         Int < LastPromotedIntegralType; ++Int) {
6720      QualType IntTy = getArithmeticType(Int);
6721      S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
6722    }
6723
6724    // Extension: We also add this operator for vector types.
6725    for (BuiltinCandidateTypeSet::iterator
6726              Vec = CandidateTypes[0].vector_begin(),
6727           VecEnd = CandidateTypes[0].vector_end();
6728         Vec != VecEnd; ++Vec) {
6729      QualType VecTy = *Vec;
6730      S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6731    }
6732  }
6733
6734  // C++ [over.match.oper]p16:
6735  //   For every pointer to member type T, there exist candidate operator
6736  //   functions of the form
6737  //
6738  //        bool operator==(T,T);
6739  //        bool operator!=(T,T);
6740  void addEqualEqualOrNotEqualMemberPointerOverloads() {
6741    /// Set of (canonical) types that we've already handled.
6742    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6743
6744    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6745      for (BuiltinCandidateTypeSet::iterator
6746                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6747             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6748           MemPtr != MemPtrEnd;
6749           ++MemPtr) {
6750        // Don't add the same builtin candidate twice.
6751        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6752          continue;
6753
6754        QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6755        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6756                              CandidateSet);
6757      }
6758    }
6759  }
6760
6761  // C++ [over.built]p15:
6762  //
6763  //   For every T, where T is an enumeration type, a pointer type, or
6764  //   std::nullptr_t, there exist candidate operator functions of the form
6765  //
6766  //        bool       operator<(T, T);
6767  //        bool       operator>(T, T);
6768  //        bool       operator<=(T, T);
6769  //        bool       operator>=(T, T);
6770  //        bool       operator==(T, T);
6771  //        bool       operator!=(T, T);
6772  void addRelationalPointerOrEnumeralOverloads() {
6773    // C++ [over.built]p1:
6774    //   If there is a user-written candidate with the same name and parameter
6775    //   types as a built-in candidate operator function, the built-in operator
6776    //   function is hidden and is not included in the set of candidate
6777    //   functions.
6778    //
6779    // The text is actually in a note, but if we don't implement it then we end
6780    // up with ambiguities when the user provides an overloaded operator for
6781    // an enumeration type. Note that only enumeration types have this problem,
6782    // so we track which enumeration types we've seen operators for. Also, the
6783    // only other overloaded operator with enumeration argumenst, operator=,
6784    // cannot be overloaded for enumeration types, so this is the only place
6785    // where we must suppress candidates like this.
6786    llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6787      UserDefinedBinaryOperators;
6788
6789    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6790      if (CandidateTypes[ArgIdx].enumeration_begin() !=
6791          CandidateTypes[ArgIdx].enumeration_end()) {
6792        for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
6793                                         CEnd = CandidateSet.end();
6794             C != CEnd; ++C) {
6795          if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
6796            continue;
6797
6798          QualType FirstParamType =
6799            C->Function->getParamDecl(0)->getType().getUnqualifiedType();
6800          QualType SecondParamType =
6801            C->Function->getParamDecl(1)->getType().getUnqualifiedType();
6802
6803          // Skip if either parameter isn't of enumeral type.
6804          if (!FirstParamType->isEnumeralType() ||
6805              !SecondParamType->isEnumeralType())
6806            continue;
6807
6808          // Add this operator to the set of known user-defined operators.
6809          UserDefinedBinaryOperators.insert(
6810            std::make_pair(S.Context.getCanonicalType(FirstParamType),
6811                           S.Context.getCanonicalType(SecondParamType)));
6812        }
6813      }
6814    }
6815
6816    /// Set of (canonical) types that we've already handled.
6817    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6818
6819    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6820      for (BuiltinCandidateTypeSet::iterator
6821                Ptr = CandidateTypes[ArgIdx].pointer_begin(),
6822             PtrEnd = CandidateTypes[ArgIdx].pointer_end();
6823           Ptr != PtrEnd; ++Ptr) {
6824        // Don't add the same builtin candidate twice.
6825        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6826          continue;
6827
6828        QualType ParamTypes[2] = { *Ptr, *Ptr };
6829        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6830                              CandidateSet);
6831      }
6832      for (BuiltinCandidateTypeSet::iterator
6833                Enum = CandidateTypes[ArgIdx].enumeration_begin(),
6834             EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
6835           Enum != EnumEnd; ++Enum) {
6836        CanQualType CanonType = S.Context.getCanonicalType(*Enum);
6837
6838        // Don't add the same builtin candidate twice, or if a user defined
6839        // candidate exists.
6840        if (!AddedTypes.insert(CanonType) ||
6841            UserDefinedBinaryOperators.count(std::make_pair(CanonType,
6842                                                            CanonType)))
6843          continue;
6844
6845        QualType ParamTypes[2] = { *Enum, *Enum };
6846        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6847                              CandidateSet);
6848      }
6849
6850      if (CandidateTypes[ArgIdx].hasNullPtrType()) {
6851        CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
6852        if (AddedTypes.insert(NullPtrTy) &&
6853            !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
6854                                                             NullPtrTy))) {
6855          QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
6856          S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6857                                CandidateSet);
6858        }
6859      }
6860    }
6861  }
6862
6863  // C++ [over.built]p13:
6864  //
6865  //   For every cv-qualified or cv-unqualified object type T
6866  //   there exist candidate operator functions of the form
6867  //
6868  //      T*         operator+(T*, ptrdiff_t);
6869  //      T&         operator[](T*, ptrdiff_t);    [BELOW]
6870  //      T*         operator-(T*, ptrdiff_t);
6871  //      T*         operator+(ptrdiff_t, T*);
6872  //      T&         operator[](ptrdiff_t, T*);    [BELOW]
6873  //
6874  // C++ [over.built]p14:
6875  //
6876  //   For every T, where T is a pointer to object type, there
6877  //   exist candidate operator functions of the form
6878  //
6879  //      ptrdiff_t  operator-(T, T);
6880  void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
6881    /// Set of (canonical) types that we've already handled.
6882    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6883
6884    for (int Arg = 0; Arg < 2; ++Arg) {
6885      QualType AsymetricParamTypes[2] = {
6886        S.Context.getPointerDiffType(),
6887        S.Context.getPointerDiffType(),
6888      };
6889      for (BuiltinCandidateTypeSet::iterator
6890                Ptr = CandidateTypes[Arg].pointer_begin(),
6891             PtrEnd = CandidateTypes[Arg].pointer_end();
6892           Ptr != PtrEnd; ++Ptr) {
6893        QualType PointeeTy = (*Ptr)->getPointeeType();
6894        if (!PointeeTy->isObjectType())
6895          continue;
6896
6897        AsymetricParamTypes[Arg] = *Ptr;
6898        if (Arg == 0 || Op == OO_Plus) {
6899          // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
6900          // T* operator+(ptrdiff_t, T*);
6901          S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2,
6902                                CandidateSet);
6903        }
6904        if (Op == OO_Minus) {
6905          // ptrdiff_t operator-(T, T);
6906          if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6907            continue;
6908
6909          QualType ParamTypes[2] = { *Ptr, *Ptr };
6910          S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
6911                                Args, 2, CandidateSet);
6912        }
6913      }
6914    }
6915  }
6916
6917  // C++ [over.built]p12:
6918  //
6919  //   For every pair of promoted arithmetic types L and R, there
6920  //   exist candidate operator functions of the form
6921  //
6922  //        LR         operator*(L, R);
6923  //        LR         operator/(L, R);
6924  //        LR         operator+(L, R);
6925  //        LR         operator-(L, R);
6926  //        bool       operator<(L, R);
6927  //        bool       operator>(L, R);
6928  //        bool       operator<=(L, R);
6929  //        bool       operator>=(L, R);
6930  //        bool       operator==(L, R);
6931  //        bool       operator!=(L, R);
6932  //
6933  //   where LR is the result of the usual arithmetic conversions
6934  //   between types L and R.
6935  //
6936  // C++ [over.built]p24:
6937  //
6938  //   For every pair of promoted arithmetic types L and R, there exist
6939  //   candidate operator functions of the form
6940  //
6941  //        LR       operator?(bool, L, R);
6942  //
6943  //   where LR is the result of the usual arithmetic conversions
6944  //   between types L and R.
6945  // Our candidates ignore the first parameter.
6946  void addGenericBinaryArithmeticOverloads(bool isComparison) {
6947    if (!HasArithmeticOrEnumeralCandidateType)
6948      return;
6949
6950    for (unsigned Left = FirstPromotedArithmeticType;
6951         Left < LastPromotedArithmeticType; ++Left) {
6952      for (unsigned Right = FirstPromotedArithmeticType;
6953           Right < LastPromotedArithmeticType; ++Right) {
6954        QualType LandR[2] = { getArithmeticType(Left),
6955                              getArithmeticType(Right) };
6956        QualType Result =
6957          isComparison ? S.Context.BoolTy
6958                       : getUsualArithmeticConversions(Left, Right);
6959        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6960      }
6961    }
6962
6963    // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
6964    // conditional operator for vector types.
6965    for (BuiltinCandidateTypeSet::iterator
6966              Vec1 = CandidateTypes[0].vector_begin(),
6967           Vec1End = CandidateTypes[0].vector_end();
6968         Vec1 != Vec1End; ++Vec1) {
6969      for (BuiltinCandidateTypeSet::iterator
6970                Vec2 = CandidateTypes[1].vector_begin(),
6971             Vec2End = CandidateTypes[1].vector_end();
6972           Vec2 != Vec2End; ++Vec2) {
6973        QualType LandR[2] = { *Vec1, *Vec2 };
6974        QualType Result = S.Context.BoolTy;
6975        if (!isComparison) {
6976          if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
6977            Result = *Vec1;
6978          else
6979            Result = *Vec2;
6980        }
6981
6982        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
6983      }
6984    }
6985  }
6986
6987  // C++ [over.built]p17:
6988  //
6989  //   For every pair of promoted integral types L and R, there
6990  //   exist candidate operator functions of the form
6991  //
6992  //      LR         operator%(L, R);
6993  //      LR         operator&(L, R);
6994  //      LR         operator^(L, R);
6995  //      LR         operator|(L, R);
6996  //      L          operator<<(L, R);
6997  //      L          operator>>(L, R);
6998  //
6999  //   where LR is the result of the usual arithmetic conversions
7000  //   between types L and R.
7001  void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7002    if (!HasArithmeticOrEnumeralCandidateType)
7003      return;
7004
7005    for (unsigned Left = FirstPromotedIntegralType;
7006         Left < LastPromotedIntegralType; ++Left) {
7007      for (unsigned Right = FirstPromotedIntegralType;
7008           Right < LastPromotedIntegralType; ++Right) {
7009        QualType LandR[2] = { getArithmeticType(Left),
7010                              getArithmeticType(Right) };
7011        QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7012            ? LandR[0]
7013            : getUsualArithmeticConversions(Left, Right);
7014        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7015      }
7016    }
7017  }
7018
7019  // C++ [over.built]p20:
7020  //
7021  //   For every pair (T, VQ), where T is an enumeration or
7022  //   pointer to member type and VQ is either volatile or
7023  //   empty, there exist candidate operator functions of the form
7024  //
7025  //        VQ T&      operator=(VQ T&, T);
7026  void addAssignmentMemberPointerOrEnumeralOverloads() {
7027    /// Set of (canonical) types that we've already handled.
7028    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7029
7030    for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7031      for (BuiltinCandidateTypeSet::iterator
7032                Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7033             EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7034           Enum != EnumEnd; ++Enum) {
7035        if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7036          continue;
7037
7038        AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2,
7039                                               CandidateSet);
7040      }
7041
7042      for (BuiltinCandidateTypeSet::iterator
7043                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7044             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7045           MemPtr != MemPtrEnd; ++MemPtr) {
7046        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7047          continue;
7048
7049        AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2,
7050                                               CandidateSet);
7051      }
7052    }
7053  }
7054
7055  // C++ [over.built]p19:
7056  //
7057  //   For every pair (T, VQ), where T is any type and VQ is either
7058  //   volatile or empty, there exist candidate operator functions
7059  //   of the form
7060  //
7061  //        T*VQ&      operator=(T*VQ&, T*);
7062  //
7063  // C++ [over.built]p21:
7064  //
7065  //   For every pair (T, VQ), where T is a cv-qualified or
7066  //   cv-unqualified object type and VQ is either volatile or
7067  //   empty, there exist candidate operator functions of the form
7068  //
7069  //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7070  //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7071  void addAssignmentPointerOverloads(bool isEqualOp) {
7072    /// Set of (canonical) types that we've already handled.
7073    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7074
7075    for (BuiltinCandidateTypeSet::iterator
7076              Ptr = CandidateTypes[0].pointer_begin(),
7077           PtrEnd = CandidateTypes[0].pointer_end();
7078         Ptr != PtrEnd; ++Ptr) {
7079      // If this is operator=, keep track of the builtin candidates we added.
7080      if (isEqualOp)
7081        AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7082      else if (!(*Ptr)->getPointeeType()->isObjectType())
7083        continue;
7084
7085      // non-volatile version
7086      QualType ParamTypes[2] = {
7087        S.Context.getLValueReferenceType(*Ptr),
7088        isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7089      };
7090      S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7091                            /*IsAssigmentOperator=*/ isEqualOp);
7092
7093      bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7094                          VisibleTypeConversionsQuals.hasVolatile();
7095      if (NeedVolatile) {
7096        // volatile version
7097        ParamTypes[0] =
7098          S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7099        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7100                              /*IsAssigmentOperator=*/isEqualOp);
7101      }
7102
7103      if (!(*Ptr).isRestrictQualified() &&
7104          VisibleTypeConversionsQuals.hasRestrict()) {
7105        // restrict version
7106        ParamTypes[0]
7107          = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7108        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7109                              /*IsAssigmentOperator=*/isEqualOp);
7110
7111        if (NeedVolatile) {
7112          // volatile restrict version
7113          ParamTypes[0]
7114            = S.Context.getLValueReferenceType(
7115                S.Context.getCVRQualifiedType(*Ptr,
7116                                              (Qualifiers::Volatile |
7117                                               Qualifiers::Restrict)));
7118          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7119                                CandidateSet,
7120                                /*IsAssigmentOperator=*/isEqualOp);
7121        }
7122      }
7123    }
7124
7125    if (isEqualOp) {
7126      for (BuiltinCandidateTypeSet::iterator
7127                Ptr = CandidateTypes[1].pointer_begin(),
7128             PtrEnd = CandidateTypes[1].pointer_end();
7129           Ptr != PtrEnd; ++Ptr) {
7130        // Make sure we don't add the same candidate twice.
7131        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7132          continue;
7133
7134        QualType ParamTypes[2] = {
7135          S.Context.getLValueReferenceType(*Ptr),
7136          *Ptr,
7137        };
7138
7139        // non-volatile version
7140        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7141                              /*IsAssigmentOperator=*/true);
7142
7143        bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7144                           VisibleTypeConversionsQuals.hasVolatile();
7145        if (NeedVolatile) {
7146          // volatile version
7147          ParamTypes[0] =
7148            S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7149          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7150                                CandidateSet, /*IsAssigmentOperator=*/true);
7151        }
7152
7153        if (!(*Ptr).isRestrictQualified() &&
7154            VisibleTypeConversionsQuals.hasRestrict()) {
7155          // restrict version
7156          ParamTypes[0]
7157            = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7158          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7159                                CandidateSet, /*IsAssigmentOperator=*/true);
7160
7161          if (NeedVolatile) {
7162            // volatile restrict version
7163            ParamTypes[0]
7164              = S.Context.getLValueReferenceType(
7165                  S.Context.getCVRQualifiedType(*Ptr,
7166                                                (Qualifiers::Volatile |
7167                                                 Qualifiers::Restrict)));
7168            S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7169                                  CandidateSet, /*IsAssigmentOperator=*/true);
7170
7171          }
7172        }
7173      }
7174    }
7175  }
7176
7177  // C++ [over.built]p18:
7178  //
7179  //   For every triple (L, VQ, R), where L is an arithmetic type,
7180  //   VQ is either volatile or empty, and R is a promoted
7181  //   arithmetic type, there exist candidate operator functions of
7182  //   the form
7183  //
7184  //        VQ L&      operator=(VQ L&, R);
7185  //        VQ L&      operator*=(VQ L&, R);
7186  //        VQ L&      operator/=(VQ L&, R);
7187  //        VQ L&      operator+=(VQ L&, R);
7188  //        VQ L&      operator-=(VQ L&, R);
7189  void addAssignmentArithmeticOverloads(bool isEqualOp) {
7190    if (!HasArithmeticOrEnumeralCandidateType)
7191      return;
7192
7193    for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7194      for (unsigned Right = FirstPromotedArithmeticType;
7195           Right < LastPromotedArithmeticType; ++Right) {
7196        QualType ParamTypes[2];
7197        ParamTypes[1] = getArithmeticType(Right);
7198
7199        // Add this built-in operator as a candidate (VQ is empty).
7200        ParamTypes[0] =
7201          S.Context.getLValueReferenceType(getArithmeticType(Left));
7202        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7203                              /*IsAssigmentOperator=*/isEqualOp);
7204
7205        // Add this built-in operator as a candidate (VQ is 'volatile').
7206        if (VisibleTypeConversionsQuals.hasVolatile()) {
7207          ParamTypes[0] =
7208            S.Context.getVolatileType(getArithmeticType(Left));
7209          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7210          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7211                                CandidateSet,
7212                                /*IsAssigmentOperator=*/isEqualOp);
7213        }
7214      }
7215    }
7216
7217    // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7218    for (BuiltinCandidateTypeSet::iterator
7219              Vec1 = CandidateTypes[0].vector_begin(),
7220           Vec1End = CandidateTypes[0].vector_end();
7221         Vec1 != Vec1End; ++Vec1) {
7222      for (BuiltinCandidateTypeSet::iterator
7223                Vec2 = CandidateTypes[1].vector_begin(),
7224             Vec2End = CandidateTypes[1].vector_end();
7225           Vec2 != Vec2End; ++Vec2) {
7226        QualType ParamTypes[2];
7227        ParamTypes[1] = *Vec2;
7228        // Add this built-in operator as a candidate (VQ is empty).
7229        ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7230        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7231                              /*IsAssigmentOperator=*/isEqualOp);
7232
7233        // Add this built-in operator as a candidate (VQ is 'volatile').
7234        if (VisibleTypeConversionsQuals.hasVolatile()) {
7235          ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7236          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7237          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7238                                CandidateSet,
7239                                /*IsAssigmentOperator=*/isEqualOp);
7240        }
7241      }
7242    }
7243  }
7244
7245  // C++ [over.built]p22:
7246  //
7247  //   For every triple (L, VQ, R), where L is an integral type, VQ
7248  //   is either volatile or empty, and R is a promoted integral
7249  //   type, there exist candidate operator functions of the form
7250  //
7251  //        VQ L&       operator%=(VQ L&, R);
7252  //        VQ L&       operator<<=(VQ L&, R);
7253  //        VQ L&       operator>>=(VQ L&, R);
7254  //        VQ L&       operator&=(VQ L&, R);
7255  //        VQ L&       operator^=(VQ L&, R);
7256  //        VQ L&       operator|=(VQ L&, R);
7257  void addAssignmentIntegralOverloads() {
7258    if (!HasArithmeticOrEnumeralCandidateType)
7259      return;
7260
7261    for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7262      for (unsigned Right = FirstPromotedIntegralType;
7263           Right < LastPromotedIntegralType; ++Right) {
7264        QualType ParamTypes[2];
7265        ParamTypes[1] = getArithmeticType(Right);
7266
7267        // Add this built-in operator as a candidate (VQ is empty).
7268        ParamTypes[0] =
7269          S.Context.getLValueReferenceType(getArithmeticType(Left));
7270        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
7271        if (VisibleTypeConversionsQuals.hasVolatile()) {
7272          // Add this built-in operator as a candidate (VQ is 'volatile').
7273          ParamTypes[0] = getArithmeticType(Left);
7274          ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7275          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7276          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7277                                CandidateSet);
7278        }
7279      }
7280    }
7281  }
7282
7283  // C++ [over.operator]p23:
7284  //
7285  //   There also exist candidate operator functions of the form
7286  //
7287  //        bool        operator!(bool);
7288  //        bool        operator&&(bool, bool);
7289  //        bool        operator||(bool, bool);
7290  void addExclaimOverload() {
7291    QualType ParamTy = S.Context.BoolTy;
7292    S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
7293                          /*IsAssignmentOperator=*/false,
7294                          /*NumContextualBoolArguments=*/1);
7295  }
7296  void addAmpAmpOrPipePipeOverload() {
7297    QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7298    S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
7299                          /*IsAssignmentOperator=*/false,
7300                          /*NumContextualBoolArguments=*/2);
7301  }
7302
7303  // C++ [over.built]p13:
7304  //
7305  //   For every cv-qualified or cv-unqualified object type T there
7306  //   exist candidate operator functions of the form
7307  //
7308  //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7309  //        T&         operator[](T*, ptrdiff_t);
7310  //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7311  //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7312  //        T&         operator[](ptrdiff_t, T*);
7313  void addSubscriptOverloads() {
7314    for (BuiltinCandidateTypeSet::iterator
7315              Ptr = CandidateTypes[0].pointer_begin(),
7316           PtrEnd = CandidateTypes[0].pointer_end();
7317         Ptr != PtrEnd; ++Ptr) {
7318      QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7319      QualType PointeeType = (*Ptr)->getPointeeType();
7320      if (!PointeeType->isObjectType())
7321        continue;
7322
7323      QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7324
7325      // T& operator[](T*, ptrdiff_t)
7326      S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7327    }
7328
7329    for (BuiltinCandidateTypeSet::iterator
7330              Ptr = CandidateTypes[1].pointer_begin(),
7331           PtrEnd = CandidateTypes[1].pointer_end();
7332         Ptr != PtrEnd; ++Ptr) {
7333      QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7334      QualType PointeeType = (*Ptr)->getPointeeType();
7335      if (!PointeeType->isObjectType())
7336        continue;
7337
7338      QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7339
7340      // T& operator[](ptrdiff_t, T*)
7341      S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7342    }
7343  }
7344
7345  // C++ [over.built]p11:
7346  //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7347  //    C1 is the same type as C2 or is a derived class of C2, T is an object
7348  //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7349  //    there exist candidate operator functions of the form
7350  //
7351  //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7352  //
7353  //    where CV12 is the union of CV1 and CV2.
7354  void addArrowStarOverloads() {
7355    for (BuiltinCandidateTypeSet::iterator
7356             Ptr = CandidateTypes[0].pointer_begin(),
7357           PtrEnd = CandidateTypes[0].pointer_end();
7358         Ptr != PtrEnd; ++Ptr) {
7359      QualType C1Ty = (*Ptr);
7360      QualType C1;
7361      QualifierCollector Q1;
7362      C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7363      if (!isa<RecordType>(C1))
7364        continue;
7365      // heuristic to reduce number of builtin candidates in the set.
7366      // Add volatile/restrict version only if there are conversions to a
7367      // volatile/restrict type.
7368      if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7369        continue;
7370      if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7371        continue;
7372      for (BuiltinCandidateTypeSet::iterator
7373                MemPtr = CandidateTypes[1].member_pointer_begin(),
7374             MemPtrEnd = CandidateTypes[1].member_pointer_end();
7375           MemPtr != MemPtrEnd; ++MemPtr) {
7376        const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7377        QualType C2 = QualType(mptr->getClass(), 0);
7378        C2 = C2.getUnqualifiedType();
7379        if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7380          break;
7381        QualType ParamTypes[2] = { *Ptr, *MemPtr };
7382        // build CV12 T&
7383        QualType T = mptr->getPointeeType();
7384        if (!VisibleTypeConversionsQuals.hasVolatile() &&
7385            T.isVolatileQualified())
7386          continue;
7387        if (!VisibleTypeConversionsQuals.hasRestrict() &&
7388            T.isRestrictQualified())
7389          continue;
7390        T = Q1.apply(S.Context, T);
7391        QualType ResultTy = S.Context.getLValueReferenceType(T);
7392        S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7393      }
7394    }
7395  }
7396
7397  // Note that we don't consider the first argument, since it has been
7398  // contextually converted to bool long ago. The candidates below are
7399  // therefore added as binary.
7400  //
7401  // C++ [over.built]p25:
7402  //   For every type T, where T is a pointer, pointer-to-member, or scoped
7403  //   enumeration type, there exist candidate operator functions of the form
7404  //
7405  //        T        operator?(bool, T, T);
7406  //
7407  void addConditionalOperatorOverloads() {
7408    /// Set of (canonical) types that we've already handled.
7409    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7410
7411    for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7412      for (BuiltinCandidateTypeSet::iterator
7413                Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7414             PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7415           Ptr != PtrEnd; ++Ptr) {
7416        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7417          continue;
7418
7419        QualType ParamTypes[2] = { *Ptr, *Ptr };
7420        S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
7421      }
7422
7423      for (BuiltinCandidateTypeSet::iterator
7424                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7425             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7426           MemPtr != MemPtrEnd; ++MemPtr) {
7427        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7428          continue;
7429
7430        QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7431        S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet);
7432      }
7433
7434      if (S.getLangOpts().CPlusPlus0x) {
7435        for (BuiltinCandidateTypeSet::iterator
7436                  Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7437               EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7438             Enum != EnumEnd; ++Enum) {
7439          if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7440            continue;
7441
7442          if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7443            continue;
7444
7445          QualType ParamTypes[2] = { *Enum, *Enum };
7446          S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet);
7447        }
7448      }
7449    }
7450  }
7451};
7452
7453} // end anonymous namespace
7454
7455/// AddBuiltinOperatorCandidates - Add the appropriate built-in
7456/// operator overloads to the candidate set (C++ [over.built]), based
7457/// on the operator @p Op and the arguments given. For example, if the
7458/// operator is a binary '+', this routine might add "int
7459/// operator+(int, int)" to cover integer addition.
7460void
7461Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7462                                   SourceLocation OpLoc,
7463                                   Expr **Args, unsigned NumArgs,
7464                                   OverloadCandidateSet& CandidateSet) {
7465  // Find all of the types that the arguments can convert to, but only
7466  // if the operator we're looking at has built-in operator candidates
7467  // that make use of these types. Also record whether we encounter non-record
7468  // candidate types or either arithmetic or enumeral candidate types.
7469  Qualifiers VisibleTypeConversionsQuals;
7470  VisibleTypeConversionsQuals.addConst();
7471  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7472    VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7473
7474  bool HasNonRecordCandidateType = false;
7475  bool HasArithmeticOrEnumeralCandidateType = false;
7476  SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7477  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
7478    CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7479    CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7480                                                 OpLoc,
7481                                                 true,
7482                                                 (Op == OO_Exclaim ||
7483                                                  Op == OO_AmpAmp ||
7484                                                  Op == OO_PipePipe),
7485                                                 VisibleTypeConversionsQuals);
7486    HasNonRecordCandidateType = HasNonRecordCandidateType ||
7487        CandidateTypes[ArgIdx].hasNonRecordTypes();
7488    HasArithmeticOrEnumeralCandidateType =
7489        HasArithmeticOrEnumeralCandidateType ||
7490        CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7491  }
7492
7493  // Exit early when no non-record types have been added to the candidate set
7494  // for any of the arguments to the operator.
7495  //
7496  // We can't exit early for !, ||, or &&, since there we have always have
7497  // 'bool' overloads.
7498  if (!HasNonRecordCandidateType &&
7499      !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7500    return;
7501
7502  // Setup an object to manage the common state for building overloads.
7503  BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs,
7504                                           VisibleTypeConversionsQuals,
7505                                           HasArithmeticOrEnumeralCandidateType,
7506                                           CandidateTypes, CandidateSet);
7507
7508  // Dispatch over the operation to add in only those overloads which apply.
7509  switch (Op) {
7510  case OO_None:
7511  case NUM_OVERLOADED_OPERATORS:
7512    llvm_unreachable("Expected an overloaded operator");
7513
7514  case OO_New:
7515  case OO_Delete:
7516  case OO_Array_New:
7517  case OO_Array_Delete:
7518  case OO_Call:
7519    llvm_unreachable(
7520                    "Special operators don't use AddBuiltinOperatorCandidates");
7521
7522  case OO_Comma:
7523  case OO_Arrow:
7524    // C++ [over.match.oper]p3:
7525    //   -- For the operator ',', the unary operator '&', or the
7526    //      operator '->', the built-in candidates set is empty.
7527    break;
7528
7529  case OO_Plus: // '+' is either unary or binary
7530    if (NumArgs == 1)
7531      OpBuilder.addUnaryPlusPointerOverloads();
7532    // Fall through.
7533
7534  case OO_Minus: // '-' is either unary or binary
7535    if (NumArgs == 1) {
7536      OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7537    } else {
7538      OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7539      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7540    }
7541    break;
7542
7543  case OO_Star: // '*' is either unary or binary
7544    if (NumArgs == 1)
7545      OpBuilder.addUnaryStarPointerOverloads();
7546    else
7547      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7548    break;
7549
7550  case OO_Slash:
7551    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7552    break;
7553
7554  case OO_PlusPlus:
7555  case OO_MinusMinus:
7556    OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7557    OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7558    break;
7559
7560  case OO_EqualEqual:
7561  case OO_ExclaimEqual:
7562    OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7563    // Fall through.
7564
7565  case OO_Less:
7566  case OO_Greater:
7567  case OO_LessEqual:
7568  case OO_GreaterEqual:
7569    OpBuilder.addRelationalPointerOrEnumeralOverloads();
7570    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7571    break;
7572
7573  case OO_Percent:
7574  case OO_Caret:
7575  case OO_Pipe:
7576  case OO_LessLess:
7577  case OO_GreaterGreater:
7578    OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7579    break;
7580
7581  case OO_Amp: // '&' is either unary or binary
7582    if (NumArgs == 1)
7583      // C++ [over.match.oper]p3:
7584      //   -- For the operator ',', the unary operator '&', or the
7585      //      operator '->', the built-in candidates set is empty.
7586      break;
7587
7588    OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7589    break;
7590
7591  case OO_Tilde:
7592    OpBuilder.addUnaryTildePromotedIntegralOverloads();
7593    break;
7594
7595  case OO_Equal:
7596    OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7597    // Fall through.
7598
7599  case OO_PlusEqual:
7600  case OO_MinusEqual:
7601    OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7602    // Fall through.
7603
7604  case OO_StarEqual:
7605  case OO_SlashEqual:
7606    OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7607    break;
7608
7609  case OO_PercentEqual:
7610  case OO_LessLessEqual:
7611  case OO_GreaterGreaterEqual:
7612  case OO_AmpEqual:
7613  case OO_CaretEqual:
7614  case OO_PipeEqual:
7615    OpBuilder.addAssignmentIntegralOverloads();
7616    break;
7617
7618  case OO_Exclaim:
7619    OpBuilder.addExclaimOverload();
7620    break;
7621
7622  case OO_AmpAmp:
7623  case OO_PipePipe:
7624    OpBuilder.addAmpAmpOrPipePipeOverload();
7625    break;
7626
7627  case OO_Subscript:
7628    OpBuilder.addSubscriptOverloads();
7629    break;
7630
7631  case OO_ArrowStar:
7632    OpBuilder.addArrowStarOverloads();
7633    break;
7634
7635  case OO_Conditional:
7636    OpBuilder.addConditionalOperatorOverloads();
7637    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7638    break;
7639  }
7640}
7641
7642/// \brief Add function candidates found via argument-dependent lookup
7643/// to the set of overloading candidates.
7644///
7645/// This routine performs argument-dependent name lookup based on the
7646/// given function name (which may also be an operator name) and adds
7647/// all of the overload candidates found by ADL to the overload
7648/// candidate set (C++ [basic.lookup.argdep]).
7649void
7650Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7651                                           bool Operator, SourceLocation Loc,
7652                                           llvm::ArrayRef<Expr *> Args,
7653                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
7654                                           OverloadCandidateSet& CandidateSet,
7655                                           bool PartialOverloading,
7656                                           bool StdNamespaceIsAssociated) {
7657  ADLResult Fns;
7658
7659  // FIXME: This approach for uniquing ADL results (and removing
7660  // redundant candidates from the set) relies on pointer-equality,
7661  // which means we need to key off the canonical decl.  However,
7662  // always going back to the canonical decl might not get us the
7663  // right set of default arguments.  What default arguments are
7664  // we supposed to consider on ADL candidates, anyway?
7665
7666  // FIXME: Pass in the explicit template arguments?
7667  ArgumentDependentLookup(Name, Operator, Loc, Args, Fns,
7668                          StdNamespaceIsAssociated);
7669
7670  // Erase all of the candidates we already knew about.
7671  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7672                                   CandEnd = CandidateSet.end();
7673       Cand != CandEnd; ++Cand)
7674    if (Cand->Function) {
7675      Fns.erase(Cand->Function);
7676      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7677        Fns.erase(FunTmpl);
7678    }
7679
7680  // For each of the ADL candidates we found, add it to the overload
7681  // set.
7682  for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7683    DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7684    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7685      if (ExplicitTemplateArgs)
7686        continue;
7687
7688      AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7689                           PartialOverloading);
7690    } else
7691      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7692                                   FoundDecl, ExplicitTemplateArgs,
7693                                   Args, CandidateSet);
7694  }
7695}
7696
7697/// isBetterOverloadCandidate - Determines whether the first overload
7698/// candidate is a better candidate than the second (C++ 13.3.3p1).
7699bool
7700isBetterOverloadCandidate(Sema &S,
7701                          const OverloadCandidate &Cand1,
7702                          const OverloadCandidate &Cand2,
7703                          SourceLocation Loc,
7704                          bool UserDefinedConversion) {
7705  // Define viable functions to be better candidates than non-viable
7706  // functions.
7707  if (!Cand2.Viable)
7708    return Cand1.Viable;
7709  else if (!Cand1.Viable)
7710    return false;
7711
7712  // C++ [over.match.best]p1:
7713  //
7714  //   -- if F is a static member function, ICS1(F) is defined such
7715  //      that ICS1(F) is neither better nor worse than ICS1(G) for
7716  //      any function G, and, symmetrically, ICS1(G) is neither
7717  //      better nor worse than ICS1(F).
7718  unsigned StartArg = 0;
7719  if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7720    StartArg = 1;
7721
7722  // C++ [over.match.best]p1:
7723  //   A viable function F1 is defined to be a better function than another
7724  //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7725  //   conversion sequence than ICSi(F2), and then...
7726  unsigned NumArgs = Cand1.NumConversions;
7727  assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7728  bool HasBetterConversion = false;
7729  for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7730    switch (CompareImplicitConversionSequences(S,
7731                                               Cand1.Conversions[ArgIdx],
7732                                               Cand2.Conversions[ArgIdx])) {
7733    case ImplicitConversionSequence::Better:
7734      // Cand1 has a better conversion sequence.
7735      HasBetterConversion = true;
7736      break;
7737
7738    case ImplicitConversionSequence::Worse:
7739      // Cand1 can't be better than Cand2.
7740      return false;
7741
7742    case ImplicitConversionSequence::Indistinguishable:
7743      // Do nothing.
7744      break;
7745    }
7746  }
7747
7748  //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7749  //       ICSj(F2), or, if not that,
7750  if (HasBetterConversion)
7751    return true;
7752
7753  //     - F1 is a non-template function and F2 is a function template
7754  //       specialization, or, if not that,
7755  if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7756      Cand2.Function && Cand2.Function->getPrimaryTemplate())
7757    return true;
7758
7759  //   -- F1 and F2 are function template specializations, and the function
7760  //      template for F1 is more specialized than the template for F2
7761  //      according to the partial ordering rules described in 14.5.5.2, or,
7762  //      if not that,
7763  if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7764      Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7765    if (FunctionTemplateDecl *BetterTemplate
7766          = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7767                                         Cand2.Function->getPrimaryTemplate(),
7768                                         Loc,
7769                       isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7770                                                             : TPOC_Call,
7771                                         Cand1.ExplicitCallArguments))
7772      return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7773  }
7774
7775  //   -- the context is an initialization by user-defined conversion
7776  //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7777  //      from the return type of F1 to the destination type (i.e.,
7778  //      the type of the entity being initialized) is a better
7779  //      conversion sequence than the standard conversion sequence
7780  //      from the return type of F2 to the destination type.
7781  if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7782      isa<CXXConversionDecl>(Cand1.Function) &&
7783      isa<CXXConversionDecl>(Cand2.Function)) {
7784    // First check whether we prefer one of the conversion functions over the
7785    // other. This only distinguishes the results in non-standard, extension
7786    // cases such as the conversion from a lambda closure type to a function
7787    // pointer or block.
7788    ImplicitConversionSequence::CompareKind FuncResult
7789      = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7790    if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7791      return FuncResult;
7792
7793    switch (CompareStandardConversionSequences(S,
7794                                               Cand1.FinalConversion,
7795                                               Cand2.FinalConversion)) {
7796    case ImplicitConversionSequence::Better:
7797      // Cand1 has a better conversion sequence.
7798      return true;
7799
7800    case ImplicitConversionSequence::Worse:
7801      // Cand1 can't be better than Cand2.
7802      return false;
7803
7804    case ImplicitConversionSequence::Indistinguishable:
7805      // Do nothing
7806      break;
7807    }
7808  }
7809
7810  return false;
7811}
7812
7813/// \brief Computes the best viable function (C++ 13.3.3)
7814/// within an overload candidate set.
7815///
7816/// \param Loc The location of the function name (or operator symbol) for
7817/// which overload resolution occurs.
7818///
7819/// \param Best If overload resolution was successful or found a deleted
7820/// function, \p Best points to the candidate function found.
7821///
7822/// \returns The result of overload resolution.
7823OverloadingResult
7824OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
7825                                         iterator &Best,
7826                                         bool UserDefinedConversion) {
7827  // Find the best viable function.
7828  Best = end();
7829  for (iterator Cand = begin(); Cand != end(); ++Cand) {
7830    if (Cand->Viable)
7831      if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
7832                                                     UserDefinedConversion))
7833        Best = Cand;
7834  }
7835
7836  // If we didn't find any viable functions, abort.
7837  if (Best == end())
7838    return OR_No_Viable_Function;
7839
7840  // Make sure that this function is better than every other viable
7841  // function. If not, we have an ambiguity.
7842  for (iterator Cand = begin(); Cand != end(); ++Cand) {
7843    if (Cand->Viable &&
7844        Cand != Best &&
7845        !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
7846                                   UserDefinedConversion)) {
7847      Best = end();
7848      return OR_Ambiguous;
7849    }
7850  }
7851
7852  // Best is the best viable function.
7853  if (Best->Function &&
7854      (Best->Function->isDeleted() ||
7855       S.isFunctionConsideredUnavailable(Best->Function)))
7856    return OR_Deleted;
7857
7858  return OR_Success;
7859}
7860
7861namespace {
7862
7863enum OverloadCandidateKind {
7864  oc_function,
7865  oc_method,
7866  oc_constructor,
7867  oc_function_template,
7868  oc_method_template,
7869  oc_constructor_template,
7870  oc_implicit_default_constructor,
7871  oc_implicit_copy_constructor,
7872  oc_implicit_move_constructor,
7873  oc_implicit_copy_assignment,
7874  oc_implicit_move_assignment,
7875  oc_implicit_inherited_constructor
7876};
7877
7878OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
7879                                                FunctionDecl *Fn,
7880                                                std::string &Description) {
7881  bool isTemplate = false;
7882
7883  if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
7884    isTemplate = true;
7885    Description = S.getTemplateArgumentBindingsText(
7886      FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
7887  }
7888
7889  if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
7890    if (!Ctor->isImplicit())
7891      return isTemplate ? oc_constructor_template : oc_constructor;
7892
7893    if (Ctor->getInheritedConstructor())
7894      return oc_implicit_inherited_constructor;
7895
7896    if (Ctor->isDefaultConstructor())
7897      return oc_implicit_default_constructor;
7898
7899    if (Ctor->isMoveConstructor())
7900      return oc_implicit_move_constructor;
7901
7902    assert(Ctor->isCopyConstructor() &&
7903           "unexpected sort of implicit constructor");
7904    return oc_implicit_copy_constructor;
7905  }
7906
7907  if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
7908    // This actually gets spelled 'candidate function' for now, but
7909    // it doesn't hurt to split it out.
7910    if (!Meth->isImplicit())
7911      return isTemplate ? oc_method_template : oc_method;
7912
7913    if (Meth->isMoveAssignmentOperator())
7914      return oc_implicit_move_assignment;
7915
7916    if (Meth->isCopyAssignmentOperator())
7917      return oc_implicit_copy_assignment;
7918
7919    assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
7920    return oc_method;
7921  }
7922
7923  return isTemplate ? oc_function_template : oc_function;
7924}
7925
7926void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) {
7927  const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
7928  if (!Ctor) return;
7929
7930  Ctor = Ctor->getInheritedConstructor();
7931  if (!Ctor) return;
7932
7933  S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
7934}
7935
7936} // end anonymous namespace
7937
7938// Notes the location of an overload candidate.
7939void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
7940  std::string FnDesc;
7941  OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
7942  PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
7943                             << (unsigned) K << FnDesc;
7944  HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
7945  Diag(Fn->getLocation(), PD);
7946  MaybeEmitInheritedConstructorNote(*this, Fn);
7947}
7948
7949//Notes the location of all overload candidates designated through
7950// OverloadedExpr
7951void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
7952  assert(OverloadedExpr->getType() == Context.OverloadTy);
7953
7954  OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
7955  OverloadExpr *OvlExpr = Ovl.Expression;
7956
7957  for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
7958                            IEnd = OvlExpr->decls_end();
7959       I != IEnd; ++I) {
7960    if (FunctionTemplateDecl *FunTmpl =
7961                dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
7962      NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
7963    } else if (FunctionDecl *Fun
7964                      = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
7965      NoteOverloadCandidate(Fun, DestType);
7966    }
7967  }
7968}
7969
7970/// Diagnoses an ambiguous conversion.  The partial diagnostic is the
7971/// "lead" diagnostic; it will be given two arguments, the source and
7972/// target types of the conversion.
7973void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
7974                                 Sema &S,
7975                                 SourceLocation CaretLoc,
7976                                 const PartialDiagnostic &PDiag) const {
7977  S.Diag(CaretLoc, PDiag)
7978    << Ambiguous.getFromType() << Ambiguous.getToType();
7979  for (AmbiguousConversionSequence::const_iterator
7980         I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
7981    S.NoteOverloadCandidate(*I);
7982  }
7983}
7984
7985namespace {
7986
7987void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
7988  const ImplicitConversionSequence &Conv = Cand->Conversions[I];
7989  assert(Conv.isBad());
7990  assert(Cand->Function && "for now, candidate must be a function");
7991  FunctionDecl *Fn = Cand->Function;
7992
7993  // There's a conversion slot for the object argument if this is a
7994  // non-constructor method.  Note that 'I' corresponds the
7995  // conversion-slot index.
7996  bool isObjectArgument = false;
7997  if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
7998    if (I == 0)
7999      isObjectArgument = true;
8000    else
8001      I--;
8002  }
8003
8004  std::string FnDesc;
8005  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8006
8007  Expr *FromExpr = Conv.Bad.FromExpr;
8008  QualType FromTy = Conv.Bad.getFromType();
8009  QualType ToTy = Conv.Bad.getToType();
8010
8011  if (FromTy == S.Context.OverloadTy) {
8012    assert(FromExpr && "overload set argument came from implicit argument?");
8013    Expr *E = FromExpr->IgnoreParens();
8014    if (isa<UnaryOperator>(E))
8015      E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8016    DeclarationName Name = cast<OverloadExpr>(E)->getName();
8017
8018    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8019      << (unsigned) FnKind << FnDesc
8020      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8021      << ToTy << Name << I+1;
8022    MaybeEmitInheritedConstructorNote(S, Fn);
8023    return;
8024  }
8025
8026  // Do some hand-waving analysis to see if the non-viability is due
8027  // to a qualifier mismatch.
8028  CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8029  CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8030  if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8031    CToTy = RT->getPointeeType();
8032  else {
8033    // TODO: detect and diagnose the full richness of const mismatches.
8034    if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8035      if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8036        CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8037  }
8038
8039  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8040      !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8041    Qualifiers FromQs = CFromTy.getQualifiers();
8042    Qualifiers ToQs = CToTy.getQualifiers();
8043
8044    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8045      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8046        << (unsigned) FnKind << FnDesc
8047        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8048        << FromTy
8049        << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8050        << (unsigned) isObjectArgument << I+1;
8051      MaybeEmitInheritedConstructorNote(S, Fn);
8052      return;
8053    }
8054
8055    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8056      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8057        << (unsigned) FnKind << FnDesc
8058        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8059        << FromTy
8060        << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8061        << (unsigned) isObjectArgument << I+1;
8062      MaybeEmitInheritedConstructorNote(S, Fn);
8063      return;
8064    }
8065
8066    if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8067      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8068      << (unsigned) FnKind << FnDesc
8069      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8070      << FromTy
8071      << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8072      << (unsigned) isObjectArgument << I+1;
8073      MaybeEmitInheritedConstructorNote(S, Fn);
8074      return;
8075    }
8076
8077    unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8078    assert(CVR && "unexpected qualifiers mismatch");
8079
8080    if (isObjectArgument) {
8081      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8082        << (unsigned) FnKind << FnDesc
8083        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8084        << FromTy << (CVR - 1);
8085    } else {
8086      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8087        << (unsigned) FnKind << FnDesc
8088        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8089        << FromTy << (CVR - 1) << I+1;
8090    }
8091    MaybeEmitInheritedConstructorNote(S, Fn);
8092    return;
8093  }
8094
8095  // Special diagnostic for failure to convert an initializer list, since
8096  // telling the user that it has type void is not useful.
8097  if (FromExpr && isa<InitListExpr>(FromExpr)) {
8098    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8099      << (unsigned) FnKind << FnDesc
8100      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8101      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8102    MaybeEmitInheritedConstructorNote(S, Fn);
8103    return;
8104  }
8105
8106  // Diagnose references or pointers to incomplete types differently,
8107  // since it's far from impossible that the incompleteness triggered
8108  // the failure.
8109  QualType TempFromTy = FromTy.getNonReferenceType();
8110  if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8111    TempFromTy = PTy->getPointeeType();
8112  if (TempFromTy->isIncompleteType()) {
8113    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8114      << (unsigned) FnKind << FnDesc
8115      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8116      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8117    MaybeEmitInheritedConstructorNote(S, Fn);
8118    return;
8119  }
8120
8121  // Diagnose base -> derived pointer conversions.
8122  unsigned BaseToDerivedConversion = 0;
8123  if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8124    if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8125      if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8126                                               FromPtrTy->getPointeeType()) &&
8127          !FromPtrTy->getPointeeType()->isIncompleteType() &&
8128          !ToPtrTy->getPointeeType()->isIncompleteType() &&
8129          S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8130                          FromPtrTy->getPointeeType()))
8131        BaseToDerivedConversion = 1;
8132    }
8133  } else if (const ObjCObjectPointerType *FromPtrTy
8134                                    = FromTy->getAs<ObjCObjectPointerType>()) {
8135    if (const ObjCObjectPointerType *ToPtrTy
8136                                        = ToTy->getAs<ObjCObjectPointerType>())
8137      if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8138        if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8139          if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8140                                                FromPtrTy->getPointeeType()) &&
8141              FromIface->isSuperClassOf(ToIface))
8142            BaseToDerivedConversion = 2;
8143  } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8144    if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8145        !FromTy->isIncompleteType() &&
8146        !ToRefTy->getPointeeType()->isIncompleteType() &&
8147        S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8148      BaseToDerivedConversion = 3;
8149    } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8150               ToTy.getNonReferenceType().getCanonicalType() ==
8151               FromTy.getNonReferenceType().getCanonicalType()) {
8152      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8153        << (unsigned) FnKind << FnDesc
8154        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8155        << (unsigned) isObjectArgument << I + 1;
8156      MaybeEmitInheritedConstructorNote(S, Fn);
8157      return;
8158    }
8159  }
8160
8161  if (BaseToDerivedConversion) {
8162    S.Diag(Fn->getLocation(),
8163           diag::note_ovl_candidate_bad_base_to_derived_conv)
8164      << (unsigned) FnKind << FnDesc
8165      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8166      << (BaseToDerivedConversion - 1)
8167      << FromTy << ToTy << I+1;
8168    MaybeEmitInheritedConstructorNote(S, Fn);
8169    return;
8170  }
8171
8172  if (isa<ObjCObjectPointerType>(CFromTy) &&
8173      isa<PointerType>(CToTy)) {
8174      Qualifiers FromQs = CFromTy.getQualifiers();
8175      Qualifiers ToQs = CToTy.getQualifiers();
8176      if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8177        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8178        << (unsigned) FnKind << FnDesc
8179        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8180        << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8181        MaybeEmitInheritedConstructorNote(S, Fn);
8182        return;
8183      }
8184  }
8185
8186  // Emit the generic diagnostic and, optionally, add the hints to it.
8187  PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8188  FDiag << (unsigned) FnKind << FnDesc
8189    << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8190    << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8191    << (unsigned) (Cand->Fix.Kind);
8192
8193  // If we can fix the conversion, suggest the FixIts.
8194  for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8195       HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8196    FDiag << *HI;
8197  S.Diag(Fn->getLocation(), FDiag);
8198
8199  MaybeEmitInheritedConstructorNote(S, Fn);
8200}
8201
8202void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8203                           unsigned NumFormalArgs) {
8204  // TODO: treat calls to a missing default constructor as a special case
8205
8206  FunctionDecl *Fn = Cand->Function;
8207  const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8208
8209  unsigned MinParams = Fn->getMinRequiredArguments();
8210
8211  // With invalid overloaded operators, it's possible that we think we
8212  // have an arity mismatch when it fact it looks like we have the
8213  // right number of arguments, because only overloaded operators have
8214  // the weird behavior of overloading member and non-member functions.
8215  // Just don't report anything.
8216  if (Fn->isInvalidDecl() &&
8217      Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8218    return;
8219
8220  // at least / at most / exactly
8221  unsigned mode, modeCount;
8222  if (NumFormalArgs < MinParams) {
8223    assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8224           (Cand->FailureKind == ovl_fail_bad_deduction &&
8225            Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8226    if (MinParams != FnTy->getNumArgs() ||
8227        FnTy->isVariadic() || FnTy->isTemplateVariadic())
8228      mode = 0; // "at least"
8229    else
8230      mode = 2; // "exactly"
8231    modeCount = MinParams;
8232  } else {
8233    assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8234           (Cand->FailureKind == ovl_fail_bad_deduction &&
8235            Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8236    if (MinParams != FnTy->getNumArgs())
8237      mode = 1; // "at most"
8238    else
8239      mode = 2; // "exactly"
8240    modeCount = FnTy->getNumArgs();
8241  }
8242
8243  std::string Description;
8244  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8245
8246  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8247    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8248      << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8249      << Fn->getParamDecl(0) << NumFormalArgs;
8250  else
8251    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8252      << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8253      << modeCount << NumFormalArgs;
8254  MaybeEmitInheritedConstructorNote(S, Fn);
8255}
8256
8257/// Diagnose a failed template-argument deduction.
8258void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
8259                          unsigned NumArgs) {
8260  FunctionDecl *Fn = Cand->Function; // pattern
8261
8262  TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
8263  NamedDecl *ParamD;
8264  (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8265  (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8266  (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8267  switch (Cand->DeductionFailure.Result) {
8268  case Sema::TDK_Success:
8269    llvm_unreachable("TDK_success while diagnosing bad deduction");
8270
8271  case Sema::TDK_Incomplete: {
8272    assert(ParamD && "no parameter found for incomplete deduction result");
8273    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
8274      << ParamD->getDeclName();
8275    MaybeEmitInheritedConstructorNote(S, Fn);
8276    return;
8277  }
8278
8279  case Sema::TDK_Underqualified: {
8280    assert(ParamD && "no parameter found for bad qualifiers deduction result");
8281    TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8282
8283    QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType();
8284
8285    // Param will have been canonicalized, but it should just be a
8286    // qualified version of ParamD, so move the qualifiers to that.
8287    QualifierCollector Qs;
8288    Qs.strip(Param);
8289    QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8290    assert(S.Context.hasSameType(Param, NonCanonParam));
8291
8292    // Arg has also been canonicalized, but there's nothing we can do
8293    // about that.  It also doesn't matter as much, because it won't
8294    // have any template parameters in it (because deduction isn't
8295    // done on dependent types).
8296    QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType();
8297
8298    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified)
8299      << ParamD->getDeclName() << Arg << NonCanonParam;
8300    MaybeEmitInheritedConstructorNote(S, Fn);
8301    return;
8302  }
8303
8304  case Sema::TDK_Inconsistent: {
8305    assert(ParamD && "no parameter found for inconsistent deduction result");
8306    int which = 0;
8307    if (isa<TemplateTypeParmDecl>(ParamD))
8308      which = 0;
8309    else if (isa<NonTypeTemplateParmDecl>(ParamD))
8310      which = 1;
8311    else {
8312      which = 2;
8313    }
8314
8315    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
8316      << which << ParamD->getDeclName()
8317      << *Cand->DeductionFailure.getFirstArg()
8318      << *Cand->DeductionFailure.getSecondArg();
8319    MaybeEmitInheritedConstructorNote(S, Fn);
8320    return;
8321  }
8322
8323  case Sema::TDK_InvalidExplicitArguments:
8324    assert(ParamD && "no parameter found for invalid explicit arguments");
8325    if (ParamD->getDeclName())
8326      S.Diag(Fn->getLocation(),
8327             diag::note_ovl_candidate_explicit_arg_mismatch_named)
8328        << ParamD->getDeclName();
8329    else {
8330      int index = 0;
8331      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8332        index = TTP->getIndex();
8333      else if (NonTypeTemplateParmDecl *NTTP
8334                                  = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8335        index = NTTP->getIndex();
8336      else
8337        index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8338      S.Diag(Fn->getLocation(),
8339             diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8340        << (index + 1);
8341    }
8342    MaybeEmitInheritedConstructorNote(S, Fn);
8343    return;
8344
8345  case Sema::TDK_TooManyArguments:
8346  case Sema::TDK_TooFewArguments:
8347    DiagnoseArityMismatch(S, Cand, NumArgs);
8348    return;
8349
8350  case Sema::TDK_InstantiationDepth:
8351    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
8352    MaybeEmitInheritedConstructorNote(S, Fn);
8353    return;
8354
8355  case Sema::TDK_SubstitutionFailure: {
8356    // Format the template argument list into the argument string.
8357    llvm::SmallString<128> TemplateArgString;
8358    if (TemplateArgumentList *Args =
8359          Cand->DeductionFailure.getTemplateArgumentList()) {
8360      TemplateArgString = " ";
8361      TemplateArgString += S.getTemplateArgumentBindingsText(
8362          Fn->getDescribedFunctionTemplate()->getTemplateParameters(), *Args);
8363    }
8364
8365    // If this candidate was disabled by enable_if, say so.
8366    PartialDiagnosticAt *PDiag = Cand->DeductionFailure.getSFINAEDiagnostic();
8367    if (PDiag && PDiag->second.getDiagID() ==
8368          diag::err_typename_nested_not_found_enable_if) {
8369      // FIXME: Use the source range of the condition, and the fully-qualified
8370      //        name of the enable_if template. These are both present in PDiag.
8371      S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8372        << "'enable_if'" << TemplateArgString;
8373      return;
8374    }
8375
8376    // Format the SFINAE diagnostic into the argument string.
8377    // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8378    //        formatted message in another diagnostic.
8379    llvm::SmallString<128> SFINAEArgString;
8380    SourceRange R;
8381    if (PDiag) {
8382      SFINAEArgString = ": ";
8383      R = SourceRange(PDiag->first, PDiag->first);
8384      PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8385    }
8386
8387    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
8388      << TemplateArgString << SFINAEArgString << R;
8389    MaybeEmitInheritedConstructorNote(S, Fn);
8390    return;
8391  }
8392
8393  // TODO: diagnose these individually, then kill off
8394  // note_ovl_candidate_bad_deduction, which is uselessly vague.
8395  case Sema::TDK_NonDeducedMismatch:
8396  case Sema::TDK_FailedOverloadResolution:
8397    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
8398    MaybeEmitInheritedConstructorNote(S, Fn);
8399    return;
8400  }
8401}
8402
8403/// CUDA: diagnose an invalid call across targets.
8404void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8405  FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8406  FunctionDecl *Callee = Cand->Function;
8407
8408  Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8409                           CalleeTarget = S.IdentifyCUDATarget(Callee);
8410
8411  std::string FnDesc;
8412  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8413
8414  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8415      << (unsigned) FnKind << CalleeTarget << CallerTarget;
8416}
8417
8418/// Generates a 'note' diagnostic for an overload candidate.  We've
8419/// already generated a primary error at the call site.
8420///
8421/// It really does need to be a single diagnostic with its caret
8422/// pointed at the candidate declaration.  Yes, this creates some
8423/// major challenges of technical writing.  Yes, this makes pointing
8424/// out problems with specific arguments quite awkward.  It's still
8425/// better than generating twenty screens of text for every failed
8426/// overload.
8427///
8428/// It would be great to be able to express per-candidate problems
8429/// more richly for those diagnostic clients that cared, but we'd
8430/// still have to be just as careful with the default diagnostics.
8431void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8432                           unsigned NumArgs) {
8433  FunctionDecl *Fn = Cand->Function;
8434
8435  // Note deleted candidates, but only if they're viable.
8436  if (Cand->Viable && (Fn->isDeleted() ||
8437      S.isFunctionConsideredUnavailable(Fn))) {
8438    std::string FnDesc;
8439    OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8440
8441    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8442      << FnKind << FnDesc
8443      << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8444    MaybeEmitInheritedConstructorNote(S, Fn);
8445    return;
8446  }
8447
8448  // We don't really have anything else to say about viable candidates.
8449  if (Cand->Viable) {
8450    S.NoteOverloadCandidate(Fn);
8451    return;
8452  }
8453
8454  switch (Cand->FailureKind) {
8455  case ovl_fail_too_many_arguments:
8456  case ovl_fail_too_few_arguments:
8457    return DiagnoseArityMismatch(S, Cand, NumArgs);
8458
8459  case ovl_fail_bad_deduction:
8460    return DiagnoseBadDeduction(S, Cand, NumArgs);
8461
8462  case ovl_fail_trivial_conversion:
8463  case ovl_fail_bad_final_conversion:
8464  case ovl_fail_final_conversion_not_exact:
8465    return S.NoteOverloadCandidate(Fn);
8466
8467  case ovl_fail_bad_conversion: {
8468    unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8469    for (unsigned N = Cand->NumConversions; I != N; ++I)
8470      if (Cand->Conversions[I].isBad())
8471        return DiagnoseBadConversion(S, Cand, I);
8472
8473    // FIXME: this currently happens when we're called from SemaInit
8474    // when user-conversion overload fails.  Figure out how to handle
8475    // those conditions and diagnose them well.
8476    return S.NoteOverloadCandidate(Fn);
8477  }
8478
8479  case ovl_fail_bad_target:
8480    return DiagnoseBadTarget(S, Cand);
8481  }
8482}
8483
8484void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8485  // Desugar the type of the surrogate down to a function type,
8486  // retaining as many typedefs as possible while still showing
8487  // the function type (and, therefore, its parameter types).
8488  QualType FnType = Cand->Surrogate->getConversionType();
8489  bool isLValueReference = false;
8490  bool isRValueReference = false;
8491  bool isPointer = false;
8492  if (const LValueReferenceType *FnTypeRef =
8493        FnType->getAs<LValueReferenceType>()) {
8494    FnType = FnTypeRef->getPointeeType();
8495    isLValueReference = true;
8496  } else if (const RValueReferenceType *FnTypeRef =
8497               FnType->getAs<RValueReferenceType>()) {
8498    FnType = FnTypeRef->getPointeeType();
8499    isRValueReference = true;
8500  }
8501  if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8502    FnType = FnTypePtr->getPointeeType();
8503    isPointer = true;
8504  }
8505  // Desugar down to a function type.
8506  FnType = QualType(FnType->getAs<FunctionType>(), 0);
8507  // Reconstruct the pointer/reference as appropriate.
8508  if (isPointer) FnType = S.Context.getPointerType(FnType);
8509  if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8510  if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8511
8512  S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8513    << FnType;
8514  MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8515}
8516
8517void NoteBuiltinOperatorCandidate(Sema &S,
8518                                  const char *Opc,
8519                                  SourceLocation OpLoc,
8520                                  OverloadCandidate *Cand) {
8521  assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8522  std::string TypeStr("operator");
8523  TypeStr += Opc;
8524  TypeStr += "(";
8525  TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8526  if (Cand->NumConversions == 1) {
8527    TypeStr += ")";
8528    S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8529  } else {
8530    TypeStr += ", ";
8531    TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8532    TypeStr += ")";
8533    S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8534  }
8535}
8536
8537void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8538                                  OverloadCandidate *Cand) {
8539  unsigned NoOperands = Cand->NumConversions;
8540  for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8541    const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8542    if (ICS.isBad()) break; // all meaningless after first invalid
8543    if (!ICS.isAmbiguous()) continue;
8544
8545    ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8546                              S.PDiag(diag::note_ambiguous_type_conversion));
8547  }
8548}
8549
8550SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8551  if (Cand->Function)
8552    return Cand->Function->getLocation();
8553  if (Cand->IsSurrogate)
8554    return Cand->Surrogate->getLocation();
8555  return SourceLocation();
8556}
8557
8558static unsigned
8559RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) {
8560  switch ((Sema::TemplateDeductionResult)DFI.Result) {
8561  case Sema::TDK_Success:
8562    llvm_unreachable("TDK_success while diagnosing bad deduction");
8563
8564  case Sema::TDK_Incomplete:
8565    return 1;
8566
8567  case Sema::TDK_Underqualified:
8568  case Sema::TDK_Inconsistent:
8569    return 2;
8570
8571  case Sema::TDK_SubstitutionFailure:
8572  case Sema::TDK_NonDeducedMismatch:
8573    return 3;
8574
8575  case Sema::TDK_InstantiationDepth:
8576  case Sema::TDK_FailedOverloadResolution:
8577    return 4;
8578
8579  case Sema::TDK_InvalidExplicitArguments:
8580    return 5;
8581
8582  case Sema::TDK_TooManyArguments:
8583  case Sema::TDK_TooFewArguments:
8584    return 6;
8585  }
8586  llvm_unreachable("Unhandled deduction result");
8587}
8588
8589struct CompareOverloadCandidatesForDisplay {
8590  Sema &S;
8591  CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8592
8593  bool operator()(const OverloadCandidate *L,
8594                  const OverloadCandidate *R) {
8595    // Fast-path this check.
8596    if (L == R) return false;
8597
8598    // Order first by viability.
8599    if (L->Viable) {
8600      if (!R->Viable) return true;
8601
8602      // TODO: introduce a tri-valued comparison for overload
8603      // candidates.  Would be more worthwhile if we had a sort
8604      // that could exploit it.
8605      if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8606      if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8607    } else if (R->Viable)
8608      return false;
8609
8610    assert(L->Viable == R->Viable);
8611
8612    // Criteria by which we can sort non-viable candidates:
8613    if (!L->Viable) {
8614      // 1. Arity mismatches come after other candidates.
8615      if (L->FailureKind == ovl_fail_too_many_arguments ||
8616          L->FailureKind == ovl_fail_too_few_arguments)
8617        return false;
8618      if (R->FailureKind == ovl_fail_too_many_arguments ||
8619          R->FailureKind == ovl_fail_too_few_arguments)
8620        return true;
8621
8622      // 2. Bad conversions come first and are ordered by the number
8623      // of bad conversions and quality of good conversions.
8624      if (L->FailureKind == ovl_fail_bad_conversion) {
8625        if (R->FailureKind != ovl_fail_bad_conversion)
8626          return true;
8627
8628        // The conversion that can be fixed with a smaller number of changes,
8629        // comes first.
8630        unsigned numLFixes = L->Fix.NumConversionsFixed;
8631        unsigned numRFixes = R->Fix.NumConversionsFixed;
8632        numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8633        numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8634        if (numLFixes != numRFixes) {
8635          if (numLFixes < numRFixes)
8636            return true;
8637          else
8638            return false;
8639        }
8640
8641        // If there's any ordering between the defined conversions...
8642        // FIXME: this might not be transitive.
8643        assert(L->NumConversions == R->NumConversions);
8644
8645        int leftBetter = 0;
8646        unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8647        for (unsigned E = L->NumConversions; I != E; ++I) {
8648          switch (CompareImplicitConversionSequences(S,
8649                                                     L->Conversions[I],
8650                                                     R->Conversions[I])) {
8651          case ImplicitConversionSequence::Better:
8652            leftBetter++;
8653            break;
8654
8655          case ImplicitConversionSequence::Worse:
8656            leftBetter--;
8657            break;
8658
8659          case ImplicitConversionSequence::Indistinguishable:
8660            break;
8661          }
8662        }
8663        if (leftBetter > 0) return true;
8664        if (leftBetter < 0) return false;
8665
8666      } else if (R->FailureKind == ovl_fail_bad_conversion)
8667        return false;
8668
8669      if (L->FailureKind == ovl_fail_bad_deduction) {
8670        if (R->FailureKind != ovl_fail_bad_deduction)
8671          return true;
8672
8673        if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8674          return RankDeductionFailure(L->DeductionFailure)
8675               < RankDeductionFailure(R->DeductionFailure);
8676      } else if (R->FailureKind == ovl_fail_bad_deduction)
8677        return false;
8678
8679      // TODO: others?
8680    }
8681
8682    // Sort everything else by location.
8683    SourceLocation LLoc = GetLocationForCandidate(L);
8684    SourceLocation RLoc = GetLocationForCandidate(R);
8685
8686    // Put candidates without locations (e.g. builtins) at the end.
8687    if (LLoc.isInvalid()) return false;
8688    if (RLoc.isInvalid()) return true;
8689
8690    return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8691  }
8692};
8693
8694/// CompleteNonViableCandidate - Normally, overload resolution only
8695/// computes up to the first. Produces the FixIt set if possible.
8696void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8697                                llvm::ArrayRef<Expr *> Args) {
8698  assert(!Cand->Viable);
8699
8700  // Don't do anything on failures other than bad conversion.
8701  if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8702
8703  // We only want the FixIts if all the arguments can be corrected.
8704  bool Unfixable = false;
8705  // Use a implicit copy initialization to check conversion fixes.
8706  Cand->Fix.setConversionChecker(TryCopyInitialization);
8707
8708  // Skip forward to the first bad conversion.
8709  unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
8710  unsigned ConvCount = Cand->NumConversions;
8711  while (true) {
8712    assert(ConvIdx != ConvCount && "no bad conversion in candidate");
8713    ConvIdx++;
8714    if (Cand->Conversions[ConvIdx - 1].isBad()) {
8715      Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
8716      break;
8717    }
8718  }
8719
8720  if (ConvIdx == ConvCount)
8721    return;
8722
8723  assert(!Cand->Conversions[ConvIdx].isInitialized() &&
8724         "remaining conversion is initialized?");
8725
8726  // FIXME: this should probably be preserved from the overload
8727  // operation somehow.
8728  bool SuppressUserConversions = false;
8729
8730  const FunctionProtoType* Proto;
8731  unsigned ArgIdx = ConvIdx;
8732
8733  if (Cand->IsSurrogate) {
8734    QualType ConvType
8735      = Cand->Surrogate->getConversionType().getNonReferenceType();
8736    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
8737      ConvType = ConvPtrType->getPointeeType();
8738    Proto = ConvType->getAs<FunctionProtoType>();
8739    ArgIdx--;
8740  } else if (Cand->Function) {
8741    Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
8742    if (isa<CXXMethodDecl>(Cand->Function) &&
8743        !isa<CXXConstructorDecl>(Cand->Function))
8744      ArgIdx--;
8745  } else {
8746    // Builtin binary operator with a bad first conversion.
8747    assert(ConvCount <= 3);
8748    for (; ConvIdx != ConvCount; ++ConvIdx)
8749      Cand->Conversions[ConvIdx]
8750        = TryCopyInitialization(S, Args[ConvIdx],
8751                                Cand->BuiltinTypes.ParamTypes[ConvIdx],
8752                                SuppressUserConversions,
8753                                /*InOverloadResolution*/ true,
8754                                /*AllowObjCWritebackConversion=*/
8755                                  S.getLangOpts().ObjCAutoRefCount);
8756    return;
8757  }
8758
8759  // Fill in the rest of the conversions.
8760  unsigned NumArgsInProto = Proto->getNumArgs();
8761  for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
8762    if (ArgIdx < NumArgsInProto) {
8763      Cand->Conversions[ConvIdx]
8764        = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
8765                                SuppressUserConversions,
8766                                /*InOverloadResolution=*/true,
8767                                /*AllowObjCWritebackConversion=*/
8768                                  S.getLangOpts().ObjCAutoRefCount);
8769      // Store the FixIt in the candidate if it exists.
8770      if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
8771        Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
8772    }
8773    else
8774      Cand->Conversions[ConvIdx].setEllipsis();
8775  }
8776}
8777
8778} // end anonymous namespace
8779
8780/// PrintOverloadCandidates - When overload resolution fails, prints
8781/// diagnostic messages containing the candidates in the candidate
8782/// set.
8783void OverloadCandidateSet::NoteCandidates(Sema &S,
8784                                          OverloadCandidateDisplayKind OCD,
8785                                          llvm::ArrayRef<Expr *> Args,
8786                                          const char *Opc,
8787                                          SourceLocation OpLoc) {
8788  // Sort the candidates by viability and position.  Sorting directly would
8789  // be prohibitive, so we make a set of pointers and sort those.
8790  SmallVector<OverloadCandidate*, 32> Cands;
8791  if (OCD == OCD_AllCandidates) Cands.reserve(size());
8792  for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
8793    if (Cand->Viable)
8794      Cands.push_back(Cand);
8795    else if (OCD == OCD_AllCandidates) {
8796      CompleteNonViableCandidate(S, Cand, Args);
8797      if (Cand->Function || Cand->IsSurrogate)
8798        Cands.push_back(Cand);
8799      // Otherwise, this a non-viable builtin candidate.  We do not, in general,
8800      // want to list every possible builtin candidate.
8801    }
8802  }
8803
8804  std::sort(Cands.begin(), Cands.end(),
8805            CompareOverloadCandidatesForDisplay(S));
8806
8807  bool ReportedAmbiguousConversions = false;
8808
8809  SmallVectorImpl<OverloadCandidate*>::iterator I, E;
8810  const DiagnosticsEngine::OverloadsShown ShowOverloads =
8811      S.Diags.getShowOverloads();
8812  unsigned CandsShown = 0;
8813  for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
8814    OverloadCandidate *Cand = *I;
8815
8816    // Set an arbitrary limit on the number of candidate functions we'll spam
8817    // the user with.  FIXME: This limit should depend on details of the
8818    // candidate list.
8819    if (CandsShown >= 4 && ShowOverloads == DiagnosticsEngine::Ovl_Best) {
8820      break;
8821    }
8822    ++CandsShown;
8823
8824    if (Cand->Function)
8825      NoteFunctionCandidate(S, Cand, Args.size());
8826    else if (Cand->IsSurrogate)
8827      NoteSurrogateCandidate(S, Cand);
8828    else {
8829      assert(Cand->Viable &&
8830             "Non-viable built-in candidates are not added to Cands.");
8831      // Generally we only see ambiguities including viable builtin
8832      // operators if overload resolution got screwed up by an
8833      // ambiguous user-defined conversion.
8834      //
8835      // FIXME: It's quite possible for different conversions to see
8836      // different ambiguities, though.
8837      if (!ReportedAmbiguousConversions) {
8838        NoteAmbiguousUserConversions(S, OpLoc, Cand);
8839        ReportedAmbiguousConversions = true;
8840      }
8841
8842      // If this is a viable builtin, print it.
8843      NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
8844    }
8845  }
8846
8847  if (I != E)
8848    S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
8849}
8850
8851// [PossiblyAFunctionType]  -->   [Return]
8852// NonFunctionType --> NonFunctionType
8853// R (A) --> R(A)
8854// R (*)(A) --> R (A)
8855// R (&)(A) --> R (A)
8856// R (S::*)(A) --> R (A)
8857QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
8858  QualType Ret = PossiblyAFunctionType;
8859  if (const PointerType *ToTypePtr =
8860    PossiblyAFunctionType->getAs<PointerType>())
8861    Ret = ToTypePtr->getPointeeType();
8862  else if (const ReferenceType *ToTypeRef =
8863    PossiblyAFunctionType->getAs<ReferenceType>())
8864    Ret = ToTypeRef->getPointeeType();
8865  else if (const MemberPointerType *MemTypePtr =
8866    PossiblyAFunctionType->getAs<MemberPointerType>())
8867    Ret = MemTypePtr->getPointeeType();
8868  Ret =
8869    Context.getCanonicalType(Ret).getUnqualifiedType();
8870  return Ret;
8871}
8872
8873// A helper class to help with address of function resolution
8874// - allows us to avoid passing around all those ugly parameters
8875class AddressOfFunctionResolver
8876{
8877  Sema& S;
8878  Expr* SourceExpr;
8879  const QualType& TargetType;
8880  QualType TargetFunctionType; // Extracted function type from target type
8881
8882  bool Complain;
8883  //DeclAccessPair& ResultFunctionAccessPair;
8884  ASTContext& Context;
8885
8886  bool TargetTypeIsNonStaticMemberFunction;
8887  bool FoundNonTemplateFunction;
8888
8889  OverloadExpr::FindResult OvlExprInfo;
8890  OverloadExpr *OvlExpr;
8891  TemplateArgumentListInfo OvlExplicitTemplateArgs;
8892  SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
8893
8894public:
8895  AddressOfFunctionResolver(Sema &S, Expr* SourceExpr,
8896                            const QualType& TargetType, bool Complain)
8897    : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
8898      Complain(Complain), Context(S.getASTContext()),
8899      TargetTypeIsNonStaticMemberFunction(
8900                                    !!TargetType->getAs<MemberPointerType>()),
8901      FoundNonTemplateFunction(false),
8902      OvlExprInfo(OverloadExpr::find(SourceExpr)),
8903      OvlExpr(OvlExprInfo.Expression)
8904  {
8905    ExtractUnqualifiedFunctionTypeFromTargetType();
8906
8907    if (!TargetFunctionType->isFunctionType()) {
8908      if (OvlExpr->hasExplicitTemplateArgs()) {
8909        DeclAccessPair dap;
8910        if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization(
8911                                            OvlExpr, false, &dap) ) {
8912
8913          if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
8914            if (!Method->isStatic()) {
8915              // If the target type is a non-function type and the function
8916              // found is a non-static member function, pretend as if that was
8917              // the target, it's the only possible type to end up with.
8918              TargetTypeIsNonStaticMemberFunction = true;
8919
8920              // And skip adding the function if its not in the proper form.
8921              // We'll diagnose this due to an empty set of functions.
8922              if (!OvlExprInfo.HasFormOfMemberPointer)
8923                return;
8924            }
8925          }
8926
8927          Matches.push_back(std::make_pair(dap,Fn));
8928        }
8929      }
8930      return;
8931    }
8932
8933    if (OvlExpr->hasExplicitTemplateArgs())
8934      OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
8935
8936    if (FindAllFunctionsThatMatchTargetTypeExactly()) {
8937      // C++ [over.over]p4:
8938      //   If more than one function is selected, [...]
8939      if (Matches.size() > 1) {
8940        if (FoundNonTemplateFunction)
8941          EliminateAllTemplateMatches();
8942        else
8943          EliminateAllExceptMostSpecializedTemplate();
8944      }
8945    }
8946  }
8947
8948private:
8949  bool isTargetTypeAFunction() const {
8950    return TargetFunctionType->isFunctionType();
8951  }
8952
8953  // [ToType]     [Return]
8954
8955  // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
8956  // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
8957  // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
8958  void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
8959    TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
8960  }
8961
8962  // return true if any matching specializations were found
8963  bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
8964                                   const DeclAccessPair& CurAccessFunPair) {
8965    if (CXXMethodDecl *Method
8966              = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
8967      // Skip non-static function templates when converting to pointer, and
8968      // static when converting to member pointer.
8969      if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
8970        return false;
8971    }
8972    else if (TargetTypeIsNonStaticMemberFunction)
8973      return false;
8974
8975    // C++ [over.over]p2:
8976    //   If the name is a function template, template argument deduction is
8977    //   done (14.8.2.2), and if the argument deduction succeeds, the
8978    //   resulting template argument list is used to generate a single
8979    //   function template specialization, which is added to the set of
8980    //   overloaded functions considered.
8981    FunctionDecl *Specialization = 0;
8982    TemplateDeductionInfo Info(Context, OvlExpr->getNameLoc());
8983    if (Sema::TemplateDeductionResult Result
8984          = S.DeduceTemplateArguments(FunctionTemplate,
8985                                      &OvlExplicitTemplateArgs,
8986                                      TargetFunctionType, Specialization,
8987                                      Info)) {
8988      // FIXME: make a note of the failed deduction for diagnostics.
8989      (void)Result;
8990      return false;
8991    }
8992
8993    // Template argument deduction ensures that we have an exact match.
8994    // This function template specicalization works.
8995    Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
8996    assert(TargetFunctionType
8997                      == Context.getCanonicalType(Specialization->getType()));
8998    Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
8999    return true;
9000  }
9001
9002  bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9003                                      const DeclAccessPair& CurAccessFunPair) {
9004    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9005      // Skip non-static functions when converting to pointer, and static
9006      // when converting to member pointer.
9007      if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9008        return false;
9009    }
9010    else if (TargetTypeIsNonStaticMemberFunction)
9011      return false;
9012
9013    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9014      if (S.getLangOpts().CUDA)
9015        if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9016          if (S.CheckCUDATarget(Caller, FunDecl))
9017            return false;
9018
9019      QualType ResultTy;
9020      if (Context.hasSameUnqualifiedType(TargetFunctionType,
9021                                         FunDecl->getType()) ||
9022          S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9023                                 ResultTy)) {
9024        Matches.push_back(std::make_pair(CurAccessFunPair,
9025          cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9026        FoundNonTemplateFunction = true;
9027        return true;
9028      }
9029    }
9030
9031    return false;
9032  }
9033
9034  bool FindAllFunctionsThatMatchTargetTypeExactly() {
9035    bool Ret = false;
9036
9037    // If the overload expression doesn't have the form of a pointer to
9038    // member, don't try to convert it to a pointer-to-member type.
9039    if (IsInvalidFormOfPointerToMemberFunction())
9040      return false;
9041
9042    for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9043                               E = OvlExpr->decls_end();
9044         I != E; ++I) {
9045      // Look through any using declarations to find the underlying function.
9046      NamedDecl *Fn = (*I)->getUnderlyingDecl();
9047
9048      // C++ [over.over]p3:
9049      //   Non-member functions and static member functions match
9050      //   targets of type "pointer-to-function" or "reference-to-function."
9051      //   Nonstatic member functions match targets of
9052      //   type "pointer-to-member-function."
9053      // Note that according to DR 247, the containing class does not matter.
9054      if (FunctionTemplateDecl *FunctionTemplate
9055                                        = dyn_cast<FunctionTemplateDecl>(Fn)) {
9056        if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9057          Ret = true;
9058      }
9059      // If we have explicit template arguments supplied, skip non-templates.
9060      else if (!OvlExpr->hasExplicitTemplateArgs() &&
9061               AddMatchingNonTemplateFunction(Fn, I.getPair()))
9062        Ret = true;
9063    }
9064    assert(Ret || Matches.empty());
9065    return Ret;
9066  }
9067
9068  void EliminateAllExceptMostSpecializedTemplate() {
9069    //   [...] and any given function template specialization F1 is
9070    //   eliminated if the set contains a second function template
9071    //   specialization whose function template is more specialized
9072    //   than the function template of F1 according to the partial
9073    //   ordering rules of 14.5.5.2.
9074
9075    // The algorithm specified above is quadratic. We instead use a
9076    // two-pass algorithm (similar to the one used to identify the
9077    // best viable function in an overload set) that identifies the
9078    // best function template (if it exists).
9079
9080    UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9081    for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9082      MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9083
9084    UnresolvedSetIterator Result =
9085      S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
9086                           TPOC_Other, 0, SourceExpr->getLocStart(),
9087                           S.PDiag(),
9088                           S.PDiag(diag::err_addr_ovl_ambiguous)
9089                             << Matches[0].second->getDeclName(),
9090                           S.PDiag(diag::note_ovl_candidate)
9091                             << (unsigned) oc_function_template,
9092                           Complain, TargetFunctionType);
9093
9094    if (Result != MatchesCopy.end()) {
9095      // Make it the first and only element
9096      Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9097      Matches[0].second = cast<FunctionDecl>(*Result);
9098      Matches.resize(1);
9099    }
9100  }
9101
9102  void EliminateAllTemplateMatches() {
9103    //   [...] any function template specializations in the set are
9104    //   eliminated if the set also contains a non-template function, [...]
9105    for (unsigned I = 0, N = Matches.size(); I != N; ) {
9106      if (Matches[I].second->getPrimaryTemplate() == 0)
9107        ++I;
9108      else {
9109        Matches[I] = Matches[--N];
9110        Matches.set_size(N);
9111      }
9112    }
9113  }
9114
9115public:
9116  void ComplainNoMatchesFound() const {
9117    assert(Matches.empty());
9118    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9119        << OvlExpr->getName() << TargetFunctionType
9120        << OvlExpr->getSourceRange();
9121    S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9122  }
9123
9124  bool IsInvalidFormOfPointerToMemberFunction() const {
9125    return TargetTypeIsNonStaticMemberFunction &&
9126      !OvlExprInfo.HasFormOfMemberPointer;
9127  }
9128
9129  void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9130      // TODO: Should we condition this on whether any functions might
9131      // have matched, or is it more appropriate to do that in callers?
9132      // TODO: a fixit wouldn't hurt.
9133      S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9134        << TargetType << OvlExpr->getSourceRange();
9135  }
9136
9137  void ComplainOfInvalidConversion() const {
9138    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9139      << OvlExpr->getName() << TargetType;
9140  }
9141
9142  void ComplainMultipleMatchesFound() const {
9143    assert(Matches.size() > 1);
9144    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9145      << OvlExpr->getName()
9146      << OvlExpr->getSourceRange();
9147    S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9148  }
9149
9150  bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9151
9152  int getNumMatches() const { return Matches.size(); }
9153
9154  FunctionDecl* getMatchingFunctionDecl() const {
9155    if (Matches.size() != 1) return 0;
9156    return Matches[0].second;
9157  }
9158
9159  const DeclAccessPair* getMatchingFunctionAccessPair() const {
9160    if (Matches.size() != 1) return 0;
9161    return &Matches[0].first;
9162  }
9163};
9164
9165/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9166/// an overloaded function (C++ [over.over]), where @p From is an
9167/// expression with overloaded function type and @p ToType is the type
9168/// we're trying to resolve to. For example:
9169///
9170/// @code
9171/// int f(double);
9172/// int f(int);
9173///
9174/// int (*pfd)(double) = f; // selects f(double)
9175/// @endcode
9176///
9177/// This routine returns the resulting FunctionDecl if it could be
9178/// resolved, and NULL otherwise. When @p Complain is true, this
9179/// routine will emit diagnostics if there is an error.
9180FunctionDecl *
9181Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9182                                         QualType TargetType,
9183                                         bool Complain,
9184                                         DeclAccessPair &FoundResult,
9185                                         bool *pHadMultipleCandidates) {
9186  assert(AddressOfExpr->getType() == Context.OverloadTy);
9187
9188  AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9189                                     Complain);
9190  int NumMatches = Resolver.getNumMatches();
9191  FunctionDecl* Fn = 0;
9192  if (NumMatches == 0 && Complain) {
9193    if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9194      Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9195    else
9196      Resolver.ComplainNoMatchesFound();
9197  }
9198  else if (NumMatches > 1 && Complain)
9199    Resolver.ComplainMultipleMatchesFound();
9200  else if (NumMatches == 1) {
9201    Fn = Resolver.getMatchingFunctionDecl();
9202    assert(Fn);
9203    FoundResult = *Resolver.getMatchingFunctionAccessPair();
9204    MarkFunctionReferenced(AddressOfExpr->getLocStart(), Fn);
9205    if (Complain)
9206      CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9207  }
9208
9209  if (pHadMultipleCandidates)
9210    *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9211  return Fn;
9212}
9213
9214/// \brief Given an expression that refers to an overloaded function, try to
9215/// resolve that overloaded function expression down to a single function.
9216///
9217/// This routine can only resolve template-ids that refer to a single function
9218/// template, where that template-id refers to a single template whose template
9219/// arguments are either provided by the template-id or have defaults,
9220/// as described in C++0x [temp.arg.explicit]p3.
9221FunctionDecl *
9222Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9223                                                  bool Complain,
9224                                                  DeclAccessPair *FoundResult) {
9225  // C++ [over.over]p1:
9226  //   [...] [Note: any redundant set of parentheses surrounding the
9227  //   overloaded function name is ignored (5.1). ]
9228  // C++ [over.over]p1:
9229  //   [...] The overloaded function name can be preceded by the &
9230  //   operator.
9231
9232  // If we didn't actually find any template-ids, we're done.
9233  if (!ovl->hasExplicitTemplateArgs())
9234    return 0;
9235
9236  TemplateArgumentListInfo ExplicitTemplateArgs;
9237  ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9238
9239  // Look through all of the overloaded functions, searching for one
9240  // whose type matches exactly.
9241  FunctionDecl *Matched = 0;
9242  for (UnresolvedSetIterator I = ovl->decls_begin(),
9243         E = ovl->decls_end(); I != E; ++I) {
9244    // C++0x [temp.arg.explicit]p3:
9245    //   [...] In contexts where deduction is done and fails, or in contexts
9246    //   where deduction is not done, if a template argument list is
9247    //   specified and it, along with any default template arguments,
9248    //   identifies a single function template specialization, then the
9249    //   template-id is an lvalue for the function template specialization.
9250    FunctionTemplateDecl *FunctionTemplate
9251      = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9252
9253    // C++ [over.over]p2:
9254    //   If the name is a function template, template argument deduction is
9255    //   done (14.8.2.2), and if the argument deduction succeeds, the
9256    //   resulting template argument list is used to generate a single
9257    //   function template specialization, which is added to the set of
9258    //   overloaded functions considered.
9259    FunctionDecl *Specialization = 0;
9260    TemplateDeductionInfo Info(Context, ovl->getNameLoc());
9261    if (TemplateDeductionResult Result
9262          = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9263                                    Specialization, Info)) {
9264      // FIXME: make a note of the failed deduction for diagnostics.
9265      (void)Result;
9266      continue;
9267    }
9268
9269    assert(Specialization && "no specialization and no error?");
9270
9271    // Multiple matches; we can't resolve to a single declaration.
9272    if (Matched) {
9273      if (Complain) {
9274        Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9275          << ovl->getName();
9276        NoteAllOverloadCandidates(ovl);
9277      }
9278      return 0;
9279    }
9280
9281    Matched = Specialization;
9282    if (FoundResult) *FoundResult = I.getPair();
9283  }
9284
9285  return Matched;
9286}
9287
9288
9289
9290
9291// Resolve and fix an overloaded expression that can be resolved
9292// because it identifies a single function template specialization.
9293//
9294// Last three arguments should only be supplied if Complain = true
9295//
9296// Return true if it was logically possible to so resolve the
9297// expression, regardless of whether or not it succeeded.  Always
9298// returns true if 'complain' is set.
9299bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9300                      ExprResult &SrcExpr, bool doFunctionPointerConverion,
9301                   bool complain, const SourceRange& OpRangeForComplaining,
9302                                           QualType DestTypeForComplaining,
9303                                            unsigned DiagIDForComplaining) {
9304  assert(SrcExpr.get()->getType() == Context.OverloadTy);
9305
9306  OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9307
9308  DeclAccessPair found;
9309  ExprResult SingleFunctionExpression;
9310  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9311                           ovl.Expression, /*complain*/ false, &found)) {
9312    if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9313      SrcExpr = ExprError();
9314      return true;
9315    }
9316
9317    // It is only correct to resolve to an instance method if we're
9318    // resolving a form that's permitted to be a pointer to member.
9319    // Otherwise we'll end up making a bound member expression, which
9320    // is illegal in all the contexts we resolve like this.
9321    if (!ovl.HasFormOfMemberPointer &&
9322        isa<CXXMethodDecl>(fn) &&
9323        cast<CXXMethodDecl>(fn)->isInstance()) {
9324      if (!complain) return false;
9325
9326      Diag(ovl.Expression->getExprLoc(),
9327           diag::err_bound_member_function)
9328        << 0 << ovl.Expression->getSourceRange();
9329
9330      // TODO: I believe we only end up here if there's a mix of
9331      // static and non-static candidates (otherwise the expression
9332      // would have 'bound member' type, not 'overload' type).
9333      // Ideally we would note which candidate was chosen and why
9334      // the static candidates were rejected.
9335      SrcExpr = ExprError();
9336      return true;
9337    }
9338
9339    // Fix the expression to refer to 'fn'.
9340    SingleFunctionExpression =
9341      Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9342
9343    // If desired, do function-to-pointer decay.
9344    if (doFunctionPointerConverion) {
9345      SingleFunctionExpression =
9346        DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9347      if (SingleFunctionExpression.isInvalid()) {
9348        SrcExpr = ExprError();
9349        return true;
9350      }
9351    }
9352  }
9353
9354  if (!SingleFunctionExpression.isUsable()) {
9355    if (complain) {
9356      Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9357        << ovl.Expression->getName()
9358        << DestTypeForComplaining
9359        << OpRangeForComplaining
9360        << ovl.Expression->getQualifierLoc().getSourceRange();
9361      NoteAllOverloadCandidates(SrcExpr.get());
9362
9363      SrcExpr = ExprError();
9364      return true;
9365    }
9366
9367    return false;
9368  }
9369
9370  SrcExpr = SingleFunctionExpression;
9371  return true;
9372}
9373
9374/// \brief Add a single candidate to the overload set.
9375static void AddOverloadedCallCandidate(Sema &S,
9376                                       DeclAccessPair FoundDecl,
9377                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
9378                                       llvm::ArrayRef<Expr *> Args,
9379                                       OverloadCandidateSet &CandidateSet,
9380                                       bool PartialOverloading,
9381                                       bool KnownValid) {
9382  NamedDecl *Callee = FoundDecl.getDecl();
9383  if (isa<UsingShadowDecl>(Callee))
9384    Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9385
9386  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9387    if (ExplicitTemplateArgs) {
9388      assert(!KnownValid && "Explicit template arguments?");
9389      return;
9390    }
9391    S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9392                           PartialOverloading);
9393    return;
9394  }
9395
9396  if (FunctionTemplateDecl *FuncTemplate
9397      = dyn_cast<FunctionTemplateDecl>(Callee)) {
9398    S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9399                                   ExplicitTemplateArgs, Args, CandidateSet);
9400    return;
9401  }
9402
9403  assert(!KnownValid && "unhandled case in overloaded call candidate");
9404}
9405
9406/// \brief Add the overload candidates named by callee and/or found by argument
9407/// dependent lookup to the given overload set.
9408void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9409                                       llvm::ArrayRef<Expr *> Args,
9410                                       OverloadCandidateSet &CandidateSet,
9411                                       bool PartialOverloading) {
9412
9413#ifndef NDEBUG
9414  // Verify that ArgumentDependentLookup is consistent with the rules
9415  // in C++0x [basic.lookup.argdep]p3:
9416  //
9417  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9418  //   and let Y be the lookup set produced by argument dependent
9419  //   lookup (defined as follows). If X contains
9420  //
9421  //     -- a declaration of a class member, or
9422  //
9423  //     -- a block-scope function declaration that is not a
9424  //        using-declaration, or
9425  //
9426  //     -- a declaration that is neither a function or a function
9427  //        template
9428  //
9429  //   then Y is empty.
9430
9431  if (ULE->requiresADL()) {
9432    for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9433           E = ULE->decls_end(); I != E; ++I) {
9434      assert(!(*I)->getDeclContext()->isRecord());
9435      assert(isa<UsingShadowDecl>(*I) ||
9436             !(*I)->getDeclContext()->isFunctionOrMethod());
9437      assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9438    }
9439  }
9440#endif
9441
9442  // It would be nice to avoid this copy.
9443  TemplateArgumentListInfo TABuffer;
9444  TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9445  if (ULE->hasExplicitTemplateArgs()) {
9446    ULE->copyTemplateArgumentsInto(TABuffer);
9447    ExplicitTemplateArgs = &TABuffer;
9448  }
9449
9450  for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9451         E = ULE->decls_end(); I != E; ++I)
9452    AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9453                               CandidateSet, PartialOverloading,
9454                               /*KnownValid*/ true);
9455
9456  if (ULE->requiresADL())
9457    AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9458                                         ULE->getExprLoc(),
9459                                         Args, ExplicitTemplateArgs,
9460                                         CandidateSet, PartialOverloading,
9461                                         ULE->isStdAssociatedNamespace());
9462}
9463
9464/// Attempt to recover from an ill-formed use of a non-dependent name in a
9465/// template, where the non-dependent name was declared after the template
9466/// was defined. This is common in code written for a compilers which do not
9467/// correctly implement two-stage name lookup.
9468///
9469/// Returns true if a viable candidate was found and a diagnostic was issued.
9470static bool
9471DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9472                       const CXXScopeSpec &SS, LookupResult &R,
9473                       TemplateArgumentListInfo *ExplicitTemplateArgs,
9474                       llvm::ArrayRef<Expr *> Args) {
9475  if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9476    return false;
9477
9478  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9479    if (DC->isTransparentContext())
9480      continue;
9481
9482    SemaRef.LookupQualifiedName(R, DC);
9483
9484    if (!R.empty()) {
9485      R.suppressDiagnostics();
9486
9487      if (isa<CXXRecordDecl>(DC)) {
9488        // Don't diagnose names we find in classes; we get much better
9489        // diagnostics for these from DiagnoseEmptyLookup.
9490        R.clear();
9491        return false;
9492      }
9493
9494      OverloadCandidateSet Candidates(FnLoc);
9495      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9496        AddOverloadedCallCandidate(SemaRef, I.getPair(),
9497                                   ExplicitTemplateArgs, Args,
9498                                   Candidates, false, /*KnownValid*/ false);
9499
9500      OverloadCandidateSet::iterator Best;
9501      if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9502        // No viable functions. Don't bother the user with notes for functions
9503        // which don't work and shouldn't be found anyway.
9504        R.clear();
9505        return false;
9506      }
9507
9508      // Find the namespaces where ADL would have looked, and suggest
9509      // declaring the function there instead.
9510      Sema::AssociatedNamespaceSet AssociatedNamespaces;
9511      Sema::AssociatedClassSet AssociatedClasses;
9512      SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9513                                                 AssociatedNamespaces,
9514                                                 AssociatedClasses);
9515      // Never suggest declaring a function within namespace 'std'.
9516      Sema::AssociatedNamespaceSet SuggestedNamespaces;
9517      if (DeclContext *Std = SemaRef.getStdNamespace()) {
9518        for (Sema::AssociatedNamespaceSet::iterator
9519               it = AssociatedNamespaces.begin(),
9520               end = AssociatedNamespaces.end(); it != end; ++it) {
9521          if (!Std->Encloses(*it))
9522            SuggestedNamespaces.insert(*it);
9523        }
9524      } else {
9525        // Lacking the 'std::' namespace, use all of the associated namespaces.
9526        SuggestedNamespaces = AssociatedNamespaces;
9527      }
9528
9529      SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9530        << R.getLookupName();
9531      if (SuggestedNamespaces.empty()) {
9532        SemaRef.Diag(Best->Function->getLocation(),
9533                     diag::note_not_found_by_two_phase_lookup)
9534          << R.getLookupName() << 0;
9535      } else if (SuggestedNamespaces.size() == 1) {
9536        SemaRef.Diag(Best->Function->getLocation(),
9537                     diag::note_not_found_by_two_phase_lookup)
9538          << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9539      } else {
9540        // FIXME: It would be useful to list the associated namespaces here,
9541        // but the diagnostics infrastructure doesn't provide a way to produce
9542        // a localized representation of a list of items.
9543        SemaRef.Diag(Best->Function->getLocation(),
9544                     diag::note_not_found_by_two_phase_lookup)
9545          << R.getLookupName() << 2;
9546      }
9547
9548      // Try to recover by calling this function.
9549      return true;
9550    }
9551
9552    R.clear();
9553  }
9554
9555  return false;
9556}
9557
9558/// Attempt to recover from ill-formed use of a non-dependent operator in a
9559/// template, where the non-dependent operator was declared after the template
9560/// was defined.
9561///
9562/// Returns true if a viable candidate was found and a diagnostic was issued.
9563static bool
9564DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
9565                               SourceLocation OpLoc,
9566                               llvm::ArrayRef<Expr *> Args) {
9567  DeclarationName OpName =
9568    SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
9569  LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
9570  return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
9571                                /*ExplicitTemplateArgs=*/0, Args);
9572}
9573
9574namespace {
9575// Callback to limit the allowed keywords and to only accept typo corrections
9576// that are keywords or whose decls refer to functions (or template functions)
9577// that accept the given number of arguments.
9578class RecoveryCallCCC : public CorrectionCandidateCallback {
9579 public:
9580  RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs)
9581      : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) {
9582    WantTypeSpecifiers = SemaRef.getLangOpts().CPlusPlus;
9583    WantRemainingKeywords = false;
9584  }
9585
9586  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9587    if (!candidate.getCorrectionDecl())
9588      return candidate.isKeyword();
9589
9590    for (TypoCorrection::const_decl_iterator DI = candidate.begin(),
9591           DIEnd = candidate.end(); DI != DIEnd; ++DI) {
9592      FunctionDecl *FD = 0;
9593      NamedDecl *ND = (*DI)->getUnderlyingDecl();
9594      if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9595        FD = FTD->getTemplatedDecl();
9596      if (!HasExplicitTemplateArgs && !FD) {
9597        if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) {
9598          // If the Decl is neither a function nor a template function,
9599          // determine if it is a pointer or reference to a function. If so,
9600          // check against the number of arguments expected for the pointee.
9601          QualType ValType = cast<ValueDecl>(ND)->getType();
9602          if (ValType->isAnyPointerType() || ValType->isReferenceType())
9603            ValType = ValType->getPointeeType();
9604          if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
9605            if (FPT->getNumArgs() == NumArgs)
9606              return true;
9607        }
9608      }
9609      if (FD && FD->getNumParams() >= NumArgs &&
9610          FD->getMinRequiredArguments() <= NumArgs)
9611        return true;
9612    }
9613    return false;
9614  }
9615
9616 private:
9617  unsigned NumArgs;
9618  bool HasExplicitTemplateArgs;
9619};
9620
9621// Callback that effectively disabled typo correction
9622class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
9623 public:
9624  NoTypoCorrectionCCC() {
9625    WantTypeSpecifiers = false;
9626    WantExpressionKeywords = false;
9627    WantCXXNamedCasts = false;
9628    WantRemainingKeywords = false;
9629  }
9630
9631  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9632    return false;
9633  }
9634};
9635}
9636
9637/// Attempts to recover from a call where no functions were found.
9638///
9639/// Returns true if new candidates were found.
9640static ExprResult
9641BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9642                      UnresolvedLookupExpr *ULE,
9643                      SourceLocation LParenLoc,
9644                      llvm::MutableArrayRef<Expr *> Args,
9645                      SourceLocation RParenLoc,
9646                      bool EmptyLookup, bool AllowTypoCorrection) {
9647
9648  CXXScopeSpec SS;
9649  SS.Adopt(ULE->getQualifierLoc());
9650  SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
9651
9652  TemplateArgumentListInfo TABuffer;
9653  TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9654  if (ULE->hasExplicitTemplateArgs()) {
9655    ULE->copyTemplateArgumentsInto(TABuffer);
9656    ExplicitTemplateArgs = &TABuffer;
9657  }
9658
9659  LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
9660                 Sema::LookupOrdinaryName);
9661  RecoveryCallCCC Validator(SemaRef, Args.size(), ExplicitTemplateArgs != 0);
9662  NoTypoCorrectionCCC RejectAll;
9663  CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
9664      (CorrectionCandidateCallback*)&Validator :
9665      (CorrectionCandidateCallback*)&RejectAll;
9666  if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
9667                              ExplicitTemplateArgs, Args) &&
9668      (!EmptyLookup ||
9669       SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
9670                                   ExplicitTemplateArgs, Args)))
9671    return ExprError();
9672
9673  assert(!R.empty() && "lookup results empty despite recovery");
9674
9675  // Build an implicit member call if appropriate.  Just drop the
9676  // casts and such from the call, we don't really care.
9677  ExprResult NewFn = ExprError();
9678  if ((*R.begin())->isCXXClassMember())
9679    NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
9680                                                    R, ExplicitTemplateArgs);
9681  else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
9682    NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
9683                                        ExplicitTemplateArgs);
9684  else
9685    NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
9686
9687  if (NewFn.isInvalid())
9688    return ExprError();
9689
9690  // This shouldn't cause an infinite loop because we're giving it
9691  // an expression with viable lookup results, which should never
9692  // end up here.
9693  return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
9694                               MultiExprArg(Args.data(), Args.size()),
9695                               RParenLoc);
9696}
9697
9698/// \brief Constructs and populates an OverloadedCandidateSet from
9699/// the given function.
9700/// \returns true when an the ExprResult output parameter has been set.
9701bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
9702                                  UnresolvedLookupExpr *ULE,
9703                                  Expr **Args, unsigned NumArgs,
9704                                  SourceLocation RParenLoc,
9705                                  OverloadCandidateSet *CandidateSet,
9706                                  ExprResult *Result) {
9707#ifndef NDEBUG
9708  if (ULE->requiresADL()) {
9709    // To do ADL, we must have found an unqualified name.
9710    assert(!ULE->getQualifier() && "qualified name with ADL");
9711
9712    // We don't perform ADL for implicit declarations of builtins.
9713    // Verify that this was correctly set up.
9714    FunctionDecl *F;
9715    if (ULE->decls_begin() + 1 == ULE->decls_end() &&
9716        (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
9717        F->getBuiltinID() && F->isImplicit())
9718      llvm_unreachable("performing ADL for builtin");
9719
9720    // We don't perform ADL in C.
9721    assert(getLangOpts().CPlusPlus && "ADL enabled in C");
9722  } else
9723    assert(!ULE->isStdAssociatedNamespace() &&
9724           "std is associated namespace but not doing ADL");
9725#endif
9726
9727  UnbridgedCastsSet UnbridgedCasts;
9728  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) {
9729    *Result = ExprError();
9730    return true;
9731  }
9732
9733  // Add the functions denoted by the callee to the set of candidate
9734  // functions, including those from argument-dependent lookup.
9735  AddOverloadedCallCandidates(ULE, llvm::makeArrayRef(Args, NumArgs),
9736                              *CandidateSet);
9737
9738  // If we found nothing, try to recover.
9739  // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
9740  // out if it fails.
9741  if (CandidateSet->empty()) {
9742    // In Microsoft mode, if we are inside a template class member function then
9743    // create a type dependent CallExpr. The goal is to postpone name lookup
9744    // to instantiation time to be able to search into type dependent base
9745    // classes.
9746    if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
9747        (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
9748      CallExpr *CE = new (Context) CallExpr(Context, Fn,
9749                                            llvm::makeArrayRef(Args, NumArgs),
9750                                            Context.DependentTy, VK_RValue,
9751                                            RParenLoc);
9752      CE->setTypeDependent(true);
9753      *Result = Owned(CE);
9754      return true;
9755    }
9756    return false;
9757  }
9758
9759  UnbridgedCasts.restore();
9760  return false;
9761}
9762
9763/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
9764/// the completed call expression. If overload resolution fails, emits
9765/// diagnostics and returns ExprError()
9766static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9767                                           UnresolvedLookupExpr *ULE,
9768                                           SourceLocation LParenLoc,
9769                                           Expr **Args, unsigned NumArgs,
9770                                           SourceLocation RParenLoc,
9771                                           Expr *ExecConfig,
9772                                           OverloadCandidateSet *CandidateSet,
9773                                           OverloadCandidateSet::iterator *Best,
9774                                           OverloadingResult OverloadResult,
9775                                           bool AllowTypoCorrection) {
9776  if (CandidateSet->empty())
9777    return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9778                                 llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9779                                 RParenLoc, /*EmptyLookup=*/true,
9780                                 AllowTypoCorrection);
9781
9782  switch (OverloadResult) {
9783  case OR_Success: {
9784    FunctionDecl *FDecl = (*Best)->Function;
9785    SemaRef.MarkFunctionReferenced(Fn->getExprLoc(), FDecl);
9786    SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
9787    SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc());
9788    Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
9789    return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9790                                         RParenLoc, ExecConfig);
9791  }
9792
9793  case OR_No_Viable_Function: {
9794    // Try to recover by looking for viable functions which the user might
9795    // have meant to call.
9796    ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9797                                  llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9798                                                RParenLoc,
9799                                                /*EmptyLookup=*/false,
9800                                                AllowTypoCorrection);
9801    if (!Recovery.isInvalid())
9802      return Recovery;
9803
9804    SemaRef.Diag(Fn->getLocStart(),
9805         diag::err_ovl_no_viable_function_in_call)
9806      << ULE->getName() << Fn->getSourceRange();
9807    CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
9808                                 llvm::makeArrayRef(Args, NumArgs));
9809    break;
9810  }
9811
9812  case OR_Ambiguous:
9813    SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
9814      << ULE->getName() << Fn->getSourceRange();
9815    CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates,
9816                                 llvm::makeArrayRef(Args, NumArgs));
9817    break;
9818
9819  case OR_Deleted: {
9820    SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
9821      << (*Best)->Function->isDeleted()
9822      << ULE->getName()
9823      << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
9824      << Fn->getSourceRange();
9825    CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
9826                                 llvm::makeArrayRef(Args, NumArgs));
9827
9828    // We emitted an error for the unvailable/deleted function call but keep
9829    // the call in the AST.
9830    FunctionDecl *FDecl = (*Best)->Function;
9831    Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
9832    return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9833                                 RParenLoc, ExecConfig);
9834  }
9835  }
9836
9837  // Overload resolution failed.
9838  return ExprError();
9839}
9840
9841/// BuildOverloadedCallExpr - Given the call expression that calls Fn
9842/// (which eventually refers to the declaration Func) and the call
9843/// arguments Args/NumArgs, attempt to resolve the function call down
9844/// to a specific function. If overload resolution succeeds, returns
9845/// the call expression produced by overload resolution.
9846/// Otherwise, emits diagnostics and returns ExprError.
9847ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
9848                                         UnresolvedLookupExpr *ULE,
9849                                         SourceLocation LParenLoc,
9850                                         Expr **Args, unsigned NumArgs,
9851                                         SourceLocation RParenLoc,
9852                                         Expr *ExecConfig,
9853                                         bool AllowTypoCorrection) {
9854  OverloadCandidateSet CandidateSet(Fn->getExprLoc());
9855  ExprResult result;
9856
9857  if (buildOverloadedCallSet(S, Fn, ULE, Args, NumArgs, LParenLoc,
9858                             &CandidateSet, &result))
9859    return result;
9860
9861  OverloadCandidateSet::iterator Best;
9862  OverloadingResult OverloadResult =
9863      CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
9864
9865  return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs,
9866                                  RParenLoc, ExecConfig, &CandidateSet,
9867                                  &Best, OverloadResult,
9868                                  AllowTypoCorrection);
9869}
9870
9871static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
9872  return Functions.size() > 1 ||
9873    (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
9874}
9875
9876/// \brief Create a unary operation that may resolve to an overloaded
9877/// operator.
9878///
9879/// \param OpLoc The location of the operator itself (e.g., '*').
9880///
9881/// \param OpcIn The UnaryOperator::Opcode that describes this
9882/// operator.
9883///
9884/// \param Fns The set of non-member functions that will be
9885/// considered by overload resolution. The caller needs to build this
9886/// set based on the context using, e.g.,
9887/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
9888/// set should not contain any member functions; those will be added
9889/// by CreateOverloadedUnaryOp().
9890///
9891/// \param Input The input argument.
9892ExprResult
9893Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
9894                              const UnresolvedSetImpl &Fns,
9895                              Expr *Input) {
9896  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
9897
9898  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
9899  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
9900  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
9901  // TODO: provide better source location info.
9902  DeclarationNameInfo OpNameInfo(OpName, OpLoc);
9903
9904  if (checkPlaceholderForOverload(*this, Input))
9905    return ExprError();
9906
9907  Expr *Args[2] = { Input, 0 };
9908  unsigned NumArgs = 1;
9909
9910  // For post-increment and post-decrement, add the implicit '0' as
9911  // the second argument, so that we know this is a post-increment or
9912  // post-decrement.
9913  if (Opc == UO_PostInc || Opc == UO_PostDec) {
9914    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
9915    Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
9916                                     SourceLocation());
9917    NumArgs = 2;
9918  }
9919
9920  if (Input->isTypeDependent()) {
9921    if (Fns.empty())
9922      return Owned(new (Context) UnaryOperator(Input,
9923                                               Opc,
9924                                               Context.DependentTy,
9925                                               VK_RValue, OK_Ordinary,
9926                                               OpLoc));
9927
9928    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
9929    UnresolvedLookupExpr *Fn
9930      = UnresolvedLookupExpr::Create(Context, NamingClass,
9931                                     NestedNameSpecifierLoc(), OpNameInfo,
9932                                     /*ADL*/ true, IsOverloaded(Fns),
9933                                     Fns.begin(), Fns.end());
9934    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
9935                                              llvm::makeArrayRef(Args, NumArgs),
9936                                                   Context.DependentTy,
9937                                                   VK_RValue,
9938                                                   OpLoc));
9939  }
9940
9941  // Build an empty overload set.
9942  OverloadCandidateSet CandidateSet(OpLoc);
9943
9944  // Add the candidates from the given function set.
9945  AddFunctionCandidates(Fns, llvm::makeArrayRef(Args, NumArgs), CandidateSet,
9946                        false);
9947
9948  // Add operator candidates that are member functions.
9949  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
9950
9951  // Add candidates from ADL.
9952  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
9953                                       OpLoc, llvm::makeArrayRef(Args, NumArgs),
9954                                       /*ExplicitTemplateArgs*/ 0,
9955                                       CandidateSet);
9956
9957  // Add builtin operator candidates.
9958  AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
9959
9960  bool HadMultipleCandidates = (CandidateSet.size() > 1);
9961
9962  // Perform overload resolution.
9963  OverloadCandidateSet::iterator Best;
9964  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
9965  case OR_Success: {
9966    // We found a built-in operator or an overloaded operator.
9967    FunctionDecl *FnDecl = Best->Function;
9968
9969    if (FnDecl) {
9970      // We matched an overloaded operator. Build a call to that
9971      // operator.
9972
9973      MarkFunctionReferenced(OpLoc, FnDecl);
9974
9975      // Convert the arguments.
9976      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
9977        CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
9978
9979        ExprResult InputRes =
9980          PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
9981                                              Best->FoundDecl, Method);
9982        if (InputRes.isInvalid())
9983          return ExprError();
9984        Input = InputRes.take();
9985      } else {
9986        // Convert the arguments.
9987        ExprResult InputInit
9988          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
9989                                                      Context,
9990                                                      FnDecl->getParamDecl(0)),
9991                                      SourceLocation(),
9992                                      Input);
9993        if (InputInit.isInvalid())
9994          return ExprError();
9995        Input = InputInit.take();
9996      }
9997
9998      DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
9999
10000      // Determine the result type.
10001      QualType ResultTy = FnDecl->getResultType();
10002      ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10003      ResultTy = ResultTy.getNonLValueExprType(Context);
10004
10005      // Build the actual expression node.
10006      ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10007                                                HadMultipleCandidates, OpLoc);
10008      if (FnExpr.isInvalid())
10009        return ExprError();
10010
10011      Args[0] = Input;
10012      CallExpr *TheCall =
10013        new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10014                                          llvm::makeArrayRef(Args, NumArgs),
10015                                          ResultTy, VK, OpLoc);
10016
10017      if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10018                              FnDecl))
10019        return ExprError();
10020
10021      return MaybeBindToTemporary(TheCall);
10022    } else {
10023      // We matched a built-in operator. Convert the arguments, then
10024      // break out so that we will build the appropriate built-in
10025      // operator node.
10026      ExprResult InputRes =
10027        PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10028                                  Best->Conversions[0], AA_Passing);
10029      if (InputRes.isInvalid())
10030        return ExprError();
10031      Input = InputRes.take();
10032      break;
10033    }
10034  }
10035
10036  case OR_No_Viable_Function:
10037    // This is an erroneous use of an operator which can be overloaded by
10038    // a non-member function. Check for non-member operators which were
10039    // defined too late to be candidates.
10040    if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc,
10041                                       llvm::makeArrayRef(Args, NumArgs)))
10042      // FIXME: Recover by calling the found function.
10043      return ExprError();
10044
10045    // No viable function; fall through to handling this as a
10046    // built-in operator, which will produce an error message for us.
10047    break;
10048
10049  case OR_Ambiguous:
10050    Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10051        << UnaryOperator::getOpcodeStr(Opc)
10052        << Input->getType()
10053        << Input->getSourceRange();
10054    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10055                                llvm::makeArrayRef(Args, NumArgs),
10056                                UnaryOperator::getOpcodeStr(Opc), OpLoc);
10057    return ExprError();
10058
10059  case OR_Deleted:
10060    Diag(OpLoc, diag::err_ovl_deleted_oper)
10061      << Best->Function->isDeleted()
10062      << UnaryOperator::getOpcodeStr(Opc)
10063      << getDeletedOrUnavailableSuffix(Best->Function)
10064      << Input->getSourceRange();
10065    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10066                                llvm::makeArrayRef(Args, NumArgs),
10067                                UnaryOperator::getOpcodeStr(Opc), OpLoc);
10068    return ExprError();
10069  }
10070
10071  // Either we found no viable overloaded operator or we matched a
10072  // built-in operator. In either case, fall through to trying to
10073  // build a built-in operation.
10074  return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10075}
10076
10077/// \brief Create a binary operation that may resolve to an overloaded
10078/// operator.
10079///
10080/// \param OpLoc The location of the operator itself (e.g., '+').
10081///
10082/// \param OpcIn The BinaryOperator::Opcode that describes this
10083/// operator.
10084///
10085/// \param Fns The set of non-member functions that will be
10086/// considered by overload resolution. The caller needs to build this
10087/// set based on the context using, e.g.,
10088/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10089/// set should not contain any member functions; those will be added
10090/// by CreateOverloadedBinOp().
10091///
10092/// \param LHS Left-hand argument.
10093/// \param RHS Right-hand argument.
10094ExprResult
10095Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10096                            unsigned OpcIn,
10097                            const UnresolvedSetImpl &Fns,
10098                            Expr *LHS, Expr *RHS) {
10099  Expr *Args[2] = { LHS, RHS };
10100  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10101
10102  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10103  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10104  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10105
10106  // If either side is type-dependent, create an appropriate dependent
10107  // expression.
10108  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10109    if (Fns.empty()) {
10110      // If there are no functions to store, just build a dependent
10111      // BinaryOperator or CompoundAssignment.
10112      if (Opc <= BO_Assign || Opc > BO_OrAssign)
10113        return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10114                                                  Context.DependentTy,
10115                                                  VK_RValue, OK_Ordinary,
10116                                                  OpLoc));
10117
10118      return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10119                                                        Context.DependentTy,
10120                                                        VK_LValue,
10121                                                        OK_Ordinary,
10122                                                        Context.DependentTy,
10123                                                        Context.DependentTy,
10124                                                        OpLoc));
10125    }
10126
10127    // FIXME: save results of ADL from here?
10128    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10129    // TODO: provide better source location info in DNLoc component.
10130    DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10131    UnresolvedLookupExpr *Fn
10132      = UnresolvedLookupExpr::Create(Context, NamingClass,
10133                                     NestedNameSpecifierLoc(), OpNameInfo,
10134                                     /*ADL*/ true, IsOverloaded(Fns),
10135                                     Fns.begin(), Fns.end());
10136    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
10137                                                   Args,
10138                                                   Context.DependentTy,
10139                                                   VK_RValue,
10140                                                   OpLoc));
10141  }
10142
10143  // Always do placeholder-like conversions on the RHS.
10144  if (checkPlaceholderForOverload(*this, Args[1]))
10145    return ExprError();
10146
10147  // Do placeholder-like conversion on the LHS; note that we should
10148  // not get here with a PseudoObject LHS.
10149  assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10150  if (checkPlaceholderForOverload(*this, Args[0]))
10151    return ExprError();
10152
10153  // If this is the assignment operator, we only perform overload resolution
10154  // if the left-hand side is a class or enumeration type. This is actually
10155  // a hack. The standard requires that we do overload resolution between the
10156  // various built-in candidates, but as DR507 points out, this can lead to
10157  // problems. So we do it this way, which pretty much follows what GCC does.
10158  // Note that we go the traditional code path for compound assignment forms.
10159  if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10160    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10161
10162  // If this is the .* operator, which is not overloadable, just
10163  // create a built-in binary operator.
10164  if (Opc == BO_PtrMemD)
10165    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10166
10167  // Build an empty overload set.
10168  OverloadCandidateSet CandidateSet(OpLoc);
10169
10170  // Add the candidates from the given function set.
10171  AddFunctionCandidates(Fns, Args, CandidateSet, false);
10172
10173  // Add operator candidates that are member functions.
10174  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10175
10176  // Add candidates from ADL.
10177  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10178                                       OpLoc, Args,
10179                                       /*ExplicitTemplateArgs*/ 0,
10180                                       CandidateSet);
10181
10182  // Add builtin operator candidates.
10183  AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10184
10185  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10186
10187  // Perform overload resolution.
10188  OverloadCandidateSet::iterator Best;
10189  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10190    case OR_Success: {
10191      // We found a built-in operator or an overloaded operator.
10192      FunctionDecl *FnDecl = Best->Function;
10193
10194      if (FnDecl) {
10195        // We matched an overloaded operator. Build a call to that
10196        // operator.
10197
10198        MarkFunctionReferenced(OpLoc, FnDecl);
10199
10200        // Convert the arguments.
10201        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10202          // Best->Access is only meaningful for class members.
10203          CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10204
10205          ExprResult Arg1 =
10206            PerformCopyInitialization(
10207              InitializedEntity::InitializeParameter(Context,
10208                                                     FnDecl->getParamDecl(0)),
10209              SourceLocation(), Owned(Args[1]));
10210          if (Arg1.isInvalid())
10211            return ExprError();
10212
10213          ExprResult Arg0 =
10214            PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10215                                                Best->FoundDecl, Method);
10216          if (Arg0.isInvalid())
10217            return ExprError();
10218          Args[0] = Arg0.takeAs<Expr>();
10219          Args[1] = RHS = Arg1.takeAs<Expr>();
10220        } else {
10221          // Convert the arguments.
10222          ExprResult Arg0 = PerformCopyInitialization(
10223            InitializedEntity::InitializeParameter(Context,
10224                                                   FnDecl->getParamDecl(0)),
10225            SourceLocation(), Owned(Args[0]));
10226          if (Arg0.isInvalid())
10227            return ExprError();
10228
10229          ExprResult Arg1 =
10230            PerformCopyInitialization(
10231              InitializedEntity::InitializeParameter(Context,
10232                                                     FnDecl->getParamDecl(1)),
10233              SourceLocation(), Owned(Args[1]));
10234          if (Arg1.isInvalid())
10235            return ExprError();
10236          Args[0] = LHS = Arg0.takeAs<Expr>();
10237          Args[1] = RHS = Arg1.takeAs<Expr>();
10238        }
10239
10240        DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
10241
10242        // Determine the result type.
10243        QualType ResultTy = FnDecl->getResultType();
10244        ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10245        ResultTy = ResultTy.getNonLValueExprType(Context);
10246
10247        // Build the actual expression node.
10248        ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10249                                                  HadMultipleCandidates, OpLoc);
10250        if (FnExpr.isInvalid())
10251          return ExprError();
10252
10253        CXXOperatorCallExpr *TheCall =
10254          new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10255                                            Args, ResultTy, VK, OpLoc);
10256
10257        if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10258                                FnDecl))
10259          return ExprError();
10260
10261        return MaybeBindToTemporary(TheCall);
10262      } else {
10263        // We matched a built-in operator. Convert the arguments, then
10264        // break out so that we will build the appropriate built-in
10265        // operator node.
10266        ExprResult ArgsRes0 =
10267          PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10268                                    Best->Conversions[0], AA_Passing);
10269        if (ArgsRes0.isInvalid())
10270          return ExprError();
10271        Args[0] = ArgsRes0.take();
10272
10273        ExprResult ArgsRes1 =
10274          PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10275                                    Best->Conversions[1], AA_Passing);
10276        if (ArgsRes1.isInvalid())
10277          return ExprError();
10278        Args[1] = ArgsRes1.take();
10279        break;
10280      }
10281    }
10282
10283    case OR_No_Viable_Function: {
10284      // C++ [over.match.oper]p9:
10285      //   If the operator is the operator , [...] and there are no
10286      //   viable functions, then the operator is assumed to be the
10287      //   built-in operator and interpreted according to clause 5.
10288      if (Opc == BO_Comma)
10289        break;
10290
10291      // For class as left operand for assignment or compound assigment
10292      // operator do not fall through to handling in built-in, but report that
10293      // no overloaded assignment operator found
10294      ExprResult Result = ExprError();
10295      if (Args[0]->getType()->isRecordType() &&
10296          Opc >= BO_Assign && Opc <= BO_OrAssign) {
10297        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10298             << BinaryOperator::getOpcodeStr(Opc)
10299             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10300      } else {
10301        // This is an erroneous use of an operator which can be overloaded by
10302        // a non-member function. Check for non-member operators which were
10303        // defined too late to be candidates.
10304        if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10305          // FIXME: Recover by calling the found function.
10306          return ExprError();
10307
10308        // No viable function; try to create a built-in operation, which will
10309        // produce an error. Then, show the non-viable candidates.
10310        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10311      }
10312      assert(Result.isInvalid() &&
10313             "C++ binary operator overloading is missing candidates!");
10314      if (Result.isInvalid())
10315        CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10316                                    BinaryOperator::getOpcodeStr(Opc), OpLoc);
10317      return Result;
10318    }
10319
10320    case OR_Ambiguous:
10321      Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10322          << BinaryOperator::getOpcodeStr(Opc)
10323          << Args[0]->getType() << Args[1]->getType()
10324          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10325      CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10326                                  BinaryOperator::getOpcodeStr(Opc), OpLoc);
10327      return ExprError();
10328
10329    case OR_Deleted:
10330      if (isImplicitlyDeleted(Best->Function)) {
10331        CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10332        Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10333          << getSpecialMember(Method)
10334          << BinaryOperator::getOpcodeStr(Opc)
10335          << getDeletedOrUnavailableSuffix(Best->Function);
10336
10337        if (getSpecialMember(Method) != CXXInvalid) {
10338          // The user probably meant to call this special member. Just
10339          // explain why it's deleted.
10340          NoteDeletedFunction(Method);
10341          return ExprError();
10342        }
10343      } else {
10344        Diag(OpLoc, diag::err_ovl_deleted_oper)
10345          << Best->Function->isDeleted()
10346          << BinaryOperator::getOpcodeStr(Opc)
10347          << getDeletedOrUnavailableSuffix(Best->Function)
10348          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10349      }
10350      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10351                                  BinaryOperator::getOpcodeStr(Opc), OpLoc);
10352      return ExprError();
10353  }
10354
10355  // We matched a built-in operator; build it.
10356  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10357}
10358
10359ExprResult
10360Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10361                                         SourceLocation RLoc,
10362                                         Expr *Base, Expr *Idx) {
10363  Expr *Args[2] = { Base, Idx };
10364  DeclarationName OpName =
10365      Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10366
10367  // If either side is type-dependent, create an appropriate dependent
10368  // expression.
10369  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10370
10371    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10372    // CHECKME: no 'operator' keyword?
10373    DeclarationNameInfo OpNameInfo(OpName, LLoc);
10374    OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10375    UnresolvedLookupExpr *Fn
10376      = UnresolvedLookupExpr::Create(Context, NamingClass,
10377                                     NestedNameSpecifierLoc(), OpNameInfo,
10378                                     /*ADL*/ true, /*Overloaded*/ false,
10379                                     UnresolvedSetIterator(),
10380                                     UnresolvedSetIterator());
10381    // Can't add any actual overloads yet
10382
10383    return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10384                                                   Args,
10385                                                   Context.DependentTy,
10386                                                   VK_RValue,
10387                                                   RLoc));
10388  }
10389
10390  // Handle placeholders on both operands.
10391  if (checkPlaceholderForOverload(*this, Args[0]))
10392    return ExprError();
10393  if (checkPlaceholderForOverload(*this, Args[1]))
10394    return ExprError();
10395
10396  // Build an empty overload set.
10397  OverloadCandidateSet CandidateSet(LLoc);
10398
10399  // Subscript can only be overloaded as a member function.
10400
10401  // Add operator candidates that are member functions.
10402  AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10403
10404  // Add builtin operator candidates.
10405  AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10406
10407  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10408
10409  // Perform overload resolution.
10410  OverloadCandidateSet::iterator Best;
10411  switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10412    case OR_Success: {
10413      // We found a built-in operator or an overloaded operator.
10414      FunctionDecl *FnDecl = Best->Function;
10415
10416      if (FnDecl) {
10417        // We matched an overloaded operator. Build a call to that
10418        // operator.
10419
10420        MarkFunctionReferenced(LLoc, FnDecl);
10421
10422        CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10423        DiagnoseUseOfDecl(Best->FoundDecl, LLoc);
10424
10425        // Convert the arguments.
10426        CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10427        ExprResult Arg0 =
10428          PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10429                                              Best->FoundDecl, Method);
10430        if (Arg0.isInvalid())
10431          return ExprError();
10432        Args[0] = Arg0.take();
10433
10434        // Convert the arguments.
10435        ExprResult InputInit
10436          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10437                                                      Context,
10438                                                      FnDecl->getParamDecl(0)),
10439                                      SourceLocation(),
10440                                      Owned(Args[1]));
10441        if (InputInit.isInvalid())
10442          return ExprError();
10443
10444        Args[1] = InputInit.takeAs<Expr>();
10445
10446        // Determine the result type
10447        QualType ResultTy = FnDecl->getResultType();
10448        ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10449        ResultTy = ResultTy.getNonLValueExprType(Context);
10450
10451        // Build the actual expression node.
10452        DeclarationNameInfo OpLocInfo(OpName, LLoc);
10453        OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10454        ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10455                                                  HadMultipleCandidates,
10456                                                  OpLocInfo.getLoc(),
10457                                                  OpLocInfo.getInfo());
10458        if (FnExpr.isInvalid())
10459          return ExprError();
10460
10461        CXXOperatorCallExpr *TheCall =
10462          new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10463                                            FnExpr.take(), Args,
10464                                            ResultTy, VK, RLoc);
10465
10466        if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10467                                FnDecl))
10468          return ExprError();
10469
10470        return MaybeBindToTemporary(TheCall);
10471      } else {
10472        // We matched a built-in operator. Convert the arguments, then
10473        // break out so that we will build the appropriate built-in
10474        // operator node.
10475        ExprResult ArgsRes0 =
10476          PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10477                                    Best->Conversions[0], AA_Passing);
10478        if (ArgsRes0.isInvalid())
10479          return ExprError();
10480        Args[0] = ArgsRes0.take();
10481
10482        ExprResult ArgsRes1 =
10483          PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10484                                    Best->Conversions[1], AA_Passing);
10485        if (ArgsRes1.isInvalid())
10486          return ExprError();
10487        Args[1] = ArgsRes1.take();
10488
10489        break;
10490      }
10491    }
10492
10493    case OR_No_Viable_Function: {
10494      if (CandidateSet.empty())
10495        Diag(LLoc, diag::err_ovl_no_oper)
10496          << Args[0]->getType() << /*subscript*/ 0
10497          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10498      else
10499        Diag(LLoc, diag::err_ovl_no_viable_subscript)
10500          << Args[0]->getType()
10501          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10502      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10503                                  "[]", LLoc);
10504      return ExprError();
10505    }
10506
10507    case OR_Ambiguous:
10508      Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10509          << "[]"
10510          << Args[0]->getType() << Args[1]->getType()
10511          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10512      CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10513                                  "[]", LLoc);
10514      return ExprError();
10515
10516    case OR_Deleted:
10517      Diag(LLoc, diag::err_ovl_deleted_oper)
10518        << Best->Function->isDeleted() << "[]"
10519        << getDeletedOrUnavailableSuffix(Best->Function)
10520        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10521      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10522                                  "[]", LLoc);
10523      return ExprError();
10524    }
10525
10526  // We matched a built-in operator; build it.
10527  return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10528}
10529
10530/// BuildCallToMemberFunction - Build a call to a member
10531/// function. MemExpr is the expression that refers to the member
10532/// function (and includes the object parameter), Args/NumArgs are the
10533/// arguments to the function call (not including the object
10534/// parameter). The caller needs to validate that the member
10535/// expression refers to a non-static member function or an overloaded
10536/// member function.
10537ExprResult
10538Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10539                                SourceLocation LParenLoc, Expr **Args,
10540                                unsigned NumArgs, SourceLocation RParenLoc) {
10541  assert(MemExprE->getType() == Context.BoundMemberTy ||
10542         MemExprE->getType() == Context.OverloadTy);
10543
10544  // Dig out the member expression. This holds both the object
10545  // argument and the member function we're referring to.
10546  Expr *NakedMemExpr = MemExprE->IgnoreParens();
10547
10548  // Determine whether this is a call to a pointer-to-member function.
10549  if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10550    assert(op->getType() == Context.BoundMemberTy);
10551    assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10552
10553    QualType fnType =
10554      op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10555
10556    const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10557    QualType resultType = proto->getCallResultType(Context);
10558    ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10559
10560    // Check that the object type isn't more qualified than the
10561    // member function we're calling.
10562    Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10563
10564    QualType objectType = op->getLHS()->getType();
10565    if (op->getOpcode() == BO_PtrMemI)
10566      objectType = objectType->castAs<PointerType>()->getPointeeType();
10567    Qualifiers objectQuals = objectType.getQualifiers();
10568
10569    Qualifiers difference = objectQuals - funcQuals;
10570    difference.removeObjCGCAttr();
10571    difference.removeAddressSpace();
10572    if (difference) {
10573      std::string qualsString = difference.getAsString();
10574      Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10575        << fnType.getUnqualifiedType()
10576        << qualsString
10577        << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10578    }
10579
10580    CXXMemberCallExpr *call
10581      = new (Context) CXXMemberCallExpr(Context, MemExprE,
10582                                        llvm::makeArrayRef(Args, NumArgs),
10583                                        resultType, valueKind, RParenLoc);
10584
10585    if (CheckCallReturnType(proto->getResultType(),
10586                            op->getRHS()->getLocStart(),
10587                            call, 0))
10588      return ExprError();
10589
10590    if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc))
10591      return ExprError();
10592
10593    return MaybeBindToTemporary(call);
10594  }
10595
10596  UnbridgedCastsSet UnbridgedCasts;
10597  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10598    return ExprError();
10599
10600  MemberExpr *MemExpr;
10601  CXXMethodDecl *Method = 0;
10602  DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
10603  NestedNameSpecifier *Qualifier = 0;
10604  if (isa<MemberExpr>(NakedMemExpr)) {
10605    MemExpr = cast<MemberExpr>(NakedMemExpr);
10606    Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
10607    FoundDecl = MemExpr->getFoundDecl();
10608    Qualifier = MemExpr->getQualifier();
10609    UnbridgedCasts.restore();
10610  } else {
10611    UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
10612    Qualifier = UnresExpr->getQualifier();
10613
10614    QualType ObjectType = UnresExpr->getBaseType();
10615    Expr::Classification ObjectClassification
10616      = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
10617                            : UnresExpr->getBase()->Classify(Context);
10618
10619    // Add overload candidates
10620    OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
10621
10622    // FIXME: avoid copy.
10623    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10624    if (UnresExpr->hasExplicitTemplateArgs()) {
10625      UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10626      TemplateArgs = &TemplateArgsBuffer;
10627    }
10628
10629    for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
10630           E = UnresExpr->decls_end(); I != E; ++I) {
10631
10632      NamedDecl *Func = *I;
10633      CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
10634      if (isa<UsingShadowDecl>(Func))
10635        Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
10636
10637
10638      // Microsoft supports direct constructor calls.
10639      if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
10640        AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
10641                             llvm::makeArrayRef(Args, NumArgs), CandidateSet);
10642      } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
10643        // If explicit template arguments were provided, we can't call a
10644        // non-template member function.
10645        if (TemplateArgs)
10646          continue;
10647
10648        AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
10649                           ObjectClassification,
10650                           llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10651                           /*SuppressUserConversions=*/false);
10652      } else {
10653        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
10654                                   I.getPair(), ActingDC, TemplateArgs,
10655                                   ObjectType,  ObjectClassification,
10656                                   llvm::makeArrayRef(Args, NumArgs),
10657                                   CandidateSet,
10658                                   /*SuppressUsedConversions=*/false);
10659      }
10660    }
10661
10662    DeclarationName DeclName = UnresExpr->getMemberName();
10663
10664    UnbridgedCasts.restore();
10665
10666    OverloadCandidateSet::iterator Best;
10667    switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
10668                                            Best)) {
10669    case OR_Success:
10670      Method = cast<CXXMethodDecl>(Best->Function);
10671      MarkFunctionReferenced(UnresExpr->getMemberLoc(), Method);
10672      FoundDecl = Best->FoundDecl;
10673      CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
10674      DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc());
10675      break;
10676
10677    case OR_No_Viable_Function:
10678      Diag(UnresExpr->getMemberLoc(),
10679           diag::err_ovl_no_viable_member_function_in_call)
10680        << DeclName << MemExprE->getSourceRange();
10681      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10682                                  llvm::makeArrayRef(Args, NumArgs));
10683      // FIXME: Leaking incoming expressions!
10684      return ExprError();
10685
10686    case OR_Ambiguous:
10687      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
10688        << DeclName << MemExprE->getSourceRange();
10689      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10690                                  llvm::makeArrayRef(Args, NumArgs));
10691      // FIXME: Leaking incoming expressions!
10692      return ExprError();
10693
10694    case OR_Deleted:
10695      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
10696        << Best->Function->isDeleted()
10697        << DeclName
10698        << getDeletedOrUnavailableSuffix(Best->Function)
10699        << MemExprE->getSourceRange();
10700      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10701                                  llvm::makeArrayRef(Args, NumArgs));
10702      // FIXME: Leaking incoming expressions!
10703      return ExprError();
10704    }
10705
10706    MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
10707
10708    // If overload resolution picked a static member, build a
10709    // non-member call based on that function.
10710    if (Method->isStatic()) {
10711      return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
10712                                   Args, NumArgs, RParenLoc);
10713    }
10714
10715    MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
10716  }
10717
10718  QualType ResultType = Method->getResultType();
10719  ExprValueKind VK = Expr::getValueKindForType(ResultType);
10720  ResultType = ResultType.getNonLValueExprType(Context);
10721
10722  assert(Method && "Member call to something that isn't a method?");
10723  CXXMemberCallExpr *TheCall =
10724    new (Context) CXXMemberCallExpr(Context, MemExprE,
10725                                    llvm::makeArrayRef(Args, NumArgs),
10726                                    ResultType, VK, RParenLoc);
10727
10728  // Check for a valid return type.
10729  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
10730                          TheCall, Method))
10731    return ExprError();
10732
10733  // Convert the object argument (for a non-static member function call).
10734  // We only need to do this if there was actually an overload; otherwise
10735  // it was done at lookup.
10736  if (!Method->isStatic()) {
10737    ExprResult ObjectArg =
10738      PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
10739                                          FoundDecl, Method);
10740    if (ObjectArg.isInvalid())
10741      return ExprError();
10742    MemExpr->setBase(ObjectArg.take());
10743  }
10744
10745  // Convert the rest of the arguments
10746  const FunctionProtoType *Proto =
10747    Method->getType()->getAs<FunctionProtoType>();
10748  if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs,
10749                              RParenLoc))
10750    return ExprError();
10751
10752  DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
10753
10754  if (CheckFunctionCall(Method, TheCall, Proto))
10755    return ExprError();
10756
10757  if ((isa<CXXConstructorDecl>(CurContext) ||
10758       isa<CXXDestructorDecl>(CurContext)) &&
10759      TheCall->getMethodDecl()->isPure()) {
10760    const CXXMethodDecl *MD = TheCall->getMethodDecl();
10761
10762    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
10763      Diag(MemExpr->getLocStart(),
10764           diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
10765        << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
10766        << MD->getParent()->getDeclName();
10767
10768      Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
10769    }
10770  }
10771  return MaybeBindToTemporary(TheCall);
10772}
10773
10774/// BuildCallToObjectOfClassType - Build a call to an object of class
10775/// type (C++ [over.call.object]), which can end up invoking an
10776/// overloaded function call operator (@c operator()) or performing a
10777/// user-defined conversion on the object argument.
10778ExprResult
10779Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
10780                                   SourceLocation LParenLoc,
10781                                   Expr **Args, unsigned NumArgs,
10782                                   SourceLocation RParenLoc) {
10783  if (checkPlaceholderForOverload(*this, Obj))
10784    return ExprError();
10785  ExprResult Object = Owned(Obj);
10786
10787  UnbridgedCastsSet UnbridgedCasts;
10788  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10789    return ExprError();
10790
10791  assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
10792  const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
10793
10794  // C++ [over.call.object]p1:
10795  //  If the primary-expression E in the function call syntax
10796  //  evaluates to a class object of type "cv T", then the set of
10797  //  candidate functions includes at least the function call
10798  //  operators of T. The function call operators of T are obtained by
10799  //  ordinary lookup of the name operator() in the context of
10800  //  (E).operator().
10801  OverloadCandidateSet CandidateSet(LParenLoc);
10802  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
10803
10804  if (RequireCompleteType(LParenLoc, Object.get()->getType(),
10805                          diag::err_incomplete_object_call, Object.get()))
10806    return true;
10807
10808  LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
10809  LookupQualifiedName(R, Record->getDecl());
10810  R.suppressDiagnostics();
10811
10812  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
10813       Oper != OperEnd; ++Oper) {
10814    AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
10815                       Object.get()->Classify(Context), Args, NumArgs, CandidateSet,
10816                       /*SuppressUserConversions=*/ false);
10817  }
10818
10819  // C++ [over.call.object]p2:
10820  //   In addition, for each (non-explicit in C++0x) conversion function
10821  //   declared in T of the form
10822  //
10823  //        operator conversion-type-id () cv-qualifier;
10824  //
10825  //   where cv-qualifier is the same cv-qualification as, or a
10826  //   greater cv-qualification than, cv, and where conversion-type-id
10827  //   denotes the type "pointer to function of (P1,...,Pn) returning
10828  //   R", or the type "reference to pointer to function of
10829  //   (P1,...,Pn) returning R", or the type "reference to function
10830  //   of (P1,...,Pn) returning R", a surrogate call function [...]
10831  //   is also considered as a candidate function. Similarly,
10832  //   surrogate call functions are added to the set of candidate
10833  //   functions for each conversion function declared in an
10834  //   accessible base class provided the function is not hidden
10835  //   within T by another intervening declaration.
10836  const UnresolvedSetImpl *Conversions
10837    = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
10838  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
10839         E = Conversions->end(); I != E; ++I) {
10840    NamedDecl *D = *I;
10841    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
10842    if (isa<UsingShadowDecl>(D))
10843      D = cast<UsingShadowDecl>(D)->getTargetDecl();
10844
10845    // Skip over templated conversion functions; they aren't
10846    // surrogates.
10847    if (isa<FunctionTemplateDecl>(D))
10848      continue;
10849
10850    CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
10851    if (!Conv->isExplicit()) {
10852      // Strip the reference type (if any) and then the pointer type (if
10853      // any) to get down to what might be a function type.
10854      QualType ConvType = Conv->getConversionType().getNonReferenceType();
10855      if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
10856        ConvType = ConvPtrType->getPointeeType();
10857
10858      if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
10859      {
10860        AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
10861                              Object.get(), llvm::makeArrayRef(Args, NumArgs),
10862                              CandidateSet);
10863      }
10864    }
10865  }
10866
10867  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10868
10869  // Perform overload resolution.
10870  OverloadCandidateSet::iterator Best;
10871  switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
10872                             Best)) {
10873  case OR_Success:
10874    // Overload resolution succeeded; we'll build the appropriate call
10875    // below.
10876    break;
10877
10878  case OR_No_Viable_Function:
10879    if (CandidateSet.empty())
10880      Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
10881        << Object.get()->getType() << /*call*/ 1
10882        << Object.get()->getSourceRange();
10883    else
10884      Diag(Object.get()->getLocStart(),
10885           diag::err_ovl_no_viable_object_call)
10886        << Object.get()->getType() << Object.get()->getSourceRange();
10887    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10888                                llvm::makeArrayRef(Args, NumArgs));
10889    break;
10890
10891  case OR_Ambiguous:
10892    Diag(Object.get()->getLocStart(),
10893         diag::err_ovl_ambiguous_object_call)
10894      << Object.get()->getType() << Object.get()->getSourceRange();
10895    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10896                                llvm::makeArrayRef(Args, NumArgs));
10897    break;
10898
10899  case OR_Deleted:
10900    Diag(Object.get()->getLocStart(),
10901         diag::err_ovl_deleted_object_call)
10902      << Best->Function->isDeleted()
10903      << Object.get()->getType()
10904      << getDeletedOrUnavailableSuffix(Best->Function)
10905      << Object.get()->getSourceRange();
10906    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10907                                llvm::makeArrayRef(Args, NumArgs));
10908    break;
10909  }
10910
10911  if (Best == CandidateSet.end())
10912    return true;
10913
10914  UnbridgedCasts.restore();
10915
10916  if (Best->Function == 0) {
10917    // Since there is no function declaration, this is one of the
10918    // surrogate candidates. Dig out the conversion function.
10919    CXXConversionDecl *Conv
10920      = cast<CXXConversionDecl>(
10921                         Best->Conversions[0].UserDefined.ConversionFunction);
10922
10923    CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10924    DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
10925
10926    // We selected one of the surrogate functions that converts the
10927    // object parameter to a function pointer. Perform the conversion
10928    // on the object argument, then let ActOnCallExpr finish the job.
10929
10930    // Create an implicit member expr to refer to the conversion operator.
10931    // and then call it.
10932    ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
10933                                             Conv, HadMultipleCandidates);
10934    if (Call.isInvalid())
10935      return ExprError();
10936    // Record usage of conversion in an implicit cast.
10937    Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
10938                                          CK_UserDefinedConversion,
10939                                          Call.get(), 0, VK_RValue));
10940
10941    return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs),
10942                         RParenLoc);
10943  }
10944
10945  MarkFunctionReferenced(LParenLoc, Best->Function);
10946  CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
10947  DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
10948
10949  // We found an overloaded operator(). Build a CXXOperatorCallExpr
10950  // that calls this method, using Object for the implicit object
10951  // parameter and passing along the remaining arguments.
10952  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10953  const FunctionProtoType *Proto =
10954    Method->getType()->getAs<FunctionProtoType>();
10955
10956  unsigned NumArgsInProto = Proto->getNumArgs();
10957  unsigned NumArgsToCheck = NumArgs;
10958
10959  // Build the full argument list for the method call (the
10960  // implicit object parameter is placed at the beginning of the
10961  // list).
10962  Expr **MethodArgs;
10963  if (NumArgs < NumArgsInProto) {
10964    NumArgsToCheck = NumArgsInProto;
10965    MethodArgs = new Expr*[NumArgsInProto + 1];
10966  } else {
10967    MethodArgs = new Expr*[NumArgs + 1];
10968  }
10969  MethodArgs[0] = Object.get();
10970  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
10971    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
10972
10973  DeclarationNameInfo OpLocInfo(
10974               Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
10975  OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
10976  ExprResult NewFn = CreateFunctionRefExpr(*this, Method,
10977                                           HadMultipleCandidates,
10978                                           OpLocInfo.getLoc(),
10979                                           OpLocInfo.getInfo());
10980  if (NewFn.isInvalid())
10981    return true;
10982
10983  // Once we've built TheCall, all of the expressions are properly
10984  // owned.
10985  QualType ResultTy = Method->getResultType();
10986  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10987  ResultTy = ResultTy.getNonLValueExprType(Context);
10988
10989  CXXOperatorCallExpr *TheCall =
10990    new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
10991                                      llvm::makeArrayRef(MethodArgs, NumArgs+1),
10992                                      ResultTy, VK, RParenLoc);
10993  delete [] MethodArgs;
10994
10995  if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
10996                          Method))
10997    return true;
10998
10999  // We may have default arguments. If so, we need to allocate more
11000  // slots in the call for them.
11001  if (NumArgs < NumArgsInProto)
11002    TheCall->setNumArgs(Context, NumArgsInProto + 1);
11003  else if (NumArgs > NumArgsInProto)
11004    NumArgsToCheck = NumArgsInProto;
11005
11006  bool IsError = false;
11007
11008  // Initialize the implicit object parameter.
11009  ExprResult ObjRes =
11010    PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11011                                        Best->FoundDecl, Method);
11012  if (ObjRes.isInvalid())
11013    IsError = true;
11014  else
11015    Object = ObjRes;
11016  TheCall->setArg(0, Object.take());
11017
11018  // Check the argument types.
11019  for (unsigned i = 0; i != NumArgsToCheck; i++) {
11020    Expr *Arg;
11021    if (i < NumArgs) {
11022      Arg = Args[i];
11023
11024      // Pass the argument.
11025
11026      ExprResult InputInit
11027        = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11028                                                    Context,
11029                                                    Method->getParamDecl(i)),
11030                                    SourceLocation(), Arg);
11031
11032      IsError |= InputInit.isInvalid();
11033      Arg = InputInit.takeAs<Expr>();
11034    } else {
11035      ExprResult DefArg
11036        = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11037      if (DefArg.isInvalid()) {
11038        IsError = true;
11039        break;
11040      }
11041
11042      Arg = DefArg.takeAs<Expr>();
11043    }
11044
11045    TheCall->setArg(i + 1, Arg);
11046  }
11047
11048  // If this is a variadic call, handle args passed through "...".
11049  if (Proto->isVariadic()) {
11050    // Promote the arguments (C99 6.5.2.2p7).
11051    for (unsigned i = NumArgsInProto; i < NumArgs; i++) {
11052      ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11053      IsError |= Arg.isInvalid();
11054      TheCall->setArg(i + 1, Arg.take());
11055    }
11056  }
11057
11058  if (IsError) return true;
11059
11060  DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
11061
11062  if (CheckFunctionCall(Method, TheCall, Proto))
11063    return true;
11064
11065  return MaybeBindToTemporary(TheCall);
11066}
11067
11068/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11069///  (if one exists), where @c Base is an expression of class type and
11070/// @c Member is the name of the member we're trying to find.
11071ExprResult
11072Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
11073  assert(Base->getType()->isRecordType() &&
11074         "left-hand side must have class type");
11075
11076  if (checkPlaceholderForOverload(*this, Base))
11077    return ExprError();
11078
11079  SourceLocation Loc = Base->getExprLoc();
11080
11081  // C++ [over.ref]p1:
11082  //
11083  //   [...] An expression x->m is interpreted as (x.operator->())->m
11084  //   for a class object x of type T if T::operator->() exists and if
11085  //   the operator is selected as the best match function by the
11086  //   overload resolution mechanism (13.3).
11087  DeclarationName OpName =
11088    Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11089  OverloadCandidateSet CandidateSet(Loc);
11090  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11091
11092  if (RequireCompleteType(Loc, Base->getType(),
11093                          diag::err_typecheck_incomplete_tag, Base))
11094    return ExprError();
11095
11096  LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11097  LookupQualifiedName(R, BaseRecord->getDecl());
11098  R.suppressDiagnostics();
11099
11100  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11101       Oper != OperEnd; ++Oper) {
11102    AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11103                       0, 0, CandidateSet, /*SuppressUserConversions=*/false);
11104  }
11105
11106  bool HadMultipleCandidates = (CandidateSet.size() > 1);
11107
11108  // Perform overload resolution.
11109  OverloadCandidateSet::iterator Best;
11110  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11111  case OR_Success:
11112    // Overload resolution succeeded; we'll build the call below.
11113    break;
11114
11115  case OR_No_Viable_Function:
11116    if (CandidateSet.empty())
11117      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11118        << Base->getType() << Base->getSourceRange();
11119    else
11120      Diag(OpLoc, diag::err_ovl_no_viable_oper)
11121        << "operator->" << Base->getSourceRange();
11122    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11123    return ExprError();
11124
11125  case OR_Ambiguous:
11126    Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11127      << "->" << Base->getType() << Base->getSourceRange();
11128    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11129    return ExprError();
11130
11131  case OR_Deleted:
11132    Diag(OpLoc,  diag::err_ovl_deleted_oper)
11133      << Best->Function->isDeleted()
11134      << "->"
11135      << getDeletedOrUnavailableSuffix(Best->Function)
11136      << Base->getSourceRange();
11137    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11138    return ExprError();
11139  }
11140
11141  MarkFunctionReferenced(OpLoc, Best->Function);
11142  CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11143  DiagnoseUseOfDecl(Best->FoundDecl, OpLoc);
11144
11145  // Convert the object parameter.
11146  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11147  ExprResult BaseResult =
11148    PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11149                                        Best->FoundDecl, Method);
11150  if (BaseResult.isInvalid())
11151    return ExprError();
11152  Base = BaseResult.take();
11153
11154  // Build the operator call.
11155  ExprResult FnExpr = CreateFunctionRefExpr(*this, Method,
11156                                            HadMultipleCandidates, OpLoc);
11157  if (FnExpr.isInvalid())
11158    return ExprError();
11159
11160  QualType ResultTy = Method->getResultType();
11161  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11162  ResultTy = ResultTy.getNonLValueExprType(Context);
11163  CXXOperatorCallExpr *TheCall =
11164    new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11165                                      Base, ResultTy, VK, OpLoc);
11166
11167  if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11168                          Method))
11169          return ExprError();
11170
11171  return MaybeBindToTemporary(TheCall);
11172}
11173
11174/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11175/// a literal operator described by the provided lookup results.
11176ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11177                                          DeclarationNameInfo &SuffixInfo,
11178                                          ArrayRef<Expr*> Args,
11179                                          SourceLocation LitEndLoc,
11180                                       TemplateArgumentListInfo *TemplateArgs) {
11181  SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11182
11183  OverloadCandidateSet CandidateSet(UDSuffixLoc);
11184  AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11185                        TemplateArgs);
11186
11187  bool HadMultipleCandidates = (CandidateSet.size() > 1);
11188
11189  // Perform overload resolution. This will usually be trivial, but might need
11190  // to perform substitutions for a literal operator template.
11191  OverloadCandidateSet::iterator Best;
11192  switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11193  case OR_Success:
11194  case OR_Deleted:
11195    break;
11196
11197  case OR_No_Viable_Function:
11198    Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11199      << R.getLookupName();
11200    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11201    return ExprError();
11202
11203  case OR_Ambiguous:
11204    Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11205    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11206    return ExprError();
11207  }
11208
11209  FunctionDecl *FD = Best->Function;
11210  MarkFunctionReferenced(UDSuffixLoc, FD);
11211  DiagnoseUseOfDecl(Best->FoundDecl, UDSuffixLoc);
11212
11213  ExprResult Fn = CreateFunctionRefExpr(*this, FD, HadMultipleCandidates,
11214                                        SuffixInfo.getLoc(),
11215                                        SuffixInfo.getInfo());
11216  if (Fn.isInvalid())
11217    return true;
11218
11219  // Check the argument types. This should almost always be a no-op, except
11220  // that array-to-pointer decay is applied to string literals.
11221  Expr *ConvArgs[2];
11222  for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) {
11223    ExprResult InputInit = PerformCopyInitialization(
11224      InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11225      SourceLocation(), Args[ArgIdx]);
11226    if (InputInit.isInvalid())
11227      return true;
11228    ConvArgs[ArgIdx] = InputInit.take();
11229  }
11230
11231  QualType ResultTy = FD->getResultType();
11232  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11233  ResultTy = ResultTy.getNonLValueExprType(Context);
11234
11235  UserDefinedLiteral *UDL =
11236    new (Context) UserDefinedLiteral(Context, Fn.take(),
11237                                     llvm::makeArrayRef(ConvArgs, Args.size()),
11238                                     ResultTy, VK, LitEndLoc, UDSuffixLoc);
11239
11240  if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11241    return ExprError();
11242
11243  if (CheckFunctionCall(FD, UDL, NULL))
11244    return ExprError();
11245
11246  return MaybeBindToTemporary(UDL);
11247}
11248
11249/// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11250/// given LookupResult is non-empty, it is assumed to describe a member which
11251/// will be invoked. Otherwise, the function will be found via argument
11252/// dependent lookup.
11253/// CallExpr is set to a valid expression and FRS_Success returned on success,
11254/// otherwise CallExpr is set to ExprError() and some non-success value
11255/// is returned.
11256Sema::ForRangeStatus
11257Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11258                                SourceLocation RangeLoc, VarDecl *Decl,
11259                                BeginEndFunction BEF,
11260                                const DeclarationNameInfo &NameInfo,
11261                                LookupResult &MemberLookup,
11262                                OverloadCandidateSet *CandidateSet,
11263                                Expr *Range, ExprResult *CallExpr) {
11264  CandidateSet->clear();
11265  if (!MemberLookup.empty()) {
11266    ExprResult MemberRef =
11267        BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11268                                 /*IsPtr=*/false, CXXScopeSpec(),
11269                                 /*TemplateKWLoc=*/SourceLocation(),
11270                                 /*FirstQualifierInScope=*/0,
11271                                 MemberLookup,
11272                                 /*TemplateArgs=*/0);
11273    if (MemberRef.isInvalid()) {
11274      *CallExpr = ExprError();
11275      Diag(Range->getLocStart(), diag::note_in_for_range)
11276          << RangeLoc << BEF << Range->getType();
11277      return FRS_DiagnosticIssued;
11278    }
11279    *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, MultiExprArg(), Loc, 0);
11280    if (CallExpr->isInvalid()) {
11281      *CallExpr = ExprError();
11282      Diag(Range->getLocStart(), diag::note_in_for_range)
11283          << RangeLoc << BEF << Range->getType();
11284      return FRS_DiagnosticIssued;
11285    }
11286  } else {
11287    UnresolvedSet<0> FoundNames;
11288    // C++11 [stmt.ranged]p1: For the purposes of this name lookup, namespace
11289    // std is an associated namespace.
11290    UnresolvedLookupExpr *Fn =
11291      UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11292                                   NestedNameSpecifierLoc(), NameInfo,
11293                                   /*NeedsADL=*/true, /*Overloaded=*/false,
11294                                   FoundNames.begin(), FoundNames.end(),
11295                                   /*LookInStdNamespace=*/true);
11296
11297    bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, &Range, 1, Loc,
11298                                                    CandidateSet, CallExpr);
11299    if (CandidateSet->empty() || CandidateSetError) {
11300      *CallExpr = ExprError();
11301      return FRS_NoViableFunction;
11302    }
11303    OverloadCandidateSet::iterator Best;
11304    OverloadingResult OverloadResult =
11305        CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11306
11307    if (OverloadResult == OR_No_Viable_Function) {
11308      *CallExpr = ExprError();
11309      return FRS_NoViableFunction;
11310    }
11311    *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, &Range, 1,
11312                                         Loc, 0, CandidateSet, &Best,
11313                                         OverloadResult,
11314                                         /*AllowTypoCorrection=*/false);
11315    if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11316      *CallExpr = ExprError();
11317      Diag(Range->getLocStart(), diag::note_in_for_range)
11318          << RangeLoc << BEF << Range->getType();
11319      return FRS_DiagnosticIssued;
11320    }
11321  }
11322  return FRS_Success;
11323}
11324
11325
11326/// FixOverloadedFunctionReference - E is an expression that refers to
11327/// a C++ overloaded function (possibly with some parentheses and
11328/// perhaps a '&' around it). We have resolved the overloaded function
11329/// to the function declaration Fn, so patch up the expression E to
11330/// refer (possibly indirectly) to Fn. Returns the new expr.
11331Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11332                                           FunctionDecl *Fn) {
11333  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11334    Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11335                                                   Found, Fn);
11336    if (SubExpr == PE->getSubExpr())
11337      return PE;
11338
11339    return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11340  }
11341
11342  if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11343    Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11344                                                   Found, Fn);
11345    assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11346                               SubExpr->getType()) &&
11347           "Implicit cast type cannot be determined from overload");
11348    assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11349    if (SubExpr == ICE->getSubExpr())
11350      return ICE;
11351
11352    return ImplicitCastExpr::Create(Context, ICE->getType(),
11353                                    ICE->getCastKind(),
11354                                    SubExpr, 0,
11355                                    ICE->getValueKind());
11356  }
11357
11358  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11359    assert(UnOp->getOpcode() == UO_AddrOf &&
11360           "Can only take the address of an overloaded function");
11361    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11362      if (Method->isStatic()) {
11363        // Do nothing: static member functions aren't any different
11364        // from non-member functions.
11365      } else {
11366        // Fix the sub expression, which really has to be an
11367        // UnresolvedLookupExpr holding an overloaded member function
11368        // or template.
11369        Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11370                                                       Found, Fn);
11371        if (SubExpr == UnOp->getSubExpr())
11372          return UnOp;
11373
11374        assert(isa<DeclRefExpr>(SubExpr)
11375               && "fixed to something other than a decl ref");
11376        assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11377               && "fixed to a member ref with no nested name qualifier");
11378
11379        // We have taken the address of a pointer to member
11380        // function. Perform the computation here so that we get the
11381        // appropriate pointer to member type.
11382        QualType ClassType
11383          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11384        QualType MemPtrType
11385          = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11386
11387        return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11388                                           VK_RValue, OK_Ordinary,
11389                                           UnOp->getOperatorLoc());
11390      }
11391    }
11392    Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11393                                                   Found, Fn);
11394    if (SubExpr == UnOp->getSubExpr())
11395      return UnOp;
11396
11397    return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11398                                     Context.getPointerType(SubExpr->getType()),
11399                                       VK_RValue, OK_Ordinary,
11400                                       UnOp->getOperatorLoc());
11401  }
11402
11403  if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11404    // FIXME: avoid copy.
11405    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11406    if (ULE->hasExplicitTemplateArgs()) {
11407      ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11408      TemplateArgs = &TemplateArgsBuffer;
11409    }
11410
11411    DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11412                                           ULE->getQualifierLoc(),
11413                                           ULE->getTemplateKeywordLoc(),
11414                                           Fn,
11415                                           /*enclosing*/ false, // FIXME?
11416                                           ULE->getNameLoc(),
11417                                           Fn->getType(),
11418                                           VK_LValue,
11419                                           Found.getDecl(),
11420                                           TemplateArgs);
11421    MarkDeclRefReferenced(DRE);
11422    DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11423    return DRE;
11424  }
11425
11426  if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11427    // FIXME: avoid copy.
11428    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11429    if (MemExpr->hasExplicitTemplateArgs()) {
11430      MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11431      TemplateArgs = &TemplateArgsBuffer;
11432    }
11433
11434    Expr *Base;
11435
11436    // If we're filling in a static method where we used to have an
11437    // implicit member access, rewrite to a simple decl ref.
11438    if (MemExpr->isImplicitAccess()) {
11439      if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11440        DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11441                                               MemExpr->getQualifierLoc(),
11442                                               MemExpr->getTemplateKeywordLoc(),
11443                                               Fn,
11444                                               /*enclosing*/ false,
11445                                               MemExpr->getMemberLoc(),
11446                                               Fn->getType(),
11447                                               VK_LValue,
11448                                               Found.getDecl(),
11449                                               TemplateArgs);
11450        MarkDeclRefReferenced(DRE);
11451        DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11452        return DRE;
11453      } else {
11454        SourceLocation Loc = MemExpr->getMemberLoc();
11455        if (MemExpr->getQualifier())
11456          Loc = MemExpr->getQualifierLoc().getBeginLoc();
11457        CheckCXXThisCapture(Loc);
11458        Base = new (Context) CXXThisExpr(Loc,
11459                                         MemExpr->getBaseType(),
11460                                         /*isImplicit=*/true);
11461      }
11462    } else
11463      Base = MemExpr->getBase();
11464
11465    ExprValueKind valueKind;
11466    QualType type;
11467    if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11468      valueKind = VK_LValue;
11469      type = Fn->getType();
11470    } else {
11471      valueKind = VK_RValue;
11472      type = Context.BoundMemberTy;
11473    }
11474
11475    MemberExpr *ME = MemberExpr::Create(Context, Base,
11476                                        MemExpr->isArrow(),
11477                                        MemExpr->getQualifierLoc(),
11478                                        MemExpr->getTemplateKeywordLoc(),
11479                                        Fn,
11480                                        Found,
11481                                        MemExpr->getMemberNameInfo(),
11482                                        TemplateArgs,
11483                                        type, valueKind, OK_Ordinary);
11484    ME->setHadMultipleCandidates(true);
11485    return ME;
11486  }
11487
11488  llvm_unreachable("Invalid reference to overloaded function");
11489}
11490
11491ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11492                                                DeclAccessPair Found,
11493                                                FunctionDecl *Fn) {
11494  return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11495}
11496
11497} // end namespace clang
11498