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