SemaOverload.cpp revision 548107ee5241037b4533d86afbe0cf38ddf6b5d9
1//===--- SemaOverload.cpp - C++ Overloading -------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file provides Sema routines for C++ overloading.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Sema/Overload.h"
15#include "clang/AST/ASTContext.h"
16#include "clang/AST/CXXInheritance.h"
17#include "clang/AST/DeclObjC.h"
18#include "clang/AST/Expr.h"
19#include "clang/AST/ExprCXX.h"
20#include "clang/AST/ExprObjC.h"
21#include "clang/AST/TypeOrdering.h"
22#include "clang/Basic/Diagnostic.h"
23#include "clang/Basic/PartialDiagnostic.h"
24#include "clang/Lex/Preprocessor.h"
25#include "clang/Sema/Initialization.h"
26#include "clang/Sema/Lookup.h"
27#include "clang/Sema/SemaInternal.h"
28#include "clang/Sema/Template.h"
29#include "clang/Sema/TemplateDeduction.h"
30#include "llvm/ADT/DenseSet.h"
31#include "llvm/ADT/STLExtras.h"
32#include "llvm/ADT/SmallPtrSet.h"
33#include "llvm/ADT/SmallString.h"
34#include <algorithm>
35
36namespace clang {
37using namespace sema;
38
39/// A convenience routine for creating a decayed reference to a function.
40static ExprResult
41CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl,
42                      bool HadMultipleCandidates,
43                      SourceLocation Loc = SourceLocation(),
44                      const DeclarationNameLoc &LocInfo = DeclarationNameLoc()){
45  DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(),
46                                                 VK_LValue, Loc, LocInfo);
47  if (HadMultipleCandidates)
48    DRE->setHadMultipleCandidates(true);
49
50  S.MarkDeclRefReferenced(DRE);
51  S.DiagnoseUseOfDecl(FoundDecl, Loc);
52
53  ExprResult E = S.Owned(DRE);
54  E = S.DefaultFunctionArrayConversion(E.take());
55  if (E.isInvalid())
56    return ExprError();
57  return E;
58}
59
60static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
61                                 bool InOverloadResolution,
62                                 StandardConversionSequence &SCS,
63                                 bool CStyle,
64                                 bool AllowObjCWritebackConversion);
65
66static bool IsTransparentUnionStandardConversion(Sema &S, Expr* From,
67                                                 QualType &ToType,
68                                                 bool InOverloadResolution,
69                                                 StandardConversionSequence &SCS,
70                                                 bool CStyle);
71static OverloadingResult
72IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
73                        UserDefinedConversionSequence& User,
74                        OverloadCandidateSet& Conversions,
75                        bool AllowExplicit);
76
77
78static ImplicitConversionSequence::CompareKind
79CompareStandardConversionSequences(Sema &S,
80                                   const StandardConversionSequence& SCS1,
81                                   const StandardConversionSequence& SCS2);
82
83static ImplicitConversionSequence::CompareKind
84CompareQualificationConversions(Sema &S,
85                                const StandardConversionSequence& SCS1,
86                                const StandardConversionSequence& SCS2);
87
88static ImplicitConversionSequence::CompareKind
89CompareDerivedToBaseConversions(Sema &S,
90                                const StandardConversionSequence& SCS1,
91                                const StandardConversionSequence& SCS2);
92
93
94
95/// GetConversionCategory - Retrieve the implicit conversion
96/// category corresponding to the given implicit conversion kind.
97ImplicitConversionCategory
98GetConversionCategory(ImplicitConversionKind Kind) {
99  static const ImplicitConversionCategory
100    Category[(int)ICK_Num_Conversion_Kinds] = {
101    ICC_Identity,
102    ICC_Lvalue_Transformation,
103    ICC_Lvalue_Transformation,
104    ICC_Lvalue_Transformation,
105    ICC_Identity,
106    ICC_Qualification_Adjustment,
107    ICC_Promotion,
108    ICC_Promotion,
109    ICC_Promotion,
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    ICC_Conversion,
119    ICC_Conversion,
120    ICC_Conversion,
121    ICC_Conversion,
122    ICC_Conversion
123  };
124  return Category[(int)Kind];
125}
126
127/// GetConversionRank - Retrieve the implicit conversion rank
128/// corresponding to the given implicit conversion kind.
129ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
130  static const ImplicitConversionRank
131    Rank[(int)ICK_Num_Conversion_Kinds] = {
132    ICR_Exact_Match,
133    ICR_Exact_Match,
134    ICR_Exact_Match,
135    ICR_Exact_Match,
136    ICR_Exact_Match,
137    ICR_Exact_Match,
138    ICR_Promotion,
139    ICR_Promotion,
140    ICR_Promotion,
141    ICR_Conversion,
142    ICR_Conversion,
143    ICR_Conversion,
144    ICR_Conversion,
145    ICR_Conversion,
146    ICR_Conversion,
147    ICR_Conversion,
148    ICR_Conversion,
149    ICR_Conversion,
150    ICR_Conversion,
151    ICR_Conversion,
152    ICR_Complex_Real_Conversion,
153    ICR_Conversion,
154    ICR_Conversion,
155    ICR_Writeback_Conversion
156  };
157  return Rank[(int)Kind];
158}
159
160/// GetImplicitConversionName - Return the name of this kind of
161/// implicit conversion.
162const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
163  static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
164    "No conversion",
165    "Lvalue-to-rvalue",
166    "Array-to-pointer",
167    "Function-to-pointer",
168    "Noreturn adjustment",
169    "Qualification",
170    "Integral promotion",
171    "Floating point promotion",
172    "Complex promotion",
173    "Integral conversion",
174    "Floating conversion",
175    "Complex conversion",
176    "Floating-integral conversion",
177    "Pointer conversion",
178    "Pointer-to-member conversion",
179    "Boolean conversion",
180    "Compatible-types conversion",
181    "Derived-to-base conversion",
182    "Vector conversion",
183    "Vector splat",
184    "Complex-real conversion",
185    "Block Pointer conversion",
186    "Transparent Union Conversion"
187    "Writeback conversion"
188  };
189  return Name[Kind];
190}
191
192/// StandardConversionSequence - Set the standard conversion
193/// sequence to the identity conversion.
194void StandardConversionSequence::setAsIdentityConversion() {
195  First = ICK_Identity;
196  Second = ICK_Identity;
197  Third = ICK_Identity;
198  DeprecatedStringLiteralToCharPtr = false;
199  QualificationIncludesObjCLifetime = false;
200  ReferenceBinding = false;
201  DirectBinding = false;
202  IsLvalueReference = true;
203  BindsToFunctionLvalue = false;
204  BindsToRvalue = false;
205  BindsImplicitObjectArgumentWithoutRefQualifier = false;
206  ObjCLifetimeConversionBinding = false;
207  CopyConstructor = 0;
208}
209
210/// getRank - Retrieve the rank of this standard conversion sequence
211/// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
212/// implicit conversions.
213ImplicitConversionRank StandardConversionSequence::getRank() const {
214  ImplicitConversionRank Rank = ICR_Exact_Match;
215  if  (GetConversionRank(First) > Rank)
216    Rank = GetConversionRank(First);
217  if  (GetConversionRank(Second) > Rank)
218    Rank = GetConversionRank(Second);
219  if  (GetConversionRank(Third) > Rank)
220    Rank = GetConversionRank(Third);
221  return Rank;
222}
223
224/// isPointerConversionToBool - Determines whether this conversion is
225/// a conversion of a pointer or pointer-to-member to bool. This is
226/// used as part of the ranking of standard conversion sequences
227/// (C++ 13.3.3.2p4).
228bool StandardConversionSequence::isPointerConversionToBool() const {
229  // Note that FromType has not necessarily been transformed by the
230  // array-to-pointer or function-to-pointer implicit conversions, so
231  // check for their presence as well as checking whether FromType is
232  // a pointer.
233  if (getToType(1)->isBooleanType() &&
234      (getFromType()->isPointerType() ||
235       getFromType()->isObjCObjectPointerType() ||
236       getFromType()->isBlockPointerType() ||
237       getFromType()->isNullPtrType() ||
238       First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
239    return true;
240
241  return false;
242}
243
244/// isPointerConversionToVoidPointer - Determines whether this
245/// conversion is a conversion of a pointer to a void pointer. This is
246/// used as part of the ranking of standard conversion sequences (C++
247/// 13.3.3.2p4).
248bool
249StandardConversionSequence::
250isPointerConversionToVoidPointer(ASTContext& Context) const {
251  QualType FromType = getFromType();
252  QualType ToType = getToType(1);
253
254  // Note that FromType has not necessarily been transformed by the
255  // array-to-pointer implicit conversion, so check for its presence
256  // and redo the conversion to get a pointer.
257  if (First == ICK_Array_To_Pointer)
258    FromType = Context.getArrayDecayedType(FromType);
259
260  if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
261    if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
262      return ToPtrType->getPointeeType()->isVoidType();
263
264  return false;
265}
266
267/// Skip any implicit casts which could be either part of a narrowing conversion
268/// or after one in an implicit conversion.
269static const Expr *IgnoreNarrowingConversion(const Expr *Converted) {
270  while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Converted)) {
271    switch (ICE->getCastKind()) {
272    case CK_NoOp:
273    case CK_IntegralCast:
274    case CK_IntegralToBoolean:
275    case CK_IntegralToFloating:
276    case CK_FloatingToIntegral:
277    case CK_FloatingToBoolean:
278    case CK_FloatingCast:
279      Converted = ICE->getSubExpr();
280      continue;
281
282    default:
283      return Converted;
284    }
285  }
286
287  return Converted;
288}
289
290/// Check if this standard conversion sequence represents a narrowing
291/// conversion, according to C++11 [dcl.init.list]p7.
292///
293/// \param Ctx  The AST context.
294/// \param Converted  The result of applying this standard conversion sequence.
295/// \param ConstantValue  If this is an NK_Constant_Narrowing conversion, the
296///        value of the expression prior to the narrowing conversion.
297/// \param ConstantType  If this is an NK_Constant_Narrowing conversion, the
298///        type of the expression prior to the narrowing conversion.
299NarrowingKind
300StandardConversionSequence::getNarrowingKind(ASTContext &Ctx,
301                                             const Expr *Converted,
302                                             APValue &ConstantValue,
303                                             QualType &ConstantType) const {
304  assert(Ctx.getLangOpts().CPlusPlus && "narrowing check outside C++");
305
306  // C++11 [dcl.init.list]p7:
307  //   A narrowing conversion is an implicit conversion ...
308  QualType FromType = getToType(0);
309  QualType ToType = getToType(1);
310  switch (Second) {
311  // -- from a floating-point type to an integer type, or
312  //
313  // -- from an integer type or unscoped enumeration type to a floating-point
314  //    type, except where the source is a constant expression and the actual
315  //    value after conversion will fit into the target type and will produce
316  //    the original value when converted back to the original type, or
317  case ICK_Floating_Integral:
318    if (FromType->isRealFloatingType() && ToType->isIntegralType(Ctx)) {
319      return NK_Type_Narrowing;
320    } else if (FromType->isIntegralType(Ctx) && ToType->isRealFloatingType()) {
321      llvm::APSInt IntConstantValue;
322      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
323      if (Initializer &&
324          Initializer->isIntegerConstantExpr(IntConstantValue, Ctx)) {
325        // Convert the integer to the floating type.
326        llvm::APFloat Result(Ctx.getFloatTypeSemantics(ToType));
327        Result.convertFromAPInt(IntConstantValue, IntConstantValue.isSigned(),
328                                llvm::APFloat::rmNearestTiesToEven);
329        // And back.
330        llvm::APSInt ConvertedValue = IntConstantValue;
331        bool ignored;
332        Result.convertToInteger(ConvertedValue,
333                                llvm::APFloat::rmTowardZero, &ignored);
334        // If the resulting value is different, this was a narrowing conversion.
335        if (IntConstantValue != ConvertedValue) {
336          ConstantValue = APValue(IntConstantValue);
337          ConstantType = Initializer->getType();
338          return NK_Constant_Narrowing;
339        }
340      } else {
341        // Variables are always narrowings.
342        return NK_Variable_Narrowing;
343      }
344    }
345    return NK_Not_Narrowing;
346
347  // -- from long double to double or float, or from double to float, except
348  //    where the source is a constant expression and the actual value after
349  //    conversion is within the range of values that can be represented (even
350  //    if it cannot be represented exactly), or
351  case ICK_Floating_Conversion:
352    if (FromType->isRealFloatingType() && ToType->isRealFloatingType() &&
353        Ctx.getFloatingTypeOrder(FromType, ToType) == 1) {
354      // FromType is larger than ToType.
355      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
356      if (Initializer->isCXX11ConstantExpr(Ctx, &ConstantValue)) {
357        // Constant!
358        assert(ConstantValue.isFloat());
359        llvm::APFloat FloatVal = ConstantValue.getFloat();
360        // Convert the source value into the target type.
361        bool ignored;
362        llvm::APFloat::opStatus ConvertStatus = FloatVal.convert(
363          Ctx.getFloatTypeSemantics(ToType),
364          llvm::APFloat::rmNearestTiesToEven, &ignored);
365        // If there was no overflow, the source value is within the range of
366        // values that can be represented.
367        if (ConvertStatus & llvm::APFloat::opOverflow) {
368          ConstantType = Initializer->getType();
369          return NK_Constant_Narrowing;
370        }
371      } else {
372        return NK_Variable_Narrowing;
373      }
374    }
375    return NK_Not_Narrowing;
376
377  // -- from an integer type or unscoped enumeration type to an integer type
378  //    that cannot represent all the values of the original type, except where
379  //    the source is a constant expression and the actual value after
380  //    conversion will fit into the target type and will produce the original
381  //    value when converted back to the original type.
382  case ICK_Boolean_Conversion:  // Bools are integers too.
383    if (!FromType->isIntegralOrUnscopedEnumerationType()) {
384      // Boolean conversions can be from pointers and pointers to members
385      // [conv.bool], and those aren't considered narrowing conversions.
386      return NK_Not_Narrowing;
387    }  // Otherwise, fall through to the integral case.
388  case ICK_Integral_Conversion: {
389    assert(FromType->isIntegralOrUnscopedEnumerationType());
390    assert(ToType->isIntegralOrUnscopedEnumerationType());
391    const bool FromSigned = FromType->isSignedIntegerOrEnumerationType();
392    const unsigned FromWidth = Ctx.getIntWidth(FromType);
393    const bool ToSigned = ToType->isSignedIntegerOrEnumerationType();
394    const unsigned ToWidth = Ctx.getIntWidth(ToType);
395
396    if (FromWidth > ToWidth ||
397        (FromWidth == ToWidth && FromSigned != ToSigned) ||
398        (FromSigned && !ToSigned)) {
399      // Not all values of FromType can be represented in ToType.
400      llvm::APSInt InitializerValue;
401      const Expr *Initializer = IgnoreNarrowingConversion(Converted);
402      if (!Initializer->isIntegerConstantExpr(InitializerValue, Ctx)) {
403        // Such conversions on variables are always narrowing.
404        return NK_Variable_Narrowing;
405      }
406      bool Narrowing = false;
407      if (FromWidth < ToWidth) {
408        // Negative -> unsigned is narrowing. Otherwise, more bits is never
409        // narrowing.
410        if (InitializerValue.isSigned() && InitializerValue.isNegative())
411          Narrowing = true;
412      } else {
413        // Add a bit to the InitializerValue so we don't have to worry about
414        // signed vs. unsigned comparisons.
415        InitializerValue = InitializerValue.extend(
416          InitializerValue.getBitWidth() + 1);
417        // Convert the initializer to and from the target width and signed-ness.
418        llvm::APSInt ConvertedValue = InitializerValue;
419        ConvertedValue = ConvertedValue.trunc(ToWidth);
420        ConvertedValue.setIsSigned(ToSigned);
421        ConvertedValue = ConvertedValue.extend(InitializerValue.getBitWidth());
422        ConvertedValue.setIsSigned(InitializerValue.isSigned());
423        // If the result is different, this was a narrowing conversion.
424        if (ConvertedValue != InitializerValue)
425          Narrowing = true;
426      }
427      if (Narrowing) {
428        ConstantType = Initializer->getType();
429        ConstantValue = APValue(InitializerValue);
430        return NK_Constant_Narrowing;
431      }
432    }
433    return NK_Not_Narrowing;
434  }
435
436  default:
437    // Other kinds of conversions are not narrowings.
438    return NK_Not_Narrowing;
439  }
440}
441
442/// DebugPrint - Print this standard conversion sequence to standard
443/// error. Useful for debugging overloading issues.
444void StandardConversionSequence::DebugPrint() const {
445  raw_ostream &OS = llvm::errs();
446  bool PrintedSomething = false;
447  if (First != ICK_Identity) {
448    OS << GetImplicitConversionName(First);
449    PrintedSomething = true;
450  }
451
452  if (Second != ICK_Identity) {
453    if (PrintedSomething) {
454      OS << " -> ";
455    }
456    OS << GetImplicitConversionName(Second);
457
458    if (CopyConstructor) {
459      OS << " (by copy constructor)";
460    } else if (DirectBinding) {
461      OS << " (direct reference binding)";
462    } else if (ReferenceBinding) {
463      OS << " (reference binding)";
464    }
465    PrintedSomething = true;
466  }
467
468  if (Third != ICK_Identity) {
469    if (PrintedSomething) {
470      OS << " -> ";
471    }
472    OS << GetImplicitConversionName(Third);
473    PrintedSomething = true;
474  }
475
476  if (!PrintedSomething) {
477    OS << "No conversions required";
478  }
479}
480
481/// DebugPrint - Print this user-defined conversion sequence to standard
482/// error. Useful for debugging overloading issues.
483void UserDefinedConversionSequence::DebugPrint() const {
484  raw_ostream &OS = llvm::errs();
485  if (Before.First || Before.Second || Before.Third) {
486    Before.DebugPrint();
487    OS << " -> ";
488  }
489  if (ConversionFunction)
490    OS << '\'' << *ConversionFunction << '\'';
491  else
492    OS << "aggregate initialization";
493  if (After.First || After.Second || After.Third) {
494    OS << " -> ";
495    After.DebugPrint();
496  }
497}
498
499/// DebugPrint - Print this implicit conversion sequence to standard
500/// error. Useful for debugging overloading issues.
501void ImplicitConversionSequence::DebugPrint() const {
502  raw_ostream &OS = llvm::errs();
503  switch (ConversionKind) {
504  case StandardConversion:
505    OS << "Standard conversion: ";
506    Standard.DebugPrint();
507    break;
508  case UserDefinedConversion:
509    OS << "User-defined conversion: ";
510    UserDefined.DebugPrint();
511    break;
512  case EllipsisConversion:
513    OS << "Ellipsis conversion";
514    break;
515  case AmbiguousConversion:
516    OS << "Ambiguous conversion";
517    break;
518  case BadConversion:
519    OS << "Bad conversion";
520    break;
521  }
522
523  OS << "\n";
524}
525
526void AmbiguousConversionSequence::construct() {
527  new (&conversions()) ConversionSet();
528}
529
530void AmbiguousConversionSequence::destruct() {
531  conversions().~ConversionSet();
532}
533
534void
535AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
536  FromTypePtr = O.FromTypePtr;
537  ToTypePtr = O.ToTypePtr;
538  new (&conversions()) ConversionSet(O.conversions());
539}
540
541namespace {
542  // Structure used by OverloadCandidate::DeductionFailureInfo to store
543  // template argument information.
544  struct DFIArguments {
545    TemplateArgument FirstArg;
546    TemplateArgument SecondArg;
547  };
548  // Structure used by OverloadCandidate::DeductionFailureInfo to store
549  // template parameter and template argument information.
550  struct DFIParamWithArguments : DFIArguments {
551    TemplateParameter Param;
552  };
553}
554
555/// \brief Convert from Sema's representation of template deduction information
556/// to the form used in overload-candidate information.
557OverloadCandidate::DeductionFailureInfo
558static MakeDeductionFailureInfo(ASTContext &Context,
559                                Sema::TemplateDeductionResult TDK,
560                                TemplateDeductionInfo &Info) {
561  OverloadCandidate::DeductionFailureInfo Result;
562  Result.Result = static_cast<unsigned>(TDK);
563  Result.HasDiagnostic = false;
564  Result.Data = 0;
565  switch (TDK) {
566  case Sema::TDK_Success:
567  case Sema::TDK_Invalid:
568  case Sema::TDK_InstantiationDepth:
569  case Sema::TDK_TooManyArguments:
570  case Sema::TDK_TooFewArguments:
571    break;
572
573  case Sema::TDK_Incomplete:
574  case Sema::TDK_InvalidExplicitArguments:
575    Result.Data = Info.Param.getOpaqueValue();
576    break;
577
578  case Sema::TDK_NonDeducedMismatch: {
579    // FIXME: Should allocate from normal heap so that we can free this later.
580    DFIArguments *Saved = new (Context) DFIArguments;
581    Saved->FirstArg = Info.FirstArg;
582    Saved->SecondArg = Info.SecondArg;
583    Result.Data = Saved;
584    break;
585  }
586
587  case Sema::TDK_Inconsistent:
588  case Sema::TDK_Underqualified: {
589    // FIXME: Should allocate from normal heap so that we can free this later.
590    DFIParamWithArguments *Saved = new (Context) DFIParamWithArguments;
591    Saved->Param = Info.Param;
592    Saved->FirstArg = Info.FirstArg;
593    Saved->SecondArg = Info.SecondArg;
594    Result.Data = Saved;
595    break;
596  }
597
598  case Sema::TDK_SubstitutionFailure:
599    Result.Data = Info.take();
600    if (Info.hasSFINAEDiagnostic()) {
601      PartialDiagnosticAt *Diag = new (Result.Diagnostic) PartialDiagnosticAt(
602          SourceLocation(), PartialDiagnostic::NullDiagnostic());
603      Info.takeSFINAEDiagnostic(*Diag);
604      Result.HasDiagnostic = true;
605    }
606    break;
607
608  case Sema::TDK_FailedOverloadResolution:
609    Result.Data = Info.Expression;
610    break;
611
612  case Sema::TDK_MiscellaneousDeductionFailure:
613    break;
614  }
615
616  return Result;
617}
618
619void OverloadCandidate::DeductionFailureInfo::Destroy() {
620  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
621  case Sema::TDK_Success:
622  case Sema::TDK_Invalid:
623  case Sema::TDK_InstantiationDepth:
624  case Sema::TDK_Incomplete:
625  case Sema::TDK_TooManyArguments:
626  case Sema::TDK_TooFewArguments:
627  case Sema::TDK_InvalidExplicitArguments:
628  case Sema::TDK_FailedOverloadResolution:
629    break;
630
631  case Sema::TDK_Inconsistent:
632  case Sema::TDK_Underqualified:
633  case Sema::TDK_NonDeducedMismatch:
634    // FIXME: Destroy the data?
635    Data = 0;
636    break;
637
638  case Sema::TDK_SubstitutionFailure:
639    // FIXME: Destroy the template argument list?
640    Data = 0;
641    if (PartialDiagnosticAt *Diag = getSFINAEDiagnostic()) {
642      Diag->~PartialDiagnosticAt();
643      HasDiagnostic = false;
644    }
645    break;
646
647  // Unhandled
648  case Sema::TDK_MiscellaneousDeductionFailure:
649    break;
650  }
651}
652
653PartialDiagnosticAt *
654OverloadCandidate::DeductionFailureInfo::getSFINAEDiagnostic() {
655  if (HasDiagnostic)
656    return static_cast<PartialDiagnosticAt*>(static_cast<void*>(Diagnostic));
657  return 0;
658}
659
660TemplateParameter
661OverloadCandidate::DeductionFailureInfo::getTemplateParameter() {
662  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
663  case Sema::TDK_Success:
664  case Sema::TDK_Invalid:
665  case Sema::TDK_InstantiationDepth:
666  case Sema::TDK_TooManyArguments:
667  case Sema::TDK_TooFewArguments:
668  case Sema::TDK_SubstitutionFailure:
669  case Sema::TDK_NonDeducedMismatch:
670  case Sema::TDK_FailedOverloadResolution:
671    return TemplateParameter();
672
673  case Sema::TDK_Incomplete:
674  case Sema::TDK_InvalidExplicitArguments:
675    return TemplateParameter::getFromOpaqueValue(Data);
676
677  case Sema::TDK_Inconsistent:
678  case Sema::TDK_Underqualified:
679    return static_cast<DFIParamWithArguments*>(Data)->Param;
680
681  // Unhandled
682  case Sema::TDK_MiscellaneousDeductionFailure:
683    break;
684  }
685
686  return TemplateParameter();
687}
688
689TemplateArgumentList *
690OverloadCandidate::DeductionFailureInfo::getTemplateArgumentList() {
691  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
692  case Sema::TDK_Success:
693  case Sema::TDK_Invalid:
694  case Sema::TDK_InstantiationDepth:
695  case Sema::TDK_TooManyArguments:
696  case Sema::TDK_TooFewArguments:
697  case Sema::TDK_Incomplete:
698  case Sema::TDK_InvalidExplicitArguments:
699  case Sema::TDK_Inconsistent:
700  case Sema::TDK_Underqualified:
701  case Sema::TDK_NonDeducedMismatch:
702  case Sema::TDK_FailedOverloadResolution:
703    return 0;
704
705  case Sema::TDK_SubstitutionFailure:
706    return static_cast<TemplateArgumentList*>(Data);
707
708  // Unhandled
709  case Sema::TDK_MiscellaneousDeductionFailure:
710    break;
711  }
712
713  return 0;
714}
715
716const TemplateArgument *OverloadCandidate::DeductionFailureInfo::getFirstArg() {
717  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
718  case Sema::TDK_Success:
719  case Sema::TDK_Invalid:
720  case Sema::TDK_InstantiationDepth:
721  case Sema::TDK_Incomplete:
722  case Sema::TDK_TooManyArguments:
723  case Sema::TDK_TooFewArguments:
724  case Sema::TDK_InvalidExplicitArguments:
725  case Sema::TDK_SubstitutionFailure:
726  case Sema::TDK_FailedOverloadResolution:
727    return 0;
728
729  case Sema::TDK_Inconsistent:
730  case Sema::TDK_Underqualified:
731  case Sema::TDK_NonDeducedMismatch:
732    return &static_cast<DFIArguments*>(Data)->FirstArg;
733
734  // Unhandled
735  case Sema::TDK_MiscellaneousDeductionFailure:
736    break;
737  }
738
739  return 0;
740}
741
742const TemplateArgument *
743OverloadCandidate::DeductionFailureInfo::getSecondArg() {
744  switch (static_cast<Sema::TemplateDeductionResult>(Result)) {
745  case Sema::TDK_Success:
746  case Sema::TDK_Invalid:
747  case Sema::TDK_InstantiationDepth:
748  case Sema::TDK_Incomplete:
749  case Sema::TDK_TooManyArguments:
750  case Sema::TDK_TooFewArguments:
751  case Sema::TDK_InvalidExplicitArguments:
752  case Sema::TDK_SubstitutionFailure:
753  case Sema::TDK_FailedOverloadResolution:
754    return 0;
755
756  case Sema::TDK_Inconsistent:
757  case Sema::TDK_Underqualified:
758  case Sema::TDK_NonDeducedMismatch:
759    return &static_cast<DFIArguments*>(Data)->SecondArg;
760
761  // Unhandled
762  case Sema::TDK_MiscellaneousDeductionFailure:
763    break;
764  }
765
766  return 0;
767}
768
769Expr *
770OverloadCandidate::DeductionFailureInfo::getExpr() {
771  if (static_cast<Sema::TemplateDeductionResult>(Result) ==
772        Sema::TDK_FailedOverloadResolution)
773    return static_cast<Expr*>(Data);
774
775  return 0;
776}
777
778void OverloadCandidateSet::destroyCandidates() {
779  for (iterator i = begin(), e = end(); i != e; ++i) {
780    for (unsigned ii = 0, ie = i->NumConversions; ii != ie; ++ii)
781      i->Conversions[ii].~ImplicitConversionSequence();
782    if (!i->Viable && i->FailureKind == ovl_fail_bad_deduction)
783      i->DeductionFailure.Destroy();
784  }
785}
786
787void OverloadCandidateSet::clear() {
788  destroyCandidates();
789  NumInlineSequences = 0;
790  Candidates.clear();
791  Functions.clear();
792}
793
794namespace {
795  class UnbridgedCastsSet {
796    struct Entry {
797      Expr **Addr;
798      Expr *Saved;
799    };
800    SmallVector<Entry, 2> Entries;
801
802  public:
803    void save(Sema &S, Expr *&E) {
804      assert(E->hasPlaceholderType(BuiltinType::ARCUnbridgedCast));
805      Entry entry = { &E, E };
806      Entries.push_back(entry);
807      E = S.stripARCUnbridgedCast(E);
808    }
809
810    void restore() {
811      for (SmallVectorImpl<Entry>::iterator
812             i = Entries.begin(), e = Entries.end(); i != e; ++i)
813        *i->Addr = i->Saved;
814    }
815  };
816}
817
818/// checkPlaceholderForOverload - Do any interesting placeholder-like
819/// preprocessing on the given expression.
820///
821/// \param unbridgedCasts a collection to which to add unbridged casts;
822///   without this, they will be immediately diagnosed as errors
823///
824/// Return true on unrecoverable error.
825static bool checkPlaceholderForOverload(Sema &S, Expr *&E,
826                                        UnbridgedCastsSet *unbridgedCasts = 0) {
827  if (const BuiltinType *placeholder =  E->getType()->getAsPlaceholderType()) {
828    // We can't handle overloaded expressions here because overload
829    // resolution might reasonably tweak them.
830    if (placeholder->getKind() == BuiltinType::Overload) return false;
831
832    // If the context potentially accepts unbridged ARC casts, strip
833    // the unbridged cast and add it to the collection for later restoration.
834    if (placeholder->getKind() == BuiltinType::ARCUnbridgedCast &&
835        unbridgedCasts) {
836      unbridgedCasts->save(S, E);
837      return false;
838    }
839
840    // Go ahead and check everything else.
841    ExprResult result = S.CheckPlaceholderExpr(E);
842    if (result.isInvalid())
843      return true;
844
845    E = result.take();
846    return false;
847  }
848
849  // Nothing to do.
850  return false;
851}
852
853/// checkArgPlaceholdersForOverload - Check a set of call operands for
854/// placeholders.
855static bool checkArgPlaceholdersForOverload(Sema &S, Expr **args,
856                                            unsigned numArgs,
857                                            UnbridgedCastsSet &unbridged) {
858  for (unsigned i = 0; i != numArgs; ++i)
859    if (checkPlaceholderForOverload(S, args[i], &unbridged))
860      return true;
861
862  return false;
863}
864
865// IsOverload - Determine whether the given New declaration is an
866// overload of the declarations in Old. This routine returns false if
867// New and Old cannot be overloaded, e.g., if New has the same
868// signature as some function in Old (C++ 1.3.10) or if the Old
869// declarations aren't functions (or function templates) at all. When
870// it does return false, MatchedDecl will point to the decl that New
871// cannot be overloaded with.  This decl may be a UsingShadowDecl on
872// top of the underlying declaration.
873//
874// Example: Given the following input:
875//
876//   void f(int, float); // #1
877//   void f(int, int); // #2
878//   int f(int, int); // #3
879//
880// When we process #1, there is no previous declaration of "f",
881// so IsOverload will not be used.
882//
883// When we process #2, Old contains only the FunctionDecl for #1.  By
884// comparing the parameter types, we see that #1 and #2 are overloaded
885// (since they have different signatures), so this routine returns
886// false; MatchedDecl is unchanged.
887//
888// When we process #3, Old is an overload set containing #1 and #2. We
889// compare the signatures of #3 to #1 (they're overloaded, so we do
890// nothing) and then #3 to #2. Since the signatures of #3 and #2 are
891// identical (return types of functions are not part of the
892// signature), IsOverload returns false and MatchedDecl will be set to
893// point to the FunctionDecl for #2.
894//
895// 'NewIsUsingShadowDecl' indicates that 'New' is being introduced
896// into a class by a using declaration.  The rules for whether to hide
897// shadow declarations ignore some properties which otherwise figure
898// into a function template's signature.
899Sema::OverloadKind
900Sema::CheckOverload(Scope *S, FunctionDecl *New, const LookupResult &Old,
901                    NamedDecl *&Match, bool NewIsUsingDecl) {
902  for (LookupResult::iterator I = Old.begin(), E = Old.end();
903         I != E; ++I) {
904    NamedDecl *OldD = *I;
905
906    bool OldIsUsingDecl = false;
907    if (isa<UsingShadowDecl>(OldD)) {
908      OldIsUsingDecl = true;
909
910      // We can always introduce two using declarations into the same
911      // context, even if they have identical signatures.
912      if (NewIsUsingDecl) continue;
913
914      OldD = cast<UsingShadowDecl>(OldD)->getTargetDecl();
915    }
916
917    // If either declaration was introduced by a using declaration,
918    // we'll need to use slightly different rules for matching.
919    // Essentially, these rules are the normal rules, except that
920    // function templates hide function templates with different
921    // return types or template parameter lists.
922    bool UseMemberUsingDeclRules =
923      (OldIsUsingDecl || NewIsUsingDecl) && CurContext->isRecord() &&
924      !New->getFriendObjectKind();
925
926    if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
927      if (!IsOverload(New, OldT->getTemplatedDecl(), UseMemberUsingDeclRules)) {
928        if (UseMemberUsingDeclRules && OldIsUsingDecl) {
929          HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
930          continue;
931        }
932
933        Match = *I;
934        return Ovl_Match;
935      }
936    } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
937      if (!IsOverload(New, OldF, UseMemberUsingDeclRules)) {
938        if (UseMemberUsingDeclRules && OldIsUsingDecl) {
939          HideUsingShadowDecl(S, cast<UsingShadowDecl>(*I));
940          continue;
941        }
942
943        if (!shouldLinkPossiblyHiddenDecl(*I, New))
944          continue;
945
946        Match = *I;
947        return Ovl_Match;
948      }
949    } else if (isa<UsingDecl>(OldD)) {
950      // We can overload with these, which can show up when doing
951      // redeclaration checks for UsingDecls.
952      assert(Old.getLookupKind() == LookupUsingDeclName);
953    } else if (isa<TagDecl>(OldD)) {
954      // We can always overload with tags by hiding them.
955    } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
956      // Optimistically assume that an unresolved using decl will
957      // overload; if it doesn't, we'll have to diagnose during
958      // template instantiation.
959    } else {
960      // (C++ 13p1):
961      //   Only function declarations can be overloaded; object and type
962      //   declarations cannot be overloaded.
963      Match = *I;
964      return Ovl_NonFunction;
965    }
966  }
967
968  return Ovl_Overload;
969}
970
971static bool canBeOverloaded(const FunctionDecl &D) {
972  if (D.getAttr<OverloadableAttr>())
973    return true;
974  if (D.isExternC())
975    return false;
976
977  // Main cannot be overloaded (basic.start.main).
978  if (D.isMain())
979    return false;
980
981  return true;
982}
983
984static bool shouldTryToOverload(Sema &S, FunctionDecl *New, FunctionDecl *Old,
985                                bool UseUsingDeclRules) {
986  FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
987  FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
988
989  // C++ [temp.fct]p2:
990  //   A function template can be overloaded with other function templates
991  //   and with normal (non-template) functions.
992  if ((OldTemplate == 0) != (NewTemplate == 0))
993    return true;
994
995  // Is the function New an overload of the function Old?
996  QualType OldQType = S.Context.getCanonicalType(Old->getType());
997  QualType NewQType = S.Context.getCanonicalType(New->getType());
998
999  // Compare the signatures (C++ 1.3.10) of the two functions to
1000  // determine whether they are overloads. If we find any mismatch
1001  // in the signature, they are overloads.
1002
1003  // If either of these functions is a K&R-style function (no
1004  // prototype), then we consider them to have matching signatures.
1005  if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
1006      isa<FunctionNoProtoType>(NewQType.getTypePtr()))
1007    return false;
1008
1009  const FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
1010  const FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
1011
1012  // The signature of a function includes the types of its
1013  // parameters (C++ 1.3.10), which includes the presence or absence
1014  // of the ellipsis; see C++ DR 357).
1015  if (OldQType != NewQType &&
1016      (OldType->getNumArgs() != NewType->getNumArgs() ||
1017       OldType->isVariadic() != NewType->isVariadic() ||
1018       !S.FunctionArgTypesAreEqual(OldType, NewType)))
1019    return true;
1020
1021  // C++ [temp.over.link]p4:
1022  //   The signature of a function template consists of its function
1023  //   signature, its return type and its template parameter list. The names
1024  //   of the template parameters are significant only for establishing the
1025  //   relationship between the template parameters and the rest of the
1026  //   signature.
1027  //
1028  // We check the return type and template parameter lists for function
1029  // templates first; the remaining checks follow.
1030  //
1031  // However, we don't consider either of these when deciding whether
1032  // a member introduced by a shadow declaration is hidden.
1033  if (!UseUsingDeclRules && NewTemplate &&
1034      (!S.TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
1035                                         OldTemplate->getTemplateParameters(),
1036                                         false, S.TPL_TemplateMatch) ||
1037       OldType->getResultType() != NewType->getResultType()))
1038    return true;
1039
1040  // If the function is a class member, its signature includes the
1041  // cv-qualifiers (if any) and ref-qualifier (if any) on the function itself.
1042  //
1043  // As part of this, also check whether one of the member functions
1044  // is static, in which case they are not overloads (C++
1045  // 13.1p2). While not part of the definition of the signature,
1046  // this check is important to determine whether these functions
1047  // can be overloaded.
1048  CXXMethodDecl *OldMethod = dyn_cast<CXXMethodDecl>(Old);
1049  CXXMethodDecl *NewMethod = dyn_cast<CXXMethodDecl>(New);
1050  if (OldMethod && NewMethod &&
1051      !OldMethod->isStatic() && !NewMethod->isStatic()) {
1052    if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {
1053      if (!UseUsingDeclRules &&
1054          (OldMethod->getRefQualifier() == RQ_None ||
1055           NewMethod->getRefQualifier() == RQ_None)) {
1056        // C++0x [over.load]p2:
1057        //   - Member function declarations with the same name and the same
1058        //     parameter-type-list as well as member function template
1059        //     declarations with the same name, the same parameter-type-list, and
1060        //     the same template parameter lists cannot be overloaded if any of
1061        //     them, but not all, have a ref-qualifier (8.3.5).
1062        S.Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload)
1063          << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();
1064        S.Diag(OldMethod->getLocation(), diag::note_previous_declaration);
1065      }
1066      return true;
1067    }
1068
1069    // We may not have applied the implicit const for a constexpr member
1070    // function yet (because we haven't yet resolved whether this is a static
1071    // or non-static member function). Add it now, on the assumption that this
1072    // is a redeclaration of OldMethod.
1073    unsigned NewQuals = NewMethod->getTypeQualifiers();
1074    if (NewMethod->isConstexpr() && !isa<CXXConstructorDecl>(NewMethod))
1075      NewQuals |= Qualifiers::Const;
1076    if (OldMethod->getTypeQualifiers() != NewQuals)
1077      return true;
1078  }
1079
1080  // The signatures match; this is not an overload.
1081  return false;
1082}
1083
1084bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old,
1085                      bool UseUsingDeclRules) {
1086  if (!shouldTryToOverload(*this, New, Old, UseUsingDeclRules))
1087    return false;
1088
1089  // If both of the functions are extern "C", then they are not
1090  // overloads.
1091  if (!canBeOverloaded(*Old) && !canBeOverloaded(*New))
1092    return false;
1093
1094  return true;
1095}
1096
1097/// \brief Checks availability of the function depending on the current
1098/// function context. Inside an unavailable function, unavailability is ignored.
1099///
1100/// \returns true if \arg FD is unavailable and current context is inside
1101/// an available function, false otherwise.
1102bool Sema::isFunctionConsideredUnavailable(FunctionDecl *FD) {
1103  return FD->isUnavailable() && !cast<Decl>(CurContext)->isUnavailable();
1104}
1105
1106/// \brief Tries a user-defined conversion from From to ToType.
1107///
1108/// Produces an implicit conversion sequence for when a standard conversion
1109/// is not an option. See TryImplicitConversion for more information.
1110static ImplicitConversionSequence
1111TryUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
1112                         bool SuppressUserConversions,
1113                         bool AllowExplicit,
1114                         bool InOverloadResolution,
1115                         bool CStyle,
1116                         bool AllowObjCWritebackConversion) {
1117  ImplicitConversionSequence ICS;
1118
1119  if (SuppressUserConversions) {
1120    // We're not in the case above, so there is no conversion that
1121    // we can perform.
1122    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1123    return ICS;
1124  }
1125
1126  // Attempt user-defined conversion.
1127  OverloadCandidateSet Conversions(From->getExprLoc());
1128  OverloadingResult UserDefResult
1129    = IsUserDefinedConversion(S, From, ToType, ICS.UserDefined, Conversions,
1130                              AllowExplicit);
1131
1132  if (UserDefResult == OR_Success) {
1133    ICS.setUserDefined();
1134    // C++ [over.ics.user]p4:
1135    //   A conversion of an expression of class type to the same class
1136    //   type is given Exact Match rank, and a conversion of an
1137    //   expression of class type to a base class of that type is
1138    //   given Conversion rank, in spite of the fact that a copy
1139    //   constructor (i.e., a user-defined conversion function) is
1140    //   called for those cases.
1141    if (CXXConstructorDecl *Constructor
1142          = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
1143      QualType FromCanon
1144        = S.Context.getCanonicalType(From->getType().getUnqualifiedType());
1145      QualType ToCanon
1146        = S.Context.getCanonicalType(ToType).getUnqualifiedType();
1147      if (Constructor->isCopyConstructor() &&
1148          (FromCanon == ToCanon || S.IsDerivedFrom(FromCanon, ToCanon))) {
1149        // Turn this into a "standard" conversion sequence, so that it
1150        // gets ranked with standard conversion sequences.
1151        ICS.setStandard();
1152        ICS.Standard.setAsIdentityConversion();
1153        ICS.Standard.setFromType(From->getType());
1154        ICS.Standard.setAllToTypes(ToType);
1155        ICS.Standard.CopyConstructor = Constructor;
1156        if (ToCanon != FromCanon)
1157          ICS.Standard.Second = ICK_Derived_To_Base;
1158      }
1159    }
1160
1161    // C++ [over.best.ics]p4:
1162    //   However, when considering the argument of a user-defined
1163    //   conversion function that is a candidate by 13.3.1.3 when
1164    //   invoked for the copying of the temporary in the second step
1165    //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
1166    //   13.3.1.6 in all cases, only standard conversion sequences and
1167    //   ellipsis conversion sequences are allowed.
1168    if (SuppressUserConversions && ICS.isUserDefined()) {
1169      ICS.setBad(BadConversionSequence::suppressed_user, From, ToType);
1170    }
1171  } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
1172    ICS.setAmbiguous();
1173    ICS.Ambiguous.setFromType(From->getType());
1174    ICS.Ambiguous.setToType(ToType);
1175    for (OverloadCandidateSet::iterator Cand = Conversions.begin();
1176         Cand != Conversions.end(); ++Cand)
1177      if (Cand->Viable)
1178        ICS.Ambiguous.addConversion(Cand->Function);
1179  } else {
1180    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1181  }
1182
1183  return ICS;
1184}
1185
1186/// TryImplicitConversion - Attempt to perform an implicit conversion
1187/// from the given expression (Expr) to the given type (ToType). This
1188/// function returns an implicit conversion sequence that can be used
1189/// to perform the initialization. Given
1190///
1191///   void f(float f);
1192///   void g(int i) { f(i); }
1193///
1194/// this routine would produce an implicit conversion sequence to
1195/// describe the initialization of f from i, which will be a standard
1196/// conversion sequence containing an lvalue-to-rvalue conversion (C++
1197/// 4.1) followed by a floating-integral conversion (C++ 4.9).
1198//
1199/// Note that this routine only determines how the conversion can be
1200/// performed; it does not actually perform the conversion. As such,
1201/// it will not produce any diagnostics if no conversion is available,
1202/// but will instead return an implicit conversion sequence of kind
1203/// "BadConversion".
1204///
1205/// If @p SuppressUserConversions, then user-defined conversions are
1206/// not permitted.
1207/// If @p AllowExplicit, then explicit user-defined conversions are
1208/// permitted.
1209///
1210/// \param AllowObjCWritebackConversion Whether we allow the Objective-C
1211/// writeback conversion, which allows __autoreleasing id* parameters to
1212/// be initialized with __strong id* or __weak id* arguments.
1213static ImplicitConversionSequence
1214TryImplicitConversion(Sema &S, Expr *From, QualType ToType,
1215                      bool SuppressUserConversions,
1216                      bool AllowExplicit,
1217                      bool InOverloadResolution,
1218                      bool CStyle,
1219                      bool AllowObjCWritebackConversion) {
1220  ImplicitConversionSequence ICS;
1221  if (IsStandardConversion(S, From, ToType, InOverloadResolution,
1222                           ICS.Standard, CStyle, AllowObjCWritebackConversion)){
1223    ICS.setStandard();
1224    return ICS;
1225  }
1226
1227  if (!S.getLangOpts().CPlusPlus) {
1228    ICS.setBad(BadConversionSequence::no_conversion, From, ToType);
1229    return ICS;
1230  }
1231
1232  // C++ [over.ics.user]p4:
1233  //   A conversion of an expression of class type to the same class
1234  //   type is given Exact Match rank, and a conversion of an
1235  //   expression of class type to a base class of that type is
1236  //   given Conversion rank, in spite of the fact that a copy/move
1237  //   constructor (i.e., a user-defined conversion function) is
1238  //   called for those cases.
1239  QualType FromType = From->getType();
1240  if (ToType->getAs<RecordType>() && FromType->getAs<RecordType>() &&
1241      (S.Context.hasSameUnqualifiedType(FromType, ToType) ||
1242       S.IsDerivedFrom(FromType, ToType))) {
1243    ICS.setStandard();
1244    ICS.Standard.setAsIdentityConversion();
1245    ICS.Standard.setFromType(FromType);
1246    ICS.Standard.setAllToTypes(ToType);
1247
1248    // We don't actually check at this point whether there is a valid
1249    // copy/move constructor, since overloading just assumes that it
1250    // exists. When we actually perform initialization, we'll find the
1251    // appropriate constructor to copy the returned object, if needed.
1252    ICS.Standard.CopyConstructor = 0;
1253
1254    // Determine whether this is considered a derived-to-base conversion.
1255    if (!S.Context.hasSameUnqualifiedType(FromType, ToType))
1256      ICS.Standard.Second = ICK_Derived_To_Base;
1257
1258    return ICS;
1259  }
1260
1261  return TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
1262                                  AllowExplicit, InOverloadResolution, CStyle,
1263                                  AllowObjCWritebackConversion);
1264}
1265
1266ImplicitConversionSequence
1267Sema::TryImplicitConversion(Expr *From, QualType ToType,
1268                            bool SuppressUserConversions,
1269                            bool AllowExplicit,
1270                            bool InOverloadResolution,
1271                            bool CStyle,
1272                            bool AllowObjCWritebackConversion) {
1273  return clang::TryImplicitConversion(*this, From, ToType,
1274                                      SuppressUserConversions, AllowExplicit,
1275                                      InOverloadResolution, CStyle,
1276                                      AllowObjCWritebackConversion);
1277}
1278
1279/// PerformImplicitConversion - Perform an implicit conversion of the
1280/// expression From to the type ToType. Returns the
1281/// converted expression. Flavor is the kind of conversion we're
1282/// performing, used in the error message. If @p AllowExplicit,
1283/// explicit user-defined conversions are permitted.
1284ExprResult
1285Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1286                                AssignmentAction Action, bool AllowExplicit) {
1287  ImplicitConversionSequence ICS;
1288  return PerformImplicitConversion(From, ToType, Action, AllowExplicit, ICS);
1289}
1290
1291ExprResult
1292Sema::PerformImplicitConversion(Expr *From, QualType ToType,
1293                                AssignmentAction Action, bool AllowExplicit,
1294                                ImplicitConversionSequence& ICS) {
1295  if (checkPlaceholderForOverload(*this, From))
1296    return ExprError();
1297
1298  // Objective-C ARC: Determine whether we will allow the writeback conversion.
1299  bool AllowObjCWritebackConversion
1300    = getLangOpts().ObjCAutoRefCount &&
1301      (Action == AA_Passing || Action == AA_Sending);
1302
1303  ICS = clang::TryImplicitConversion(*this, From, ToType,
1304                                     /*SuppressUserConversions=*/false,
1305                                     AllowExplicit,
1306                                     /*InOverloadResolution=*/false,
1307                                     /*CStyle=*/false,
1308                                     AllowObjCWritebackConversion);
1309  return PerformImplicitConversion(From, ToType, ICS, Action);
1310}
1311
1312/// \brief Determine whether the conversion from FromType to ToType is a valid
1313/// conversion that strips "noreturn" off the nested function type.
1314bool Sema::IsNoReturnConversion(QualType FromType, QualType ToType,
1315                                QualType &ResultTy) {
1316  if (Context.hasSameUnqualifiedType(FromType, ToType))
1317    return false;
1318
1319  // Permit the conversion F(t __attribute__((noreturn))) -> F(t)
1320  // where F adds one of the following at most once:
1321  //   - a pointer
1322  //   - a member pointer
1323  //   - a block pointer
1324  CanQualType CanTo = Context.getCanonicalType(ToType);
1325  CanQualType CanFrom = Context.getCanonicalType(FromType);
1326  Type::TypeClass TyClass = CanTo->getTypeClass();
1327  if (TyClass != CanFrom->getTypeClass()) return false;
1328  if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto) {
1329    if (TyClass == Type::Pointer) {
1330      CanTo = CanTo.getAs<PointerType>()->getPointeeType();
1331      CanFrom = CanFrom.getAs<PointerType>()->getPointeeType();
1332    } else if (TyClass == Type::BlockPointer) {
1333      CanTo = CanTo.getAs<BlockPointerType>()->getPointeeType();
1334      CanFrom = CanFrom.getAs<BlockPointerType>()->getPointeeType();
1335    } else if (TyClass == Type::MemberPointer) {
1336      CanTo = CanTo.getAs<MemberPointerType>()->getPointeeType();
1337      CanFrom = CanFrom.getAs<MemberPointerType>()->getPointeeType();
1338    } else {
1339      return false;
1340    }
1341
1342    TyClass = CanTo->getTypeClass();
1343    if (TyClass != CanFrom->getTypeClass()) return false;
1344    if (TyClass != Type::FunctionProto && TyClass != Type::FunctionNoProto)
1345      return false;
1346  }
1347
1348  const FunctionType *FromFn = cast<FunctionType>(CanFrom);
1349  FunctionType::ExtInfo EInfo = FromFn->getExtInfo();
1350  if (!EInfo.getNoReturn()) return false;
1351
1352  FromFn = Context.adjustFunctionType(FromFn, EInfo.withNoReturn(false));
1353  assert(QualType(FromFn, 0).isCanonical());
1354  if (QualType(FromFn, 0) != CanTo) return false;
1355
1356  ResultTy = ToType;
1357  return true;
1358}
1359
1360/// \brief Determine whether the conversion from FromType to ToType is a valid
1361/// vector conversion.
1362///
1363/// \param ICK Will be set to the vector conversion kind, if this is a vector
1364/// conversion.
1365static bool IsVectorConversion(ASTContext &Context, QualType FromType,
1366                               QualType ToType, ImplicitConversionKind &ICK) {
1367  // We need at least one of these types to be a vector type to have a vector
1368  // conversion.
1369  if (!ToType->isVectorType() && !FromType->isVectorType())
1370    return false;
1371
1372  // Identical types require no conversions.
1373  if (Context.hasSameUnqualifiedType(FromType, ToType))
1374    return false;
1375
1376  // There are no conversions between extended vector types, only identity.
1377  if (ToType->isExtVectorType()) {
1378    // There are no conversions between extended vector types other than the
1379    // identity conversion.
1380    if (FromType->isExtVectorType())
1381      return false;
1382
1383    // Vector splat from any arithmetic type to a vector.
1384    if (FromType->isArithmeticType()) {
1385      ICK = ICK_Vector_Splat;
1386      return true;
1387    }
1388  }
1389
1390  // We can perform the conversion between vector types in the following cases:
1391  // 1)vector types are equivalent AltiVec and GCC vector types
1392  // 2)lax vector conversions are permitted and the vector types are of the
1393  //   same size
1394  if (ToType->isVectorType() && FromType->isVectorType()) {
1395    if (Context.areCompatibleVectorTypes(FromType, ToType) ||
1396        (Context.getLangOpts().LaxVectorConversions &&
1397         (Context.getTypeSize(FromType) == Context.getTypeSize(ToType)))) {
1398      ICK = ICK_Vector_Conversion;
1399      return true;
1400    }
1401  }
1402
1403  return false;
1404}
1405
1406static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
1407                                bool InOverloadResolution,
1408                                StandardConversionSequence &SCS,
1409                                bool CStyle);
1410
1411/// IsStandardConversion - Determines whether there is a standard
1412/// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
1413/// expression From to the type ToType. Standard conversion sequences
1414/// only consider non-class types; for conversions that involve class
1415/// types, use TryImplicitConversion. If a conversion exists, SCS will
1416/// contain the standard conversion sequence required to perform this
1417/// conversion and this routine will return true. Otherwise, this
1418/// routine will return false and the value of SCS is unspecified.
1419static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType,
1420                                 bool InOverloadResolution,
1421                                 StandardConversionSequence &SCS,
1422                                 bool CStyle,
1423                                 bool AllowObjCWritebackConversion) {
1424  QualType FromType = From->getType();
1425
1426  // Standard conversions (C++ [conv])
1427  SCS.setAsIdentityConversion();
1428  SCS.DeprecatedStringLiteralToCharPtr = false;
1429  SCS.IncompatibleObjC = false;
1430  SCS.setFromType(FromType);
1431  SCS.CopyConstructor = 0;
1432
1433  // There are no standard conversions for class types in C++, so
1434  // abort early. When overloading in C, however, we do permit
1435  if (FromType->isRecordType() || ToType->isRecordType()) {
1436    if (S.getLangOpts().CPlusPlus)
1437      return false;
1438
1439    // When we're overloading in C, we allow, as standard conversions,
1440  }
1441
1442  // The first conversion can be an lvalue-to-rvalue conversion,
1443  // array-to-pointer conversion, or function-to-pointer conversion
1444  // (C++ 4p1).
1445
1446  if (FromType == S.Context.OverloadTy) {
1447    DeclAccessPair AccessPair;
1448    if (FunctionDecl *Fn
1449          = S.ResolveAddressOfOverloadedFunction(From, ToType, false,
1450                                                 AccessPair)) {
1451      // We were able to resolve the address of the overloaded function,
1452      // so we can convert to the type of that function.
1453      FromType = Fn->getType();
1454
1455      // we can sometimes resolve &foo<int> regardless of ToType, so check
1456      // if the type matches (identity) or we are converting to bool
1457      if (!S.Context.hasSameUnqualifiedType(
1458                      S.ExtractUnqualifiedFunctionType(ToType), FromType)) {
1459        QualType resultTy;
1460        // if the function type matches except for [[noreturn]], it's ok
1461        if (!S.IsNoReturnConversion(FromType,
1462              S.ExtractUnqualifiedFunctionType(ToType), resultTy))
1463          // otherwise, only a boolean conversion is standard
1464          if (!ToType->isBooleanType())
1465            return false;
1466      }
1467
1468      // Check if the "from" expression is taking the address of an overloaded
1469      // function and recompute the FromType accordingly. Take advantage of the
1470      // fact that non-static member functions *must* have such an address-of
1471      // expression.
1472      CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn);
1473      if (Method && !Method->isStatic()) {
1474        assert(isa<UnaryOperator>(From->IgnoreParens()) &&
1475               "Non-unary operator on non-static member address");
1476        assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode()
1477               == UO_AddrOf &&
1478               "Non-address-of operator on non-static member address");
1479        const Type *ClassType
1480          = S.Context.getTypeDeclType(Method->getParent()).getTypePtr();
1481        FromType = S.Context.getMemberPointerType(FromType, ClassType);
1482      } else if (isa<UnaryOperator>(From->IgnoreParens())) {
1483        assert(cast<UnaryOperator>(From->IgnoreParens())->getOpcode() ==
1484               UO_AddrOf &&
1485               "Non-address-of operator for overloaded function expression");
1486        FromType = S.Context.getPointerType(FromType);
1487      }
1488
1489      // Check that we've computed the proper type after overload resolution.
1490      assert(S.Context.hasSameType(
1491        FromType,
1492        S.FixOverloadedFunctionReference(From, AccessPair, Fn)->getType()));
1493    } else {
1494      return false;
1495    }
1496  }
1497  // Lvalue-to-rvalue conversion (C++11 4.1):
1498  //   A glvalue (3.10) of a non-function, non-array type T can
1499  //   be converted to a prvalue.
1500  bool argIsLValue = From->isGLValue();
1501  if (argIsLValue &&
1502      !FromType->isFunctionType() && !FromType->isArrayType() &&
1503      S.Context.getCanonicalType(FromType) != S.Context.OverloadTy) {
1504    SCS.First = ICK_Lvalue_To_Rvalue;
1505
1506    // C11 6.3.2.1p2:
1507    //   ... if the lvalue has atomic type, the value has the non-atomic version
1508    //   of the type of the lvalue ...
1509    if (const AtomicType *Atomic = FromType->getAs<AtomicType>())
1510      FromType = Atomic->getValueType();
1511
1512    // If T is a non-class type, the type of the rvalue is the
1513    // cv-unqualified version of T. Otherwise, the type of the rvalue
1514    // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
1515    // just strip the qualifiers because they don't matter.
1516    FromType = FromType.getUnqualifiedType();
1517  } else if (FromType->isArrayType()) {
1518    // Array-to-pointer conversion (C++ 4.2)
1519    SCS.First = ICK_Array_To_Pointer;
1520
1521    // An lvalue or rvalue of type "array of N T" or "array of unknown
1522    // bound of T" can be converted to an rvalue of type "pointer to
1523    // T" (C++ 4.2p1).
1524    FromType = S.Context.getArrayDecayedType(FromType);
1525
1526    if (S.IsStringLiteralToNonConstPointerConversion(From, ToType)) {
1527      // This conversion is deprecated. (C++ D.4).
1528      SCS.DeprecatedStringLiteralToCharPtr = true;
1529
1530      // For the purpose of ranking in overload resolution
1531      // (13.3.3.1.1), this conversion is considered an
1532      // array-to-pointer conversion followed by a qualification
1533      // conversion (4.4). (C++ 4.2p2)
1534      SCS.Second = ICK_Identity;
1535      SCS.Third = ICK_Qualification;
1536      SCS.QualificationIncludesObjCLifetime = false;
1537      SCS.setAllToTypes(FromType);
1538      return true;
1539    }
1540  } else if (FromType->isFunctionType() && argIsLValue) {
1541    // Function-to-pointer conversion (C++ 4.3).
1542    SCS.First = ICK_Function_To_Pointer;
1543
1544    // An lvalue of function type T can be converted to an rvalue of
1545    // type "pointer to T." The result is a pointer to the
1546    // function. (C++ 4.3p1).
1547    FromType = S.Context.getPointerType(FromType);
1548  } else {
1549    // We don't require any conversions for the first step.
1550    SCS.First = ICK_Identity;
1551  }
1552  SCS.setToType(0, FromType);
1553
1554  // The second conversion can be an integral promotion, floating
1555  // point promotion, integral conversion, floating point conversion,
1556  // floating-integral conversion, pointer conversion,
1557  // pointer-to-member conversion, or boolean conversion (C++ 4p1).
1558  // For overloading in C, this can also be a "compatible-type"
1559  // conversion.
1560  bool IncompatibleObjC = false;
1561  ImplicitConversionKind SecondICK = ICK_Identity;
1562  if (S.Context.hasSameUnqualifiedType(FromType, ToType)) {
1563    // The unqualified versions of the types are the same: there's no
1564    // conversion to do.
1565    SCS.Second = ICK_Identity;
1566  } else if (S.IsIntegralPromotion(From, FromType, ToType)) {
1567    // Integral promotion (C++ 4.5).
1568    SCS.Second = ICK_Integral_Promotion;
1569    FromType = ToType.getUnqualifiedType();
1570  } else if (S.IsFloatingPointPromotion(FromType, ToType)) {
1571    // Floating point promotion (C++ 4.6).
1572    SCS.Second = ICK_Floating_Promotion;
1573    FromType = ToType.getUnqualifiedType();
1574  } else if (S.IsComplexPromotion(FromType, ToType)) {
1575    // Complex promotion (Clang extension)
1576    SCS.Second = ICK_Complex_Promotion;
1577    FromType = ToType.getUnqualifiedType();
1578  } else if (ToType->isBooleanType() &&
1579             (FromType->isArithmeticType() ||
1580              FromType->isAnyPointerType() ||
1581              FromType->isBlockPointerType() ||
1582              FromType->isMemberPointerType() ||
1583              FromType->isNullPtrType())) {
1584    // Boolean conversions (C++ 4.12).
1585    SCS.Second = ICK_Boolean_Conversion;
1586    FromType = S.Context.BoolTy;
1587  } else if (FromType->isIntegralOrUnscopedEnumerationType() &&
1588             ToType->isIntegralType(S.Context)) {
1589    // Integral conversions (C++ 4.7).
1590    SCS.Second = ICK_Integral_Conversion;
1591    FromType = ToType.getUnqualifiedType();
1592  } else if (FromType->isAnyComplexType() && ToType->isComplexType()) {
1593    // Complex conversions (C99 6.3.1.6)
1594    SCS.Second = ICK_Complex_Conversion;
1595    FromType = ToType.getUnqualifiedType();
1596  } else if ((FromType->isAnyComplexType() && ToType->isArithmeticType()) ||
1597             (ToType->isAnyComplexType() && FromType->isArithmeticType())) {
1598    // Complex-real conversions (C99 6.3.1.7)
1599    SCS.Second = ICK_Complex_Real;
1600    FromType = ToType.getUnqualifiedType();
1601  } else if (FromType->isRealFloatingType() && ToType->isRealFloatingType()) {
1602    // Floating point conversions (C++ 4.8).
1603    SCS.Second = ICK_Floating_Conversion;
1604    FromType = ToType.getUnqualifiedType();
1605  } else if ((FromType->isRealFloatingType() &&
1606              ToType->isIntegralType(S.Context)) ||
1607             (FromType->isIntegralOrUnscopedEnumerationType() &&
1608              ToType->isRealFloatingType())) {
1609    // Floating-integral conversions (C++ 4.9).
1610    SCS.Second = ICK_Floating_Integral;
1611    FromType = ToType.getUnqualifiedType();
1612  } else if (S.IsBlockPointerConversion(FromType, ToType, FromType)) {
1613    SCS.Second = ICK_Block_Pointer_Conversion;
1614  } else if (AllowObjCWritebackConversion &&
1615             S.isObjCWritebackConversion(FromType, ToType, FromType)) {
1616    SCS.Second = ICK_Writeback_Conversion;
1617  } else if (S.IsPointerConversion(From, FromType, ToType, InOverloadResolution,
1618                                   FromType, IncompatibleObjC)) {
1619    // Pointer conversions (C++ 4.10).
1620    SCS.Second = ICK_Pointer_Conversion;
1621    SCS.IncompatibleObjC = IncompatibleObjC;
1622    FromType = FromType.getUnqualifiedType();
1623  } else if (S.IsMemberPointerConversion(From, FromType, ToType,
1624                                         InOverloadResolution, FromType)) {
1625    // Pointer to member conversions (4.11).
1626    SCS.Second = ICK_Pointer_Member;
1627  } else if (IsVectorConversion(S.Context, FromType, ToType, SecondICK)) {
1628    SCS.Second = SecondICK;
1629    FromType = ToType.getUnqualifiedType();
1630  } else if (!S.getLangOpts().CPlusPlus &&
1631             S.Context.typesAreCompatible(ToType, FromType)) {
1632    // Compatible conversions (Clang extension for C function overloading)
1633    SCS.Second = ICK_Compatible_Conversion;
1634    FromType = ToType.getUnqualifiedType();
1635  } else if (S.IsNoReturnConversion(FromType, ToType, FromType)) {
1636    // Treat a conversion that strips "noreturn" as an identity conversion.
1637    SCS.Second = ICK_NoReturn_Adjustment;
1638  } else if (IsTransparentUnionStandardConversion(S, From, ToType,
1639                                             InOverloadResolution,
1640                                             SCS, CStyle)) {
1641    SCS.Second = ICK_TransparentUnionConversion;
1642    FromType = ToType;
1643  } else if (tryAtomicConversion(S, From, ToType, InOverloadResolution, SCS,
1644                                 CStyle)) {
1645    // tryAtomicConversion has updated the standard conversion sequence
1646    // appropriately.
1647    return true;
1648  } else if (ToType->isEventT() &&
1649             From->isIntegerConstantExpr(S.getASTContext()) &&
1650             (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) {
1651    SCS.Second = ICK_Zero_Event_Conversion;
1652    FromType = ToType;
1653  } else {
1654    // No second conversion required.
1655    SCS.Second = ICK_Identity;
1656  }
1657  SCS.setToType(1, FromType);
1658
1659  QualType CanonFrom;
1660  QualType CanonTo;
1661  // The third conversion can be a qualification conversion (C++ 4p1).
1662  bool ObjCLifetimeConversion;
1663  if (S.IsQualificationConversion(FromType, ToType, CStyle,
1664                                  ObjCLifetimeConversion)) {
1665    SCS.Third = ICK_Qualification;
1666    SCS.QualificationIncludesObjCLifetime = ObjCLifetimeConversion;
1667    FromType = ToType;
1668    CanonFrom = S.Context.getCanonicalType(FromType);
1669    CanonTo = S.Context.getCanonicalType(ToType);
1670  } else {
1671    // No conversion required
1672    SCS.Third = ICK_Identity;
1673
1674    // C++ [over.best.ics]p6:
1675    //   [...] Any difference in top-level cv-qualification is
1676    //   subsumed by the initialization itself and does not constitute
1677    //   a conversion. [...]
1678    CanonFrom = S.Context.getCanonicalType(FromType);
1679    CanonTo = S.Context.getCanonicalType(ToType);
1680    if (CanonFrom.getLocalUnqualifiedType()
1681                                       == CanonTo.getLocalUnqualifiedType() &&
1682        CanonFrom.getLocalQualifiers() != CanonTo.getLocalQualifiers()) {
1683      FromType = ToType;
1684      CanonFrom = CanonTo;
1685    }
1686  }
1687  SCS.setToType(2, FromType);
1688
1689  // If we have not converted the argument type to the parameter type,
1690  // this is a bad conversion sequence.
1691  if (CanonFrom != CanonTo)
1692    return false;
1693
1694  return true;
1695}
1696
1697static bool
1698IsTransparentUnionStandardConversion(Sema &S, Expr* From,
1699                                     QualType &ToType,
1700                                     bool InOverloadResolution,
1701                                     StandardConversionSequence &SCS,
1702                                     bool CStyle) {
1703
1704  const RecordType *UT = ToType->getAsUnionType();
1705  if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>())
1706    return false;
1707  // The field to initialize within the transparent union.
1708  RecordDecl *UD = UT->getDecl();
1709  // It's compatible if the expression matches any of the fields.
1710  for (RecordDecl::field_iterator it = UD->field_begin(),
1711       itend = UD->field_end();
1712       it != itend; ++it) {
1713    if (IsStandardConversion(S, From, it->getType(), InOverloadResolution, SCS,
1714                             CStyle, /*ObjCWritebackConversion=*/false)) {
1715      ToType = it->getType();
1716      return true;
1717    }
1718  }
1719  return false;
1720}
1721
1722/// IsIntegralPromotion - Determines whether the conversion from the
1723/// expression From (whose potentially-adjusted type is FromType) to
1724/// ToType is an integral promotion (C++ 4.5). If so, returns true and
1725/// sets PromotedType to the promoted type.
1726bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
1727  const BuiltinType *To = ToType->getAs<BuiltinType>();
1728  // All integers are built-in.
1729  if (!To) {
1730    return false;
1731  }
1732
1733  // An rvalue of type char, signed char, unsigned char, short int, or
1734  // unsigned short int can be converted to an rvalue of type int if
1735  // int can represent all the values of the source type; otherwise,
1736  // the source rvalue can be converted to an rvalue of type unsigned
1737  // int (C++ 4.5p1).
1738  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
1739      !FromType->isEnumeralType()) {
1740    if (// We can promote any signed, promotable integer type to an int
1741        (FromType->isSignedIntegerType() ||
1742         // We can promote any unsigned integer type whose size is
1743         // less than int to an int.
1744         (!FromType->isSignedIntegerType() &&
1745          Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
1746      return To->getKind() == BuiltinType::Int;
1747    }
1748
1749    return To->getKind() == BuiltinType::UInt;
1750  }
1751
1752  // C++11 [conv.prom]p3:
1753  //   A prvalue of an unscoped enumeration type whose underlying type is not
1754  //   fixed (7.2) can be converted to an rvalue a prvalue of the first of the
1755  //   following types that can represent all the values of the enumeration
1756  //   (i.e., the values in the range bmin to bmax as described in 7.2): int,
1757  //   unsigned int, long int, unsigned long int, long long int, or unsigned
1758  //   long long int. If none of the types in that list can represent all the
1759  //   values of the enumeration, an rvalue a prvalue of an unscoped enumeration
1760  //   type can be converted to an rvalue a prvalue of the extended integer type
1761  //   with lowest integer conversion rank (4.13) greater than the rank of long
1762  //   long in which all the values of the enumeration can be represented. If
1763  //   there are two such extended types, the signed one is chosen.
1764  // C++11 [conv.prom]p4:
1765  //   A prvalue of an unscoped enumeration type whose underlying type is fixed
1766  //   can be converted to a prvalue of its underlying type. Moreover, if
1767  //   integral promotion can be applied to its underlying type, a prvalue of an
1768  //   unscoped enumeration type whose underlying type is fixed can also be
1769  //   converted to a prvalue of the promoted underlying type.
1770  if (const EnumType *FromEnumType = FromType->getAs<EnumType>()) {
1771    // C++0x 7.2p9: Note that this implicit enum to int conversion is not
1772    // provided for a scoped enumeration.
1773    if (FromEnumType->getDecl()->isScoped())
1774      return false;
1775
1776    // We can perform an integral promotion to the underlying type of the enum,
1777    // even if that's not the promoted type.
1778    if (FromEnumType->getDecl()->isFixed()) {
1779      QualType Underlying = FromEnumType->getDecl()->getIntegerType();
1780      return Context.hasSameUnqualifiedType(Underlying, ToType) ||
1781             IsIntegralPromotion(From, Underlying, ToType);
1782    }
1783
1784    // We have already pre-calculated the promotion type, so this is trivial.
1785    if (ToType->isIntegerType() &&
1786        !RequireCompleteType(From->getLocStart(), FromType, 0))
1787      return Context.hasSameUnqualifiedType(ToType,
1788                                FromEnumType->getDecl()->getPromotionType());
1789  }
1790
1791  // C++0x [conv.prom]p2:
1792  //   A prvalue of type char16_t, char32_t, or wchar_t (3.9.1) can be converted
1793  //   to an rvalue a prvalue of the first of the following types that can
1794  //   represent all the values of its underlying type: int, unsigned int,
1795  //   long int, unsigned long int, long long int, or unsigned long long int.
1796  //   If none of the types in that list can represent all the values of its
1797  //   underlying type, an rvalue a prvalue of type char16_t, char32_t,
1798  //   or wchar_t can be converted to an rvalue a prvalue of its underlying
1799  //   type.
1800  if (FromType->isAnyCharacterType() && !FromType->isCharType() &&
1801      ToType->isIntegerType()) {
1802    // Determine whether the type we're converting from is signed or
1803    // unsigned.
1804    bool FromIsSigned = FromType->isSignedIntegerType();
1805    uint64_t FromSize = Context.getTypeSize(FromType);
1806
1807    // The types we'll try to promote to, in the appropriate
1808    // order. Try each of these types.
1809    QualType PromoteTypes[6] = {
1810      Context.IntTy, Context.UnsignedIntTy,
1811      Context.LongTy, Context.UnsignedLongTy ,
1812      Context.LongLongTy, Context.UnsignedLongLongTy
1813    };
1814    for (int Idx = 0; Idx < 6; ++Idx) {
1815      uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
1816      if (FromSize < ToSize ||
1817          (FromSize == ToSize &&
1818           FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
1819        // We found the type that we can promote to. If this is the
1820        // type we wanted, we have a promotion. Otherwise, no
1821        // promotion.
1822        return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
1823      }
1824    }
1825  }
1826
1827  // An rvalue for an integral bit-field (9.6) can be converted to an
1828  // rvalue of type int if int can represent all the values of the
1829  // bit-field; otherwise, it can be converted to unsigned int if
1830  // unsigned int can represent all the values of the bit-field. If
1831  // the bit-field is larger yet, no integral promotion applies to
1832  // it. If the bit-field has an enumerated type, it is treated as any
1833  // other value of that type for promotion purposes (C++ 4.5p3).
1834  // FIXME: We should delay checking of bit-fields until we actually perform the
1835  // conversion.
1836  using llvm::APSInt;
1837  if (From)
1838    if (FieldDecl *MemberDecl = From->getBitField()) {
1839      APSInt BitWidth;
1840      if (FromType->isIntegralType(Context) &&
1841          MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
1842        APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
1843        ToSize = Context.getTypeSize(ToType);
1844
1845        // Are we promoting to an int from a bitfield that fits in an int?
1846        if (BitWidth < ToSize ||
1847            (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
1848          return To->getKind() == BuiltinType::Int;
1849        }
1850
1851        // Are we promoting to an unsigned int from an unsigned bitfield
1852        // that fits into an unsigned int?
1853        if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
1854          return To->getKind() == BuiltinType::UInt;
1855        }
1856
1857        return false;
1858      }
1859    }
1860
1861  // An rvalue of type bool can be converted to an rvalue of type int,
1862  // with false becoming zero and true becoming one (C++ 4.5p4).
1863  if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
1864    return true;
1865  }
1866
1867  return false;
1868}
1869
1870/// IsFloatingPointPromotion - Determines whether the conversion from
1871/// FromType to ToType is a floating point promotion (C++ 4.6). If so,
1872/// returns true and sets PromotedType to the promoted type.
1873bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
1874  if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
1875    if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
1876      /// An rvalue of type float can be converted to an rvalue of type
1877      /// double. (C++ 4.6p1).
1878      if (FromBuiltin->getKind() == BuiltinType::Float &&
1879          ToBuiltin->getKind() == BuiltinType::Double)
1880        return true;
1881
1882      // C99 6.3.1.5p1:
1883      //   When a float is promoted to double or long double, or a
1884      //   double is promoted to long double [...].
1885      if (!getLangOpts().CPlusPlus &&
1886          (FromBuiltin->getKind() == BuiltinType::Float ||
1887           FromBuiltin->getKind() == BuiltinType::Double) &&
1888          (ToBuiltin->getKind() == BuiltinType::LongDouble))
1889        return true;
1890
1891      // Half can be promoted to float.
1892      if (!getLangOpts().NativeHalfType &&
1893           FromBuiltin->getKind() == BuiltinType::Half &&
1894          ToBuiltin->getKind() == BuiltinType::Float)
1895        return true;
1896    }
1897
1898  return false;
1899}
1900
1901/// \brief Determine if a conversion is a complex promotion.
1902///
1903/// A complex promotion is defined as a complex -> complex conversion
1904/// where the conversion between the underlying real types is a
1905/// floating-point or integral promotion.
1906bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
1907  const ComplexType *FromComplex = FromType->getAs<ComplexType>();
1908  if (!FromComplex)
1909    return false;
1910
1911  const ComplexType *ToComplex = ToType->getAs<ComplexType>();
1912  if (!ToComplex)
1913    return false;
1914
1915  return IsFloatingPointPromotion(FromComplex->getElementType(),
1916                                  ToComplex->getElementType()) ||
1917    IsIntegralPromotion(0, FromComplex->getElementType(),
1918                        ToComplex->getElementType());
1919}
1920
1921/// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
1922/// the pointer type FromPtr to a pointer to type ToPointee, with the
1923/// same type qualifiers as FromPtr has on its pointee type. ToType,
1924/// if non-empty, will be a pointer to ToType that may or may not have
1925/// the right set of qualifiers on its pointee.
1926///
1927static QualType
1928BuildSimilarlyQualifiedPointerType(const Type *FromPtr,
1929                                   QualType ToPointee, QualType ToType,
1930                                   ASTContext &Context,
1931                                   bool StripObjCLifetime = false) {
1932  assert((FromPtr->getTypeClass() == Type::Pointer ||
1933          FromPtr->getTypeClass() == Type::ObjCObjectPointer) &&
1934         "Invalid similarly-qualified pointer type");
1935
1936  /// Conversions to 'id' subsume cv-qualifier conversions.
1937  if (ToType->isObjCIdType() || ToType->isObjCQualifiedIdType())
1938    return ToType.getUnqualifiedType();
1939
1940  QualType CanonFromPointee
1941    = Context.getCanonicalType(FromPtr->getPointeeType());
1942  QualType CanonToPointee = Context.getCanonicalType(ToPointee);
1943  Qualifiers Quals = CanonFromPointee.getQualifiers();
1944
1945  if (StripObjCLifetime)
1946    Quals.removeObjCLifetime();
1947
1948  // Exact qualifier match -> return the pointer type we're converting to.
1949  if (CanonToPointee.getLocalQualifiers() == Quals) {
1950    // ToType is exactly what we need. Return it.
1951    if (!ToType.isNull())
1952      return ToType.getUnqualifiedType();
1953
1954    // Build a pointer to ToPointee. It has the right qualifiers
1955    // already.
1956    if (isa<ObjCObjectPointerType>(ToType))
1957      return Context.getObjCObjectPointerType(ToPointee);
1958    return Context.getPointerType(ToPointee);
1959  }
1960
1961  // Just build a canonical type that has the right qualifiers.
1962  QualType QualifiedCanonToPointee
1963    = Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(), Quals);
1964
1965  if (isa<ObjCObjectPointerType>(ToType))
1966    return Context.getObjCObjectPointerType(QualifiedCanonToPointee);
1967  return Context.getPointerType(QualifiedCanonToPointee);
1968}
1969
1970static bool isNullPointerConstantForConversion(Expr *Expr,
1971                                               bool InOverloadResolution,
1972                                               ASTContext &Context) {
1973  // Handle value-dependent integral null pointer constants correctly.
1974  // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
1975  if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
1976      Expr->getType()->isIntegerType() && !Expr->getType()->isEnumeralType())
1977    return !InOverloadResolution;
1978
1979  return Expr->isNullPointerConstant(Context,
1980                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1981                                        : Expr::NPC_ValueDependentIsNull);
1982}
1983
1984/// IsPointerConversion - Determines whether the conversion of the
1985/// expression From, which has the (possibly adjusted) type FromType,
1986/// can be converted to the type ToType via a pointer conversion (C++
1987/// 4.10). If so, returns true and places the converted type (that
1988/// might differ from ToType in its cv-qualifiers at some level) into
1989/// ConvertedType.
1990///
1991/// This routine also supports conversions to and from block pointers
1992/// and conversions with Objective-C's 'id', 'id<protocols...>', and
1993/// pointers to interfaces. FIXME: Once we've determined the
1994/// appropriate overloading rules for Objective-C, we may want to
1995/// split the Objective-C checks into a different routine; however,
1996/// GCC seems to consider all of these conversions to be pointer
1997/// conversions, so for now they live here. IncompatibleObjC will be
1998/// set if the conversion is an allowed Objective-C conversion that
1999/// should result in a warning.
2000bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
2001                               bool InOverloadResolution,
2002                               QualType& ConvertedType,
2003                               bool &IncompatibleObjC) {
2004  IncompatibleObjC = false;
2005  if (isObjCPointerConversion(FromType, ToType, ConvertedType,
2006                              IncompatibleObjC))
2007    return true;
2008
2009  // Conversion from a null pointer constant to any Objective-C pointer type.
2010  if (ToType->isObjCObjectPointerType() &&
2011      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2012    ConvertedType = ToType;
2013    return true;
2014  }
2015
2016  // Blocks: Block pointers can be converted to void*.
2017  if (FromType->isBlockPointerType() && ToType->isPointerType() &&
2018      ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
2019    ConvertedType = ToType;
2020    return true;
2021  }
2022  // Blocks: A null pointer constant can be converted to a block
2023  // pointer type.
2024  if (ToType->isBlockPointerType() &&
2025      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2026    ConvertedType = ToType;
2027    return true;
2028  }
2029
2030  // If the left-hand-side is nullptr_t, the right side can be a null
2031  // pointer constant.
2032  if (ToType->isNullPtrType() &&
2033      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2034    ConvertedType = ToType;
2035    return true;
2036  }
2037
2038  const PointerType* ToTypePtr = ToType->getAs<PointerType>();
2039  if (!ToTypePtr)
2040    return false;
2041
2042  // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
2043  if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
2044    ConvertedType = ToType;
2045    return true;
2046  }
2047
2048  // Beyond this point, both types need to be pointers
2049  // , including objective-c pointers.
2050  QualType ToPointeeType = ToTypePtr->getPointeeType();
2051  if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType() &&
2052      !getLangOpts().ObjCAutoRefCount) {
2053    ConvertedType = BuildSimilarlyQualifiedPointerType(
2054                                      FromType->getAs<ObjCObjectPointerType>(),
2055                                                       ToPointeeType,
2056                                                       ToType, Context);
2057    return true;
2058  }
2059  const PointerType *FromTypePtr = FromType->getAs<PointerType>();
2060  if (!FromTypePtr)
2061    return false;
2062
2063  QualType FromPointeeType = FromTypePtr->getPointeeType();
2064
2065  // If the unqualified pointee types are the same, this can't be a
2066  // pointer conversion, so don't do all of the work below.
2067  if (Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType))
2068    return false;
2069
2070  // An rvalue of type "pointer to cv T," where T is an object type,
2071  // can be converted to an rvalue of type "pointer to cv void" (C++
2072  // 4.10p2).
2073  if (FromPointeeType->isIncompleteOrObjectType() &&
2074      ToPointeeType->isVoidType()) {
2075    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2076                                                       ToPointeeType,
2077                                                       ToType, Context,
2078                                                   /*StripObjCLifetime=*/true);
2079    return true;
2080  }
2081
2082  // MSVC allows implicit function to void* type conversion.
2083  if (getLangOpts().MicrosoftExt && FromPointeeType->isFunctionType() &&
2084      ToPointeeType->isVoidType()) {
2085    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2086                                                       ToPointeeType,
2087                                                       ToType, Context);
2088    return true;
2089  }
2090
2091  // When we're overloading in C, we allow a special kind of pointer
2092  // conversion for compatible-but-not-identical pointee types.
2093  if (!getLangOpts().CPlusPlus &&
2094      Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
2095    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2096                                                       ToPointeeType,
2097                                                       ToType, Context);
2098    return true;
2099  }
2100
2101  // C++ [conv.ptr]p3:
2102  //
2103  //   An rvalue of type "pointer to cv D," where D is a class type,
2104  //   can be converted to an rvalue of type "pointer to cv B," where
2105  //   B is a base class (clause 10) of D. If B is an inaccessible
2106  //   (clause 11) or ambiguous (10.2) base class of D, a program that
2107  //   necessitates this conversion is ill-formed. The result of the
2108  //   conversion is a pointer to the base class sub-object of the
2109  //   derived class object. The null pointer value is converted to
2110  //   the null pointer value of the destination type.
2111  //
2112  // Note that we do not check for ambiguity or inaccessibility
2113  // here. That is handled by CheckPointerConversion.
2114  if (getLangOpts().CPlusPlus &&
2115      FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2116      !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType) &&
2117      !RequireCompleteType(From->getLocStart(), FromPointeeType, 0) &&
2118      IsDerivedFrom(FromPointeeType, ToPointeeType)) {
2119    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2120                                                       ToPointeeType,
2121                                                       ToType, Context);
2122    return true;
2123  }
2124
2125  if (FromPointeeType->isVectorType() && ToPointeeType->isVectorType() &&
2126      Context.areCompatibleVectorTypes(FromPointeeType, ToPointeeType)) {
2127    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
2128                                                       ToPointeeType,
2129                                                       ToType, Context);
2130    return true;
2131  }
2132
2133  return false;
2134}
2135
2136/// \brief Adopt the given qualifiers for the given type.
2137static QualType AdoptQualifiers(ASTContext &Context, QualType T, Qualifiers Qs){
2138  Qualifiers TQs = T.getQualifiers();
2139
2140  // Check whether qualifiers already match.
2141  if (TQs == Qs)
2142    return T;
2143
2144  if (Qs.compatiblyIncludes(TQs))
2145    return Context.getQualifiedType(T, Qs);
2146
2147  return Context.getQualifiedType(T.getUnqualifiedType(), Qs);
2148}
2149
2150/// isObjCPointerConversion - Determines whether this is an
2151/// Objective-C pointer conversion. Subroutine of IsPointerConversion,
2152/// with the same arguments and return values.
2153bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
2154                                   QualType& ConvertedType,
2155                                   bool &IncompatibleObjC) {
2156  if (!getLangOpts().ObjC1)
2157    return false;
2158
2159  // The set of qualifiers on the type we're converting from.
2160  Qualifiers FromQualifiers = FromType.getQualifiers();
2161
2162  // First, we handle all conversions on ObjC object pointer types.
2163  const ObjCObjectPointerType* ToObjCPtr =
2164    ToType->getAs<ObjCObjectPointerType>();
2165  const ObjCObjectPointerType *FromObjCPtr =
2166    FromType->getAs<ObjCObjectPointerType>();
2167
2168  if (ToObjCPtr && FromObjCPtr) {
2169    // If the pointee types are the same (ignoring qualifications),
2170    // then this is not a pointer conversion.
2171    if (Context.hasSameUnqualifiedType(ToObjCPtr->getPointeeType(),
2172                                       FromObjCPtr->getPointeeType()))
2173      return false;
2174
2175    // Check for compatible
2176    // Objective C++: We're able to convert between "id" or "Class" and a
2177    // pointer to any interface (in both directions).
2178    if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
2179      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2180      return true;
2181    }
2182    // Conversions with Objective-C's id<...>.
2183    if ((FromObjCPtr->isObjCQualifiedIdType() ||
2184         ToObjCPtr->isObjCQualifiedIdType()) &&
2185        Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
2186                                                  /*compare=*/false)) {
2187      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2188      return true;
2189    }
2190    // Objective C++: We're able to convert from a pointer to an
2191    // interface to a pointer to a different interface.
2192    if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
2193      const ObjCInterfaceType* LHS = ToObjCPtr->getInterfaceType();
2194      const ObjCInterfaceType* RHS = FromObjCPtr->getInterfaceType();
2195      if (getLangOpts().CPlusPlus && LHS && RHS &&
2196          !ToObjCPtr->getPointeeType().isAtLeastAsQualifiedAs(
2197                                                FromObjCPtr->getPointeeType()))
2198        return false;
2199      ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2200                                                   ToObjCPtr->getPointeeType(),
2201                                                         ToType, Context);
2202      ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2203      return true;
2204    }
2205
2206    if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
2207      // Okay: this is some kind of implicit downcast of Objective-C
2208      // interfaces, which is permitted. However, we're going to
2209      // complain about it.
2210      IncompatibleObjC = true;
2211      ConvertedType = BuildSimilarlyQualifiedPointerType(FromObjCPtr,
2212                                                   ToObjCPtr->getPointeeType(),
2213                                                         ToType, Context);
2214      ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2215      return true;
2216    }
2217  }
2218  // Beyond this point, both types need to be C pointers or block pointers.
2219  QualType ToPointeeType;
2220  if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
2221    ToPointeeType = ToCPtr->getPointeeType();
2222  else if (const BlockPointerType *ToBlockPtr =
2223            ToType->getAs<BlockPointerType>()) {
2224    // Objective C++: We're able to convert from a pointer to any object
2225    // to a block pointer type.
2226    if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
2227      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2228      return true;
2229    }
2230    ToPointeeType = ToBlockPtr->getPointeeType();
2231  }
2232  else if (FromType->getAs<BlockPointerType>() &&
2233           ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
2234    // Objective C++: We're able to convert from a block pointer type to a
2235    // pointer to any object.
2236    ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2237    return true;
2238  }
2239  else
2240    return false;
2241
2242  QualType FromPointeeType;
2243  if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
2244    FromPointeeType = FromCPtr->getPointeeType();
2245  else if (const BlockPointerType *FromBlockPtr =
2246           FromType->getAs<BlockPointerType>())
2247    FromPointeeType = FromBlockPtr->getPointeeType();
2248  else
2249    return false;
2250
2251  // If we have pointers to pointers, recursively check whether this
2252  // is an Objective-C conversion.
2253  if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
2254      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2255                              IncompatibleObjC)) {
2256    // We always complain about this conversion.
2257    IncompatibleObjC = true;
2258    ConvertedType = Context.getPointerType(ConvertedType);
2259    ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2260    return true;
2261  }
2262  // Allow conversion of pointee being objective-c pointer to another one;
2263  // as in I* to id.
2264  if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
2265      ToPointeeType->getAs<ObjCObjectPointerType>() &&
2266      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
2267                              IncompatibleObjC)) {
2268
2269    ConvertedType = Context.getPointerType(ConvertedType);
2270    ConvertedType = AdoptQualifiers(Context, ConvertedType, FromQualifiers);
2271    return true;
2272  }
2273
2274  // If we have pointers to functions or blocks, check whether the only
2275  // differences in the argument and result types are in Objective-C
2276  // pointer conversions. If so, we permit the conversion (but
2277  // complain about it).
2278  const FunctionProtoType *FromFunctionType
2279    = FromPointeeType->getAs<FunctionProtoType>();
2280  const FunctionProtoType *ToFunctionType
2281    = ToPointeeType->getAs<FunctionProtoType>();
2282  if (FromFunctionType && ToFunctionType) {
2283    // If the function types are exactly the same, this isn't an
2284    // Objective-C pointer conversion.
2285    if (Context.getCanonicalType(FromPointeeType)
2286          == Context.getCanonicalType(ToPointeeType))
2287      return false;
2288
2289    // Perform the quick checks that will tell us whether these
2290    // function types are obviously different.
2291    if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2292        FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
2293        FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
2294      return false;
2295
2296    bool HasObjCConversion = false;
2297    if (Context.getCanonicalType(FromFunctionType->getResultType())
2298          == Context.getCanonicalType(ToFunctionType->getResultType())) {
2299      // Okay, the types match exactly. Nothing to do.
2300    } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
2301                                       ToFunctionType->getResultType(),
2302                                       ConvertedType, IncompatibleObjC)) {
2303      // Okay, we have an Objective-C pointer conversion.
2304      HasObjCConversion = true;
2305    } else {
2306      // Function types are too different. Abort.
2307      return false;
2308    }
2309
2310    // Check argument types.
2311    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2312         ArgIdx != NumArgs; ++ArgIdx) {
2313      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2314      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2315      if (Context.getCanonicalType(FromArgType)
2316            == Context.getCanonicalType(ToArgType)) {
2317        // Okay, the types match exactly. Nothing to do.
2318      } else if (isObjCPointerConversion(FromArgType, ToArgType,
2319                                         ConvertedType, IncompatibleObjC)) {
2320        // Okay, we have an Objective-C pointer conversion.
2321        HasObjCConversion = true;
2322      } else {
2323        // Argument types are too different. Abort.
2324        return false;
2325      }
2326    }
2327
2328    if (HasObjCConversion) {
2329      // We had an Objective-C conversion. Allow this pointer
2330      // conversion, but complain about it.
2331      ConvertedType = AdoptQualifiers(Context, ToType, FromQualifiers);
2332      IncompatibleObjC = true;
2333      return true;
2334    }
2335  }
2336
2337  return false;
2338}
2339
2340/// \brief Determine whether this is an Objective-C writeback conversion,
2341/// used for parameter passing when performing automatic reference counting.
2342///
2343/// \param FromType The type we're converting form.
2344///
2345/// \param ToType The type we're converting to.
2346///
2347/// \param ConvertedType The type that will be produced after applying
2348/// this conversion.
2349bool Sema::isObjCWritebackConversion(QualType FromType, QualType ToType,
2350                                     QualType &ConvertedType) {
2351  if (!getLangOpts().ObjCAutoRefCount ||
2352      Context.hasSameUnqualifiedType(FromType, ToType))
2353    return false;
2354
2355  // Parameter must be a pointer to __autoreleasing (with no other qualifiers).
2356  QualType ToPointee;
2357  if (const PointerType *ToPointer = ToType->getAs<PointerType>())
2358    ToPointee = ToPointer->getPointeeType();
2359  else
2360    return false;
2361
2362  Qualifiers ToQuals = ToPointee.getQualifiers();
2363  if (!ToPointee->isObjCLifetimeType() ||
2364      ToQuals.getObjCLifetime() != Qualifiers::OCL_Autoreleasing ||
2365      !ToQuals.withoutObjCLifetime().empty())
2366    return false;
2367
2368  // Argument must be a pointer to __strong to __weak.
2369  QualType FromPointee;
2370  if (const PointerType *FromPointer = FromType->getAs<PointerType>())
2371    FromPointee = FromPointer->getPointeeType();
2372  else
2373    return false;
2374
2375  Qualifiers FromQuals = FromPointee.getQualifiers();
2376  if (!FromPointee->isObjCLifetimeType() ||
2377      (FromQuals.getObjCLifetime() != Qualifiers::OCL_Strong &&
2378       FromQuals.getObjCLifetime() != Qualifiers::OCL_Weak))
2379    return false;
2380
2381  // Make sure that we have compatible qualifiers.
2382  FromQuals.setObjCLifetime(Qualifiers::OCL_Autoreleasing);
2383  if (!ToQuals.compatiblyIncludes(FromQuals))
2384    return false;
2385
2386  // Remove qualifiers from the pointee type we're converting from; they
2387  // aren't used in the compatibility check belong, and we'll be adding back
2388  // qualifiers (with __autoreleasing) if the compatibility check succeeds.
2389  FromPointee = FromPointee.getUnqualifiedType();
2390
2391  // The unqualified form of the pointee types must be compatible.
2392  ToPointee = ToPointee.getUnqualifiedType();
2393  bool IncompatibleObjC;
2394  if (Context.typesAreCompatible(FromPointee, ToPointee))
2395    FromPointee = ToPointee;
2396  else if (!isObjCPointerConversion(FromPointee, ToPointee, FromPointee,
2397                                    IncompatibleObjC))
2398    return false;
2399
2400  /// \brief Construct the type we're converting to, which is a pointer to
2401  /// __autoreleasing pointee.
2402  FromPointee = Context.getQualifiedType(FromPointee, FromQuals);
2403  ConvertedType = Context.getPointerType(FromPointee);
2404  return true;
2405}
2406
2407bool Sema::IsBlockPointerConversion(QualType FromType, QualType ToType,
2408                                    QualType& ConvertedType) {
2409  QualType ToPointeeType;
2410  if (const BlockPointerType *ToBlockPtr =
2411        ToType->getAs<BlockPointerType>())
2412    ToPointeeType = ToBlockPtr->getPointeeType();
2413  else
2414    return false;
2415
2416  QualType FromPointeeType;
2417  if (const BlockPointerType *FromBlockPtr =
2418      FromType->getAs<BlockPointerType>())
2419    FromPointeeType = FromBlockPtr->getPointeeType();
2420  else
2421    return false;
2422  // We have pointer to blocks, check whether the only
2423  // differences in the argument and result types are in Objective-C
2424  // pointer conversions. If so, we permit the conversion.
2425
2426  const FunctionProtoType *FromFunctionType
2427    = FromPointeeType->getAs<FunctionProtoType>();
2428  const FunctionProtoType *ToFunctionType
2429    = ToPointeeType->getAs<FunctionProtoType>();
2430
2431  if (!FromFunctionType || !ToFunctionType)
2432    return false;
2433
2434  if (Context.hasSameType(FromPointeeType, ToPointeeType))
2435    return true;
2436
2437  // Perform the quick checks that will tell us whether these
2438  // function types are obviously different.
2439  if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
2440      FromFunctionType->isVariadic() != ToFunctionType->isVariadic())
2441    return false;
2442
2443  FunctionType::ExtInfo FromEInfo = FromFunctionType->getExtInfo();
2444  FunctionType::ExtInfo ToEInfo = ToFunctionType->getExtInfo();
2445  if (FromEInfo != ToEInfo)
2446    return false;
2447
2448  bool IncompatibleObjC = false;
2449  if (Context.hasSameType(FromFunctionType->getResultType(),
2450                          ToFunctionType->getResultType())) {
2451    // Okay, the types match exactly. Nothing to do.
2452  } else {
2453    QualType RHS = FromFunctionType->getResultType();
2454    QualType LHS = ToFunctionType->getResultType();
2455    if ((!getLangOpts().CPlusPlus || !RHS->isRecordType()) &&
2456        !RHS.hasQualifiers() && LHS.hasQualifiers())
2457       LHS = LHS.getUnqualifiedType();
2458
2459     if (Context.hasSameType(RHS,LHS)) {
2460       // OK exact match.
2461     } else if (isObjCPointerConversion(RHS, LHS,
2462                                        ConvertedType, IncompatibleObjC)) {
2463     if (IncompatibleObjC)
2464       return false;
2465     // Okay, we have an Objective-C pointer conversion.
2466     }
2467     else
2468       return false;
2469   }
2470
2471   // Check argument types.
2472   for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
2473        ArgIdx != NumArgs; ++ArgIdx) {
2474     IncompatibleObjC = false;
2475     QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
2476     QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
2477     if (Context.hasSameType(FromArgType, ToArgType)) {
2478       // Okay, the types match exactly. Nothing to do.
2479     } else if (isObjCPointerConversion(ToArgType, FromArgType,
2480                                        ConvertedType, IncompatibleObjC)) {
2481       if (IncompatibleObjC)
2482         return false;
2483       // Okay, we have an Objective-C pointer conversion.
2484     } else
2485       // Argument types are too different. Abort.
2486       return false;
2487   }
2488   if (LangOpts.ObjCAutoRefCount &&
2489       !Context.FunctionTypesMatchOnNSConsumedAttrs(FromFunctionType,
2490                                                    ToFunctionType))
2491     return false;
2492
2493   ConvertedType = ToType;
2494   return true;
2495}
2496
2497enum {
2498  ft_default,
2499  ft_different_class,
2500  ft_parameter_arity,
2501  ft_parameter_mismatch,
2502  ft_return_type,
2503  ft_qualifer_mismatch
2504};
2505
2506/// HandleFunctionTypeMismatch - Gives diagnostic information for differeing
2507/// function types.  Catches different number of parameter, mismatch in
2508/// parameter types, and different return types.
2509void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag,
2510                                      QualType FromType, QualType ToType) {
2511  // If either type is not valid, include no extra info.
2512  if (FromType.isNull() || ToType.isNull()) {
2513    PDiag << ft_default;
2514    return;
2515  }
2516
2517  // Get the function type from the pointers.
2518  if (FromType->isMemberPointerType() && ToType->isMemberPointerType()) {
2519    const MemberPointerType *FromMember = FromType->getAs<MemberPointerType>(),
2520                            *ToMember = ToType->getAs<MemberPointerType>();
2521    if (FromMember->getClass() != ToMember->getClass()) {
2522      PDiag << ft_different_class << QualType(ToMember->getClass(), 0)
2523            << QualType(FromMember->getClass(), 0);
2524      return;
2525    }
2526    FromType = FromMember->getPointeeType();
2527    ToType = ToMember->getPointeeType();
2528  }
2529
2530  if (FromType->isPointerType())
2531    FromType = FromType->getPointeeType();
2532  if (ToType->isPointerType())
2533    ToType = ToType->getPointeeType();
2534
2535  // Remove references.
2536  FromType = FromType.getNonReferenceType();
2537  ToType = ToType.getNonReferenceType();
2538
2539  // Don't print extra info for non-specialized template functions.
2540  if (FromType->isInstantiationDependentType() &&
2541      !FromType->getAs<TemplateSpecializationType>()) {
2542    PDiag << ft_default;
2543    return;
2544  }
2545
2546  // No extra info for same types.
2547  if (Context.hasSameType(FromType, ToType)) {
2548    PDiag << ft_default;
2549    return;
2550  }
2551
2552  const FunctionProtoType *FromFunction = FromType->getAs<FunctionProtoType>(),
2553                          *ToFunction = ToType->getAs<FunctionProtoType>();
2554
2555  // Both types need to be function types.
2556  if (!FromFunction || !ToFunction) {
2557    PDiag << ft_default;
2558    return;
2559  }
2560
2561  if (FromFunction->getNumArgs() != ToFunction->getNumArgs()) {
2562    PDiag << ft_parameter_arity << ToFunction->getNumArgs()
2563          << FromFunction->getNumArgs();
2564    return;
2565  }
2566
2567  // Handle different parameter types.
2568  unsigned ArgPos;
2569  if (!FunctionArgTypesAreEqual(FromFunction, ToFunction, &ArgPos)) {
2570    PDiag << ft_parameter_mismatch << ArgPos + 1
2571          << ToFunction->getArgType(ArgPos)
2572          << FromFunction->getArgType(ArgPos);
2573    return;
2574  }
2575
2576  // Handle different return type.
2577  if (!Context.hasSameType(FromFunction->getResultType(),
2578                           ToFunction->getResultType())) {
2579    PDiag << ft_return_type << ToFunction->getResultType()
2580          << FromFunction->getResultType();
2581    return;
2582  }
2583
2584  unsigned FromQuals = FromFunction->getTypeQuals(),
2585           ToQuals = ToFunction->getTypeQuals();
2586  if (FromQuals != ToQuals) {
2587    PDiag << ft_qualifer_mismatch << ToQuals << FromQuals;
2588    return;
2589  }
2590
2591  // Unable to find a difference, so add no extra info.
2592  PDiag << ft_default;
2593}
2594
2595/// FunctionArgTypesAreEqual - This routine checks two function proto types
2596/// for equality of their argument types. Caller has already checked that
2597/// they have same number of arguments. This routine assumes that Objective-C
2598/// pointer types which only differ in their protocol qualifiers are equal.
2599/// If the parameters are different, ArgPos will have the parameter index
2600/// of the first different parameter.
2601bool Sema::FunctionArgTypesAreEqual(const FunctionProtoType *OldType,
2602                                    const FunctionProtoType *NewType,
2603                                    unsigned *ArgPos) {
2604  if (!getLangOpts().ObjC1) {
2605    for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2606         N = NewType->arg_type_begin(),
2607         E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2608      if (!Context.hasSameType(*O, *N)) {
2609        if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2610        return false;
2611      }
2612    }
2613    return true;
2614  }
2615
2616  for (FunctionProtoType::arg_type_iterator O = OldType->arg_type_begin(),
2617       N = NewType->arg_type_begin(),
2618       E = OldType->arg_type_end(); O && (O != E); ++O, ++N) {
2619    QualType ToType = (*O);
2620    QualType FromType = (*N);
2621    if (!Context.hasSameType(ToType, FromType)) {
2622      if (const PointerType *PTTo = ToType->getAs<PointerType>()) {
2623        if (const PointerType *PTFr = FromType->getAs<PointerType>())
2624          if ((PTTo->getPointeeType()->isObjCQualifiedIdType() &&
2625               PTFr->getPointeeType()->isObjCQualifiedIdType()) ||
2626              (PTTo->getPointeeType()->isObjCQualifiedClassType() &&
2627               PTFr->getPointeeType()->isObjCQualifiedClassType()))
2628            continue;
2629      }
2630      else if (const ObjCObjectPointerType *PTTo =
2631                 ToType->getAs<ObjCObjectPointerType>()) {
2632        if (const ObjCObjectPointerType *PTFr =
2633              FromType->getAs<ObjCObjectPointerType>())
2634          if (Context.hasSameUnqualifiedType(
2635                PTTo->getObjectType()->getBaseType(),
2636                PTFr->getObjectType()->getBaseType()))
2637            continue;
2638      }
2639      if (ArgPos) *ArgPos = O - OldType->arg_type_begin();
2640      return false;
2641    }
2642  }
2643  return true;
2644}
2645
2646/// CheckPointerConversion - Check the pointer conversion from the
2647/// expression From to the type ToType. This routine checks for
2648/// ambiguous or inaccessible derived-to-base pointer
2649/// conversions for which IsPointerConversion has already returned
2650/// true. It returns true and produces a diagnostic if there was an
2651/// error, or returns false otherwise.
2652bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
2653                                  CastKind &Kind,
2654                                  CXXCastPath& BasePath,
2655                                  bool IgnoreBaseAccess) {
2656  QualType FromType = From->getType();
2657  bool IsCStyleOrFunctionalCast = IgnoreBaseAccess;
2658
2659  Kind = CK_BitCast;
2660
2661  if (!IsCStyleOrFunctionalCast && !FromType->isAnyPointerType() &&
2662      From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull) ==
2663      Expr::NPCK_ZeroExpression) {
2664    if (Context.hasSameUnqualifiedType(From->getType(), Context.BoolTy))
2665      DiagRuntimeBehavior(From->getExprLoc(), From,
2666                          PDiag(diag::warn_impcast_bool_to_null_pointer)
2667                            << ToType << From->getSourceRange());
2668    else if (!isUnevaluatedContext())
2669      Diag(From->getExprLoc(), diag::warn_non_literal_null_pointer)
2670        << ToType << From->getSourceRange();
2671  }
2672  if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
2673    if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {
2674      QualType FromPointeeType = FromPtrType->getPointeeType(),
2675               ToPointeeType   = ToPtrType->getPointeeType();
2676
2677      if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
2678          !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {
2679        // We must have a derived-to-base conversion. Check an
2680        // ambiguous or inaccessible conversion.
2681        if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
2682                                         From->getExprLoc(),
2683                                         From->getSourceRange(), &BasePath,
2684                                         IgnoreBaseAccess))
2685          return true;
2686
2687        // The conversion was successful.
2688        Kind = CK_DerivedToBase;
2689      }
2690    }
2691  } else if (const ObjCObjectPointerType *ToPtrType =
2692               ToType->getAs<ObjCObjectPointerType>()) {
2693    if (const ObjCObjectPointerType *FromPtrType =
2694          FromType->getAs<ObjCObjectPointerType>()) {
2695      // Objective-C++ conversions are always okay.
2696      // FIXME: We should have a different class of conversions for the
2697      // Objective-C++ implicit conversions.
2698      if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
2699        return false;
2700    } else if (FromType->isBlockPointerType()) {
2701      Kind = CK_BlockPointerToObjCPointerCast;
2702    } else {
2703      Kind = CK_CPointerToObjCPointerCast;
2704    }
2705  } else if (ToType->isBlockPointerType()) {
2706    if (!FromType->isBlockPointerType())
2707      Kind = CK_AnyPointerToBlockPointerCast;
2708  }
2709
2710  // We shouldn't fall into this case unless it's valid for other
2711  // reasons.
2712  if (From->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull))
2713    Kind = CK_NullToPointer;
2714
2715  return false;
2716}
2717
2718/// IsMemberPointerConversion - Determines whether the conversion of the
2719/// expression From, which has the (possibly adjusted) type FromType, can be
2720/// converted to the type ToType via a member pointer conversion (C++ 4.11).
2721/// If so, returns true and places the converted type (that might differ from
2722/// ToType in its cv-qualifiers at some level) into ConvertedType.
2723bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
2724                                     QualType ToType,
2725                                     bool InOverloadResolution,
2726                                     QualType &ConvertedType) {
2727  const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
2728  if (!ToTypePtr)
2729    return false;
2730
2731  // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
2732  if (From->isNullPointerConstant(Context,
2733                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
2734                                        : Expr::NPC_ValueDependentIsNull)) {
2735    ConvertedType = ToType;
2736    return true;
2737  }
2738
2739  // Otherwise, both types have to be member pointers.
2740  const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
2741  if (!FromTypePtr)
2742    return false;
2743
2744  // A pointer to member of B can be converted to a pointer to member of D,
2745  // where D is derived from B (C++ 4.11p2).
2746  QualType FromClass(FromTypePtr->getClass(), 0);
2747  QualType ToClass(ToTypePtr->getClass(), 0);
2748
2749  if (!Context.hasSameUnqualifiedType(FromClass, ToClass) &&
2750      !RequireCompleteType(From->getLocStart(), ToClass, 0) &&
2751      IsDerivedFrom(ToClass, FromClass)) {
2752    ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
2753                                                 ToClass.getTypePtr());
2754    return true;
2755  }
2756
2757  return false;
2758}
2759
2760/// CheckMemberPointerConversion - Check the member pointer conversion from the
2761/// expression From to the type ToType. This routine checks for ambiguous or
2762/// virtual or inaccessible base-to-derived member pointer conversions
2763/// for which IsMemberPointerConversion has already returned true. It returns
2764/// true and produces a diagnostic if there was an error, or returns false
2765/// otherwise.
2766bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
2767                                        CastKind &Kind,
2768                                        CXXCastPath &BasePath,
2769                                        bool IgnoreBaseAccess) {
2770  QualType FromType = From->getType();
2771  const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
2772  if (!FromPtrType) {
2773    // This must be a null pointer to member pointer conversion
2774    assert(From->isNullPointerConstant(Context,
2775                                       Expr::NPC_ValueDependentIsNull) &&
2776           "Expr must be null pointer constant!");
2777    Kind = CK_NullToMemberPointer;
2778    return false;
2779  }
2780
2781  const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
2782  assert(ToPtrType && "No member pointer cast has a target type "
2783                      "that is not a member pointer.");
2784
2785  QualType FromClass = QualType(FromPtrType->getClass(), 0);
2786  QualType ToClass   = QualType(ToPtrType->getClass(), 0);
2787
2788  // FIXME: What about dependent types?
2789  assert(FromClass->isRecordType() && "Pointer into non-class.");
2790  assert(ToClass->isRecordType() && "Pointer into non-class.");
2791
2792  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true,
2793                     /*DetectVirtual=*/true);
2794  bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
2795  assert(DerivationOkay &&
2796         "Should not have been called if derivation isn't OK.");
2797  (void)DerivationOkay;
2798
2799  if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
2800                                  getUnqualifiedType())) {
2801    std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
2802    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
2803      << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
2804    return true;
2805  }
2806
2807  if (const RecordType *VBase = Paths.getDetectedVirtual()) {
2808    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
2809      << FromClass << ToClass << QualType(VBase, 0)
2810      << From->getSourceRange();
2811    return true;
2812  }
2813
2814  if (!IgnoreBaseAccess)
2815    CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass,
2816                         Paths.front(),
2817                         diag::err_downcast_from_inaccessible_base);
2818
2819  // Must be a base to derived member conversion.
2820  BuildBasePathArray(Paths, BasePath);
2821  Kind = CK_BaseToDerivedMemberPointer;
2822  return false;
2823}
2824
2825/// IsQualificationConversion - Determines whether the conversion from
2826/// an rvalue of type FromType to ToType is a qualification conversion
2827/// (C++ 4.4).
2828///
2829/// \param ObjCLifetimeConversion Output parameter that will be set to indicate
2830/// when the qualification conversion involves a change in the Objective-C
2831/// object lifetime.
2832bool
2833Sema::IsQualificationConversion(QualType FromType, QualType ToType,
2834                                bool CStyle, bool &ObjCLifetimeConversion) {
2835  FromType = Context.getCanonicalType(FromType);
2836  ToType = Context.getCanonicalType(ToType);
2837  ObjCLifetimeConversion = false;
2838
2839  // If FromType and ToType are the same type, this is not a
2840  // qualification conversion.
2841  if (FromType.getUnqualifiedType() == ToType.getUnqualifiedType())
2842    return false;
2843
2844  // (C++ 4.4p4):
2845  //   A conversion can add cv-qualifiers at levels other than the first
2846  //   in multi-level pointers, subject to the following rules: [...]
2847  bool PreviousToQualsIncludeConst = true;
2848  bool UnwrappedAnyPointer = false;
2849  while (Context.UnwrapSimilarPointerTypes(FromType, ToType)) {
2850    // Within each iteration of the loop, we check the qualifiers to
2851    // determine if this still looks like a qualification
2852    // conversion. Then, if all is well, we unwrap one more level of
2853    // pointers or pointers-to-members and do it all again
2854    // until there are no more pointers or pointers-to-members left to
2855    // unwrap.
2856    UnwrappedAnyPointer = true;
2857
2858    Qualifiers FromQuals = FromType.getQualifiers();
2859    Qualifiers ToQuals = ToType.getQualifiers();
2860
2861    // Objective-C ARC:
2862    //   Check Objective-C lifetime conversions.
2863    if (FromQuals.getObjCLifetime() != ToQuals.getObjCLifetime() &&
2864        UnwrappedAnyPointer) {
2865      if (ToQuals.compatiblyIncludesObjCLifetime(FromQuals)) {
2866        ObjCLifetimeConversion = true;
2867        FromQuals.removeObjCLifetime();
2868        ToQuals.removeObjCLifetime();
2869      } else {
2870        // Qualification conversions cannot cast between different
2871        // Objective-C lifetime qualifiers.
2872        return false;
2873      }
2874    }
2875
2876    // Allow addition/removal of GC attributes but not changing GC attributes.
2877    if (FromQuals.getObjCGCAttr() != ToQuals.getObjCGCAttr() &&
2878        (!FromQuals.hasObjCGCAttr() || !ToQuals.hasObjCGCAttr())) {
2879      FromQuals.removeObjCGCAttr();
2880      ToQuals.removeObjCGCAttr();
2881    }
2882
2883    //   -- for every j > 0, if const is in cv 1,j then const is in cv
2884    //      2,j, and similarly for volatile.
2885    if (!CStyle && !ToQuals.compatiblyIncludes(FromQuals))
2886      return false;
2887
2888    //   -- if the cv 1,j and cv 2,j are different, then const is in
2889    //      every cv for 0 < k < j.
2890    if (!CStyle && FromQuals.getCVRQualifiers() != ToQuals.getCVRQualifiers()
2891        && !PreviousToQualsIncludeConst)
2892      return false;
2893
2894    // Keep track of whether all prior cv-qualifiers in the "to" type
2895    // include const.
2896    PreviousToQualsIncludeConst
2897      = PreviousToQualsIncludeConst && ToQuals.hasConst();
2898  }
2899
2900  // We are left with FromType and ToType being the pointee types
2901  // after unwrapping the original FromType and ToType the same number
2902  // of types. If we unwrapped any pointers, and if FromType and
2903  // ToType have the same unqualified type (since we checked
2904  // qualifiers above), then this is a qualification conversion.
2905  return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
2906}
2907
2908/// \brief - Determine whether this is a conversion from a scalar type to an
2909/// atomic type.
2910///
2911/// If successful, updates \c SCS's second and third steps in the conversion
2912/// sequence to finish the conversion.
2913static bool tryAtomicConversion(Sema &S, Expr *From, QualType ToType,
2914                                bool InOverloadResolution,
2915                                StandardConversionSequence &SCS,
2916                                bool CStyle) {
2917  const AtomicType *ToAtomic = ToType->getAs<AtomicType>();
2918  if (!ToAtomic)
2919    return false;
2920
2921  StandardConversionSequence InnerSCS;
2922  if (!IsStandardConversion(S, From, ToAtomic->getValueType(),
2923                            InOverloadResolution, InnerSCS,
2924                            CStyle, /*AllowObjCWritebackConversion=*/false))
2925    return false;
2926
2927  SCS.Second = InnerSCS.Second;
2928  SCS.setToType(1, InnerSCS.getToType(1));
2929  SCS.Third = InnerSCS.Third;
2930  SCS.QualificationIncludesObjCLifetime
2931    = InnerSCS.QualificationIncludesObjCLifetime;
2932  SCS.setToType(2, InnerSCS.getToType(2));
2933  return true;
2934}
2935
2936static bool isFirstArgumentCompatibleWithType(ASTContext &Context,
2937                                              CXXConstructorDecl *Constructor,
2938                                              QualType Type) {
2939  const FunctionProtoType *CtorType =
2940      Constructor->getType()->getAs<FunctionProtoType>();
2941  if (CtorType->getNumArgs() > 0) {
2942    QualType FirstArg = CtorType->getArgType(0);
2943    if (Context.hasSameUnqualifiedType(Type, FirstArg.getNonReferenceType()))
2944      return true;
2945  }
2946  return false;
2947}
2948
2949static OverloadingResult
2950IsInitializerListConstructorConversion(Sema &S, Expr *From, QualType ToType,
2951                                       CXXRecordDecl *To,
2952                                       UserDefinedConversionSequence &User,
2953                                       OverloadCandidateSet &CandidateSet,
2954                                       bool AllowExplicit) {
2955  DeclContext::lookup_result R = S.LookupConstructors(To);
2956  for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
2957       Con != ConEnd; ++Con) {
2958    NamedDecl *D = *Con;
2959    DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
2960
2961    // Find the constructor (which may be a template).
2962    CXXConstructorDecl *Constructor = 0;
2963    FunctionTemplateDecl *ConstructorTmpl
2964      = dyn_cast<FunctionTemplateDecl>(D);
2965    if (ConstructorTmpl)
2966      Constructor
2967        = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
2968    else
2969      Constructor = cast<CXXConstructorDecl>(D);
2970
2971    bool Usable = !Constructor->isInvalidDecl() &&
2972                  S.isInitListConstructor(Constructor) &&
2973                  (AllowExplicit || !Constructor->isExplicit());
2974    if (Usable) {
2975      // If the first argument is (a reference to) the target type,
2976      // suppress conversions.
2977      bool SuppressUserConversions =
2978          isFirstArgumentCompatibleWithType(S.Context, Constructor, ToType);
2979      if (ConstructorTmpl)
2980        S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
2981                                       /*ExplicitArgs*/ 0,
2982                                       From, CandidateSet,
2983                                       SuppressUserConversions);
2984      else
2985        S.AddOverloadCandidate(Constructor, FoundDecl,
2986                               From, CandidateSet,
2987                               SuppressUserConversions);
2988    }
2989  }
2990
2991  bool HadMultipleCandidates = (CandidateSet.size() > 1);
2992
2993  OverloadCandidateSet::iterator Best;
2994  switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
2995  case OR_Success: {
2996    // Record the standard conversion we used and the conversion function.
2997    CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Best->Function);
2998    QualType ThisType = Constructor->getThisType(S.Context);
2999    // Initializer lists don't have conversions as such.
3000    User.Before.setAsIdentityConversion();
3001    User.HadMultipleCandidates = HadMultipleCandidates;
3002    User.ConversionFunction = Constructor;
3003    User.FoundConversionFunction = Best->FoundDecl;
3004    User.After.setAsIdentityConversion();
3005    User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3006    User.After.setAllToTypes(ToType);
3007    return OR_Success;
3008  }
3009
3010  case OR_No_Viable_Function:
3011    return OR_No_Viable_Function;
3012  case OR_Deleted:
3013    return OR_Deleted;
3014  case OR_Ambiguous:
3015    return OR_Ambiguous;
3016  }
3017
3018  llvm_unreachable("Invalid OverloadResult!");
3019}
3020
3021/// Determines whether there is a user-defined conversion sequence
3022/// (C++ [over.ics.user]) that converts expression From to the type
3023/// ToType. If such a conversion exists, User will contain the
3024/// user-defined conversion sequence that performs such a conversion
3025/// and this routine will return true. Otherwise, this routine returns
3026/// false and User is unspecified.
3027///
3028/// \param AllowExplicit  true if the conversion should consider C++0x
3029/// "explicit" conversion functions as well as non-explicit conversion
3030/// functions (C++0x [class.conv.fct]p2).
3031static OverloadingResult
3032IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
3033                        UserDefinedConversionSequence &User,
3034                        OverloadCandidateSet &CandidateSet,
3035                        bool AllowExplicit) {
3036  // Whether we will only visit constructors.
3037  bool ConstructorsOnly = false;
3038
3039  // If the type we are conversion to is a class type, enumerate its
3040  // constructors.
3041  if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
3042    // C++ [over.match.ctor]p1:
3043    //   When objects of class type are direct-initialized (8.5), or
3044    //   copy-initialized from an expression of the same or a
3045    //   derived class type (8.5), overload resolution selects the
3046    //   constructor. [...] For copy-initialization, the candidate
3047    //   functions are all the converting constructors (12.3.1) of
3048    //   that class. The argument list is the expression-list within
3049    //   the parentheses of the initializer.
3050    if (S.Context.hasSameUnqualifiedType(ToType, From->getType()) ||
3051        (From->getType()->getAs<RecordType>() &&
3052         S.IsDerivedFrom(From->getType(), ToType)))
3053      ConstructorsOnly = true;
3054
3055    S.RequireCompleteType(From->getExprLoc(), ToType, 0);
3056    // RequireCompleteType may have returned true due to some invalid decl
3057    // during template instantiation, but ToType may be complete enough now
3058    // to try to recover.
3059    if (ToType->isIncompleteType()) {
3060      // We're not going to find any constructors.
3061    } else if (CXXRecordDecl *ToRecordDecl
3062                 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
3063
3064      Expr **Args = &From;
3065      unsigned NumArgs = 1;
3066      bool ListInitializing = false;
3067      if (InitListExpr *InitList = dyn_cast<InitListExpr>(From)) {
3068        // But first, see if there is an init-list-contructor that will work.
3069        OverloadingResult Result = IsInitializerListConstructorConversion(
3070            S, From, ToType, ToRecordDecl, User, CandidateSet, AllowExplicit);
3071        if (Result != OR_No_Viable_Function)
3072          return Result;
3073        // Never mind.
3074        CandidateSet.clear();
3075
3076        // If we're list-initializing, we pass the individual elements as
3077        // arguments, not the entire list.
3078        Args = InitList->getInits();
3079        NumArgs = InitList->getNumInits();
3080        ListInitializing = true;
3081      }
3082
3083      DeclContext::lookup_result R = S.LookupConstructors(ToRecordDecl);
3084      for (DeclContext::lookup_iterator Con = R.begin(), ConEnd = R.end();
3085           Con != ConEnd; ++Con) {
3086        NamedDecl *D = *Con;
3087        DeclAccessPair FoundDecl = DeclAccessPair::make(D, D->getAccess());
3088
3089        // Find the constructor (which may be a template).
3090        CXXConstructorDecl *Constructor = 0;
3091        FunctionTemplateDecl *ConstructorTmpl
3092          = dyn_cast<FunctionTemplateDecl>(D);
3093        if (ConstructorTmpl)
3094          Constructor
3095            = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
3096        else
3097          Constructor = cast<CXXConstructorDecl>(D);
3098
3099        bool Usable = !Constructor->isInvalidDecl();
3100        if (ListInitializing)
3101          Usable = Usable && (AllowExplicit || !Constructor->isExplicit());
3102        else
3103          Usable = Usable &&Constructor->isConvertingConstructor(AllowExplicit);
3104        if (Usable) {
3105          bool SuppressUserConversions = !ConstructorsOnly;
3106          if (SuppressUserConversions && ListInitializing) {
3107            SuppressUserConversions = false;
3108            if (NumArgs == 1) {
3109              // If the first argument is (a reference to) the target type,
3110              // suppress conversions.
3111              SuppressUserConversions = isFirstArgumentCompatibleWithType(
3112                                                S.Context, Constructor, ToType);
3113            }
3114          }
3115          if (ConstructorTmpl)
3116            S.AddTemplateOverloadCandidate(ConstructorTmpl, FoundDecl,
3117                                           /*ExplicitArgs*/ 0,
3118                                           llvm::makeArrayRef(Args, NumArgs),
3119                                           CandidateSet, SuppressUserConversions);
3120          else
3121            // Allow one user-defined conversion when user specifies a
3122            // From->ToType conversion via an static cast (c-style, etc).
3123            S.AddOverloadCandidate(Constructor, FoundDecl,
3124                                   llvm::makeArrayRef(Args, NumArgs),
3125                                   CandidateSet, SuppressUserConversions);
3126        }
3127      }
3128    }
3129  }
3130
3131  // Enumerate conversion functions, if we're allowed to.
3132  if (ConstructorsOnly || isa<InitListExpr>(From)) {
3133  } else if (S.RequireCompleteType(From->getLocStart(), From->getType(), 0)) {
3134    // No conversion functions from incomplete types.
3135  } else if (const RecordType *FromRecordType
3136                                   = From->getType()->getAs<RecordType>()) {
3137    if (CXXRecordDecl *FromRecordDecl
3138         = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
3139      // Add all of the conversion functions as candidates.
3140      std::pair<CXXRecordDecl::conversion_iterator,
3141                CXXRecordDecl::conversion_iterator>
3142        Conversions = FromRecordDecl->getVisibleConversionFunctions();
3143      for (CXXRecordDecl::conversion_iterator
3144             I = Conversions.first, E = Conversions.second; I != E; ++I) {
3145        DeclAccessPair FoundDecl = I.getPair();
3146        NamedDecl *D = FoundDecl.getDecl();
3147        CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
3148        if (isa<UsingShadowDecl>(D))
3149          D = cast<UsingShadowDecl>(D)->getTargetDecl();
3150
3151        CXXConversionDecl *Conv;
3152        FunctionTemplateDecl *ConvTemplate;
3153        if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(D)))
3154          Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
3155        else
3156          Conv = cast<CXXConversionDecl>(D);
3157
3158        if (AllowExplicit || !Conv->isExplicit()) {
3159          if (ConvTemplate)
3160            S.AddTemplateConversionCandidate(ConvTemplate, FoundDecl,
3161                                             ActingContext, From, ToType,
3162                                             CandidateSet);
3163          else
3164            S.AddConversionCandidate(Conv, FoundDecl, ActingContext,
3165                                     From, ToType, CandidateSet);
3166        }
3167      }
3168    }
3169  }
3170
3171  bool HadMultipleCandidates = (CandidateSet.size() > 1);
3172
3173  OverloadCandidateSet::iterator Best;
3174  switch (CandidateSet.BestViableFunction(S, From->getLocStart(), Best, true)) {
3175  case OR_Success:
3176    // Record the standard conversion we used and the conversion function.
3177    if (CXXConstructorDecl *Constructor
3178          = dyn_cast<CXXConstructorDecl>(Best->Function)) {
3179      // C++ [over.ics.user]p1:
3180      //   If the user-defined conversion is specified by a
3181      //   constructor (12.3.1), the initial standard conversion
3182      //   sequence converts the source type to the type required by
3183      //   the argument of the constructor.
3184      //
3185      QualType ThisType = Constructor->getThisType(S.Context);
3186      if (isa<InitListExpr>(From)) {
3187        // Initializer lists don't have conversions as such.
3188        User.Before.setAsIdentityConversion();
3189      } else {
3190        if (Best->Conversions[0].isEllipsis())
3191          User.EllipsisConversion = true;
3192        else {
3193          User.Before = Best->Conversions[0].Standard;
3194          User.EllipsisConversion = false;
3195        }
3196      }
3197      User.HadMultipleCandidates = HadMultipleCandidates;
3198      User.ConversionFunction = Constructor;
3199      User.FoundConversionFunction = Best->FoundDecl;
3200      User.After.setAsIdentityConversion();
3201      User.After.setFromType(ThisType->getAs<PointerType>()->getPointeeType());
3202      User.After.setAllToTypes(ToType);
3203      return OR_Success;
3204    }
3205    if (CXXConversionDecl *Conversion
3206                 = dyn_cast<CXXConversionDecl>(Best->Function)) {
3207      // C++ [over.ics.user]p1:
3208      //
3209      //   [...] If the user-defined conversion is specified by a
3210      //   conversion function (12.3.2), the initial standard
3211      //   conversion sequence converts the source type to the
3212      //   implicit object parameter of the conversion function.
3213      User.Before = Best->Conversions[0].Standard;
3214      User.HadMultipleCandidates = HadMultipleCandidates;
3215      User.ConversionFunction = Conversion;
3216      User.FoundConversionFunction = Best->FoundDecl;
3217      User.EllipsisConversion = false;
3218
3219      // C++ [over.ics.user]p2:
3220      //   The second standard conversion sequence converts the
3221      //   result of the user-defined conversion to the target type
3222      //   for the sequence. Since an implicit conversion sequence
3223      //   is an initialization, the special rules for
3224      //   initialization by user-defined conversion apply when
3225      //   selecting the best user-defined conversion for a
3226      //   user-defined conversion sequence (see 13.3.3 and
3227      //   13.3.3.1).
3228      User.After = Best->FinalConversion;
3229      return OR_Success;
3230    }
3231    llvm_unreachable("Not a constructor or conversion function?");
3232
3233  case OR_No_Viable_Function:
3234    return OR_No_Viable_Function;
3235  case OR_Deleted:
3236    // No conversion here! We're done.
3237    return OR_Deleted;
3238
3239  case OR_Ambiguous:
3240    return OR_Ambiguous;
3241  }
3242
3243  llvm_unreachable("Invalid OverloadResult!");
3244}
3245
3246bool
3247Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
3248  ImplicitConversionSequence ICS;
3249  OverloadCandidateSet CandidateSet(From->getExprLoc());
3250  OverloadingResult OvResult =
3251    IsUserDefinedConversion(*this, From, ToType, ICS.UserDefined,
3252                            CandidateSet, false);
3253  if (OvResult == OR_Ambiguous)
3254    Diag(From->getLocStart(),
3255         diag::err_typecheck_ambiguous_condition)
3256          << From->getType() << ToType << From->getSourceRange();
3257  else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
3258    Diag(From->getLocStart(),
3259         diag::err_typecheck_nonviable_condition)
3260    << From->getType() << ToType << From->getSourceRange();
3261  else
3262    return false;
3263  CandidateSet.NoteCandidates(*this, OCD_AllCandidates, From);
3264  return true;
3265}
3266
3267/// \brief Compare the user-defined conversion functions or constructors
3268/// of two user-defined conversion sequences to determine whether any ordering
3269/// is possible.
3270static ImplicitConversionSequence::CompareKind
3271compareConversionFunctions(Sema &S,
3272                           FunctionDecl *Function1,
3273                           FunctionDecl *Function2) {
3274  if (!S.getLangOpts().ObjC1 || !S.getLangOpts().CPlusPlus11)
3275    return ImplicitConversionSequence::Indistinguishable;
3276
3277  // Objective-C++:
3278  //   If both conversion functions are implicitly-declared conversions from
3279  //   a lambda closure type to a function pointer and a block pointer,
3280  //   respectively, always prefer the conversion to a function pointer,
3281  //   because the function pointer is more lightweight and is more likely
3282  //   to keep code working.
3283  CXXConversionDecl *Conv1 = dyn_cast<CXXConversionDecl>(Function1);
3284  if (!Conv1)
3285    return ImplicitConversionSequence::Indistinguishable;
3286
3287  CXXConversionDecl *Conv2 = dyn_cast<CXXConversionDecl>(Function2);
3288  if (!Conv2)
3289    return ImplicitConversionSequence::Indistinguishable;
3290
3291  if (Conv1->getParent()->isLambda() && Conv2->getParent()->isLambda()) {
3292    bool Block1 = Conv1->getConversionType()->isBlockPointerType();
3293    bool Block2 = Conv2->getConversionType()->isBlockPointerType();
3294    if (Block1 != Block2)
3295      return Block1? ImplicitConversionSequence::Worse
3296                   : ImplicitConversionSequence::Better;
3297  }
3298
3299  return ImplicitConversionSequence::Indistinguishable;
3300}
3301
3302/// CompareImplicitConversionSequences - Compare two implicit
3303/// conversion sequences to determine whether one is better than the
3304/// other or if they are indistinguishable (C++ 13.3.3.2).
3305static ImplicitConversionSequence::CompareKind
3306CompareImplicitConversionSequences(Sema &S,
3307                                   const ImplicitConversionSequence& ICS1,
3308                                   const ImplicitConversionSequence& ICS2)
3309{
3310  // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
3311  // conversion sequences (as defined in 13.3.3.1)
3312  //   -- a standard conversion sequence (13.3.3.1.1) is a better
3313  //      conversion sequence than a user-defined conversion sequence or
3314  //      an ellipsis conversion sequence, and
3315  //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
3316  //      conversion sequence than an ellipsis conversion sequence
3317  //      (13.3.3.1.3).
3318  //
3319  // C++0x [over.best.ics]p10:
3320  //   For the purpose of ranking implicit conversion sequences as
3321  //   described in 13.3.3.2, the ambiguous conversion sequence is
3322  //   treated as a user-defined sequence that is indistinguishable
3323  //   from any other user-defined conversion sequence.
3324  if (ICS1.getKindRank() < ICS2.getKindRank())
3325    return ImplicitConversionSequence::Better;
3326  if (ICS2.getKindRank() < ICS1.getKindRank())
3327    return ImplicitConversionSequence::Worse;
3328
3329  // The following checks require both conversion sequences to be of
3330  // the same kind.
3331  if (ICS1.getKind() != ICS2.getKind())
3332    return ImplicitConversionSequence::Indistinguishable;
3333
3334  ImplicitConversionSequence::CompareKind Result =
3335      ImplicitConversionSequence::Indistinguishable;
3336
3337  // Two implicit conversion sequences of the same form are
3338  // indistinguishable conversion sequences unless one of the
3339  // following rules apply: (C++ 13.3.3.2p3):
3340  if (ICS1.isStandard())
3341    Result = CompareStandardConversionSequences(S,
3342                                                ICS1.Standard, ICS2.Standard);
3343  else if (ICS1.isUserDefined()) {
3344    // User-defined conversion sequence U1 is a better conversion
3345    // sequence than another user-defined conversion sequence U2 if
3346    // they contain the same user-defined conversion function or
3347    // constructor and if the second standard conversion sequence of
3348    // U1 is better than the second standard conversion sequence of
3349    // U2 (C++ 13.3.3.2p3).
3350    if (ICS1.UserDefined.ConversionFunction ==
3351          ICS2.UserDefined.ConversionFunction)
3352      Result = CompareStandardConversionSequences(S,
3353                                                  ICS1.UserDefined.After,
3354                                                  ICS2.UserDefined.After);
3355    else
3356      Result = compareConversionFunctions(S,
3357                                          ICS1.UserDefined.ConversionFunction,
3358                                          ICS2.UserDefined.ConversionFunction);
3359  }
3360
3361  // List-initialization sequence L1 is a better conversion sequence than
3362  // list-initialization sequence L2 if L1 converts to std::initializer_list<X>
3363  // for some X and L2 does not.
3364  if (Result == ImplicitConversionSequence::Indistinguishable &&
3365      !ICS1.isBad() &&
3366      ICS1.isListInitializationSequence() &&
3367      ICS2.isListInitializationSequence()) {
3368    if (ICS1.isStdInitializerListElement() &&
3369        !ICS2.isStdInitializerListElement())
3370      return ImplicitConversionSequence::Better;
3371    if (!ICS1.isStdInitializerListElement() &&
3372        ICS2.isStdInitializerListElement())
3373      return ImplicitConversionSequence::Worse;
3374  }
3375
3376  return Result;
3377}
3378
3379static bool hasSimilarType(ASTContext &Context, QualType T1, QualType T2) {
3380  while (Context.UnwrapSimilarPointerTypes(T1, T2)) {
3381    Qualifiers Quals;
3382    T1 = Context.getUnqualifiedArrayType(T1, Quals);
3383    T2 = Context.getUnqualifiedArrayType(T2, Quals);
3384  }
3385
3386  return Context.hasSameUnqualifiedType(T1, T2);
3387}
3388
3389// Per 13.3.3.2p3, compare the given standard conversion sequences to
3390// determine if one is a proper subset of the other.
3391static ImplicitConversionSequence::CompareKind
3392compareStandardConversionSubsets(ASTContext &Context,
3393                                 const StandardConversionSequence& SCS1,
3394                                 const StandardConversionSequence& SCS2) {
3395  ImplicitConversionSequence::CompareKind Result
3396    = ImplicitConversionSequence::Indistinguishable;
3397
3398  // the identity conversion sequence is considered to be a subsequence of
3399  // any non-identity conversion sequence
3400  if (SCS1.isIdentityConversion() && !SCS2.isIdentityConversion())
3401    return ImplicitConversionSequence::Better;
3402  else if (!SCS1.isIdentityConversion() && SCS2.isIdentityConversion())
3403    return ImplicitConversionSequence::Worse;
3404
3405  if (SCS1.Second != SCS2.Second) {
3406    if (SCS1.Second == ICK_Identity)
3407      Result = ImplicitConversionSequence::Better;
3408    else if (SCS2.Second == ICK_Identity)
3409      Result = ImplicitConversionSequence::Worse;
3410    else
3411      return ImplicitConversionSequence::Indistinguishable;
3412  } else if (!hasSimilarType(Context, SCS1.getToType(1), SCS2.getToType(1)))
3413    return ImplicitConversionSequence::Indistinguishable;
3414
3415  if (SCS1.Third == SCS2.Third) {
3416    return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
3417                             : ImplicitConversionSequence::Indistinguishable;
3418  }
3419
3420  if (SCS1.Third == ICK_Identity)
3421    return Result == ImplicitConversionSequence::Worse
3422             ? ImplicitConversionSequence::Indistinguishable
3423             : ImplicitConversionSequence::Better;
3424
3425  if (SCS2.Third == ICK_Identity)
3426    return Result == ImplicitConversionSequence::Better
3427             ? ImplicitConversionSequence::Indistinguishable
3428             : ImplicitConversionSequence::Worse;
3429
3430  return ImplicitConversionSequence::Indistinguishable;
3431}
3432
3433/// \brief Determine whether one of the given reference bindings is better
3434/// than the other based on what kind of bindings they are.
3435static bool isBetterReferenceBindingKind(const StandardConversionSequence &SCS1,
3436                                       const StandardConversionSequence &SCS2) {
3437  // C++0x [over.ics.rank]p3b4:
3438  //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
3439  //      implicit object parameter of a non-static member function declared
3440  //      without a ref-qualifier, and *either* S1 binds an rvalue reference
3441  //      to an rvalue and S2 binds an lvalue reference *or S1 binds an
3442  //      lvalue reference to a function lvalue and S2 binds an rvalue
3443  //      reference*.
3444  //
3445  // FIXME: Rvalue references. We're going rogue with the above edits,
3446  // because the semantics in the current C++0x working paper (N3225 at the
3447  // time of this writing) break the standard definition of std::forward
3448  // and std::reference_wrapper when dealing with references to functions.
3449  // Proposed wording changes submitted to CWG for consideration.
3450  if (SCS1.BindsImplicitObjectArgumentWithoutRefQualifier ||
3451      SCS2.BindsImplicitObjectArgumentWithoutRefQualifier)
3452    return false;
3453
3454  return (!SCS1.IsLvalueReference && SCS1.BindsToRvalue &&
3455          SCS2.IsLvalueReference) ||
3456         (SCS1.IsLvalueReference && SCS1.BindsToFunctionLvalue &&
3457          !SCS2.IsLvalueReference);
3458}
3459
3460/// CompareStandardConversionSequences - Compare two standard
3461/// conversion sequences to determine whether one is better than the
3462/// other or if they are indistinguishable (C++ 13.3.3.2p3).
3463static ImplicitConversionSequence::CompareKind
3464CompareStandardConversionSequences(Sema &S,
3465                                   const StandardConversionSequence& SCS1,
3466                                   const StandardConversionSequence& SCS2)
3467{
3468  // Standard conversion sequence S1 is a better conversion sequence
3469  // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
3470
3471  //  -- S1 is a proper subsequence of S2 (comparing the conversion
3472  //     sequences in the canonical form defined by 13.3.3.1.1,
3473  //     excluding any Lvalue Transformation; the identity conversion
3474  //     sequence is considered to be a subsequence of any
3475  //     non-identity conversion sequence) or, if not that,
3476  if (ImplicitConversionSequence::CompareKind CK
3477        = compareStandardConversionSubsets(S.Context, SCS1, SCS2))
3478    return CK;
3479
3480  //  -- the rank of S1 is better than the rank of S2 (by the rules
3481  //     defined below), or, if not that,
3482  ImplicitConversionRank Rank1 = SCS1.getRank();
3483  ImplicitConversionRank Rank2 = SCS2.getRank();
3484  if (Rank1 < Rank2)
3485    return ImplicitConversionSequence::Better;
3486  else if (Rank2 < Rank1)
3487    return ImplicitConversionSequence::Worse;
3488
3489  // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
3490  // are indistinguishable unless one of the following rules
3491  // applies:
3492
3493  //   A conversion that is not a conversion of a pointer, or
3494  //   pointer to member, to bool is better than another conversion
3495  //   that is such a conversion.
3496  if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
3497    return SCS2.isPointerConversionToBool()
3498             ? ImplicitConversionSequence::Better
3499             : ImplicitConversionSequence::Worse;
3500
3501  // C++ [over.ics.rank]p4b2:
3502  //
3503  //   If class B is derived directly or indirectly from class A,
3504  //   conversion of B* to A* is better than conversion of B* to
3505  //   void*, and conversion of A* to void* is better than conversion
3506  //   of B* to void*.
3507  bool SCS1ConvertsToVoid
3508    = SCS1.isPointerConversionToVoidPointer(S.Context);
3509  bool SCS2ConvertsToVoid
3510    = SCS2.isPointerConversionToVoidPointer(S.Context);
3511  if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
3512    // Exactly one of the conversion sequences is a conversion to
3513    // a void pointer; it's the worse conversion.
3514    return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
3515                              : ImplicitConversionSequence::Worse;
3516  } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
3517    // Neither conversion sequence converts to a void pointer; compare
3518    // their derived-to-base conversions.
3519    if (ImplicitConversionSequence::CompareKind DerivedCK
3520          = CompareDerivedToBaseConversions(S, SCS1, SCS2))
3521      return DerivedCK;
3522  } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid &&
3523             !S.Context.hasSameType(SCS1.getFromType(), SCS2.getFromType())) {
3524    // Both conversion sequences are conversions to void
3525    // pointers. Compare the source types to determine if there's an
3526    // inheritance relationship in their sources.
3527    QualType FromType1 = SCS1.getFromType();
3528    QualType FromType2 = SCS2.getFromType();
3529
3530    // Adjust the types we're converting from via the array-to-pointer
3531    // conversion, if we need to.
3532    if (SCS1.First == ICK_Array_To_Pointer)
3533      FromType1 = S.Context.getArrayDecayedType(FromType1);
3534    if (SCS2.First == ICK_Array_To_Pointer)
3535      FromType2 = S.Context.getArrayDecayedType(FromType2);
3536
3537    QualType FromPointee1 = FromType1->getPointeeType().getUnqualifiedType();
3538    QualType FromPointee2 = FromType2->getPointeeType().getUnqualifiedType();
3539
3540    if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3541      return ImplicitConversionSequence::Better;
3542    else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3543      return ImplicitConversionSequence::Worse;
3544
3545    // Objective-C++: If one interface is more specific than the
3546    // other, it is the better one.
3547    const ObjCObjectPointerType* FromObjCPtr1
3548      = FromType1->getAs<ObjCObjectPointerType>();
3549    const ObjCObjectPointerType* FromObjCPtr2
3550      = FromType2->getAs<ObjCObjectPointerType>();
3551    if (FromObjCPtr1 && FromObjCPtr2) {
3552      bool AssignLeft = S.Context.canAssignObjCInterfaces(FromObjCPtr1,
3553                                                          FromObjCPtr2);
3554      bool AssignRight = S.Context.canAssignObjCInterfaces(FromObjCPtr2,
3555                                                           FromObjCPtr1);
3556      if (AssignLeft != AssignRight) {
3557        return AssignLeft? ImplicitConversionSequence::Better
3558                         : ImplicitConversionSequence::Worse;
3559      }
3560    }
3561  }
3562
3563  // Compare based on qualification conversions (C++ 13.3.3.2p3,
3564  // bullet 3).
3565  if (ImplicitConversionSequence::CompareKind QualCK
3566        = CompareQualificationConversions(S, SCS1, SCS2))
3567    return QualCK;
3568
3569  if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
3570    // Check for a better reference binding based on the kind of bindings.
3571    if (isBetterReferenceBindingKind(SCS1, SCS2))
3572      return ImplicitConversionSequence::Better;
3573    else if (isBetterReferenceBindingKind(SCS2, SCS1))
3574      return ImplicitConversionSequence::Worse;
3575
3576    // C++ [over.ics.rank]p3b4:
3577    //   -- S1 and S2 are reference bindings (8.5.3), and the types to
3578    //      which the references refer are the same type except for
3579    //      top-level cv-qualifiers, and the type to which the reference
3580    //      initialized by S2 refers is more cv-qualified than the type
3581    //      to which the reference initialized by S1 refers.
3582    QualType T1 = SCS1.getToType(2);
3583    QualType T2 = SCS2.getToType(2);
3584    T1 = S.Context.getCanonicalType(T1);
3585    T2 = S.Context.getCanonicalType(T2);
3586    Qualifiers T1Quals, T2Quals;
3587    QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3588    QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3589    if (UnqualT1 == UnqualT2) {
3590      // Objective-C++ ARC: If the references refer to objects with different
3591      // lifetimes, prefer bindings that don't change lifetime.
3592      if (SCS1.ObjCLifetimeConversionBinding !=
3593                                          SCS2.ObjCLifetimeConversionBinding) {
3594        return SCS1.ObjCLifetimeConversionBinding
3595                                           ? ImplicitConversionSequence::Worse
3596                                           : ImplicitConversionSequence::Better;
3597      }
3598
3599      // If the type is an array type, promote the element qualifiers to the
3600      // type for comparison.
3601      if (isa<ArrayType>(T1) && T1Quals)
3602        T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3603      if (isa<ArrayType>(T2) && T2Quals)
3604        T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3605      if (T2.isMoreQualifiedThan(T1))
3606        return ImplicitConversionSequence::Better;
3607      else if (T1.isMoreQualifiedThan(T2))
3608        return ImplicitConversionSequence::Worse;
3609    }
3610  }
3611
3612  // In Microsoft mode, prefer an integral conversion to a
3613  // floating-to-integral conversion if the integral conversion
3614  // is between types of the same size.
3615  // For example:
3616  // void f(float);
3617  // void f(int);
3618  // int main {
3619  //    long a;
3620  //    f(a);
3621  // }
3622  // Here, MSVC will call f(int) instead of generating a compile error
3623  // as clang will do in standard mode.
3624  if (S.getLangOpts().MicrosoftMode &&
3625      SCS1.Second == ICK_Integral_Conversion &&
3626      SCS2.Second == ICK_Floating_Integral &&
3627      S.Context.getTypeSize(SCS1.getFromType()) ==
3628      S.Context.getTypeSize(SCS1.getToType(2)))
3629    return ImplicitConversionSequence::Better;
3630
3631  return ImplicitConversionSequence::Indistinguishable;
3632}
3633
3634/// CompareQualificationConversions - Compares two standard conversion
3635/// sequences to determine whether they can be ranked based on their
3636/// qualification conversions (C++ 13.3.3.2p3 bullet 3).
3637ImplicitConversionSequence::CompareKind
3638CompareQualificationConversions(Sema &S,
3639                                const StandardConversionSequence& SCS1,
3640                                const StandardConversionSequence& SCS2) {
3641  // C++ 13.3.3.2p3:
3642  //  -- S1 and S2 differ only in their qualification conversion and
3643  //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
3644  //     cv-qualification signature of type T1 is a proper subset of
3645  //     the cv-qualification signature of type T2, and S1 is not the
3646  //     deprecated string literal array-to-pointer conversion (4.2).
3647  if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
3648      SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
3649    return ImplicitConversionSequence::Indistinguishable;
3650
3651  // FIXME: the example in the standard doesn't use a qualification
3652  // conversion (!)
3653  QualType T1 = SCS1.getToType(2);
3654  QualType T2 = SCS2.getToType(2);
3655  T1 = S.Context.getCanonicalType(T1);
3656  T2 = S.Context.getCanonicalType(T2);
3657  Qualifiers T1Quals, T2Quals;
3658  QualType UnqualT1 = S.Context.getUnqualifiedArrayType(T1, T1Quals);
3659  QualType UnqualT2 = S.Context.getUnqualifiedArrayType(T2, T2Quals);
3660
3661  // If the types are the same, we won't learn anything by unwrapped
3662  // them.
3663  if (UnqualT1 == UnqualT2)
3664    return ImplicitConversionSequence::Indistinguishable;
3665
3666  // If the type is an array type, promote the element qualifiers to the type
3667  // for comparison.
3668  if (isa<ArrayType>(T1) && T1Quals)
3669    T1 = S.Context.getQualifiedType(UnqualT1, T1Quals);
3670  if (isa<ArrayType>(T2) && T2Quals)
3671    T2 = S.Context.getQualifiedType(UnqualT2, T2Quals);
3672
3673  ImplicitConversionSequence::CompareKind Result
3674    = ImplicitConversionSequence::Indistinguishable;
3675
3676  // Objective-C++ ARC:
3677  //   Prefer qualification conversions not involving a change in lifetime
3678  //   to qualification conversions that do not change lifetime.
3679  if (SCS1.QualificationIncludesObjCLifetime !=
3680                                      SCS2.QualificationIncludesObjCLifetime) {
3681    Result = SCS1.QualificationIncludesObjCLifetime
3682               ? ImplicitConversionSequence::Worse
3683               : ImplicitConversionSequence::Better;
3684  }
3685
3686  while (S.Context.UnwrapSimilarPointerTypes(T1, T2)) {
3687    // Within each iteration of the loop, we check the qualifiers to
3688    // determine if this still looks like a qualification
3689    // conversion. Then, if all is well, we unwrap one more level of
3690    // pointers or pointers-to-members and do it all again
3691    // until there are no more pointers or pointers-to-members left
3692    // to unwrap. This essentially mimics what
3693    // IsQualificationConversion does, but here we're checking for a
3694    // strict subset of qualifiers.
3695    if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
3696      // The qualifiers are the same, so this doesn't tell us anything
3697      // about how the sequences rank.
3698      ;
3699    else if (T2.isMoreQualifiedThan(T1)) {
3700      // T1 has fewer qualifiers, so it could be the better sequence.
3701      if (Result == ImplicitConversionSequence::Worse)
3702        // Neither has qualifiers that are a subset of the other's
3703        // qualifiers.
3704        return ImplicitConversionSequence::Indistinguishable;
3705
3706      Result = ImplicitConversionSequence::Better;
3707    } else if (T1.isMoreQualifiedThan(T2)) {
3708      // T2 has fewer qualifiers, so it could be the better sequence.
3709      if (Result == ImplicitConversionSequence::Better)
3710        // Neither has qualifiers that are a subset of the other's
3711        // qualifiers.
3712        return ImplicitConversionSequence::Indistinguishable;
3713
3714      Result = ImplicitConversionSequence::Worse;
3715    } else {
3716      // Qualifiers are disjoint.
3717      return ImplicitConversionSequence::Indistinguishable;
3718    }
3719
3720    // If the types after this point are equivalent, we're done.
3721    if (S.Context.hasSameUnqualifiedType(T1, T2))
3722      break;
3723  }
3724
3725  // Check that the winning standard conversion sequence isn't using
3726  // the deprecated string literal array to pointer conversion.
3727  switch (Result) {
3728  case ImplicitConversionSequence::Better:
3729    if (SCS1.DeprecatedStringLiteralToCharPtr)
3730      Result = ImplicitConversionSequence::Indistinguishable;
3731    break;
3732
3733  case ImplicitConversionSequence::Indistinguishable:
3734    break;
3735
3736  case ImplicitConversionSequence::Worse:
3737    if (SCS2.DeprecatedStringLiteralToCharPtr)
3738      Result = ImplicitConversionSequence::Indistinguishable;
3739    break;
3740  }
3741
3742  return Result;
3743}
3744
3745/// CompareDerivedToBaseConversions - Compares two standard conversion
3746/// sequences to determine whether they can be ranked based on their
3747/// various kinds of derived-to-base conversions (C++
3748/// [over.ics.rank]p4b3).  As part of these checks, we also look at
3749/// conversions between Objective-C interface types.
3750ImplicitConversionSequence::CompareKind
3751CompareDerivedToBaseConversions(Sema &S,
3752                                const StandardConversionSequence& SCS1,
3753                                const StandardConversionSequence& SCS2) {
3754  QualType FromType1 = SCS1.getFromType();
3755  QualType ToType1 = SCS1.getToType(1);
3756  QualType FromType2 = SCS2.getFromType();
3757  QualType ToType2 = SCS2.getToType(1);
3758
3759  // Adjust the types we're converting from via the array-to-pointer
3760  // conversion, if we need to.
3761  if (SCS1.First == ICK_Array_To_Pointer)
3762    FromType1 = S.Context.getArrayDecayedType(FromType1);
3763  if (SCS2.First == ICK_Array_To_Pointer)
3764    FromType2 = S.Context.getArrayDecayedType(FromType2);
3765
3766  // Canonicalize all of the types.
3767  FromType1 = S.Context.getCanonicalType(FromType1);
3768  ToType1 = S.Context.getCanonicalType(ToType1);
3769  FromType2 = S.Context.getCanonicalType(FromType2);
3770  ToType2 = S.Context.getCanonicalType(ToType2);
3771
3772  // C++ [over.ics.rank]p4b3:
3773  //
3774  //   If class B is derived directly or indirectly from class A and
3775  //   class C is derived directly or indirectly from B,
3776  //
3777  // Compare based on pointer conversions.
3778  if (SCS1.Second == ICK_Pointer_Conversion &&
3779      SCS2.Second == ICK_Pointer_Conversion &&
3780      /*FIXME: Remove if Objective-C id conversions get their own rank*/
3781      FromType1->isPointerType() && FromType2->isPointerType() &&
3782      ToType1->isPointerType() && ToType2->isPointerType()) {
3783    QualType FromPointee1
3784      = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3785    QualType ToPointee1
3786      = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3787    QualType FromPointee2
3788      = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3789    QualType ToPointee2
3790      = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
3791
3792    //   -- conversion of C* to B* is better than conversion of C* to A*,
3793    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3794      if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3795        return ImplicitConversionSequence::Better;
3796      else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3797        return ImplicitConversionSequence::Worse;
3798    }
3799
3800    //   -- conversion of B* to A* is better than conversion of C* to A*,
3801    if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
3802      if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3803        return ImplicitConversionSequence::Better;
3804      else if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3805        return ImplicitConversionSequence::Worse;
3806    }
3807  } else if (SCS1.Second == ICK_Pointer_Conversion &&
3808             SCS2.Second == ICK_Pointer_Conversion) {
3809    const ObjCObjectPointerType *FromPtr1
3810      = FromType1->getAs<ObjCObjectPointerType>();
3811    const ObjCObjectPointerType *FromPtr2
3812      = FromType2->getAs<ObjCObjectPointerType>();
3813    const ObjCObjectPointerType *ToPtr1
3814      = ToType1->getAs<ObjCObjectPointerType>();
3815    const ObjCObjectPointerType *ToPtr2
3816      = ToType2->getAs<ObjCObjectPointerType>();
3817
3818    if (FromPtr1 && FromPtr2 && ToPtr1 && ToPtr2) {
3819      // Apply the same conversion ranking rules for Objective-C pointer types
3820      // that we do for C++ pointers to class types. However, we employ the
3821      // Objective-C pseudo-subtyping relationship used for assignment of
3822      // Objective-C pointer types.
3823      bool FromAssignLeft
3824        = S.Context.canAssignObjCInterfaces(FromPtr1, FromPtr2);
3825      bool FromAssignRight
3826        = S.Context.canAssignObjCInterfaces(FromPtr2, FromPtr1);
3827      bool ToAssignLeft
3828        = S.Context.canAssignObjCInterfaces(ToPtr1, ToPtr2);
3829      bool ToAssignRight
3830        = S.Context.canAssignObjCInterfaces(ToPtr2, ToPtr1);
3831
3832      // A conversion to an a non-id object pointer type or qualified 'id'
3833      // type is better than a conversion to 'id'.
3834      if (ToPtr1->isObjCIdType() &&
3835          (ToPtr2->isObjCQualifiedIdType() || ToPtr2->getInterfaceDecl()))
3836        return ImplicitConversionSequence::Worse;
3837      if (ToPtr2->isObjCIdType() &&
3838          (ToPtr1->isObjCQualifiedIdType() || ToPtr1->getInterfaceDecl()))
3839        return ImplicitConversionSequence::Better;
3840
3841      // A conversion to a non-id object pointer type is better than a
3842      // conversion to a qualified 'id' type
3843      if (ToPtr1->isObjCQualifiedIdType() && ToPtr2->getInterfaceDecl())
3844        return ImplicitConversionSequence::Worse;
3845      if (ToPtr2->isObjCQualifiedIdType() && ToPtr1->getInterfaceDecl())
3846        return ImplicitConversionSequence::Better;
3847
3848      // A conversion to an a non-Class object pointer type or qualified 'Class'
3849      // type is better than a conversion to 'Class'.
3850      if (ToPtr1->isObjCClassType() &&
3851          (ToPtr2->isObjCQualifiedClassType() || ToPtr2->getInterfaceDecl()))
3852        return ImplicitConversionSequence::Worse;
3853      if (ToPtr2->isObjCClassType() &&
3854          (ToPtr1->isObjCQualifiedClassType() || ToPtr1->getInterfaceDecl()))
3855        return ImplicitConversionSequence::Better;
3856
3857      // A conversion to a non-Class object pointer type is better than a
3858      // conversion to a qualified 'Class' type.
3859      if (ToPtr1->isObjCQualifiedClassType() && ToPtr2->getInterfaceDecl())
3860        return ImplicitConversionSequence::Worse;
3861      if (ToPtr2->isObjCQualifiedClassType() && ToPtr1->getInterfaceDecl())
3862        return ImplicitConversionSequence::Better;
3863
3864      //   -- "conversion of C* to B* is better than conversion of C* to A*,"
3865      if (S.Context.hasSameType(FromType1, FromType2) &&
3866          !FromPtr1->isObjCIdType() && !FromPtr1->isObjCClassType() &&
3867          (ToAssignLeft != ToAssignRight))
3868        return ToAssignLeft? ImplicitConversionSequence::Worse
3869                           : ImplicitConversionSequence::Better;
3870
3871      //   -- "conversion of B* to A* is better than conversion of C* to A*,"
3872      if (S.Context.hasSameUnqualifiedType(ToType1, ToType2) &&
3873          (FromAssignLeft != FromAssignRight))
3874        return FromAssignLeft? ImplicitConversionSequence::Better
3875        : ImplicitConversionSequence::Worse;
3876    }
3877  }
3878
3879  // Ranking of member-pointer types.
3880  if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
3881      FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
3882      ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
3883    const MemberPointerType * FromMemPointer1 =
3884                                        FromType1->getAs<MemberPointerType>();
3885    const MemberPointerType * ToMemPointer1 =
3886                                          ToType1->getAs<MemberPointerType>();
3887    const MemberPointerType * FromMemPointer2 =
3888                                          FromType2->getAs<MemberPointerType>();
3889    const MemberPointerType * ToMemPointer2 =
3890                                          ToType2->getAs<MemberPointerType>();
3891    const Type *FromPointeeType1 = FromMemPointer1->getClass();
3892    const Type *ToPointeeType1 = ToMemPointer1->getClass();
3893    const Type *FromPointeeType2 = FromMemPointer2->getClass();
3894    const Type *ToPointeeType2 = ToMemPointer2->getClass();
3895    QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
3896    QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
3897    QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
3898    QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
3899    // conversion of A::* to B::* is better than conversion of A::* to C::*,
3900    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
3901      if (S.IsDerivedFrom(ToPointee1, ToPointee2))
3902        return ImplicitConversionSequence::Worse;
3903      else if (S.IsDerivedFrom(ToPointee2, ToPointee1))
3904        return ImplicitConversionSequence::Better;
3905    }
3906    // conversion of B::* to C::* is better than conversion of A::* to C::*
3907    if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
3908      if (S.IsDerivedFrom(FromPointee1, FromPointee2))
3909        return ImplicitConversionSequence::Better;
3910      else if (S.IsDerivedFrom(FromPointee2, FromPointee1))
3911        return ImplicitConversionSequence::Worse;
3912    }
3913  }
3914
3915  if (SCS1.Second == ICK_Derived_To_Base) {
3916    //   -- conversion of C to B is better than conversion of C to A,
3917    //   -- binding of an expression of type C to a reference of type
3918    //      B& is better than binding an expression of type C to a
3919    //      reference of type A&,
3920    if (S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3921        !S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3922      if (S.IsDerivedFrom(ToType1, ToType2))
3923        return ImplicitConversionSequence::Better;
3924      else if (S.IsDerivedFrom(ToType2, ToType1))
3925        return ImplicitConversionSequence::Worse;
3926    }
3927
3928    //   -- conversion of B to A is better than conversion of C to A.
3929    //   -- binding of an expression of type B to a reference of type
3930    //      A& is better than binding an expression of type C to a
3931    //      reference of type A&,
3932    if (!S.Context.hasSameUnqualifiedType(FromType1, FromType2) &&
3933        S.Context.hasSameUnqualifiedType(ToType1, ToType2)) {
3934      if (S.IsDerivedFrom(FromType2, FromType1))
3935        return ImplicitConversionSequence::Better;
3936      else if (S.IsDerivedFrom(FromType1, FromType2))
3937        return ImplicitConversionSequence::Worse;
3938    }
3939  }
3940
3941  return ImplicitConversionSequence::Indistinguishable;
3942}
3943
3944/// \brief Determine whether the given type is valid, e.g., it is not an invalid
3945/// C++ class.
3946static bool isTypeValid(QualType T) {
3947  if (CXXRecordDecl *Record = T->getAsCXXRecordDecl())
3948    return !Record->isInvalidDecl();
3949
3950  return true;
3951}
3952
3953/// CompareReferenceRelationship - Compare the two types T1 and T2 to
3954/// determine whether they are reference-related,
3955/// reference-compatible, reference-compatible with added
3956/// qualification, or incompatible, for use in C++ initialization by
3957/// reference (C++ [dcl.ref.init]p4). Neither type can be a reference
3958/// type, and the first type (T1) is the pointee type of the reference
3959/// type being initialized.
3960Sema::ReferenceCompareResult
3961Sema::CompareReferenceRelationship(SourceLocation Loc,
3962                                   QualType OrigT1, QualType OrigT2,
3963                                   bool &DerivedToBase,
3964                                   bool &ObjCConversion,
3965                                   bool &ObjCLifetimeConversion) {
3966  assert(!OrigT1->isReferenceType() &&
3967    "T1 must be the pointee type of the reference type");
3968  assert(!OrigT2->isReferenceType() && "T2 cannot be a reference type");
3969
3970  QualType T1 = Context.getCanonicalType(OrigT1);
3971  QualType T2 = Context.getCanonicalType(OrigT2);
3972  Qualifiers T1Quals, T2Quals;
3973  QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
3974  QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
3975
3976  // C++ [dcl.init.ref]p4:
3977  //   Given types "cv1 T1" and "cv2 T2," "cv1 T1" is
3978  //   reference-related to "cv2 T2" if T1 is the same type as T2, or
3979  //   T1 is a base class of T2.
3980  DerivedToBase = false;
3981  ObjCConversion = false;
3982  ObjCLifetimeConversion = false;
3983  if (UnqualT1 == UnqualT2) {
3984    // Nothing to do.
3985  } else if (!RequireCompleteType(Loc, OrigT2, 0) &&
3986             isTypeValid(UnqualT1) && isTypeValid(UnqualT2) &&
3987             IsDerivedFrom(UnqualT2, UnqualT1))
3988    DerivedToBase = true;
3989  else if (UnqualT1->isObjCObjectOrInterfaceType() &&
3990           UnqualT2->isObjCObjectOrInterfaceType() &&
3991           Context.canBindObjCObjectType(UnqualT1, UnqualT2))
3992    ObjCConversion = true;
3993  else
3994    return Ref_Incompatible;
3995
3996  // At this point, we know that T1 and T2 are reference-related (at
3997  // least).
3998
3999  // If the type is an array type, promote the element qualifiers to the type
4000  // for comparison.
4001  if (isa<ArrayType>(T1) && T1Quals)
4002    T1 = Context.getQualifiedType(UnqualT1, T1Quals);
4003  if (isa<ArrayType>(T2) && T2Quals)
4004    T2 = Context.getQualifiedType(UnqualT2, T2Quals);
4005
4006  // C++ [dcl.init.ref]p4:
4007  //   "cv1 T1" is reference-compatible with "cv2 T2" if T1 is
4008  //   reference-related to T2 and cv1 is the same cv-qualification
4009  //   as, or greater cv-qualification than, cv2. For purposes of
4010  //   overload resolution, cases for which cv1 is greater
4011  //   cv-qualification than cv2 are identified as
4012  //   reference-compatible with added qualification (see 13.3.3.2).
4013  //
4014  // Note that we also require equivalence of Objective-C GC and address-space
4015  // qualifiers when performing these computations, so that e.g., an int in
4016  // address space 1 is not reference-compatible with an int in address
4017  // space 2.
4018  if (T1Quals.getObjCLifetime() != T2Quals.getObjCLifetime() &&
4019      T1Quals.compatiblyIncludesObjCLifetime(T2Quals)) {
4020    T1Quals.removeObjCLifetime();
4021    T2Quals.removeObjCLifetime();
4022    ObjCLifetimeConversion = true;
4023  }
4024
4025  if (T1Quals == T2Quals)
4026    return Ref_Compatible;
4027  else if (T1Quals.compatiblyIncludes(T2Quals))
4028    return Ref_Compatible_With_Added_Qualification;
4029  else
4030    return Ref_Related;
4031}
4032
4033/// \brief Look for a user-defined conversion to an value reference-compatible
4034///        with DeclType. Return true if something definite is found.
4035static bool
4036FindConversionForRefInit(Sema &S, ImplicitConversionSequence &ICS,
4037                         QualType DeclType, SourceLocation DeclLoc,
4038                         Expr *Init, QualType T2, bool AllowRvalues,
4039                         bool AllowExplicit) {
4040  assert(T2->isRecordType() && "Can only find conversions of record types.");
4041  CXXRecordDecl *T2RecordDecl
4042    = dyn_cast<CXXRecordDecl>(T2->getAs<RecordType>()->getDecl());
4043
4044  OverloadCandidateSet CandidateSet(DeclLoc);
4045  std::pair<CXXRecordDecl::conversion_iterator,
4046            CXXRecordDecl::conversion_iterator>
4047    Conversions = T2RecordDecl->getVisibleConversionFunctions();
4048  for (CXXRecordDecl::conversion_iterator
4049         I = Conversions.first, E = Conversions.second; I != E; ++I) {
4050    NamedDecl *D = *I;
4051    CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(D->getDeclContext());
4052    if (isa<UsingShadowDecl>(D))
4053      D = cast<UsingShadowDecl>(D)->getTargetDecl();
4054
4055    FunctionTemplateDecl *ConvTemplate
4056      = dyn_cast<FunctionTemplateDecl>(D);
4057    CXXConversionDecl *Conv;
4058    if (ConvTemplate)
4059      Conv = cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
4060    else
4061      Conv = cast<CXXConversionDecl>(D);
4062
4063    // If this is an explicit conversion, and we're not allowed to consider
4064    // explicit conversions, skip it.
4065    if (!AllowExplicit && Conv->isExplicit())
4066      continue;
4067
4068    if (AllowRvalues) {
4069      bool DerivedToBase = false;
4070      bool ObjCConversion = false;
4071      bool ObjCLifetimeConversion = false;
4072
4073      // If we are initializing an rvalue reference, don't permit conversion
4074      // functions that return lvalues.
4075      if (!ConvTemplate && DeclType->isRValueReferenceType()) {
4076        const ReferenceType *RefType
4077          = Conv->getConversionType()->getAs<LValueReferenceType>();
4078        if (RefType && !RefType->getPointeeType()->isFunctionType())
4079          continue;
4080      }
4081
4082      if (!ConvTemplate &&
4083          S.CompareReferenceRelationship(
4084            DeclLoc,
4085            Conv->getConversionType().getNonReferenceType()
4086              .getUnqualifiedType(),
4087            DeclType.getNonReferenceType().getUnqualifiedType(),
4088            DerivedToBase, ObjCConversion, ObjCLifetimeConversion) ==
4089          Sema::Ref_Incompatible)
4090        continue;
4091    } else {
4092      // If the conversion function doesn't return a reference type,
4093      // it can't be considered for this conversion. An rvalue reference
4094      // is only acceptable if its referencee is a function type.
4095
4096      const ReferenceType *RefType =
4097        Conv->getConversionType()->getAs<ReferenceType>();
4098      if (!RefType ||
4099          (!RefType->isLValueReferenceType() &&
4100           !RefType->getPointeeType()->isFunctionType()))
4101        continue;
4102    }
4103
4104    if (ConvTemplate)
4105      S.AddTemplateConversionCandidate(ConvTemplate, I.getPair(), ActingDC,
4106                                       Init, DeclType, CandidateSet);
4107    else
4108      S.AddConversionCandidate(Conv, I.getPair(), ActingDC, Init,
4109                               DeclType, CandidateSet);
4110  }
4111
4112  bool HadMultipleCandidates = (CandidateSet.size() > 1);
4113
4114  OverloadCandidateSet::iterator Best;
4115  switch (CandidateSet.BestViableFunction(S, DeclLoc, Best, true)) {
4116  case OR_Success:
4117    // C++ [over.ics.ref]p1:
4118    //
4119    //   [...] If the parameter binds directly to the result of
4120    //   applying a conversion function to the argument
4121    //   expression, the implicit conversion sequence is a
4122    //   user-defined conversion sequence (13.3.3.1.2), with the
4123    //   second standard conversion sequence either an identity
4124    //   conversion or, if the conversion function returns an
4125    //   entity of a type that is a derived class of the parameter
4126    //   type, a derived-to-base Conversion.
4127    if (!Best->FinalConversion.DirectBinding)
4128      return false;
4129
4130    ICS.setUserDefined();
4131    ICS.UserDefined.Before = Best->Conversions[0].Standard;
4132    ICS.UserDefined.After = Best->FinalConversion;
4133    ICS.UserDefined.HadMultipleCandidates = HadMultipleCandidates;
4134    ICS.UserDefined.ConversionFunction = Best->Function;
4135    ICS.UserDefined.FoundConversionFunction = Best->FoundDecl;
4136    ICS.UserDefined.EllipsisConversion = false;
4137    assert(ICS.UserDefined.After.ReferenceBinding &&
4138           ICS.UserDefined.After.DirectBinding &&
4139           "Expected a direct reference binding!");
4140    return true;
4141
4142  case OR_Ambiguous:
4143    ICS.setAmbiguous();
4144    for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4145         Cand != CandidateSet.end(); ++Cand)
4146      if (Cand->Viable)
4147        ICS.Ambiguous.addConversion(Cand->Function);
4148    return true;
4149
4150  case OR_No_Viable_Function:
4151  case OR_Deleted:
4152    // There was no suitable conversion, or we found a deleted
4153    // conversion; continue with other checks.
4154    return false;
4155  }
4156
4157  llvm_unreachable("Invalid OverloadResult!");
4158}
4159
4160/// \brief Compute an implicit conversion sequence for reference
4161/// initialization.
4162static ImplicitConversionSequence
4163TryReferenceInit(Sema &S, Expr *Init, QualType DeclType,
4164                 SourceLocation DeclLoc,
4165                 bool SuppressUserConversions,
4166                 bool AllowExplicit) {
4167  assert(DeclType->isReferenceType() && "Reference init needs a reference");
4168
4169  // Most paths end in a failed conversion.
4170  ImplicitConversionSequence ICS;
4171  ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4172
4173  QualType T1 = DeclType->getAs<ReferenceType>()->getPointeeType();
4174  QualType T2 = Init->getType();
4175
4176  // If the initializer is the address of an overloaded function, try
4177  // to resolve the overloaded function. If all goes well, T2 is the
4178  // type of the resulting function.
4179  if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4180    DeclAccessPair Found;
4181    if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(Init, DeclType,
4182                                                                false, Found))
4183      T2 = Fn->getType();
4184  }
4185
4186  // Compute some basic properties of the types and the initializer.
4187  bool isRValRef = DeclType->isRValueReferenceType();
4188  bool DerivedToBase = false;
4189  bool ObjCConversion = false;
4190  bool ObjCLifetimeConversion = false;
4191  Expr::Classification InitCategory = Init->Classify(S.Context);
4192  Sema::ReferenceCompareResult RefRelationship
4193    = S.CompareReferenceRelationship(DeclLoc, T1, T2, DerivedToBase,
4194                                     ObjCConversion, ObjCLifetimeConversion);
4195
4196
4197  // C++0x [dcl.init.ref]p5:
4198  //   A reference to type "cv1 T1" is initialized by an expression
4199  //   of type "cv2 T2" as follows:
4200
4201  //     -- If reference is an lvalue reference and the initializer expression
4202  if (!isRValRef) {
4203    //     -- is an lvalue (but is not a bit-field), and "cv1 T1" is
4204    //        reference-compatible with "cv2 T2," or
4205    //
4206    // Per C++ [over.ics.ref]p4, we don't check the bit-field property here.
4207    if (InitCategory.isLValue() &&
4208        RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification) {
4209      // C++ [over.ics.ref]p1:
4210      //   When a parameter of reference type binds directly (8.5.3)
4211      //   to an argument expression, the implicit conversion sequence
4212      //   is the identity conversion, unless the argument expression
4213      //   has a type that is a derived class of the parameter type,
4214      //   in which case the implicit conversion sequence is a
4215      //   derived-to-base Conversion (13.3.3.1).
4216      ICS.setStandard();
4217      ICS.Standard.First = ICK_Identity;
4218      ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4219                         : ObjCConversion? ICK_Compatible_Conversion
4220                         : ICK_Identity;
4221      ICS.Standard.Third = ICK_Identity;
4222      ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4223      ICS.Standard.setToType(0, T2);
4224      ICS.Standard.setToType(1, T1);
4225      ICS.Standard.setToType(2, T1);
4226      ICS.Standard.ReferenceBinding = true;
4227      ICS.Standard.DirectBinding = true;
4228      ICS.Standard.IsLvalueReference = !isRValRef;
4229      ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4230      ICS.Standard.BindsToRvalue = false;
4231      ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4232      ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4233      ICS.Standard.CopyConstructor = 0;
4234
4235      // Nothing more to do: the inaccessibility/ambiguity check for
4236      // derived-to-base conversions is suppressed when we're
4237      // computing the implicit conversion sequence (C++
4238      // [over.best.ics]p2).
4239      return ICS;
4240    }
4241
4242    //       -- has a class type (i.e., T2 is a class type), where T1 is
4243    //          not reference-related to T2, and can be implicitly
4244    //          converted to an lvalue of type "cv3 T3," where "cv1 T1"
4245    //          is reference-compatible with "cv3 T3" 92) (this
4246    //          conversion is selected by enumerating the applicable
4247    //          conversion functions (13.3.1.6) and choosing the best
4248    //          one through overload resolution (13.3)),
4249    if (!SuppressUserConversions && T2->isRecordType() &&
4250        !S.RequireCompleteType(DeclLoc, T2, 0) &&
4251        RefRelationship == Sema::Ref_Incompatible) {
4252      if (FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4253                                   Init, T2, /*AllowRvalues=*/false,
4254                                   AllowExplicit))
4255        return ICS;
4256    }
4257  }
4258
4259  //     -- Otherwise, the reference shall be an lvalue reference to a
4260  //        non-volatile const type (i.e., cv1 shall be const), or the reference
4261  //        shall be an rvalue reference.
4262  //
4263  // We actually handle one oddity of C++ [over.ics.ref] at this
4264  // point, which is that, due to p2 (which short-circuits reference
4265  // binding by only attempting a simple conversion for non-direct
4266  // bindings) and p3's strange wording, we allow a const volatile
4267  // reference to bind to an rvalue. Hence the check for the presence
4268  // of "const" rather than checking for "const" being the only
4269  // qualifier.
4270  // This is also the point where rvalue references and lvalue inits no longer
4271  // go together.
4272  if (!isRValRef && (!T1.isConstQualified() || T1.isVolatileQualified()))
4273    return ICS;
4274
4275  //       -- If the initializer expression
4276  //
4277  //            -- is an xvalue, class prvalue, array prvalue or function
4278  //               lvalue and "cv1 T1" is reference-compatible with "cv2 T2", or
4279  if (RefRelationship >= Sema::Ref_Compatible_With_Added_Qualification &&
4280      (InitCategory.isXValue() ||
4281      (InitCategory.isPRValue() && (T2->isRecordType() || T2->isArrayType())) ||
4282      (InitCategory.isLValue() && T2->isFunctionType()))) {
4283    ICS.setStandard();
4284    ICS.Standard.First = ICK_Identity;
4285    ICS.Standard.Second = DerivedToBase? ICK_Derived_To_Base
4286                      : ObjCConversion? ICK_Compatible_Conversion
4287                      : ICK_Identity;
4288    ICS.Standard.Third = ICK_Identity;
4289    ICS.Standard.FromTypePtr = T2.getAsOpaquePtr();
4290    ICS.Standard.setToType(0, T2);
4291    ICS.Standard.setToType(1, T1);
4292    ICS.Standard.setToType(2, T1);
4293    ICS.Standard.ReferenceBinding = true;
4294    // In C++0x, this is always a direct binding. In C++98/03, it's a direct
4295    // binding unless we're binding to a class prvalue.
4296    // Note: Although xvalues wouldn't normally show up in C++98/03 code, we
4297    // allow the use of rvalue references in C++98/03 for the benefit of
4298    // standard library implementors; therefore, we need the xvalue check here.
4299    ICS.Standard.DirectBinding =
4300      S.getLangOpts().CPlusPlus11 ||
4301      (InitCategory.isPRValue() && !T2->isRecordType());
4302    ICS.Standard.IsLvalueReference = !isRValRef;
4303    ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4304    ICS.Standard.BindsToRvalue = InitCategory.isRValue();
4305    ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4306    ICS.Standard.ObjCLifetimeConversionBinding = ObjCLifetimeConversion;
4307    ICS.Standard.CopyConstructor = 0;
4308    return ICS;
4309  }
4310
4311  //            -- has a class type (i.e., T2 is a class type), where T1 is not
4312  //               reference-related to T2, and can be implicitly converted to
4313  //               an xvalue, class prvalue, or function lvalue of type
4314  //               "cv3 T3", where "cv1 T1" is reference-compatible with
4315  //               "cv3 T3",
4316  //
4317  //          then the reference is bound to the value of the initializer
4318  //          expression in the first case and to the result of the conversion
4319  //          in the second case (or, in either case, to an appropriate base
4320  //          class subobject).
4321  if (!SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4322      T2->isRecordType() && !S.RequireCompleteType(DeclLoc, T2, 0) &&
4323      FindConversionForRefInit(S, ICS, DeclType, DeclLoc,
4324                               Init, T2, /*AllowRvalues=*/true,
4325                               AllowExplicit)) {
4326    // In the second case, if the reference is an rvalue reference
4327    // and the second standard conversion sequence of the
4328    // user-defined conversion sequence includes an lvalue-to-rvalue
4329    // conversion, the program is ill-formed.
4330    if (ICS.isUserDefined() && isRValRef &&
4331        ICS.UserDefined.After.First == ICK_Lvalue_To_Rvalue)
4332      ICS.setBad(BadConversionSequence::no_conversion, Init, DeclType);
4333
4334    return ICS;
4335  }
4336
4337  //       -- Otherwise, a temporary of type "cv1 T1" is created and
4338  //          initialized from the initializer expression using the
4339  //          rules for a non-reference copy initialization (8.5). The
4340  //          reference is then bound to the temporary. If T1 is
4341  //          reference-related to T2, cv1 must be the same
4342  //          cv-qualification as, or greater cv-qualification than,
4343  //          cv2; otherwise, the program is ill-formed.
4344  if (RefRelationship == Sema::Ref_Related) {
4345    // If cv1 == cv2 or cv1 is a greater cv-qualified than cv2, then
4346    // we would be reference-compatible or reference-compatible with
4347    // added qualification. But that wasn't the case, so the reference
4348    // initialization fails.
4349    //
4350    // Note that we only want to check address spaces and cvr-qualifiers here.
4351    // ObjC GC and lifetime qualifiers aren't important.
4352    Qualifiers T1Quals = T1.getQualifiers();
4353    Qualifiers T2Quals = T2.getQualifiers();
4354    T1Quals.removeObjCGCAttr();
4355    T1Quals.removeObjCLifetime();
4356    T2Quals.removeObjCGCAttr();
4357    T2Quals.removeObjCLifetime();
4358    if (!T1Quals.compatiblyIncludes(T2Quals))
4359      return ICS;
4360  }
4361
4362  // If at least one of the types is a class type, the types are not
4363  // related, and we aren't allowed any user conversions, the
4364  // reference binding fails. This case is important for breaking
4365  // recursion, since TryImplicitConversion below will attempt to
4366  // create a temporary through the use of a copy constructor.
4367  if (SuppressUserConversions && RefRelationship == Sema::Ref_Incompatible &&
4368      (T1->isRecordType() || T2->isRecordType()))
4369    return ICS;
4370
4371  // If T1 is reference-related to T2 and the reference is an rvalue
4372  // reference, the initializer expression shall not be an lvalue.
4373  if (RefRelationship >= Sema::Ref_Related &&
4374      isRValRef && Init->Classify(S.Context).isLValue())
4375    return ICS;
4376
4377  // C++ [over.ics.ref]p2:
4378  //   When a parameter of reference type is not bound directly to
4379  //   an argument expression, the conversion sequence is the one
4380  //   required to convert the argument expression to the
4381  //   underlying type of the reference according to
4382  //   13.3.3.1. Conceptually, this conversion sequence corresponds
4383  //   to copy-initializing a temporary of the underlying type with
4384  //   the argument expression. Any difference in top-level
4385  //   cv-qualification is subsumed by the initialization itself
4386  //   and does not constitute a conversion.
4387  ICS = TryImplicitConversion(S, Init, T1, SuppressUserConversions,
4388                              /*AllowExplicit=*/false,
4389                              /*InOverloadResolution=*/false,
4390                              /*CStyle=*/false,
4391                              /*AllowObjCWritebackConversion=*/false);
4392
4393  // Of course, that's still a reference binding.
4394  if (ICS.isStandard()) {
4395    ICS.Standard.ReferenceBinding = true;
4396    ICS.Standard.IsLvalueReference = !isRValRef;
4397    ICS.Standard.BindsToFunctionLvalue = T2->isFunctionType();
4398    ICS.Standard.BindsToRvalue = true;
4399    ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4400    ICS.Standard.ObjCLifetimeConversionBinding = false;
4401  } else if (ICS.isUserDefined()) {
4402    // Don't allow rvalue references to bind to lvalues.
4403    if (DeclType->isRValueReferenceType()) {
4404      if (const ReferenceType *RefType
4405            = ICS.UserDefined.ConversionFunction->getResultType()
4406                ->getAs<LValueReferenceType>()) {
4407        if (!RefType->getPointeeType()->isFunctionType()) {
4408          ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, Init,
4409                     DeclType);
4410          return ICS;
4411        }
4412      }
4413    }
4414
4415    ICS.UserDefined.After.ReferenceBinding = true;
4416    ICS.UserDefined.After.IsLvalueReference = !isRValRef;
4417    ICS.UserDefined.After.BindsToFunctionLvalue = T2->isFunctionType();
4418    ICS.UserDefined.After.BindsToRvalue = true;
4419    ICS.UserDefined.After.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4420    ICS.UserDefined.After.ObjCLifetimeConversionBinding = false;
4421  }
4422
4423  return ICS;
4424}
4425
4426static ImplicitConversionSequence
4427TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4428                      bool SuppressUserConversions,
4429                      bool InOverloadResolution,
4430                      bool AllowObjCWritebackConversion,
4431                      bool AllowExplicit = false);
4432
4433/// TryListConversion - Try to copy-initialize a value of type ToType from the
4434/// initializer list From.
4435static ImplicitConversionSequence
4436TryListConversion(Sema &S, InitListExpr *From, QualType ToType,
4437                  bool SuppressUserConversions,
4438                  bool InOverloadResolution,
4439                  bool AllowObjCWritebackConversion) {
4440  // C++11 [over.ics.list]p1:
4441  //   When an argument is an initializer list, it is not an expression and
4442  //   special rules apply for converting it to a parameter type.
4443
4444  ImplicitConversionSequence Result;
4445  Result.setBad(BadConversionSequence::no_conversion, From, ToType);
4446  Result.setListInitializationSequence();
4447
4448  // We need a complete type for what follows. Incomplete types can never be
4449  // initialized from init lists.
4450  if (S.RequireCompleteType(From->getLocStart(), ToType, 0))
4451    return Result;
4452
4453  // C++11 [over.ics.list]p2:
4454  //   If the parameter type is std::initializer_list<X> or "array of X" and
4455  //   all the elements can be implicitly converted to X, the implicit
4456  //   conversion sequence is the worst conversion necessary to convert an
4457  //   element of the list to X.
4458  bool toStdInitializerList = false;
4459  QualType X;
4460  if (ToType->isArrayType())
4461    X = S.Context.getAsArrayType(ToType)->getElementType();
4462  else
4463    toStdInitializerList = S.isStdInitializerList(ToType, &X);
4464  if (!X.isNull()) {
4465    for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
4466      Expr *Init = From->getInit(i);
4467      ImplicitConversionSequence ICS =
4468          TryCopyInitialization(S, Init, X, SuppressUserConversions,
4469                                InOverloadResolution,
4470                                AllowObjCWritebackConversion);
4471      // If a single element isn't convertible, fail.
4472      if (ICS.isBad()) {
4473        Result = ICS;
4474        break;
4475      }
4476      // Otherwise, look for the worst conversion.
4477      if (Result.isBad() ||
4478          CompareImplicitConversionSequences(S, ICS, Result) ==
4479              ImplicitConversionSequence::Worse)
4480        Result = ICS;
4481    }
4482
4483    // For an empty list, we won't have computed any conversion sequence.
4484    // Introduce the identity conversion sequence.
4485    if (From->getNumInits() == 0) {
4486      Result.setStandard();
4487      Result.Standard.setAsIdentityConversion();
4488      Result.Standard.setFromType(ToType);
4489      Result.Standard.setAllToTypes(ToType);
4490    }
4491
4492    Result.setListInitializationSequence();
4493    Result.setStdInitializerListElement(toStdInitializerList);
4494    return Result;
4495  }
4496
4497  // C++11 [over.ics.list]p3:
4498  //   Otherwise, if the parameter is a non-aggregate class X and overload
4499  //   resolution chooses a single best constructor [...] the implicit
4500  //   conversion sequence is a user-defined conversion sequence. If multiple
4501  //   constructors are viable but none is better than the others, the
4502  //   implicit conversion sequence is a user-defined conversion sequence.
4503  if (ToType->isRecordType() && !ToType->isAggregateType()) {
4504    // This function can deal with initializer lists.
4505    Result = TryUserDefinedConversion(S, From, ToType, SuppressUserConversions,
4506                                      /*AllowExplicit=*/false,
4507                                      InOverloadResolution, /*CStyle=*/false,
4508                                      AllowObjCWritebackConversion);
4509    Result.setListInitializationSequence();
4510    return Result;
4511  }
4512
4513  // C++11 [over.ics.list]p4:
4514  //   Otherwise, if the parameter has an aggregate type which can be
4515  //   initialized from the initializer list [...] the implicit conversion
4516  //   sequence is a user-defined conversion sequence.
4517  if (ToType->isAggregateType()) {
4518    // Type is an aggregate, argument is an init list. At this point it comes
4519    // down to checking whether the initialization works.
4520    // FIXME: Find out whether this parameter is consumed or not.
4521    InitializedEntity Entity =
4522        InitializedEntity::InitializeParameter(S.Context, ToType,
4523                                               /*Consumed=*/false);
4524    if (S.CanPerformCopyInitialization(Entity, S.Owned(From))) {
4525      Result.setUserDefined();
4526      Result.UserDefined.Before.setAsIdentityConversion();
4527      // Initializer lists don't have a type.
4528      Result.UserDefined.Before.setFromType(QualType());
4529      Result.UserDefined.Before.setAllToTypes(QualType());
4530
4531      Result.UserDefined.After.setAsIdentityConversion();
4532      Result.UserDefined.After.setFromType(ToType);
4533      Result.UserDefined.After.setAllToTypes(ToType);
4534      Result.UserDefined.ConversionFunction = 0;
4535    }
4536    return Result;
4537  }
4538
4539  // C++11 [over.ics.list]p5:
4540  //   Otherwise, if the parameter is a reference, see 13.3.3.1.4.
4541  if (ToType->isReferenceType()) {
4542    // The standard is notoriously unclear here, since 13.3.3.1.4 doesn't
4543    // mention initializer lists in any way. So we go by what list-
4544    // initialization would do and try to extrapolate from that.
4545
4546    QualType T1 = ToType->getAs<ReferenceType>()->getPointeeType();
4547
4548    // If the initializer list has a single element that is reference-related
4549    // to the parameter type, we initialize the reference from that.
4550    if (From->getNumInits() == 1) {
4551      Expr *Init = From->getInit(0);
4552
4553      QualType T2 = Init->getType();
4554
4555      // If the initializer is the address of an overloaded function, try
4556      // to resolve the overloaded function. If all goes well, T2 is the
4557      // type of the resulting function.
4558      if (S.Context.getCanonicalType(T2) == S.Context.OverloadTy) {
4559        DeclAccessPair Found;
4560        if (FunctionDecl *Fn = S.ResolveAddressOfOverloadedFunction(
4561                                   Init, ToType, false, Found))
4562          T2 = Fn->getType();
4563      }
4564
4565      // Compute some basic properties of the types and the initializer.
4566      bool dummy1 = false;
4567      bool dummy2 = false;
4568      bool dummy3 = false;
4569      Sema::ReferenceCompareResult RefRelationship
4570        = S.CompareReferenceRelationship(From->getLocStart(), T1, T2, dummy1,
4571                                         dummy2, dummy3);
4572
4573      if (RefRelationship >= Sema::Ref_Related)
4574        return TryReferenceInit(S, Init, ToType,
4575                                /*FIXME:*/From->getLocStart(),
4576                                SuppressUserConversions,
4577                                /*AllowExplicit=*/false);
4578    }
4579
4580    // Otherwise, we bind the reference to a temporary created from the
4581    // initializer list.
4582    Result = TryListConversion(S, From, T1, SuppressUserConversions,
4583                               InOverloadResolution,
4584                               AllowObjCWritebackConversion);
4585    if (Result.isFailure())
4586      return Result;
4587    assert(!Result.isEllipsis() &&
4588           "Sub-initialization cannot result in ellipsis conversion.");
4589
4590    // Can we even bind to a temporary?
4591    if (ToType->isRValueReferenceType() ||
4592        (T1.isConstQualified() && !T1.isVolatileQualified())) {
4593      StandardConversionSequence &SCS = Result.isStandard() ? Result.Standard :
4594                                            Result.UserDefined.After;
4595      SCS.ReferenceBinding = true;
4596      SCS.IsLvalueReference = ToType->isLValueReferenceType();
4597      SCS.BindsToRvalue = true;
4598      SCS.BindsToFunctionLvalue = false;
4599      SCS.BindsImplicitObjectArgumentWithoutRefQualifier = false;
4600      SCS.ObjCLifetimeConversionBinding = false;
4601    } else
4602      Result.setBad(BadConversionSequence::lvalue_ref_to_rvalue,
4603                    From, ToType);
4604    return Result;
4605  }
4606
4607  // C++11 [over.ics.list]p6:
4608  //   Otherwise, if the parameter type is not a class:
4609  if (!ToType->isRecordType()) {
4610    //    - if the initializer list has one element, the implicit conversion
4611    //      sequence is the one required to convert the element to the
4612    //      parameter type.
4613    unsigned NumInits = From->getNumInits();
4614    if (NumInits == 1)
4615      Result = TryCopyInitialization(S, From->getInit(0), ToType,
4616                                     SuppressUserConversions,
4617                                     InOverloadResolution,
4618                                     AllowObjCWritebackConversion);
4619    //    - if the initializer list has no elements, the implicit conversion
4620    //      sequence is the identity conversion.
4621    else if (NumInits == 0) {
4622      Result.setStandard();
4623      Result.Standard.setAsIdentityConversion();
4624      Result.Standard.setFromType(ToType);
4625      Result.Standard.setAllToTypes(ToType);
4626    }
4627    Result.setListInitializationSequence();
4628    return Result;
4629  }
4630
4631  // C++11 [over.ics.list]p7:
4632  //   In all cases other than those enumerated above, no conversion is possible
4633  return Result;
4634}
4635
4636/// TryCopyInitialization - Try to copy-initialize a value of type
4637/// ToType from the expression From. Return the implicit conversion
4638/// sequence required to pass this argument, which may be a bad
4639/// conversion sequence (meaning that the argument cannot be passed to
4640/// a parameter of this type). If @p SuppressUserConversions, then we
4641/// do not permit any user-defined conversion sequences.
4642static ImplicitConversionSequence
4643TryCopyInitialization(Sema &S, Expr *From, QualType ToType,
4644                      bool SuppressUserConversions,
4645                      bool InOverloadResolution,
4646                      bool AllowObjCWritebackConversion,
4647                      bool AllowExplicit) {
4648  if (InitListExpr *FromInitList = dyn_cast<InitListExpr>(From))
4649    return TryListConversion(S, FromInitList, ToType, SuppressUserConversions,
4650                             InOverloadResolution,AllowObjCWritebackConversion);
4651
4652  if (ToType->isReferenceType())
4653    return TryReferenceInit(S, From, ToType,
4654                            /*FIXME:*/From->getLocStart(),
4655                            SuppressUserConversions,
4656                            AllowExplicit);
4657
4658  return TryImplicitConversion(S, From, ToType,
4659                               SuppressUserConversions,
4660                               /*AllowExplicit=*/false,
4661                               InOverloadResolution,
4662                               /*CStyle=*/false,
4663                               AllowObjCWritebackConversion);
4664}
4665
4666static bool TryCopyInitialization(const CanQualType FromQTy,
4667                                  const CanQualType ToQTy,
4668                                  Sema &S,
4669                                  SourceLocation Loc,
4670                                  ExprValueKind FromVK) {
4671  OpaqueValueExpr TmpExpr(Loc, FromQTy, FromVK);
4672  ImplicitConversionSequence ICS =
4673    TryCopyInitialization(S, &TmpExpr, ToQTy, true, true, false);
4674
4675  return !ICS.isBad();
4676}
4677
4678/// TryObjectArgumentInitialization - Try to initialize the object
4679/// parameter of the given member function (@c Method) from the
4680/// expression @p From.
4681static ImplicitConversionSequence
4682TryObjectArgumentInitialization(Sema &S, QualType FromType,
4683                                Expr::Classification FromClassification,
4684                                CXXMethodDecl *Method,
4685                                CXXRecordDecl *ActingContext) {
4686  QualType ClassType = S.Context.getTypeDeclType(ActingContext);
4687  // [class.dtor]p2: A destructor can be invoked for a const, volatile or
4688  //                 const volatile object.
4689  unsigned Quals = isa<CXXDestructorDecl>(Method) ?
4690    Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
4691  QualType ImplicitParamType =  S.Context.getCVRQualifiedType(ClassType, Quals);
4692
4693  // Set up the conversion sequence as a "bad" conversion, to allow us
4694  // to exit early.
4695  ImplicitConversionSequence ICS;
4696
4697  // We need to have an object of class type.
4698  if (const PointerType *PT = FromType->getAs<PointerType>()) {
4699    FromType = PT->getPointeeType();
4700
4701    // When we had a pointer, it's implicitly dereferenced, so we
4702    // better have an lvalue.
4703    assert(FromClassification.isLValue());
4704  }
4705
4706  assert(FromType->isRecordType());
4707
4708  // C++0x [over.match.funcs]p4:
4709  //   For non-static member functions, the type of the implicit object
4710  //   parameter is
4711  //
4712  //     - "lvalue reference to cv X" for functions declared without a
4713  //        ref-qualifier or with the & ref-qualifier
4714  //     - "rvalue reference to cv X" for functions declared with the &&
4715  //        ref-qualifier
4716  //
4717  // where X is the class of which the function is a member and cv is the
4718  // cv-qualification on the member function declaration.
4719  //
4720  // However, when finding an implicit conversion sequence for the argument, we
4721  // are not allowed to create temporaries or perform user-defined conversions
4722  // (C++ [over.match.funcs]p5). We perform a simplified version of
4723  // reference binding here, that allows class rvalues to bind to
4724  // non-constant references.
4725
4726  // First check the qualifiers.
4727  QualType FromTypeCanon = S.Context.getCanonicalType(FromType);
4728  if (ImplicitParamType.getCVRQualifiers()
4729                                    != FromTypeCanon.getLocalCVRQualifiers() &&
4730      !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
4731    ICS.setBad(BadConversionSequence::bad_qualifiers,
4732               FromType, ImplicitParamType);
4733    return ICS;
4734  }
4735
4736  // Check that we have either the same type or a derived type. It
4737  // affects the conversion rank.
4738  QualType ClassTypeCanon = S.Context.getCanonicalType(ClassType);
4739  ImplicitConversionKind SecondKind;
4740  if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType()) {
4741    SecondKind = ICK_Identity;
4742  } else if (S.IsDerivedFrom(FromType, ClassType))
4743    SecondKind = ICK_Derived_To_Base;
4744  else {
4745    ICS.setBad(BadConversionSequence::unrelated_class,
4746               FromType, ImplicitParamType);
4747    return ICS;
4748  }
4749
4750  // Check the ref-qualifier.
4751  switch (Method->getRefQualifier()) {
4752  case RQ_None:
4753    // Do nothing; we don't care about lvalueness or rvalueness.
4754    break;
4755
4756  case RQ_LValue:
4757    if (!FromClassification.isLValue() && Quals != Qualifiers::Const) {
4758      // non-const lvalue reference cannot bind to an rvalue
4759      ICS.setBad(BadConversionSequence::lvalue_ref_to_rvalue, FromType,
4760                 ImplicitParamType);
4761      return ICS;
4762    }
4763    break;
4764
4765  case RQ_RValue:
4766    if (!FromClassification.isRValue()) {
4767      // rvalue reference cannot bind to an lvalue
4768      ICS.setBad(BadConversionSequence::rvalue_ref_to_lvalue, FromType,
4769                 ImplicitParamType);
4770      return ICS;
4771    }
4772    break;
4773  }
4774
4775  // Success. Mark this as a reference binding.
4776  ICS.setStandard();
4777  ICS.Standard.setAsIdentityConversion();
4778  ICS.Standard.Second = SecondKind;
4779  ICS.Standard.setFromType(FromType);
4780  ICS.Standard.setAllToTypes(ImplicitParamType);
4781  ICS.Standard.ReferenceBinding = true;
4782  ICS.Standard.DirectBinding = true;
4783  ICS.Standard.IsLvalueReference = Method->getRefQualifier() != RQ_RValue;
4784  ICS.Standard.BindsToFunctionLvalue = false;
4785  ICS.Standard.BindsToRvalue = FromClassification.isRValue();
4786  ICS.Standard.BindsImplicitObjectArgumentWithoutRefQualifier
4787    = (Method->getRefQualifier() == RQ_None);
4788  return ICS;
4789}
4790
4791/// PerformObjectArgumentInitialization - Perform initialization of
4792/// the implicit object parameter for the given Method with the given
4793/// expression.
4794ExprResult
4795Sema::PerformObjectArgumentInitialization(Expr *From,
4796                                          NestedNameSpecifier *Qualifier,
4797                                          NamedDecl *FoundDecl,
4798                                          CXXMethodDecl *Method) {
4799  QualType FromRecordType, DestType;
4800  QualType ImplicitParamRecordType  =
4801    Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
4802
4803  Expr::Classification FromClassification;
4804  if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
4805    FromRecordType = PT->getPointeeType();
4806    DestType = Method->getThisType(Context);
4807    FromClassification = Expr::Classification::makeSimpleLValue();
4808  } else {
4809    FromRecordType = From->getType();
4810    DestType = ImplicitParamRecordType;
4811    FromClassification = From->Classify(Context);
4812  }
4813
4814  // Note that we always use the true parent context when performing
4815  // the actual argument initialization.
4816  ImplicitConversionSequence ICS
4817    = TryObjectArgumentInitialization(*this, From->getType(), FromClassification,
4818                                      Method, Method->getParent());
4819  if (ICS.isBad()) {
4820    if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) {
4821      Qualifiers FromQs = FromRecordType.getQualifiers();
4822      Qualifiers ToQs = DestType.getQualifiers();
4823      unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4824      if (CVR) {
4825        Diag(From->getLocStart(),
4826             diag::err_member_function_call_bad_cvr)
4827          << Method->getDeclName() << FromRecordType << (CVR - 1)
4828          << From->getSourceRange();
4829        Diag(Method->getLocation(), diag::note_previous_decl)
4830          << Method->getDeclName();
4831        return ExprError();
4832      }
4833    }
4834
4835    return Diag(From->getLocStart(),
4836                diag::err_implicit_object_parameter_init)
4837       << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
4838  }
4839
4840  if (ICS.Standard.Second == ICK_Derived_To_Base) {
4841    ExprResult FromRes =
4842      PerformObjectMemberConversion(From, Qualifier, FoundDecl, Method);
4843    if (FromRes.isInvalid())
4844      return ExprError();
4845    From = FromRes.take();
4846  }
4847
4848  if (!Context.hasSameType(From->getType(), DestType))
4849    From = ImpCastExprToType(From, DestType, CK_NoOp,
4850                             From->getValueKind()).take();
4851  return Owned(From);
4852}
4853
4854/// TryContextuallyConvertToBool - Attempt to contextually convert the
4855/// expression From to bool (C++0x [conv]p3).
4856static ImplicitConversionSequence
4857TryContextuallyConvertToBool(Sema &S, Expr *From) {
4858  // FIXME: This is pretty broken.
4859  return TryImplicitConversion(S, From, S.Context.BoolTy,
4860                               // FIXME: Are these flags correct?
4861                               /*SuppressUserConversions=*/false,
4862                               /*AllowExplicit=*/true,
4863                               /*InOverloadResolution=*/false,
4864                               /*CStyle=*/false,
4865                               /*AllowObjCWritebackConversion=*/false);
4866}
4867
4868/// PerformContextuallyConvertToBool - Perform a contextual conversion
4869/// of the expression From to bool (C++0x [conv]p3).
4870ExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {
4871  if (checkPlaceholderForOverload(*this, From))
4872    return ExprError();
4873
4874  ImplicitConversionSequence ICS = TryContextuallyConvertToBool(*this, From);
4875  if (!ICS.isBad())
4876    return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
4877
4878  if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
4879    return Diag(From->getLocStart(),
4880                diag::err_typecheck_bool_condition)
4881                  << From->getType() << From->getSourceRange();
4882  return ExprError();
4883}
4884
4885/// Check that the specified conversion is permitted in a converted constant
4886/// expression, according to C++11 [expr.const]p3. Return true if the conversion
4887/// is acceptable.
4888static bool CheckConvertedConstantConversions(Sema &S,
4889                                              StandardConversionSequence &SCS) {
4890  // Since we know that the target type is an integral or unscoped enumeration
4891  // type, most conversion kinds are impossible. All possible First and Third
4892  // conversions are fine.
4893  switch (SCS.Second) {
4894  case ICK_Identity:
4895  case ICK_Integral_Promotion:
4896  case ICK_Integral_Conversion:
4897  case ICK_Zero_Event_Conversion:
4898    return true;
4899
4900  case ICK_Boolean_Conversion:
4901    // Conversion from an integral or unscoped enumeration type to bool is
4902    // classified as ICK_Boolean_Conversion, but it's also an integral
4903    // conversion, so it's permitted in a converted constant expression.
4904    return SCS.getFromType()->isIntegralOrUnscopedEnumerationType() &&
4905           SCS.getToType(2)->isBooleanType();
4906
4907  case ICK_Floating_Integral:
4908  case ICK_Complex_Real:
4909    return false;
4910
4911  case ICK_Lvalue_To_Rvalue:
4912  case ICK_Array_To_Pointer:
4913  case ICK_Function_To_Pointer:
4914  case ICK_NoReturn_Adjustment:
4915  case ICK_Qualification:
4916  case ICK_Compatible_Conversion:
4917  case ICK_Vector_Conversion:
4918  case ICK_Vector_Splat:
4919  case ICK_Derived_To_Base:
4920  case ICK_Pointer_Conversion:
4921  case ICK_Pointer_Member:
4922  case ICK_Block_Pointer_Conversion:
4923  case ICK_Writeback_Conversion:
4924  case ICK_Floating_Promotion:
4925  case ICK_Complex_Promotion:
4926  case ICK_Complex_Conversion:
4927  case ICK_Floating_Conversion:
4928  case ICK_TransparentUnionConversion:
4929    llvm_unreachable("unexpected second conversion kind");
4930
4931  case ICK_Num_Conversion_Kinds:
4932    break;
4933  }
4934
4935  llvm_unreachable("unknown conversion kind");
4936}
4937
4938/// CheckConvertedConstantExpression - Check that the expression From is a
4939/// converted constant expression of type T, perform the conversion and produce
4940/// the converted expression, per C++11 [expr.const]p3.
4941ExprResult Sema::CheckConvertedConstantExpression(Expr *From, QualType T,
4942                                                  llvm::APSInt &Value,
4943                                                  CCEKind CCE) {
4944  assert(LangOpts.CPlusPlus11 && "converted constant expression outside C++11");
4945  assert(T->isIntegralOrEnumerationType() && "unexpected converted const type");
4946
4947  if (checkPlaceholderForOverload(*this, From))
4948    return ExprError();
4949
4950  // C++11 [expr.const]p3 with proposed wording fixes:
4951  //  A converted constant expression of type T is a core constant expression,
4952  //  implicitly converted to a prvalue of type T, where the converted
4953  //  expression is a literal constant expression and the implicit conversion
4954  //  sequence contains only user-defined conversions, lvalue-to-rvalue
4955  //  conversions, integral promotions, and integral conversions other than
4956  //  narrowing conversions.
4957  ImplicitConversionSequence ICS =
4958    TryImplicitConversion(From, T,
4959                          /*SuppressUserConversions=*/false,
4960                          /*AllowExplicit=*/false,
4961                          /*InOverloadResolution=*/false,
4962                          /*CStyle=*/false,
4963                          /*AllowObjcWritebackConversion=*/false);
4964  StandardConversionSequence *SCS = 0;
4965  switch (ICS.getKind()) {
4966  case ImplicitConversionSequence::StandardConversion:
4967    if (!CheckConvertedConstantConversions(*this, ICS.Standard))
4968      return Diag(From->getLocStart(),
4969                  diag::err_typecheck_converted_constant_expression_disallowed)
4970               << From->getType() << From->getSourceRange() << T;
4971    SCS = &ICS.Standard;
4972    break;
4973  case ImplicitConversionSequence::UserDefinedConversion:
4974    // We are converting from class type to an integral or enumeration type, so
4975    // the Before sequence must be trivial.
4976    if (!CheckConvertedConstantConversions(*this, ICS.UserDefined.After))
4977      return Diag(From->getLocStart(),
4978                  diag::err_typecheck_converted_constant_expression_disallowed)
4979               << From->getType() << From->getSourceRange() << T;
4980    SCS = &ICS.UserDefined.After;
4981    break;
4982  case ImplicitConversionSequence::AmbiguousConversion:
4983  case ImplicitConversionSequence::BadConversion:
4984    if (!DiagnoseMultipleUserDefinedConversion(From, T))
4985      return Diag(From->getLocStart(),
4986                  diag::err_typecheck_converted_constant_expression)
4987                    << From->getType() << From->getSourceRange() << T;
4988    return ExprError();
4989
4990  case ImplicitConversionSequence::EllipsisConversion:
4991    llvm_unreachable("ellipsis conversion in converted constant expression");
4992  }
4993
4994  ExprResult Result = PerformImplicitConversion(From, T, ICS, AA_Converting);
4995  if (Result.isInvalid())
4996    return Result;
4997
4998  // Check for a narrowing implicit conversion.
4999  APValue PreNarrowingValue;
5000  QualType PreNarrowingType;
5001  switch (SCS->getNarrowingKind(Context, Result.get(), PreNarrowingValue,
5002                                PreNarrowingType)) {
5003  case NK_Variable_Narrowing:
5004    // Implicit conversion to a narrower type, and the value is not a constant
5005    // expression. We'll diagnose this in a moment.
5006  case NK_Not_Narrowing:
5007    break;
5008
5009  case NK_Constant_Narrowing:
5010    Diag(From->getLocStart(),
5011         isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
5012                             diag::err_cce_narrowing)
5013      << CCE << /*Constant*/1
5014      << PreNarrowingValue.getAsString(Context, PreNarrowingType) << T;
5015    break;
5016
5017  case NK_Type_Narrowing:
5018    Diag(From->getLocStart(),
5019         isSFINAEContext() ? diag::err_cce_narrowing_sfinae :
5020                             diag::err_cce_narrowing)
5021      << CCE << /*Constant*/0 << From->getType() << T;
5022    break;
5023  }
5024
5025  // Check the expression is a constant expression.
5026  SmallVector<PartialDiagnosticAt, 8> Notes;
5027  Expr::EvalResult Eval;
5028  Eval.Diag = &Notes;
5029
5030  if (!Result.get()->EvaluateAsRValue(Eval, Context) || !Eval.Val.isInt()) {
5031    // The expression can't be folded, so we can't keep it at this position in
5032    // the AST.
5033    Result = ExprError();
5034  } else {
5035    Value = Eval.Val.getInt();
5036
5037    if (Notes.empty()) {
5038      // It's a constant expression.
5039      return Result;
5040    }
5041  }
5042
5043  // It's not a constant expression. Produce an appropriate diagnostic.
5044  if (Notes.size() == 1 &&
5045      Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr)
5046    Diag(Notes[0].first, diag::err_expr_not_cce) << CCE;
5047  else {
5048    Diag(From->getLocStart(), diag::err_expr_not_cce)
5049      << CCE << From->getSourceRange();
5050    for (unsigned I = 0; I < Notes.size(); ++I)
5051      Diag(Notes[I].first, Notes[I].second);
5052  }
5053  return Result;
5054}
5055
5056/// dropPointerConversions - If the given standard conversion sequence
5057/// involves any pointer conversions, remove them.  This may change
5058/// the result type of the conversion sequence.
5059static void dropPointerConversion(StandardConversionSequence &SCS) {
5060  if (SCS.Second == ICK_Pointer_Conversion) {
5061    SCS.Second = ICK_Identity;
5062    SCS.Third = ICK_Identity;
5063    SCS.ToTypePtrs[2] = SCS.ToTypePtrs[1] = SCS.ToTypePtrs[0];
5064  }
5065}
5066
5067/// TryContextuallyConvertToObjCPointer - Attempt to contextually
5068/// convert the expression From to an Objective-C pointer type.
5069static ImplicitConversionSequence
5070TryContextuallyConvertToObjCPointer(Sema &S, Expr *From) {
5071  // Do an implicit conversion to 'id'.
5072  QualType Ty = S.Context.getObjCIdType();
5073  ImplicitConversionSequence ICS
5074    = TryImplicitConversion(S, From, Ty,
5075                            // FIXME: Are these flags correct?
5076                            /*SuppressUserConversions=*/false,
5077                            /*AllowExplicit=*/true,
5078                            /*InOverloadResolution=*/false,
5079                            /*CStyle=*/false,
5080                            /*AllowObjCWritebackConversion=*/false);
5081
5082  // Strip off any final conversions to 'id'.
5083  switch (ICS.getKind()) {
5084  case ImplicitConversionSequence::BadConversion:
5085  case ImplicitConversionSequence::AmbiguousConversion:
5086  case ImplicitConversionSequence::EllipsisConversion:
5087    break;
5088
5089  case ImplicitConversionSequence::UserDefinedConversion:
5090    dropPointerConversion(ICS.UserDefined.After);
5091    break;
5092
5093  case ImplicitConversionSequence::StandardConversion:
5094    dropPointerConversion(ICS.Standard);
5095    break;
5096  }
5097
5098  return ICS;
5099}
5100
5101/// PerformContextuallyConvertToObjCPointer - Perform a contextual
5102/// conversion of the expression From to an Objective-C pointer type.
5103ExprResult Sema::PerformContextuallyConvertToObjCPointer(Expr *From) {
5104  if (checkPlaceholderForOverload(*this, From))
5105    return ExprError();
5106
5107  QualType Ty = Context.getObjCIdType();
5108  ImplicitConversionSequence ICS =
5109    TryContextuallyConvertToObjCPointer(*this, From);
5110  if (!ICS.isBad())
5111    return PerformImplicitConversion(From, Ty, ICS, AA_Converting);
5112  return ExprError();
5113}
5114
5115/// Determine whether the provided type is an integral type, or an enumeration
5116/// type of a permitted flavor.
5117static bool isIntegralOrEnumerationType(QualType T, bool AllowScopedEnum) {
5118  return AllowScopedEnum ? T->isIntegralOrEnumerationType()
5119                         : T->isIntegralOrUnscopedEnumerationType();
5120}
5121
5122/// \brief Attempt to convert the given expression to an integral or
5123/// enumeration type.
5124///
5125/// This routine will attempt to convert an expression of class type to an
5126/// integral or enumeration type, if that class type only has a single
5127/// conversion to an integral or enumeration type.
5128///
5129/// \param Loc The source location of the construct that requires the
5130/// conversion.
5131///
5132/// \param From The expression we're converting from.
5133///
5134/// \param Diagnoser Used to output any diagnostics.
5135///
5136/// \param AllowScopedEnumerations Specifies whether conversions to scoped
5137/// enumerations should be considered.
5138///
5139/// \returns The expression, converted to an integral or enumeration type if
5140/// successful.
5141ExprResult
5142Sema::ConvertToIntegralOrEnumerationType(SourceLocation Loc, Expr *From,
5143                                         ICEConvertDiagnoser &Diagnoser,
5144                                         bool AllowScopedEnumerations) {
5145  // We can't perform any more checking for type-dependent expressions.
5146  if (From->isTypeDependent())
5147    return Owned(From);
5148
5149  // Process placeholders immediately.
5150  if (From->hasPlaceholderType()) {
5151    ExprResult result = CheckPlaceholderExpr(From);
5152    if (result.isInvalid()) return result;
5153    From = result.take();
5154  }
5155
5156  // If the expression already has integral or enumeration type, we're golden.
5157  QualType T = From->getType();
5158  if (isIntegralOrEnumerationType(T, AllowScopedEnumerations))
5159    return DefaultLvalueConversion(From);
5160
5161  // FIXME: Check for missing '()' if T is a function type?
5162
5163  // If we don't have a class type in C++, there's no way we can get an
5164  // expression of integral or enumeration type.
5165  const RecordType *RecordTy = T->getAs<RecordType>();
5166  if (!RecordTy || !getLangOpts().CPlusPlus) {
5167    if (!Diagnoser.Suppress)
5168      Diagnoser.diagnoseNotInt(*this, Loc, T) << From->getSourceRange();
5169    return Owned(From);
5170  }
5171
5172  // We must have a complete class type.
5173  struct TypeDiagnoserPartialDiag : TypeDiagnoser {
5174    ICEConvertDiagnoser &Diagnoser;
5175    Expr *From;
5176
5177    TypeDiagnoserPartialDiag(ICEConvertDiagnoser &Diagnoser, Expr *From)
5178      : TypeDiagnoser(Diagnoser.Suppress), Diagnoser(Diagnoser), From(From) {}
5179
5180    virtual void diagnose(Sema &S, SourceLocation Loc, QualType T) {
5181      Diagnoser.diagnoseIncomplete(S, Loc, T) << From->getSourceRange();
5182    }
5183  } IncompleteDiagnoser(Diagnoser, From);
5184
5185  if (RequireCompleteType(Loc, T, IncompleteDiagnoser))
5186    return Owned(From);
5187
5188  // Look for a conversion to an integral or enumeration type.
5189  UnresolvedSet<4> ViableConversions;
5190  UnresolvedSet<4> ExplicitConversions;
5191  std::pair<CXXRecordDecl::conversion_iterator,
5192            CXXRecordDecl::conversion_iterator> Conversions
5193    = cast<CXXRecordDecl>(RecordTy->getDecl())->getVisibleConversionFunctions();
5194
5195  bool HadMultipleCandidates
5196    = (std::distance(Conversions.first, Conversions.second) > 1);
5197
5198  for (CXXRecordDecl::conversion_iterator
5199         I = Conversions.first, E = Conversions.second; I != E; ++I) {
5200    if (CXXConversionDecl *Conversion
5201          = dyn_cast<CXXConversionDecl>((*I)->getUnderlyingDecl())) {
5202      if (isIntegralOrEnumerationType(
5203            Conversion->getConversionType().getNonReferenceType(),
5204            AllowScopedEnumerations)) {
5205        if (Conversion->isExplicit())
5206          ExplicitConversions.addDecl(I.getDecl(), I.getAccess());
5207        else
5208          ViableConversions.addDecl(I.getDecl(), I.getAccess());
5209      }
5210    }
5211  }
5212
5213  switch (ViableConversions.size()) {
5214  case 0:
5215    if (ExplicitConversions.size() == 1 && !Diagnoser.Suppress) {
5216      DeclAccessPair Found = ExplicitConversions[0];
5217      CXXConversionDecl *Conversion
5218        = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5219
5220      // The user probably meant to invoke the given explicit
5221      // conversion; use it.
5222      QualType ConvTy
5223        = Conversion->getConversionType().getNonReferenceType();
5224      std::string TypeStr;
5225      ConvTy.getAsStringInternal(TypeStr, getPrintingPolicy());
5226
5227      Diagnoser.diagnoseExplicitConv(*this, Loc, T, ConvTy)
5228        << FixItHint::CreateInsertion(From->getLocStart(),
5229                                      "static_cast<" + TypeStr + ">(")
5230        << FixItHint::CreateInsertion(PP.getLocForEndOfToken(From->getLocEnd()),
5231                                      ")");
5232      Diagnoser.noteExplicitConv(*this, Conversion, ConvTy);
5233
5234      // If we aren't in a SFINAE context, build a call to the
5235      // explicit conversion function.
5236      if (isSFINAEContext())
5237        return ExprError();
5238
5239      CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5240      ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5241                                                 HadMultipleCandidates);
5242      if (Result.isInvalid())
5243        return ExprError();
5244      // Record usage of conversion in an implicit cast.
5245      From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5246                                      CK_UserDefinedConversion,
5247                                      Result.get(), 0,
5248                                      Result.get()->getValueKind());
5249    }
5250
5251    // We'll complain below about a non-integral condition type.
5252    break;
5253
5254  case 1: {
5255    // Apply this conversion.
5256    DeclAccessPair Found = ViableConversions[0];
5257    CheckMemberOperatorAccess(From->getExprLoc(), From, 0, Found);
5258
5259    CXXConversionDecl *Conversion
5260      = cast<CXXConversionDecl>(Found->getUnderlyingDecl());
5261    QualType ConvTy
5262      = Conversion->getConversionType().getNonReferenceType();
5263    if (!Diagnoser.SuppressConversion) {
5264      if (isSFINAEContext())
5265        return ExprError();
5266
5267      Diagnoser.diagnoseConversion(*this, Loc, T, ConvTy)
5268        << From->getSourceRange();
5269    }
5270
5271    ExprResult Result = BuildCXXMemberCallExpr(From, Found, Conversion,
5272                                               HadMultipleCandidates);
5273    if (Result.isInvalid())
5274      return ExprError();
5275    // Record usage of conversion in an implicit cast.
5276    From = ImplicitCastExpr::Create(Context, Result.get()->getType(),
5277                                    CK_UserDefinedConversion,
5278                                    Result.get(), 0,
5279                                    Result.get()->getValueKind());
5280    break;
5281  }
5282
5283  default:
5284    if (Diagnoser.Suppress)
5285      return ExprError();
5286
5287    Diagnoser.diagnoseAmbiguous(*this, Loc, T) << From->getSourceRange();
5288    for (unsigned I = 0, N = ViableConversions.size(); I != N; ++I) {
5289      CXXConversionDecl *Conv
5290        = cast<CXXConversionDecl>(ViableConversions[I]->getUnderlyingDecl());
5291      QualType ConvTy = Conv->getConversionType().getNonReferenceType();
5292      Diagnoser.noteAmbiguous(*this, Conv, ConvTy);
5293    }
5294    return Owned(From);
5295  }
5296
5297  if (!isIntegralOrEnumerationType(From->getType(), AllowScopedEnumerations) &&
5298      !Diagnoser.Suppress) {
5299    Diagnoser.diagnoseNotInt(*this, Loc, From->getType())
5300      << From->getSourceRange();
5301  }
5302
5303  return DefaultLvalueConversion(From);
5304}
5305
5306/// AddOverloadCandidate - Adds the given function to the set of
5307/// candidate functions, using the given function call arguments.  If
5308/// @p SuppressUserConversions, then don't allow user-defined
5309/// conversions via constructors or conversion operators.
5310///
5311/// \param PartialOverloading true if we are performing "partial" overloading
5312/// based on an incomplete set of function arguments. This feature is used by
5313/// code completion.
5314void
5315Sema::AddOverloadCandidate(FunctionDecl *Function,
5316                           DeclAccessPair FoundDecl,
5317                           ArrayRef<Expr *> Args,
5318                           OverloadCandidateSet& CandidateSet,
5319                           bool SuppressUserConversions,
5320                           bool PartialOverloading,
5321                           bool AllowExplicit) {
5322  const FunctionProtoType* Proto
5323    = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
5324  assert(Proto && "Functions without a prototype cannot be overloaded");
5325  assert(!Function->getDescribedFunctionTemplate() &&
5326         "Use AddTemplateOverloadCandidate for function templates");
5327
5328  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
5329    if (!isa<CXXConstructorDecl>(Method)) {
5330      // If we get here, it's because we're calling a member function
5331      // that is named without a member access expression (e.g.,
5332      // "this->f") that was either written explicitly or created
5333      // implicitly. This can happen with a qualified call to a member
5334      // function, e.g., X::f(). We use an empty type for the implied
5335      // object argument (C++ [over.call.func]p3), and the acting context
5336      // is irrelevant.
5337      AddMethodCandidate(Method, FoundDecl, Method->getParent(),
5338                         QualType(), Expr::Classification::makeSimpleLValue(),
5339                         Args, CandidateSet, SuppressUserConversions);
5340      return;
5341    }
5342    // We treat a constructor like a non-member function, since its object
5343    // argument doesn't participate in overload resolution.
5344  }
5345
5346  if (!CandidateSet.isNewCandidate(Function))
5347    return;
5348
5349  // Overload resolution is always an unevaluated context.
5350  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5351
5352  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
5353    // C++ [class.copy]p3:
5354    //   A member function template is never instantiated to perform the copy
5355    //   of a class object to an object of its class type.
5356    QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
5357    if (Args.size() == 1 &&
5358        Constructor->isSpecializationCopyingObject() &&
5359        (Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()) ||
5360         IsDerivedFrom(Args[0]->getType(), ClassType)))
5361      return;
5362  }
5363
5364  // Add this candidate
5365  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size());
5366  Candidate.FoundDecl = FoundDecl;
5367  Candidate.Function = Function;
5368  Candidate.Viable = true;
5369  Candidate.IsSurrogate = false;
5370  Candidate.IgnoreObjectArgument = false;
5371  Candidate.ExplicitCallArguments = Args.size();
5372
5373  unsigned NumArgsInProto = Proto->getNumArgs();
5374
5375  // (C++ 13.3.2p2): A candidate function having fewer than m
5376  // parameters is viable only if it has an ellipsis in its parameter
5377  // list (8.3.5).
5378  if ((Args.size() + (PartialOverloading && Args.size())) > NumArgsInProto &&
5379      !Proto->isVariadic()) {
5380    Candidate.Viable = false;
5381    Candidate.FailureKind = ovl_fail_too_many_arguments;
5382    return;
5383  }
5384
5385  // (C++ 13.3.2p2): A candidate function having more than m parameters
5386  // is viable only if the (m+1)st parameter has a default argument
5387  // (8.3.6). For the purposes of overload resolution, the
5388  // parameter list is truncated on the right, so that there are
5389  // exactly m parameters.
5390  unsigned MinRequiredArgs = Function->getMinRequiredArguments();
5391  if (Args.size() < MinRequiredArgs && !PartialOverloading) {
5392    // Not enough arguments.
5393    Candidate.Viable = false;
5394    Candidate.FailureKind = ovl_fail_too_few_arguments;
5395    return;
5396  }
5397
5398  // (CUDA B.1): Check for invalid calls between targets.
5399  if (getLangOpts().CUDA)
5400    if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext))
5401      if (CheckCUDATarget(Caller, Function)) {
5402        Candidate.Viable = false;
5403        Candidate.FailureKind = ovl_fail_bad_target;
5404        return;
5405      }
5406
5407  // Determine the implicit conversion sequences for each of the
5408  // arguments.
5409  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5410    if (ArgIdx < NumArgsInProto) {
5411      // (C++ 13.3.2p3): for F to be a viable function, there shall
5412      // exist for each argument an implicit conversion sequence
5413      // (13.3.3.1) that converts that argument to the corresponding
5414      // parameter of F.
5415      QualType ParamType = Proto->getArgType(ArgIdx);
5416      Candidate.Conversions[ArgIdx]
5417        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5418                                SuppressUserConversions,
5419                                /*InOverloadResolution=*/true,
5420                                /*AllowObjCWritebackConversion=*/
5421                                  getLangOpts().ObjCAutoRefCount,
5422                                AllowExplicit);
5423      if (Candidate.Conversions[ArgIdx].isBad()) {
5424        Candidate.Viable = false;
5425        Candidate.FailureKind = ovl_fail_bad_conversion;
5426        break;
5427      }
5428    } else {
5429      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5430      // argument for which there is no corresponding parameter is
5431      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5432      Candidate.Conversions[ArgIdx].setEllipsis();
5433    }
5434  }
5435}
5436
5437/// \brief Add all of the function declarations in the given function set to
5438/// the overload canddiate set.
5439void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
5440                                 ArrayRef<Expr *> Args,
5441                                 OverloadCandidateSet& CandidateSet,
5442                                 bool SuppressUserConversions,
5443                               TemplateArgumentListInfo *ExplicitTemplateArgs) {
5444  for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
5445    NamedDecl *D = F.getDecl()->getUnderlyingDecl();
5446    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
5447      if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
5448        AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getPair(),
5449                           cast<CXXMethodDecl>(FD)->getParent(),
5450                           Args[0]->getType(), Args[0]->Classify(Context),
5451                           Args.slice(1), CandidateSet,
5452                           SuppressUserConversions);
5453      else
5454        AddOverloadCandidate(FD, F.getPair(), Args, CandidateSet,
5455                             SuppressUserConversions);
5456    } else {
5457      FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(D);
5458      if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
5459          !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
5460        AddMethodTemplateCandidate(FunTmpl, F.getPair(),
5461                              cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
5462                                   ExplicitTemplateArgs,
5463                                   Args[0]->getType(),
5464                                   Args[0]->Classify(Context), Args.slice(1),
5465                                   CandidateSet, SuppressUserConversions);
5466      else
5467        AddTemplateOverloadCandidate(FunTmpl, F.getPair(),
5468                                     ExplicitTemplateArgs, Args,
5469                                     CandidateSet, SuppressUserConversions);
5470    }
5471  }
5472}
5473
5474/// AddMethodCandidate - Adds a named decl (which is some kind of
5475/// method) as a method candidate to the given overload set.
5476void Sema::AddMethodCandidate(DeclAccessPair FoundDecl,
5477                              QualType ObjectType,
5478                              Expr::Classification ObjectClassification,
5479                              ArrayRef<Expr *> Args,
5480                              OverloadCandidateSet& CandidateSet,
5481                              bool SuppressUserConversions) {
5482  NamedDecl *Decl = FoundDecl.getDecl();
5483  CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
5484
5485  if (isa<UsingShadowDecl>(Decl))
5486    Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
5487
5488  if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
5489    assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
5490           "Expected a member function template");
5491    AddMethodTemplateCandidate(TD, FoundDecl, ActingContext,
5492                               /*ExplicitArgs*/ 0,
5493                               ObjectType, ObjectClassification,
5494                               Args, CandidateSet,
5495                               SuppressUserConversions);
5496  } else {
5497    AddMethodCandidate(cast<CXXMethodDecl>(Decl), FoundDecl, ActingContext,
5498                       ObjectType, ObjectClassification,
5499                       Args,
5500                       CandidateSet, SuppressUserConversions);
5501  }
5502}
5503
5504/// AddMethodCandidate - Adds the given C++ member function to the set
5505/// of candidate functions, using the given function call arguments
5506/// and the object argument (@c Object). For example, in a call
5507/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
5508/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
5509/// allow user-defined conversions via constructors or conversion
5510/// operators.
5511void
5512Sema::AddMethodCandidate(CXXMethodDecl *Method, DeclAccessPair FoundDecl,
5513                         CXXRecordDecl *ActingContext, QualType ObjectType,
5514                         Expr::Classification ObjectClassification,
5515                         ArrayRef<Expr *> Args,
5516                         OverloadCandidateSet& CandidateSet,
5517                         bool SuppressUserConversions) {
5518  const FunctionProtoType* Proto
5519    = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
5520  assert(Proto && "Methods without a prototype cannot be overloaded");
5521  assert(!isa<CXXConstructorDecl>(Method) &&
5522         "Use AddOverloadCandidate for constructors");
5523
5524  if (!CandidateSet.isNewCandidate(Method))
5525    return;
5526
5527  // Overload resolution is always an unevaluated context.
5528  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5529
5530  // Add this candidate
5531  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5532  Candidate.FoundDecl = FoundDecl;
5533  Candidate.Function = Method;
5534  Candidate.IsSurrogate = false;
5535  Candidate.IgnoreObjectArgument = false;
5536  Candidate.ExplicitCallArguments = Args.size();
5537
5538  unsigned NumArgsInProto = Proto->getNumArgs();
5539
5540  // (C++ 13.3.2p2): A candidate function having fewer than m
5541  // parameters is viable only if it has an ellipsis in its parameter
5542  // list (8.3.5).
5543  if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5544    Candidate.Viable = false;
5545    Candidate.FailureKind = ovl_fail_too_many_arguments;
5546    return;
5547  }
5548
5549  // (C++ 13.3.2p2): A candidate function having more than m parameters
5550  // is viable only if the (m+1)st parameter has a default argument
5551  // (8.3.6). For the purposes of overload resolution, the
5552  // parameter list is truncated on the right, so that there are
5553  // exactly m parameters.
5554  unsigned MinRequiredArgs = Method->getMinRequiredArguments();
5555  if (Args.size() < MinRequiredArgs) {
5556    // Not enough arguments.
5557    Candidate.Viable = false;
5558    Candidate.FailureKind = ovl_fail_too_few_arguments;
5559    return;
5560  }
5561
5562  Candidate.Viable = true;
5563
5564  if (Method->isStatic() || ObjectType.isNull())
5565    // The implicit object argument is ignored.
5566    Candidate.IgnoreObjectArgument = true;
5567  else {
5568    // Determine the implicit conversion sequence for the object
5569    // parameter.
5570    Candidate.Conversions[0]
5571      = TryObjectArgumentInitialization(*this, ObjectType, ObjectClassification,
5572                                        Method, ActingContext);
5573    if (Candidate.Conversions[0].isBad()) {
5574      Candidate.Viable = false;
5575      Candidate.FailureKind = ovl_fail_bad_conversion;
5576      return;
5577    }
5578  }
5579
5580  // Determine the implicit conversion sequences for each of the
5581  // arguments.
5582  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5583    if (ArgIdx < NumArgsInProto) {
5584      // (C++ 13.3.2p3): for F to be a viable function, there shall
5585      // exist for each argument an implicit conversion sequence
5586      // (13.3.3.1) that converts that argument to the corresponding
5587      // parameter of F.
5588      QualType ParamType = Proto->getArgType(ArgIdx);
5589      Candidate.Conversions[ArgIdx + 1]
5590        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5591                                SuppressUserConversions,
5592                                /*InOverloadResolution=*/true,
5593                                /*AllowObjCWritebackConversion=*/
5594                                  getLangOpts().ObjCAutoRefCount);
5595      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5596        Candidate.Viable = false;
5597        Candidate.FailureKind = ovl_fail_bad_conversion;
5598        break;
5599      }
5600    } else {
5601      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5602      // argument for which there is no corresponding parameter is
5603      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5604      Candidate.Conversions[ArgIdx + 1].setEllipsis();
5605    }
5606  }
5607}
5608
5609/// \brief Add a C++ member function template as a candidate to the candidate
5610/// set, using template argument deduction to produce an appropriate member
5611/// function template specialization.
5612void
5613Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
5614                                 DeclAccessPair FoundDecl,
5615                                 CXXRecordDecl *ActingContext,
5616                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
5617                                 QualType ObjectType,
5618                                 Expr::Classification ObjectClassification,
5619                                 ArrayRef<Expr *> Args,
5620                                 OverloadCandidateSet& CandidateSet,
5621                                 bool SuppressUserConversions) {
5622  if (!CandidateSet.isNewCandidate(MethodTmpl))
5623    return;
5624
5625  // C++ [over.match.funcs]p7:
5626  //   In each case where a candidate is a function template, candidate
5627  //   function template specializations are generated using template argument
5628  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5629  //   candidate functions in the usual way.113) A given name can refer to one
5630  //   or more function templates and also to a set of overloaded non-template
5631  //   functions. In such a case, the candidate functions generated from each
5632  //   function template are combined with the set of non-template candidate
5633  //   functions.
5634  TemplateDeductionInfo Info(CandidateSet.getLocation());
5635  FunctionDecl *Specialization = 0;
5636  if (TemplateDeductionResult Result
5637      = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs, Args,
5638                                Specialization, Info)) {
5639    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5640    Candidate.FoundDecl = FoundDecl;
5641    Candidate.Function = MethodTmpl->getTemplatedDecl();
5642    Candidate.Viable = false;
5643    Candidate.FailureKind = ovl_fail_bad_deduction;
5644    Candidate.IsSurrogate = false;
5645    Candidate.IgnoreObjectArgument = false;
5646    Candidate.ExplicitCallArguments = Args.size();
5647    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5648                                                          Info);
5649    return;
5650  }
5651
5652  // Add the function template specialization produced by template argument
5653  // deduction as a candidate.
5654  assert(Specialization && "Missing member function template specialization?");
5655  assert(isa<CXXMethodDecl>(Specialization) &&
5656         "Specialization is not a member function?");
5657  AddMethodCandidate(cast<CXXMethodDecl>(Specialization), FoundDecl,
5658                     ActingContext, ObjectType, ObjectClassification, Args,
5659                     CandidateSet, SuppressUserConversions);
5660}
5661
5662/// \brief Add a C++ function template specialization as a candidate
5663/// in the candidate set, using template argument deduction to produce
5664/// an appropriate function template specialization.
5665void
5666Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
5667                                   DeclAccessPair FoundDecl,
5668                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
5669                                   ArrayRef<Expr *> Args,
5670                                   OverloadCandidateSet& CandidateSet,
5671                                   bool SuppressUserConversions) {
5672  if (!CandidateSet.isNewCandidate(FunctionTemplate))
5673    return;
5674
5675  // C++ [over.match.funcs]p7:
5676  //   In each case where a candidate is a function template, candidate
5677  //   function template specializations are generated using template argument
5678  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
5679  //   candidate functions in the usual way.113) A given name can refer to one
5680  //   or more function templates and also to a set of overloaded non-template
5681  //   functions. In such a case, the candidate functions generated from each
5682  //   function template are combined with the set of non-template candidate
5683  //   functions.
5684  TemplateDeductionInfo Info(CandidateSet.getLocation());
5685  FunctionDecl *Specialization = 0;
5686  if (TemplateDeductionResult Result
5687        = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs, Args,
5688                                  Specialization, Info)) {
5689    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5690    Candidate.FoundDecl = FoundDecl;
5691    Candidate.Function = FunctionTemplate->getTemplatedDecl();
5692    Candidate.Viable = false;
5693    Candidate.FailureKind = ovl_fail_bad_deduction;
5694    Candidate.IsSurrogate = false;
5695    Candidate.IgnoreObjectArgument = false;
5696    Candidate.ExplicitCallArguments = Args.size();
5697    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5698                                                          Info);
5699    return;
5700  }
5701
5702  // Add the function template specialization produced by template argument
5703  // deduction as a candidate.
5704  assert(Specialization && "Missing function template specialization?");
5705  AddOverloadCandidate(Specialization, FoundDecl, Args, CandidateSet,
5706                       SuppressUserConversions);
5707}
5708
5709/// AddConversionCandidate - Add a C++ conversion function as a
5710/// candidate in the candidate set (C++ [over.match.conv],
5711/// C++ [over.match.copy]). From is the expression we're converting from,
5712/// and ToType is the type that we're eventually trying to convert to
5713/// (which may or may not be the same type as the type that the
5714/// conversion function produces).
5715void
5716Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
5717                             DeclAccessPair FoundDecl,
5718                             CXXRecordDecl *ActingContext,
5719                             Expr *From, QualType ToType,
5720                             OverloadCandidateSet& CandidateSet) {
5721  assert(!Conversion->getDescribedFunctionTemplate() &&
5722         "Conversion function templates use AddTemplateConversionCandidate");
5723  QualType ConvType = Conversion->getConversionType().getNonReferenceType();
5724  if (!CandidateSet.isNewCandidate(Conversion))
5725    return;
5726
5727  // Overload resolution is always an unevaluated context.
5728  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5729
5730  // Add this candidate
5731  OverloadCandidate &Candidate = CandidateSet.addCandidate(1);
5732  Candidate.FoundDecl = FoundDecl;
5733  Candidate.Function = Conversion;
5734  Candidate.IsSurrogate = false;
5735  Candidate.IgnoreObjectArgument = false;
5736  Candidate.FinalConversion.setAsIdentityConversion();
5737  Candidate.FinalConversion.setFromType(ConvType);
5738  Candidate.FinalConversion.setAllToTypes(ToType);
5739  Candidate.Viable = true;
5740  Candidate.ExplicitCallArguments = 1;
5741
5742  // C++ [over.match.funcs]p4:
5743  //   For conversion functions, the function is considered to be a member of
5744  //   the class of the implicit implied object argument for the purpose of
5745  //   defining the type of the implicit object parameter.
5746  //
5747  // Determine the implicit conversion sequence for the implicit
5748  // object parameter.
5749  QualType ImplicitParamType = From->getType();
5750  if (const PointerType *FromPtrType = ImplicitParamType->getAs<PointerType>())
5751    ImplicitParamType = FromPtrType->getPointeeType();
5752  CXXRecordDecl *ConversionContext
5753    = cast<CXXRecordDecl>(ImplicitParamType->getAs<RecordType>()->getDecl());
5754
5755  Candidate.Conversions[0]
5756    = TryObjectArgumentInitialization(*this, From->getType(),
5757                                      From->Classify(Context),
5758                                      Conversion, ConversionContext);
5759
5760  if (Candidate.Conversions[0].isBad()) {
5761    Candidate.Viable = false;
5762    Candidate.FailureKind = ovl_fail_bad_conversion;
5763    return;
5764  }
5765
5766  // We won't go through a user-define type conversion function to convert a
5767  // derived to base as such conversions are given Conversion Rank. They only
5768  // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
5769  QualType FromCanon
5770    = Context.getCanonicalType(From->getType().getUnqualifiedType());
5771  QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
5772  if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
5773    Candidate.Viable = false;
5774    Candidate.FailureKind = ovl_fail_trivial_conversion;
5775    return;
5776  }
5777
5778  // To determine what the conversion from the result of calling the
5779  // conversion function to the type we're eventually trying to
5780  // convert to (ToType), we need to synthesize a call to the
5781  // conversion function and attempt copy initialization from it. This
5782  // makes sure that we get the right semantics with respect to
5783  // lvalues/rvalues and the type. Fortunately, we can allocate this
5784  // call on the stack and we don't need its arguments to be
5785  // well-formed.
5786  DeclRefExpr ConversionRef(Conversion, false, Conversion->getType(),
5787                            VK_LValue, From->getLocStart());
5788  ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
5789                                Context.getPointerType(Conversion->getType()),
5790                                CK_FunctionToPointerDecay,
5791                                &ConversionRef, VK_RValue);
5792
5793  QualType ConversionType = Conversion->getConversionType();
5794  if (RequireCompleteType(From->getLocStart(), ConversionType, 0)) {
5795    Candidate.Viable = false;
5796    Candidate.FailureKind = ovl_fail_bad_final_conversion;
5797    return;
5798  }
5799
5800  ExprValueKind VK = Expr::getValueKindForType(ConversionType);
5801
5802  // Note that it is safe to allocate CallExpr on the stack here because
5803  // there are 0 arguments (i.e., nothing is allocated using ASTContext's
5804  // allocator).
5805  QualType CallResultType = ConversionType.getNonLValueExprType(Context);
5806  CallExpr Call(Context, &ConversionFn, MultiExprArg(), CallResultType, VK,
5807                From->getLocStart());
5808  ImplicitConversionSequence ICS =
5809    TryCopyInitialization(*this, &Call, ToType,
5810                          /*SuppressUserConversions=*/true,
5811                          /*InOverloadResolution=*/false,
5812                          /*AllowObjCWritebackConversion=*/false);
5813
5814  switch (ICS.getKind()) {
5815  case ImplicitConversionSequence::StandardConversion:
5816    Candidate.FinalConversion = ICS.Standard;
5817
5818    // C++ [over.ics.user]p3:
5819    //   If the user-defined conversion is specified by a specialization of a
5820    //   conversion function template, the second standard conversion sequence
5821    //   shall have exact match rank.
5822    if (Conversion->getPrimaryTemplate() &&
5823        GetConversionRank(ICS.Standard.Second) != ICR_Exact_Match) {
5824      Candidate.Viable = false;
5825      Candidate.FailureKind = ovl_fail_final_conversion_not_exact;
5826    }
5827
5828    // C++0x [dcl.init.ref]p5:
5829    //    In the second case, if the reference is an rvalue reference and
5830    //    the second standard conversion sequence of the user-defined
5831    //    conversion sequence includes an lvalue-to-rvalue conversion, the
5832    //    program is ill-formed.
5833    if (ToType->isRValueReferenceType() &&
5834        ICS.Standard.First == ICK_Lvalue_To_Rvalue) {
5835      Candidate.Viable = false;
5836      Candidate.FailureKind = ovl_fail_bad_final_conversion;
5837    }
5838    break;
5839
5840  case ImplicitConversionSequence::BadConversion:
5841    Candidate.Viable = false;
5842    Candidate.FailureKind = ovl_fail_bad_final_conversion;
5843    break;
5844
5845  default:
5846    llvm_unreachable(
5847           "Can only end up with a standard conversion sequence or failure");
5848  }
5849}
5850
5851/// \brief Adds a conversion function template specialization
5852/// candidate to the overload set, using template argument deduction
5853/// to deduce the template arguments of the conversion function
5854/// template from the type that we are converting to (C++
5855/// [temp.deduct.conv]).
5856void
5857Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
5858                                     DeclAccessPair FoundDecl,
5859                                     CXXRecordDecl *ActingDC,
5860                                     Expr *From, QualType ToType,
5861                                     OverloadCandidateSet &CandidateSet) {
5862  assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
5863         "Only conversion function templates permitted here");
5864
5865  if (!CandidateSet.isNewCandidate(FunctionTemplate))
5866    return;
5867
5868  TemplateDeductionInfo Info(CandidateSet.getLocation());
5869  CXXConversionDecl *Specialization = 0;
5870  if (TemplateDeductionResult Result
5871        = DeduceTemplateArguments(FunctionTemplate, ToType,
5872                                  Specialization, Info)) {
5873    OverloadCandidate &Candidate = CandidateSet.addCandidate();
5874    Candidate.FoundDecl = FoundDecl;
5875    Candidate.Function = FunctionTemplate->getTemplatedDecl();
5876    Candidate.Viable = false;
5877    Candidate.FailureKind = ovl_fail_bad_deduction;
5878    Candidate.IsSurrogate = false;
5879    Candidate.IgnoreObjectArgument = false;
5880    Candidate.ExplicitCallArguments = 1;
5881    Candidate.DeductionFailure = MakeDeductionFailureInfo(Context, Result,
5882                                                          Info);
5883    return;
5884  }
5885
5886  // Add the conversion function template specialization produced by
5887  // template argument deduction as a candidate.
5888  assert(Specialization && "Missing function template specialization?");
5889  AddConversionCandidate(Specialization, FoundDecl, ActingDC, From, ToType,
5890                         CandidateSet);
5891}
5892
5893/// AddSurrogateCandidate - Adds a "surrogate" candidate function that
5894/// converts the given @c Object to a function pointer via the
5895/// conversion function @c Conversion, and then attempts to call it
5896/// with the given arguments (C++ [over.call.object]p2-4). Proto is
5897/// the type of function that we'll eventually be calling.
5898void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
5899                                 DeclAccessPair FoundDecl,
5900                                 CXXRecordDecl *ActingContext,
5901                                 const FunctionProtoType *Proto,
5902                                 Expr *Object,
5903                                 ArrayRef<Expr *> Args,
5904                                 OverloadCandidateSet& CandidateSet) {
5905  if (!CandidateSet.isNewCandidate(Conversion))
5906    return;
5907
5908  // Overload resolution is always an unevaluated context.
5909  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
5910
5911  OverloadCandidate &Candidate = CandidateSet.addCandidate(Args.size() + 1);
5912  Candidate.FoundDecl = FoundDecl;
5913  Candidate.Function = 0;
5914  Candidate.Surrogate = Conversion;
5915  Candidate.Viable = true;
5916  Candidate.IsSurrogate = true;
5917  Candidate.IgnoreObjectArgument = false;
5918  Candidate.ExplicitCallArguments = Args.size();
5919
5920  // Determine the implicit conversion sequence for the implicit
5921  // object parameter.
5922  ImplicitConversionSequence ObjectInit
5923    = TryObjectArgumentInitialization(*this, Object->getType(),
5924                                      Object->Classify(Context),
5925                                      Conversion, ActingContext);
5926  if (ObjectInit.isBad()) {
5927    Candidate.Viable = false;
5928    Candidate.FailureKind = ovl_fail_bad_conversion;
5929    Candidate.Conversions[0] = ObjectInit;
5930    return;
5931  }
5932
5933  // The first conversion is actually a user-defined conversion whose
5934  // first conversion is ObjectInit's standard conversion (which is
5935  // effectively a reference binding). Record it as such.
5936  Candidate.Conversions[0].setUserDefined();
5937  Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
5938  Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
5939  Candidate.Conversions[0].UserDefined.HadMultipleCandidates = false;
5940  Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
5941  Candidate.Conversions[0].UserDefined.FoundConversionFunction = FoundDecl;
5942  Candidate.Conversions[0].UserDefined.After
5943    = Candidate.Conversions[0].UserDefined.Before;
5944  Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
5945
5946  // Find the
5947  unsigned NumArgsInProto = Proto->getNumArgs();
5948
5949  // (C++ 13.3.2p2): A candidate function having fewer than m
5950  // parameters is viable only if it has an ellipsis in its parameter
5951  // list (8.3.5).
5952  if (Args.size() > NumArgsInProto && !Proto->isVariadic()) {
5953    Candidate.Viable = false;
5954    Candidate.FailureKind = ovl_fail_too_many_arguments;
5955    return;
5956  }
5957
5958  // Function types don't have any default arguments, so just check if
5959  // we have enough arguments.
5960  if (Args.size() < NumArgsInProto) {
5961    // Not enough arguments.
5962    Candidate.Viable = false;
5963    Candidate.FailureKind = ovl_fail_too_few_arguments;
5964    return;
5965  }
5966
5967  // Determine the implicit conversion sequences for each of the
5968  // arguments.
5969  for (unsigned ArgIdx = 0; ArgIdx < Args.size(); ++ArgIdx) {
5970    if (ArgIdx < NumArgsInProto) {
5971      // (C++ 13.3.2p3): for F to be a viable function, there shall
5972      // exist for each argument an implicit conversion sequence
5973      // (13.3.3.1) that converts that argument to the corresponding
5974      // parameter of F.
5975      QualType ParamType = Proto->getArgType(ArgIdx);
5976      Candidate.Conversions[ArgIdx + 1]
5977        = TryCopyInitialization(*this, Args[ArgIdx], ParamType,
5978                                /*SuppressUserConversions=*/false,
5979                                /*InOverloadResolution=*/false,
5980                                /*AllowObjCWritebackConversion=*/
5981                                  getLangOpts().ObjCAutoRefCount);
5982      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
5983        Candidate.Viable = false;
5984        Candidate.FailureKind = ovl_fail_bad_conversion;
5985        break;
5986      }
5987    } else {
5988      // (C++ 13.3.2p2): For the purposes of overload resolution, any
5989      // argument for which there is no corresponding parameter is
5990      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
5991      Candidate.Conversions[ArgIdx + 1].setEllipsis();
5992    }
5993  }
5994}
5995
5996/// \brief Add overload candidates for overloaded operators that are
5997/// member functions.
5998///
5999/// Add the overloaded operator candidates that are member functions
6000/// for the operator Op that was used in an operator expression such
6001/// as "x Op y". , Args/NumArgs provides the operator arguments, and
6002/// CandidateSet will store the added overload candidates. (C++
6003/// [over.match.oper]).
6004void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
6005                                       SourceLocation OpLoc,
6006                                       Expr **Args, unsigned NumArgs,
6007                                       OverloadCandidateSet& CandidateSet,
6008                                       SourceRange OpRange) {
6009  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
6010
6011  // C++ [over.match.oper]p3:
6012  //   For a unary operator @ with an operand of a type whose
6013  //   cv-unqualified version is T1, and for a binary operator @ with
6014  //   a left operand of a type whose cv-unqualified version is T1 and
6015  //   a right operand of a type whose cv-unqualified version is T2,
6016  //   three sets of candidate functions, designated member
6017  //   candidates, non-member candidates and built-in candidates, are
6018  //   constructed as follows:
6019  QualType T1 = Args[0]->getType();
6020
6021  //     -- If T1 is a complete class type or a class currently being
6022  //        defined, the set of member candidates is the result of the
6023  //        qualified lookup of T1::operator@ (13.3.1.1.1); otherwise,
6024  //        the set of member candidates is empty.
6025  if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
6026    // Complete the type if it can be completed.
6027    RequireCompleteType(OpLoc, T1, 0);
6028    // If the type is neither complete nor being defined, bail out now.
6029    if (!T1Rec->getDecl()->getDefinition())
6030      return;
6031
6032    LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
6033    LookupQualifiedName(Operators, T1Rec->getDecl());
6034    Operators.suppressDiagnostics();
6035
6036    for (LookupResult::iterator Oper = Operators.begin(),
6037                             OperEnd = Operators.end();
6038         Oper != OperEnd;
6039         ++Oper)
6040      AddMethodCandidate(Oper.getPair(), Args[0]->getType(),
6041                         Args[0]->Classify(Context),
6042                         llvm::makeArrayRef(Args + 1, NumArgs -1),
6043                         CandidateSet,
6044                         /* SuppressUserConversions = */ false);
6045  }
6046}
6047
6048/// AddBuiltinCandidate - Add a candidate for a built-in
6049/// operator. ResultTy and ParamTys are the result and parameter types
6050/// of the built-in candidate, respectively. Args and NumArgs are the
6051/// arguments being passed to the candidate. IsAssignmentOperator
6052/// should be true when this built-in candidate is an assignment
6053/// operator. NumContextualBoolArguments is the number of arguments
6054/// (at the beginning of the argument list) that will be contextually
6055/// converted to bool.
6056void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
6057                               Expr **Args, unsigned NumArgs,
6058                               OverloadCandidateSet& CandidateSet,
6059                               bool IsAssignmentOperator,
6060                               unsigned NumContextualBoolArguments) {
6061  // Overload resolution is always an unevaluated context.
6062  EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
6063
6064  // Add this candidate
6065  OverloadCandidate &Candidate = CandidateSet.addCandidate(NumArgs);
6066  Candidate.FoundDecl = DeclAccessPair::make(0, AS_none);
6067  Candidate.Function = 0;
6068  Candidate.IsSurrogate = false;
6069  Candidate.IgnoreObjectArgument = false;
6070  Candidate.BuiltinTypes.ResultTy = ResultTy;
6071  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
6072    Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
6073
6074  // Determine the implicit conversion sequences for each of the
6075  // arguments.
6076  Candidate.Viable = true;
6077  Candidate.ExplicitCallArguments = NumArgs;
6078  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6079    // C++ [over.match.oper]p4:
6080    //   For the built-in assignment operators, conversions of the
6081    //   left operand are restricted as follows:
6082    //     -- no temporaries are introduced to hold the left operand, and
6083    //     -- no user-defined conversions are applied to the left
6084    //        operand to achieve a type match with the left-most
6085    //        parameter of a built-in candidate.
6086    //
6087    // We block these conversions by turning off user-defined
6088    // conversions, since that is the only way that initialization of
6089    // a reference to a non-class type can occur from something that
6090    // is not of the same type.
6091    if (ArgIdx < NumContextualBoolArguments) {
6092      assert(ParamTys[ArgIdx] == Context.BoolTy &&
6093             "Contextual conversion to bool requires bool type");
6094      Candidate.Conversions[ArgIdx]
6095        = TryContextuallyConvertToBool(*this, Args[ArgIdx]);
6096    } else {
6097      Candidate.Conversions[ArgIdx]
6098        = TryCopyInitialization(*this, Args[ArgIdx], ParamTys[ArgIdx],
6099                                ArgIdx == 0 && IsAssignmentOperator,
6100                                /*InOverloadResolution=*/false,
6101                                /*AllowObjCWritebackConversion=*/
6102                                  getLangOpts().ObjCAutoRefCount);
6103    }
6104    if (Candidate.Conversions[ArgIdx].isBad()) {
6105      Candidate.Viable = false;
6106      Candidate.FailureKind = ovl_fail_bad_conversion;
6107      break;
6108    }
6109  }
6110}
6111
6112/// BuiltinCandidateTypeSet - A set of types that will be used for the
6113/// candidate operator functions for built-in operators (C++
6114/// [over.built]). The types are separated into pointer types and
6115/// enumeration types.
6116class BuiltinCandidateTypeSet  {
6117  /// TypeSet - A set of types.
6118  typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
6119
6120  /// PointerTypes - The set of pointer types that will be used in the
6121  /// built-in candidates.
6122  TypeSet PointerTypes;
6123
6124  /// MemberPointerTypes - The set of member pointer types that will be
6125  /// used in the built-in candidates.
6126  TypeSet MemberPointerTypes;
6127
6128  /// EnumerationTypes - The set of enumeration types that will be
6129  /// used in the built-in candidates.
6130  TypeSet EnumerationTypes;
6131
6132  /// \brief The set of vector types that will be used in the built-in
6133  /// candidates.
6134  TypeSet VectorTypes;
6135
6136  /// \brief A flag indicating non-record types are viable candidates
6137  bool HasNonRecordTypes;
6138
6139  /// \brief A flag indicating whether either arithmetic or enumeration types
6140  /// were present in the candidate set.
6141  bool HasArithmeticOrEnumeralTypes;
6142
6143  /// \brief A flag indicating whether the nullptr type was present in the
6144  /// candidate set.
6145  bool HasNullPtrType;
6146
6147  /// Sema - The semantic analysis instance where we are building the
6148  /// candidate type set.
6149  Sema &SemaRef;
6150
6151  /// Context - The AST context in which we will build the type sets.
6152  ASTContext &Context;
6153
6154  bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6155                                               const Qualifiers &VisibleQuals);
6156  bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
6157
6158public:
6159  /// iterator - Iterates through the types that are part of the set.
6160  typedef TypeSet::iterator iterator;
6161
6162  BuiltinCandidateTypeSet(Sema &SemaRef)
6163    : HasNonRecordTypes(false),
6164      HasArithmeticOrEnumeralTypes(false),
6165      HasNullPtrType(false),
6166      SemaRef(SemaRef),
6167      Context(SemaRef.Context) { }
6168
6169  void AddTypesConvertedFrom(QualType Ty,
6170                             SourceLocation Loc,
6171                             bool AllowUserConversions,
6172                             bool AllowExplicitConversions,
6173                             const Qualifiers &VisibleTypeConversionsQuals);
6174
6175  /// pointer_begin - First pointer type found;
6176  iterator pointer_begin() { return PointerTypes.begin(); }
6177
6178  /// pointer_end - Past the last pointer type found;
6179  iterator pointer_end() { return PointerTypes.end(); }
6180
6181  /// member_pointer_begin - First member pointer type found;
6182  iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
6183
6184  /// member_pointer_end - Past the last member pointer type found;
6185  iterator member_pointer_end() { return MemberPointerTypes.end(); }
6186
6187  /// enumeration_begin - First enumeration type found;
6188  iterator enumeration_begin() { return EnumerationTypes.begin(); }
6189
6190  /// enumeration_end - Past the last enumeration type found;
6191  iterator enumeration_end() { return EnumerationTypes.end(); }
6192
6193  iterator vector_begin() { return VectorTypes.begin(); }
6194  iterator vector_end() { return VectorTypes.end(); }
6195
6196  bool hasNonRecordTypes() { return HasNonRecordTypes; }
6197  bool hasArithmeticOrEnumeralTypes() { return HasArithmeticOrEnumeralTypes; }
6198  bool hasNullPtrType() const { return HasNullPtrType; }
6199};
6200
6201/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
6202/// the set of pointer types along with any more-qualified variants of
6203/// that type. For example, if @p Ty is "int const *", this routine
6204/// will add "int const *", "int const volatile *", "int const
6205/// restrict *", and "int const volatile restrict *" to the set of
6206/// pointer types. Returns true if the add of @p Ty itself succeeded,
6207/// false otherwise.
6208///
6209/// FIXME: what to do about extended qualifiers?
6210bool
6211BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
6212                                             const Qualifiers &VisibleQuals) {
6213
6214  // Insert this type.
6215  if (!PointerTypes.insert(Ty))
6216    return false;
6217
6218  QualType PointeeTy;
6219  const PointerType *PointerTy = Ty->getAs<PointerType>();
6220  bool buildObjCPtr = false;
6221  if (!PointerTy) {
6222    const ObjCObjectPointerType *PTy = Ty->castAs<ObjCObjectPointerType>();
6223    PointeeTy = PTy->getPointeeType();
6224    buildObjCPtr = true;
6225  } else {
6226    PointeeTy = PointerTy->getPointeeType();
6227  }
6228
6229  // Don't add qualified variants of arrays. For one, they're not allowed
6230  // (the qualifier would sink to the element type), and for another, the
6231  // only overload situation where it matters is subscript or pointer +- int,
6232  // and those shouldn't have qualifier variants anyway.
6233  if (PointeeTy->isArrayType())
6234    return true;
6235
6236  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6237  bool hasVolatile = VisibleQuals.hasVolatile();
6238  bool hasRestrict = VisibleQuals.hasRestrict();
6239
6240  // Iterate through all strict supersets of BaseCVR.
6241  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6242    if ((CVR | BaseCVR) != CVR) continue;
6243    // Skip over volatile if no volatile found anywhere in the types.
6244    if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
6245
6246    // Skip over restrict if no restrict found anywhere in the types, or if
6247    // the type cannot be restrict-qualified.
6248    if ((CVR & Qualifiers::Restrict) &&
6249        (!hasRestrict ||
6250         (!(PointeeTy->isAnyPointerType() || PointeeTy->isReferenceType()))))
6251      continue;
6252
6253    // Build qualified pointee type.
6254    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6255
6256    // Build qualified pointer type.
6257    QualType QPointerTy;
6258    if (!buildObjCPtr)
6259      QPointerTy = Context.getPointerType(QPointeeTy);
6260    else
6261      QPointerTy = Context.getObjCObjectPointerType(QPointeeTy);
6262
6263    // Insert qualified pointer type.
6264    PointerTypes.insert(QPointerTy);
6265  }
6266
6267  return true;
6268}
6269
6270/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
6271/// to the set of pointer types along with any more-qualified variants of
6272/// that type. For example, if @p Ty is "int const *", this routine
6273/// will add "int const *", "int const volatile *", "int const
6274/// restrict *", and "int const volatile restrict *" to the set of
6275/// pointer types. Returns true if the add of @p Ty itself succeeded,
6276/// false otherwise.
6277///
6278/// FIXME: what to do about extended qualifiers?
6279bool
6280BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
6281    QualType Ty) {
6282  // Insert this type.
6283  if (!MemberPointerTypes.insert(Ty))
6284    return false;
6285
6286  const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
6287  assert(PointerTy && "type was not a member pointer type!");
6288
6289  QualType PointeeTy = PointerTy->getPointeeType();
6290  // Don't add qualified variants of arrays. For one, they're not allowed
6291  // (the qualifier would sink to the element type), and for another, the
6292  // only overload situation where it matters is subscript or pointer +- int,
6293  // and those shouldn't have qualifier variants anyway.
6294  if (PointeeTy->isArrayType())
6295    return true;
6296  const Type *ClassTy = PointerTy->getClass();
6297
6298  // Iterate through all strict supersets of the pointee type's CVR
6299  // qualifiers.
6300  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
6301  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
6302    if ((CVR | BaseCVR) != CVR) continue;
6303
6304    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
6305    MemberPointerTypes.insert(
6306      Context.getMemberPointerType(QPointeeTy, ClassTy));
6307  }
6308
6309  return true;
6310}
6311
6312/// AddTypesConvertedFrom - Add each of the types to which the type @p
6313/// Ty can be implicit converted to the given set of @p Types. We're
6314/// primarily interested in pointer types and enumeration types. We also
6315/// take member pointer types, for the conditional operator.
6316/// AllowUserConversions is true if we should look at the conversion
6317/// functions of a class type, and AllowExplicitConversions if we
6318/// should also include the explicit conversion functions of a class
6319/// type.
6320void
6321BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
6322                                               SourceLocation Loc,
6323                                               bool AllowUserConversions,
6324                                               bool AllowExplicitConversions,
6325                                               const Qualifiers &VisibleQuals) {
6326  // Only deal with canonical types.
6327  Ty = Context.getCanonicalType(Ty);
6328
6329  // Look through reference types; they aren't part of the type of an
6330  // expression for the purposes of conversions.
6331  if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
6332    Ty = RefTy->getPointeeType();
6333
6334  // If we're dealing with an array type, decay to the pointer.
6335  if (Ty->isArrayType())
6336    Ty = SemaRef.Context.getArrayDecayedType(Ty);
6337
6338  // Otherwise, we don't care about qualifiers on the type.
6339  Ty = Ty.getLocalUnqualifiedType();
6340
6341  // Flag if we ever add a non-record type.
6342  const RecordType *TyRec = Ty->getAs<RecordType>();
6343  HasNonRecordTypes = HasNonRecordTypes || !TyRec;
6344
6345  // Flag if we encounter an arithmetic type.
6346  HasArithmeticOrEnumeralTypes =
6347    HasArithmeticOrEnumeralTypes || Ty->isArithmeticType();
6348
6349  if (Ty->isObjCIdType() || Ty->isObjCClassType())
6350    PointerTypes.insert(Ty);
6351  else if (Ty->getAs<PointerType>() || Ty->getAs<ObjCObjectPointerType>()) {
6352    // Insert our type, and its more-qualified variants, into the set
6353    // of types.
6354    if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
6355      return;
6356  } else if (Ty->isMemberPointerType()) {
6357    // Member pointers are far easier, since the pointee can't be converted.
6358    if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
6359      return;
6360  } else if (Ty->isEnumeralType()) {
6361    HasArithmeticOrEnumeralTypes = true;
6362    EnumerationTypes.insert(Ty);
6363  } else if (Ty->isVectorType()) {
6364    // We treat vector types as arithmetic types in many contexts as an
6365    // extension.
6366    HasArithmeticOrEnumeralTypes = true;
6367    VectorTypes.insert(Ty);
6368  } else if (Ty->isNullPtrType()) {
6369    HasNullPtrType = true;
6370  } else if (AllowUserConversions && TyRec) {
6371    // No conversion functions in incomplete types.
6372    if (SemaRef.RequireCompleteType(Loc, Ty, 0))
6373      return;
6374
6375    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6376    std::pair<CXXRecordDecl::conversion_iterator,
6377              CXXRecordDecl::conversion_iterator>
6378      Conversions = ClassDecl->getVisibleConversionFunctions();
6379    for (CXXRecordDecl::conversion_iterator
6380           I = Conversions.first, E = Conversions.second; I != E; ++I) {
6381      NamedDecl *D = I.getDecl();
6382      if (isa<UsingShadowDecl>(D))
6383        D = cast<UsingShadowDecl>(D)->getTargetDecl();
6384
6385      // Skip conversion function templates; they don't tell us anything
6386      // about which builtin types we can convert to.
6387      if (isa<FunctionTemplateDecl>(D))
6388        continue;
6389
6390      CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6391      if (AllowExplicitConversions || !Conv->isExplicit()) {
6392        AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
6393                              VisibleQuals);
6394      }
6395    }
6396  }
6397}
6398
6399/// \brief Helper function for AddBuiltinOperatorCandidates() that adds
6400/// the volatile- and non-volatile-qualified assignment operators for the
6401/// given type to the candidate set.
6402static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
6403                                                   QualType T,
6404                                                   Expr **Args,
6405                                                   unsigned NumArgs,
6406                                    OverloadCandidateSet &CandidateSet) {
6407  QualType ParamTypes[2];
6408
6409  // T& operator=(T&, T)
6410  ParamTypes[0] = S.Context.getLValueReferenceType(T);
6411  ParamTypes[1] = T;
6412  S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6413                        /*IsAssignmentOperator=*/true);
6414
6415  if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
6416    // volatile T& operator=(volatile T&, T)
6417    ParamTypes[0]
6418      = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
6419    ParamTypes[1] = T;
6420    S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
6421                          /*IsAssignmentOperator=*/true);
6422  }
6423}
6424
6425/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
6426/// if any, found in visible type conversion functions found in ArgExpr's type.
6427static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
6428    Qualifiers VRQuals;
6429    const RecordType *TyRec;
6430    if (const MemberPointerType *RHSMPType =
6431        ArgExpr->getType()->getAs<MemberPointerType>())
6432      TyRec = RHSMPType->getClass()->getAs<RecordType>();
6433    else
6434      TyRec = ArgExpr->getType()->getAs<RecordType>();
6435    if (!TyRec) {
6436      // Just to be safe, assume the worst case.
6437      VRQuals.addVolatile();
6438      VRQuals.addRestrict();
6439      return VRQuals;
6440    }
6441
6442    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
6443    if (!ClassDecl->hasDefinition())
6444      return VRQuals;
6445
6446    std::pair<CXXRecordDecl::conversion_iterator,
6447              CXXRecordDecl::conversion_iterator>
6448      Conversions = ClassDecl->getVisibleConversionFunctions();
6449
6450    for (CXXRecordDecl::conversion_iterator
6451           I = Conversions.first, E = Conversions.second; I != E; ++I) {
6452      NamedDecl *D = I.getDecl();
6453      if (isa<UsingShadowDecl>(D))
6454        D = cast<UsingShadowDecl>(D)->getTargetDecl();
6455      if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) {
6456        QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
6457        if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
6458          CanTy = ResTypeRef->getPointeeType();
6459        // Need to go down the pointer/mempointer chain and add qualifiers
6460        // as see them.
6461        bool done = false;
6462        while (!done) {
6463          if (CanTy.isRestrictQualified())
6464            VRQuals.addRestrict();
6465          if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
6466            CanTy = ResTypePtr->getPointeeType();
6467          else if (const MemberPointerType *ResTypeMPtr =
6468                CanTy->getAs<MemberPointerType>())
6469            CanTy = ResTypeMPtr->getPointeeType();
6470          else
6471            done = true;
6472          if (CanTy.isVolatileQualified())
6473            VRQuals.addVolatile();
6474          if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
6475            return VRQuals;
6476        }
6477      }
6478    }
6479    return VRQuals;
6480}
6481
6482namespace {
6483
6484/// \brief Helper class to manage the addition of builtin operator overload
6485/// candidates. It provides shared state and utility methods used throughout
6486/// the process, as well as a helper method to add each group of builtin
6487/// operator overloads from the standard to a candidate set.
6488class BuiltinOperatorOverloadBuilder {
6489  // Common instance state available to all overload candidate addition methods.
6490  Sema &S;
6491  Expr **Args;
6492  unsigned NumArgs;
6493  Qualifiers VisibleTypeConversionsQuals;
6494  bool HasArithmeticOrEnumeralCandidateType;
6495  SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes;
6496  OverloadCandidateSet &CandidateSet;
6497
6498  // Define some constants used to index and iterate over the arithemetic types
6499  // provided via the getArithmeticType() method below.
6500  // The "promoted arithmetic types" are the arithmetic
6501  // types are that preserved by promotion (C++ [over.built]p2).
6502  static const unsigned FirstIntegralType = 3;
6503  static const unsigned LastIntegralType = 20;
6504  static const unsigned FirstPromotedIntegralType = 3,
6505                        LastPromotedIntegralType = 11;
6506  static const unsigned FirstPromotedArithmeticType = 0,
6507                        LastPromotedArithmeticType = 11;
6508  static const unsigned NumArithmeticTypes = 20;
6509
6510  /// \brief Get the canonical type for a given arithmetic type index.
6511  CanQualType getArithmeticType(unsigned index) {
6512    assert(index < NumArithmeticTypes);
6513    static CanQualType ASTContext::* const
6514      ArithmeticTypes[NumArithmeticTypes] = {
6515      // Start of promoted types.
6516      &ASTContext::FloatTy,
6517      &ASTContext::DoubleTy,
6518      &ASTContext::LongDoubleTy,
6519
6520      // Start of integral types.
6521      &ASTContext::IntTy,
6522      &ASTContext::LongTy,
6523      &ASTContext::LongLongTy,
6524      &ASTContext::Int128Ty,
6525      &ASTContext::UnsignedIntTy,
6526      &ASTContext::UnsignedLongTy,
6527      &ASTContext::UnsignedLongLongTy,
6528      &ASTContext::UnsignedInt128Ty,
6529      // End of promoted types.
6530
6531      &ASTContext::BoolTy,
6532      &ASTContext::CharTy,
6533      &ASTContext::WCharTy,
6534      &ASTContext::Char16Ty,
6535      &ASTContext::Char32Ty,
6536      &ASTContext::SignedCharTy,
6537      &ASTContext::ShortTy,
6538      &ASTContext::UnsignedCharTy,
6539      &ASTContext::UnsignedShortTy,
6540      // End of integral types.
6541      // FIXME: What about complex? What about half?
6542    };
6543    return S.Context.*ArithmeticTypes[index];
6544  }
6545
6546  /// \brief Gets the canonical type resulting from the usual arithemetic
6547  /// converions for the given arithmetic types.
6548  CanQualType getUsualArithmeticConversions(unsigned L, unsigned R) {
6549    // Accelerator table for performing the usual arithmetic conversions.
6550    // The rules are basically:
6551    //   - if either is floating-point, use the wider floating-point
6552    //   - if same signedness, use the higher rank
6553    //   - if same size, use unsigned of the higher rank
6554    //   - use the larger type
6555    // These rules, together with the axiom that higher ranks are
6556    // never smaller, are sufficient to precompute all of these results
6557    // *except* when dealing with signed types of higher rank.
6558    // (we could precompute SLL x UI for all known platforms, but it's
6559    // better not to make any assumptions).
6560    // We assume that int128 has a higher rank than long long on all platforms.
6561    enum PromotedType {
6562            Dep=-1,
6563            Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128
6564    };
6565    static const PromotedType ConversionsTable[LastPromotedArithmeticType]
6566                                        [LastPromotedArithmeticType] = {
6567/* Flt*/ {  Flt,  Dbl, LDbl,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt,  Flt },
6568/* Dbl*/ {  Dbl,  Dbl, LDbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl,  Dbl },
6569/*LDbl*/ { LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl, LDbl },
6570/*  SI*/ {  Flt,  Dbl, LDbl,   SI,   SL,  SLL, S128,   UI,   UL,  ULL, U128 },
6571/*  SL*/ {  Flt,  Dbl, LDbl,   SL,   SL,  SLL, S128,  Dep,   UL,  ULL, U128 },
6572/* SLL*/ {  Flt,  Dbl, LDbl,  SLL,  SLL,  SLL, S128,  Dep,  Dep,  ULL, U128 },
6573/*S128*/ {  Flt,  Dbl, LDbl, S128, S128, S128, S128, S128, S128, S128, U128 },
6574/*  UI*/ {  Flt,  Dbl, LDbl,   UI,  Dep,  Dep, S128,   UI,   UL,  ULL, U128 },
6575/*  UL*/ {  Flt,  Dbl, LDbl,   UL,   UL,  Dep, S128,   UL,   UL,  ULL, U128 },
6576/* ULL*/ {  Flt,  Dbl, LDbl,  ULL,  ULL,  ULL, S128,  ULL,  ULL,  ULL, U128 },
6577/*U128*/ {  Flt,  Dbl, LDbl, U128, U128, U128, U128, U128, U128, U128, U128 },
6578    };
6579
6580    assert(L < LastPromotedArithmeticType);
6581    assert(R < LastPromotedArithmeticType);
6582    int Idx = ConversionsTable[L][R];
6583
6584    // Fast path: the table gives us a concrete answer.
6585    if (Idx != Dep) return getArithmeticType(Idx);
6586
6587    // Slow path: we need to compare widths.
6588    // An invariant is that the signed type has higher rank.
6589    CanQualType LT = getArithmeticType(L),
6590                RT = getArithmeticType(R);
6591    unsigned LW = S.Context.getIntWidth(LT),
6592             RW = S.Context.getIntWidth(RT);
6593
6594    // If they're different widths, use the signed type.
6595    if (LW > RW) return LT;
6596    else if (LW < RW) return RT;
6597
6598    // Otherwise, use the unsigned type of the signed type's rank.
6599    if (L == SL || R == SL) return S.Context.UnsignedLongTy;
6600    assert(L == SLL || R == SLL);
6601    return S.Context.UnsignedLongLongTy;
6602  }
6603
6604  /// \brief Helper method to factor out the common pattern of adding overloads
6605  /// for '++' and '--' builtin operators.
6606  void addPlusPlusMinusMinusStyleOverloads(QualType CandidateTy,
6607                                           bool HasVolatile,
6608                                           bool HasRestrict) {
6609    QualType ParamTypes[2] = {
6610      S.Context.getLValueReferenceType(CandidateTy),
6611      S.Context.IntTy
6612    };
6613
6614    // Non-volatile version.
6615    if (NumArgs == 1)
6616      S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6617    else
6618      S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6619
6620    // Use a heuristic to reduce number of builtin candidates in the set:
6621    // add volatile version only if there are conversions to a volatile type.
6622    if (HasVolatile) {
6623      ParamTypes[0] =
6624        S.Context.getLValueReferenceType(
6625          S.Context.getVolatileType(CandidateTy));
6626      if (NumArgs == 1)
6627        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6628      else
6629        S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6630    }
6631
6632    // Add restrict version only if there are conversions to a restrict type
6633    // and our candidate type is a non-restrict-qualified pointer.
6634    if (HasRestrict && CandidateTy->isAnyPointerType() &&
6635        !CandidateTy.isRestrictQualified()) {
6636      ParamTypes[0]
6637        = S.Context.getLValueReferenceType(
6638            S.Context.getCVRQualifiedType(CandidateTy, Qualifiers::Restrict));
6639      if (NumArgs == 1)
6640        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
6641      else
6642        S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6643
6644      if (HasVolatile) {
6645        ParamTypes[0]
6646          = S.Context.getLValueReferenceType(
6647              S.Context.getCVRQualifiedType(CandidateTy,
6648                                            (Qualifiers::Volatile |
6649                                             Qualifiers::Restrict)));
6650        if (NumArgs == 1)
6651          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1,
6652                                CandidateSet);
6653        else
6654          S.AddBuiltinCandidate(CandidateTy, ParamTypes, Args, 2, CandidateSet);
6655      }
6656    }
6657
6658  }
6659
6660public:
6661  BuiltinOperatorOverloadBuilder(
6662    Sema &S, Expr **Args, unsigned NumArgs,
6663    Qualifiers VisibleTypeConversionsQuals,
6664    bool HasArithmeticOrEnumeralCandidateType,
6665    SmallVectorImpl<BuiltinCandidateTypeSet> &CandidateTypes,
6666    OverloadCandidateSet &CandidateSet)
6667    : S(S), Args(Args), NumArgs(NumArgs),
6668      VisibleTypeConversionsQuals(VisibleTypeConversionsQuals),
6669      HasArithmeticOrEnumeralCandidateType(
6670        HasArithmeticOrEnumeralCandidateType),
6671      CandidateTypes(CandidateTypes),
6672      CandidateSet(CandidateSet) {
6673    // Validate some of our static helper constants in debug builds.
6674    assert(getArithmeticType(FirstPromotedIntegralType) == S.Context.IntTy &&
6675           "Invalid first promoted integral type");
6676    assert(getArithmeticType(LastPromotedIntegralType - 1)
6677             == S.Context.UnsignedInt128Ty &&
6678           "Invalid last promoted integral type");
6679    assert(getArithmeticType(FirstPromotedArithmeticType)
6680             == S.Context.FloatTy &&
6681           "Invalid first promoted arithmetic type");
6682    assert(getArithmeticType(LastPromotedArithmeticType - 1)
6683             == S.Context.UnsignedInt128Ty &&
6684           "Invalid last promoted arithmetic type");
6685  }
6686
6687  // C++ [over.built]p3:
6688  //
6689  //   For every pair (T, VQ), where T is an arithmetic type, and VQ
6690  //   is either volatile or empty, there exist candidate operator
6691  //   functions of the form
6692  //
6693  //       VQ T&      operator++(VQ T&);
6694  //       T          operator++(VQ T&, int);
6695  //
6696  // C++ [over.built]p4:
6697  //
6698  //   For every pair (T, VQ), where T is an arithmetic type other
6699  //   than bool, and VQ is either volatile or empty, there exist
6700  //   candidate operator functions of the form
6701  //
6702  //       VQ T&      operator--(VQ T&);
6703  //       T          operator--(VQ T&, int);
6704  void addPlusPlusMinusMinusArithmeticOverloads(OverloadedOperatorKind Op) {
6705    if (!HasArithmeticOrEnumeralCandidateType)
6706      return;
6707
6708    for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
6709         Arith < NumArithmeticTypes; ++Arith) {
6710      addPlusPlusMinusMinusStyleOverloads(
6711        getArithmeticType(Arith),
6712        VisibleTypeConversionsQuals.hasVolatile(),
6713        VisibleTypeConversionsQuals.hasRestrict());
6714    }
6715  }
6716
6717  // C++ [over.built]p5:
6718  //
6719  //   For every pair (T, VQ), where T is a cv-qualified or
6720  //   cv-unqualified object type, and VQ is either volatile or
6721  //   empty, there exist candidate operator functions of the form
6722  //
6723  //       T*VQ&      operator++(T*VQ&);
6724  //       T*VQ&      operator--(T*VQ&);
6725  //       T*         operator++(T*VQ&, int);
6726  //       T*         operator--(T*VQ&, int);
6727  void addPlusPlusMinusMinusPointerOverloads() {
6728    for (BuiltinCandidateTypeSet::iterator
6729              Ptr = CandidateTypes[0].pointer_begin(),
6730           PtrEnd = CandidateTypes[0].pointer_end();
6731         Ptr != PtrEnd; ++Ptr) {
6732      // Skip pointer types that aren't pointers to object types.
6733      if (!(*Ptr)->getPointeeType()->isObjectType())
6734        continue;
6735
6736      addPlusPlusMinusMinusStyleOverloads(*Ptr,
6737        (!(*Ptr).isVolatileQualified() &&
6738         VisibleTypeConversionsQuals.hasVolatile()),
6739        (!(*Ptr).isRestrictQualified() &&
6740         VisibleTypeConversionsQuals.hasRestrict()));
6741    }
6742  }
6743
6744  // C++ [over.built]p6:
6745  //   For every cv-qualified or cv-unqualified object type T, there
6746  //   exist candidate operator functions of the form
6747  //
6748  //       T&         operator*(T*);
6749  //
6750  // C++ [over.built]p7:
6751  //   For every function type T that does not have cv-qualifiers or a
6752  //   ref-qualifier, there exist candidate operator functions of the form
6753  //       T&         operator*(T*);
6754  void addUnaryStarPointerOverloads() {
6755    for (BuiltinCandidateTypeSet::iterator
6756              Ptr = CandidateTypes[0].pointer_begin(),
6757           PtrEnd = CandidateTypes[0].pointer_end();
6758         Ptr != PtrEnd; ++Ptr) {
6759      QualType ParamTy = *Ptr;
6760      QualType PointeeTy = ParamTy->getPointeeType();
6761      if (!PointeeTy->isObjectType() && !PointeeTy->isFunctionType())
6762        continue;
6763
6764      if (const FunctionProtoType *Proto =PointeeTy->getAs<FunctionProtoType>())
6765        if (Proto->getTypeQuals() || Proto->getRefQualifier())
6766          continue;
6767
6768      S.AddBuiltinCandidate(S.Context.getLValueReferenceType(PointeeTy),
6769                            &ParamTy, Args, 1, CandidateSet);
6770    }
6771  }
6772
6773  // C++ [over.built]p9:
6774  //  For every promoted arithmetic type T, there exist candidate
6775  //  operator functions of the form
6776  //
6777  //       T         operator+(T);
6778  //       T         operator-(T);
6779  void addUnaryPlusOrMinusArithmeticOverloads() {
6780    if (!HasArithmeticOrEnumeralCandidateType)
6781      return;
6782
6783    for (unsigned Arith = FirstPromotedArithmeticType;
6784         Arith < LastPromotedArithmeticType; ++Arith) {
6785      QualType ArithTy = getArithmeticType(Arith);
6786      S.AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
6787    }
6788
6789    // Extension: We also add these operators for vector types.
6790    for (BuiltinCandidateTypeSet::iterator
6791              Vec = CandidateTypes[0].vector_begin(),
6792           VecEnd = CandidateTypes[0].vector_end();
6793         Vec != VecEnd; ++Vec) {
6794      QualType VecTy = *Vec;
6795      S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6796    }
6797  }
6798
6799  // C++ [over.built]p8:
6800  //   For every type T, there exist candidate operator functions of
6801  //   the form
6802  //
6803  //       T*         operator+(T*);
6804  void addUnaryPlusPointerOverloads() {
6805    for (BuiltinCandidateTypeSet::iterator
6806              Ptr = CandidateTypes[0].pointer_begin(),
6807           PtrEnd = CandidateTypes[0].pointer_end();
6808         Ptr != PtrEnd; ++Ptr) {
6809      QualType ParamTy = *Ptr;
6810      S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
6811    }
6812  }
6813
6814  // C++ [over.built]p10:
6815  //   For every promoted integral type T, there exist candidate
6816  //   operator functions of the form
6817  //
6818  //        T         operator~(T);
6819  void addUnaryTildePromotedIntegralOverloads() {
6820    if (!HasArithmeticOrEnumeralCandidateType)
6821      return;
6822
6823    for (unsigned Int = FirstPromotedIntegralType;
6824         Int < LastPromotedIntegralType; ++Int) {
6825      QualType IntTy = getArithmeticType(Int);
6826      S.AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
6827    }
6828
6829    // Extension: We also add this operator for vector types.
6830    for (BuiltinCandidateTypeSet::iterator
6831              Vec = CandidateTypes[0].vector_begin(),
6832           VecEnd = CandidateTypes[0].vector_end();
6833         Vec != VecEnd; ++Vec) {
6834      QualType VecTy = *Vec;
6835      S.AddBuiltinCandidate(VecTy, &VecTy, Args, 1, CandidateSet);
6836    }
6837  }
6838
6839  // C++ [over.match.oper]p16:
6840  //   For every pointer to member type T, there exist candidate operator
6841  //   functions of the form
6842  //
6843  //        bool operator==(T,T);
6844  //        bool operator!=(T,T);
6845  void addEqualEqualOrNotEqualMemberPointerOverloads() {
6846    /// Set of (canonical) types that we've already handled.
6847    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6848
6849    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6850      for (BuiltinCandidateTypeSet::iterator
6851                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
6852             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
6853           MemPtr != MemPtrEnd;
6854           ++MemPtr) {
6855        // Don't add the same builtin candidate twice.
6856        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
6857          continue;
6858
6859        QualType ParamTypes[2] = { *MemPtr, *MemPtr };
6860        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6861                              CandidateSet);
6862      }
6863    }
6864  }
6865
6866  // C++ [over.built]p15:
6867  //
6868  //   For every T, where T is an enumeration type, a pointer type, or
6869  //   std::nullptr_t, there exist candidate operator functions of the form
6870  //
6871  //        bool       operator<(T, T);
6872  //        bool       operator>(T, T);
6873  //        bool       operator<=(T, T);
6874  //        bool       operator>=(T, T);
6875  //        bool       operator==(T, T);
6876  //        bool       operator!=(T, T);
6877  void addRelationalPointerOrEnumeralOverloads() {
6878    // C++ [over.match.oper]p3:
6879    //   [...]the built-in candidates include all of the candidate operator
6880    //   functions defined in 13.6 that, compared to the given operator, [...]
6881    //   do not have the same parameter-type-list as any non-template non-member
6882    //   candidate.
6883    //
6884    // Note that in practice, this only affects enumeration types because there
6885    // aren't any built-in candidates of record type, and a user-defined operator
6886    // must have an operand of record or enumeration type. Also, the only other
6887    // overloaded operator with enumeration arguments, operator=,
6888    // cannot be overloaded for enumeration types, so this is the only place
6889    // where we must suppress candidates like this.
6890    llvm::DenseSet<std::pair<CanQualType, CanQualType> >
6891      UserDefinedBinaryOperators;
6892
6893    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6894      if (CandidateTypes[ArgIdx].enumeration_begin() !=
6895          CandidateTypes[ArgIdx].enumeration_end()) {
6896        for (OverloadCandidateSet::iterator C = CandidateSet.begin(),
6897                                         CEnd = CandidateSet.end();
6898             C != CEnd; ++C) {
6899          if (!C->Viable || !C->Function || C->Function->getNumParams() != 2)
6900            continue;
6901
6902          if (C->Function->isFunctionTemplateSpecialization())
6903            continue;
6904
6905          QualType FirstParamType =
6906            C->Function->getParamDecl(0)->getType().getUnqualifiedType();
6907          QualType SecondParamType =
6908            C->Function->getParamDecl(1)->getType().getUnqualifiedType();
6909
6910          // Skip if either parameter isn't of enumeral type.
6911          if (!FirstParamType->isEnumeralType() ||
6912              !SecondParamType->isEnumeralType())
6913            continue;
6914
6915          // Add this operator to the set of known user-defined operators.
6916          UserDefinedBinaryOperators.insert(
6917            std::make_pair(S.Context.getCanonicalType(FirstParamType),
6918                           S.Context.getCanonicalType(SecondParamType)));
6919        }
6920      }
6921    }
6922
6923    /// Set of (canonical) types that we've already handled.
6924    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6925
6926    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
6927      for (BuiltinCandidateTypeSet::iterator
6928                Ptr = CandidateTypes[ArgIdx].pointer_begin(),
6929             PtrEnd = CandidateTypes[ArgIdx].pointer_end();
6930           Ptr != PtrEnd; ++Ptr) {
6931        // Don't add the same builtin candidate twice.
6932        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
6933          continue;
6934
6935        QualType ParamTypes[2] = { *Ptr, *Ptr };
6936        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6937                              CandidateSet);
6938      }
6939      for (BuiltinCandidateTypeSet::iterator
6940                Enum = CandidateTypes[ArgIdx].enumeration_begin(),
6941             EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
6942           Enum != EnumEnd; ++Enum) {
6943        CanQualType CanonType = S.Context.getCanonicalType(*Enum);
6944
6945        // Don't add the same builtin candidate twice, or if a user defined
6946        // candidate exists.
6947        if (!AddedTypes.insert(CanonType) ||
6948            UserDefinedBinaryOperators.count(std::make_pair(CanonType,
6949                                                            CanonType)))
6950          continue;
6951
6952        QualType ParamTypes[2] = { *Enum, *Enum };
6953        S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6954                              CandidateSet);
6955      }
6956
6957      if (CandidateTypes[ArgIdx].hasNullPtrType()) {
6958        CanQualType NullPtrTy = S.Context.getCanonicalType(S.Context.NullPtrTy);
6959        if (AddedTypes.insert(NullPtrTy) &&
6960            !UserDefinedBinaryOperators.count(std::make_pair(NullPtrTy,
6961                                                             NullPtrTy))) {
6962          QualType ParamTypes[2] = { NullPtrTy, NullPtrTy };
6963          S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2,
6964                                CandidateSet);
6965        }
6966      }
6967    }
6968  }
6969
6970  // C++ [over.built]p13:
6971  //
6972  //   For every cv-qualified or cv-unqualified object type T
6973  //   there exist candidate operator functions of the form
6974  //
6975  //      T*         operator+(T*, ptrdiff_t);
6976  //      T&         operator[](T*, ptrdiff_t);    [BELOW]
6977  //      T*         operator-(T*, ptrdiff_t);
6978  //      T*         operator+(ptrdiff_t, T*);
6979  //      T&         operator[](ptrdiff_t, T*);    [BELOW]
6980  //
6981  // C++ [over.built]p14:
6982  //
6983  //   For every T, where T is a pointer to object type, there
6984  //   exist candidate operator functions of the form
6985  //
6986  //      ptrdiff_t  operator-(T, T);
6987  void addBinaryPlusOrMinusPointerOverloads(OverloadedOperatorKind Op) {
6988    /// Set of (canonical) types that we've already handled.
6989    llvm::SmallPtrSet<QualType, 8> AddedTypes;
6990
6991    for (int Arg = 0; Arg < 2; ++Arg) {
6992      QualType AsymetricParamTypes[2] = {
6993        S.Context.getPointerDiffType(),
6994        S.Context.getPointerDiffType(),
6995      };
6996      for (BuiltinCandidateTypeSet::iterator
6997                Ptr = CandidateTypes[Arg].pointer_begin(),
6998             PtrEnd = CandidateTypes[Arg].pointer_end();
6999           Ptr != PtrEnd; ++Ptr) {
7000        QualType PointeeTy = (*Ptr)->getPointeeType();
7001        if (!PointeeTy->isObjectType())
7002          continue;
7003
7004        AsymetricParamTypes[Arg] = *Ptr;
7005        if (Arg == 0 || Op == OO_Plus) {
7006          // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
7007          // T* operator+(ptrdiff_t, T*);
7008          S.AddBuiltinCandidate(*Ptr, AsymetricParamTypes, Args, 2,
7009                                CandidateSet);
7010        }
7011        if (Op == OO_Minus) {
7012          // ptrdiff_t operator-(T, T);
7013          if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7014            continue;
7015
7016          QualType ParamTypes[2] = { *Ptr, *Ptr };
7017          S.AddBuiltinCandidate(S.Context.getPointerDiffType(), ParamTypes,
7018                                Args, 2, CandidateSet);
7019        }
7020      }
7021    }
7022  }
7023
7024  // C++ [over.built]p12:
7025  //
7026  //   For every pair of promoted arithmetic types L and R, there
7027  //   exist candidate operator functions of the form
7028  //
7029  //        LR         operator*(L, R);
7030  //        LR         operator/(L, R);
7031  //        LR         operator+(L, R);
7032  //        LR         operator-(L, R);
7033  //        bool       operator<(L, R);
7034  //        bool       operator>(L, R);
7035  //        bool       operator<=(L, R);
7036  //        bool       operator>=(L, R);
7037  //        bool       operator==(L, R);
7038  //        bool       operator!=(L, R);
7039  //
7040  //   where LR is the result of the usual arithmetic conversions
7041  //   between types L and R.
7042  //
7043  // C++ [over.built]p24:
7044  //
7045  //   For every pair of promoted arithmetic types L and R, there exist
7046  //   candidate operator functions of the form
7047  //
7048  //        LR       operator?(bool, L, R);
7049  //
7050  //   where LR is the result of the usual arithmetic conversions
7051  //   between types L and R.
7052  // Our candidates ignore the first parameter.
7053  void addGenericBinaryArithmeticOverloads(bool isComparison) {
7054    if (!HasArithmeticOrEnumeralCandidateType)
7055      return;
7056
7057    for (unsigned Left = FirstPromotedArithmeticType;
7058         Left < LastPromotedArithmeticType; ++Left) {
7059      for (unsigned Right = FirstPromotedArithmeticType;
7060           Right < LastPromotedArithmeticType; ++Right) {
7061        QualType LandR[2] = { getArithmeticType(Left),
7062                              getArithmeticType(Right) };
7063        QualType Result =
7064          isComparison ? S.Context.BoolTy
7065                       : getUsualArithmeticConversions(Left, Right);
7066        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7067      }
7068    }
7069
7070    // Extension: Add the binary operators ==, !=, <, <=, >=, >, *, /, and the
7071    // conditional operator for vector types.
7072    for (BuiltinCandidateTypeSet::iterator
7073              Vec1 = CandidateTypes[0].vector_begin(),
7074           Vec1End = CandidateTypes[0].vector_end();
7075         Vec1 != Vec1End; ++Vec1) {
7076      for (BuiltinCandidateTypeSet::iterator
7077                Vec2 = CandidateTypes[1].vector_begin(),
7078             Vec2End = CandidateTypes[1].vector_end();
7079           Vec2 != Vec2End; ++Vec2) {
7080        QualType LandR[2] = { *Vec1, *Vec2 };
7081        QualType Result = S.Context.BoolTy;
7082        if (!isComparison) {
7083          if ((*Vec1)->isExtVectorType() || !(*Vec2)->isExtVectorType())
7084            Result = *Vec1;
7085          else
7086            Result = *Vec2;
7087        }
7088
7089        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7090      }
7091    }
7092  }
7093
7094  // C++ [over.built]p17:
7095  //
7096  //   For every pair of promoted integral types L and R, there
7097  //   exist candidate operator functions of the form
7098  //
7099  //      LR         operator%(L, R);
7100  //      LR         operator&(L, R);
7101  //      LR         operator^(L, R);
7102  //      LR         operator|(L, R);
7103  //      L          operator<<(L, R);
7104  //      L          operator>>(L, R);
7105  //
7106  //   where LR is the result of the usual arithmetic conversions
7107  //   between types L and R.
7108  void addBinaryBitwiseArithmeticOverloads(OverloadedOperatorKind Op) {
7109    if (!HasArithmeticOrEnumeralCandidateType)
7110      return;
7111
7112    for (unsigned Left = FirstPromotedIntegralType;
7113         Left < LastPromotedIntegralType; ++Left) {
7114      for (unsigned Right = FirstPromotedIntegralType;
7115           Right < LastPromotedIntegralType; ++Right) {
7116        QualType LandR[2] = { getArithmeticType(Left),
7117                              getArithmeticType(Right) };
7118        QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
7119            ? LandR[0]
7120            : getUsualArithmeticConversions(Left, Right);
7121        S.AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
7122      }
7123    }
7124  }
7125
7126  // C++ [over.built]p20:
7127  //
7128  //   For every pair (T, VQ), where T is an enumeration or
7129  //   pointer to member type and VQ is either volatile or
7130  //   empty, there exist candidate operator functions of the form
7131  //
7132  //        VQ T&      operator=(VQ T&, T);
7133  void addAssignmentMemberPointerOrEnumeralOverloads() {
7134    /// Set of (canonical) types that we've already handled.
7135    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7136
7137    for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7138      for (BuiltinCandidateTypeSet::iterator
7139                Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7140             EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7141           Enum != EnumEnd; ++Enum) {
7142        if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7143          continue;
7144
7145        AddBuiltinAssignmentOperatorCandidates(S, *Enum, Args, 2,
7146                                               CandidateSet);
7147      }
7148
7149      for (BuiltinCandidateTypeSet::iterator
7150                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7151             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7152           MemPtr != MemPtrEnd; ++MemPtr) {
7153        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7154          continue;
7155
7156        AddBuiltinAssignmentOperatorCandidates(S, *MemPtr, Args, 2,
7157                                               CandidateSet);
7158      }
7159    }
7160  }
7161
7162  // C++ [over.built]p19:
7163  //
7164  //   For every pair (T, VQ), where T is any type and VQ is either
7165  //   volatile or empty, there exist candidate operator functions
7166  //   of the form
7167  //
7168  //        T*VQ&      operator=(T*VQ&, T*);
7169  //
7170  // C++ [over.built]p21:
7171  //
7172  //   For every pair (T, VQ), where T is a cv-qualified or
7173  //   cv-unqualified object type and VQ is either volatile or
7174  //   empty, there exist candidate operator functions of the form
7175  //
7176  //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
7177  //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
7178  void addAssignmentPointerOverloads(bool isEqualOp) {
7179    /// Set of (canonical) types that we've already handled.
7180    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7181
7182    for (BuiltinCandidateTypeSet::iterator
7183              Ptr = CandidateTypes[0].pointer_begin(),
7184           PtrEnd = CandidateTypes[0].pointer_end();
7185         Ptr != PtrEnd; ++Ptr) {
7186      // If this is operator=, keep track of the builtin candidates we added.
7187      if (isEqualOp)
7188        AddedTypes.insert(S.Context.getCanonicalType(*Ptr));
7189      else if (!(*Ptr)->getPointeeType()->isObjectType())
7190        continue;
7191
7192      // non-volatile version
7193      QualType ParamTypes[2] = {
7194        S.Context.getLValueReferenceType(*Ptr),
7195        isEqualOp ? *Ptr : S.Context.getPointerDiffType(),
7196      };
7197      S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7198                            /*IsAssigmentOperator=*/ isEqualOp);
7199
7200      bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7201                          VisibleTypeConversionsQuals.hasVolatile();
7202      if (NeedVolatile) {
7203        // volatile version
7204        ParamTypes[0] =
7205          S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7206        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7207                              /*IsAssigmentOperator=*/isEqualOp);
7208      }
7209
7210      if (!(*Ptr).isRestrictQualified() &&
7211          VisibleTypeConversionsQuals.hasRestrict()) {
7212        // restrict version
7213        ParamTypes[0]
7214          = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7215        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7216                              /*IsAssigmentOperator=*/isEqualOp);
7217
7218        if (NeedVolatile) {
7219          // volatile restrict version
7220          ParamTypes[0]
7221            = S.Context.getLValueReferenceType(
7222                S.Context.getCVRQualifiedType(*Ptr,
7223                                              (Qualifiers::Volatile |
7224                                               Qualifiers::Restrict)));
7225          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7226                                CandidateSet,
7227                                /*IsAssigmentOperator=*/isEqualOp);
7228        }
7229      }
7230    }
7231
7232    if (isEqualOp) {
7233      for (BuiltinCandidateTypeSet::iterator
7234                Ptr = CandidateTypes[1].pointer_begin(),
7235             PtrEnd = CandidateTypes[1].pointer_end();
7236           Ptr != PtrEnd; ++Ptr) {
7237        // Make sure we don't add the same candidate twice.
7238        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7239          continue;
7240
7241        QualType ParamTypes[2] = {
7242          S.Context.getLValueReferenceType(*Ptr),
7243          *Ptr,
7244        };
7245
7246        // non-volatile version
7247        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7248                              /*IsAssigmentOperator=*/true);
7249
7250        bool NeedVolatile = !(*Ptr).isVolatileQualified() &&
7251                           VisibleTypeConversionsQuals.hasVolatile();
7252        if (NeedVolatile) {
7253          // volatile version
7254          ParamTypes[0] =
7255            S.Context.getLValueReferenceType(S.Context.getVolatileType(*Ptr));
7256          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7257                                CandidateSet, /*IsAssigmentOperator=*/true);
7258        }
7259
7260        if (!(*Ptr).isRestrictQualified() &&
7261            VisibleTypeConversionsQuals.hasRestrict()) {
7262          // restrict version
7263          ParamTypes[0]
7264            = S.Context.getLValueReferenceType(S.Context.getRestrictType(*Ptr));
7265          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7266                                CandidateSet, /*IsAssigmentOperator=*/true);
7267
7268          if (NeedVolatile) {
7269            // volatile restrict version
7270            ParamTypes[0]
7271              = S.Context.getLValueReferenceType(
7272                  S.Context.getCVRQualifiedType(*Ptr,
7273                                                (Qualifiers::Volatile |
7274                                                 Qualifiers::Restrict)));
7275            S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7276                                  CandidateSet, /*IsAssigmentOperator=*/true);
7277
7278          }
7279        }
7280      }
7281    }
7282  }
7283
7284  // C++ [over.built]p18:
7285  //
7286  //   For every triple (L, VQ, R), where L is an arithmetic type,
7287  //   VQ is either volatile or empty, and R is a promoted
7288  //   arithmetic type, there exist candidate operator functions of
7289  //   the form
7290  //
7291  //        VQ L&      operator=(VQ L&, R);
7292  //        VQ L&      operator*=(VQ L&, R);
7293  //        VQ L&      operator/=(VQ L&, R);
7294  //        VQ L&      operator+=(VQ L&, R);
7295  //        VQ L&      operator-=(VQ L&, R);
7296  void addAssignmentArithmeticOverloads(bool isEqualOp) {
7297    if (!HasArithmeticOrEnumeralCandidateType)
7298      return;
7299
7300    for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
7301      for (unsigned Right = FirstPromotedArithmeticType;
7302           Right < LastPromotedArithmeticType; ++Right) {
7303        QualType ParamTypes[2];
7304        ParamTypes[1] = getArithmeticType(Right);
7305
7306        // Add this built-in operator as a candidate (VQ is empty).
7307        ParamTypes[0] =
7308          S.Context.getLValueReferenceType(getArithmeticType(Left));
7309        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7310                              /*IsAssigmentOperator=*/isEqualOp);
7311
7312        // Add this built-in operator as a candidate (VQ is 'volatile').
7313        if (VisibleTypeConversionsQuals.hasVolatile()) {
7314          ParamTypes[0] =
7315            S.Context.getVolatileType(getArithmeticType(Left));
7316          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7317          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7318                                CandidateSet,
7319                                /*IsAssigmentOperator=*/isEqualOp);
7320        }
7321      }
7322    }
7323
7324    // Extension: Add the binary operators =, +=, -=, *=, /= for vector types.
7325    for (BuiltinCandidateTypeSet::iterator
7326              Vec1 = CandidateTypes[0].vector_begin(),
7327           Vec1End = CandidateTypes[0].vector_end();
7328         Vec1 != Vec1End; ++Vec1) {
7329      for (BuiltinCandidateTypeSet::iterator
7330                Vec2 = CandidateTypes[1].vector_begin(),
7331             Vec2End = CandidateTypes[1].vector_end();
7332           Vec2 != Vec2End; ++Vec2) {
7333        QualType ParamTypes[2];
7334        ParamTypes[1] = *Vec2;
7335        // Add this built-in operator as a candidate (VQ is empty).
7336        ParamTypes[0] = S.Context.getLValueReferenceType(*Vec1);
7337        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
7338                              /*IsAssigmentOperator=*/isEqualOp);
7339
7340        // Add this built-in operator as a candidate (VQ is 'volatile').
7341        if (VisibleTypeConversionsQuals.hasVolatile()) {
7342          ParamTypes[0] = S.Context.getVolatileType(*Vec1);
7343          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7344          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7345                                CandidateSet,
7346                                /*IsAssigmentOperator=*/isEqualOp);
7347        }
7348      }
7349    }
7350  }
7351
7352  // C++ [over.built]p22:
7353  //
7354  //   For every triple (L, VQ, R), where L is an integral type, VQ
7355  //   is either volatile or empty, and R is a promoted integral
7356  //   type, there exist candidate operator functions of the form
7357  //
7358  //        VQ L&       operator%=(VQ L&, R);
7359  //        VQ L&       operator<<=(VQ L&, R);
7360  //        VQ L&       operator>>=(VQ L&, R);
7361  //        VQ L&       operator&=(VQ L&, R);
7362  //        VQ L&       operator^=(VQ L&, R);
7363  //        VQ L&       operator|=(VQ L&, R);
7364  void addAssignmentIntegralOverloads() {
7365    if (!HasArithmeticOrEnumeralCandidateType)
7366      return;
7367
7368    for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
7369      for (unsigned Right = FirstPromotedIntegralType;
7370           Right < LastPromotedIntegralType; ++Right) {
7371        QualType ParamTypes[2];
7372        ParamTypes[1] = getArithmeticType(Right);
7373
7374        // Add this built-in operator as a candidate (VQ is empty).
7375        ParamTypes[0] =
7376          S.Context.getLValueReferenceType(getArithmeticType(Left));
7377        S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
7378        if (VisibleTypeConversionsQuals.hasVolatile()) {
7379          // Add this built-in operator as a candidate (VQ is 'volatile').
7380          ParamTypes[0] = getArithmeticType(Left);
7381          ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
7382          ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
7383          S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2,
7384                                CandidateSet);
7385        }
7386      }
7387    }
7388  }
7389
7390  // C++ [over.operator]p23:
7391  //
7392  //   There also exist candidate operator functions of the form
7393  //
7394  //        bool        operator!(bool);
7395  //        bool        operator&&(bool, bool);
7396  //        bool        operator||(bool, bool);
7397  void addExclaimOverload() {
7398    QualType ParamTy = S.Context.BoolTy;
7399    S.AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
7400                          /*IsAssignmentOperator=*/false,
7401                          /*NumContextualBoolArguments=*/1);
7402  }
7403  void addAmpAmpOrPipePipeOverload() {
7404    QualType ParamTypes[2] = { S.Context.BoolTy, S.Context.BoolTy };
7405    S.AddBuiltinCandidate(S.Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
7406                          /*IsAssignmentOperator=*/false,
7407                          /*NumContextualBoolArguments=*/2);
7408  }
7409
7410  // C++ [over.built]p13:
7411  //
7412  //   For every cv-qualified or cv-unqualified object type T there
7413  //   exist candidate operator functions of the form
7414  //
7415  //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
7416  //        T&         operator[](T*, ptrdiff_t);
7417  //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
7418  //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
7419  //        T&         operator[](ptrdiff_t, T*);
7420  void addSubscriptOverloads() {
7421    for (BuiltinCandidateTypeSet::iterator
7422              Ptr = CandidateTypes[0].pointer_begin(),
7423           PtrEnd = CandidateTypes[0].pointer_end();
7424         Ptr != PtrEnd; ++Ptr) {
7425      QualType ParamTypes[2] = { *Ptr, S.Context.getPointerDiffType() };
7426      QualType PointeeType = (*Ptr)->getPointeeType();
7427      if (!PointeeType->isObjectType())
7428        continue;
7429
7430      QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7431
7432      // T& operator[](T*, ptrdiff_t)
7433      S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7434    }
7435
7436    for (BuiltinCandidateTypeSet::iterator
7437              Ptr = CandidateTypes[1].pointer_begin(),
7438           PtrEnd = CandidateTypes[1].pointer_end();
7439         Ptr != PtrEnd; ++Ptr) {
7440      QualType ParamTypes[2] = { S.Context.getPointerDiffType(), *Ptr };
7441      QualType PointeeType = (*Ptr)->getPointeeType();
7442      if (!PointeeType->isObjectType())
7443        continue;
7444
7445      QualType ResultTy = S.Context.getLValueReferenceType(PointeeType);
7446
7447      // T& operator[](ptrdiff_t, T*)
7448      S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7449    }
7450  }
7451
7452  // C++ [over.built]p11:
7453  //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
7454  //    C1 is the same type as C2 or is a derived class of C2, T is an object
7455  //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
7456  //    there exist candidate operator functions of the form
7457  //
7458  //      CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
7459  //
7460  //    where CV12 is the union of CV1 and CV2.
7461  void addArrowStarOverloads() {
7462    for (BuiltinCandidateTypeSet::iterator
7463             Ptr = CandidateTypes[0].pointer_begin(),
7464           PtrEnd = CandidateTypes[0].pointer_end();
7465         Ptr != PtrEnd; ++Ptr) {
7466      QualType C1Ty = (*Ptr);
7467      QualType C1;
7468      QualifierCollector Q1;
7469      C1 = QualType(Q1.strip(C1Ty->getPointeeType()), 0);
7470      if (!isa<RecordType>(C1))
7471        continue;
7472      // heuristic to reduce number of builtin candidates in the set.
7473      // Add volatile/restrict version only if there are conversions to a
7474      // volatile/restrict type.
7475      if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
7476        continue;
7477      if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
7478        continue;
7479      for (BuiltinCandidateTypeSet::iterator
7480                MemPtr = CandidateTypes[1].member_pointer_begin(),
7481             MemPtrEnd = CandidateTypes[1].member_pointer_end();
7482           MemPtr != MemPtrEnd; ++MemPtr) {
7483        const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
7484        QualType C2 = QualType(mptr->getClass(), 0);
7485        C2 = C2.getUnqualifiedType();
7486        if (C1 != C2 && !S.IsDerivedFrom(C1, C2))
7487          break;
7488        QualType ParamTypes[2] = { *Ptr, *MemPtr };
7489        // build CV12 T&
7490        QualType T = mptr->getPointeeType();
7491        if (!VisibleTypeConversionsQuals.hasVolatile() &&
7492            T.isVolatileQualified())
7493          continue;
7494        if (!VisibleTypeConversionsQuals.hasRestrict() &&
7495            T.isRestrictQualified())
7496          continue;
7497        T = Q1.apply(S.Context, T);
7498        QualType ResultTy = S.Context.getLValueReferenceType(T);
7499        S.AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
7500      }
7501    }
7502  }
7503
7504  // Note that we don't consider the first argument, since it has been
7505  // contextually converted to bool long ago. The candidates below are
7506  // therefore added as binary.
7507  //
7508  // C++ [over.built]p25:
7509  //   For every type T, where T is a pointer, pointer-to-member, or scoped
7510  //   enumeration type, there exist candidate operator functions of the form
7511  //
7512  //        T        operator?(bool, T, T);
7513  //
7514  void addConditionalOperatorOverloads() {
7515    /// Set of (canonical) types that we've already handled.
7516    llvm::SmallPtrSet<QualType, 8> AddedTypes;
7517
7518    for (unsigned ArgIdx = 0; ArgIdx < 2; ++ArgIdx) {
7519      for (BuiltinCandidateTypeSet::iterator
7520                Ptr = CandidateTypes[ArgIdx].pointer_begin(),
7521             PtrEnd = CandidateTypes[ArgIdx].pointer_end();
7522           Ptr != PtrEnd; ++Ptr) {
7523        if (!AddedTypes.insert(S.Context.getCanonicalType(*Ptr)))
7524          continue;
7525
7526        QualType ParamTypes[2] = { *Ptr, *Ptr };
7527        S.AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
7528      }
7529
7530      for (BuiltinCandidateTypeSet::iterator
7531                MemPtr = CandidateTypes[ArgIdx].member_pointer_begin(),
7532             MemPtrEnd = CandidateTypes[ArgIdx].member_pointer_end();
7533           MemPtr != MemPtrEnd; ++MemPtr) {
7534        if (!AddedTypes.insert(S.Context.getCanonicalType(*MemPtr)))
7535          continue;
7536
7537        QualType ParamTypes[2] = { *MemPtr, *MemPtr };
7538        S.AddBuiltinCandidate(*MemPtr, ParamTypes, Args, 2, CandidateSet);
7539      }
7540
7541      if (S.getLangOpts().CPlusPlus11) {
7542        for (BuiltinCandidateTypeSet::iterator
7543                  Enum = CandidateTypes[ArgIdx].enumeration_begin(),
7544               EnumEnd = CandidateTypes[ArgIdx].enumeration_end();
7545             Enum != EnumEnd; ++Enum) {
7546          if (!(*Enum)->getAs<EnumType>()->getDecl()->isScoped())
7547            continue;
7548
7549          if (!AddedTypes.insert(S.Context.getCanonicalType(*Enum)))
7550            continue;
7551
7552          QualType ParamTypes[2] = { *Enum, *Enum };
7553          S.AddBuiltinCandidate(*Enum, ParamTypes, Args, 2, CandidateSet);
7554        }
7555      }
7556    }
7557  }
7558};
7559
7560} // end anonymous namespace
7561
7562/// AddBuiltinOperatorCandidates - Add the appropriate built-in
7563/// operator overloads to the candidate set (C++ [over.built]), based
7564/// on the operator @p Op and the arguments given. For example, if the
7565/// operator is a binary '+', this routine might add "int
7566/// operator+(int, int)" to cover integer addition.
7567void
7568Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
7569                                   SourceLocation OpLoc,
7570                                   Expr **Args, unsigned NumArgs,
7571                                   OverloadCandidateSet& CandidateSet) {
7572  // Find all of the types that the arguments can convert to, but only
7573  // if the operator we're looking at has built-in operator candidates
7574  // that make use of these types. Also record whether we encounter non-record
7575  // candidate types or either arithmetic or enumeral candidate types.
7576  Qualifiers VisibleTypeConversionsQuals;
7577  VisibleTypeConversionsQuals.addConst();
7578  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
7579    VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
7580
7581  bool HasNonRecordCandidateType = false;
7582  bool HasArithmeticOrEnumeralCandidateType = false;
7583  SmallVector<BuiltinCandidateTypeSet, 2> CandidateTypes;
7584  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
7585    CandidateTypes.push_back(BuiltinCandidateTypeSet(*this));
7586    CandidateTypes[ArgIdx].AddTypesConvertedFrom(Args[ArgIdx]->getType(),
7587                                                 OpLoc,
7588                                                 true,
7589                                                 (Op == OO_Exclaim ||
7590                                                  Op == OO_AmpAmp ||
7591                                                  Op == OO_PipePipe),
7592                                                 VisibleTypeConversionsQuals);
7593    HasNonRecordCandidateType = HasNonRecordCandidateType ||
7594        CandidateTypes[ArgIdx].hasNonRecordTypes();
7595    HasArithmeticOrEnumeralCandidateType =
7596        HasArithmeticOrEnumeralCandidateType ||
7597        CandidateTypes[ArgIdx].hasArithmeticOrEnumeralTypes();
7598  }
7599
7600  // Exit early when no non-record types have been added to the candidate set
7601  // for any of the arguments to the operator.
7602  //
7603  // We can't exit early for !, ||, or &&, since there we have always have
7604  // 'bool' overloads.
7605  if (!HasNonRecordCandidateType &&
7606      !(Op == OO_Exclaim || Op == OO_AmpAmp || Op == OO_PipePipe))
7607    return;
7608
7609  // Setup an object to manage the common state for building overloads.
7610  BuiltinOperatorOverloadBuilder OpBuilder(*this, Args, NumArgs,
7611                                           VisibleTypeConversionsQuals,
7612                                           HasArithmeticOrEnumeralCandidateType,
7613                                           CandidateTypes, CandidateSet);
7614
7615  // Dispatch over the operation to add in only those overloads which apply.
7616  switch (Op) {
7617  case OO_None:
7618  case NUM_OVERLOADED_OPERATORS:
7619    llvm_unreachable("Expected an overloaded operator");
7620
7621  case OO_New:
7622  case OO_Delete:
7623  case OO_Array_New:
7624  case OO_Array_Delete:
7625  case OO_Call:
7626    llvm_unreachable(
7627                    "Special operators don't use AddBuiltinOperatorCandidates");
7628
7629  case OO_Comma:
7630  case OO_Arrow:
7631    // C++ [over.match.oper]p3:
7632    //   -- For the operator ',', the unary operator '&', or the
7633    //      operator '->', the built-in candidates set is empty.
7634    break;
7635
7636  case OO_Plus: // '+' is either unary or binary
7637    if (NumArgs == 1)
7638      OpBuilder.addUnaryPlusPointerOverloads();
7639    // Fall through.
7640
7641  case OO_Minus: // '-' is either unary or binary
7642    if (NumArgs == 1) {
7643      OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
7644    } else {
7645      OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
7646      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7647    }
7648    break;
7649
7650  case OO_Star: // '*' is either unary or binary
7651    if (NumArgs == 1)
7652      OpBuilder.addUnaryStarPointerOverloads();
7653    else
7654      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7655    break;
7656
7657  case OO_Slash:
7658    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7659    break;
7660
7661  case OO_PlusPlus:
7662  case OO_MinusMinus:
7663    OpBuilder.addPlusPlusMinusMinusArithmeticOverloads(Op);
7664    OpBuilder.addPlusPlusMinusMinusPointerOverloads();
7665    break;
7666
7667  case OO_EqualEqual:
7668  case OO_ExclaimEqual:
7669    OpBuilder.addEqualEqualOrNotEqualMemberPointerOverloads();
7670    // Fall through.
7671
7672  case OO_Less:
7673  case OO_Greater:
7674  case OO_LessEqual:
7675  case OO_GreaterEqual:
7676    OpBuilder.addRelationalPointerOrEnumeralOverloads();
7677    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
7678    break;
7679
7680  case OO_Percent:
7681  case OO_Caret:
7682  case OO_Pipe:
7683  case OO_LessLess:
7684  case OO_GreaterGreater:
7685    OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7686    break;
7687
7688  case OO_Amp: // '&' is either unary or binary
7689    if (NumArgs == 1)
7690      // C++ [over.match.oper]p3:
7691      //   -- For the operator ',', the unary operator '&', or the
7692      //      operator '->', the built-in candidates set is empty.
7693      break;
7694
7695    OpBuilder.addBinaryBitwiseArithmeticOverloads(Op);
7696    break;
7697
7698  case OO_Tilde:
7699    OpBuilder.addUnaryTildePromotedIntegralOverloads();
7700    break;
7701
7702  case OO_Equal:
7703    OpBuilder.addAssignmentMemberPointerOrEnumeralOverloads();
7704    // Fall through.
7705
7706  case OO_PlusEqual:
7707  case OO_MinusEqual:
7708    OpBuilder.addAssignmentPointerOverloads(Op == OO_Equal);
7709    // Fall through.
7710
7711  case OO_StarEqual:
7712  case OO_SlashEqual:
7713    OpBuilder.addAssignmentArithmeticOverloads(Op == OO_Equal);
7714    break;
7715
7716  case OO_PercentEqual:
7717  case OO_LessLessEqual:
7718  case OO_GreaterGreaterEqual:
7719  case OO_AmpEqual:
7720  case OO_CaretEqual:
7721  case OO_PipeEqual:
7722    OpBuilder.addAssignmentIntegralOverloads();
7723    break;
7724
7725  case OO_Exclaim:
7726    OpBuilder.addExclaimOverload();
7727    break;
7728
7729  case OO_AmpAmp:
7730  case OO_PipePipe:
7731    OpBuilder.addAmpAmpOrPipePipeOverload();
7732    break;
7733
7734  case OO_Subscript:
7735    OpBuilder.addSubscriptOverloads();
7736    break;
7737
7738  case OO_ArrowStar:
7739    OpBuilder.addArrowStarOverloads();
7740    break;
7741
7742  case OO_Conditional:
7743    OpBuilder.addConditionalOperatorOverloads();
7744    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
7745    break;
7746  }
7747}
7748
7749/// \brief Add function candidates found via argument-dependent lookup
7750/// to the set of overloading candidates.
7751///
7752/// This routine performs argument-dependent name lookup based on the
7753/// given function name (which may also be an operator name) and adds
7754/// all of the overload candidates found by ADL to the overload
7755/// candidate set (C++ [basic.lookup.argdep]).
7756void
7757Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
7758                                           bool Operator, SourceLocation Loc,
7759                                           ArrayRef<Expr *> Args,
7760                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
7761                                           OverloadCandidateSet& CandidateSet,
7762                                           bool PartialOverloading) {
7763  ADLResult Fns;
7764
7765  // FIXME: This approach for uniquing ADL results (and removing
7766  // redundant candidates from the set) relies on pointer-equality,
7767  // which means we need to key off the canonical decl.  However,
7768  // always going back to the canonical decl might not get us the
7769  // right set of default arguments.  What default arguments are
7770  // we supposed to consider on ADL candidates, anyway?
7771
7772  // FIXME: Pass in the explicit template arguments?
7773  ArgumentDependentLookup(Name, Operator, Loc, Args, Fns);
7774
7775  // Erase all of the candidates we already knew about.
7776  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
7777                                   CandEnd = CandidateSet.end();
7778       Cand != CandEnd; ++Cand)
7779    if (Cand->Function) {
7780      Fns.erase(Cand->Function);
7781      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
7782        Fns.erase(FunTmpl);
7783    }
7784
7785  // For each of the ADL candidates we found, add it to the overload
7786  // set.
7787  for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
7788    DeclAccessPair FoundDecl = DeclAccessPair::make(*I, AS_none);
7789    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
7790      if (ExplicitTemplateArgs)
7791        continue;
7792
7793      AddOverloadCandidate(FD, FoundDecl, Args, CandidateSet, false,
7794                           PartialOverloading);
7795    } else
7796      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
7797                                   FoundDecl, ExplicitTemplateArgs,
7798                                   Args, CandidateSet);
7799  }
7800}
7801
7802/// isBetterOverloadCandidate - Determines whether the first overload
7803/// candidate is a better candidate than the second (C++ 13.3.3p1).
7804bool
7805isBetterOverloadCandidate(Sema &S,
7806                          const OverloadCandidate &Cand1,
7807                          const OverloadCandidate &Cand2,
7808                          SourceLocation Loc,
7809                          bool UserDefinedConversion) {
7810  // Define viable functions to be better candidates than non-viable
7811  // functions.
7812  if (!Cand2.Viable)
7813    return Cand1.Viable;
7814  else if (!Cand1.Viable)
7815    return false;
7816
7817  // C++ [over.match.best]p1:
7818  //
7819  //   -- if F is a static member function, ICS1(F) is defined such
7820  //      that ICS1(F) is neither better nor worse than ICS1(G) for
7821  //      any function G, and, symmetrically, ICS1(G) is neither
7822  //      better nor worse than ICS1(F).
7823  unsigned StartArg = 0;
7824  if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
7825    StartArg = 1;
7826
7827  // C++ [over.match.best]p1:
7828  //   A viable function F1 is defined to be a better function than another
7829  //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
7830  //   conversion sequence than ICSi(F2), and then...
7831  unsigned NumArgs = Cand1.NumConversions;
7832  assert(Cand2.NumConversions == NumArgs && "Overload candidate mismatch");
7833  bool HasBetterConversion = false;
7834  for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
7835    switch (CompareImplicitConversionSequences(S,
7836                                               Cand1.Conversions[ArgIdx],
7837                                               Cand2.Conversions[ArgIdx])) {
7838    case ImplicitConversionSequence::Better:
7839      // Cand1 has a better conversion sequence.
7840      HasBetterConversion = true;
7841      break;
7842
7843    case ImplicitConversionSequence::Worse:
7844      // Cand1 can't be better than Cand2.
7845      return false;
7846
7847    case ImplicitConversionSequence::Indistinguishable:
7848      // Do nothing.
7849      break;
7850    }
7851  }
7852
7853  //    -- for some argument j, ICSj(F1) is a better conversion sequence than
7854  //       ICSj(F2), or, if not that,
7855  if (HasBetterConversion)
7856    return true;
7857
7858  //     - F1 is a non-template function and F2 is a function template
7859  //       specialization, or, if not that,
7860  if ((!Cand1.Function || !Cand1.Function->getPrimaryTemplate()) &&
7861      Cand2.Function && Cand2.Function->getPrimaryTemplate())
7862    return true;
7863
7864  //   -- F1 and F2 are function template specializations, and the function
7865  //      template for F1 is more specialized than the template for F2
7866  //      according to the partial ordering rules described in 14.5.5.2, or,
7867  //      if not that,
7868  if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
7869      Cand2.Function && Cand2.Function->getPrimaryTemplate()) {
7870    if (FunctionTemplateDecl *BetterTemplate
7871          = S.getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
7872                                         Cand2.Function->getPrimaryTemplate(),
7873                                         Loc,
7874                       isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
7875                                                             : TPOC_Call,
7876                                         Cand1.ExplicitCallArguments))
7877      return BetterTemplate == Cand1.Function->getPrimaryTemplate();
7878  }
7879
7880  //   -- the context is an initialization by user-defined conversion
7881  //      (see 8.5, 13.3.1.5) and the standard conversion sequence
7882  //      from the return type of F1 to the destination type (i.e.,
7883  //      the type of the entity being initialized) is a better
7884  //      conversion sequence than the standard conversion sequence
7885  //      from the return type of F2 to the destination type.
7886  if (UserDefinedConversion && Cand1.Function && Cand2.Function &&
7887      isa<CXXConversionDecl>(Cand1.Function) &&
7888      isa<CXXConversionDecl>(Cand2.Function)) {
7889    // First check whether we prefer one of the conversion functions over the
7890    // other. This only distinguishes the results in non-standard, extension
7891    // cases such as the conversion from a lambda closure type to a function
7892    // pointer or block.
7893    ImplicitConversionSequence::CompareKind FuncResult
7894      = compareConversionFunctions(S, Cand1.Function, Cand2.Function);
7895    if (FuncResult != ImplicitConversionSequence::Indistinguishable)
7896      return FuncResult;
7897
7898    switch (CompareStandardConversionSequences(S,
7899                                               Cand1.FinalConversion,
7900                                               Cand2.FinalConversion)) {
7901    case ImplicitConversionSequence::Better:
7902      // Cand1 has a better conversion sequence.
7903      return true;
7904
7905    case ImplicitConversionSequence::Worse:
7906      // Cand1 can't be better than Cand2.
7907      return false;
7908
7909    case ImplicitConversionSequence::Indistinguishable:
7910      // Do nothing
7911      break;
7912    }
7913  }
7914
7915  return false;
7916}
7917
7918/// \brief Computes the best viable function (C++ 13.3.3)
7919/// within an overload candidate set.
7920///
7921/// \param Loc The location of the function name (or operator symbol) for
7922/// which overload resolution occurs.
7923///
7924/// \param Best If overload resolution was successful or found a deleted
7925/// function, \p Best points to the candidate function found.
7926///
7927/// \returns The result of overload resolution.
7928OverloadingResult
7929OverloadCandidateSet::BestViableFunction(Sema &S, SourceLocation Loc,
7930                                         iterator &Best,
7931                                         bool UserDefinedConversion) {
7932  // Find the best viable function.
7933  Best = end();
7934  for (iterator Cand = begin(); Cand != end(); ++Cand) {
7935    if (Cand->Viable)
7936      if (Best == end() || isBetterOverloadCandidate(S, *Cand, *Best, Loc,
7937                                                     UserDefinedConversion))
7938        Best = Cand;
7939  }
7940
7941  // If we didn't find any viable functions, abort.
7942  if (Best == end())
7943    return OR_No_Viable_Function;
7944
7945  // Make sure that this function is better than every other viable
7946  // function. If not, we have an ambiguity.
7947  for (iterator Cand = begin(); Cand != end(); ++Cand) {
7948    if (Cand->Viable &&
7949        Cand != Best &&
7950        !isBetterOverloadCandidate(S, *Best, *Cand, Loc,
7951                                   UserDefinedConversion)) {
7952      Best = end();
7953      return OR_Ambiguous;
7954    }
7955  }
7956
7957  // Best is the best viable function.
7958  if (Best->Function &&
7959      (Best->Function->isDeleted() ||
7960       S.isFunctionConsideredUnavailable(Best->Function)))
7961    return OR_Deleted;
7962
7963  return OR_Success;
7964}
7965
7966namespace {
7967
7968enum OverloadCandidateKind {
7969  oc_function,
7970  oc_method,
7971  oc_constructor,
7972  oc_function_template,
7973  oc_method_template,
7974  oc_constructor_template,
7975  oc_implicit_default_constructor,
7976  oc_implicit_copy_constructor,
7977  oc_implicit_move_constructor,
7978  oc_implicit_copy_assignment,
7979  oc_implicit_move_assignment,
7980  oc_implicit_inherited_constructor
7981};
7982
7983OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
7984                                                FunctionDecl *Fn,
7985                                                std::string &Description) {
7986  bool isTemplate = false;
7987
7988  if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
7989    isTemplate = true;
7990    Description = S.getTemplateArgumentBindingsText(
7991      FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
7992  }
7993
7994  if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
7995    if (!Ctor->isImplicit())
7996      return isTemplate ? oc_constructor_template : oc_constructor;
7997
7998    if (Ctor->getInheritedConstructor())
7999      return oc_implicit_inherited_constructor;
8000
8001    if (Ctor->isDefaultConstructor())
8002      return oc_implicit_default_constructor;
8003
8004    if (Ctor->isMoveConstructor())
8005      return oc_implicit_move_constructor;
8006
8007    assert(Ctor->isCopyConstructor() &&
8008           "unexpected sort of implicit constructor");
8009    return oc_implicit_copy_constructor;
8010  }
8011
8012  if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
8013    // This actually gets spelled 'candidate function' for now, but
8014    // it doesn't hurt to split it out.
8015    if (!Meth->isImplicit())
8016      return isTemplate ? oc_method_template : oc_method;
8017
8018    if (Meth->isMoveAssignmentOperator())
8019      return oc_implicit_move_assignment;
8020
8021    if (Meth->isCopyAssignmentOperator())
8022      return oc_implicit_copy_assignment;
8023
8024    assert(isa<CXXConversionDecl>(Meth) && "expected conversion");
8025    return oc_method;
8026  }
8027
8028  return isTemplate ? oc_function_template : oc_function;
8029}
8030
8031void MaybeEmitInheritedConstructorNote(Sema &S, FunctionDecl *Fn) {
8032  const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn);
8033  if (!Ctor) return;
8034
8035  Ctor = Ctor->getInheritedConstructor();
8036  if (!Ctor) return;
8037
8038  S.Diag(Ctor->getLocation(), diag::note_ovl_candidate_inherited_constructor);
8039}
8040
8041} // end anonymous namespace
8042
8043// Notes the location of an overload candidate.
8044void Sema::NoteOverloadCandidate(FunctionDecl *Fn, QualType DestType) {
8045  std::string FnDesc;
8046  OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
8047  PartialDiagnostic PD = PDiag(diag::note_ovl_candidate)
8048                             << (unsigned) K << FnDesc;
8049  HandleFunctionTypeMismatch(PD, Fn->getType(), DestType);
8050  Diag(Fn->getLocation(), PD);
8051  MaybeEmitInheritedConstructorNote(*this, Fn);
8052}
8053
8054//Notes the location of all overload candidates designated through
8055// OverloadedExpr
8056void Sema::NoteAllOverloadCandidates(Expr* OverloadedExpr, QualType DestType) {
8057  assert(OverloadedExpr->getType() == Context.OverloadTy);
8058
8059  OverloadExpr::FindResult Ovl = OverloadExpr::find(OverloadedExpr);
8060  OverloadExpr *OvlExpr = Ovl.Expression;
8061
8062  for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
8063                            IEnd = OvlExpr->decls_end();
8064       I != IEnd; ++I) {
8065    if (FunctionTemplateDecl *FunTmpl =
8066                dyn_cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl()) ) {
8067      NoteOverloadCandidate(FunTmpl->getTemplatedDecl(), DestType);
8068    } else if (FunctionDecl *Fun
8069                      = dyn_cast<FunctionDecl>((*I)->getUnderlyingDecl()) ) {
8070      NoteOverloadCandidate(Fun, DestType);
8071    }
8072  }
8073}
8074
8075/// Diagnoses an ambiguous conversion.  The partial diagnostic is the
8076/// "lead" diagnostic; it will be given two arguments, the source and
8077/// target types of the conversion.
8078void ImplicitConversionSequence::DiagnoseAmbiguousConversion(
8079                                 Sema &S,
8080                                 SourceLocation CaretLoc,
8081                                 const PartialDiagnostic &PDiag) const {
8082  S.Diag(CaretLoc, PDiag)
8083    << Ambiguous.getFromType() << Ambiguous.getToType();
8084  // FIXME: The note limiting machinery is borrowed from
8085  // OverloadCandidateSet::NoteCandidates; there's an opportunity for
8086  // refactoring here.
8087  const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8088  unsigned CandsShown = 0;
8089  AmbiguousConversionSequence::const_iterator I, E;
8090  for (I = Ambiguous.begin(), E = Ambiguous.end(); I != E; ++I) {
8091    if (CandsShown >= 4 && ShowOverloads == Ovl_Best)
8092      break;
8093    ++CandsShown;
8094    S.NoteOverloadCandidate(*I);
8095  }
8096  if (I != E)
8097    S.Diag(SourceLocation(), diag::note_ovl_too_many_candidates) << int(E - I);
8098}
8099
8100namespace {
8101
8102void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
8103  const ImplicitConversionSequence &Conv = Cand->Conversions[I];
8104  assert(Conv.isBad());
8105  assert(Cand->Function && "for now, candidate must be a function");
8106  FunctionDecl *Fn = Cand->Function;
8107
8108  // There's a conversion slot for the object argument if this is a
8109  // non-constructor method.  Note that 'I' corresponds the
8110  // conversion-slot index.
8111  bool isObjectArgument = false;
8112  if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
8113    if (I == 0)
8114      isObjectArgument = true;
8115    else
8116      I--;
8117  }
8118
8119  std::string FnDesc;
8120  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8121
8122  Expr *FromExpr = Conv.Bad.FromExpr;
8123  QualType FromTy = Conv.Bad.getFromType();
8124  QualType ToTy = Conv.Bad.getToType();
8125
8126  if (FromTy == S.Context.OverloadTy) {
8127    assert(FromExpr && "overload set argument came from implicit argument?");
8128    Expr *E = FromExpr->IgnoreParens();
8129    if (isa<UnaryOperator>(E))
8130      E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
8131    DeclarationName Name = cast<OverloadExpr>(E)->getName();
8132
8133    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
8134      << (unsigned) FnKind << FnDesc
8135      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8136      << ToTy << Name << I+1;
8137    MaybeEmitInheritedConstructorNote(S, Fn);
8138    return;
8139  }
8140
8141  // Do some hand-waving analysis to see if the non-viability is due
8142  // to a qualifier mismatch.
8143  CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
8144  CanQualType CToTy = S.Context.getCanonicalType(ToTy);
8145  if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
8146    CToTy = RT->getPointeeType();
8147  else {
8148    // TODO: detect and diagnose the full richness of const mismatches.
8149    if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
8150      if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
8151        CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
8152  }
8153
8154  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
8155      !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
8156    Qualifiers FromQs = CFromTy.getQualifiers();
8157    Qualifiers ToQs = CToTy.getQualifiers();
8158
8159    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
8160      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
8161        << (unsigned) FnKind << FnDesc
8162        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8163        << FromTy
8164        << FromQs.getAddressSpace() << ToQs.getAddressSpace()
8165        << (unsigned) isObjectArgument << I+1;
8166      MaybeEmitInheritedConstructorNote(S, Fn);
8167      return;
8168    }
8169
8170    if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8171      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_ownership)
8172        << (unsigned) FnKind << FnDesc
8173        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8174        << FromTy
8175        << FromQs.getObjCLifetime() << ToQs.getObjCLifetime()
8176        << (unsigned) isObjectArgument << I+1;
8177      MaybeEmitInheritedConstructorNote(S, Fn);
8178      return;
8179    }
8180
8181    if (FromQs.getObjCGCAttr() != ToQs.getObjCGCAttr()) {
8182      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_gc)
8183      << (unsigned) FnKind << FnDesc
8184      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8185      << FromTy
8186      << FromQs.getObjCGCAttr() << ToQs.getObjCGCAttr()
8187      << (unsigned) isObjectArgument << I+1;
8188      MaybeEmitInheritedConstructorNote(S, Fn);
8189      return;
8190    }
8191
8192    unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
8193    assert(CVR && "unexpected qualifiers mismatch");
8194
8195    if (isObjectArgument) {
8196      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
8197        << (unsigned) FnKind << FnDesc
8198        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8199        << FromTy << (CVR - 1);
8200    } else {
8201      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
8202        << (unsigned) FnKind << FnDesc
8203        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8204        << FromTy << (CVR - 1) << I+1;
8205    }
8206    MaybeEmitInheritedConstructorNote(S, Fn);
8207    return;
8208  }
8209
8210  // Special diagnostic for failure to convert an initializer list, since
8211  // telling the user that it has type void is not useful.
8212  if (FromExpr && isa<InitListExpr>(FromExpr)) {
8213    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_list_argument)
8214      << (unsigned) FnKind << FnDesc
8215      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8216      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8217    MaybeEmitInheritedConstructorNote(S, Fn);
8218    return;
8219  }
8220
8221  // Diagnose references or pointers to incomplete types differently,
8222  // since it's far from impossible that the incompleteness triggered
8223  // the failure.
8224  QualType TempFromTy = FromTy.getNonReferenceType();
8225  if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
8226    TempFromTy = PTy->getPointeeType();
8227  if (TempFromTy->isIncompleteType()) {
8228    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
8229      << (unsigned) FnKind << FnDesc
8230      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8231      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8232    MaybeEmitInheritedConstructorNote(S, Fn);
8233    return;
8234  }
8235
8236  // Diagnose base -> derived pointer conversions.
8237  unsigned BaseToDerivedConversion = 0;
8238  if (const PointerType *FromPtrTy = FromTy->getAs<PointerType>()) {
8239    if (const PointerType *ToPtrTy = ToTy->getAs<PointerType>()) {
8240      if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8241                                               FromPtrTy->getPointeeType()) &&
8242          !FromPtrTy->getPointeeType()->isIncompleteType() &&
8243          !ToPtrTy->getPointeeType()->isIncompleteType() &&
8244          S.IsDerivedFrom(ToPtrTy->getPointeeType(),
8245                          FromPtrTy->getPointeeType()))
8246        BaseToDerivedConversion = 1;
8247    }
8248  } else if (const ObjCObjectPointerType *FromPtrTy
8249                                    = FromTy->getAs<ObjCObjectPointerType>()) {
8250    if (const ObjCObjectPointerType *ToPtrTy
8251                                        = ToTy->getAs<ObjCObjectPointerType>())
8252      if (const ObjCInterfaceDecl *FromIface = FromPtrTy->getInterfaceDecl())
8253        if (const ObjCInterfaceDecl *ToIface = ToPtrTy->getInterfaceDecl())
8254          if (ToPtrTy->getPointeeType().isAtLeastAsQualifiedAs(
8255                                                FromPtrTy->getPointeeType()) &&
8256              FromIface->isSuperClassOf(ToIface))
8257            BaseToDerivedConversion = 2;
8258  } else if (const ReferenceType *ToRefTy = ToTy->getAs<ReferenceType>()) {
8259    if (ToRefTy->getPointeeType().isAtLeastAsQualifiedAs(FromTy) &&
8260        !FromTy->isIncompleteType() &&
8261        !ToRefTy->getPointeeType()->isIncompleteType() &&
8262        S.IsDerivedFrom(ToRefTy->getPointeeType(), FromTy)) {
8263      BaseToDerivedConversion = 3;
8264    } else if (ToTy->isLValueReferenceType() && !FromExpr->isLValue() &&
8265               ToTy.getNonReferenceType().getCanonicalType() ==
8266               FromTy.getNonReferenceType().getCanonicalType()) {
8267      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_lvalue)
8268        << (unsigned) FnKind << FnDesc
8269        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8270        << (unsigned) isObjectArgument << I + 1;
8271      MaybeEmitInheritedConstructorNote(S, Fn);
8272      return;
8273    }
8274  }
8275
8276  if (BaseToDerivedConversion) {
8277    S.Diag(Fn->getLocation(),
8278           diag::note_ovl_candidate_bad_base_to_derived_conv)
8279      << (unsigned) FnKind << FnDesc
8280      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8281      << (BaseToDerivedConversion - 1)
8282      << FromTy << ToTy << I+1;
8283    MaybeEmitInheritedConstructorNote(S, Fn);
8284    return;
8285  }
8286
8287  if (isa<ObjCObjectPointerType>(CFromTy) &&
8288      isa<PointerType>(CToTy)) {
8289      Qualifiers FromQs = CFromTy.getQualifiers();
8290      Qualifiers ToQs = CToTy.getQualifiers();
8291      if (FromQs.getObjCLifetime() != ToQs.getObjCLifetime()) {
8292        S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_arc_conv)
8293        << (unsigned) FnKind << FnDesc
8294        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8295        << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
8296        MaybeEmitInheritedConstructorNote(S, Fn);
8297        return;
8298      }
8299  }
8300
8301  // Emit the generic diagnostic and, optionally, add the hints to it.
8302  PartialDiagnostic FDiag = S.PDiag(diag::note_ovl_candidate_bad_conv);
8303  FDiag << (unsigned) FnKind << FnDesc
8304    << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
8305    << FromTy << ToTy << (unsigned) isObjectArgument << I + 1
8306    << (unsigned) (Cand->Fix.Kind);
8307
8308  // If we can fix the conversion, suggest the FixIts.
8309  for (std::vector<FixItHint>::iterator HI = Cand->Fix.Hints.begin(),
8310       HE = Cand->Fix.Hints.end(); HI != HE; ++HI)
8311    FDiag << *HI;
8312  S.Diag(Fn->getLocation(), FDiag);
8313
8314  MaybeEmitInheritedConstructorNote(S, Fn);
8315}
8316
8317void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
8318                           unsigned NumFormalArgs) {
8319  // TODO: treat calls to a missing default constructor as a special case
8320
8321  FunctionDecl *Fn = Cand->Function;
8322  const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
8323
8324  unsigned MinParams = Fn->getMinRequiredArguments();
8325
8326  // With invalid overloaded operators, it's possible that we think we
8327  // have an arity mismatch when it fact it looks like we have the
8328  // right number of arguments, because only overloaded operators have
8329  // the weird behavior of overloading member and non-member functions.
8330  // Just don't report anything.
8331  if (Fn->isInvalidDecl() &&
8332      Fn->getDeclName().getNameKind() == DeclarationName::CXXOperatorName)
8333    return;
8334
8335  // at least / at most / exactly
8336  unsigned mode, modeCount;
8337  if (NumFormalArgs < MinParams) {
8338    assert((Cand->FailureKind == ovl_fail_too_few_arguments) ||
8339           (Cand->FailureKind == ovl_fail_bad_deduction &&
8340            Cand->DeductionFailure.Result == Sema::TDK_TooFewArguments));
8341    if (MinParams != FnTy->getNumArgs() ||
8342        FnTy->isVariadic() || FnTy->isTemplateVariadic())
8343      mode = 0; // "at least"
8344    else
8345      mode = 2; // "exactly"
8346    modeCount = MinParams;
8347  } else {
8348    assert((Cand->FailureKind == ovl_fail_too_many_arguments) ||
8349           (Cand->FailureKind == ovl_fail_bad_deduction &&
8350            Cand->DeductionFailure.Result == Sema::TDK_TooManyArguments));
8351    if (MinParams != FnTy->getNumArgs())
8352      mode = 1; // "at most"
8353    else
8354      mode = 2; // "exactly"
8355    modeCount = FnTy->getNumArgs();
8356  }
8357
8358  std::string Description;
8359  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
8360
8361  if (modeCount == 1 && Fn->getParamDecl(0)->getDeclName())
8362    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity_one)
8363      << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8364      << Fn->getParamDecl(0) << NumFormalArgs;
8365  else
8366    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
8367      << (unsigned) FnKind << (Fn->getDescribedFunctionTemplate() != 0) << mode
8368      << modeCount << NumFormalArgs;
8369  MaybeEmitInheritedConstructorNote(S, Fn);
8370}
8371
8372/// Diagnose a failed template-argument deduction.
8373void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
8374                          unsigned NumArgs) {
8375  FunctionDecl *Fn = Cand->Function; // pattern
8376
8377  TemplateParameter Param = Cand->DeductionFailure.getTemplateParameter();
8378  NamedDecl *ParamD;
8379  (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
8380  (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
8381  (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
8382  switch (Cand->DeductionFailure.Result) {
8383  case Sema::TDK_Success:
8384    llvm_unreachable("TDK_success while diagnosing bad deduction");
8385
8386  case Sema::TDK_Incomplete: {
8387    assert(ParamD && "no parameter found for incomplete deduction result");
8388    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
8389      << ParamD->getDeclName();
8390    MaybeEmitInheritedConstructorNote(S, Fn);
8391    return;
8392  }
8393
8394  case Sema::TDK_Underqualified: {
8395    assert(ParamD && "no parameter found for bad qualifiers deduction result");
8396    TemplateTypeParmDecl *TParam = cast<TemplateTypeParmDecl>(ParamD);
8397
8398    QualType Param = Cand->DeductionFailure.getFirstArg()->getAsType();
8399
8400    // Param will have been canonicalized, but it should just be a
8401    // qualified version of ParamD, so move the qualifiers to that.
8402    QualifierCollector Qs;
8403    Qs.strip(Param);
8404    QualType NonCanonParam = Qs.apply(S.Context, TParam->getTypeForDecl());
8405    assert(S.Context.hasSameType(Param, NonCanonParam));
8406
8407    // Arg has also been canonicalized, but there's nothing we can do
8408    // about that.  It also doesn't matter as much, because it won't
8409    // have any template parameters in it (because deduction isn't
8410    // done on dependent types).
8411    QualType Arg = Cand->DeductionFailure.getSecondArg()->getAsType();
8412
8413    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_underqualified)
8414      << ParamD->getDeclName() << Arg << NonCanonParam;
8415    MaybeEmitInheritedConstructorNote(S, Fn);
8416    return;
8417  }
8418
8419  case Sema::TDK_Inconsistent: {
8420    assert(ParamD && "no parameter found for inconsistent deduction result");
8421    int which = 0;
8422    if (isa<TemplateTypeParmDecl>(ParamD))
8423      which = 0;
8424    else if (isa<NonTypeTemplateParmDecl>(ParamD))
8425      which = 1;
8426    else {
8427      which = 2;
8428    }
8429
8430    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_inconsistent_deduction)
8431      << which << ParamD->getDeclName()
8432      << *Cand->DeductionFailure.getFirstArg()
8433      << *Cand->DeductionFailure.getSecondArg();
8434    MaybeEmitInheritedConstructorNote(S, Fn);
8435    return;
8436  }
8437
8438  case Sema::TDK_InvalidExplicitArguments:
8439    assert(ParamD && "no parameter found for invalid explicit arguments");
8440    if (ParamD->getDeclName())
8441      S.Diag(Fn->getLocation(),
8442             diag::note_ovl_candidate_explicit_arg_mismatch_named)
8443        << ParamD->getDeclName();
8444    else {
8445      int index = 0;
8446      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ParamD))
8447        index = TTP->getIndex();
8448      else if (NonTypeTemplateParmDecl *NTTP
8449                                  = dyn_cast<NonTypeTemplateParmDecl>(ParamD))
8450        index = NTTP->getIndex();
8451      else
8452        index = cast<TemplateTemplateParmDecl>(ParamD)->getIndex();
8453      S.Diag(Fn->getLocation(),
8454             diag::note_ovl_candidate_explicit_arg_mismatch_unnamed)
8455        << (index + 1);
8456    }
8457    MaybeEmitInheritedConstructorNote(S, Fn);
8458    return;
8459
8460  case Sema::TDK_TooManyArguments:
8461  case Sema::TDK_TooFewArguments:
8462    DiagnoseArityMismatch(S, Cand, NumArgs);
8463    return;
8464
8465  case Sema::TDK_InstantiationDepth:
8466    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_instantiation_depth);
8467    MaybeEmitInheritedConstructorNote(S, Fn);
8468    return;
8469
8470  case Sema::TDK_SubstitutionFailure: {
8471    // Format the template argument list into the argument string.
8472    SmallString<128> TemplateArgString;
8473    if (TemplateArgumentList *Args =
8474          Cand->DeductionFailure.getTemplateArgumentList()) {
8475      TemplateArgString = " ";
8476      TemplateArgString += S.getTemplateArgumentBindingsText(
8477          Fn->getDescribedFunctionTemplate()->getTemplateParameters(), *Args);
8478    }
8479
8480    // If this candidate was disabled by enable_if, say so.
8481    PartialDiagnosticAt *PDiag = Cand->DeductionFailure.getSFINAEDiagnostic();
8482    if (PDiag && PDiag->second.getDiagID() ==
8483          diag::err_typename_nested_not_found_enable_if) {
8484      // FIXME: Use the source range of the condition, and the fully-qualified
8485      //        name of the enable_if template. These are both present in PDiag.
8486      S.Diag(PDiag->first, diag::note_ovl_candidate_disabled_by_enable_if)
8487        << "'enable_if'" << TemplateArgString;
8488      return;
8489    }
8490
8491    // Format the SFINAE diagnostic into the argument string.
8492    // FIXME: Add a general mechanism to include a PartialDiagnostic *'s
8493    //        formatted message in another diagnostic.
8494    SmallString<128> SFINAEArgString;
8495    SourceRange R;
8496    if (PDiag) {
8497      SFINAEArgString = ": ";
8498      R = SourceRange(PDiag->first, PDiag->first);
8499      PDiag->second.EmitToString(S.getDiagnostics(), SFINAEArgString);
8500    }
8501
8502    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_substitution_failure)
8503      << TemplateArgString << SFINAEArgString << R;
8504    MaybeEmitInheritedConstructorNote(S, Fn);
8505    return;
8506  }
8507
8508  case Sema::TDK_FailedOverloadResolution: {
8509    OverloadExpr::FindResult R =
8510        OverloadExpr::find(Cand->DeductionFailure.getExpr());
8511    S.Diag(Fn->getLocation(),
8512           diag::note_ovl_candidate_failed_overload_resolution)
8513      << R.Expression->getName();
8514    return;
8515  }
8516
8517  case Sema::TDK_NonDeducedMismatch: {
8518    // FIXME: Provide a source location to indicate what we couldn't match.
8519    TemplateArgument FirstTA = *Cand->DeductionFailure.getFirstArg();
8520    TemplateArgument SecondTA = *Cand->DeductionFailure.getSecondArg();
8521    if (FirstTA.getKind() == TemplateArgument::Template &&
8522        SecondTA.getKind() == TemplateArgument::Template) {
8523      TemplateName FirstTN = FirstTA.getAsTemplate();
8524      TemplateName SecondTN = SecondTA.getAsTemplate();
8525      if (FirstTN.getKind() == TemplateName::Template &&
8526          SecondTN.getKind() == TemplateName::Template) {
8527        if (FirstTN.getAsTemplateDecl()->getName() ==
8528            SecondTN.getAsTemplateDecl()->getName()) {
8529          // FIXME: This fixes a bad diagnostic where both templates are named
8530          // the same.  This particular case is a bit difficult since:
8531          // 1) It is passed as a string to the diagnostic printer.
8532          // 2) The diagnostic printer only attempts to find a better
8533          //    name for types, not decls.
8534          // Ideally, this should folded into the diagnostic printer.
8535          S.Diag(Fn->getLocation(),
8536                 diag::note_ovl_candidate_non_deduced_mismatch_qualified)
8537              << FirstTN.getAsTemplateDecl() << SecondTN.getAsTemplateDecl();
8538          return;
8539        }
8540      }
8541    }
8542    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_non_deduced_mismatch)
8543      << FirstTA << SecondTA;
8544    return;
8545  }
8546  // TODO: diagnose these individually, then kill off
8547  // note_ovl_candidate_bad_deduction, which is uselessly vague.
8548  case Sema::TDK_MiscellaneousDeductionFailure:
8549    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
8550    MaybeEmitInheritedConstructorNote(S, Fn);
8551    return;
8552  }
8553}
8554
8555/// CUDA: diagnose an invalid call across targets.
8556void DiagnoseBadTarget(Sema &S, OverloadCandidate *Cand) {
8557  FunctionDecl *Caller = cast<FunctionDecl>(S.CurContext);
8558  FunctionDecl *Callee = Cand->Function;
8559
8560  Sema::CUDAFunctionTarget CallerTarget = S.IdentifyCUDATarget(Caller),
8561                           CalleeTarget = S.IdentifyCUDATarget(Callee);
8562
8563  std::string FnDesc;
8564  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Callee, FnDesc);
8565
8566  S.Diag(Callee->getLocation(), diag::note_ovl_candidate_bad_target)
8567      << (unsigned) FnKind << CalleeTarget << CallerTarget;
8568}
8569
8570/// Generates a 'note' diagnostic for an overload candidate.  We've
8571/// already generated a primary error at the call site.
8572///
8573/// It really does need to be a single diagnostic with its caret
8574/// pointed at the candidate declaration.  Yes, this creates some
8575/// major challenges of technical writing.  Yes, this makes pointing
8576/// out problems with specific arguments quite awkward.  It's still
8577/// better than generating twenty screens of text for every failed
8578/// overload.
8579///
8580/// It would be great to be able to express per-candidate problems
8581/// more richly for those diagnostic clients that cared, but we'd
8582/// still have to be just as careful with the default diagnostics.
8583void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
8584                           unsigned NumArgs) {
8585  FunctionDecl *Fn = Cand->Function;
8586
8587  // Note deleted candidates, but only if they're viable.
8588  if (Cand->Viable && (Fn->isDeleted() ||
8589      S.isFunctionConsideredUnavailable(Fn))) {
8590    std::string FnDesc;
8591    OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
8592
8593    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
8594      << FnKind << FnDesc
8595      << (Fn->isDeleted() ? (Fn->isDeletedAsWritten() ? 1 : 2) : 0);
8596    MaybeEmitInheritedConstructorNote(S, Fn);
8597    return;
8598  }
8599
8600  // We don't really have anything else to say about viable candidates.
8601  if (Cand->Viable) {
8602    S.NoteOverloadCandidate(Fn);
8603    return;
8604  }
8605
8606  switch (Cand->FailureKind) {
8607  case ovl_fail_too_many_arguments:
8608  case ovl_fail_too_few_arguments:
8609    return DiagnoseArityMismatch(S, Cand, NumArgs);
8610
8611  case ovl_fail_bad_deduction:
8612    return DiagnoseBadDeduction(S, Cand, NumArgs);
8613
8614  case ovl_fail_trivial_conversion:
8615  case ovl_fail_bad_final_conversion:
8616  case ovl_fail_final_conversion_not_exact:
8617    return S.NoteOverloadCandidate(Fn);
8618
8619  case ovl_fail_bad_conversion: {
8620    unsigned I = (Cand->IgnoreObjectArgument ? 1 : 0);
8621    for (unsigned N = Cand->NumConversions; I != N; ++I)
8622      if (Cand->Conversions[I].isBad())
8623        return DiagnoseBadConversion(S, Cand, I);
8624
8625    // FIXME: this currently happens when we're called from SemaInit
8626    // when user-conversion overload fails.  Figure out how to handle
8627    // those conditions and diagnose them well.
8628    return S.NoteOverloadCandidate(Fn);
8629  }
8630
8631  case ovl_fail_bad_target:
8632    return DiagnoseBadTarget(S, Cand);
8633  }
8634}
8635
8636void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
8637  // Desugar the type of the surrogate down to a function type,
8638  // retaining as many typedefs as possible while still showing
8639  // the function type (and, therefore, its parameter types).
8640  QualType FnType = Cand->Surrogate->getConversionType();
8641  bool isLValueReference = false;
8642  bool isRValueReference = false;
8643  bool isPointer = false;
8644  if (const LValueReferenceType *FnTypeRef =
8645        FnType->getAs<LValueReferenceType>()) {
8646    FnType = FnTypeRef->getPointeeType();
8647    isLValueReference = true;
8648  } else if (const RValueReferenceType *FnTypeRef =
8649               FnType->getAs<RValueReferenceType>()) {
8650    FnType = FnTypeRef->getPointeeType();
8651    isRValueReference = true;
8652  }
8653  if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
8654    FnType = FnTypePtr->getPointeeType();
8655    isPointer = true;
8656  }
8657  // Desugar down to a function type.
8658  FnType = QualType(FnType->getAs<FunctionType>(), 0);
8659  // Reconstruct the pointer/reference as appropriate.
8660  if (isPointer) FnType = S.Context.getPointerType(FnType);
8661  if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
8662  if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
8663
8664  S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
8665    << FnType;
8666  MaybeEmitInheritedConstructorNote(S, Cand->Surrogate);
8667}
8668
8669void NoteBuiltinOperatorCandidate(Sema &S,
8670                                  StringRef Opc,
8671                                  SourceLocation OpLoc,
8672                                  OverloadCandidate *Cand) {
8673  assert(Cand->NumConversions <= 2 && "builtin operator is not binary");
8674  std::string TypeStr("operator");
8675  TypeStr += Opc;
8676  TypeStr += "(";
8677  TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
8678  if (Cand->NumConversions == 1) {
8679    TypeStr += ")";
8680    S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
8681  } else {
8682    TypeStr += ", ";
8683    TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
8684    TypeStr += ")";
8685    S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
8686  }
8687}
8688
8689void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
8690                                  OverloadCandidate *Cand) {
8691  unsigned NoOperands = Cand->NumConversions;
8692  for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
8693    const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
8694    if (ICS.isBad()) break; // all meaningless after first invalid
8695    if (!ICS.isAmbiguous()) continue;
8696
8697    ICS.DiagnoseAmbiguousConversion(S, OpLoc,
8698                              S.PDiag(diag::note_ambiguous_type_conversion));
8699  }
8700}
8701
8702SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
8703  if (Cand->Function)
8704    return Cand->Function->getLocation();
8705  if (Cand->IsSurrogate)
8706    return Cand->Surrogate->getLocation();
8707  return SourceLocation();
8708}
8709
8710static unsigned
8711RankDeductionFailure(const OverloadCandidate::DeductionFailureInfo &DFI) {
8712  switch ((Sema::TemplateDeductionResult)DFI.Result) {
8713  case Sema::TDK_Success:
8714    llvm_unreachable("TDK_success while diagnosing bad deduction");
8715
8716  case Sema::TDK_Invalid:
8717  case Sema::TDK_Incomplete:
8718    return 1;
8719
8720  case Sema::TDK_Underqualified:
8721  case Sema::TDK_Inconsistent:
8722    return 2;
8723
8724  case Sema::TDK_SubstitutionFailure:
8725  case Sema::TDK_NonDeducedMismatch:
8726  case Sema::TDK_MiscellaneousDeductionFailure:
8727    return 3;
8728
8729  case Sema::TDK_InstantiationDepth:
8730  case Sema::TDK_FailedOverloadResolution:
8731    return 4;
8732
8733  case Sema::TDK_InvalidExplicitArguments:
8734    return 5;
8735
8736  case Sema::TDK_TooManyArguments:
8737  case Sema::TDK_TooFewArguments:
8738    return 6;
8739  }
8740  llvm_unreachable("Unhandled deduction result");
8741}
8742
8743struct CompareOverloadCandidatesForDisplay {
8744  Sema &S;
8745  CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
8746
8747  bool operator()(const OverloadCandidate *L,
8748                  const OverloadCandidate *R) {
8749    // Fast-path this check.
8750    if (L == R) return false;
8751
8752    // Order first by viability.
8753    if (L->Viable) {
8754      if (!R->Viable) return true;
8755
8756      // TODO: introduce a tri-valued comparison for overload
8757      // candidates.  Would be more worthwhile if we had a sort
8758      // that could exploit it.
8759      if (isBetterOverloadCandidate(S, *L, *R, SourceLocation())) return true;
8760      if (isBetterOverloadCandidate(S, *R, *L, SourceLocation())) return false;
8761    } else if (R->Viable)
8762      return false;
8763
8764    assert(L->Viable == R->Viable);
8765
8766    // Criteria by which we can sort non-viable candidates:
8767    if (!L->Viable) {
8768      // 1. Arity mismatches come after other candidates.
8769      if (L->FailureKind == ovl_fail_too_many_arguments ||
8770          L->FailureKind == ovl_fail_too_few_arguments)
8771        return false;
8772      if (R->FailureKind == ovl_fail_too_many_arguments ||
8773          R->FailureKind == ovl_fail_too_few_arguments)
8774        return true;
8775
8776      // 2. Bad conversions come first and are ordered by the number
8777      // of bad conversions and quality of good conversions.
8778      if (L->FailureKind == ovl_fail_bad_conversion) {
8779        if (R->FailureKind != ovl_fail_bad_conversion)
8780          return true;
8781
8782        // The conversion that can be fixed with a smaller number of changes,
8783        // comes first.
8784        unsigned numLFixes = L->Fix.NumConversionsFixed;
8785        unsigned numRFixes = R->Fix.NumConversionsFixed;
8786        numLFixes = (numLFixes == 0) ? UINT_MAX : numLFixes;
8787        numRFixes = (numRFixes == 0) ? UINT_MAX : numRFixes;
8788        if (numLFixes != numRFixes) {
8789          if (numLFixes < numRFixes)
8790            return true;
8791          else
8792            return false;
8793        }
8794
8795        // If there's any ordering between the defined conversions...
8796        // FIXME: this might not be transitive.
8797        assert(L->NumConversions == R->NumConversions);
8798
8799        int leftBetter = 0;
8800        unsigned I = (L->IgnoreObjectArgument || R->IgnoreObjectArgument);
8801        for (unsigned E = L->NumConversions; I != E; ++I) {
8802          switch (CompareImplicitConversionSequences(S,
8803                                                     L->Conversions[I],
8804                                                     R->Conversions[I])) {
8805          case ImplicitConversionSequence::Better:
8806            leftBetter++;
8807            break;
8808
8809          case ImplicitConversionSequence::Worse:
8810            leftBetter--;
8811            break;
8812
8813          case ImplicitConversionSequence::Indistinguishable:
8814            break;
8815          }
8816        }
8817        if (leftBetter > 0) return true;
8818        if (leftBetter < 0) return false;
8819
8820      } else if (R->FailureKind == ovl_fail_bad_conversion)
8821        return false;
8822
8823      if (L->FailureKind == ovl_fail_bad_deduction) {
8824        if (R->FailureKind != ovl_fail_bad_deduction)
8825          return true;
8826
8827        if (L->DeductionFailure.Result != R->DeductionFailure.Result)
8828          return RankDeductionFailure(L->DeductionFailure)
8829               < RankDeductionFailure(R->DeductionFailure);
8830      } else if (R->FailureKind == ovl_fail_bad_deduction)
8831        return false;
8832
8833      // TODO: others?
8834    }
8835
8836    // Sort everything else by location.
8837    SourceLocation LLoc = GetLocationForCandidate(L);
8838    SourceLocation RLoc = GetLocationForCandidate(R);
8839
8840    // Put candidates without locations (e.g. builtins) at the end.
8841    if (LLoc.isInvalid()) return false;
8842    if (RLoc.isInvalid()) return true;
8843
8844    return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
8845  }
8846};
8847
8848/// CompleteNonViableCandidate - Normally, overload resolution only
8849/// computes up to the first. Produces the FixIt set if possible.
8850void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
8851                                ArrayRef<Expr *> Args) {
8852  assert(!Cand->Viable);
8853
8854  // Don't do anything on failures other than bad conversion.
8855  if (Cand->FailureKind != ovl_fail_bad_conversion) return;
8856
8857  // We only want the FixIts if all the arguments can be corrected.
8858  bool Unfixable = false;
8859  // Use a implicit copy initialization to check conversion fixes.
8860  Cand->Fix.setConversionChecker(TryCopyInitialization);
8861
8862  // Skip forward to the first bad conversion.
8863  unsigned ConvIdx = (Cand->IgnoreObjectArgument ? 1 : 0);
8864  unsigned ConvCount = Cand->NumConversions;
8865  while (true) {
8866    assert(ConvIdx != ConvCount && "no bad conversion in candidate");
8867    ConvIdx++;
8868    if (Cand->Conversions[ConvIdx - 1].isBad()) {
8869      Unfixable = !Cand->TryToFixBadConversion(ConvIdx - 1, S);
8870      break;
8871    }
8872  }
8873
8874  if (ConvIdx == ConvCount)
8875    return;
8876
8877  assert(!Cand->Conversions[ConvIdx].isInitialized() &&
8878         "remaining conversion is initialized?");
8879
8880  // FIXME: this should probably be preserved from the overload
8881  // operation somehow.
8882  bool SuppressUserConversions = false;
8883
8884  const FunctionProtoType* Proto;
8885  unsigned ArgIdx = ConvIdx;
8886
8887  if (Cand->IsSurrogate) {
8888    QualType ConvType
8889      = Cand->Surrogate->getConversionType().getNonReferenceType();
8890    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
8891      ConvType = ConvPtrType->getPointeeType();
8892    Proto = ConvType->getAs<FunctionProtoType>();
8893    ArgIdx--;
8894  } else if (Cand->Function) {
8895    Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
8896    if (isa<CXXMethodDecl>(Cand->Function) &&
8897        !isa<CXXConstructorDecl>(Cand->Function))
8898      ArgIdx--;
8899  } else {
8900    // Builtin binary operator with a bad first conversion.
8901    assert(ConvCount <= 3);
8902    for (; ConvIdx != ConvCount; ++ConvIdx)
8903      Cand->Conversions[ConvIdx]
8904        = TryCopyInitialization(S, Args[ConvIdx],
8905                                Cand->BuiltinTypes.ParamTypes[ConvIdx],
8906                                SuppressUserConversions,
8907                                /*InOverloadResolution*/ true,
8908                                /*AllowObjCWritebackConversion=*/
8909                                  S.getLangOpts().ObjCAutoRefCount);
8910    return;
8911  }
8912
8913  // Fill in the rest of the conversions.
8914  unsigned NumArgsInProto = Proto->getNumArgs();
8915  for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
8916    if (ArgIdx < NumArgsInProto) {
8917      Cand->Conversions[ConvIdx]
8918        = TryCopyInitialization(S, Args[ArgIdx], Proto->getArgType(ArgIdx),
8919                                SuppressUserConversions,
8920                                /*InOverloadResolution=*/true,
8921                                /*AllowObjCWritebackConversion=*/
8922                                  S.getLangOpts().ObjCAutoRefCount);
8923      // Store the FixIt in the candidate if it exists.
8924      if (!Unfixable && Cand->Conversions[ConvIdx].isBad())
8925        Unfixable = !Cand->TryToFixBadConversion(ConvIdx, S);
8926    }
8927    else
8928      Cand->Conversions[ConvIdx].setEllipsis();
8929  }
8930}
8931
8932} // end anonymous namespace
8933
8934/// PrintOverloadCandidates - When overload resolution fails, prints
8935/// diagnostic messages containing the candidates in the candidate
8936/// set.
8937void OverloadCandidateSet::NoteCandidates(Sema &S,
8938                                          OverloadCandidateDisplayKind OCD,
8939                                          ArrayRef<Expr *> Args,
8940                                          StringRef Opc,
8941                                          SourceLocation OpLoc) {
8942  // Sort the candidates by viability and position.  Sorting directly would
8943  // be prohibitive, so we make a set of pointers and sort those.
8944  SmallVector<OverloadCandidate*, 32> Cands;
8945  if (OCD == OCD_AllCandidates) Cands.reserve(size());
8946  for (iterator Cand = begin(), LastCand = end(); Cand != LastCand; ++Cand) {
8947    if (Cand->Viable)
8948      Cands.push_back(Cand);
8949    else if (OCD == OCD_AllCandidates) {
8950      CompleteNonViableCandidate(S, Cand, Args);
8951      if (Cand->Function || Cand->IsSurrogate)
8952        Cands.push_back(Cand);
8953      // Otherwise, this a non-viable builtin candidate.  We do not, in general,
8954      // want to list every possible builtin candidate.
8955    }
8956  }
8957
8958  std::sort(Cands.begin(), Cands.end(),
8959            CompareOverloadCandidatesForDisplay(S));
8960
8961  bool ReportedAmbiguousConversions = false;
8962
8963  SmallVectorImpl<OverloadCandidate*>::iterator I, E;
8964  const OverloadsShown ShowOverloads = S.Diags.getShowOverloads();
8965  unsigned CandsShown = 0;
8966  for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
8967    OverloadCandidate *Cand = *I;
8968
8969    // Set an arbitrary limit on the number of candidate functions we'll spam
8970    // the user with.  FIXME: This limit should depend on details of the
8971    // candidate list.
8972    if (CandsShown >= 4 && ShowOverloads == Ovl_Best) {
8973      break;
8974    }
8975    ++CandsShown;
8976
8977    if (Cand->Function)
8978      NoteFunctionCandidate(S, Cand, Args.size());
8979    else if (Cand->IsSurrogate)
8980      NoteSurrogateCandidate(S, Cand);
8981    else {
8982      assert(Cand->Viable &&
8983             "Non-viable built-in candidates are not added to Cands.");
8984      // Generally we only see ambiguities including viable builtin
8985      // operators if overload resolution got screwed up by an
8986      // ambiguous user-defined conversion.
8987      //
8988      // FIXME: It's quite possible for different conversions to see
8989      // different ambiguities, though.
8990      if (!ReportedAmbiguousConversions) {
8991        NoteAmbiguousUserConversions(S, OpLoc, Cand);
8992        ReportedAmbiguousConversions = true;
8993      }
8994
8995      // If this is a viable builtin, print it.
8996      NoteBuiltinOperatorCandidate(S, Opc, OpLoc, Cand);
8997    }
8998  }
8999
9000  if (I != E)
9001    S.Diag(OpLoc, diag::note_ovl_too_many_candidates) << int(E - I);
9002}
9003
9004// [PossiblyAFunctionType]  -->   [Return]
9005// NonFunctionType --> NonFunctionType
9006// R (A) --> R(A)
9007// R (*)(A) --> R (A)
9008// R (&)(A) --> R (A)
9009// R (S::*)(A) --> R (A)
9010QualType Sema::ExtractUnqualifiedFunctionType(QualType PossiblyAFunctionType) {
9011  QualType Ret = PossiblyAFunctionType;
9012  if (const PointerType *ToTypePtr =
9013    PossiblyAFunctionType->getAs<PointerType>())
9014    Ret = ToTypePtr->getPointeeType();
9015  else if (const ReferenceType *ToTypeRef =
9016    PossiblyAFunctionType->getAs<ReferenceType>())
9017    Ret = ToTypeRef->getPointeeType();
9018  else if (const MemberPointerType *MemTypePtr =
9019    PossiblyAFunctionType->getAs<MemberPointerType>())
9020    Ret = MemTypePtr->getPointeeType();
9021  Ret =
9022    Context.getCanonicalType(Ret).getUnqualifiedType();
9023  return Ret;
9024}
9025
9026// A helper class to help with address of function resolution
9027// - allows us to avoid passing around all those ugly parameters
9028class AddressOfFunctionResolver
9029{
9030  Sema& S;
9031  Expr* SourceExpr;
9032  const QualType& TargetType;
9033  QualType TargetFunctionType; // Extracted function type from target type
9034
9035  bool Complain;
9036  //DeclAccessPair& ResultFunctionAccessPair;
9037  ASTContext& Context;
9038
9039  bool TargetTypeIsNonStaticMemberFunction;
9040  bool FoundNonTemplateFunction;
9041
9042  OverloadExpr::FindResult OvlExprInfo;
9043  OverloadExpr *OvlExpr;
9044  TemplateArgumentListInfo OvlExplicitTemplateArgs;
9045  SmallVector<std::pair<DeclAccessPair, FunctionDecl*>, 4> Matches;
9046
9047public:
9048  AddressOfFunctionResolver(Sema &S, Expr* SourceExpr,
9049                            const QualType& TargetType, bool Complain)
9050    : S(S), SourceExpr(SourceExpr), TargetType(TargetType),
9051      Complain(Complain), Context(S.getASTContext()),
9052      TargetTypeIsNonStaticMemberFunction(
9053                                    !!TargetType->getAs<MemberPointerType>()),
9054      FoundNonTemplateFunction(false),
9055      OvlExprInfo(OverloadExpr::find(SourceExpr)),
9056      OvlExpr(OvlExprInfo.Expression)
9057  {
9058    ExtractUnqualifiedFunctionTypeFromTargetType();
9059
9060    if (!TargetFunctionType->isFunctionType()) {
9061      if (OvlExpr->hasExplicitTemplateArgs()) {
9062        DeclAccessPair dap;
9063        if (FunctionDecl* Fn = S.ResolveSingleFunctionTemplateSpecialization(
9064                                            OvlExpr, false, &dap) ) {
9065
9066          if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9067            if (!Method->isStatic()) {
9068              // If the target type is a non-function type and the function
9069              // found is a non-static member function, pretend as if that was
9070              // the target, it's the only possible type to end up with.
9071              TargetTypeIsNonStaticMemberFunction = true;
9072
9073              // And skip adding the function if its not in the proper form.
9074              // We'll diagnose this due to an empty set of functions.
9075              if (!OvlExprInfo.HasFormOfMemberPointer)
9076                return;
9077            }
9078          }
9079
9080          Matches.push_back(std::make_pair(dap,Fn));
9081        }
9082      }
9083      return;
9084    }
9085
9086    if (OvlExpr->hasExplicitTemplateArgs())
9087      OvlExpr->getExplicitTemplateArgs().copyInto(OvlExplicitTemplateArgs);
9088
9089    if (FindAllFunctionsThatMatchTargetTypeExactly()) {
9090      // C++ [over.over]p4:
9091      //   If more than one function is selected, [...]
9092      if (Matches.size() > 1) {
9093        if (FoundNonTemplateFunction)
9094          EliminateAllTemplateMatches();
9095        else
9096          EliminateAllExceptMostSpecializedTemplate();
9097      }
9098    }
9099  }
9100
9101private:
9102  bool isTargetTypeAFunction() const {
9103    return TargetFunctionType->isFunctionType();
9104  }
9105
9106  // [ToType]     [Return]
9107
9108  // R (*)(A) --> R (A), IsNonStaticMemberFunction = false
9109  // R (&)(A) --> R (A), IsNonStaticMemberFunction = false
9110  // R (S::*)(A) --> R (A), IsNonStaticMemberFunction = true
9111  void inline ExtractUnqualifiedFunctionTypeFromTargetType() {
9112    TargetFunctionType = S.ExtractUnqualifiedFunctionType(TargetType);
9113  }
9114
9115  // return true if any matching specializations were found
9116  bool AddMatchingTemplateFunction(FunctionTemplateDecl* FunctionTemplate,
9117                                   const DeclAccessPair& CurAccessFunPair) {
9118    if (CXXMethodDecl *Method
9119              = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
9120      // Skip non-static function templates when converting to pointer, and
9121      // static when converting to member pointer.
9122      if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9123        return false;
9124    }
9125    else if (TargetTypeIsNonStaticMemberFunction)
9126      return false;
9127
9128    // C++ [over.over]p2:
9129    //   If the name is a function template, template argument deduction is
9130    //   done (14.8.2.2), and if the argument deduction succeeds, the
9131    //   resulting template argument list is used to generate a single
9132    //   function template specialization, which is added to the set of
9133    //   overloaded functions considered.
9134    FunctionDecl *Specialization = 0;
9135    TemplateDeductionInfo Info(OvlExpr->getNameLoc());
9136    if (Sema::TemplateDeductionResult Result
9137          = S.DeduceTemplateArguments(FunctionTemplate,
9138                                      &OvlExplicitTemplateArgs,
9139                                      TargetFunctionType, Specialization,
9140                                      Info, /*InOverloadResolution=*/true)) {
9141      // FIXME: make a note of the failed deduction for diagnostics.
9142      (void)Result;
9143      return false;
9144    }
9145
9146    // Template argument deduction ensures that we have an exact match or
9147    // compatible pointer-to-function arguments that would be adjusted by ICS.
9148    // This function template specicalization works.
9149    Specialization = cast<FunctionDecl>(Specialization->getCanonicalDecl());
9150    assert(S.isSameOrCompatibleFunctionType(
9151              Context.getCanonicalType(Specialization->getType()),
9152              Context.getCanonicalType(TargetFunctionType)));
9153    Matches.push_back(std::make_pair(CurAccessFunPair, Specialization));
9154    return true;
9155  }
9156
9157  bool AddMatchingNonTemplateFunction(NamedDecl* Fn,
9158                                      const DeclAccessPair& CurAccessFunPair) {
9159    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
9160      // Skip non-static functions when converting to pointer, and static
9161      // when converting to member pointer.
9162      if (Method->isStatic() == TargetTypeIsNonStaticMemberFunction)
9163        return false;
9164    }
9165    else if (TargetTypeIsNonStaticMemberFunction)
9166      return false;
9167
9168    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
9169      if (S.getLangOpts().CUDA)
9170        if (FunctionDecl *Caller = dyn_cast<FunctionDecl>(S.CurContext))
9171          if (S.CheckCUDATarget(Caller, FunDecl))
9172            return false;
9173
9174      QualType ResultTy;
9175      if (Context.hasSameUnqualifiedType(TargetFunctionType,
9176                                         FunDecl->getType()) ||
9177          S.IsNoReturnConversion(FunDecl->getType(), TargetFunctionType,
9178                                 ResultTy)) {
9179        Matches.push_back(std::make_pair(CurAccessFunPair,
9180          cast<FunctionDecl>(FunDecl->getCanonicalDecl())));
9181        FoundNonTemplateFunction = true;
9182        return true;
9183      }
9184    }
9185
9186    return false;
9187  }
9188
9189  bool FindAllFunctionsThatMatchTargetTypeExactly() {
9190    bool Ret = false;
9191
9192    // If the overload expression doesn't have the form of a pointer to
9193    // member, don't try to convert it to a pointer-to-member type.
9194    if (IsInvalidFormOfPointerToMemberFunction())
9195      return false;
9196
9197    for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
9198                               E = OvlExpr->decls_end();
9199         I != E; ++I) {
9200      // Look through any using declarations to find the underlying function.
9201      NamedDecl *Fn = (*I)->getUnderlyingDecl();
9202
9203      // C++ [over.over]p3:
9204      //   Non-member functions and static member functions match
9205      //   targets of type "pointer-to-function" or "reference-to-function."
9206      //   Nonstatic member functions match targets of
9207      //   type "pointer-to-member-function."
9208      // Note that according to DR 247, the containing class does not matter.
9209      if (FunctionTemplateDecl *FunctionTemplate
9210                                        = dyn_cast<FunctionTemplateDecl>(Fn)) {
9211        if (AddMatchingTemplateFunction(FunctionTemplate, I.getPair()))
9212          Ret = true;
9213      }
9214      // If we have explicit template arguments supplied, skip non-templates.
9215      else if (!OvlExpr->hasExplicitTemplateArgs() &&
9216               AddMatchingNonTemplateFunction(Fn, I.getPair()))
9217        Ret = true;
9218    }
9219    assert(Ret || Matches.empty());
9220    return Ret;
9221  }
9222
9223  void EliminateAllExceptMostSpecializedTemplate() {
9224    //   [...] and any given function template specialization F1 is
9225    //   eliminated if the set contains a second function template
9226    //   specialization whose function template is more specialized
9227    //   than the function template of F1 according to the partial
9228    //   ordering rules of 14.5.5.2.
9229
9230    // The algorithm specified above is quadratic. We instead use a
9231    // two-pass algorithm (similar to the one used to identify the
9232    // best viable function in an overload set) that identifies the
9233    // best function template (if it exists).
9234
9235    UnresolvedSet<4> MatchesCopy; // TODO: avoid!
9236    for (unsigned I = 0, E = Matches.size(); I != E; ++I)
9237      MatchesCopy.addDecl(Matches[I].second, Matches[I].first.getAccess());
9238
9239    UnresolvedSetIterator Result =
9240      S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(),
9241                           TPOC_Other, 0, SourceExpr->getLocStart(),
9242                           S.PDiag(),
9243                           S.PDiag(diag::err_addr_ovl_ambiguous)
9244                             << Matches[0].second->getDeclName(),
9245                           S.PDiag(diag::note_ovl_candidate)
9246                             << (unsigned) oc_function_template,
9247                           Complain, TargetFunctionType);
9248
9249    if (Result != MatchesCopy.end()) {
9250      // Make it the first and only element
9251      Matches[0].first = Matches[Result - MatchesCopy.begin()].first;
9252      Matches[0].second = cast<FunctionDecl>(*Result);
9253      Matches.resize(1);
9254    }
9255  }
9256
9257  void EliminateAllTemplateMatches() {
9258    //   [...] any function template specializations in the set are
9259    //   eliminated if the set also contains a non-template function, [...]
9260    for (unsigned I = 0, N = Matches.size(); I != N; ) {
9261      if (Matches[I].second->getPrimaryTemplate() == 0)
9262        ++I;
9263      else {
9264        Matches[I] = Matches[--N];
9265        Matches.set_size(N);
9266      }
9267    }
9268  }
9269
9270public:
9271  void ComplainNoMatchesFound() const {
9272    assert(Matches.empty());
9273    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_no_viable)
9274        << OvlExpr->getName() << TargetFunctionType
9275        << OvlExpr->getSourceRange();
9276    S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9277  }
9278
9279  bool IsInvalidFormOfPointerToMemberFunction() const {
9280    return TargetTypeIsNonStaticMemberFunction &&
9281      !OvlExprInfo.HasFormOfMemberPointer;
9282  }
9283
9284  void ComplainIsInvalidFormOfPointerToMemberFunction() const {
9285      // TODO: Should we condition this on whether any functions might
9286      // have matched, or is it more appropriate to do that in callers?
9287      // TODO: a fixit wouldn't hurt.
9288      S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier)
9289        << TargetType << OvlExpr->getSourceRange();
9290  }
9291
9292  void ComplainOfInvalidConversion() const {
9293    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_not_func_ptrref)
9294      << OvlExpr->getName() << TargetType;
9295  }
9296
9297  void ComplainMultipleMatchesFound() const {
9298    assert(Matches.size() > 1);
9299    S.Diag(OvlExpr->getLocStart(), diag::err_addr_ovl_ambiguous)
9300      << OvlExpr->getName()
9301      << OvlExpr->getSourceRange();
9302    S.NoteAllOverloadCandidates(OvlExpr, TargetFunctionType);
9303  }
9304
9305  bool hadMultipleCandidates() const { return (OvlExpr->getNumDecls() > 1); }
9306
9307  int getNumMatches() const { return Matches.size(); }
9308
9309  FunctionDecl* getMatchingFunctionDecl() const {
9310    if (Matches.size() != 1) return 0;
9311    return Matches[0].second;
9312  }
9313
9314  const DeclAccessPair* getMatchingFunctionAccessPair() const {
9315    if (Matches.size() != 1) return 0;
9316    return &Matches[0].first;
9317  }
9318};
9319
9320/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
9321/// an overloaded function (C++ [over.over]), where @p From is an
9322/// expression with overloaded function type and @p ToType is the type
9323/// we're trying to resolve to. For example:
9324///
9325/// @code
9326/// int f(double);
9327/// int f(int);
9328///
9329/// int (*pfd)(double) = f; // selects f(double)
9330/// @endcode
9331///
9332/// This routine returns the resulting FunctionDecl if it could be
9333/// resolved, and NULL otherwise. When @p Complain is true, this
9334/// routine will emit diagnostics if there is an error.
9335FunctionDecl *
9336Sema::ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr,
9337                                         QualType TargetType,
9338                                         bool Complain,
9339                                         DeclAccessPair &FoundResult,
9340                                         bool *pHadMultipleCandidates) {
9341  assert(AddressOfExpr->getType() == Context.OverloadTy);
9342
9343  AddressOfFunctionResolver Resolver(*this, AddressOfExpr, TargetType,
9344                                     Complain);
9345  int NumMatches = Resolver.getNumMatches();
9346  FunctionDecl* Fn = 0;
9347  if (NumMatches == 0 && Complain) {
9348    if (Resolver.IsInvalidFormOfPointerToMemberFunction())
9349      Resolver.ComplainIsInvalidFormOfPointerToMemberFunction();
9350    else
9351      Resolver.ComplainNoMatchesFound();
9352  }
9353  else if (NumMatches > 1 && Complain)
9354    Resolver.ComplainMultipleMatchesFound();
9355  else if (NumMatches == 1) {
9356    Fn = Resolver.getMatchingFunctionDecl();
9357    assert(Fn);
9358    FoundResult = *Resolver.getMatchingFunctionAccessPair();
9359    if (Complain)
9360      CheckAddressOfMemberAccess(AddressOfExpr, FoundResult);
9361  }
9362
9363  if (pHadMultipleCandidates)
9364    *pHadMultipleCandidates = Resolver.hadMultipleCandidates();
9365  return Fn;
9366}
9367
9368/// \brief Given an expression that refers to an overloaded function, try to
9369/// resolve that overloaded function expression down to a single function.
9370///
9371/// This routine can only resolve template-ids that refer to a single function
9372/// template, where that template-id refers to a single template whose template
9373/// arguments are either provided by the template-id or have defaults,
9374/// as described in C++0x [temp.arg.explicit]p3.
9375FunctionDecl *
9376Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl,
9377                                                  bool Complain,
9378                                                  DeclAccessPair *FoundResult) {
9379  // C++ [over.over]p1:
9380  //   [...] [Note: any redundant set of parentheses surrounding the
9381  //   overloaded function name is ignored (5.1). ]
9382  // C++ [over.over]p1:
9383  //   [...] The overloaded function name can be preceded by the &
9384  //   operator.
9385
9386  // If we didn't actually find any template-ids, we're done.
9387  if (!ovl->hasExplicitTemplateArgs())
9388    return 0;
9389
9390  TemplateArgumentListInfo ExplicitTemplateArgs;
9391  ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
9392
9393  // Look through all of the overloaded functions, searching for one
9394  // whose type matches exactly.
9395  FunctionDecl *Matched = 0;
9396  for (UnresolvedSetIterator I = ovl->decls_begin(),
9397         E = ovl->decls_end(); I != E; ++I) {
9398    // C++0x [temp.arg.explicit]p3:
9399    //   [...] In contexts where deduction is done and fails, or in contexts
9400    //   where deduction is not done, if a template argument list is
9401    //   specified and it, along with any default template arguments,
9402    //   identifies a single function template specialization, then the
9403    //   template-id is an lvalue for the function template specialization.
9404    FunctionTemplateDecl *FunctionTemplate
9405      = cast<FunctionTemplateDecl>((*I)->getUnderlyingDecl());
9406
9407    // C++ [over.over]p2:
9408    //   If the name is a function template, template argument deduction is
9409    //   done (14.8.2.2), and if the argument deduction succeeds, the
9410    //   resulting template argument list is used to generate a single
9411    //   function template specialization, which is added to the set of
9412    //   overloaded functions considered.
9413    FunctionDecl *Specialization = 0;
9414    TemplateDeductionInfo Info(ovl->getNameLoc());
9415    if (TemplateDeductionResult Result
9416          = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
9417                                    Specialization, Info,
9418                                    /*InOverloadResolution=*/true)) {
9419      // FIXME: make a note of the failed deduction for diagnostics.
9420      (void)Result;
9421      continue;
9422    }
9423
9424    assert(Specialization && "no specialization and no error?");
9425
9426    // Multiple matches; we can't resolve to a single declaration.
9427    if (Matched) {
9428      if (Complain) {
9429        Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous)
9430          << ovl->getName();
9431        NoteAllOverloadCandidates(ovl);
9432      }
9433      return 0;
9434    }
9435
9436    Matched = Specialization;
9437    if (FoundResult) *FoundResult = I.getPair();
9438  }
9439
9440  return Matched;
9441}
9442
9443
9444
9445
9446// Resolve and fix an overloaded expression that can be resolved
9447// because it identifies a single function template specialization.
9448//
9449// Last three arguments should only be supplied if Complain = true
9450//
9451// Return true if it was logically possible to so resolve the
9452// expression, regardless of whether or not it succeeded.  Always
9453// returns true if 'complain' is set.
9454bool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(
9455                      ExprResult &SrcExpr, bool doFunctionPointerConverion,
9456                   bool complain, const SourceRange& OpRangeForComplaining,
9457                                           QualType DestTypeForComplaining,
9458                                            unsigned DiagIDForComplaining) {
9459  assert(SrcExpr.get()->getType() == Context.OverloadTy);
9460
9461  OverloadExpr::FindResult ovl = OverloadExpr::find(SrcExpr.get());
9462
9463  DeclAccessPair found;
9464  ExprResult SingleFunctionExpression;
9465  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(
9466                           ovl.Expression, /*complain*/ false, &found)) {
9467    if (DiagnoseUseOfDecl(fn, SrcExpr.get()->getLocStart())) {
9468      SrcExpr = ExprError();
9469      return true;
9470    }
9471
9472    // It is only correct to resolve to an instance method if we're
9473    // resolving a form that's permitted to be a pointer to member.
9474    // Otherwise we'll end up making a bound member expression, which
9475    // is illegal in all the contexts we resolve like this.
9476    if (!ovl.HasFormOfMemberPointer &&
9477        isa<CXXMethodDecl>(fn) &&
9478        cast<CXXMethodDecl>(fn)->isInstance()) {
9479      if (!complain) return false;
9480
9481      Diag(ovl.Expression->getExprLoc(),
9482           diag::err_bound_member_function)
9483        << 0 << ovl.Expression->getSourceRange();
9484
9485      // TODO: I believe we only end up here if there's a mix of
9486      // static and non-static candidates (otherwise the expression
9487      // would have 'bound member' type, not 'overload' type).
9488      // Ideally we would note which candidate was chosen and why
9489      // the static candidates were rejected.
9490      SrcExpr = ExprError();
9491      return true;
9492    }
9493
9494    // Fix the expression to refer to 'fn'.
9495    SingleFunctionExpression =
9496      Owned(FixOverloadedFunctionReference(SrcExpr.take(), found, fn));
9497
9498    // If desired, do function-to-pointer decay.
9499    if (doFunctionPointerConverion) {
9500      SingleFunctionExpression =
9501        DefaultFunctionArrayLvalueConversion(SingleFunctionExpression.take());
9502      if (SingleFunctionExpression.isInvalid()) {
9503        SrcExpr = ExprError();
9504        return true;
9505      }
9506    }
9507  }
9508
9509  if (!SingleFunctionExpression.isUsable()) {
9510    if (complain) {
9511      Diag(OpRangeForComplaining.getBegin(), DiagIDForComplaining)
9512        << ovl.Expression->getName()
9513        << DestTypeForComplaining
9514        << OpRangeForComplaining
9515        << ovl.Expression->getQualifierLoc().getSourceRange();
9516      NoteAllOverloadCandidates(SrcExpr.get());
9517
9518      SrcExpr = ExprError();
9519      return true;
9520    }
9521
9522    return false;
9523  }
9524
9525  SrcExpr = SingleFunctionExpression;
9526  return true;
9527}
9528
9529/// \brief Add a single candidate to the overload set.
9530static void AddOverloadedCallCandidate(Sema &S,
9531                                       DeclAccessPair FoundDecl,
9532                                 TemplateArgumentListInfo *ExplicitTemplateArgs,
9533                                       ArrayRef<Expr *> Args,
9534                                       OverloadCandidateSet &CandidateSet,
9535                                       bool PartialOverloading,
9536                                       bool KnownValid) {
9537  NamedDecl *Callee = FoundDecl.getDecl();
9538  if (isa<UsingShadowDecl>(Callee))
9539    Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
9540
9541  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
9542    if (ExplicitTemplateArgs) {
9543      assert(!KnownValid && "Explicit template arguments?");
9544      return;
9545    }
9546    S.AddOverloadCandidate(Func, FoundDecl, Args, CandidateSet, false,
9547                           PartialOverloading);
9548    return;
9549  }
9550
9551  if (FunctionTemplateDecl *FuncTemplate
9552      = dyn_cast<FunctionTemplateDecl>(Callee)) {
9553    S.AddTemplateOverloadCandidate(FuncTemplate, FoundDecl,
9554                                   ExplicitTemplateArgs, Args, CandidateSet);
9555    return;
9556  }
9557
9558  assert(!KnownValid && "unhandled case in overloaded call candidate");
9559}
9560
9561/// \brief Add the overload candidates named by callee and/or found by argument
9562/// dependent lookup to the given overload set.
9563void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
9564                                       ArrayRef<Expr *> Args,
9565                                       OverloadCandidateSet &CandidateSet,
9566                                       bool PartialOverloading) {
9567
9568#ifndef NDEBUG
9569  // Verify that ArgumentDependentLookup is consistent with the rules
9570  // in C++0x [basic.lookup.argdep]p3:
9571  //
9572  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
9573  //   and let Y be the lookup set produced by argument dependent
9574  //   lookup (defined as follows). If X contains
9575  //
9576  //     -- a declaration of a class member, or
9577  //
9578  //     -- a block-scope function declaration that is not a
9579  //        using-declaration, or
9580  //
9581  //     -- a declaration that is neither a function or a function
9582  //        template
9583  //
9584  //   then Y is empty.
9585
9586  if (ULE->requiresADL()) {
9587    for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9588           E = ULE->decls_end(); I != E; ++I) {
9589      assert(!(*I)->getDeclContext()->isRecord());
9590      assert(isa<UsingShadowDecl>(*I) ||
9591             !(*I)->getDeclContext()->isFunctionOrMethod());
9592      assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
9593    }
9594  }
9595#endif
9596
9597  // It would be nice to avoid this copy.
9598  TemplateArgumentListInfo TABuffer;
9599  TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9600  if (ULE->hasExplicitTemplateArgs()) {
9601    ULE->copyTemplateArgumentsInto(TABuffer);
9602    ExplicitTemplateArgs = &TABuffer;
9603  }
9604
9605  for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
9606         E = ULE->decls_end(); I != E; ++I)
9607    AddOverloadedCallCandidate(*this, I.getPair(), ExplicitTemplateArgs, Args,
9608                               CandidateSet, PartialOverloading,
9609                               /*KnownValid*/ true);
9610
9611  if (ULE->requiresADL())
9612    AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
9613                                         ULE->getExprLoc(),
9614                                         Args, ExplicitTemplateArgs,
9615                                         CandidateSet, PartialOverloading);
9616}
9617
9618/// Attempt to recover from an ill-formed use of a non-dependent name in a
9619/// template, where the non-dependent name was declared after the template
9620/// was defined. This is common in code written for a compilers which do not
9621/// correctly implement two-stage name lookup.
9622///
9623/// Returns true if a viable candidate was found and a diagnostic was issued.
9624static bool
9625DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
9626                       const CXXScopeSpec &SS, LookupResult &R,
9627                       TemplateArgumentListInfo *ExplicitTemplateArgs,
9628                       ArrayRef<Expr *> Args) {
9629  if (SemaRef.ActiveTemplateInstantiations.empty() || !SS.isEmpty())
9630    return false;
9631
9632  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {
9633    if (DC->isTransparentContext())
9634      continue;
9635
9636    SemaRef.LookupQualifiedName(R, DC);
9637
9638    if (!R.empty()) {
9639      R.suppressDiagnostics();
9640
9641      if (isa<CXXRecordDecl>(DC)) {
9642        // Don't diagnose names we find in classes; we get much better
9643        // diagnostics for these from DiagnoseEmptyLookup.
9644        R.clear();
9645        return false;
9646      }
9647
9648      OverloadCandidateSet Candidates(FnLoc);
9649      for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I)
9650        AddOverloadedCallCandidate(SemaRef, I.getPair(),
9651                                   ExplicitTemplateArgs, Args,
9652                                   Candidates, false, /*KnownValid*/ false);
9653
9654      OverloadCandidateSet::iterator Best;
9655      if (Candidates.BestViableFunction(SemaRef, FnLoc, Best) != OR_Success) {
9656        // No viable functions. Don't bother the user with notes for functions
9657        // which don't work and shouldn't be found anyway.
9658        R.clear();
9659        return false;
9660      }
9661
9662      // Find the namespaces where ADL would have looked, and suggest
9663      // declaring the function there instead.
9664      Sema::AssociatedNamespaceSet AssociatedNamespaces;
9665      Sema::AssociatedClassSet AssociatedClasses;
9666      SemaRef.FindAssociatedClassesAndNamespaces(FnLoc, Args,
9667                                                 AssociatedNamespaces,
9668                                                 AssociatedClasses);
9669      Sema::AssociatedNamespaceSet SuggestedNamespaces;
9670      DeclContext *Std = SemaRef.getStdNamespace();
9671      for (Sema::AssociatedNamespaceSet::iterator
9672             it = AssociatedNamespaces.begin(),
9673             end = AssociatedNamespaces.end(); it != end; ++it) {
9674        // Never suggest declaring a function within namespace 'std'.
9675        if (Std && Std->Encloses(*it))
9676          continue;
9677
9678        // Never suggest declaring a function within a namespace with a reserved
9679        // name, like __gnu_cxx.
9680        NamespaceDecl *NS = dyn_cast<NamespaceDecl>(*it);
9681        if (NS &&
9682            NS->getQualifiedNameAsString().find("__") != std::string::npos)
9683          continue;
9684
9685        SuggestedNamespaces.insert(*it);
9686      }
9687
9688      SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)
9689        << R.getLookupName();
9690      if (SuggestedNamespaces.empty()) {
9691        SemaRef.Diag(Best->Function->getLocation(),
9692                     diag::note_not_found_by_two_phase_lookup)
9693          << R.getLookupName() << 0;
9694      } else if (SuggestedNamespaces.size() == 1) {
9695        SemaRef.Diag(Best->Function->getLocation(),
9696                     diag::note_not_found_by_two_phase_lookup)
9697          << R.getLookupName() << 1 << *SuggestedNamespaces.begin();
9698      } else {
9699        // FIXME: It would be useful to list the associated namespaces here,
9700        // but the diagnostics infrastructure doesn't provide a way to produce
9701        // a localized representation of a list of items.
9702        SemaRef.Diag(Best->Function->getLocation(),
9703                     diag::note_not_found_by_two_phase_lookup)
9704          << R.getLookupName() << 2;
9705      }
9706
9707      // Try to recover by calling this function.
9708      return true;
9709    }
9710
9711    R.clear();
9712  }
9713
9714  return false;
9715}
9716
9717/// Attempt to recover from ill-formed use of a non-dependent operator in a
9718/// template, where the non-dependent operator was declared after the template
9719/// was defined.
9720///
9721/// Returns true if a viable candidate was found and a diagnostic was issued.
9722static bool
9723DiagnoseTwoPhaseOperatorLookup(Sema &SemaRef, OverloadedOperatorKind Op,
9724                               SourceLocation OpLoc,
9725                               ArrayRef<Expr *> Args) {
9726  DeclarationName OpName =
9727    SemaRef.Context.DeclarationNames.getCXXOperatorName(Op);
9728  LookupResult R(SemaRef, OpName, OpLoc, Sema::LookupOperatorName);
9729  return DiagnoseTwoPhaseLookup(SemaRef, OpLoc, CXXScopeSpec(), R,
9730                                /*ExplicitTemplateArgs=*/0, Args);
9731}
9732
9733namespace {
9734// Callback to limit the allowed keywords and to only accept typo corrections
9735// that are keywords or whose decls refer to functions (or template functions)
9736// that accept the given number of arguments.
9737class RecoveryCallCCC : public CorrectionCandidateCallback {
9738 public:
9739  RecoveryCallCCC(Sema &SemaRef, unsigned NumArgs, bool HasExplicitTemplateArgs)
9740      : NumArgs(NumArgs), HasExplicitTemplateArgs(HasExplicitTemplateArgs) {
9741    WantTypeSpecifiers = SemaRef.getLangOpts().CPlusPlus;
9742    WantRemainingKeywords = false;
9743  }
9744
9745  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9746    if (!candidate.getCorrectionDecl())
9747      return candidate.isKeyword();
9748
9749    for (TypoCorrection::const_decl_iterator DI = candidate.begin(),
9750           DIEnd = candidate.end(); DI != DIEnd; ++DI) {
9751      FunctionDecl *FD = 0;
9752      NamedDecl *ND = (*DI)->getUnderlyingDecl();
9753      if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
9754        FD = FTD->getTemplatedDecl();
9755      if (!HasExplicitTemplateArgs && !FD) {
9756        if (!(FD = dyn_cast<FunctionDecl>(ND)) && isa<ValueDecl>(ND)) {
9757          // If the Decl is neither a function nor a template function,
9758          // determine if it is a pointer or reference to a function. If so,
9759          // check against the number of arguments expected for the pointee.
9760          QualType ValType = cast<ValueDecl>(ND)->getType();
9761          if (ValType->isAnyPointerType() || ValType->isReferenceType())
9762            ValType = ValType->getPointeeType();
9763          if (const FunctionProtoType *FPT = ValType->getAs<FunctionProtoType>())
9764            if (FPT->getNumArgs() == NumArgs)
9765              return true;
9766        }
9767      }
9768      if (FD && FD->getNumParams() >= NumArgs &&
9769          FD->getMinRequiredArguments() <= NumArgs)
9770        return true;
9771    }
9772    return false;
9773  }
9774
9775 private:
9776  unsigned NumArgs;
9777  bool HasExplicitTemplateArgs;
9778};
9779
9780// Callback that effectively disabled typo correction
9781class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
9782 public:
9783  NoTypoCorrectionCCC() {
9784    WantTypeSpecifiers = false;
9785    WantExpressionKeywords = false;
9786    WantCXXNamedCasts = false;
9787    WantRemainingKeywords = false;
9788  }
9789
9790  virtual bool ValidateCandidate(const TypoCorrection &candidate) {
9791    return false;
9792  }
9793};
9794
9795class BuildRecoveryCallExprRAII {
9796  Sema &SemaRef;
9797public:
9798  BuildRecoveryCallExprRAII(Sema &S) : SemaRef(S) {
9799    assert(SemaRef.IsBuildingRecoveryCallExpr == false);
9800    SemaRef.IsBuildingRecoveryCallExpr = true;
9801  }
9802
9803  ~BuildRecoveryCallExprRAII() {
9804    SemaRef.IsBuildingRecoveryCallExpr = false;
9805  }
9806};
9807
9808}
9809
9810/// Attempts to recover from a call where no functions were found.
9811///
9812/// Returns true if new candidates were found.
9813static ExprResult
9814BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9815                      UnresolvedLookupExpr *ULE,
9816                      SourceLocation LParenLoc,
9817                      llvm::MutableArrayRef<Expr *> Args,
9818                      SourceLocation RParenLoc,
9819                      bool EmptyLookup, bool AllowTypoCorrection) {
9820  // Do not try to recover if it is already building a recovery call.
9821  // This stops infinite loops for template instantiations like
9822  //
9823  // template <typename T> auto foo(T t) -> decltype(foo(t)) {}
9824  // template <typename T> auto foo(T t) -> decltype(foo(&t)) {}
9825  //
9826  if (SemaRef.IsBuildingRecoveryCallExpr)
9827    return ExprError();
9828  BuildRecoveryCallExprRAII RCE(SemaRef);
9829
9830  CXXScopeSpec SS;
9831  SS.Adopt(ULE->getQualifierLoc());
9832  SourceLocation TemplateKWLoc = ULE->getTemplateKeywordLoc();
9833
9834  TemplateArgumentListInfo TABuffer;
9835  TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
9836  if (ULE->hasExplicitTemplateArgs()) {
9837    ULE->copyTemplateArgumentsInto(TABuffer);
9838    ExplicitTemplateArgs = &TABuffer;
9839  }
9840
9841  LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
9842                 Sema::LookupOrdinaryName);
9843  RecoveryCallCCC Validator(SemaRef, Args.size(), ExplicitTemplateArgs != 0);
9844  NoTypoCorrectionCCC RejectAll;
9845  CorrectionCandidateCallback *CCC = AllowTypoCorrection ?
9846      (CorrectionCandidateCallback*)&Validator :
9847      (CorrectionCandidateCallback*)&RejectAll;
9848  if (!DiagnoseTwoPhaseLookup(SemaRef, Fn->getExprLoc(), SS, R,
9849                              ExplicitTemplateArgs, Args) &&
9850      (!EmptyLookup ||
9851       SemaRef.DiagnoseEmptyLookup(S, SS, R, *CCC,
9852                                   ExplicitTemplateArgs, Args)))
9853    return ExprError();
9854
9855  assert(!R.empty() && "lookup results empty despite recovery");
9856
9857  // Build an implicit member call if appropriate.  Just drop the
9858  // casts and such from the call, we don't really care.
9859  ExprResult NewFn = ExprError();
9860  if ((*R.begin())->isCXXClassMember())
9861    NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc,
9862                                                    R, ExplicitTemplateArgs);
9863  else if (ExplicitTemplateArgs || TemplateKWLoc.isValid())
9864    NewFn = SemaRef.BuildTemplateIdExpr(SS, TemplateKWLoc, R, false,
9865                                        ExplicitTemplateArgs);
9866  else
9867    NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
9868
9869  if (NewFn.isInvalid())
9870    return ExprError();
9871
9872  // This shouldn't cause an infinite loop because we're giving it
9873  // an expression with viable lookup results, which should never
9874  // end up here.
9875  return SemaRef.ActOnCallExpr(/*Scope*/ 0, NewFn.take(), LParenLoc,
9876                               MultiExprArg(Args.data(), Args.size()),
9877                               RParenLoc);
9878}
9879
9880/// \brief Constructs and populates an OverloadedCandidateSet from
9881/// the given function.
9882/// \returns true when an the ExprResult output parameter has been set.
9883bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
9884                                  UnresolvedLookupExpr *ULE,
9885                                  Expr **Args, unsigned NumArgs,
9886                                  SourceLocation RParenLoc,
9887                                  OverloadCandidateSet *CandidateSet,
9888                                  ExprResult *Result) {
9889#ifndef NDEBUG
9890  if (ULE->requiresADL()) {
9891    // To do ADL, we must have found an unqualified name.
9892    assert(!ULE->getQualifier() && "qualified name with ADL");
9893
9894    // We don't perform ADL for implicit declarations of builtins.
9895    // Verify that this was correctly set up.
9896    FunctionDecl *F;
9897    if (ULE->decls_begin() + 1 == ULE->decls_end() &&
9898        (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
9899        F->getBuiltinID() && F->isImplicit())
9900      llvm_unreachable("performing ADL for builtin");
9901
9902    // We don't perform ADL in C.
9903    assert(getLangOpts().CPlusPlus && "ADL enabled in C");
9904  }
9905#endif
9906
9907  UnbridgedCastsSet UnbridgedCasts;
9908  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts)) {
9909    *Result = ExprError();
9910    return true;
9911  }
9912
9913  // Add the functions denoted by the callee to the set of candidate
9914  // functions, including those from argument-dependent lookup.
9915  AddOverloadedCallCandidates(ULE, llvm::makeArrayRef(Args, NumArgs),
9916                              *CandidateSet);
9917
9918  // If we found nothing, try to recover.
9919  // BuildRecoveryCallExpr diagnoses the error itself, so we just bail
9920  // out if it fails.
9921  if (CandidateSet->empty()) {
9922    // In Microsoft mode, if we are inside a template class member function then
9923    // create a type dependent CallExpr. The goal is to postpone name lookup
9924    // to instantiation time to be able to search into type dependent base
9925    // classes.
9926    if (getLangOpts().MicrosoftMode && CurContext->isDependentContext() &&
9927        (isa<FunctionDecl>(CurContext) || isa<CXXRecordDecl>(CurContext))) {
9928      CallExpr *CE = new (Context) CallExpr(Context, Fn,
9929                                            llvm::makeArrayRef(Args, NumArgs),
9930                                            Context.DependentTy, VK_RValue,
9931                                            RParenLoc);
9932      CE->setTypeDependent(true);
9933      *Result = Owned(CE);
9934      return true;
9935    }
9936    return false;
9937  }
9938
9939  UnbridgedCasts.restore();
9940  return false;
9941}
9942
9943/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns
9944/// the completed call expression. If overload resolution fails, emits
9945/// diagnostics and returns ExprError()
9946static ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
9947                                           UnresolvedLookupExpr *ULE,
9948                                           SourceLocation LParenLoc,
9949                                           Expr **Args, unsigned NumArgs,
9950                                           SourceLocation RParenLoc,
9951                                           Expr *ExecConfig,
9952                                           OverloadCandidateSet *CandidateSet,
9953                                           OverloadCandidateSet::iterator *Best,
9954                                           OverloadingResult OverloadResult,
9955                                           bool AllowTypoCorrection) {
9956  if (CandidateSet->empty())
9957    return BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9958                                 llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9959                                 RParenLoc, /*EmptyLookup=*/true,
9960                                 AllowTypoCorrection);
9961
9962  switch (OverloadResult) {
9963  case OR_Success: {
9964    FunctionDecl *FDecl = (*Best)->Function;
9965    SemaRef.CheckUnresolvedLookupAccess(ULE, (*Best)->FoundDecl);
9966    SemaRef.DiagnoseUseOfDecl(FDecl, ULE->getNameLoc());
9967    Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
9968    return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
9969                                         RParenLoc, ExecConfig);
9970  }
9971
9972  case OR_No_Viable_Function: {
9973    // Try to recover by looking for viable functions which the user might
9974    // have meant to call.
9975    ExprResult Recovery = BuildRecoveryCallExpr(SemaRef, S, Fn, ULE, LParenLoc,
9976                                  llvm::MutableArrayRef<Expr *>(Args, NumArgs),
9977                                                RParenLoc,
9978                                                /*EmptyLookup=*/false,
9979                                                AllowTypoCorrection);
9980    if (!Recovery.isInvalid())
9981      return Recovery;
9982
9983    SemaRef.Diag(Fn->getLocStart(),
9984         diag::err_ovl_no_viable_function_in_call)
9985      << ULE->getName() << Fn->getSourceRange();
9986    CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
9987                                 llvm::makeArrayRef(Args, NumArgs));
9988    break;
9989  }
9990
9991  case OR_Ambiguous:
9992    SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_ambiguous_call)
9993      << ULE->getName() << Fn->getSourceRange();
9994    CandidateSet->NoteCandidates(SemaRef, OCD_ViableCandidates,
9995                                 llvm::makeArrayRef(Args, NumArgs));
9996    break;
9997
9998  case OR_Deleted: {
9999    SemaRef.Diag(Fn->getLocStart(), diag::err_ovl_deleted_call)
10000      << (*Best)->Function->isDeleted()
10001      << ULE->getName()
10002      << SemaRef.getDeletedOrUnavailableSuffix((*Best)->Function)
10003      << Fn->getSourceRange();
10004    CandidateSet->NoteCandidates(SemaRef, OCD_AllCandidates,
10005                                 llvm::makeArrayRef(Args, NumArgs));
10006
10007    // We emitted an error for the unvailable/deleted function call but keep
10008    // the call in the AST.
10009    FunctionDecl *FDecl = (*Best)->Function;
10010    Fn = SemaRef.FixOverloadedFunctionReference(Fn, (*Best)->FoundDecl, FDecl);
10011    return SemaRef.BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs,
10012                                 RParenLoc, ExecConfig);
10013  }
10014  }
10015
10016  // Overload resolution failed.
10017  return ExprError();
10018}
10019
10020/// BuildOverloadedCallExpr - Given the call expression that calls Fn
10021/// (which eventually refers to the declaration Func) and the call
10022/// arguments Args/NumArgs, attempt to resolve the function call down
10023/// to a specific function. If overload resolution succeeds, returns
10024/// the call expression produced by overload resolution.
10025/// Otherwise, emits diagnostics and returns ExprError.
10026ExprResult Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn,
10027                                         UnresolvedLookupExpr *ULE,
10028                                         SourceLocation LParenLoc,
10029                                         Expr **Args, unsigned NumArgs,
10030                                         SourceLocation RParenLoc,
10031                                         Expr *ExecConfig,
10032                                         bool AllowTypoCorrection) {
10033  OverloadCandidateSet CandidateSet(Fn->getExprLoc());
10034  ExprResult result;
10035
10036  if (buildOverloadedCallSet(S, Fn, ULE, Args, NumArgs, LParenLoc,
10037                             &CandidateSet, &result))
10038    return result;
10039
10040  OverloadCandidateSet::iterator Best;
10041  OverloadingResult OverloadResult =
10042      CandidateSet.BestViableFunction(*this, Fn->getLocStart(), Best);
10043
10044  return FinishOverloadedCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs,
10045                                  RParenLoc, ExecConfig, &CandidateSet,
10046                                  &Best, OverloadResult,
10047                                  AllowTypoCorrection);
10048}
10049
10050static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
10051  return Functions.size() > 1 ||
10052    (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
10053}
10054
10055/// \brief Create a unary operation that may resolve to an overloaded
10056/// operator.
10057///
10058/// \param OpLoc The location of the operator itself (e.g., '*').
10059///
10060/// \param OpcIn The UnaryOperator::Opcode that describes this
10061/// operator.
10062///
10063/// \param Fns The set of non-member functions that will be
10064/// considered by overload resolution. The caller needs to build this
10065/// set based on the context using, e.g.,
10066/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10067/// set should not contain any member functions; those will be added
10068/// by CreateOverloadedUnaryOp().
10069///
10070/// \param Input The input argument.
10071ExprResult
10072Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
10073                              const UnresolvedSetImpl &Fns,
10074                              Expr *Input) {
10075  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
10076
10077  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
10078  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
10079  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10080  // TODO: provide better source location info.
10081  DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10082
10083  if (checkPlaceholderForOverload(*this, Input))
10084    return ExprError();
10085
10086  Expr *Args[2] = { Input, 0 };
10087  unsigned NumArgs = 1;
10088
10089  // For post-increment and post-decrement, add the implicit '0' as
10090  // the second argument, so that we know this is a post-increment or
10091  // post-decrement.
10092  if (Opc == UO_PostInc || Opc == UO_PostDec) {
10093    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
10094    Args[1] = IntegerLiteral::Create(Context, Zero, Context.IntTy,
10095                                     SourceLocation());
10096    NumArgs = 2;
10097  }
10098
10099  if (Input->isTypeDependent()) {
10100    if (Fns.empty())
10101      return Owned(new (Context) UnaryOperator(Input,
10102                                               Opc,
10103                                               Context.DependentTy,
10104                                               VK_RValue, OK_Ordinary,
10105                                               OpLoc));
10106
10107    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10108    UnresolvedLookupExpr *Fn
10109      = UnresolvedLookupExpr::Create(Context, NamingClass,
10110                                     NestedNameSpecifierLoc(), OpNameInfo,
10111                                     /*ADL*/ true, IsOverloaded(Fns),
10112                                     Fns.begin(), Fns.end());
10113    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
10114                                              llvm::makeArrayRef(Args, NumArgs),
10115                                                   Context.DependentTy,
10116                                                   VK_RValue,
10117                                                   OpLoc, false));
10118  }
10119
10120  // Build an empty overload set.
10121  OverloadCandidateSet CandidateSet(OpLoc);
10122
10123  // Add the candidates from the given function set.
10124  AddFunctionCandidates(Fns, llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10125                        false);
10126
10127  // Add operator candidates that are member functions.
10128  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
10129
10130  // Add candidates from ADL.
10131  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10132                                       OpLoc, llvm::makeArrayRef(Args, NumArgs),
10133                                       /*ExplicitTemplateArgs*/ 0,
10134                                       CandidateSet);
10135
10136  // Add builtin operator candidates.
10137  AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
10138
10139  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10140
10141  // Perform overload resolution.
10142  OverloadCandidateSet::iterator Best;
10143  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10144  case OR_Success: {
10145    // We found a built-in operator or an overloaded operator.
10146    FunctionDecl *FnDecl = Best->Function;
10147
10148    if (FnDecl) {
10149      // We matched an overloaded operator. Build a call to that
10150      // operator.
10151
10152      // Convert the arguments.
10153      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10154        CheckMemberOperatorAccess(OpLoc, Args[0], 0, Best->FoundDecl);
10155
10156        ExprResult InputRes =
10157          PerformObjectArgumentInitialization(Input, /*Qualifier=*/0,
10158                                              Best->FoundDecl, Method);
10159        if (InputRes.isInvalid())
10160          return ExprError();
10161        Input = InputRes.take();
10162      } else {
10163        // Convert the arguments.
10164        ExprResult InputInit
10165          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10166                                                      Context,
10167                                                      FnDecl->getParamDecl(0)),
10168                                      SourceLocation(),
10169                                      Input);
10170        if (InputInit.isInvalid())
10171          return ExprError();
10172        Input = InputInit.take();
10173      }
10174
10175      // Determine the result type.
10176      QualType ResultTy = FnDecl->getResultType();
10177      ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10178      ResultTy = ResultTy.getNonLValueExprType(Context);
10179
10180      // Build the actual expression node.
10181      ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl, Best->FoundDecl,
10182                                                HadMultipleCandidates, OpLoc);
10183      if (FnExpr.isInvalid())
10184        return ExprError();
10185
10186      Args[0] = Input;
10187      CallExpr *TheCall =
10188        new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10189                                          llvm::makeArrayRef(Args, NumArgs),
10190                                          ResultTy, VK, OpLoc, false);
10191
10192      if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10193                              FnDecl))
10194        return ExprError();
10195
10196      return MaybeBindToTemporary(TheCall);
10197    } else {
10198      // We matched a built-in operator. Convert the arguments, then
10199      // break out so that we will build the appropriate built-in
10200      // operator node.
10201      ExprResult InputRes =
10202        PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
10203                                  Best->Conversions[0], AA_Passing);
10204      if (InputRes.isInvalid())
10205        return ExprError();
10206      Input = InputRes.take();
10207      break;
10208    }
10209  }
10210
10211  case OR_No_Viable_Function:
10212    // This is an erroneous use of an operator which can be overloaded by
10213    // a non-member function. Check for non-member operators which were
10214    // defined too late to be candidates.
10215    if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc,
10216                                       llvm::makeArrayRef(Args, NumArgs)))
10217      // FIXME: Recover by calling the found function.
10218      return ExprError();
10219
10220    // No viable function; fall through to handling this as a
10221    // built-in operator, which will produce an error message for us.
10222    break;
10223
10224  case OR_Ambiguous:
10225    Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
10226        << UnaryOperator::getOpcodeStr(Opc)
10227        << Input->getType()
10228        << Input->getSourceRange();
10229    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
10230                                llvm::makeArrayRef(Args, NumArgs),
10231                                UnaryOperator::getOpcodeStr(Opc), OpLoc);
10232    return ExprError();
10233
10234  case OR_Deleted:
10235    Diag(OpLoc, diag::err_ovl_deleted_oper)
10236      << Best->Function->isDeleted()
10237      << UnaryOperator::getOpcodeStr(Opc)
10238      << getDeletedOrUnavailableSuffix(Best->Function)
10239      << Input->getSourceRange();
10240    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10241                                llvm::makeArrayRef(Args, NumArgs),
10242                                UnaryOperator::getOpcodeStr(Opc), OpLoc);
10243    return ExprError();
10244  }
10245
10246  // Either we found no viable overloaded operator or we matched a
10247  // built-in operator. In either case, fall through to trying to
10248  // build a built-in operation.
10249  return CreateBuiltinUnaryOp(OpLoc, Opc, Input);
10250}
10251
10252/// \brief Create a binary operation that may resolve to an overloaded
10253/// operator.
10254///
10255/// \param OpLoc The location of the operator itself (e.g., '+').
10256///
10257/// \param OpcIn The BinaryOperator::Opcode that describes this
10258/// operator.
10259///
10260/// \param Fns The set of non-member functions that will be
10261/// considered by overload resolution. The caller needs to build this
10262/// set based on the context using, e.g.,
10263/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
10264/// set should not contain any member functions; those will be added
10265/// by CreateOverloadedBinOp().
10266///
10267/// \param LHS Left-hand argument.
10268/// \param RHS Right-hand argument.
10269ExprResult
10270Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
10271                            unsigned OpcIn,
10272                            const UnresolvedSetImpl &Fns,
10273                            Expr *LHS, Expr *RHS) {
10274  Expr *Args[2] = { LHS, RHS };
10275  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
10276
10277  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
10278  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
10279  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
10280
10281  // If either side is type-dependent, create an appropriate dependent
10282  // expression.
10283  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10284    if (Fns.empty()) {
10285      // If there are no functions to store, just build a dependent
10286      // BinaryOperator or CompoundAssignment.
10287      if (Opc <= BO_Assign || Opc > BO_OrAssign)
10288        return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
10289                                                  Context.DependentTy,
10290                                                  VK_RValue, OK_Ordinary,
10291                                                  OpLoc,
10292                                                  FPFeatures.fp_contract));
10293
10294      return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
10295                                                        Context.DependentTy,
10296                                                        VK_LValue,
10297                                                        OK_Ordinary,
10298                                                        Context.DependentTy,
10299                                                        Context.DependentTy,
10300                                                        OpLoc,
10301                                                        FPFeatures.fp_contract));
10302    }
10303
10304    // FIXME: save results of ADL from here?
10305    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10306    // TODO: provide better source location info in DNLoc component.
10307    DeclarationNameInfo OpNameInfo(OpName, OpLoc);
10308    UnresolvedLookupExpr *Fn
10309      = UnresolvedLookupExpr::Create(Context, NamingClass,
10310                                     NestedNameSpecifierLoc(), OpNameInfo,
10311                                     /*ADL*/ true, IsOverloaded(Fns),
10312                                     Fns.begin(), Fns.end());
10313    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn, Args,
10314                                                Context.DependentTy, VK_RValue,
10315                                                OpLoc, FPFeatures.fp_contract));
10316  }
10317
10318  // Always do placeholder-like conversions on the RHS.
10319  if (checkPlaceholderForOverload(*this, Args[1]))
10320    return ExprError();
10321
10322  // Do placeholder-like conversion on the LHS; note that we should
10323  // not get here with a PseudoObject LHS.
10324  assert(Args[0]->getObjectKind() != OK_ObjCProperty);
10325  if (checkPlaceholderForOverload(*this, Args[0]))
10326    return ExprError();
10327
10328  // If this is the assignment operator, we only perform overload resolution
10329  // if the left-hand side is a class or enumeration type. This is actually
10330  // a hack. The standard requires that we do overload resolution between the
10331  // various built-in candidates, but as DR507 points out, this can lead to
10332  // problems. So we do it this way, which pretty much follows what GCC does.
10333  // Note that we go the traditional code path for compound assignment forms.
10334  if (Opc == BO_Assign && !Args[0]->getType()->isOverloadableType())
10335    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10336
10337  // If this is the .* operator, which is not overloadable, just
10338  // create a built-in binary operator.
10339  if (Opc == BO_PtrMemD)
10340    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10341
10342  // Build an empty overload set.
10343  OverloadCandidateSet CandidateSet(OpLoc);
10344
10345  // Add the candidates from the given function set.
10346  AddFunctionCandidates(Fns, Args, CandidateSet, false);
10347
10348  // Add operator candidates that are member functions.
10349  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10350
10351  // Add candidates from ADL.
10352  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
10353                                       OpLoc, Args,
10354                                       /*ExplicitTemplateArgs*/ 0,
10355                                       CandidateSet);
10356
10357  // Add builtin operator candidates.
10358  AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
10359
10360  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10361
10362  // Perform overload resolution.
10363  OverloadCandidateSet::iterator Best;
10364  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
10365    case OR_Success: {
10366      // We found a built-in operator or an overloaded operator.
10367      FunctionDecl *FnDecl = Best->Function;
10368
10369      if (FnDecl) {
10370        // We matched an overloaded operator. Build a call to that
10371        // operator.
10372
10373        // Convert the arguments.
10374        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
10375          // Best->Access is only meaningful for class members.
10376          CheckMemberOperatorAccess(OpLoc, Args[0], Args[1], Best->FoundDecl);
10377
10378          ExprResult Arg1 =
10379            PerformCopyInitialization(
10380              InitializedEntity::InitializeParameter(Context,
10381                                                     FnDecl->getParamDecl(0)),
10382              SourceLocation(), Owned(Args[1]));
10383          if (Arg1.isInvalid())
10384            return ExprError();
10385
10386          ExprResult Arg0 =
10387            PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10388                                                Best->FoundDecl, Method);
10389          if (Arg0.isInvalid())
10390            return ExprError();
10391          Args[0] = Arg0.takeAs<Expr>();
10392          Args[1] = RHS = Arg1.takeAs<Expr>();
10393        } else {
10394          // Convert the arguments.
10395          ExprResult Arg0 = PerformCopyInitialization(
10396            InitializedEntity::InitializeParameter(Context,
10397                                                   FnDecl->getParamDecl(0)),
10398            SourceLocation(), Owned(Args[0]));
10399          if (Arg0.isInvalid())
10400            return ExprError();
10401
10402          ExprResult Arg1 =
10403            PerformCopyInitialization(
10404              InitializedEntity::InitializeParameter(Context,
10405                                                     FnDecl->getParamDecl(1)),
10406              SourceLocation(), Owned(Args[1]));
10407          if (Arg1.isInvalid())
10408            return ExprError();
10409          Args[0] = LHS = Arg0.takeAs<Expr>();
10410          Args[1] = RHS = Arg1.takeAs<Expr>();
10411        }
10412
10413        // Determine the result type.
10414        QualType ResultTy = FnDecl->getResultType();
10415        ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10416        ResultTy = ResultTy.getNonLValueExprType(Context);
10417
10418        // Build the actual expression node.
10419        ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10420                                                  Best->FoundDecl,
10421                                                  HadMultipleCandidates, OpLoc);
10422        if (FnExpr.isInvalid())
10423          return ExprError();
10424
10425        CXXOperatorCallExpr *TheCall =
10426          new (Context) CXXOperatorCallExpr(Context, Op, FnExpr.take(),
10427                                            Args, ResultTy, VK, OpLoc,
10428                                            FPFeatures.fp_contract);
10429
10430        if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall,
10431                                FnDecl))
10432          return ExprError();
10433
10434        ArrayRef<const Expr *> ArgsArray(Args, 2);
10435        // Cut off the implicit 'this'.
10436        if (isa<CXXMethodDecl>(FnDecl))
10437          ArgsArray = ArgsArray.slice(1);
10438        checkCall(FnDecl, ArgsArray, 0, isa<CXXMethodDecl>(FnDecl), OpLoc,
10439                  TheCall->getSourceRange(), VariadicDoesNotApply);
10440
10441        return MaybeBindToTemporary(TheCall);
10442      } else {
10443        // We matched a built-in operator. Convert the arguments, then
10444        // break out so that we will build the appropriate built-in
10445        // operator node.
10446        ExprResult ArgsRes0 =
10447          PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10448                                    Best->Conversions[0], AA_Passing);
10449        if (ArgsRes0.isInvalid())
10450          return ExprError();
10451        Args[0] = ArgsRes0.take();
10452
10453        ExprResult ArgsRes1 =
10454          PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10455                                    Best->Conversions[1], AA_Passing);
10456        if (ArgsRes1.isInvalid())
10457          return ExprError();
10458        Args[1] = ArgsRes1.take();
10459        break;
10460      }
10461    }
10462
10463    case OR_No_Viable_Function: {
10464      // C++ [over.match.oper]p9:
10465      //   If the operator is the operator , [...] and there are no
10466      //   viable functions, then the operator is assumed to be the
10467      //   built-in operator and interpreted according to clause 5.
10468      if (Opc == BO_Comma)
10469        break;
10470
10471      // For class as left operand for assignment or compound assigment
10472      // operator do not fall through to handling in built-in, but report that
10473      // no overloaded assignment operator found
10474      ExprResult Result = ExprError();
10475      if (Args[0]->getType()->isRecordType() &&
10476          Opc >= BO_Assign && Opc <= BO_OrAssign) {
10477        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
10478             << BinaryOperator::getOpcodeStr(Opc)
10479             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10480      } else {
10481        // This is an erroneous use of an operator which can be overloaded by
10482        // a non-member function. Check for non-member operators which were
10483        // defined too late to be candidates.
10484        if (DiagnoseTwoPhaseOperatorLookup(*this, Op, OpLoc, Args))
10485          // FIXME: Recover by calling the found function.
10486          return ExprError();
10487
10488        // No viable function; try to create a built-in operation, which will
10489        // produce an error. Then, show the non-viable candidates.
10490        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10491      }
10492      assert(Result.isInvalid() &&
10493             "C++ binary operator overloading is missing candidates!");
10494      if (Result.isInvalid())
10495        CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10496                                    BinaryOperator::getOpcodeStr(Opc), OpLoc);
10497      return Result;
10498    }
10499
10500    case OR_Ambiguous:
10501      Diag(OpLoc,  diag::err_ovl_ambiguous_oper_binary)
10502          << BinaryOperator::getOpcodeStr(Opc)
10503          << Args[0]->getType() << Args[1]->getType()
10504          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10505      CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10506                                  BinaryOperator::getOpcodeStr(Opc), OpLoc);
10507      return ExprError();
10508
10509    case OR_Deleted:
10510      if (isImplicitlyDeleted(Best->Function)) {
10511        CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
10512        Diag(OpLoc, diag::err_ovl_deleted_special_oper)
10513          << Context.getRecordType(Method->getParent())
10514          << getSpecialMember(Method);
10515
10516        // The user probably meant to call this special member. Just
10517        // explain why it's deleted.
10518        NoteDeletedFunction(Method);
10519        return ExprError();
10520      } else {
10521        Diag(OpLoc, diag::err_ovl_deleted_oper)
10522          << Best->Function->isDeleted()
10523          << BinaryOperator::getOpcodeStr(Opc)
10524          << getDeletedOrUnavailableSuffix(Best->Function)
10525          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10526      }
10527      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10528                                  BinaryOperator::getOpcodeStr(Opc), OpLoc);
10529      return ExprError();
10530  }
10531
10532  // We matched a built-in operator; build it.
10533  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
10534}
10535
10536ExprResult
10537Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
10538                                         SourceLocation RLoc,
10539                                         Expr *Base, Expr *Idx) {
10540  Expr *Args[2] = { Base, Idx };
10541  DeclarationName OpName =
10542      Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
10543
10544  // If either side is type-dependent, create an appropriate dependent
10545  // expression.
10546  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
10547
10548    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
10549    // CHECKME: no 'operator' keyword?
10550    DeclarationNameInfo OpNameInfo(OpName, LLoc);
10551    OpNameInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10552    UnresolvedLookupExpr *Fn
10553      = UnresolvedLookupExpr::Create(Context, NamingClass,
10554                                     NestedNameSpecifierLoc(), OpNameInfo,
10555                                     /*ADL*/ true, /*Overloaded*/ false,
10556                                     UnresolvedSetIterator(),
10557                                     UnresolvedSetIterator());
10558    // Can't add any actual overloads yet
10559
10560    return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
10561                                                   Args,
10562                                                   Context.DependentTy,
10563                                                   VK_RValue,
10564                                                   RLoc, false));
10565  }
10566
10567  // Handle placeholders on both operands.
10568  if (checkPlaceholderForOverload(*this, Args[0]))
10569    return ExprError();
10570  if (checkPlaceholderForOverload(*this, Args[1]))
10571    return ExprError();
10572
10573  // Build an empty overload set.
10574  OverloadCandidateSet CandidateSet(LLoc);
10575
10576  // Subscript can only be overloaded as a member function.
10577
10578  // Add operator candidates that are member functions.
10579  AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10580
10581  // Add builtin operator candidates.
10582  AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
10583
10584  bool HadMultipleCandidates = (CandidateSet.size() > 1);
10585
10586  // Perform overload resolution.
10587  OverloadCandidateSet::iterator Best;
10588  switch (CandidateSet.BestViableFunction(*this, LLoc, Best)) {
10589    case OR_Success: {
10590      // We found a built-in operator or an overloaded operator.
10591      FunctionDecl *FnDecl = Best->Function;
10592
10593      if (FnDecl) {
10594        // We matched an overloaded operator. Build a call to that
10595        // operator.
10596
10597        CheckMemberOperatorAccess(LLoc, Args[0], Args[1], Best->FoundDecl);
10598
10599        // Convert the arguments.
10600        CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
10601        ExprResult Arg0 =
10602          PerformObjectArgumentInitialization(Args[0], /*Qualifier=*/0,
10603                                              Best->FoundDecl, Method);
10604        if (Arg0.isInvalid())
10605          return ExprError();
10606        Args[0] = Arg0.take();
10607
10608        // Convert the arguments.
10609        ExprResult InputInit
10610          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
10611                                                      Context,
10612                                                      FnDecl->getParamDecl(0)),
10613                                      SourceLocation(),
10614                                      Owned(Args[1]));
10615        if (InputInit.isInvalid())
10616          return ExprError();
10617
10618        Args[1] = InputInit.takeAs<Expr>();
10619
10620        // Determine the result type
10621        QualType ResultTy = FnDecl->getResultType();
10622        ExprValueKind VK = Expr::getValueKindForType(ResultTy);
10623        ResultTy = ResultTy.getNonLValueExprType(Context);
10624
10625        // Build the actual expression node.
10626        DeclarationNameInfo OpLocInfo(OpName, LLoc);
10627        OpLocInfo.setCXXOperatorNameRange(SourceRange(LLoc, RLoc));
10628        ExprResult FnExpr = CreateFunctionRefExpr(*this, FnDecl,
10629                                                  Best->FoundDecl,
10630                                                  HadMultipleCandidates,
10631                                                  OpLocInfo.getLoc(),
10632                                                  OpLocInfo.getInfo());
10633        if (FnExpr.isInvalid())
10634          return ExprError();
10635
10636        CXXOperatorCallExpr *TheCall =
10637          new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
10638                                            FnExpr.take(), Args,
10639                                            ResultTy, VK, RLoc,
10640                                            false);
10641
10642        if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall,
10643                                FnDecl))
10644          return ExprError();
10645
10646        return MaybeBindToTemporary(TheCall);
10647      } else {
10648        // We matched a built-in operator. Convert the arguments, then
10649        // break out so that we will build the appropriate built-in
10650        // operator node.
10651        ExprResult ArgsRes0 =
10652          PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
10653                                    Best->Conversions[0], AA_Passing);
10654        if (ArgsRes0.isInvalid())
10655          return ExprError();
10656        Args[0] = ArgsRes0.take();
10657
10658        ExprResult ArgsRes1 =
10659          PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
10660                                    Best->Conversions[1], AA_Passing);
10661        if (ArgsRes1.isInvalid())
10662          return ExprError();
10663        Args[1] = ArgsRes1.take();
10664
10665        break;
10666      }
10667    }
10668
10669    case OR_No_Viable_Function: {
10670      if (CandidateSet.empty())
10671        Diag(LLoc, diag::err_ovl_no_oper)
10672          << Args[0]->getType() << /*subscript*/ 0
10673          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10674      else
10675        Diag(LLoc, diag::err_ovl_no_viable_subscript)
10676          << Args[0]->getType()
10677          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10678      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10679                                  "[]", LLoc);
10680      return ExprError();
10681    }
10682
10683    case OR_Ambiguous:
10684      Diag(LLoc,  diag::err_ovl_ambiguous_oper_binary)
10685          << "[]"
10686          << Args[0]->getType() << Args[1]->getType()
10687          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10688      CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args,
10689                                  "[]", LLoc);
10690      return ExprError();
10691
10692    case OR_Deleted:
10693      Diag(LLoc, diag::err_ovl_deleted_oper)
10694        << Best->Function->isDeleted() << "[]"
10695        << getDeletedOrUnavailableSuffix(Best->Function)
10696        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
10697      CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args,
10698                                  "[]", LLoc);
10699      return ExprError();
10700    }
10701
10702  // We matched a built-in operator; build it.
10703  return CreateBuiltinArraySubscriptExpr(Args[0], LLoc, Args[1], RLoc);
10704}
10705
10706/// BuildCallToMemberFunction - Build a call to a member
10707/// function. MemExpr is the expression that refers to the member
10708/// function (and includes the object parameter), Args/NumArgs are the
10709/// arguments to the function call (not including the object
10710/// parameter). The caller needs to validate that the member
10711/// expression refers to a non-static member function or an overloaded
10712/// member function.
10713ExprResult
10714Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
10715                                SourceLocation LParenLoc, Expr **Args,
10716                                unsigned NumArgs, SourceLocation RParenLoc) {
10717  assert(MemExprE->getType() == Context.BoundMemberTy ||
10718         MemExprE->getType() == Context.OverloadTy);
10719
10720  // Dig out the member expression. This holds both the object
10721  // argument and the member function we're referring to.
10722  Expr *NakedMemExpr = MemExprE->IgnoreParens();
10723
10724  // Determine whether this is a call to a pointer-to-member function.
10725  if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {
10726    assert(op->getType() == Context.BoundMemberTy);
10727    assert(op->getOpcode() == BO_PtrMemD || op->getOpcode() == BO_PtrMemI);
10728
10729    QualType fnType =
10730      op->getRHS()->getType()->castAs<MemberPointerType>()->getPointeeType();
10731
10732    const FunctionProtoType *proto = fnType->castAs<FunctionProtoType>();
10733    QualType resultType = proto->getCallResultType(Context);
10734    ExprValueKind valueKind = Expr::getValueKindForType(proto->getResultType());
10735
10736    // Check that the object type isn't more qualified than the
10737    // member function we're calling.
10738    Qualifiers funcQuals = Qualifiers::fromCVRMask(proto->getTypeQuals());
10739
10740    QualType objectType = op->getLHS()->getType();
10741    if (op->getOpcode() == BO_PtrMemI)
10742      objectType = objectType->castAs<PointerType>()->getPointeeType();
10743    Qualifiers objectQuals = objectType.getQualifiers();
10744
10745    Qualifiers difference = objectQuals - funcQuals;
10746    difference.removeObjCGCAttr();
10747    difference.removeAddressSpace();
10748    if (difference) {
10749      std::string qualsString = difference.getAsString();
10750      Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals)
10751        << fnType.getUnqualifiedType()
10752        << qualsString
10753        << (qualsString.find(' ') == std::string::npos ? 1 : 2);
10754    }
10755
10756    CXXMemberCallExpr *call
10757      = new (Context) CXXMemberCallExpr(Context, MemExprE,
10758                                        llvm::makeArrayRef(Args, NumArgs),
10759                                        resultType, valueKind, RParenLoc);
10760
10761    if (CheckCallReturnType(proto->getResultType(),
10762                            op->getRHS()->getLocStart(),
10763                            call, 0))
10764      return ExprError();
10765
10766    if (ConvertArgumentsForCall(call, op, 0, proto, Args, NumArgs, RParenLoc))
10767      return ExprError();
10768
10769    return MaybeBindToTemporary(call);
10770  }
10771
10772  UnbridgedCastsSet UnbridgedCasts;
10773  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10774    return ExprError();
10775
10776  MemberExpr *MemExpr;
10777  CXXMethodDecl *Method = 0;
10778  DeclAccessPair FoundDecl = DeclAccessPair::make(0, AS_public);
10779  NestedNameSpecifier *Qualifier = 0;
10780  if (isa<MemberExpr>(NakedMemExpr)) {
10781    MemExpr = cast<MemberExpr>(NakedMemExpr);
10782    Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
10783    FoundDecl = MemExpr->getFoundDecl();
10784    Qualifier = MemExpr->getQualifier();
10785    UnbridgedCasts.restore();
10786  } else {
10787    UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
10788    Qualifier = UnresExpr->getQualifier();
10789
10790    QualType ObjectType = UnresExpr->getBaseType();
10791    Expr::Classification ObjectClassification
10792      = UnresExpr->isArrow()? Expr::Classification::makeSimpleLValue()
10793                            : UnresExpr->getBase()->Classify(Context);
10794
10795    // Add overload candidates
10796    OverloadCandidateSet CandidateSet(UnresExpr->getMemberLoc());
10797
10798    // FIXME: avoid copy.
10799    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
10800    if (UnresExpr->hasExplicitTemplateArgs()) {
10801      UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
10802      TemplateArgs = &TemplateArgsBuffer;
10803    }
10804
10805    for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
10806           E = UnresExpr->decls_end(); I != E; ++I) {
10807
10808      NamedDecl *Func = *I;
10809      CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
10810      if (isa<UsingShadowDecl>(Func))
10811        Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
10812
10813
10814      // Microsoft supports direct constructor calls.
10815      if (getLangOpts().MicrosoftExt && isa<CXXConstructorDecl>(Func)) {
10816        AddOverloadCandidate(cast<CXXConstructorDecl>(Func), I.getPair(),
10817                             llvm::makeArrayRef(Args, NumArgs), CandidateSet);
10818      } else if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
10819        // If explicit template arguments were provided, we can't call a
10820        // non-template member function.
10821        if (TemplateArgs)
10822          continue;
10823
10824        AddMethodCandidate(Method, I.getPair(), ActingDC, ObjectType,
10825                           ObjectClassification,
10826                           llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10827                           /*SuppressUserConversions=*/false);
10828      } else {
10829        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
10830                                   I.getPair(), ActingDC, TemplateArgs,
10831                                   ObjectType,  ObjectClassification,
10832                                   llvm::makeArrayRef(Args, NumArgs),
10833                                   CandidateSet,
10834                                   /*SuppressUsedConversions=*/false);
10835      }
10836    }
10837
10838    DeclarationName DeclName = UnresExpr->getMemberName();
10839
10840    UnbridgedCasts.restore();
10841
10842    OverloadCandidateSet::iterator Best;
10843    switch (CandidateSet.BestViableFunction(*this, UnresExpr->getLocStart(),
10844                                            Best)) {
10845    case OR_Success:
10846      Method = cast<CXXMethodDecl>(Best->Function);
10847      FoundDecl = Best->FoundDecl;
10848      CheckUnresolvedMemberAccess(UnresExpr, Best->FoundDecl);
10849      DiagnoseUseOfDecl(Best->FoundDecl, UnresExpr->getNameLoc());
10850      break;
10851
10852    case OR_No_Viable_Function:
10853      Diag(UnresExpr->getMemberLoc(),
10854           diag::err_ovl_no_viable_member_function_in_call)
10855        << DeclName << MemExprE->getSourceRange();
10856      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10857                                  llvm::makeArrayRef(Args, NumArgs));
10858      // FIXME: Leaking incoming expressions!
10859      return ExprError();
10860
10861    case OR_Ambiguous:
10862      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
10863        << DeclName << MemExprE->getSourceRange();
10864      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10865                                  llvm::makeArrayRef(Args, NumArgs));
10866      // FIXME: Leaking incoming expressions!
10867      return ExprError();
10868
10869    case OR_Deleted:
10870      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
10871        << Best->Function->isDeleted()
10872        << DeclName
10873        << getDeletedOrUnavailableSuffix(Best->Function)
10874        << MemExprE->getSourceRange();
10875      CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
10876                                  llvm::makeArrayRef(Args, NumArgs));
10877      // FIXME: Leaking incoming expressions!
10878      return ExprError();
10879    }
10880
10881    MemExprE = FixOverloadedFunctionReference(MemExprE, FoundDecl, Method);
10882
10883    // If overload resolution picked a static member, build a
10884    // non-member call based on that function.
10885    if (Method->isStatic()) {
10886      return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
10887                                   Args, NumArgs, RParenLoc);
10888    }
10889
10890    MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
10891  }
10892
10893  QualType ResultType = Method->getResultType();
10894  ExprValueKind VK = Expr::getValueKindForType(ResultType);
10895  ResultType = ResultType.getNonLValueExprType(Context);
10896
10897  assert(Method && "Member call to something that isn't a method?");
10898  CXXMemberCallExpr *TheCall =
10899    new (Context) CXXMemberCallExpr(Context, MemExprE,
10900                                    llvm::makeArrayRef(Args, NumArgs),
10901                                    ResultType, VK, RParenLoc);
10902
10903  // Check for a valid return type.
10904  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
10905                          TheCall, Method))
10906    return ExprError();
10907
10908  // Convert the object argument (for a non-static member function call).
10909  // We only need to do this if there was actually an overload; otherwise
10910  // it was done at lookup.
10911  if (!Method->isStatic()) {
10912    ExprResult ObjectArg =
10913      PerformObjectArgumentInitialization(MemExpr->getBase(), Qualifier,
10914                                          FoundDecl, Method);
10915    if (ObjectArg.isInvalid())
10916      return ExprError();
10917    MemExpr->setBase(ObjectArg.take());
10918  }
10919
10920  // Convert the rest of the arguments
10921  const FunctionProtoType *Proto =
10922    Method->getType()->getAs<FunctionProtoType>();
10923  if (ConvertArgumentsForCall(TheCall, MemExpr, Method, Proto, Args, NumArgs,
10924                              RParenLoc))
10925    return ExprError();
10926
10927  DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
10928
10929  if (CheckFunctionCall(Method, TheCall, Proto))
10930    return ExprError();
10931
10932  if ((isa<CXXConstructorDecl>(CurContext) ||
10933       isa<CXXDestructorDecl>(CurContext)) &&
10934      TheCall->getMethodDecl()->isPure()) {
10935    const CXXMethodDecl *MD = TheCall->getMethodDecl();
10936
10937    if (isa<CXXThisExpr>(MemExpr->getBase()->IgnoreParenCasts())) {
10938      Diag(MemExpr->getLocStart(),
10939           diag::warn_call_to_pure_virtual_member_function_from_ctor_dtor)
10940        << MD->getDeclName() << isa<CXXDestructorDecl>(CurContext)
10941        << MD->getParent()->getDeclName();
10942
10943      Diag(MD->getLocStart(), diag::note_previous_decl) << MD->getDeclName();
10944    }
10945  }
10946  return MaybeBindToTemporary(TheCall);
10947}
10948
10949/// BuildCallToObjectOfClassType - Build a call to an object of class
10950/// type (C++ [over.call.object]), which can end up invoking an
10951/// overloaded function call operator (@c operator()) or performing a
10952/// user-defined conversion on the object argument.
10953ExprResult
10954Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
10955                                   SourceLocation LParenLoc,
10956                                   Expr **Args, unsigned NumArgs,
10957                                   SourceLocation RParenLoc) {
10958  if (checkPlaceholderForOverload(*this, Obj))
10959    return ExprError();
10960  ExprResult Object = Owned(Obj);
10961
10962  UnbridgedCastsSet UnbridgedCasts;
10963  if (checkArgPlaceholdersForOverload(*this, Args, NumArgs, UnbridgedCasts))
10964    return ExprError();
10965
10966  assert(Object.get()->getType()->isRecordType() && "Requires object type argument");
10967  const RecordType *Record = Object.get()->getType()->getAs<RecordType>();
10968
10969  // C++ [over.call.object]p1:
10970  //  If the primary-expression E in the function call syntax
10971  //  evaluates to a class object of type "cv T", then the set of
10972  //  candidate functions includes at least the function call
10973  //  operators of T. The function call operators of T are obtained by
10974  //  ordinary lookup of the name operator() in the context of
10975  //  (E).operator().
10976  OverloadCandidateSet CandidateSet(LParenLoc);
10977  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
10978
10979  if (RequireCompleteType(LParenLoc, Object.get()->getType(),
10980                          diag::err_incomplete_object_call, Object.get()))
10981    return true;
10982
10983  LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
10984  LookupQualifiedName(R, Record->getDecl());
10985  R.suppressDiagnostics();
10986
10987  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
10988       Oper != OperEnd; ++Oper) {
10989    AddMethodCandidate(Oper.getPair(), Object.get()->getType(),
10990                       Object.get()->Classify(Context),
10991                       llvm::makeArrayRef(Args, NumArgs), CandidateSet,
10992                       /*SuppressUserConversions=*/ false);
10993  }
10994
10995  // C++ [over.call.object]p2:
10996  //   In addition, for each (non-explicit in C++0x) conversion function
10997  //   declared in T of the form
10998  //
10999  //        operator conversion-type-id () cv-qualifier;
11000  //
11001  //   where cv-qualifier is the same cv-qualification as, or a
11002  //   greater cv-qualification than, cv, and where conversion-type-id
11003  //   denotes the type "pointer to function of (P1,...,Pn) returning
11004  //   R", or the type "reference to pointer to function of
11005  //   (P1,...,Pn) returning R", or the type "reference to function
11006  //   of (P1,...,Pn) returning R", a surrogate call function [...]
11007  //   is also considered as a candidate function. Similarly,
11008  //   surrogate call functions are added to the set of candidate
11009  //   functions for each conversion function declared in an
11010  //   accessible base class provided the function is not hidden
11011  //   within T by another intervening declaration.
11012  std::pair<CXXRecordDecl::conversion_iterator,
11013            CXXRecordDecl::conversion_iterator> Conversions
11014    = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
11015  for (CXXRecordDecl::conversion_iterator
11016         I = Conversions.first, E = Conversions.second; I != E; ++I) {
11017    NamedDecl *D = *I;
11018    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
11019    if (isa<UsingShadowDecl>(D))
11020      D = cast<UsingShadowDecl>(D)->getTargetDecl();
11021
11022    // Skip over templated conversion functions; they aren't
11023    // surrogates.
11024    if (isa<FunctionTemplateDecl>(D))
11025      continue;
11026
11027    CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
11028    if (!Conv->isExplicit()) {
11029      // Strip the reference type (if any) and then the pointer type (if
11030      // any) to get down to what might be a function type.
11031      QualType ConvType = Conv->getConversionType().getNonReferenceType();
11032      if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
11033        ConvType = ConvPtrType->getPointeeType();
11034
11035      if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
11036      {
11037        AddSurrogateCandidate(Conv, I.getPair(), ActingContext, Proto,
11038                              Object.get(), llvm::makeArrayRef(Args, NumArgs),
11039                              CandidateSet);
11040      }
11041    }
11042  }
11043
11044  bool HadMultipleCandidates = (CandidateSet.size() > 1);
11045
11046  // Perform overload resolution.
11047  OverloadCandidateSet::iterator Best;
11048  switch (CandidateSet.BestViableFunction(*this, Object.get()->getLocStart(),
11049                             Best)) {
11050  case OR_Success:
11051    // Overload resolution succeeded; we'll build the appropriate call
11052    // below.
11053    break;
11054
11055  case OR_No_Viable_Function:
11056    if (CandidateSet.empty())
11057      Diag(Object.get()->getLocStart(), diag::err_ovl_no_oper)
11058        << Object.get()->getType() << /*call*/ 1
11059        << Object.get()->getSourceRange();
11060    else
11061      Diag(Object.get()->getLocStart(),
11062           diag::err_ovl_no_viable_object_call)
11063        << Object.get()->getType() << Object.get()->getSourceRange();
11064    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
11065                                llvm::makeArrayRef(Args, NumArgs));
11066    break;
11067
11068  case OR_Ambiguous:
11069    Diag(Object.get()->getLocStart(),
11070         diag::err_ovl_ambiguous_object_call)
11071      << Object.get()->getType() << Object.get()->getSourceRange();
11072    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
11073                                llvm::makeArrayRef(Args, NumArgs));
11074    break;
11075
11076  case OR_Deleted:
11077    Diag(Object.get()->getLocStart(),
11078         diag::err_ovl_deleted_object_call)
11079      << Best->Function->isDeleted()
11080      << Object.get()->getType()
11081      << getDeletedOrUnavailableSuffix(Best->Function)
11082      << Object.get()->getSourceRange();
11083    CandidateSet.NoteCandidates(*this, OCD_AllCandidates,
11084                                llvm::makeArrayRef(Args, NumArgs));
11085    break;
11086  }
11087
11088  if (Best == CandidateSet.end())
11089    return true;
11090
11091  UnbridgedCasts.restore();
11092
11093  if (Best->Function == 0) {
11094    // Since there is no function declaration, this is one of the
11095    // surrogate candidates. Dig out the conversion function.
11096    CXXConversionDecl *Conv
11097      = cast<CXXConversionDecl>(
11098                         Best->Conversions[0].UserDefined.ConversionFunction);
11099
11100    CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11101    DiagnoseUseOfDecl(Best->FoundDecl, LParenLoc);
11102
11103    // We selected one of the surrogate functions that converts the
11104    // object parameter to a function pointer. Perform the conversion
11105    // on the object argument, then let ActOnCallExpr finish the job.
11106
11107    // Create an implicit member expr to refer to the conversion operator.
11108    // and then call it.
11109    ExprResult Call = BuildCXXMemberCallExpr(Object.get(), Best->FoundDecl,
11110                                             Conv, HadMultipleCandidates);
11111    if (Call.isInvalid())
11112      return ExprError();
11113    // Record usage of conversion in an implicit cast.
11114    Call = Owned(ImplicitCastExpr::Create(Context, Call.get()->getType(),
11115                                          CK_UserDefinedConversion,
11116                                          Call.get(), 0, VK_RValue));
11117
11118    return ActOnCallExpr(S, Call.get(), LParenLoc, MultiExprArg(Args, NumArgs),
11119                         RParenLoc);
11120  }
11121
11122  CheckMemberOperatorAccess(LParenLoc, Object.get(), 0, Best->FoundDecl);
11123
11124  // We found an overloaded operator(). Build a CXXOperatorCallExpr
11125  // that calls this method, using Object for the implicit object
11126  // parameter and passing along the remaining arguments.
11127  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11128
11129  // An error diagnostic has already been printed when parsing the declaration.
11130  if (Method->isInvalidDecl())
11131    return ExprError();
11132
11133  const FunctionProtoType *Proto =
11134    Method->getType()->getAs<FunctionProtoType>();
11135
11136  unsigned NumArgsInProto = Proto->getNumArgs();
11137  unsigned NumArgsToCheck = NumArgs;
11138
11139  // Build the full argument list for the method call (the
11140  // implicit object parameter is placed at the beginning of the
11141  // list).
11142  Expr **MethodArgs;
11143  if (NumArgs < NumArgsInProto) {
11144    NumArgsToCheck = NumArgsInProto;
11145    MethodArgs = new Expr*[NumArgsInProto + 1];
11146  } else {
11147    MethodArgs = new Expr*[NumArgs + 1];
11148  }
11149  MethodArgs[0] = Object.get();
11150  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
11151    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
11152
11153  DeclarationNameInfo OpLocInfo(
11154               Context.DeclarationNames.getCXXOperatorName(OO_Call), LParenLoc);
11155  OpLocInfo.setCXXOperatorNameRange(SourceRange(LParenLoc, RParenLoc));
11156  ExprResult NewFn = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11157                                           HadMultipleCandidates,
11158                                           OpLocInfo.getLoc(),
11159                                           OpLocInfo.getInfo());
11160  if (NewFn.isInvalid())
11161    return true;
11162
11163  // Once we've built TheCall, all of the expressions are properly
11164  // owned.
11165  QualType ResultTy = Method->getResultType();
11166  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11167  ResultTy = ResultTy.getNonLValueExprType(Context);
11168
11169  CXXOperatorCallExpr *TheCall =
11170    new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn.take(),
11171                                      llvm::makeArrayRef(MethodArgs, NumArgs+1),
11172                                      ResultTy, VK, RParenLoc, false);
11173  delete [] MethodArgs;
11174
11175  if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall,
11176                          Method))
11177    return true;
11178
11179  // We may have default arguments. If so, we need to allocate more
11180  // slots in the call for them.
11181  if (NumArgs < NumArgsInProto)
11182    TheCall->setNumArgs(Context, NumArgsInProto + 1);
11183  else if (NumArgs > NumArgsInProto)
11184    NumArgsToCheck = NumArgsInProto;
11185
11186  bool IsError = false;
11187
11188  // Initialize the implicit object parameter.
11189  ExprResult ObjRes =
11190    PerformObjectArgumentInitialization(Object.get(), /*Qualifier=*/0,
11191                                        Best->FoundDecl, Method);
11192  if (ObjRes.isInvalid())
11193    IsError = true;
11194  else
11195    Object = ObjRes;
11196  TheCall->setArg(0, Object.take());
11197
11198  // Check the argument types.
11199  for (unsigned i = 0; i != NumArgsToCheck; i++) {
11200    Expr *Arg;
11201    if (i < NumArgs) {
11202      Arg = Args[i];
11203
11204      // Pass the argument.
11205
11206      ExprResult InputInit
11207        = PerformCopyInitialization(InitializedEntity::InitializeParameter(
11208                                                    Context,
11209                                                    Method->getParamDecl(i)),
11210                                    SourceLocation(), Arg);
11211
11212      IsError |= InputInit.isInvalid();
11213      Arg = InputInit.takeAs<Expr>();
11214    } else {
11215      ExprResult DefArg
11216        = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
11217      if (DefArg.isInvalid()) {
11218        IsError = true;
11219        break;
11220      }
11221
11222      Arg = DefArg.takeAs<Expr>();
11223    }
11224
11225    TheCall->setArg(i + 1, Arg);
11226  }
11227
11228  // If this is a variadic call, handle args passed through "...".
11229  if (Proto->isVariadic()) {
11230    // Promote the arguments (C99 6.5.2.2p7).
11231    for (unsigned i = NumArgsInProto; i < NumArgs; i++) {
11232      ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], VariadicMethod, 0);
11233      IsError |= Arg.isInvalid();
11234      TheCall->setArg(i + 1, Arg.take());
11235    }
11236  }
11237
11238  if (IsError) return true;
11239
11240  DiagnoseSentinelCalls(Method, LParenLoc, Args, NumArgs);
11241
11242  if (CheckFunctionCall(Method, TheCall, Proto))
11243    return true;
11244
11245  return MaybeBindToTemporary(TheCall);
11246}
11247
11248/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
11249///  (if one exists), where @c Base is an expression of class type and
11250/// @c Member is the name of the member we're trying to find.
11251ExprResult
11252Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
11253  assert(Base->getType()->isRecordType() &&
11254         "left-hand side must have class type");
11255
11256  if (checkPlaceholderForOverload(*this, Base))
11257    return ExprError();
11258
11259  SourceLocation Loc = Base->getExprLoc();
11260
11261  // C++ [over.ref]p1:
11262  //
11263  //   [...] An expression x->m is interpreted as (x.operator->())->m
11264  //   for a class object x of type T if T::operator->() exists and if
11265  //   the operator is selected as the best match function by the
11266  //   overload resolution mechanism (13.3).
11267  DeclarationName OpName =
11268    Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
11269  OverloadCandidateSet CandidateSet(Loc);
11270  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
11271
11272  if (RequireCompleteType(Loc, Base->getType(),
11273                          diag::err_typecheck_incomplete_tag, Base))
11274    return ExprError();
11275
11276  LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
11277  LookupQualifiedName(R, BaseRecord->getDecl());
11278  R.suppressDiagnostics();
11279
11280  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
11281       Oper != OperEnd; ++Oper) {
11282    AddMethodCandidate(Oper.getPair(), Base->getType(), Base->Classify(Context),
11283                       ArrayRef<Expr *>(), CandidateSet,
11284                       /*SuppressUserConversions=*/false);
11285  }
11286
11287  bool HadMultipleCandidates = (CandidateSet.size() > 1);
11288
11289  // Perform overload resolution.
11290  OverloadCandidateSet::iterator Best;
11291  switch (CandidateSet.BestViableFunction(*this, OpLoc, Best)) {
11292  case OR_Success:
11293    // Overload resolution succeeded; we'll build the call below.
11294    break;
11295
11296  case OR_No_Viable_Function:
11297    if (CandidateSet.empty())
11298      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
11299        << Base->getType() << Base->getSourceRange();
11300    else
11301      Diag(OpLoc, diag::err_ovl_no_viable_oper)
11302        << "operator->" << Base->getSourceRange();
11303    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11304    return ExprError();
11305
11306  case OR_Ambiguous:
11307    Diag(OpLoc,  diag::err_ovl_ambiguous_oper_unary)
11308      << "->" << Base->getType() << Base->getSourceRange();
11309    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Base);
11310    return ExprError();
11311
11312  case OR_Deleted:
11313    Diag(OpLoc,  diag::err_ovl_deleted_oper)
11314      << Best->Function->isDeleted()
11315      << "->"
11316      << getDeletedOrUnavailableSuffix(Best->Function)
11317      << Base->getSourceRange();
11318    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Base);
11319    return ExprError();
11320  }
11321
11322  CheckMemberOperatorAccess(OpLoc, Base, 0, Best->FoundDecl);
11323
11324  // Convert the object parameter.
11325  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
11326  ExprResult BaseResult =
11327    PerformObjectArgumentInitialization(Base, /*Qualifier=*/0,
11328                                        Best->FoundDecl, Method);
11329  if (BaseResult.isInvalid())
11330    return ExprError();
11331  Base = BaseResult.take();
11332
11333  // Build the operator call.
11334  ExprResult FnExpr = CreateFunctionRefExpr(*this, Method, Best->FoundDecl,
11335                                            HadMultipleCandidates, OpLoc);
11336  if (FnExpr.isInvalid())
11337    return ExprError();
11338
11339  QualType ResultTy = Method->getResultType();
11340  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11341  ResultTy = ResultTy.getNonLValueExprType(Context);
11342  CXXOperatorCallExpr *TheCall =
11343    new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr.take(),
11344                                      Base, ResultTy, VK, OpLoc, false);
11345
11346  if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
11347                          Method))
11348          return ExprError();
11349
11350  return MaybeBindToTemporary(TheCall);
11351}
11352
11353/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to
11354/// a literal operator described by the provided lookup results.
11355ExprResult Sema::BuildLiteralOperatorCall(LookupResult &R,
11356                                          DeclarationNameInfo &SuffixInfo,
11357                                          ArrayRef<Expr*> Args,
11358                                          SourceLocation LitEndLoc,
11359                                       TemplateArgumentListInfo *TemplateArgs) {
11360  SourceLocation UDSuffixLoc = SuffixInfo.getCXXLiteralOperatorNameLoc();
11361
11362  OverloadCandidateSet CandidateSet(UDSuffixLoc);
11363  AddFunctionCandidates(R.asUnresolvedSet(), Args, CandidateSet, true,
11364                        TemplateArgs);
11365
11366  bool HadMultipleCandidates = (CandidateSet.size() > 1);
11367
11368  // Perform overload resolution. This will usually be trivial, but might need
11369  // to perform substitutions for a literal operator template.
11370  OverloadCandidateSet::iterator Best;
11371  switch (CandidateSet.BestViableFunction(*this, UDSuffixLoc, Best)) {
11372  case OR_Success:
11373  case OR_Deleted:
11374    break;
11375
11376  case OR_No_Viable_Function:
11377    Diag(UDSuffixLoc, diag::err_ovl_no_viable_function_in_call)
11378      << R.getLookupName();
11379    CandidateSet.NoteCandidates(*this, OCD_AllCandidates, Args);
11380    return ExprError();
11381
11382  case OR_Ambiguous:
11383    Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();
11384    CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args);
11385    return ExprError();
11386  }
11387
11388  FunctionDecl *FD = Best->Function;
11389  ExprResult Fn = CreateFunctionRefExpr(*this, FD, Best->FoundDecl,
11390                                        HadMultipleCandidates,
11391                                        SuffixInfo.getLoc(),
11392                                        SuffixInfo.getInfo());
11393  if (Fn.isInvalid())
11394    return true;
11395
11396  // Check the argument types. This should almost always be a no-op, except
11397  // that array-to-pointer decay is applied to string literals.
11398  Expr *ConvArgs[2];
11399  for (unsigned ArgIdx = 0; ArgIdx != Args.size(); ++ArgIdx) {
11400    ExprResult InputInit = PerformCopyInitialization(
11401      InitializedEntity::InitializeParameter(Context, FD->getParamDecl(ArgIdx)),
11402      SourceLocation(), Args[ArgIdx]);
11403    if (InputInit.isInvalid())
11404      return true;
11405    ConvArgs[ArgIdx] = InputInit.take();
11406  }
11407
11408  QualType ResultTy = FD->getResultType();
11409  ExprValueKind VK = Expr::getValueKindForType(ResultTy);
11410  ResultTy = ResultTy.getNonLValueExprType(Context);
11411
11412  UserDefinedLiteral *UDL =
11413    new (Context) UserDefinedLiteral(Context, Fn.take(),
11414                                     llvm::makeArrayRef(ConvArgs, Args.size()),
11415                                     ResultTy, VK, LitEndLoc, UDSuffixLoc);
11416
11417  if (CheckCallReturnType(FD->getResultType(), UDSuffixLoc, UDL, FD))
11418    return ExprError();
11419
11420  if (CheckFunctionCall(FD, UDL, NULL))
11421    return ExprError();
11422
11423  return MaybeBindToTemporary(UDL);
11424}
11425
11426/// Build a call to 'begin' or 'end' for a C++11 for-range statement. If the
11427/// given LookupResult is non-empty, it is assumed to describe a member which
11428/// will be invoked. Otherwise, the function will be found via argument
11429/// dependent lookup.
11430/// CallExpr is set to a valid expression and FRS_Success returned on success,
11431/// otherwise CallExpr is set to ExprError() and some non-success value
11432/// is returned.
11433Sema::ForRangeStatus
11434Sema::BuildForRangeBeginEndCall(Scope *S, SourceLocation Loc,
11435                                SourceLocation RangeLoc, VarDecl *Decl,
11436                                BeginEndFunction BEF,
11437                                const DeclarationNameInfo &NameInfo,
11438                                LookupResult &MemberLookup,
11439                                OverloadCandidateSet *CandidateSet,
11440                                Expr *Range, ExprResult *CallExpr) {
11441  CandidateSet->clear();
11442  if (!MemberLookup.empty()) {
11443    ExprResult MemberRef =
11444        BuildMemberReferenceExpr(Range, Range->getType(), Loc,
11445                                 /*IsPtr=*/false, CXXScopeSpec(),
11446                                 /*TemplateKWLoc=*/SourceLocation(),
11447                                 /*FirstQualifierInScope=*/0,
11448                                 MemberLookup,
11449                                 /*TemplateArgs=*/0);
11450    if (MemberRef.isInvalid()) {
11451      *CallExpr = ExprError();
11452      Diag(Range->getLocStart(), diag::note_in_for_range)
11453          << RangeLoc << BEF << Range->getType();
11454      return FRS_DiagnosticIssued;
11455    }
11456    *CallExpr = ActOnCallExpr(S, MemberRef.get(), Loc, MultiExprArg(), Loc, 0);
11457    if (CallExpr->isInvalid()) {
11458      *CallExpr = ExprError();
11459      Diag(Range->getLocStart(), diag::note_in_for_range)
11460          << RangeLoc << BEF << Range->getType();
11461      return FRS_DiagnosticIssued;
11462    }
11463  } else {
11464    UnresolvedSet<0> FoundNames;
11465    UnresolvedLookupExpr *Fn =
11466      UnresolvedLookupExpr::Create(Context, /*NamingClass=*/0,
11467                                   NestedNameSpecifierLoc(), NameInfo,
11468                                   /*NeedsADL=*/true, /*Overloaded=*/false,
11469                                   FoundNames.begin(), FoundNames.end());
11470
11471    bool CandidateSetError = buildOverloadedCallSet(S, Fn, Fn, &Range, 1, Loc,
11472                                                    CandidateSet, CallExpr);
11473    if (CandidateSet->empty() || CandidateSetError) {
11474      *CallExpr = ExprError();
11475      return FRS_NoViableFunction;
11476    }
11477    OverloadCandidateSet::iterator Best;
11478    OverloadingResult OverloadResult =
11479        CandidateSet->BestViableFunction(*this, Fn->getLocStart(), Best);
11480
11481    if (OverloadResult == OR_No_Viable_Function) {
11482      *CallExpr = ExprError();
11483      return FRS_NoViableFunction;
11484    }
11485    *CallExpr = FinishOverloadedCallExpr(*this, S, Fn, Fn, Loc, &Range, 1,
11486                                         Loc, 0, CandidateSet, &Best,
11487                                         OverloadResult,
11488                                         /*AllowTypoCorrection=*/false);
11489    if (CallExpr->isInvalid() || OverloadResult != OR_Success) {
11490      *CallExpr = ExprError();
11491      Diag(Range->getLocStart(), diag::note_in_for_range)
11492          << RangeLoc << BEF << Range->getType();
11493      return FRS_DiagnosticIssued;
11494    }
11495  }
11496  return FRS_Success;
11497}
11498
11499
11500/// FixOverloadedFunctionReference - E is an expression that refers to
11501/// a C++ overloaded function (possibly with some parentheses and
11502/// perhaps a '&' around it). We have resolved the overloaded function
11503/// to the function declaration Fn, so patch up the expression E to
11504/// refer (possibly indirectly) to Fn. Returns the new expr.
11505Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
11506                                           FunctionDecl *Fn) {
11507  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
11508    Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(),
11509                                                   Found, Fn);
11510    if (SubExpr == PE->getSubExpr())
11511      return PE;
11512
11513    return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
11514  }
11515
11516  if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
11517    Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(),
11518                                                   Found, Fn);
11519    assert(Context.hasSameType(ICE->getSubExpr()->getType(),
11520                               SubExpr->getType()) &&
11521           "Implicit cast type cannot be determined from overload");
11522    assert(ICE->path_empty() && "fixing up hierarchy conversion?");
11523    if (SubExpr == ICE->getSubExpr())
11524      return ICE;
11525
11526    return ImplicitCastExpr::Create(Context, ICE->getType(),
11527                                    ICE->getCastKind(),
11528                                    SubExpr, 0,
11529                                    ICE->getValueKind());
11530  }
11531
11532  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
11533    assert(UnOp->getOpcode() == UO_AddrOf &&
11534           "Can only take the address of an overloaded function");
11535    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
11536      if (Method->isStatic()) {
11537        // Do nothing: static member functions aren't any different
11538        // from non-member functions.
11539      } else {
11540        // Fix the sub expression, which really has to be an
11541        // UnresolvedLookupExpr holding an overloaded member function
11542        // or template.
11543        Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11544                                                       Found, Fn);
11545        if (SubExpr == UnOp->getSubExpr())
11546          return UnOp;
11547
11548        assert(isa<DeclRefExpr>(SubExpr)
11549               && "fixed to something other than a decl ref");
11550        assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
11551               && "fixed to a member ref with no nested name qualifier");
11552
11553        // We have taken the address of a pointer to member
11554        // function. Perform the computation here so that we get the
11555        // appropriate pointer to member type.
11556        QualType ClassType
11557          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
11558        QualType MemPtrType
11559          = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
11560
11561        return new (Context) UnaryOperator(SubExpr, UO_AddrOf, MemPtrType,
11562                                           VK_RValue, OK_Ordinary,
11563                                           UnOp->getOperatorLoc());
11564      }
11565    }
11566    Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(),
11567                                                   Found, Fn);
11568    if (SubExpr == UnOp->getSubExpr())
11569      return UnOp;
11570
11571    return new (Context) UnaryOperator(SubExpr, UO_AddrOf,
11572                                     Context.getPointerType(SubExpr->getType()),
11573                                       VK_RValue, OK_Ordinary,
11574                                       UnOp->getOperatorLoc());
11575  }
11576
11577  if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
11578    // FIXME: avoid copy.
11579    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11580    if (ULE->hasExplicitTemplateArgs()) {
11581      ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
11582      TemplateArgs = &TemplateArgsBuffer;
11583    }
11584
11585    DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11586                                           ULE->getQualifierLoc(),
11587                                           ULE->getTemplateKeywordLoc(),
11588                                           Fn,
11589                                           /*enclosing*/ false, // FIXME?
11590                                           ULE->getNameLoc(),
11591                                           Fn->getType(),
11592                                           VK_LValue,
11593                                           Found.getDecl(),
11594                                           TemplateArgs);
11595    MarkDeclRefReferenced(DRE);
11596    DRE->setHadMultipleCandidates(ULE->getNumDecls() > 1);
11597    return DRE;
11598  }
11599
11600  if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
11601    // FIXME: avoid copy.
11602    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
11603    if (MemExpr->hasExplicitTemplateArgs()) {
11604      MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
11605      TemplateArgs = &TemplateArgsBuffer;
11606    }
11607
11608    Expr *Base;
11609
11610    // If we're filling in a static method where we used to have an
11611    // implicit member access, rewrite to a simple decl ref.
11612    if (MemExpr->isImplicitAccess()) {
11613      if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11614        DeclRefExpr *DRE = DeclRefExpr::Create(Context,
11615                                               MemExpr->getQualifierLoc(),
11616                                               MemExpr->getTemplateKeywordLoc(),
11617                                               Fn,
11618                                               /*enclosing*/ false,
11619                                               MemExpr->getMemberLoc(),
11620                                               Fn->getType(),
11621                                               VK_LValue,
11622                                               Found.getDecl(),
11623                                               TemplateArgs);
11624        MarkDeclRefReferenced(DRE);
11625        DRE->setHadMultipleCandidates(MemExpr->getNumDecls() > 1);
11626        return DRE;
11627      } else {
11628        SourceLocation Loc = MemExpr->getMemberLoc();
11629        if (MemExpr->getQualifier())
11630          Loc = MemExpr->getQualifierLoc().getBeginLoc();
11631        CheckCXXThisCapture(Loc);
11632        Base = new (Context) CXXThisExpr(Loc,
11633                                         MemExpr->getBaseType(),
11634                                         /*isImplicit=*/true);
11635      }
11636    } else
11637      Base = MemExpr->getBase();
11638
11639    ExprValueKind valueKind;
11640    QualType type;
11641    if (cast<CXXMethodDecl>(Fn)->isStatic()) {
11642      valueKind = VK_LValue;
11643      type = Fn->getType();
11644    } else {
11645      valueKind = VK_RValue;
11646      type = Context.BoundMemberTy;
11647    }
11648
11649    MemberExpr *ME = MemberExpr::Create(Context, Base,
11650                                        MemExpr->isArrow(),
11651                                        MemExpr->getQualifierLoc(),
11652                                        MemExpr->getTemplateKeywordLoc(),
11653                                        Fn,
11654                                        Found,
11655                                        MemExpr->getMemberNameInfo(),
11656                                        TemplateArgs,
11657                                        type, valueKind, OK_Ordinary);
11658    ME->setHadMultipleCandidates(true);
11659    MarkMemberReferenced(ME);
11660    return ME;
11661  }
11662
11663  llvm_unreachable("Invalid reference to overloaded function");
11664}
11665
11666ExprResult Sema::FixOverloadedFunctionReference(ExprResult E,
11667                                                DeclAccessPair Found,
11668                                                FunctionDecl *Fn) {
11669  return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Found, Fn));
11670}
11671
11672} // end namespace clang
11673