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