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