SemaOverload.cpp revision 7bb12da2b0749eeebb21854c77877736969e59f2
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 "Sema.h"
15#include "Lookup.h"
16#include "SemaInit.h"
17#include "clang/Basic/Diagnostic.h"
18#include "clang/Lex/Preprocessor.h"
19#include "clang/AST/ASTContext.h"
20#include "clang/AST/CXXInheritance.h"
21#include "clang/AST/Expr.h"
22#include "clang/AST/ExprCXX.h"
23#include "clang/AST/TypeOrdering.h"
24#include "clang/Basic/PartialDiagnostic.h"
25#include "llvm/ADT/SmallPtrSet.h"
26#include "llvm/ADT/STLExtras.h"
27#include <algorithm>
28
29namespace clang {
30
31/// GetConversionCategory - Retrieve the implicit conversion
32/// category corresponding to the given implicit conversion kind.
33ImplicitConversionCategory
34GetConversionCategory(ImplicitConversionKind Kind) {
35  static const ImplicitConversionCategory
36    Category[(int)ICK_Num_Conversion_Kinds] = {
37    ICC_Identity,
38    ICC_Lvalue_Transformation,
39    ICC_Lvalue_Transformation,
40    ICC_Lvalue_Transformation,
41    ICC_Identity,
42    ICC_Qualification_Adjustment,
43    ICC_Promotion,
44    ICC_Promotion,
45    ICC_Promotion,
46    ICC_Conversion,
47    ICC_Conversion,
48    ICC_Conversion,
49    ICC_Conversion,
50    ICC_Conversion,
51    ICC_Conversion,
52    ICC_Conversion,
53    ICC_Conversion,
54    ICC_Conversion,
55    ICC_Conversion
56  };
57  return Category[(int)Kind];
58}
59
60/// GetConversionRank - Retrieve the implicit conversion rank
61/// corresponding to the given implicit conversion kind.
62ImplicitConversionRank GetConversionRank(ImplicitConversionKind Kind) {
63  static const ImplicitConversionRank
64    Rank[(int)ICK_Num_Conversion_Kinds] = {
65    ICR_Exact_Match,
66    ICR_Exact_Match,
67    ICR_Exact_Match,
68    ICR_Exact_Match,
69    ICR_Exact_Match,
70    ICR_Exact_Match,
71    ICR_Promotion,
72    ICR_Promotion,
73    ICR_Promotion,
74    ICR_Conversion,
75    ICR_Conversion,
76    ICR_Conversion,
77    ICR_Conversion,
78    ICR_Conversion,
79    ICR_Conversion,
80    ICR_Conversion,
81    ICR_Conversion,
82    ICR_Conversion,
83    ICR_Conversion
84  };
85  return Rank[(int)Kind];
86}
87
88/// GetImplicitConversionName - Return the name of this kind of
89/// implicit conversion.
90const char* GetImplicitConversionName(ImplicitConversionKind Kind) {
91  static const char* const Name[(int)ICK_Num_Conversion_Kinds] = {
92    "No conversion",
93    "Lvalue-to-rvalue",
94    "Array-to-pointer",
95    "Function-to-pointer",
96    "Noreturn adjustment",
97    "Qualification",
98    "Integral promotion",
99    "Floating point promotion",
100    "Complex promotion",
101    "Integral conversion",
102    "Floating conversion",
103    "Complex conversion",
104    "Floating-integral conversion",
105    "Complex-real conversion",
106    "Pointer conversion",
107    "Pointer-to-member conversion",
108    "Boolean conversion",
109    "Compatible-types conversion",
110    "Derived-to-base conversion"
111  };
112  return Name[Kind];
113}
114
115/// StandardConversionSequence - Set the standard conversion
116/// sequence to the identity conversion.
117void StandardConversionSequence::setAsIdentityConversion() {
118  First = ICK_Identity;
119  Second = ICK_Identity;
120  Third = ICK_Identity;
121  Deprecated = false;
122  ReferenceBinding = false;
123  DirectBinding = false;
124  RRefBinding = false;
125  CopyConstructor = 0;
126}
127
128/// getRank - Retrieve the rank of this standard conversion sequence
129/// (C++ 13.3.3.1.1p3). The rank is the largest rank of each of the
130/// implicit conversions.
131ImplicitConversionRank StandardConversionSequence::getRank() const {
132  ImplicitConversionRank Rank = ICR_Exact_Match;
133  if  (GetConversionRank(First) > Rank)
134    Rank = GetConversionRank(First);
135  if  (GetConversionRank(Second) > Rank)
136    Rank = GetConversionRank(Second);
137  if  (GetConversionRank(Third) > Rank)
138    Rank = GetConversionRank(Third);
139  return Rank;
140}
141
142/// isPointerConversionToBool - Determines whether this conversion is
143/// a conversion of a pointer or pointer-to-member to bool. This is
144/// used as part of the ranking of standard conversion sequences
145/// (C++ 13.3.3.2p4).
146bool StandardConversionSequence::isPointerConversionToBool() const {
147  // Note that FromType has not necessarily been transformed by the
148  // array-to-pointer or function-to-pointer implicit conversions, so
149  // check for their presence as well as checking whether FromType is
150  // a pointer.
151  if (getToType(1)->isBooleanType() &&
152      (getFromType()->isPointerType() || getFromType()->isBlockPointerType() ||
153       First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
154    return true;
155
156  return false;
157}
158
159/// isPointerConversionToVoidPointer - Determines whether this
160/// conversion is a conversion of a pointer to a void pointer. This is
161/// used as part of the ranking of standard conversion sequences (C++
162/// 13.3.3.2p4).
163bool
164StandardConversionSequence::
165isPointerConversionToVoidPointer(ASTContext& Context) const {
166  QualType FromType = getFromType();
167  QualType ToType = getToType(1);
168
169  // Note that FromType has not necessarily been transformed by the
170  // array-to-pointer implicit conversion, so check for its presence
171  // and redo the conversion to get a pointer.
172  if (First == ICK_Array_To_Pointer)
173    FromType = Context.getArrayDecayedType(FromType);
174
175  if (Second == ICK_Pointer_Conversion && FromType->isPointerType())
176    if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
177      return ToPtrType->getPointeeType()->isVoidType();
178
179  return false;
180}
181
182/// DebugPrint - Print this standard conversion sequence to standard
183/// error. Useful for debugging overloading issues.
184void StandardConversionSequence::DebugPrint() const {
185  llvm::raw_ostream &OS = llvm::errs();
186  bool PrintedSomething = false;
187  if (First != ICK_Identity) {
188    OS << GetImplicitConversionName(First);
189    PrintedSomething = true;
190  }
191
192  if (Second != ICK_Identity) {
193    if (PrintedSomething) {
194      OS << " -> ";
195    }
196    OS << GetImplicitConversionName(Second);
197
198    if (CopyConstructor) {
199      OS << " (by copy constructor)";
200    } else if (DirectBinding) {
201      OS << " (direct reference binding)";
202    } else if (ReferenceBinding) {
203      OS << " (reference binding)";
204    }
205    PrintedSomething = true;
206  }
207
208  if (Third != ICK_Identity) {
209    if (PrintedSomething) {
210      OS << " -> ";
211    }
212    OS << GetImplicitConversionName(Third);
213    PrintedSomething = true;
214  }
215
216  if (!PrintedSomething) {
217    OS << "No conversions required";
218  }
219}
220
221/// DebugPrint - Print this user-defined conversion sequence to standard
222/// error. Useful for debugging overloading issues.
223void UserDefinedConversionSequence::DebugPrint() const {
224  llvm::raw_ostream &OS = llvm::errs();
225  if (Before.First || Before.Second || Before.Third) {
226    Before.DebugPrint();
227    OS << " -> ";
228  }
229  OS << "'" << ConversionFunction->getNameAsString() << "'";
230  if (After.First || After.Second || After.Third) {
231    OS << " -> ";
232    After.DebugPrint();
233  }
234}
235
236/// DebugPrint - Print this implicit conversion sequence to standard
237/// error. Useful for debugging overloading issues.
238void ImplicitConversionSequence::DebugPrint() const {
239  llvm::raw_ostream &OS = llvm::errs();
240  switch (ConversionKind) {
241  case StandardConversion:
242    OS << "Standard conversion: ";
243    Standard.DebugPrint();
244    break;
245  case UserDefinedConversion:
246    OS << "User-defined conversion: ";
247    UserDefined.DebugPrint();
248    break;
249  case EllipsisConversion:
250    OS << "Ellipsis conversion";
251    break;
252  case AmbiguousConversion:
253    OS << "Ambiguous conversion";
254    break;
255  case BadConversion:
256    OS << "Bad conversion";
257    break;
258  }
259
260  OS << "\n";
261}
262
263void AmbiguousConversionSequence::construct() {
264  new (&conversions()) ConversionSet();
265}
266
267void AmbiguousConversionSequence::destruct() {
268  conversions().~ConversionSet();
269}
270
271void
272AmbiguousConversionSequence::copyFrom(const AmbiguousConversionSequence &O) {
273  FromTypePtr = O.FromTypePtr;
274  ToTypePtr = O.ToTypePtr;
275  new (&conversions()) ConversionSet(O.conversions());
276}
277
278
279// IsOverload - Determine whether the given New declaration is an
280// overload of the declarations in Old. This routine returns false if
281// New and Old cannot be overloaded, e.g., if New has the same
282// signature as some function in Old (C++ 1.3.10) or if the Old
283// declarations aren't functions (or function templates) at all. When
284// it does return false, MatchedDecl will point to the decl that New
285// cannot be overloaded with.  This decl may be a UsingShadowDecl on
286// top of the underlying declaration.
287//
288// Example: Given the following input:
289//
290//   void f(int, float); // #1
291//   void f(int, int); // #2
292//   int f(int, int); // #3
293//
294// When we process #1, there is no previous declaration of "f",
295// so IsOverload will not be used.
296//
297// When we process #2, Old contains only the FunctionDecl for #1.  By
298// comparing the parameter types, we see that #1 and #2 are overloaded
299// (since they have different signatures), so this routine returns
300// false; MatchedDecl is unchanged.
301//
302// When we process #3, Old is an overload set containing #1 and #2. We
303// compare the signatures of #3 to #1 (they're overloaded, so we do
304// nothing) and then #3 to #2. Since the signatures of #3 and #2 are
305// identical (return types of functions are not part of the
306// signature), IsOverload returns false and MatchedDecl will be set to
307// point to the FunctionDecl for #2.
308Sema::OverloadKind
309Sema::CheckOverload(FunctionDecl *New, const LookupResult &Old,
310                    NamedDecl *&Match) {
311  for (LookupResult::iterator I = Old.begin(), E = Old.end();
312         I != E; ++I) {
313    NamedDecl *OldD = (*I)->getUnderlyingDecl();
314    if (FunctionTemplateDecl *OldT = dyn_cast<FunctionTemplateDecl>(OldD)) {
315      if (!IsOverload(New, OldT->getTemplatedDecl())) {
316        Match = *I;
317        return Ovl_Match;
318      }
319    } else if (FunctionDecl *OldF = dyn_cast<FunctionDecl>(OldD)) {
320      if (!IsOverload(New, OldF)) {
321        Match = *I;
322        return Ovl_Match;
323      }
324    } else if (isa<UsingDecl>(OldD) || isa<TagDecl>(OldD)) {
325      // We can overload with these, which can show up when doing
326      // redeclaration checks for UsingDecls.
327      assert(Old.getLookupKind() == LookupUsingDeclName);
328    } else if (isa<UnresolvedUsingValueDecl>(OldD)) {
329      // Optimistically assume that an unresolved using decl will
330      // overload; if it doesn't, we'll have to diagnose during
331      // template instantiation.
332    } else {
333      // (C++ 13p1):
334      //   Only function declarations can be overloaded; object and type
335      //   declarations cannot be overloaded.
336      Match = *I;
337      return Ovl_NonFunction;
338    }
339  }
340
341  return Ovl_Overload;
342}
343
344bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old) {
345  FunctionTemplateDecl *OldTemplate = Old->getDescribedFunctionTemplate();
346  FunctionTemplateDecl *NewTemplate = New->getDescribedFunctionTemplate();
347
348  // C++ [temp.fct]p2:
349  //   A function template can be overloaded with other function templates
350  //   and with normal (non-template) functions.
351  if ((OldTemplate == 0) != (NewTemplate == 0))
352    return true;
353
354  // Is the function New an overload of the function Old?
355  QualType OldQType = Context.getCanonicalType(Old->getType());
356  QualType NewQType = Context.getCanonicalType(New->getType());
357
358  // Compare the signatures (C++ 1.3.10) of the two functions to
359  // determine whether they are overloads. If we find any mismatch
360  // in the signature, they are overloads.
361
362  // If either of these functions is a K&R-style function (no
363  // prototype), then we consider them to have matching signatures.
364  if (isa<FunctionNoProtoType>(OldQType.getTypePtr()) ||
365      isa<FunctionNoProtoType>(NewQType.getTypePtr()))
366    return false;
367
368  FunctionProtoType* OldType = cast<FunctionProtoType>(OldQType);
369  FunctionProtoType* NewType = cast<FunctionProtoType>(NewQType);
370
371  // The signature of a function includes the types of its
372  // parameters (C++ 1.3.10), which includes the presence or absence
373  // of the ellipsis; see C++ DR 357).
374  if (OldQType != NewQType &&
375      (OldType->getNumArgs() != NewType->getNumArgs() ||
376       OldType->isVariadic() != NewType->isVariadic() ||
377       !std::equal(OldType->arg_type_begin(), OldType->arg_type_end(),
378                   NewType->arg_type_begin())))
379    return true;
380
381  // C++ [temp.over.link]p4:
382  //   The signature of a function template consists of its function
383  //   signature, its return type and its template parameter list. The names
384  //   of the template parameters are significant only for establishing the
385  //   relationship between the template parameters and the rest of the
386  //   signature.
387  //
388  // We check the return type and template parameter lists for function
389  // templates first; the remaining checks follow.
390  if (NewTemplate &&
391      (!TemplateParameterListsAreEqual(NewTemplate->getTemplateParameters(),
392                                       OldTemplate->getTemplateParameters(),
393                                       false, TPL_TemplateMatch) ||
394       OldType->getResultType() != NewType->getResultType()))
395    return true;
396
397  // If the function is a class member, its signature includes the
398  // cv-qualifiers (if any) on the function itself.
399  //
400  // As part of this, also check whether one of the member functions
401  // is static, in which case they are not overloads (C++
402  // 13.1p2). While not part of the definition of the signature,
403  // this check is important to determine whether these functions
404  // can be overloaded.
405  CXXMethodDecl* OldMethod = dyn_cast<CXXMethodDecl>(Old);
406  CXXMethodDecl* NewMethod = dyn_cast<CXXMethodDecl>(New);
407  if (OldMethod && NewMethod &&
408      !OldMethod->isStatic() && !NewMethod->isStatic() &&
409      OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers())
410    return true;
411
412  // The signatures match; this is not an overload.
413  return false;
414}
415
416/// TryImplicitConversion - Attempt to perform an implicit conversion
417/// from the given expression (Expr) to the given type (ToType). This
418/// function returns an implicit conversion sequence that can be used
419/// to perform the initialization. Given
420///
421///   void f(float f);
422///   void g(int i) { f(i); }
423///
424/// this routine would produce an implicit conversion sequence to
425/// describe the initialization of f from i, which will be a standard
426/// conversion sequence containing an lvalue-to-rvalue conversion (C++
427/// 4.1) followed by a floating-integral conversion (C++ 4.9).
428//
429/// Note that this routine only determines how the conversion can be
430/// performed; it does not actually perform the conversion. As such,
431/// it will not produce any diagnostics if no conversion is available,
432/// but will instead return an implicit conversion sequence of kind
433/// "BadConversion".
434///
435/// If @p SuppressUserConversions, then user-defined conversions are
436/// not permitted.
437/// If @p AllowExplicit, then explicit user-defined conversions are
438/// permitted.
439/// If @p ForceRValue, then overloading is performed as if From was an rvalue,
440/// no matter its actual lvalueness.
441/// If @p UserCast, the implicit conversion is being done for a user-specified
442/// cast.
443ImplicitConversionSequence
444Sema::TryImplicitConversion(Expr* From, QualType ToType,
445                            bool SuppressUserConversions,
446                            bool AllowExplicit, bool ForceRValue,
447                            bool InOverloadResolution,
448                            bool UserCast) {
449  ImplicitConversionSequence ICS;
450  OverloadCandidateSet Conversions;
451  OverloadingResult UserDefResult = OR_Success;
452  if (IsStandardConversion(From, ToType, InOverloadResolution, ICS.Standard))
453    ICS.setStandard();
454  else if (getLangOptions().CPlusPlus &&
455           (UserDefResult = IsUserDefinedConversion(From, ToType,
456                                   ICS.UserDefined,
457                                   Conversions,
458                                   !SuppressUserConversions, AllowExplicit,
459				   ForceRValue, UserCast)) == OR_Success) {
460    ICS.setUserDefined();
461    // C++ [over.ics.user]p4:
462    //   A conversion of an expression of class type to the same class
463    //   type is given Exact Match rank, and a conversion of an
464    //   expression of class type to a base class of that type is
465    //   given Conversion rank, in spite of the fact that a copy
466    //   constructor (i.e., a user-defined conversion function) is
467    //   called for those cases.
468    if (CXXConstructorDecl *Constructor
469          = dyn_cast<CXXConstructorDecl>(ICS.UserDefined.ConversionFunction)) {
470      QualType FromCanon
471        = Context.getCanonicalType(From->getType().getUnqualifiedType());
472      QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
473      if (Constructor->isCopyConstructor() &&
474          (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon))) {
475        // Turn this into a "standard" conversion sequence, so that it
476        // gets ranked with standard conversion sequences.
477        ICS.setStandard();
478        ICS.Standard.setAsIdentityConversion();
479        ICS.Standard.setFromType(From->getType());
480        ICS.Standard.setAllToTypes(ToType);
481        ICS.Standard.CopyConstructor = Constructor;
482        if (ToCanon != FromCanon)
483          ICS.Standard.Second = ICK_Derived_To_Base;
484      }
485    }
486
487    // C++ [over.best.ics]p4:
488    //   However, when considering the argument of a user-defined
489    //   conversion function that is a candidate by 13.3.1.3 when
490    //   invoked for the copying of the temporary in the second step
491    //   of a class copy-initialization, or by 13.3.1.4, 13.3.1.5, or
492    //   13.3.1.6 in all cases, only standard conversion sequences and
493    //   ellipsis conversion sequences are allowed.
494    if (SuppressUserConversions && ICS.isUserDefined()) {
495      ICS.setBad();
496      ICS.Bad.init(BadConversionSequence::suppressed_user, From, ToType);
497    }
498  } else if (UserDefResult == OR_Ambiguous && !SuppressUserConversions) {
499    ICS.setAmbiguous();
500    ICS.Ambiguous.setFromType(From->getType());
501    ICS.Ambiguous.setToType(ToType);
502    for (OverloadCandidateSet::iterator Cand = Conversions.begin();
503         Cand != Conversions.end(); ++Cand)
504      if (Cand->Viable)
505        ICS.Ambiguous.addConversion(Cand->Function);
506  } else {
507    ICS.setBad();
508    ICS.Bad.init(BadConversionSequence::no_conversion, From, ToType);
509  }
510
511  return ICS;
512}
513
514/// \brief Determine whether the conversion from FromType to ToType is a valid
515/// conversion that strips "noreturn" off the nested function type.
516static bool IsNoReturnConversion(ASTContext &Context, QualType FromType,
517                                 QualType ToType, QualType &ResultTy) {
518  if (Context.hasSameUnqualifiedType(FromType, ToType))
519    return false;
520
521  // Strip the noreturn off the type we're converting from; noreturn can
522  // safely be removed.
523  FromType = Context.getNoReturnType(FromType, false);
524  if (!Context.hasSameUnqualifiedType(FromType, ToType))
525    return false;
526
527  ResultTy = FromType;
528  return true;
529}
530
531/// IsStandardConversion - Determines whether there is a standard
532/// conversion sequence (C++ [conv], C++ [over.ics.scs]) from the
533/// expression From to the type ToType. Standard conversion sequences
534/// only consider non-class types; for conversions that involve class
535/// types, use TryImplicitConversion. If a conversion exists, SCS will
536/// contain the standard conversion sequence required to perform this
537/// conversion and this routine will return true. Otherwise, this
538/// routine will return false and the value of SCS is unspecified.
539bool
540Sema::IsStandardConversion(Expr* From, QualType ToType,
541                           bool InOverloadResolution,
542                           StandardConversionSequence &SCS) {
543  QualType FromType = From->getType();
544
545  // Standard conversions (C++ [conv])
546  SCS.setAsIdentityConversion();
547  SCS.Deprecated = false;
548  SCS.IncompatibleObjC = false;
549  SCS.setFromType(FromType);
550  SCS.CopyConstructor = 0;
551
552  // There are no standard conversions for class types in C++, so
553  // abort early. When overloading in C, however, we do permit
554  if (FromType->isRecordType() || ToType->isRecordType()) {
555    if (getLangOptions().CPlusPlus)
556      return false;
557
558    // When we're overloading in C, we allow, as standard conversions,
559  }
560
561  // The first conversion can be an lvalue-to-rvalue conversion,
562  // array-to-pointer conversion, or function-to-pointer conversion
563  // (C++ 4p1).
564
565  // Lvalue-to-rvalue conversion (C++ 4.1):
566  //   An lvalue (3.10) of a non-function, non-array type T can be
567  //   converted to an rvalue.
568  Expr::isLvalueResult argIsLvalue = From->isLvalue(Context);
569  if (argIsLvalue == Expr::LV_Valid &&
570      !FromType->isFunctionType() && !FromType->isArrayType() &&
571      Context.getCanonicalType(FromType) != Context.OverloadTy) {
572    SCS.First = ICK_Lvalue_To_Rvalue;
573
574    // If T is a non-class type, the type of the rvalue is the
575    // cv-unqualified version of T. Otherwise, the type of the rvalue
576    // is T (C++ 4.1p1). C++ can't get here with class types; in C, we
577    // just strip the qualifiers because they don't matter.
578    FromType = FromType.getUnqualifiedType();
579  } else if (FromType->isArrayType()) {
580    // Array-to-pointer conversion (C++ 4.2)
581    SCS.First = ICK_Array_To_Pointer;
582
583    // An lvalue or rvalue of type "array of N T" or "array of unknown
584    // bound of T" can be converted to an rvalue of type "pointer to
585    // T" (C++ 4.2p1).
586    FromType = Context.getArrayDecayedType(FromType);
587
588    if (IsStringLiteralToNonConstPointerConversion(From, ToType)) {
589      // This conversion is deprecated. (C++ D.4).
590      SCS.Deprecated = true;
591
592      // For the purpose of ranking in overload resolution
593      // (13.3.3.1.1), this conversion is considered an
594      // array-to-pointer conversion followed by a qualification
595      // conversion (4.4). (C++ 4.2p2)
596      SCS.Second = ICK_Identity;
597      SCS.Third = ICK_Qualification;
598      SCS.setAllToTypes(FromType);
599      return true;
600    }
601  } else if (FromType->isFunctionType() && argIsLvalue == Expr::LV_Valid) {
602    // Function-to-pointer conversion (C++ 4.3).
603    SCS.First = ICK_Function_To_Pointer;
604
605    // An lvalue of function type T can be converted to an rvalue of
606    // type "pointer to T." The result is a pointer to the
607    // function. (C++ 4.3p1).
608    FromType = Context.getPointerType(FromType);
609  } else if (FunctionDecl *Fn
610               = ResolveAddressOfOverloadedFunction(From, ToType, false)) {
611    // Address of overloaded function (C++ [over.over]).
612    SCS.First = ICK_Function_To_Pointer;
613
614    // We were able to resolve the address of the overloaded function,
615    // so we can convert to the type of that function.
616    FromType = Fn->getType();
617    if (ToType->isLValueReferenceType())
618      FromType = Context.getLValueReferenceType(FromType);
619    else if (ToType->isRValueReferenceType())
620      FromType = Context.getRValueReferenceType(FromType);
621    else if (ToType->isMemberPointerType()) {
622      // Resolve address only succeeds if both sides are member pointers,
623      // but it doesn't have to be the same class. See DR 247.
624      // Note that this means that the type of &Derived::fn can be
625      // Ret (Base::*)(Args) if the fn overload actually found is from the
626      // base class, even if it was brought into the derived class via a
627      // using declaration. The standard isn't clear on this issue at all.
628      CXXMethodDecl *M = cast<CXXMethodDecl>(Fn);
629      FromType = Context.getMemberPointerType(FromType,
630                    Context.getTypeDeclType(M->getParent()).getTypePtr());
631    } else
632      FromType = Context.getPointerType(FromType);
633  } else {
634    // We don't require any conversions for the first step.
635    SCS.First = ICK_Identity;
636  }
637  SCS.setToType(0, FromType);
638
639  // The second conversion can be an integral promotion, floating
640  // point promotion, integral conversion, floating point conversion,
641  // floating-integral conversion, pointer conversion,
642  // pointer-to-member conversion, or boolean conversion (C++ 4p1).
643  // For overloading in C, this can also be a "compatible-type"
644  // conversion.
645  bool IncompatibleObjC = false;
646  if (Context.hasSameUnqualifiedType(FromType, ToType)) {
647    // The unqualified versions of the types are the same: there's no
648    // conversion to do.
649    SCS.Second = ICK_Identity;
650  } else if (IsIntegralPromotion(From, FromType, ToType)) {
651    // Integral promotion (C++ 4.5).
652    SCS.Second = ICK_Integral_Promotion;
653    FromType = ToType.getUnqualifiedType();
654  } else if (IsFloatingPointPromotion(FromType, ToType)) {
655    // Floating point promotion (C++ 4.6).
656    SCS.Second = ICK_Floating_Promotion;
657    FromType = ToType.getUnqualifiedType();
658  } else if (IsComplexPromotion(FromType, ToType)) {
659    // Complex promotion (Clang extension)
660    SCS.Second = ICK_Complex_Promotion;
661    FromType = ToType.getUnqualifiedType();
662  } else if ((FromType->isIntegralType() || FromType->isEnumeralType()) &&
663           (ToType->isIntegralType() && !ToType->isEnumeralType())) {
664    // Integral conversions (C++ 4.7).
665    SCS.Second = ICK_Integral_Conversion;
666    FromType = ToType.getUnqualifiedType();
667  } else if (FromType->isFloatingType() && ToType->isFloatingType()) {
668    // Floating point conversions (C++ 4.8).
669    SCS.Second = ICK_Floating_Conversion;
670    FromType = ToType.getUnqualifiedType();
671  } else if (FromType->isComplexType() && ToType->isComplexType()) {
672    // Complex conversions (C99 6.3.1.6)
673    SCS.Second = ICK_Complex_Conversion;
674    FromType = ToType.getUnqualifiedType();
675  } else if ((FromType->isFloatingType() &&
676              ToType->isIntegralType() && (!ToType->isBooleanType() &&
677                                           !ToType->isEnumeralType())) ||
678             ((FromType->isIntegralType() || FromType->isEnumeralType()) &&
679              ToType->isFloatingType())) {
680    // Floating-integral conversions (C++ 4.9).
681    SCS.Second = ICK_Floating_Integral;
682    FromType = ToType.getUnqualifiedType();
683  } else if ((FromType->isComplexType() && ToType->isArithmeticType()) ||
684             (ToType->isComplexType() && FromType->isArithmeticType())) {
685    // Complex-real conversions (C99 6.3.1.7)
686    SCS.Second = ICK_Complex_Real;
687    FromType = ToType.getUnqualifiedType();
688  } else if (IsPointerConversion(From, FromType, ToType, InOverloadResolution,
689                                 FromType, IncompatibleObjC)) {
690    // Pointer conversions (C++ 4.10).
691    SCS.Second = ICK_Pointer_Conversion;
692    SCS.IncompatibleObjC = IncompatibleObjC;
693  } else if (IsMemberPointerConversion(From, FromType, ToType,
694                                       InOverloadResolution, FromType)) {
695    // Pointer to member conversions (4.11).
696    SCS.Second = ICK_Pointer_Member;
697  } else if (ToType->isBooleanType() &&
698             (FromType->isArithmeticType() ||
699              FromType->isEnumeralType() ||
700              FromType->isAnyPointerType() ||
701              FromType->isBlockPointerType() ||
702              FromType->isMemberPointerType() ||
703              FromType->isNullPtrType())) {
704    // Boolean conversions (C++ 4.12).
705    SCS.Second = ICK_Boolean_Conversion;
706    FromType = Context.BoolTy;
707  } else if (!getLangOptions().CPlusPlus &&
708             Context.typesAreCompatible(ToType, FromType)) {
709    // Compatible conversions (Clang extension for C function overloading)
710    SCS.Second = ICK_Compatible_Conversion;
711  } else if (IsNoReturnConversion(Context, FromType, ToType, FromType)) {
712    // Treat a conversion that strips "noreturn" as an identity conversion.
713    SCS.Second = ICK_NoReturn_Adjustment;
714  } else {
715    // No second conversion required.
716    SCS.Second = ICK_Identity;
717  }
718  SCS.setToType(1, FromType);
719
720  QualType CanonFrom;
721  QualType CanonTo;
722  // The third conversion can be a qualification conversion (C++ 4p1).
723  if (IsQualificationConversion(FromType, ToType)) {
724    SCS.Third = ICK_Qualification;
725    FromType = ToType;
726    CanonFrom = Context.getCanonicalType(FromType);
727    CanonTo = Context.getCanonicalType(ToType);
728  } else {
729    // No conversion required
730    SCS.Third = ICK_Identity;
731
732    // C++ [over.best.ics]p6:
733    //   [...] Any difference in top-level cv-qualification is
734    //   subsumed by the initialization itself and does not constitute
735    //   a conversion. [...]
736    CanonFrom = Context.getCanonicalType(FromType);
737    CanonTo = Context.getCanonicalType(ToType);
738    if (CanonFrom.getLocalUnqualifiedType()
739                                       == CanonTo.getLocalUnqualifiedType() &&
740        CanonFrom.getLocalCVRQualifiers() != CanonTo.getLocalCVRQualifiers()) {
741      FromType = ToType;
742      CanonFrom = CanonTo;
743    }
744  }
745  SCS.setToType(2, FromType);
746
747  // If we have not converted the argument type to the parameter type,
748  // this is a bad conversion sequence.
749  if (CanonFrom != CanonTo)
750    return false;
751
752  return true;
753}
754
755/// IsIntegralPromotion - Determines whether the conversion from the
756/// expression From (whose potentially-adjusted type is FromType) to
757/// ToType is an integral promotion (C++ 4.5). If so, returns true and
758/// sets PromotedType to the promoted type.
759bool Sema::IsIntegralPromotion(Expr *From, QualType FromType, QualType ToType) {
760  const BuiltinType *To = ToType->getAs<BuiltinType>();
761  // All integers are built-in.
762  if (!To) {
763    return false;
764  }
765
766  // An rvalue of type char, signed char, unsigned char, short int, or
767  // unsigned short int can be converted to an rvalue of type int if
768  // int can represent all the values of the source type; otherwise,
769  // the source rvalue can be converted to an rvalue of type unsigned
770  // int (C++ 4.5p1).
771  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType()) {
772    if (// We can promote any signed, promotable integer type to an int
773        (FromType->isSignedIntegerType() ||
774         // We can promote any unsigned integer type whose size is
775         // less than int to an int.
776         (!FromType->isSignedIntegerType() &&
777          Context.getTypeSize(FromType) < Context.getTypeSize(ToType)))) {
778      return To->getKind() == BuiltinType::Int;
779    }
780
781    return To->getKind() == BuiltinType::UInt;
782  }
783
784  // An rvalue of type wchar_t (3.9.1) or an enumeration type (7.2)
785  // can be converted to an rvalue of the first of the following types
786  // that can represent all the values of its underlying type: int,
787  // unsigned int, long, or unsigned long (C++ 4.5p2).
788
789  // We pre-calculate the promotion type for enum types.
790  if (const EnumType *FromEnumType = FromType->getAs<EnumType>())
791    if (ToType->isIntegerType())
792      return Context.hasSameUnqualifiedType(ToType,
793                                FromEnumType->getDecl()->getPromotionType());
794
795  if (FromType->isWideCharType() && ToType->isIntegerType()) {
796    // Determine whether the type we're converting from is signed or
797    // unsigned.
798    bool FromIsSigned;
799    uint64_t FromSize = Context.getTypeSize(FromType);
800
801    // FIXME: Is wchar_t signed or unsigned? We assume it's signed for now.
802    FromIsSigned = true;
803
804    // The types we'll try to promote to, in the appropriate
805    // order. Try each of these types.
806    QualType PromoteTypes[6] = {
807      Context.IntTy, Context.UnsignedIntTy,
808      Context.LongTy, Context.UnsignedLongTy ,
809      Context.LongLongTy, Context.UnsignedLongLongTy
810    };
811    for (int Idx = 0; Idx < 6; ++Idx) {
812      uint64_t ToSize = Context.getTypeSize(PromoteTypes[Idx]);
813      if (FromSize < ToSize ||
814          (FromSize == ToSize &&
815           FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType())) {
816        // We found the type that we can promote to. If this is the
817        // type we wanted, we have a promotion. Otherwise, no
818        // promotion.
819        return Context.hasSameUnqualifiedType(ToType, PromoteTypes[Idx]);
820      }
821    }
822  }
823
824  // An rvalue for an integral bit-field (9.6) can be converted to an
825  // rvalue of type int if int can represent all the values of the
826  // bit-field; otherwise, it can be converted to unsigned int if
827  // unsigned int can represent all the values of the bit-field. If
828  // the bit-field is larger yet, no integral promotion applies to
829  // it. If the bit-field has an enumerated type, it is treated as any
830  // other value of that type for promotion purposes (C++ 4.5p3).
831  // FIXME: We should delay checking of bit-fields until we actually perform the
832  // conversion.
833  using llvm::APSInt;
834  if (From)
835    if (FieldDecl *MemberDecl = From->getBitField()) {
836      APSInt BitWidth;
837      if (FromType->isIntegralType() && !FromType->isEnumeralType() &&
838          MemberDecl->getBitWidth()->isIntegerConstantExpr(BitWidth, Context)) {
839        APSInt ToSize(BitWidth.getBitWidth(), BitWidth.isUnsigned());
840        ToSize = Context.getTypeSize(ToType);
841
842        // Are we promoting to an int from a bitfield that fits in an int?
843        if (BitWidth < ToSize ||
844            (FromType->isSignedIntegerType() && BitWidth <= ToSize)) {
845          return To->getKind() == BuiltinType::Int;
846        }
847
848        // Are we promoting to an unsigned int from an unsigned bitfield
849        // that fits into an unsigned int?
850        if (FromType->isUnsignedIntegerType() && BitWidth <= ToSize) {
851          return To->getKind() == BuiltinType::UInt;
852        }
853
854        return false;
855      }
856    }
857
858  // An rvalue of type bool can be converted to an rvalue of type int,
859  // with false becoming zero and true becoming one (C++ 4.5p4).
860  if (FromType->isBooleanType() && To->getKind() == BuiltinType::Int) {
861    return true;
862  }
863
864  return false;
865}
866
867/// IsFloatingPointPromotion - Determines whether the conversion from
868/// FromType to ToType is a floating point promotion (C++ 4.6). If so,
869/// returns true and sets PromotedType to the promoted type.
870bool Sema::IsFloatingPointPromotion(QualType FromType, QualType ToType) {
871  /// An rvalue of type float can be converted to an rvalue of type
872  /// double. (C++ 4.6p1).
873  if (const BuiltinType *FromBuiltin = FromType->getAs<BuiltinType>())
874    if (const BuiltinType *ToBuiltin = ToType->getAs<BuiltinType>()) {
875      if (FromBuiltin->getKind() == BuiltinType::Float &&
876          ToBuiltin->getKind() == BuiltinType::Double)
877        return true;
878
879      // C99 6.3.1.5p1:
880      //   When a float is promoted to double or long double, or a
881      //   double is promoted to long double [...].
882      if (!getLangOptions().CPlusPlus &&
883          (FromBuiltin->getKind() == BuiltinType::Float ||
884           FromBuiltin->getKind() == BuiltinType::Double) &&
885          (ToBuiltin->getKind() == BuiltinType::LongDouble))
886        return true;
887    }
888
889  return false;
890}
891
892/// \brief Determine if a conversion is a complex promotion.
893///
894/// A complex promotion is defined as a complex -> complex conversion
895/// where the conversion between the underlying real types is a
896/// floating-point or integral promotion.
897bool Sema::IsComplexPromotion(QualType FromType, QualType ToType) {
898  const ComplexType *FromComplex = FromType->getAs<ComplexType>();
899  if (!FromComplex)
900    return false;
901
902  const ComplexType *ToComplex = ToType->getAs<ComplexType>();
903  if (!ToComplex)
904    return false;
905
906  return IsFloatingPointPromotion(FromComplex->getElementType(),
907                                  ToComplex->getElementType()) ||
908    IsIntegralPromotion(0, FromComplex->getElementType(),
909                        ToComplex->getElementType());
910}
911
912/// BuildSimilarlyQualifiedPointerType - In a pointer conversion from
913/// the pointer type FromPtr to a pointer to type ToPointee, with the
914/// same type qualifiers as FromPtr has on its pointee type. ToType,
915/// if non-empty, will be a pointer to ToType that may or may not have
916/// the right set of qualifiers on its pointee.
917static QualType
918BuildSimilarlyQualifiedPointerType(const PointerType *FromPtr,
919                                   QualType ToPointee, QualType ToType,
920                                   ASTContext &Context) {
921  QualType CanonFromPointee = Context.getCanonicalType(FromPtr->getPointeeType());
922  QualType CanonToPointee = Context.getCanonicalType(ToPointee);
923  Qualifiers Quals = CanonFromPointee.getQualifiers();
924
925  // Exact qualifier match -> return the pointer type we're converting to.
926  if (CanonToPointee.getLocalQualifiers() == Quals) {
927    // ToType is exactly what we need. Return it.
928    if (!ToType.isNull())
929      return ToType;
930
931    // Build a pointer to ToPointee. It has the right qualifiers
932    // already.
933    return Context.getPointerType(ToPointee);
934  }
935
936  // Just build a canonical type that has the right qualifiers.
937  return Context.getPointerType(
938         Context.getQualifiedType(CanonToPointee.getLocalUnqualifiedType(),
939                                  Quals));
940}
941
942/// BuildSimilarlyQualifiedObjCObjectPointerType - In a pointer conversion from
943/// the FromType, which is an objective-c pointer, to ToType, which may or may
944/// not have the right set of qualifiers.
945static QualType
946BuildSimilarlyQualifiedObjCObjectPointerType(QualType FromType,
947                                             QualType ToType,
948                                             ASTContext &Context) {
949  QualType CanonFromType = Context.getCanonicalType(FromType);
950  QualType CanonToType = Context.getCanonicalType(ToType);
951  Qualifiers Quals = CanonFromType.getQualifiers();
952
953  // Exact qualifier match -> return the pointer type we're converting to.
954  if (CanonToType.getLocalQualifiers() == Quals)
955    return ToType;
956
957  // Just build a canonical type that has the right qualifiers.
958  return Context.getQualifiedType(CanonToType.getLocalUnqualifiedType(), Quals);
959}
960
961static bool isNullPointerConstantForConversion(Expr *Expr,
962                                               bool InOverloadResolution,
963                                               ASTContext &Context) {
964  // Handle value-dependent integral null pointer constants correctly.
965  // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
966  if (Expr->isValueDependent() && !Expr->isTypeDependent() &&
967      Expr->getType()->isIntegralType())
968    return !InOverloadResolution;
969
970  return Expr->isNullPointerConstant(Context,
971                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
972                                        : Expr::NPC_ValueDependentIsNull);
973}
974
975/// IsPointerConversion - Determines whether the conversion of the
976/// expression From, which has the (possibly adjusted) type FromType,
977/// can be converted to the type ToType via a pointer conversion (C++
978/// 4.10). If so, returns true and places the converted type (that
979/// might differ from ToType in its cv-qualifiers at some level) into
980/// ConvertedType.
981///
982/// This routine also supports conversions to and from block pointers
983/// and conversions with Objective-C's 'id', 'id<protocols...>', and
984/// pointers to interfaces. FIXME: Once we've determined the
985/// appropriate overloading rules for Objective-C, we may want to
986/// split the Objective-C checks into a different routine; however,
987/// GCC seems to consider all of these conversions to be pointer
988/// conversions, so for now they live here. IncompatibleObjC will be
989/// set if the conversion is an allowed Objective-C conversion that
990/// should result in a warning.
991bool Sema::IsPointerConversion(Expr *From, QualType FromType, QualType ToType,
992                               bool InOverloadResolution,
993                               QualType& ConvertedType,
994                               bool &IncompatibleObjC) {
995  IncompatibleObjC = false;
996  if (isObjCPointerConversion(FromType, ToType, ConvertedType, IncompatibleObjC))
997    return true;
998
999  // Conversion from a null pointer constant to any Objective-C pointer type.
1000  if (ToType->isObjCObjectPointerType() &&
1001      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1002    ConvertedType = ToType;
1003    return true;
1004  }
1005
1006  // Blocks: Block pointers can be converted to void*.
1007  if (FromType->isBlockPointerType() && ToType->isPointerType() &&
1008      ToType->getAs<PointerType>()->getPointeeType()->isVoidType()) {
1009    ConvertedType = ToType;
1010    return true;
1011  }
1012  // Blocks: A null pointer constant can be converted to a block
1013  // pointer type.
1014  if (ToType->isBlockPointerType() &&
1015      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1016    ConvertedType = ToType;
1017    return true;
1018  }
1019
1020  // If the left-hand-side is nullptr_t, the right side can be a null
1021  // pointer constant.
1022  if (ToType->isNullPtrType() &&
1023      isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1024    ConvertedType = ToType;
1025    return true;
1026  }
1027
1028  const PointerType* ToTypePtr = ToType->getAs<PointerType>();
1029  if (!ToTypePtr)
1030    return false;
1031
1032  // A null pointer constant can be converted to a pointer type (C++ 4.10p1).
1033  if (isNullPointerConstantForConversion(From, InOverloadResolution, Context)) {
1034    ConvertedType = ToType;
1035    return true;
1036  }
1037
1038  // Beyond this point, both types need to be pointers
1039  // , including objective-c pointers.
1040  QualType ToPointeeType = ToTypePtr->getPointeeType();
1041  if (FromType->isObjCObjectPointerType() && ToPointeeType->isVoidType()) {
1042    ConvertedType = BuildSimilarlyQualifiedObjCObjectPointerType(FromType,
1043                                                       ToType, Context);
1044    return true;
1045
1046  }
1047  const PointerType *FromTypePtr = FromType->getAs<PointerType>();
1048  if (!FromTypePtr)
1049    return false;
1050
1051  QualType FromPointeeType = FromTypePtr->getPointeeType();
1052
1053  // An rvalue of type "pointer to cv T," where T is an object type,
1054  // can be converted to an rvalue of type "pointer to cv void" (C++
1055  // 4.10p2).
1056  if (FromPointeeType->isObjectType() && ToPointeeType->isVoidType()) {
1057    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1058                                                       ToPointeeType,
1059                                                       ToType, Context);
1060    return true;
1061  }
1062
1063  // When we're overloading in C, we allow a special kind of pointer
1064  // conversion for compatible-but-not-identical pointee types.
1065  if (!getLangOptions().CPlusPlus &&
1066      Context.typesAreCompatible(FromPointeeType, ToPointeeType)) {
1067    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1068                                                       ToPointeeType,
1069                                                       ToType, Context);
1070    return true;
1071  }
1072
1073  // C++ [conv.ptr]p3:
1074  //
1075  //   An rvalue of type "pointer to cv D," where D is a class type,
1076  //   can be converted to an rvalue of type "pointer to cv B," where
1077  //   B is a base class (clause 10) of D. If B is an inaccessible
1078  //   (clause 11) or ambiguous (10.2) base class of D, a program that
1079  //   necessitates this conversion is ill-formed. The result of the
1080  //   conversion is a pointer to the base class sub-object of the
1081  //   derived class object. The null pointer value is converted to
1082  //   the null pointer value of the destination type.
1083  //
1084  // Note that we do not check for ambiguity or inaccessibility
1085  // here. That is handled by CheckPointerConversion.
1086  if (getLangOptions().CPlusPlus &&
1087      FromPointeeType->isRecordType() && ToPointeeType->isRecordType() &&
1088      !RequireCompleteType(From->getLocStart(), FromPointeeType, PDiag()) &&
1089      IsDerivedFrom(FromPointeeType, ToPointeeType)) {
1090    ConvertedType = BuildSimilarlyQualifiedPointerType(FromTypePtr,
1091                                                       ToPointeeType,
1092                                                       ToType, Context);
1093    return true;
1094  }
1095
1096  return false;
1097}
1098
1099/// isObjCPointerConversion - Determines whether this is an
1100/// Objective-C pointer conversion. Subroutine of IsPointerConversion,
1101/// with the same arguments and return values.
1102bool Sema::isObjCPointerConversion(QualType FromType, QualType ToType,
1103                                   QualType& ConvertedType,
1104                                   bool &IncompatibleObjC) {
1105  if (!getLangOptions().ObjC1)
1106    return false;
1107
1108  // First, we handle all conversions on ObjC object pointer types.
1109  const ObjCObjectPointerType* ToObjCPtr = ToType->getAs<ObjCObjectPointerType>();
1110  const ObjCObjectPointerType *FromObjCPtr =
1111    FromType->getAs<ObjCObjectPointerType>();
1112
1113  if (ToObjCPtr && FromObjCPtr) {
1114    // Objective C++: We're able to convert between "id" or "Class" and a
1115    // pointer to any interface (in both directions).
1116    if (ToObjCPtr->isObjCBuiltinType() && FromObjCPtr->isObjCBuiltinType()) {
1117      ConvertedType = ToType;
1118      return true;
1119    }
1120    // Conversions with Objective-C's id<...>.
1121    if ((FromObjCPtr->isObjCQualifiedIdType() ||
1122         ToObjCPtr->isObjCQualifiedIdType()) &&
1123        Context.ObjCQualifiedIdTypesAreCompatible(ToType, FromType,
1124                                                  /*compare=*/false)) {
1125      ConvertedType = ToType;
1126      return true;
1127    }
1128    // Objective C++: We're able to convert from a pointer to an
1129    // interface to a pointer to a different interface.
1130    if (Context.canAssignObjCInterfaces(ToObjCPtr, FromObjCPtr)) {
1131      ConvertedType = ToType;
1132      return true;
1133    }
1134
1135    if (Context.canAssignObjCInterfaces(FromObjCPtr, ToObjCPtr)) {
1136      // Okay: this is some kind of implicit downcast of Objective-C
1137      // interfaces, which is permitted. However, we're going to
1138      // complain about it.
1139      IncompatibleObjC = true;
1140      ConvertedType = FromType;
1141      return true;
1142    }
1143  }
1144  // Beyond this point, both types need to be C pointers or block pointers.
1145  QualType ToPointeeType;
1146  if (const PointerType *ToCPtr = ToType->getAs<PointerType>())
1147    ToPointeeType = ToCPtr->getPointeeType();
1148  else if (const BlockPointerType *ToBlockPtr =
1149            ToType->getAs<BlockPointerType>()) {
1150    // Objective C++: We're able to convert from a pointer to any object
1151    // to a block pointer type.
1152    if (FromObjCPtr && FromObjCPtr->isObjCBuiltinType()) {
1153      ConvertedType = ToType;
1154      return true;
1155    }
1156    ToPointeeType = ToBlockPtr->getPointeeType();
1157  }
1158  else if (FromType->getAs<BlockPointerType>() &&
1159           ToObjCPtr && ToObjCPtr->isObjCBuiltinType()) {
1160    // Objective C++: We're able to convert from a block pointer type to a
1161    // pointer to any object.
1162    ConvertedType = ToType;
1163    return true;
1164  }
1165  else
1166    return false;
1167
1168  QualType FromPointeeType;
1169  if (const PointerType *FromCPtr = FromType->getAs<PointerType>())
1170    FromPointeeType = FromCPtr->getPointeeType();
1171  else if (const BlockPointerType *FromBlockPtr = FromType->getAs<BlockPointerType>())
1172    FromPointeeType = FromBlockPtr->getPointeeType();
1173  else
1174    return false;
1175
1176  // If we have pointers to pointers, recursively check whether this
1177  // is an Objective-C conversion.
1178  if (FromPointeeType->isPointerType() && ToPointeeType->isPointerType() &&
1179      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
1180                              IncompatibleObjC)) {
1181    // We always complain about this conversion.
1182    IncompatibleObjC = true;
1183    ConvertedType = ToType;
1184    return true;
1185  }
1186  // Allow conversion of pointee being objective-c pointer to another one;
1187  // as in I* to id.
1188  if (FromPointeeType->getAs<ObjCObjectPointerType>() &&
1189      ToPointeeType->getAs<ObjCObjectPointerType>() &&
1190      isObjCPointerConversion(FromPointeeType, ToPointeeType, ConvertedType,
1191                              IncompatibleObjC)) {
1192    ConvertedType = ToType;
1193    return true;
1194  }
1195
1196  // If we have pointers to functions or blocks, check whether the only
1197  // differences in the argument and result types are in Objective-C
1198  // pointer conversions. If so, we permit the conversion (but
1199  // complain about it).
1200  const FunctionProtoType *FromFunctionType
1201    = FromPointeeType->getAs<FunctionProtoType>();
1202  const FunctionProtoType *ToFunctionType
1203    = ToPointeeType->getAs<FunctionProtoType>();
1204  if (FromFunctionType && ToFunctionType) {
1205    // If the function types are exactly the same, this isn't an
1206    // Objective-C pointer conversion.
1207    if (Context.getCanonicalType(FromPointeeType)
1208          == Context.getCanonicalType(ToPointeeType))
1209      return false;
1210
1211    // Perform the quick checks that will tell us whether these
1212    // function types are obviously different.
1213    if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
1214        FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
1215        FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
1216      return false;
1217
1218    bool HasObjCConversion = false;
1219    if (Context.getCanonicalType(FromFunctionType->getResultType())
1220          == Context.getCanonicalType(ToFunctionType->getResultType())) {
1221      // Okay, the types match exactly. Nothing to do.
1222    } else if (isObjCPointerConversion(FromFunctionType->getResultType(),
1223                                       ToFunctionType->getResultType(),
1224                                       ConvertedType, IncompatibleObjC)) {
1225      // Okay, we have an Objective-C pointer conversion.
1226      HasObjCConversion = true;
1227    } else {
1228      // Function types are too different. Abort.
1229      return false;
1230    }
1231
1232    // Check argument types.
1233    for (unsigned ArgIdx = 0, NumArgs = FromFunctionType->getNumArgs();
1234         ArgIdx != NumArgs; ++ArgIdx) {
1235      QualType FromArgType = FromFunctionType->getArgType(ArgIdx);
1236      QualType ToArgType = ToFunctionType->getArgType(ArgIdx);
1237      if (Context.getCanonicalType(FromArgType)
1238            == Context.getCanonicalType(ToArgType)) {
1239        // Okay, the types match exactly. Nothing to do.
1240      } else if (isObjCPointerConversion(FromArgType, ToArgType,
1241                                         ConvertedType, IncompatibleObjC)) {
1242        // Okay, we have an Objective-C pointer conversion.
1243        HasObjCConversion = true;
1244      } else {
1245        // Argument types are too different. Abort.
1246        return false;
1247      }
1248    }
1249
1250    if (HasObjCConversion) {
1251      // We had an Objective-C conversion. Allow this pointer
1252      // conversion, but complain about it.
1253      ConvertedType = ToType;
1254      IncompatibleObjC = true;
1255      return true;
1256    }
1257  }
1258
1259  return false;
1260}
1261
1262/// CheckPointerConversion - Check the pointer conversion from the
1263/// expression From to the type ToType. This routine checks for
1264/// ambiguous or inaccessible derived-to-base pointer
1265/// conversions for which IsPointerConversion has already returned
1266/// true. It returns true and produces a diagnostic if there was an
1267/// error, or returns false otherwise.
1268bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
1269                                  CastExpr::CastKind &Kind,
1270                                  bool IgnoreBaseAccess) {
1271  QualType FromType = From->getType();
1272
1273  if (const PointerType *FromPtrType = FromType->getAs<PointerType>())
1274    if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {
1275      QualType FromPointeeType = FromPtrType->getPointeeType(),
1276               ToPointeeType   = ToPtrType->getPointeeType();
1277
1278      if (FromPointeeType->isRecordType() &&
1279          ToPointeeType->isRecordType()) {
1280        // We must have a derived-to-base conversion. Check an
1281        // ambiguous or inaccessible conversion.
1282        if (CheckDerivedToBaseConversion(FromPointeeType, ToPointeeType,
1283                                         From->getExprLoc(),
1284                                         From->getSourceRange(),
1285                                         IgnoreBaseAccess))
1286          return true;
1287
1288        // The conversion was successful.
1289        Kind = CastExpr::CK_DerivedToBase;
1290      }
1291    }
1292  if (const ObjCObjectPointerType *FromPtrType =
1293        FromType->getAs<ObjCObjectPointerType>())
1294    if (const ObjCObjectPointerType *ToPtrType =
1295          ToType->getAs<ObjCObjectPointerType>()) {
1296      // Objective-C++ conversions are always okay.
1297      // FIXME: We should have a different class of conversions for the
1298      // Objective-C++ implicit conversions.
1299      if (FromPtrType->isObjCBuiltinType() || ToPtrType->isObjCBuiltinType())
1300        return false;
1301
1302  }
1303  return false;
1304}
1305
1306/// IsMemberPointerConversion - Determines whether the conversion of the
1307/// expression From, which has the (possibly adjusted) type FromType, can be
1308/// converted to the type ToType via a member pointer conversion (C++ 4.11).
1309/// If so, returns true and places the converted type (that might differ from
1310/// ToType in its cv-qualifiers at some level) into ConvertedType.
1311bool Sema::IsMemberPointerConversion(Expr *From, QualType FromType,
1312                                     QualType ToType,
1313                                     bool InOverloadResolution,
1314                                     QualType &ConvertedType) {
1315  const MemberPointerType *ToTypePtr = ToType->getAs<MemberPointerType>();
1316  if (!ToTypePtr)
1317    return false;
1318
1319  // A null pointer constant can be converted to a member pointer (C++ 4.11p1)
1320  if (From->isNullPointerConstant(Context,
1321                    InOverloadResolution? Expr::NPC_ValueDependentIsNotNull
1322                                        : Expr::NPC_ValueDependentIsNull)) {
1323    ConvertedType = ToType;
1324    return true;
1325  }
1326
1327  // Otherwise, both types have to be member pointers.
1328  const MemberPointerType *FromTypePtr = FromType->getAs<MemberPointerType>();
1329  if (!FromTypePtr)
1330    return false;
1331
1332  // A pointer to member of B can be converted to a pointer to member of D,
1333  // where D is derived from B (C++ 4.11p2).
1334  QualType FromClass(FromTypePtr->getClass(), 0);
1335  QualType ToClass(ToTypePtr->getClass(), 0);
1336  // FIXME: What happens when these are dependent? Is this function even called?
1337
1338  if (IsDerivedFrom(ToClass, FromClass)) {
1339    ConvertedType = Context.getMemberPointerType(FromTypePtr->getPointeeType(),
1340                                                 ToClass.getTypePtr());
1341    return true;
1342  }
1343
1344  return false;
1345}
1346
1347/// CheckMemberPointerConversion - Check the member pointer conversion from the
1348/// expression From to the type ToType. This routine checks for ambiguous or
1349/// virtual (FIXME: or inaccessible) base-to-derived member pointer conversions
1350/// for which IsMemberPointerConversion has already returned true. It returns
1351/// true and produces a diagnostic if there was an error, or returns false
1352/// otherwise.
1353bool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType,
1354                                        CastExpr::CastKind &Kind,
1355                                        bool IgnoreBaseAccess) {
1356  (void)IgnoreBaseAccess;
1357  QualType FromType = From->getType();
1358  const MemberPointerType *FromPtrType = FromType->getAs<MemberPointerType>();
1359  if (!FromPtrType) {
1360    // This must be a null pointer to member pointer conversion
1361    assert(From->isNullPointerConstant(Context,
1362                                       Expr::NPC_ValueDependentIsNull) &&
1363           "Expr must be null pointer constant!");
1364    Kind = CastExpr::CK_NullToMemberPointer;
1365    return false;
1366  }
1367
1368  const MemberPointerType *ToPtrType = ToType->getAs<MemberPointerType>();
1369  assert(ToPtrType && "No member pointer cast has a target type "
1370                      "that is not a member pointer.");
1371
1372  QualType FromClass = QualType(FromPtrType->getClass(), 0);
1373  QualType ToClass   = QualType(ToPtrType->getClass(), 0);
1374
1375  // FIXME: What about dependent types?
1376  assert(FromClass->isRecordType() && "Pointer into non-class.");
1377  assert(ToClass->isRecordType() && "Pointer into non-class.");
1378
1379  CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/false,
1380                     /*DetectVirtual=*/true);
1381  bool DerivationOkay = IsDerivedFrom(ToClass, FromClass, Paths);
1382  assert(DerivationOkay &&
1383         "Should not have been called if derivation isn't OK.");
1384  (void)DerivationOkay;
1385
1386  if (Paths.isAmbiguous(Context.getCanonicalType(FromClass).
1387                                  getUnqualifiedType())) {
1388    // Derivation is ambiguous. Redo the check to find the exact paths.
1389    Paths.clear();
1390    Paths.setRecordingPaths(true);
1391    bool StillOkay = IsDerivedFrom(ToClass, FromClass, Paths);
1392    assert(StillOkay && "Derivation changed due to quantum fluctuation.");
1393    (void)StillOkay;
1394
1395    std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths);
1396    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv)
1397      << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();
1398    return true;
1399  }
1400
1401  if (const RecordType *VBase = Paths.getDetectedVirtual()) {
1402    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual)
1403      << FromClass << ToClass << QualType(VBase, 0)
1404      << From->getSourceRange();
1405    return true;
1406  }
1407
1408  // Must be a base to derived member conversion.
1409  Kind = CastExpr::CK_BaseToDerivedMemberPointer;
1410  return false;
1411}
1412
1413/// IsQualificationConversion - Determines whether the conversion from
1414/// an rvalue of type FromType to ToType is a qualification conversion
1415/// (C++ 4.4).
1416bool
1417Sema::IsQualificationConversion(QualType FromType, QualType ToType) {
1418  FromType = Context.getCanonicalType(FromType);
1419  ToType = Context.getCanonicalType(ToType);
1420
1421  // If FromType and ToType are the same type, this is not a
1422  // qualification conversion.
1423  if (FromType == ToType)
1424    return false;
1425
1426  // (C++ 4.4p4):
1427  //   A conversion can add cv-qualifiers at levels other than the first
1428  //   in multi-level pointers, subject to the following rules: [...]
1429  bool PreviousToQualsIncludeConst = true;
1430  bool UnwrappedAnyPointer = false;
1431  while (UnwrapSimilarPointerTypes(FromType, ToType)) {
1432    // Within each iteration of the loop, we check the qualifiers to
1433    // determine if this still looks like a qualification
1434    // conversion. Then, if all is well, we unwrap one more level of
1435    // pointers or pointers-to-members and do it all again
1436    // until there are no more pointers or pointers-to-members left to
1437    // unwrap.
1438    UnwrappedAnyPointer = true;
1439
1440    //   -- for every j > 0, if const is in cv 1,j then const is in cv
1441    //      2,j, and similarly for volatile.
1442    if (!ToType.isAtLeastAsQualifiedAs(FromType))
1443      return false;
1444
1445    //   -- if the cv 1,j and cv 2,j are different, then const is in
1446    //      every cv for 0 < k < j.
1447    if (FromType.getCVRQualifiers() != ToType.getCVRQualifiers()
1448        && !PreviousToQualsIncludeConst)
1449      return false;
1450
1451    // Keep track of whether all prior cv-qualifiers in the "to" type
1452    // include const.
1453    PreviousToQualsIncludeConst
1454      = PreviousToQualsIncludeConst && ToType.isConstQualified();
1455  }
1456
1457  // We are left with FromType and ToType being the pointee types
1458  // after unwrapping the original FromType and ToType the same number
1459  // of types. If we unwrapped any pointers, and if FromType and
1460  // ToType have the same unqualified type (since we checked
1461  // qualifiers above), then this is a qualification conversion.
1462  return UnwrappedAnyPointer && Context.hasSameUnqualifiedType(FromType,ToType);
1463}
1464
1465/// Determines whether there is a user-defined conversion sequence
1466/// (C++ [over.ics.user]) that converts expression From to the type
1467/// ToType. If such a conversion exists, User will contain the
1468/// user-defined conversion sequence that performs such a conversion
1469/// and this routine will return true. Otherwise, this routine returns
1470/// false and User is unspecified.
1471///
1472/// \param AllowConversionFunctions true if the conversion should
1473/// consider conversion functions at all. If false, only constructors
1474/// will be considered.
1475///
1476/// \param AllowExplicit  true if the conversion should consider C++0x
1477/// "explicit" conversion functions as well as non-explicit conversion
1478/// functions (C++0x [class.conv.fct]p2).
1479///
1480/// \param ForceRValue  true if the expression should be treated as an rvalue
1481/// for overload resolution.
1482/// \param UserCast true if looking for user defined conversion for a static
1483/// cast.
1484OverloadingResult Sema::IsUserDefinedConversion(Expr *From, QualType ToType,
1485                                          UserDefinedConversionSequence& User,
1486                                            OverloadCandidateSet& CandidateSet,
1487                                                bool AllowConversionFunctions,
1488                                                bool AllowExplicit,
1489                                                bool ForceRValue,
1490                                                bool UserCast) {
1491  if (const RecordType *ToRecordType = ToType->getAs<RecordType>()) {
1492    if (RequireCompleteType(From->getLocStart(), ToType, PDiag())) {
1493      // We're not going to find any constructors.
1494    } else if (CXXRecordDecl *ToRecordDecl
1495                 = dyn_cast<CXXRecordDecl>(ToRecordType->getDecl())) {
1496      // C++ [over.match.ctor]p1:
1497      //   When objects of class type are direct-initialized (8.5), or
1498      //   copy-initialized from an expression of the same or a
1499      //   derived class type (8.5), overload resolution selects the
1500      //   constructor. [...] For copy-initialization, the candidate
1501      //   functions are all the converting constructors (12.3.1) of
1502      //   that class. The argument list is the expression-list within
1503      //   the parentheses of the initializer.
1504      bool SuppressUserConversions = !UserCast;
1505      if (Context.hasSameUnqualifiedType(ToType, From->getType()) ||
1506          IsDerivedFrom(From->getType(), ToType)) {
1507        SuppressUserConversions = false;
1508        AllowConversionFunctions = false;
1509      }
1510
1511      DeclarationName ConstructorName
1512        = Context.DeclarationNames.getCXXConstructorName(
1513                          Context.getCanonicalType(ToType).getUnqualifiedType());
1514      DeclContext::lookup_iterator Con, ConEnd;
1515      for (llvm::tie(Con, ConEnd)
1516             = ToRecordDecl->lookup(ConstructorName);
1517           Con != ConEnd; ++Con) {
1518        // Find the constructor (which may be a template).
1519        CXXConstructorDecl *Constructor = 0;
1520        FunctionTemplateDecl *ConstructorTmpl
1521          = dyn_cast<FunctionTemplateDecl>(*Con);
1522        if (ConstructorTmpl)
1523          Constructor
1524            = cast<CXXConstructorDecl>(ConstructorTmpl->getTemplatedDecl());
1525        else
1526          Constructor = cast<CXXConstructorDecl>(*Con);
1527
1528        if (!Constructor->isInvalidDecl() &&
1529            Constructor->isConvertingConstructor(AllowExplicit)) {
1530          if (ConstructorTmpl)
1531            AddTemplateOverloadCandidate(ConstructorTmpl,
1532                                         ConstructorTmpl->getAccess(),
1533                                         /*ExplicitArgs*/ 0,
1534                                         &From, 1, CandidateSet,
1535                                         SuppressUserConversions, ForceRValue);
1536          else
1537            // Allow one user-defined conversion when user specifies a
1538            // From->ToType conversion via an static cast (c-style, etc).
1539            AddOverloadCandidate(Constructor, Constructor->getAccess(),
1540                                 &From, 1, CandidateSet,
1541                                 SuppressUserConversions, ForceRValue);
1542        }
1543      }
1544    }
1545  }
1546
1547  if (!AllowConversionFunctions) {
1548    // Don't allow any conversion functions to enter the overload set.
1549  } else if (RequireCompleteType(From->getLocStart(), From->getType(),
1550                                 PDiag(0)
1551                                   << From->getSourceRange())) {
1552    // No conversion functions from incomplete types.
1553  } else if (const RecordType *FromRecordType
1554               = From->getType()->getAs<RecordType>()) {
1555    if (CXXRecordDecl *FromRecordDecl
1556         = dyn_cast<CXXRecordDecl>(FromRecordType->getDecl())) {
1557      // Add all of the conversion functions as candidates.
1558      const UnresolvedSetImpl *Conversions
1559        = FromRecordDecl->getVisibleConversionFunctions();
1560      for (UnresolvedSetImpl::iterator I = Conversions->begin(),
1561             E = Conversions->end(); I != E; ++I) {
1562        NamedDecl *D = *I;
1563        CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
1564        if (isa<UsingShadowDecl>(D))
1565          D = cast<UsingShadowDecl>(D)->getTargetDecl();
1566
1567        CXXConversionDecl *Conv;
1568        FunctionTemplateDecl *ConvTemplate;
1569        if ((ConvTemplate = dyn_cast<FunctionTemplateDecl>(*I)))
1570          Conv = dyn_cast<CXXConversionDecl>(ConvTemplate->getTemplatedDecl());
1571        else
1572          Conv = dyn_cast<CXXConversionDecl>(*I);
1573
1574        if (AllowExplicit || !Conv->isExplicit()) {
1575          if (ConvTemplate)
1576            AddTemplateConversionCandidate(ConvTemplate, I.getAccess(),
1577                                           ActingContext, From, ToType,
1578                                           CandidateSet);
1579          else
1580            AddConversionCandidate(Conv, I.getAccess(), ActingContext,
1581                                   From, ToType, CandidateSet);
1582        }
1583      }
1584    }
1585  }
1586
1587  OverloadCandidateSet::iterator Best;
1588  switch (BestViableFunction(CandidateSet, From->getLocStart(), Best)) {
1589    case OR_Success:
1590      // Record the standard conversion we used and the conversion function.
1591      if (CXXConstructorDecl *Constructor
1592            = dyn_cast<CXXConstructorDecl>(Best->Function)) {
1593        // C++ [over.ics.user]p1:
1594        //   If the user-defined conversion is specified by a
1595        //   constructor (12.3.1), the initial standard conversion
1596        //   sequence converts the source type to the type required by
1597        //   the argument of the constructor.
1598        //
1599        QualType ThisType = Constructor->getThisType(Context);
1600        if (Best->Conversions[0].isEllipsis())
1601          User.EllipsisConversion = true;
1602        else {
1603          User.Before = Best->Conversions[0].Standard;
1604          User.EllipsisConversion = false;
1605        }
1606        User.ConversionFunction = Constructor;
1607        User.After.setAsIdentityConversion();
1608        User.After.setFromType(
1609          ThisType->getAs<PointerType>()->getPointeeType());
1610        User.After.setAllToTypes(ToType);
1611        return OR_Success;
1612      } else if (CXXConversionDecl *Conversion
1613                   = dyn_cast<CXXConversionDecl>(Best->Function)) {
1614        // C++ [over.ics.user]p1:
1615        //
1616        //   [...] If the user-defined conversion is specified by a
1617        //   conversion function (12.3.2), the initial standard
1618        //   conversion sequence converts the source type to the
1619        //   implicit object parameter of the conversion function.
1620        User.Before = Best->Conversions[0].Standard;
1621        User.ConversionFunction = Conversion;
1622        User.EllipsisConversion = false;
1623
1624        // C++ [over.ics.user]p2:
1625        //   The second standard conversion sequence converts the
1626        //   result of the user-defined conversion to the target type
1627        //   for the sequence. Since an implicit conversion sequence
1628        //   is an initialization, the special rules for
1629        //   initialization by user-defined conversion apply when
1630        //   selecting the best user-defined conversion for a
1631        //   user-defined conversion sequence (see 13.3.3 and
1632        //   13.3.3.1).
1633        User.After = Best->FinalConversion;
1634        return OR_Success;
1635      } else {
1636        assert(false && "Not a constructor or conversion function?");
1637        return OR_No_Viable_Function;
1638      }
1639
1640    case OR_No_Viable_Function:
1641      return OR_No_Viable_Function;
1642    case OR_Deleted:
1643      // No conversion here! We're done.
1644      return OR_Deleted;
1645
1646    case OR_Ambiguous:
1647      return OR_Ambiguous;
1648    }
1649
1650  return OR_No_Viable_Function;
1651}
1652
1653bool
1654Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {
1655  ImplicitConversionSequence ICS;
1656  OverloadCandidateSet CandidateSet;
1657  OverloadingResult OvResult =
1658    IsUserDefinedConversion(From, ToType, ICS.UserDefined,
1659                            CandidateSet, true, false, false);
1660  if (OvResult == OR_Ambiguous)
1661    Diag(From->getSourceRange().getBegin(),
1662         diag::err_typecheck_ambiguous_condition)
1663          << From->getType() << ToType << From->getSourceRange();
1664  else if (OvResult == OR_No_Viable_Function && !CandidateSet.empty())
1665    Diag(From->getSourceRange().getBegin(),
1666         diag::err_typecheck_nonviable_condition)
1667    << From->getType() << ToType << From->getSourceRange();
1668  else
1669    return false;
1670  PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, &From, 1);
1671  return true;
1672}
1673
1674/// CompareImplicitConversionSequences - Compare two implicit
1675/// conversion sequences to determine whether one is better than the
1676/// other or if they are indistinguishable (C++ 13.3.3.2).
1677ImplicitConversionSequence::CompareKind
1678Sema::CompareImplicitConversionSequences(const ImplicitConversionSequence& ICS1,
1679                                         const ImplicitConversionSequence& ICS2)
1680{
1681  // (C++ 13.3.3.2p2): When comparing the basic forms of implicit
1682  // conversion sequences (as defined in 13.3.3.1)
1683  //   -- a standard conversion sequence (13.3.3.1.1) is a better
1684  //      conversion sequence than a user-defined conversion sequence or
1685  //      an ellipsis conversion sequence, and
1686  //   -- a user-defined conversion sequence (13.3.3.1.2) is a better
1687  //      conversion sequence than an ellipsis conversion sequence
1688  //      (13.3.3.1.3).
1689  //
1690  // C++0x [over.best.ics]p10:
1691  //   For the purpose of ranking implicit conversion sequences as
1692  //   described in 13.3.3.2, the ambiguous conversion sequence is
1693  //   treated as a user-defined sequence that is indistinguishable
1694  //   from any other user-defined conversion sequence.
1695  if (ICS1.getKind() < ICS2.getKind()) {
1696    if (!(ICS1.isUserDefined() && ICS2.isAmbiguous()))
1697      return ImplicitConversionSequence::Better;
1698  } else if (ICS2.getKind() < ICS1.getKind()) {
1699    if (!(ICS2.isUserDefined() && ICS1.isAmbiguous()))
1700      return ImplicitConversionSequence::Worse;
1701  }
1702
1703  if (ICS1.isAmbiguous() || ICS2.isAmbiguous())
1704    return ImplicitConversionSequence::Indistinguishable;
1705
1706  // Two implicit conversion sequences of the same form are
1707  // indistinguishable conversion sequences unless one of the
1708  // following rules apply: (C++ 13.3.3.2p3):
1709  if (ICS1.isStandard())
1710    return CompareStandardConversionSequences(ICS1.Standard, ICS2.Standard);
1711  else if (ICS1.isUserDefined()) {
1712    // User-defined conversion sequence U1 is a better conversion
1713    // sequence than another user-defined conversion sequence U2 if
1714    // they contain the same user-defined conversion function or
1715    // constructor and if the second standard conversion sequence of
1716    // U1 is better than the second standard conversion sequence of
1717    // U2 (C++ 13.3.3.2p3).
1718    if (ICS1.UserDefined.ConversionFunction ==
1719          ICS2.UserDefined.ConversionFunction)
1720      return CompareStandardConversionSequences(ICS1.UserDefined.After,
1721                                                ICS2.UserDefined.After);
1722  }
1723
1724  return ImplicitConversionSequence::Indistinguishable;
1725}
1726
1727// Per 13.3.3.2p3, compare the given standard conversion sequences to
1728// determine if one is a proper subset of the other.
1729static ImplicitConversionSequence::CompareKind
1730compareStandardConversionSubsets(ASTContext &Context,
1731                                 const StandardConversionSequence& SCS1,
1732                                 const StandardConversionSequence& SCS2) {
1733  ImplicitConversionSequence::CompareKind Result
1734    = ImplicitConversionSequence::Indistinguishable;
1735
1736  if (SCS1.Second != SCS2.Second) {
1737    if (SCS1.Second == ICK_Identity)
1738      Result = ImplicitConversionSequence::Better;
1739    else if (SCS2.Second == ICK_Identity)
1740      Result = ImplicitConversionSequence::Worse;
1741    else
1742      return ImplicitConversionSequence::Indistinguishable;
1743  } else if (!Context.hasSameType(SCS1.getToType(1), SCS2.getToType(1)))
1744    return ImplicitConversionSequence::Indistinguishable;
1745
1746  if (SCS1.Third == SCS2.Third) {
1747    return Context.hasSameType(SCS1.getToType(2), SCS2.getToType(2))? Result
1748                             : ImplicitConversionSequence::Indistinguishable;
1749  }
1750
1751  if (SCS1.Third == ICK_Identity)
1752    return Result == ImplicitConversionSequence::Worse
1753             ? ImplicitConversionSequence::Indistinguishable
1754             : ImplicitConversionSequence::Better;
1755
1756  if (SCS2.Third == ICK_Identity)
1757    return Result == ImplicitConversionSequence::Better
1758             ? ImplicitConversionSequence::Indistinguishable
1759             : ImplicitConversionSequence::Worse;
1760
1761  return ImplicitConversionSequence::Indistinguishable;
1762}
1763
1764/// CompareStandardConversionSequences - Compare two standard
1765/// conversion sequences to determine whether one is better than the
1766/// other or if they are indistinguishable (C++ 13.3.3.2p3).
1767ImplicitConversionSequence::CompareKind
1768Sema::CompareStandardConversionSequences(const StandardConversionSequence& SCS1,
1769                                         const StandardConversionSequence& SCS2)
1770{
1771  // Standard conversion sequence S1 is a better conversion sequence
1772  // than standard conversion sequence S2 if (C++ 13.3.3.2p3):
1773
1774  //  -- S1 is a proper subsequence of S2 (comparing the conversion
1775  //     sequences in the canonical form defined by 13.3.3.1.1,
1776  //     excluding any Lvalue Transformation; the identity conversion
1777  //     sequence is considered to be a subsequence of any
1778  //     non-identity conversion sequence) or, if not that,
1779  if (ImplicitConversionSequence::CompareKind CK
1780        = compareStandardConversionSubsets(Context, SCS1, SCS2))
1781    return CK;
1782
1783  //  -- the rank of S1 is better than the rank of S2 (by the rules
1784  //     defined below), or, if not that,
1785  ImplicitConversionRank Rank1 = SCS1.getRank();
1786  ImplicitConversionRank Rank2 = SCS2.getRank();
1787  if (Rank1 < Rank2)
1788    return ImplicitConversionSequence::Better;
1789  else if (Rank2 < Rank1)
1790    return ImplicitConversionSequence::Worse;
1791
1792  // (C++ 13.3.3.2p4): Two conversion sequences with the same rank
1793  // are indistinguishable unless one of the following rules
1794  // applies:
1795
1796  //   A conversion that is not a conversion of a pointer, or
1797  //   pointer to member, to bool is better than another conversion
1798  //   that is such a conversion.
1799  if (SCS1.isPointerConversionToBool() != SCS2.isPointerConversionToBool())
1800    return SCS2.isPointerConversionToBool()
1801             ? ImplicitConversionSequence::Better
1802             : ImplicitConversionSequence::Worse;
1803
1804  // C++ [over.ics.rank]p4b2:
1805  //
1806  //   If class B is derived directly or indirectly from class A,
1807  //   conversion of B* to A* is better than conversion of B* to
1808  //   void*, and conversion of A* to void* is better than conversion
1809  //   of B* to void*.
1810  bool SCS1ConvertsToVoid
1811    = SCS1.isPointerConversionToVoidPointer(Context);
1812  bool SCS2ConvertsToVoid
1813    = SCS2.isPointerConversionToVoidPointer(Context);
1814  if (SCS1ConvertsToVoid != SCS2ConvertsToVoid) {
1815    // Exactly one of the conversion sequences is a conversion to
1816    // a void pointer; it's the worse conversion.
1817    return SCS2ConvertsToVoid ? ImplicitConversionSequence::Better
1818                              : ImplicitConversionSequence::Worse;
1819  } else if (!SCS1ConvertsToVoid && !SCS2ConvertsToVoid) {
1820    // Neither conversion sequence converts to a void pointer; compare
1821    // their derived-to-base conversions.
1822    if (ImplicitConversionSequence::CompareKind DerivedCK
1823          = CompareDerivedToBaseConversions(SCS1, SCS2))
1824      return DerivedCK;
1825  } else if (SCS1ConvertsToVoid && SCS2ConvertsToVoid) {
1826    // Both conversion sequences are conversions to void
1827    // pointers. Compare the source types to determine if there's an
1828    // inheritance relationship in their sources.
1829    QualType FromType1 = SCS1.getFromType();
1830    QualType FromType2 = SCS2.getFromType();
1831
1832    // Adjust the types we're converting from via the array-to-pointer
1833    // conversion, if we need to.
1834    if (SCS1.First == ICK_Array_To_Pointer)
1835      FromType1 = Context.getArrayDecayedType(FromType1);
1836    if (SCS2.First == ICK_Array_To_Pointer)
1837      FromType2 = Context.getArrayDecayedType(FromType2);
1838
1839    QualType FromPointee1
1840      = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1841    QualType FromPointee2
1842      = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
1843
1844    if (IsDerivedFrom(FromPointee2, FromPointee1))
1845      return ImplicitConversionSequence::Better;
1846    else if (IsDerivedFrom(FromPointee1, FromPointee2))
1847      return ImplicitConversionSequence::Worse;
1848
1849    // Objective-C++: If one interface is more specific than the
1850    // other, it is the better one.
1851    const ObjCInterfaceType* FromIface1 = FromPointee1->getAs<ObjCInterfaceType>();
1852    const ObjCInterfaceType* FromIface2 = FromPointee2->getAs<ObjCInterfaceType>();
1853    if (FromIface1 && FromIface1) {
1854      if (Context.canAssignObjCInterfaces(FromIface2, FromIface1))
1855        return ImplicitConversionSequence::Better;
1856      else if (Context.canAssignObjCInterfaces(FromIface1, FromIface2))
1857        return ImplicitConversionSequence::Worse;
1858    }
1859  }
1860
1861  // Compare based on qualification conversions (C++ 13.3.3.2p3,
1862  // bullet 3).
1863  if (ImplicitConversionSequence::CompareKind QualCK
1864        = CompareQualificationConversions(SCS1, SCS2))
1865    return QualCK;
1866
1867  if (SCS1.ReferenceBinding && SCS2.ReferenceBinding) {
1868    // C++0x [over.ics.rank]p3b4:
1869    //   -- S1 and S2 are reference bindings (8.5.3) and neither refers to an
1870    //      implicit object parameter of a non-static member function declared
1871    //      without a ref-qualifier, and S1 binds an rvalue reference to an
1872    //      rvalue and S2 binds an lvalue reference.
1873    // FIXME: We don't know if we're dealing with the implicit object parameter,
1874    // or if the member function in this case has a ref qualifier.
1875    // (Of course, we don't have ref qualifiers yet.)
1876    if (SCS1.RRefBinding != SCS2.RRefBinding)
1877      return SCS1.RRefBinding ? ImplicitConversionSequence::Better
1878                              : ImplicitConversionSequence::Worse;
1879
1880    // C++ [over.ics.rank]p3b4:
1881    //   -- S1 and S2 are reference bindings (8.5.3), and the types to
1882    //      which the references refer are the same type except for
1883    //      top-level cv-qualifiers, and the type to which the reference
1884    //      initialized by S2 refers is more cv-qualified than the type
1885    //      to which the reference initialized by S1 refers.
1886    QualType T1 = SCS1.getToType(2);
1887    QualType T2 = SCS2.getToType(2);
1888    T1 = Context.getCanonicalType(T1);
1889    T2 = Context.getCanonicalType(T2);
1890    Qualifiers T1Quals, T2Quals;
1891    QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
1892    QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
1893    if (UnqualT1 == UnqualT2) {
1894      // If the type is an array type, promote the element qualifiers to the type
1895      // for comparison.
1896      if (isa<ArrayType>(T1) && T1Quals)
1897        T1 = Context.getQualifiedType(UnqualT1, T1Quals);
1898      if (isa<ArrayType>(T2) && T2Quals)
1899        T2 = Context.getQualifiedType(UnqualT2, T2Quals);
1900      if (T2.isMoreQualifiedThan(T1))
1901        return ImplicitConversionSequence::Better;
1902      else if (T1.isMoreQualifiedThan(T2))
1903        return ImplicitConversionSequence::Worse;
1904    }
1905  }
1906
1907  return ImplicitConversionSequence::Indistinguishable;
1908}
1909
1910/// CompareQualificationConversions - Compares two standard conversion
1911/// sequences to determine whether they can be ranked based on their
1912/// qualification conversions (C++ 13.3.3.2p3 bullet 3).
1913ImplicitConversionSequence::CompareKind
1914Sema::CompareQualificationConversions(const StandardConversionSequence& SCS1,
1915                                      const StandardConversionSequence& SCS2) {
1916  // C++ 13.3.3.2p3:
1917  //  -- S1 and S2 differ only in their qualification conversion and
1918  //     yield similar types T1 and T2 (C++ 4.4), respectively, and the
1919  //     cv-qualification signature of type T1 is a proper subset of
1920  //     the cv-qualification signature of type T2, and S1 is not the
1921  //     deprecated string literal array-to-pointer conversion (4.2).
1922  if (SCS1.First != SCS2.First || SCS1.Second != SCS2.Second ||
1923      SCS1.Third != SCS2.Third || SCS1.Third != ICK_Qualification)
1924    return ImplicitConversionSequence::Indistinguishable;
1925
1926  // FIXME: the example in the standard doesn't use a qualification
1927  // conversion (!)
1928  QualType T1 = SCS1.getToType(2);
1929  QualType T2 = SCS2.getToType(2);
1930  T1 = Context.getCanonicalType(T1);
1931  T2 = Context.getCanonicalType(T2);
1932  Qualifiers T1Quals, T2Quals;
1933  QualType UnqualT1 = Context.getUnqualifiedArrayType(T1, T1Quals);
1934  QualType UnqualT2 = Context.getUnqualifiedArrayType(T2, T2Quals);
1935
1936  // If the types are the same, we won't learn anything by unwrapped
1937  // them.
1938  if (UnqualT1 == UnqualT2)
1939    return ImplicitConversionSequence::Indistinguishable;
1940
1941  // If the type is an array type, promote the element qualifiers to the type
1942  // for comparison.
1943  if (isa<ArrayType>(T1) && T1Quals)
1944    T1 = Context.getQualifiedType(UnqualT1, T1Quals);
1945  if (isa<ArrayType>(T2) && T2Quals)
1946    T2 = Context.getQualifiedType(UnqualT2, T2Quals);
1947
1948  ImplicitConversionSequence::CompareKind Result
1949    = ImplicitConversionSequence::Indistinguishable;
1950  while (UnwrapSimilarPointerTypes(T1, T2)) {
1951    // Within each iteration of the loop, we check the qualifiers to
1952    // determine if this still looks like a qualification
1953    // conversion. Then, if all is well, we unwrap one more level of
1954    // pointers or pointers-to-members and do it all again
1955    // until there are no more pointers or pointers-to-members left
1956    // to unwrap. This essentially mimics what
1957    // IsQualificationConversion does, but here we're checking for a
1958    // strict subset of qualifiers.
1959    if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
1960      // The qualifiers are the same, so this doesn't tell us anything
1961      // about how the sequences rank.
1962      ;
1963    else if (T2.isMoreQualifiedThan(T1)) {
1964      // T1 has fewer qualifiers, so it could be the better sequence.
1965      if (Result == ImplicitConversionSequence::Worse)
1966        // Neither has qualifiers that are a subset of the other's
1967        // qualifiers.
1968        return ImplicitConversionSequence::Indistinguishable;
1969
1970      Result = ImplicitConversionSequence::Better;
1971    } else if (T1.isMoreQualifiedThan(T2)) {
1972      // T2 has fewer qualifiers, so it could be the better sequence.
1973      if (Result == ImplicitConversionSequence::Better)
1974        // Neither has qualifiers that are a subset of the other's
1975        // qualifiers.
1976        return ImplicitConversionSequence::Indistinguishable;
1977
1978      Result = ImplicitConversionSequence::Worse;
1979    } else {
1980      // Qualifiers are disjoint.
1981      return ImplicitConversionSequence::Indistinguishable;
1982    }
1983
1984    // If the types after this point are equivalent, we're done.
1985    if (Context.hasSameUnqualifiedType(T1, T2))
1986      break;
1987  }
1988
1989  // Check that the winning standard conversion sequence isn't using
1990  // the deprecated string literal array to pointer conversion.
1991  switch (Result) {
1992  case ImplicitConversionSequence::Better:
1993    if (SCS1.Deprecated)
1994      Result = ImplicitConversionSequence::Indistinguishable;
1995    break;
1996
1997  case ImplicitConversionSequence::Indistinguishable:
1998    break;
1999
2000  case ImplicitConversionSequence::Worse:
2001    if (SCS2.Deprecated)
2002      Result = ImplicitConversionSequence::Indistinguishable;
2003    break;
2004  }
2005
2006  return Result;
2007}
2008
2009/// CompareDerivedToBaseConversions - Compares two standard conversion
2010/// sequences to determine whether they can be ranked based on their
2011/// various kinds of derived-to-base conversions (C++
2012/// [over.ics.rank]p4b3).  As part of these checks, we also look at
2013/// conversions between Objective-C interface types.
2014ImplicitConversionSequence::CompareKind
2015Sema::CompareDerivedToBaseConversions(const StandardConversionSequence& SCS1,
2016                                      const StandardConversionSequence& SCS2) {
2017  QualType FromType1 = SCS1.getFromType();
2018  QualType ToType1 = SCS1.getToType(1);
2019  QualType FromType2 = SCS2.getFromType();
2020  QualType ToType2 = SCS2.getToType(1);
2021
2022  // Adjust the types we're converting from via the array-to-pointer
2023  // conversion, if we need to.
2024  if (SCS1.First == ICK_Array_To_Pointer)
2025    FromType1 = Context.getArrayDecayedType(FromType1);
2026  if (SCS2.First == ICK_Array_To_Pointer)
2027    FromType2 = Context.getArrayDecayedType(FromType2);
2028
2029  // Canonicalize all of the types.
2030  FromType1 = Context.getCanonicalType(FromType1);
2031  ToType1 = Context.getCanonicalType(ToType1);
2032  FromType2 = Context.getCanonicalType(FromType2);
2033  ToType2 = Context.getCanonicalType(ToType2);
2034
2035  // C++ [over.ics.rank]p4b3:
2036  //
2037  //   If class B is derived directly or indirectly from class A and
2038  //   class C is derived directly or indirectly from B,
2039  //
2040  // For Objective-C, we let A, B, and C also be Objective-C
2041  // interfaces.
2042
2043  // Compare based on pointer conversions.
2044  if (SCS1.Second == ICK_Pointer_Conversion &&
2045      SCS2.Second == ICK_Pointer_Conversion &&
2046      /*FIXME: Remove if Objective-C id conversions get their own rank*/
2047      FromType1->isPointerType() && FromType2->isPointerType() &&
2048      ToType1->isPointerType() && ToType2->isPointerType()) {
2049    QualType FromPointee1
2050      = FromType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
2051    QualType ToPointee1
2052      = ToType1->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
2053    QualType FromPointee2
2054      = FromType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
2055    QualType ToPointee2
2056      = ToType2->getAs<PointerType>()->getPointeeType().getUnqualifiedType();
2057
2058    const ObjCInterfaceType* FromIface1 = FromPointee1->getAs<ObjCInterfaceType>();
2059    const ObjCInterfaceType* FromIface2 = FromPointee2->getAs<ObjCInterfaceType>();
2060    const ObjCInterfaceType* ToIface1 = ToPointee1->getAs<ObjCInterfaceType>();
2061    const ObjCInterfaceType* ToIface2 = ToPointee2->getAs<ObjCInterfaceType>();
2062
2063    //   -- conversion of C* to B* is better than conversion of C* to A*,
2064    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
2065      if (IsDerivedFrom(ToPointee1, ToPointee2))
2066        return ImplicitConversionSequence::Better;
2067      else if (IsDerivedFrom(ToPointee2, ToPointee1))
2068        return ImplicitConversionSequence::Worse;
2069
2070      if (ToIface1 && ToIface2) {
2071        if (Context.canAssignObjCInterfaces(ToIface2, ToIface1))
2072          return ImplicitConversionSequence::Better;
2073        else if (Context.canAssignObjCInterfaces(ToIface1, ToIface2))
2074          return ImplicitConversionSequence::Worse;
2075      }
2076    }
2077
2078    //   -- conversion of B* to A* is better than conversion of C* to A*,
2079    if (FromPointee1 != FromPointee2 && ToPointee1 == ToPointee2) {
2080      if (IsDerivedFrom(FromPointee2, FromPointee1))
2081        return ImplicitConversionSequence::Better;
2082      else if (IsDerivedFrom(FromPointee1, FromPointee2))
2083        return ImplicitConversionSequence::Worse;
2084
2085      if (FromIface1 && FromIface2) {
2086        if (Context.canAssignObjCInterfaces(FromIface1, FromIface2))
2087          return ImplicitConversionSequence::Better;
2088        else if (Context.canAssignObjCInterfaces(FromIface2, FromIface1))
2089          return ImplicitConversionSequence::Worse;
2090      }
2091    }
2092  }
2093
2094  // Compare based on reference bindings.
2095  if (SCS1.ReferenceBinding && SCS2.ReferenceBinding &&
2096      SCS1.Second == ICK_Derived_To_Base) {
2097    //   -- binding of an expression of type C to a reference of type
2098    //      B& is better than binding an expression of type C to a
2099    //      reference of type A&,
2100    if (Context.hasSameUnqualifiedType(FromType1, FromType2) &&
2101        !Context.hasSameUnqualifiedType(ToType1, ToType2)) {
2102      if (IsDerivedFrom(ToType1, ToType2))
2103        return ImplicitConversionSequence::Better;
2104      else if (IsDerivedFrom(ToType2, ToType1))
2105        return ImplicitConversionSequence::Worse;
2106    }
2107
2108    //   -- binding of an expression of type B to a reference of type
2109    //      A& is better than binding an expression of type C to a
2110    //      reference of type A&,
2111    if (!Context.hasSameUnqualifiedType(FromType1, FromType2) &&
2112        Context.hasSameUnqualifiedType(ToType1, ToType2)) {
2113      if (IsDerivedFrom(FromType2, FromType1))
2114        return ImplicitConversionSequence::Better;
2115      else if (IsDerivedFrom(FromType1, FromType2))
2116        return ImplicitConversionSequence::Worse;
2117    }
2118  }
2119
2120  // Ranking of member-pointer types.
2121  if (SCS1.Second == ICK_Pointer_Member && SCS2.Second == ICK_Pointer_Member &&
2122      FromType1->isMemberPointerType() && FromType2->isMemberPointerType() &&
2123      ToType1->isMemberPointerType() && ToType2->isMemberPointerType()) {
2124    const MemberPointerType * FromMemPointer1 =
2125                                        FromType1->getAs<MemberPointerType>();
2126    const MemberPointerType * ToMemPointer1 =
2127                                          ToType1->getAs<MemberPointerType>();
2128    const MemberPointerType * FromMemPointer2 =
2129                                          FromType2->getAs<MemberPointerType>();
2130    const MemberPointerType * ToMemPointer2 =
2131                                          ToType2->getAs<MemberPointerType>();
2132    const Type *FromPointeeType1 = FromMemPointer1->getClass();
2133    const Type *ToPointeeType1 = ToMemPointer1->getClass();
2134    const Type *FromPointeeType2 = FromMemPointer2->getClass();
2135    const Type *ToPointeeType2 = ToMemPointer2->getClass();
2136    QualType FromPointee1 = QualType(FromPointeeType1, 0).getUnqualifiedType();
2137    QualType ToPointee1 = QualType(ToPointeeType1, 0).getUnqualifiedType();
2138    QualType FromPointee2 = QualType(FromPointeeType2, 0).getUnqualifiedType();
2139    QualType ToPointee2 = QualType(ToPointeeType2, 0).getUnqualifiedType();
2140    // conversion of A::* to B::* is better than conversion of A::* to C::*,
2141    if (FromPointee1 == FromPointee2 && ToPointee1 != ToPointee2) {
2142      if (IsDerivedFrom(ToPointee1, ToPointee2))
2143        return ImplicitConversionSequence::Worse;
2144      else if (IsDerivedFrom(ToPointee2, ToPointee1))
2145        return ImplicitConversionSequence::Better;
2146    }
2147    // conversion of B::* to C::* is better than conversion of A::* to C::*
2148    if (ToPointee1 == ToPointee2 && FromPointee1 != FromPointee2) {
2149      if (IsDerivedFrom(FromPointee1, FromPointee2))
2150        return ImplicitConversionSequence::Better;
2151      else if (IsDerivedFrom(FromPointee2, FromPointee1))
2152        return ImplicitConversionSequence::Worse;
2153    }
2154  }
2155
2156  if (SCS1.CopyConstructor && SCS2.CopyConstructor &&
2157      SCS1.Second == ICK_Derived_To_Base) {
2158    //   -- conversion of C to B is better than conversion of C to A,
2159    if (Context.hasSameUnqualifiedType(FromType1, FromType2) &&
2160        !Context.hasSameUnqualifiedType(ToType1, ToType2)) {
2161      if (IsDerivedFrom(ToType1, ToType2))
2162        return ImplicitConversionSequence::Better;
2163      else if (IsDerivedFrom(ToType2, ToType1))
2164        return ImplicitConversionSequence::Worse;
2165    }
2166
2167    //   -- conversion of B to A is better than conversion of C to A.
2168    if (!Context.hasSameUnqualifiedType(FromType1, FromType2) &&
2169        Context.hasSameUnqualifiedType(ToType1, ToType2)) {
2170      if (IsDerivedFrom(FromType2, FromType1))
2171        return ImplicitConversionSequence::Better;
2172      else if (IsDerivedFrom(FromType1, FromType2))
2173        return ImplicitConversionSequence::Worse;
2174    }
2175  }
2176
2177  return ImplicitConversionSequence::Indistinguishable;
2178}
2179
2180/// TryCopyInitialization - Try to copy-initialize a value of type
2181/// ToType from the expression From. Return the implicit conversion
2182/// sequence required to pass this argument, which may be a bad
2183/// conversion sequence (meaning that the argument cannot be passed to
2184/// a parameter of this type). If @p SuppressUserConversions, then we
2185/// do not permit any user-defined conversion sequences. If @p ForceRValue,
2186/// then we treat @p From as an rvalue, even if it is an lvalue.
2187ImplicitConversionSequence
2188Sema::TryCopyInitialization(Expr *From, QualType ToType,
2189                            bool SuppressUserConversions, bool ForceRValue,
2190                            bool InOverloadResolution) {
2191  if (ToType->isReferenceType()) {
2192    ImplicitConversionSequence ICS;
2193    ICS.Bad.init(BadConversionSequence::no_conversion, From, ToType);
2194    CheckReferenceInit(From, ToType,
2195                       /*FIXME:*/From->getLocStart(),
2196                       SuppressUserConversions,
2197                       /*AllowExplicit=*/false,
2198                       ForceRValue,
2199                       &ICS);
2200    return ICS;
2201  } else {
2202    return TryImplicitConversion(From, ToType,
2203                                 SuppressUserConversions,
2204                                 /*AllowExplicit=*/false,
2205                                 ForceRValue,
2206                                 InOverloadResolution);
2207  }
2208}
2209
2210/// PerformCopyInitialization - Copy-initialize an object of type @p ToType with
2211/// the expression @p From. Returns true (and emits a diagnostic) if there was
2212/// an error, returns false if the initialization succeeded. Elidable should
2213/// be true when the copy may be elided (C++ 12.8p15). Overload resolution works
2214/// differently in C++0x for this case.
2215bool Sema::PerformCopyInitialization(Expr *&From, QualType ToType,
2216                                     AssignmentAction Action, bool Elidable) {
2217  if (!getLangOptions().CPlusPlus) {
2218    // In C, argument passing is the same as performing an assignment.
2219    QualType FromType = From->getType();
2220
2221    AssignConvertType ConvTy =
2222      CheckSingleAssignmentConstraints(ToType, From);
2223    if (ConvTy != Compatible &&
2224        CheckTransparentUnionArgumentConstraints(ToType, From) == Compatible)
2225      ConvTy = Compatible;
2226
2227    return DiagnoseAssignmentResult(ConvTy, From->getLocStart(), ToType,
2228                                    FromType, From, Action);
2229  }
2230
2231  if (ToType->isReferenceType())
2232    return CheckReferenceInit(From, ToType,
2233                              /*FIXME:*/From->getLocStart(),
2234                              /*SuppressUserConversions=*/false,
2235                              /*AllowExplicit=*/false,
2236                              /*ForceRValue=*/false);
2237
2238  if (!PerformImplicitConversion(From, ToType, Action,
2239                                 /*AllowExplicit=*/false, Elidable))
2240    return false;
2241  if (!DiagnoseMultipleUserDefinedConversion(From, ToType))
2242    return Diag(From->getSourceRange().getBegin(),
2243                diag::err_typecheck_convert_incompatible)
2244      << ToType << From->getType() << Action << From->getSourceRange();
2245  return true;
2246}
2247
2248/// TryObjectArgumentInitialization - Try to initialize the object
2249/// parameter of the given member function (@c Method) from the
2250/// expression @p From.
2251ImplicitConversionSequence
2252Sema::TryObjectArgumentInitialization(QualType OrigFromType,
2253                                      CXXMethodDecl *Method,
2254                                      CXXRecordDecl *ActingContext) {
2255  QualType ClassType = Context.getTypeDeclType(ActingContext);
2256  // [class.dtor]p2: A destructor can be invoked for a const, volatile or
2257  //                 const volatile object.
2258  unsigned Quals = isa<CXXDestructorDecl>(Method) ?
2259    Qualifiers::Const | Qualifiers::Volatile : Method->getTypeQualifiers();
2260  QualType ImplicitParamType =  Context.getCVRQualifiedType(ClassType, Quals);
2261
2262  // Set up the conversion sequence as a "bad" conversion, to allow us
2263  // to exit early.
2264  ImplicitConversionSequence ICS;
2265  ICS.Standard.setAsIdentityConversion();
2266  ICS.setBad();
2267
2268  // We need to have an object of class type.
2269  QualType FromType = OrigFromType;
2270  if (const PointerType *PT = FromType->getAs<PointerType>())
2271    FromType = PT->getPointeeType();
2272
2273  assert(FromType->isRecordType());
2274
2275  // The implicit object parameter is has the type "reference to cv X",
2276  // where X is the class of which the function is a member
2277  // (C++ [over.match.funcs]p4). However, when finding an implicit
2278  // conversion sequence for the argument, we are not allowed to
2279  // create temporaries or perform user-defined conversions
2280  // (C++ [over.match.funcs]p5). We perform a simplified version of
2281  // reference binding here, that allows class rvalues to bind to
2282  // non-constant references.
2283
2284  // First check the qualifiers. We don't care about lvalue-vs-rvalue
2285  // with the implicit object parameter (C++ [over.match.funcs]p5).
2286  QualType FromTypeCanon = Context.getCanonicalType(FromType);
2287  if (ImplicitParamType.getCVRQualifiers()
2288                                    != FromTypeCanon.getLocalCVRQualifiers() &&
2289      !ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
2290    ICS.Bad.init(BadConversionSequence::bad_qualifiers,
2291                 OrigFromType, ImplicitParamType);
2292    return ICS;
2293  }
2294
2295  // Check that we have either the same type or a derived type. It
2296  // affects the conversion rank.
2297  QualType ClassTypeCanon = Context.getCanonicalType(ClassType);
2298  if (ClassTypeCanon == FromTypeCanon.getLocalUnqualifiedType())
2299    ICS.Standard.Second = ICK_Identity;
2300  else if (IsDerivedFrom(FromType, ClassType))
2301    ICS.Standard.Second = ICK_Derived_To_Base;
2302  else {
2303    ICS.Bad.init(BadConversionSequence::unrelated_class, FromType, ImplicitParamType);
2304    return ICS;
2305  }
2306
2307  // Success. Mark this as a reference binding.
2308  ICS.setStandard();
2309  ICS.Standard.setFromType(FromType);
2310  ICS.Standard.setAllToTypes(ImplicitParamType);
2311  ICS.Standard.ReferenceBinding = true;
2312  ICS.Standard.DirectBinding = true;
2313  ICS.Standard.RRefBinding = false;
2314  return ICS;
2315}
2316
2317/// PerformObjectArgumentInitialization - Perform initialization of
2318/// the implicit object parameter for the given Method with the given
2319/// expression.
2320bool
2321Sema::PerformObjectArgumentInitialization(Expr *&From, CXXMethodDecl *Method) {
2322  QualType FromRecordType, DestType;
2323  QualType ImplicitParamRecordType  =
2324    Method->getThisType(Context)->getAs<PointerType>()->getPointeeType();
2325
2326  if (const PointerType *PT = From->getType()->getAs<PointerType>()) {
2327    FromRecordType = PT->getPointeeType();
2328    DestType = Method->getThisType(Context);
2329  } else {
2330    FromRecordType = From->getType();
2331    DestType = ImplicitParamRecordType;
2332  }
2333
2334  // Note that we always use the true parent context when performing
2335  // the actual argument initialization.
2336  ImplicitConversionSequence ICS
2337    = TryObjectArgumentInitialization(From->getType(), Method,
2338                                      Method->getParent());
2339  if (ICS.isBad())
2340    return Diag(From->getSourceRange().getBegin(),
2341                diag::err_implicit_object_parameter_init)
2342       << ImplicitParamRecordType << FromRecordType << From->getSourceRange();
2343
2344  if (ICS.Standard.Second == ICK_Derived_To_Base &&
2345      CheckDerivedToBaseConversion(FromRecordType,
2346                                   ImplicitParamRecordType,
2347                                   From->getSourceRange().getBegin(),
2348                                   From->getSourceRange()))
2349    return true;
2350
2351  ImpCastExprToType(From, DestType, CastExpr::CK_DerivedToBase,
2352                    /*isLvalue=*/true);
2353  return false;
2354}
2355
2356/// TryContextuallyConvertToBool - Attempt to contextually convert the
2357/// expression From to bool (C++0x [conv]p3).
2358ImplicitConversionSequence Sema::TryContextuallyConvertToBool(Expr *From) {
2359  return TryImplicitConversion(From, Context.BoolTy,
2360                               // FIXME: Are these flags correct?
2361                               /*SuppressUserConversions=*/false,
2362                               /*AllowExplicit=*/true,
2363                               /*ForceRValue=*/false,
2364                               /*InOverloadResolution=*/false);
2365}
2366
2367/// PerformContextuallyConvertToBool - Perform a contextual conversion
2368/// of the expression From to bool (C++0x [conv]p3).
2369bool Sema::PerformContextuallyConvertToBool(Expr *&From) {
2370  ImplicitConversionSequence ICS = TryContextuallyConvertToBool(From);
2371  if (!ICS.isBad())
2372    return PerformImplicitConversion(From, Context.BoolTy, ICS, AA_Converting);
2373
2374  if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))
2375    return  Diag(From->getSourceRange().getBegin(),
2376                 diag::err_typecheck_bool_condition)
2377                  << From->getType() << From->getSourceRange();
2378  return true;
2379}
2380
2381/// AddOverloadCandidate - Adds the given function to the set of
2382/// candidate functions, using the given function call arguments.  If
2383/// @p SuppressUserConversions, then don't allow user-defined
2384/// conversions via constructors or conversion operators.
2385/// If @p ForceRValue, treat all arguments as rvalues. This is a slightly
2386/// hacky way to implement the overloading rules for elidable copy
2387/// initialization in C++0x (C++0x 12.8p15).
2388///
2389/// \para PartialOverloading true if we are performing "partial" overloading
2390/// based on an incomplete set of function arguments. This feature is used by
2391/// code completion.
2392void
2393Sema::AddOverloadCandidate(FunctionDecl *Function,
2394                           AccessSpecifier Access,
2395                           Expr **Args, unsigned NumArgs,
2396                           OverloadCandidateSet& CandidateSet,
2397                           bool SuppressUserConversions,
2398                           bool ForceRValue,
2399                           bool PartialOverloading) {
2400  const FunctionProtoType* Proto
2401    = dyn_cast<FunctionProtoType>(Function->getType()->getAs<FunctionType>());
2402  assert(Proto && "Functions without a prototype cannot be overloaded");
2403  assert(!Function->getDescribedFunctionTemplate() &&
2404         "Use AddTemplateOverloadCandidate for function templates");
2405
2406  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
2407    if (!isa<CXXConstructorDecl>(Method)) {
2408      // If we get here, it's because we're calling a member function
2409      // that is named without a member access expression (e.g.,
2410      // "this->f") that was either written explicitly or created
2411      // implicitly. This can happen with a qualified call to a member
2412      // function, e.g., X::f(). We use an empty type for the implied
2413      // object argument (C++ [over.call.func]p3), and the acting context
2414      // is irrelevant.
2415      AddMethodCandidate(Method, Access, Method->getParent(),
2416                         QualType(), Args, NumArgs, CandidateSet,
2417                         SuppressUserConversions, ForceRValue);
2418      return;
2419    }
2420    // We treat a constructor like a non-member function, since its object
2421    // argument doesn't participate in overload resolution.
2422  }
2423
2424  if (!CandidateSet.isNewCandidate(Function))
2425    return;
2426
2427  // Overload resolution is always an unevaluated context.
2428  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2429
2430  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
2431    // C++ [class.copy]p3:
2432    //   A member function template is never instantiated to perform the copy
2433    //   of a class object to an object of its class type.
2434    QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
2435    if (NumArgs == 1 &&
2436        Constructor->isCopyConstructorLikeSpecialization() &&
2437        Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()))
2438      return;
2439  }
2440
2441  // Add this candidate
2442  CandidateSet.push_back(OverloadCandidate());
2443  OverloadCandidate& Candidate = CandidateSet.back();
2444  Candidate.Function = Function;
2445  Candidate.Access = Access;
2446  Candidate.Viable = true;
2447  Candidate.IsSurrogate = false;
2448  Candidate.IgnoreObjectArgument = false;
2449
2450  unsigned NumArgsInProto = Proto->getNumArgs();
2451
2452  // (C++ 13.3.2p2): A candidate function having fewer than m
2453  // parameters is viable only if it has an ellipsis in its parameter
2454  // list (8.3.5).
2455  if ((NumArgs + (PartialOverloading && NumArgs)) > NumArgsInProto &&
2456      !Proto->isVariadic()) {
2457    Candidate.Viable = false;
2458    Candidate.FailureKind = ovl_fail_too_many_arguments;
2459    return;
2460  }
2461
2462  // (C++ 13.3.2p2): A candidate function having more than m parameters
2463  // is viable only if the (m+1)st parameter has a default argument
2464  // (8.3.6). For the purposes of overload resolution, the
2465  // parameter list is truncated on the right, so that there are
2466  // exactly m parameters.
2467  unsigned MinRequiredArgs = Function->getMinRequiredArguments();
2468  if (NumArgs < MinRequiredArgs && !PartialOverloading) {
2469    // Not enough arguments.
2470    Candidate.Viable = false;
2471    Candidate.FailureKind = ovl_fail_too_few_arguments;
2472    return;
2473  }
2474
2475  // Determine the implicit conversion sequences for each of the
2476  // arguments.
2477  Candidate.Conversions.resize(NumArgs);
2478  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2479    if (ArgIdx < NumArgsInProto) {
2480      // (C++ 13.3.2p3): for F to be a viable function, there shall
2481      // exist for each argument an implicit conversion sequence
2482      // (13.3.3.1) that converts that argument to the corresponding
2483      // parameter of F.
2484      QualType ParamType = Proto->getArgType(ArgIdx);
2485      Candidate.Conversions[ArgIdx]
2486        = TryCopyInitialization(Args[ArgIdx], ParamType,
2487                                SuppressUserConversions, ForceRValue,
2488                                /*InOverloadResolution=*/true);
2489      if (Candidate.Conversions[ArgIdx].isBad()) {
2490        Candidate.Viable = false;
2491        Candidate.FailureKind = ovl_fail_bad_conversion;
2492        break;
2493      }
2494    } else {
2495      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2496      // argument for which there is no corresponding parameter is
2497      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2498      Candidate.Conversions[ArgIdx].setEllipsis();
2499    }
2500  }
2501}
2502
2503/// \brief Add all of the function declarations in the given function set to
2504/// the overload canddiate set.
2505void Sema::AddFunctionCandidates(const UnresolvedSetImpl &Fns,
2506                                 Expr **Args, unsigned NumArgs,
2507                                 OverloadCandidateSet& CandidateSet,
2508                                 bool SuppressUserConversions) {
2509  for (UnresolvedSetIterator F = Fns.begin(), E = Fns.end(); F != E; ++F) {
2510    // FIXME: using declarations
2511    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*F)) {
2512      if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
2513        AddMethodCandidate(cast<CXXMethodDecl>(FD), F.getAccess(),
2514                           cast<CXXMethodDecl>(FD)->getParent(),
2515                           Args[0]->getType(), Args + 1, NumArgs - 1,
2516                           CandidateSet, SuppressUserConversions);
2517      else
2518        AddOverloadCandidate(FD, AS_none, Args, NumArgs, CandidateSet,
2519                             SuppressUserConversions);
2520    } else {
2521      FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(*F);
2522      if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
2523          !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
2524        AddMethodTemplateCandidate(FunTmpl, F.getAccess(),
2525                              cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
2526                                   /*FIXME: explicit args */ 0,
2527                                   Args[0]->getType(), Args + 1, NumArgs - 1,
2528                                   CandidateSet,
2529                                   SuppressUserConversions);
2530      else
2531        AddTemplateOverloadCandidate(FunTmpl, AS_none,
2532                                     /*FIXME: explicit args */ 0,
2533                                     Args, NumArgs, CandidateSet,
2534                                     SuppressUserConversions);
2535    }
2536  }
2537}
2538
2539/// AddMethodCandidate - Adds a named decl (which is some kind of
2540/// method) as a method candidate to the given overload set.
2541void Sema::AddMethodCandidate(NamedDecl *Decl,
2542                              AccessSpecifier Access,
2543                              QualType ObjectType,
2544                              Expr **Args, unsigned NumArgs,
2545                              OverloadCandidateSet& CandidateSet,
2546                              bool SuppressUserConversions, bool ForceRValue) {
2547  CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
2548
2549  if (isa<UsingShadowDecl>(Decl))
2550    Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
2551
2552  if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
2553    assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
2554           "Expected a member function template");
2555    AddMethodTemplateCandidate(TD, Access, ActingContext, /*ExplicitArgs*/ 0,
2556                               ObjectType, Args, NumArgs,
2557                               CandidateSet,
2558                               SuppressUserConversions,
2559                               ForceRValue);
2560  } else {
2561    AddMethodCandidate(cast<CXXMethodDecl>(Decl), Access, ActingContext,
2562                       ObjectType, Args, NumArgs,
2563                       CandidateSet, SuppressUserConversions, ForceRValue);
2564  }
2565}
2566
2567/// AddMethodCandidate - Adds the given C++ member function to the set
2568/// of candidate functions, using the given function call arguments
2569/// and the object argument (@c Object). For example, in a call
2570/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
2571/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
2572/// allow user-defined conversions via constructors or conversion
2573/// operators. If @p ForceRValue, treat all arguments as rvalues. This is
2574/// a slightly hacky way to implement the overloading rules for elidable copy
2575/// initialization in C++0x (C++0x 12.8p15).
2576void
2577Sema::AddMethodCandidate(CXXMethodDecl *Method, AccessSpecifier Access,
2578                         CXXRecordDecl *ActingContext, QualType ObjectType,
2579                         Expr **Args, unsigned NumArgs,
2580                         OverloadCandidateSet& CandidateSet,
2581                         bool SuppressUserConversions, bool ForceRValue) {
2582  const FunctionProtoType* Proto
2583    = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
2584  assert(Proto && "Methods without a prototype cannot be overloaded");
2585  assert(!isa<CXXConstructorDecl>(Method) &&
2586         "Use AddOverloadCandidate for constructors");
2587
2588  if (!CandidateSet.isNewCandidate(Method))
2589    return;
2590
2591  // Overload resolution is always an unevaluated context.
2592  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2593
2594  // Add this candidate
2595  CandidateSet.push_back(OverloadCandidate());
2596  OverloadCandidate& Candidate = CandidateSet.back();
2597  Candidate.Function = Method;
2598  Candidate.Access = Access;
2599  Candidate.IsSurrogate = false;
2600  Candidate.IgnoreObjectArgument = false;
2601
2602  unsigned NumArgsInProto = Proto->getNumArgs();
2603
2604  // (C++ 13.3.2p2): A candidate function having fewer than m
2605  // parameters is viable only if it has an ellipsis in its parameter
2606  // list (8.3.5).
2607  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
2608    Candidate.Viable = false;
2609    Candidate.FailureKind = ovl_fail_too_many_arguments;
2610    return;
2611  }
2612
2613  // (C++ 13.3.2p2): A candidate function having more than m parameters
2614  // is viable only if the (m+1)st parameter has a default argument
2615  // (8.3.6). For the purposes of overload resolution, the
2616  // parameter list is truncated on the right, so that there are
2617  // exactly m parameters.
2618  unsigned MinRequiredArgs = Method->getMinRequiredArguments();
2619  if (NumArgs < MinRequiredArgs) {
2620    // Not enough arguments.
2621    Candidate.Viable = false;
2622    Candidate.FailureKind = ovl_fail_too_few_arguments;
2623    return;
2624  }
2625
2626  Candidate.Viable = true;
2627  Candidate.Conversions.resize(NumArgs + 1);
2628
2629  if (Method->isStatic() || ObjectType.isNull())
2630    // The implicit object argument is ignored.
2631    Candidate.IgnoreObjectArgument = true;
2632  else {
2633    // Determine the implicit conversion sequence for the object
2634    // parameter.
2635    Candidate.Conversions[0]
2636      = TryObjectArgumentInitialization(ObjectType, Method, ActingContext);
2637    if (Candidate.Conversions[0].isBad()) {
2638      Candidate.Viable = false;
2639      Candidate.FailureKind = ovl_fail_bad_conversion;
2640      return;
2641    }
2642  }
2643
2644  // Determine the implicit conversion sequences for each of the
2645  // arguments.
2646  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2647    if (ArgIdx < NumArgsInProto) {
2648      // (C++ 13.3.2p3): for F to be a viable function, there shall
2649      // exist for each argument an implicit conversion sequence
2650      // (13.3.3.1) that converts that argument to the corresponding
2651      // parameter of F.
2652      QualType ParamType = Proto->getArgType(ArgIdx);
2653      Candidate.Conversions[ArgIdx + 1]
2654        = TryCopyInitialization(Args[ArgIdx], ParamType,
2655                                SuppressUserConversions, ForceRValue,
2656                                /*InOverloadResolution=*/true);
2657      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
2658        Candidate.Viable = false;
2659        Candidate.FailureKind = ovl_fail_bad_conversion;
2660        break;
2661      }
2662    } else {
2663      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2664      // argument for which there is no corresponding parameter is
2665      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2666      Candidate.Conversions[ArgIdx + 1].setEllipsis();
2667    }
2668  }
2669}
2670
2671/// \brief Add a C++ member function template as a candidate to the candidate
2672/// set, using template argument deduction to produce an appropriate member
2673/// function template specialization.
2674void
2675Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
2676                                 AccessSpecifier Access,
2677                                 CXXRecordDecl *ActingContext,
2678                        const TemplateArgumentListInfo *ExplicitTemplateArgs,
2679                                 QualType ObjectType,
2680                                 Expr **Args, unsigned NumArgs,
2681                                 OverloadCandidateSet& CandidateSet,
2682                                 bool SuppressUserConversions,
2683                                 bool ForceRValue) {
2684  if (!CandidateSet.isNewCandidate(MethodTmpl))
2685    return;
2686
2687  // C++ [over.match.funcs]p7:
2688  //   In each case where a candidate is a function template, candidate
2689  //   function template specializations are generated using template argument
2690  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
2691  //   candidate functions in the usual way.113) A given name can refer to one
2692  //   or more function templates and also to a set of overloaded non-template
2693  //   functions. In such a case, the candidate functions generated from each
2694  //   function template are combined with the set of non-template candidate
2695  //   functions.
2696  TemplateDeductionInfo Info(Context);
2697  FunctionDecl *Specialization = 0;
2698  if (TemplateDeductionResult Result
2699      = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs,
2700                                Args, NumArgs, Specialization, Info)) {
2701        // FIXME: Record what happened with template argument deduction, so
2702        // that we can give the user a beautiful diagnostic.
2703        (void)Result;
2704        return;
2705      }
2706
2707  // Add the function template specialization produced by template argument
2708  // deduction as a candidate.
2709  assert(Specialization && "Missing member function template specialization?");
2710  assert(isa<CXXMethodDecl>(Specialization) &&
2711         "Specialization is not a member function?");
2712  AddMethodCandidate(cast<CXXMethodDecl>(Specialization), Access,
2713                     ActingContext, ObjectType, Args, NumArgs,
2714                     CandidateSet, SuppressUserConversions, ForceRValue);
2715}
2716
2717/// \brief Add a C++ function template specialization as a candidate
2718/// in the candidate set, using template argument deduction to produce
2719/// an appropriate function template specialization.
2720void
2721Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
2722                                   AccessSpecifier Access,
2723                        const TemplateArgumentListInfo *ExplicitTemplateArgs,
2724                                   Expr **Args, unsigned NumArgs,
2725                                   OverloadCandidateSet& CandidateSet,
2726                                   bool SuppressUserConversions,
2727                                   bool ForceRValue) {
2728  if (!CandidateSet.isNewCandidate(FunctionTemplate))
2729    return;
2730
2731  // C++ [over.match.funcs]p7:
2732  //   In each case where a candidate is a function template, candidate
2733  //   function template specializations are generated using template argument
2734  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
2735  //   candidate functions in the usual way.113) A given name can refer to one
2736  //   or more function templates and also to a set of overloaded non-template
2737  //   functions. In such a case, the candidate functions generated from each
2738  //   function template are combined with the set of non-template candidate
2739  //   functions.
2740  TemplateDeductionInfo Info(Context);
2741  FunctionDecl *Specialization = 0;
2742  if (TemplateDeductionResult Result
2743        = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
2744                                  Args, NumArgs, Specialization, Info)) {
2745    CandidateSet.push_back(OverloadCandidate());
2746    OverloadCandidate &Candidate = CandidateSet.back();
2747    Candidate.Function = FunctionTemplate->getTemplatedDecl();
2748    Candidate.Access = Access;
2749    Candidate.Viable = false;
2750    Candidate.FailureKind = ovl_fail_bad_deduction;
2751    Candidate.IsSurrogate = false;
2752    Candidate.IgnoreObjectArgument = false;
2753
2754    // TODO: record more information about failed template arguments
2755    Candidate.DeductionFailure.Result = Result;
2756    Candidate.DeductionFailure.TemplateParameter = Info.Param.getOpaqueValue();
2757    return;
2758  }
2759
2760  // Add the function template specialization produced by template argument
2761  // deduction as a candidate.
2762  assert(Specialization && "Missing function template specialization?");
2763  AddOverloadCandidate(Specialization, Access, Args, NumArgs, CandidateSet,
2764                       SuppressUserConversions, ForceRValue);
2765}
2766
2767/// AddConversionCandidate - Add a C++ conversion function as a
2768/// candidate in the candidate set (C++ [over.match.conv],
2769/// C++ [over.match.copy]). From is the expression we're converting from,
2770/// and ToType is the type that we're eventually trying to convert to
2771/// (which may or may not be the same type as the type that the
2772/// conversion function produces).
2773void
2774Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
2775                             AccessSpecifier Access,
2776                             CXXRecordDecl *ActingContext,
2777                             Expr *From, QualType ToType,
2778                             OverloadCandidateSet& CandidateSet) {
2779  assert(!Conversion->getDescribedFunctionTemplate() &&
2780         "Conversion function templates use AddTemplateConversionCandidate");
2781
2782  if (!CandidateSet.isNewCandidate(Conversion))
2783    return;
2784
2785  // Overload resolution is always an unevaluated context.
2786  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2787
2788  // Add this candidate
2789  CandidateSet.push_back(OverloadCandidate());
2790  OverloadCandidate& Candidate = CandidateSet.back();
2791  Candidate.Function = Conversion;
2792  Candidate.Access = Access;
2793  Candidate.IsSurrogate = false;
2794  Candidate.IgnoreObjectArgument = false;
2795  Candidate.FinalConversion.setAsIdentityConversion();
2796  Candidate.FinalConversion.setFromType(Conversion->getConversionType());
2797  Candidate.FinalConversion.setAllToTypes(ToType);
2798
2799  // Determine the implicit conversion sequence for the implicit
2800  // object parameter.
2801  Candidate.Viable = true;
2802  Candidate.Conversions.resize(1);
2803  Candidate.Conversions[0]
2804    = TryObjectArgumentInitialization(From->getType(), Conversion,
2805                                      ActingContext);
2806  // Conversion functions to a different type in the base class is visible in
2807  // the derived class.  So, a derived to base conversion should not participate
2808  // in overload resolution.
2809  if (Candidate.Conversions[0].Standard.Second == ICK_Derived_To_Base)
2810    Candidate.Conversions[0].Standard.Second = ICK_Identity;
2811  if (Candidate.Conversions[0].isBad()) {
2812    Candidate.Viable = false;
2813    Candidate.FailureKind = ovl_fail_bad_conversion;
2814    return;
2815  }
2816
2817  // We won't go through a user-define type conversion function to convert a
2818  // derived to base as such conversions are given Conversion Rank. They only
2819  // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
2820  QualType FromCanon
2821    = Context.getCanonicalType(From->getType().getUnqualifiedType());
2822  QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
2823  if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
2824    Candidate.Viable = false;
2825    Candidate.FailureKind = ovl_fail_trivial_conversion;
2826    return;
2827  }
2828
2829
2830  // To determine what the conversion from the result of calling the
2831  // conversion function to the type we're eventually trying to
2832  // convert to (ToType), we need to synthesize a call to the
2833  // conversion function and attempt copy initialization from it. This
2834  // makes sure that we get the right semantics with respect to
2835  // lvalues/rvalues and the type. Fortunately, we can allocate this
2836  // call on the stack and we don't need its arguments to be
2837  // well-formed.
2838  DeclRefExpr ConversionRef(Conversion, Conversion->getType(),
2839                            From->getLocStart());
2840  ImplicitCastExpr ConversionFn(Context.getPointerType(Conversion->getType()),
2841                                CastExpr::CK_FunctionToPointerDecay,
2842                                &ConversionRef, false);
2843
2844  // Note that it is safe to allocate CallExpr on the stack here because
2845  // there are 0 arguments (i.e., nothing is allocated using ASTContext's
2846  // allocator).
2847  CallExpr Call(Context, &ConversionFn, 0, 0,
2848                Conversion->getConversionType().getNonReferenceType(),
2849                From->getLocStart());
2850  ImplicitConversionSequence ICS =
2851    TryCopyInitialization(&Call, ToType,
2852                          /*SuppressUserConversions=*/true,
2853                          /*ForceRValue=*/false,
2854                          /*InOverloadResolution=*/false);
2855
2856  switch (ICS.getKind()) {
2857  case ImplicitConversionSequence::StandardConversion:
2858    Candidate.FinalConversion = ICS.Standard;
2859    break;
2860
2861  case ImplicitConversionSequence::BadConversion:
2862    Candidate.Viable = false;
2863    Candidate.FailureKind = ovl_fail_bad_final_conversion;
2864    break;
2865
2866  default:
2867    assert(false &&
2868           "Can only end up with a standard conversion sequence or failure");
2869  }
2870}
2871
2872/// \brief Adds a conversion function template specialization
2873/// candidate to the overload set, using template argument deduction
2874/// to deduce the template arguments of the conversion function
2875/// template from the type that we are converting to (C++
2876/// [temp.deduct.conv]).
2877void
2878Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
2879                                     AccessSpecifier Access,
2880                                     CXXRecordDecl *ActingDC,
2881                                     Expr *From, QualType ToType,
2882                                     OverloadCandidateSet &CandidateSet) {
2883  assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
2884         "Only conversion function templates permitted here");
2885
2886  if (!CandidateSet.isNewCandidate(FunctionTemplate))
2887    return;
2888
2889  TemplateDeductionInfo Info(Context);
2890  CXXConversionDecl *Specialization = 0;
2891  if (TemplateDeductionResult Result
2892        = DeduceTemplateArguments(FunctionTemplate, ToType,
2893                                  Specialization, Info)) {
2894    // FIXME: Record what happened with template argument deduction, so
2895    // that we can give the user a beautiful diagnostic.
2896    (void)Result;
2897    return;
2898  }
2899
2900  // Add the conversion function template specialization produced by
2901  // template argument deduction as a candidate.
2902  assert(Specialization && "Missing function template specialization?");
2903  AddConversionCandidate(Specialization, Access, ActingDC, From, ToType,
2904                         CandidateSet);
2905}
2906
2907/// AddSurrogateCandidate - Adds a "surrogate" candidate function that
2908/// converts the given @c Object to a function pointer via the
2909/// conversion function @c Conversion, and then attempts to call it
2910/// with the given arguments (C++ [over.call.object]p2-4). Proto is
2911/// the type of function that we'll eventually be calling.
2912void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
2913                                 AccessSpecifier Access,
2914                                 CXXRecordDecl *ActingContext,
2915                                 const FunctionProtoType *Proto,
2916                                 QualType ObjectType,
2917                                 Expr **Args, unsigned NumArgs,
2918                                 OverloadCandidateSet& CandidateSet) {
2919  if (!CandidateSet.isNewCandidate(Conversion))
2920    return;
2921
2922  // Overload resolution is always an unevaluated context.
2923  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2924
2925  CandidateSet.push_back(OverloadCandidate());
2926  OverloadCandidate& Candidate = CandidateSet.back();
2927  Candidate.Function = 0;
2928  Candidate.Access = Access;
2929  Candidate.Surrogate = Conversion;
2930  Candidate.Viable = true;
2931  Candidate.IsSurrogate = true;
2932  Candidate.IgnoreObjectArgument = false;
2933  Candidate.Conversions.resize(NumArgs + 1);
2934
2935  // Determine the implicit conversion sequence for the implicit
2936  // object parameter.
2937  ImplicitConversionSequence ObjectInit
2938    = TryObjectArgumentInitialization(ObjectType, Conversion, ActingContext);
2939  if (ObjectInit.isBad()) {
2940    Candidate.Viable = false;
2941    Candidate.FailureKind = ovl_fail_bad_conversion;
2942    Candidate.Conversions[0] = ObjectInit;
2943    return;
2944  }
2945
2946  // The first conversion is actually a user-defined conversion whose
2947  // first conversion is ObjectInit's standard conversion (which is
2948  // effectively a reference binding). Record it as such.
2949  Candidate.Conversions[0].setUserDefined();
2950  Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
2951  Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
2952  Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
2953  Candidate.Conversions[0].UserDefined.After
2954    = Candidate.Conversions[0].UserDefined.Before;
2955  Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
2956
2957  // Find the
2958  unsigned NumArgsInProto = Proto->getNumArgs();
2959
2960  // (C++ 13.3.2p2): A candidate function having fewer than m
2961  // parameters is viable only if it has an ellipsis in its parameter
2962  // list (8.3.5).
2963  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
2964    Candidate.Viable = false;
2965    Candidate.FailureKind = ovl_fail_too_many_arguments;
2966    return;
2967  }
2968
2969  // Function types don't have any default arguments, so just check if
2970  // we have enough arguments.
2971  if (NumArgs < NumArgsInProto) {
2972    // Not enough arguments.
2973    Candidate.Viable = false;
2974    Candidate.FailureKind = ovl_fail_too_few_arguments;
2975    return;
2976  }
2977
2978  // Determine the implicit conversion sequences for each of the
2979  // arguments.
2980  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2981    if (ArgIdx < NumArgsInProto) {
2982      // (C++ 13.3.2p3): for F to be a viable function, there shall
2983      // exist for each argument an implicit conversion sequence
2984      // (13.3.3.1) that converts that argument to the corresponding
2985      // parameter of F.
2986      QualType ParamType = Proto->getArgType(ArgIdx);
2987      Candidate.Conversions[ArgIdx + 1]
2988        = TryCopyInitialization(Args[ArgIdx], ParamType,
2989                                /*SuppressUserConversions=*/false,
2990                                /*ForceRValue=*/false,
2991                                /*InOverloadResolution=*/false);
2992      if (Candidate.Conversions[ArgIdx + 1].isBad()) {
2993        Candidate.Viable = false;
2994        Candidate.FailureKind = ovl_fail_bad_conversion;
2995        break;
2996      }
2997    } else {
2998      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2999      // argument for which there is no corresponding parameter is
3000      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
3001      Candidate.Conversions[ArgIdx + 1].setEllipsis();
3002    }
3003  }
3004}
3005
3006// FIXME: This will eventually be removed, once we've migrated all of the
3007// operator overloading logic over to the scheme used by binary operators, which
3008// works for template instantiation.
3009void Sema::AddOperatorCandidates(OverloadedOperatorKind Op, Scope *S,
3010                                 SourceLocation OpLoc,
3011                                 Expr **Args, unsigned NumArgs,
3012                                 OverloadCandidateSet& CandidateSet,
3013                                 SourceRange OpRange) {
3014  UnresolvedSet<16> Fns;
3015
3016  QualType T1 = Args[0]->getType();
3017  QualType T2;
3018  if (NumArgs > 1)
3019    T2 = Args[1]->getType();
3020
3021  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
3022  if (S)
3023    LookupOverloadedOperatorName(Op, S, T1, T2, Fns);
3024  AddFunctionCandidates(Fns, Args, NumArgs, CandidateSet, false);
3025  AddArgumentDependentLookupCandidates(OpName, false, Args, NumArgs, 0,
3026                                       CandidateSet);
3027  AddMemberOperatorCandidates(Op, OpLoc, Args, NumArgs, CandidateSet, OpRange);
3028  AddBuiltinOperatorCandidates(Op, OpLoc, Args, NumArgs, CandidateSet);
3029}
3030
3031/// \brief Add overload candidates for overloaded operators that are
3032/// member functions.
3033///
3034/// Add the overloaded operator candidates that are member functions
3035/// for the operator Op that was used in an operator expression such
3036/// as "x Op y". , Args/NumArgs provides the operator arguments, and
3037/// CandidateSet will store the added overload candidates. (C++
3038/// [over.match.oper]).
3039void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
3040                                       SourceLocation OpLoc,
3041                                       Expr **Args, unsigned NumArgs,
3042                                       OverloadCandidateSet& CandidateSet,
3043                                       SourceRange OpRange) {
3044  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
3045
3046  // C++ [over.match.oper]p3:
3047  //   For a unary operator @ with an operand of a type whose
3048  //   cv-unqualified version is T1, and for a binary operator @ with
3049  //   a left operand of a type whose cv-unqualified version is T1 and
3050  //   a right operand of a type whose cv-unqualified version is T2,
3051  //   three sets of candidate functions, designated member
3052  //   candidates, non-member candidates and built-in candidates, are
3053  //   constructed as follows:
3054  QualType T1 = Args[0]->getType();
3055  QualType T2;
3056  if (NumArgs > 1)
3057    T2 = Args[1]->getType();
3058
3059  //     -- If T1 is a class type, the set of member candidates is the
3060  //        result of the qualified lookup of T1::operator@
3061  //        (13.3.1.1.1); otherwise, the set of member candidates is
3062  //        empty.
3063  if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
3064    // Complete the type if it can be completed. Otherwise, we're done.
3065    if (RequireCompleteType(OpLoc, T1, PDiag()))
3066      return;
3067
3068    LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
3069    LookupQualifiedName(Operators, T1Rec->getDecl());
3070    Operators.suppressDiagnostics();
3071
3072    for (LookupResult::iterator Oper = Operators.begin(),
3073                             OperEnd = Operators.end();
3074         Oper != OperEnd;
3075         ++Oper)
3076      AddMethodCandidate(*Oper, Oper.getAccess(), Args[0]->getType(),
3077                         Args + 1, NumArgs - 1, CandidateSet,
3078                         /* SuppressUserConversions = */ false);
3079  }
3080}
3081
3082/// AddBuiltinCandidate - Add a candidate for a built-in
3083/// operator. ResultTy and ParamTys are the result and parameter types
3084/// of the built-in candidate, respectively. Args and NumArgs are the
3085/// arguments being passed to the candidate. IsAssignmentOperator
3086/// should be true when this built-in candidate is an assignment
3087/// operator. NumContextualBoolArguments is the number of arguments
3088/// (at the beginning of the argument list) that will be contextually
3089/// converted to bool.
3090void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
3091                               Expr **Args, unsigned NumArgs,
3092                               OverloadCandidateSet& CandidateSet,
3093                               bool IsAssignmentOperator,
3094                               unsigned NumContextualBoolArguments) {
3095  // Overload resolution is always an unevaluated context.
3096  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
3097
3098  // Add this candidate
3099  CandidateSet.push_back(OverloadCandidate());
3100  OverloadCandidate& Candidate = CandidateSet.back();
3101  Candidate.Function = 0;
3102  Candidate.Access = AS_none;
3103  Candidate.IsSurrogate = false;
3104  Candidate.IgnoreObjectArgument = false;
3105  Candidate.BuiltinTypes.ResultTy = ResultTy;
3106  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3107    Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
3108
3109  // Determine the implicit conversion sequences for each of the
3110  // arguments.
3111  Candidate.Viable = true;
3112  Candidate.Conversions.resize(NumArgs);
3113  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
3114    // C++ [over.match.oper]p4:
3115    //   For the built-in assignment operators, conversions of the
3116    //   left operand are restricted as follows:
3117    //     -- no temporaries are introduced to hold the left operand, and
3118    //     -- no user-defined conversions are applied to the left
3119    //        operand to achieve a type match with the left-most
3120    //        parameter of a built-in candidate.
3121    //
3122    // We block these conversions by turning off user-defined
3123    // conversions, since that is the only way that initialization of
3124    // a reference to a non-class type can occur from something that
3125    // is not of the same type.
3126    if (ArgIdx < NumContextualBoolArguments) {
3127      assert(ParamTys[ArgIdx] == Context.BoolTy &&
3128             "Contextual conversion to bool requires bool type");
3129      Candidate.Conversions[ArgIdx] = TryContextuallyConvertToBool(Args[ArgIdx]);
3130    } else {
3131      Candidate.Conversions[ArgIdx]
3132        = TryCopyInitialization(Args[ArgIdx], ParamTys[ArgIdx],
3133                                ArgIdx == 0 && IsAssignmentOperator,
3134                                /*ForceRValue=*/false,
3135                                /*InOverloadResolution=*/false);
3136    }
3137    if (Candidate.Conversions[ArgIdx].isBad()) {
3138      Candidate.Viable = false;
3139      Candidate.FailureKind = ovl_fail_bad_conversion;
3140      break;
3141    }
3142  }
3143}
3144
3145/// BuiltinCandidateTypeSet - A set of types that will be used for the
3146/// candidate operator functions for built-in operators (C++
3147/// [over.built]). The types are separated into pointer types and
3148/// enumeration types.
3149class BuiltinCandidateTypeSet  {
3150  /// TypeSet - A set of types.
3151  typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
3152
3153  /// PointerTypes - The set of pointer types that will be used in the
3154  /// built-in candidates.
3155  TypeSet PointerTypes;
3156
3157  /// MemberPointerTypes - The set of member pointer types that will be
3158  /// used in the built-in candidates.
3159  TypeSet MemberPointerTypes;
3160
3161  /// EnumerationTypes - The set of enumeration types that will be
3162  /// used in the built-in candidates.
3163  TypeSet EnumerationTypes;
3164
3165  /// Sema - The semantic analysis instance where we are building the
3166  /// candidate type set.
3167  Sema &SemaRef;
3168
3169  /// Context - The AST context in which we will build the type sets.
3170  ASTContext &Context;
3171
3172  bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
3173                                               const Qualifiers &VisibleQuals);
3174  bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
3175
3176public:
3177  /// iterator - Iterates through the types that are part of the set.
3178  typedef TypeSet::iterator iterator;
3179
3180  BuiltinCandidateTypeSet(Sema &SemaRef)
3181    : SemaRef(SemaRef), Context(SemaRef.Context) { }
3182
3183  void AddTypesConvertedFrom(QualType Ty,
3184                             SourceLocation Loc,
3185                             bool AllowUserConversions,
3186                             bool AllowExplicitConversions,
3187                             const Qualifiers &VisibleTypeConversionsQuals);
3188
3189  /// pointer_begin - First pointer type found;
3190  iterator pointer_begin() { return PointerTypes.begin(); }
3191
3192  /// pointer_end - Past the last pointer type found;
3193  iterator pointer_end() { return PointerTypes.end(); }
3194
3195  /// member_pointer_begin - First member pointer type found;
3196  iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
3197
3198  /// member_pointer_end - Past the last member pointer type found;
3199  iterator member_pointer_end() { return MemberPointerTypes.end(); }
3200
3201  /// enumeration_begin - First enumeration type found;
3202  iterator enumeration_begin() { return EnumerationTypes.begin(); }
3203
3204  /// enumeration_end - Past the last enumeration type found;
3205  iterator enumeration_end() { return EnumerationTypes.end(); }
3206};
3207
3208/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
3209/// the set of pointer types along with any more-qualified variants of
3210/// that type. For example, if @p Ty is "int const *", this routine
3211/// will add "int const *", "int const volatile *", "int const
3212/// restrict *", and "int const volatile restrict *" to the set of
3213/// pointer types. Returns true if the add of @p Ty itself succeeded,
3214/// false otherwise.
3215///
3216/// FIXME: what to do about extended qualifiers?
3217bool
3218BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
3219                                             const Qualifiers &VisibleQuals) {
3220
3221  // Insert this type.
3222  if (!PointerTypes.insert(Ty))
3223    return false;
3224
3225  const PointerType *PointerTy = Ty->getAs<PointerType>();
3226  assert(PointerTy && "type was not a pointer type!");
3227
3228  QualType PointeeTy = PointerTy->getPointeeType();
3229  // Don't add qualified variants of arrays. For one, they're not allowed
3230  // (the qualifier would sink to the element type), and for another, the
3231  // only overload situation where it matters is subscript or pointer +- int,
3232  // and those shouldn't have qualifier variants anyway.
3233  if (PointeeTy->isArrayType())
3234    return true;
3235  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
3236  if (const ConstantArrayType *Array =Context.getAsConstantArrayType(PointeeTy))
3237    BaseCVR = Array->getElementType().getCVRQualifiers();
3238  bool hasVolatile = VisibleQuals.hasVolatile();
3239  bool hasRestrict = VisibleQuals.hasRestrict();
3240
3241  // Iterate through all strict supersets of BaseCVR.
3242  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
3243    if ((CVR | BaseCVR) != CVR) continue;
3244    // Skip over Volatile/Restrict if no Volatile/Restrict found anywhere
3245    // in the types.
3246    if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
3247    if ((CVR & Qualifiers::Restrict) && !hasRestrict) continue;
3248    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
3249    PointerTypes.insert(Context.getPointerType(QPointeeTy));
3250  }
3251
3252  return true;
3253}
3254
3255/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
3256/// to the set of pointer types along with any more-qualified variants of
3257/// that type. For example, if @p Ty is "int const *", this routine
3258/// will add "int const *", "int const volatile *", "int const
3259/// restrict *", and "int const volatile restrict *" to the set of
3260/// pointer types. Returns true if the add of @p Ty itself succeeded,
3261/// false otherwise.
3262///
3263/// FIXME: what to do about extended qualifiers?
3264bool
3265BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
3266    QualType Ty) {
3267  // Insert this type.
3268  if (!MemberPointerTypes.insert(Ty))
3269    return false;
3270
3271  const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
3272  assert(PointerTy && "type was not a member pointer type!");
3273
3274  QualType PointeeTy = PointerTy->getPointeeType();
3275  // Don't add qualified variants of arrays. For one, they're not allowed
3276  // (the qualifier would sink to the element type), and for another, the
3277  // only overload situation where it matters is subscript or pointer +- int,
3278  // and those shouldn't have qualifier variants anyway.
3279  if (PointeeTy->isArrayType())
3280    return true;
3281  const Type *ClassTy = PointerTy->getClass();
3282
3283  // Iterate through all strict supersets of the pointee type's CVR
3284  // qualifiers.
3285  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
3286  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
3287    if ((CVR | BaseCVR) != CVR) continue;
3288
3289    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
3290    MemberPointerTypes.insert(Context.getMemberPointerType(QPointeeTy, ClassTy));
3291  }
3292
3293  return true;
3294}
3295
3296/// AddTypesConvertedFrom - Add each of the types to which the type @p
3297/// Ty can be implicit converted to the given set of @p Types. We're
3298/// primarily interested in pointer types and enumeration types. We also
3299/// take member pointer types, for the conditional operator.
3300/// AllowUserConversions is true if we should look at the conversion
3301/// functions of a class type, and AllowExplicitConversions if we
3302/// should also include the explicit conversion functions of a class
3303/// type.
3304void
3305BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
3306                                               SourceLocation Loc,
3307                                               bool AllowUserConversions,
3308                                               bool AllowExplicitConversions,
3309                                               const Qualifiers &VisibleQuals) {
3310  // Only deal with canonical types.
3311  Ty = Context.getCanonicalType(Ty);
3312
3313  // Look through reference types; they aren't part of the type of an
3314  // expression for the purposes of conversions.
3315  if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
3316    Ty = RefTy->getPointeeType();
3317
3318  // We don't care about qualifiers on the type.
3319  Ty = Ty.getLocalUnqualifiedType();
3320
3321  // If we're dealing with an array type, decay to the pointer.
3322  if (Ty->isArrayType())
3323    Ty = SemaRef.Context.getArrayDecayedType(Ty);
3324
3325  if (const PointerType *PointerTy = Ty->getAs<PointerType>()) {
3326    QualType PointeeTy = PointerTy->getPointeeType();
3327
3328    // Insert our type, and its more-qualified variants, into the set
3329    // of types.
3330    if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
3331      return;
3332  } else if (Ty->isMemberPointerType()) {
3333    // Member pointers are far easier, since the pointee can't be converted.
3334    if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
3335      return;
3336  } else if (Ty->isEnumeralType()) {
3337    EnumerationTypes.insert(Ty);
3338  } else if (AllowUserConversions) {
3339    if (const RecordType *TyRec = Ty->getAs<RecordType>()) {
3340      if (SemaRef.RequireCompleteType(Loc, Ty, 0)) {
3341        // No conversion functions in incomplete types.
3342        return;
3343      }
3344
3345      CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
3346      const UnresolvedSetImpl *Conversions
3347        = ClassDecl->getVisibleConversionFunctions();
3348      for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3349             E = Conversions->end(); I != E; ++I) {
3350
3351        // Skip conversion function templates; they don't tell us anything
3352        // about which builtin types we can convert to.
3353        if (isa<FunctionTemplateDecl>(*I))
3354          continue;
3355
3356        CXXConversionDecl *Conv = cast<CXXConversionDecl>(*I);
3357        if (AllowExplicitConversions || !Conv->isExplicit()) {
3358          AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
3359                                VisibleQuals);
3360        }
3361      }
3362    }
3363  }
3364}
3365
3366/// \brief Helper function for AddBuiltinOperatorCandidates() that adds
3367/// the volatile- and non-volatile-qualified assignment operators for the
3368/// given type to the candidate set.
3369static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
3370                                                   QualType T,
3371                                                   Expr **Args,
3372                                                   unsigned NumArgs,
3373                                    OverloadCandidateSet &CandidateSet) {
3374  QualType ParamTypes[2];
3375
3376  // T& operator=(T&, T)
3377  ParamTypes[0] = S.Context.getLValueReferenceType(T);
3378  ParamTypes[1] = T;
3379  S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3380                        /*IsAssignmentOperator=*/true);
3381
3382  if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
3383    // volatile T& operator=(volatile T&, T)
3384    ParamTypes[0]
3385      = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
3386    ParamTypes[1] = T;
3387    S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3388                          /*IsAssignmentOperator=*/true);
3389  }
3390}
3391
3392/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
3393/// if any, found in visible type conversion functions found in ArgExpr's type.
3394static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
3395    Qualifiers VRQuals;
3396    const RecordType *TyRec;
3397    if (const MemberPointerType *RHSMPType =
3398        ArgExpr->getType()->getAs<MemberPointerType>())
3399      TyRec = cast<RecordType>(RHSMPType->getClass());
3400    else
3401      TyRec = ArgExpr->getType()->getAs<RecordType>();
3402    if (!TyRec) {
3403      // Just to be safe, assume the worst case.
3404      VRQuals.addVolatile();
3405      VRQuals.addRestrict();
3406      return VRQuals;
3407    }
3408
3409    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
3410    const UnresolvedSetImpl *Conversions =
3411      ClassDecl->getVisibleConversionFunctions();
3412
3413    for (UnresolvedSetImpl::iterator I = Conversions->begin(),
3414           E = Conversions->end(); I != E; ++I) {
3415      if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(*I)) {
3416        QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
3417        if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
3418          CanTy = ResTypeRef->getPointeeType();
3419        // Need to go down the pointer/mempointer chain and add qualifiers
3420        // as see them.
3421        bool done = false;
3422        while (!done) {
3423          if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
3424            CanTy = ResTypePtr->getPointeeType();
3425          else if (const MemberPointerType *ResTypeMPtr =
3426                CanTy->getAs<MemberPointerType>())
3427            CanTy = ResTypeMPtr->getPointeeType();
3428          else
3429            done = true;
3430          if (CanTy.isVolatileQualified())
3431            VRQuals.addVolatile();
3432          if (CanTy.isRestrictQualified())
3433            VRQuals.addRestrict();
3434          if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
3435            return VRQuals;
3436        }
3437      }
3438    }
3439    return VRQuals;
3440}
3441
3442/// AddBuiltinOperatorCandidates - Add the appropriate built-in
3443/// operator overloads to the candidate set (C++ [over.built]), based
3444/// on the operator @p Op and the arguments given. For example, if the
3445/// operator is a binary '+', this routine might add "int
3446/// operator+(int, int)" to cover integer addition.
3447void
3448Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
3449                                   SourceLocation OpLoc,
3450                                   Expr **Args, unsigned NumArgs,
3451                                   OverloadCandidateSet& CandidateSet) {
3452  // The set of "promoted arithmetic types", which are the arithmetic
3453  // types are that preserved by promotion (C++ [over.built]p2). Note
3454  // that the first few of these types are the promoted integral
3455  // types; these types need to be first.
3456  // FIXME: What about complex?
3457  const unsigned FirstIntegralType = 0;
3458  const unsigned LastIntegralType = 13;
3459  const unsigned FirstPromotedIntegralType = 7,
3460                 LastPromotedIntegralType = 13;
3461  const unsigned FirstPromotedArithmeticType = 7,
3462                 LastPromotedArithmeticType = 16;
3463  const unsigned NumArithmeticTypes = 16;
3464  QualType ArithmeticTypes[NumArithmeticTypes] = {
3465    Context.BoolTy, Context.CharTy, Context.WCharTy,
3466// FIXME:   Context.Char16Ty, Context.Char32Ty,
3467    Context.SignedCharTy, Context.ShortTy,
3468    Context.UnsignedCharTy, Context.UnsignedShortTy,
3469    Context.IntTy, Context.LongTy, Context.LongLongTy,
3470    Context.UnsignedIntTy, Context.UnsignedLongTy, Context.UnsignedLongLongTy,
3471    Context.FloatTy, Context.DoubleTy, Context.LongDoubleTy
3472  };
3473  assert(ArithmeticTypes[FirstPromotedIntegralType] == Context.IntTy &&
3474         "Invalid first promoted integral type");
3475  assert(ArithmeticTypes[LastPromotedIntegralType - 1]
3476           == Context.UnsignedLongLongTy &&
3477         "Invalid last promoted integral type");
3478  assert(ArithmeticTypes[FirstPromotedArithmeticType] == Context.IntTy &&
3479         "Invalid first promoted arithmetic type");
3480  assert(ArithmeticTypes[LastPromotedArithmeticType - 1]
3481            == Context.LongDoubleTy &&
3482         "Invalid last promoted arithmetic type");
3483
3484  // Find all of the types that the arguments can convert to, but only
3485  // if the operator we're looking at has built-in operator candidates
3486  // that make use of these types.
3487  Qualifiers VisibleTypeConversionsQuals;
3488  VisibleTypeConversionsQuals.addConst();
3489  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3490    VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
3491
3492  BuiltinCandidateTypeSet CandidateTypes(*this);
3493  if (Op == OO_Less || Op == OO_Greater || Op == OO_LessEqual ||
3494      Op == OO_GreaterEqual || Op == OO_EqualEqual || Op == OO_ExclaimEqual ||
3495      Op == OO_Plus || (Op == OO_Minus && NumArgs == 2) || Op == OO_Equal ||
3496      Op == OO_PlusEqual || Op == OO_MinusEqual || Op == OO_Subscript ||
3497      Op == OO_ArrowStar || Op == OO_PlusPlus || Op == OO_MinusMinus ||
3498      (Op == OO_Star && NumArgs == 1) || Op == OO_Conditional) {
3499    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3500      CandidateTypes.AddTypesConvertedFrom(Args[ArgIdx]->getType(),
3501                                           OpLoc,
3502                                           true,
3503                                           (Op == OO_Exclaim ||
3504                                            Op == OO_AmpAmp ||
3505                                            Op == OO_PipePipe),
3506                                           VisibleTypeConversionsQuals);
3507  }
3508
3509  bool isComparison = false;
3510  switch (Op) {
3511  case OO_None:
3512  case NUM_OVERLOADED_OPERATORS:
3513    assert(false && "Expected an overloaded operator");
3514    break;
3515
3516  case OO_Star: // '*' is either unary or binary
3517    if (NumArgs == 1)
3518      goto UnaryStar;
3519    else
3520      goto BinaryStar;
3521    break;
3522
3523  case OO_Plus: // '+' is either unary or binary
3524    if (NumArgs == 1)
3525      goto UnaryPlus;
3526    else
3527      goto BinaryPlus;
3528    break;
3529
3530  case OO_Minus: // '-' is either unary or binary
3531    if (NumArgs == 1)
3532      goto UnaryMinus;
3533    else
3534      goto BinaryMinus;
3535    break;
3536
3537  case OO_Amp: // '&' is either unary or binary
3538    if (NumArgs == 1)
3539      goto UnaryAmp;
3540    else
3541      goto BinaryAmp;
3542
3543  case OO_PlusPlus:
3544  case OO_MinusMinus:
3545    // C++ [over.built]p3:
3546    //
3547    //   For every pair (T, VQ), where T is an arithmetic type, and VQ
3548    //   is either volatile or empty, there exist candidate operator
3549    //   functions of the form
3550    //
3551    //       VQ T&      operator++(VQ T&);
3552    //       T          operator++(VQ T&, int);
3553    //
3554    // C++ [over.built]p4:
3555    //
3556    //   For every pair (T, VQ), where T is an arithmetic type other
3557    //   than bool, and VQ is either volatile or empty, there exist
3558    //   candidate operator functions of the form
3559    //
3560    //       VQ T&      operator--(VQ T&);
3561    //       T          operator--(VQ T&, int);
3562    for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
3563         Arith < NumArithmeticTypes; ++Arith) {
3564      QualType ArithTy = ArithmeticTypes[Arith];
3565      QualType ParamTypes[2]
3566        = { Context.getLValueReferenceType(ArithTy), Context.IntTy };
3567
3568      // Non-volatile version.
3569      if (NumArgs == 1)
3570        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3571      else
3572        AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
3573      // heuristic to reduce number of builtin candidates in the set.
3574      // Add volatile version only if there are conversions to a volatile type.
3575      if (VisibleTypeConversionsQuals.hasVolatile()) {
3576        // Volatile version
3577        ParamTypes[0]
3578          = Context.getLValueReferenceType(Context.getVolatileType(ArithTy));
3579        if (NumArgs == 1)
3580          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3581        else
3582          AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
3583      }
3584    }
3585
3586    // C++ [over.built]p5:
3587    //
3588    //   For every pair (T, VQ), where T is a cv-qualified or
3589    //   cv-unqualified object type, and VQ is either volatile or
3590    //   empty, there exist candidate operator functions of the form
3591    //
3592    //       T*VQ&      operator++(T*VQ&);
3593    //       T*VQ&      operator--(T*VQ&);
3594    //       T*         operator++(T*VQ&, int);
3595    //       T*         operator--(T*VQ&, int);
3596    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3597         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3598      // Skip pointer types that aren't pointers to object types.
3599      if (!(*Ptr)->getAs<PointerType>()->getPointeeType()->isObjectType())
3600        continue;
3601
3602      QualType ParamTypes[2] = {
3603        Context.getLValueReferenceType(*Ptr), Context.IntTy
3604      };
3605
3606      // Without volatile
3607      if (NumArgs == 1)
3608        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3609      else
3610        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3611
3612      if (!Context.getCanonicalType(*Ptr).isVolatileQualified() &&
3613          VisibleTypeConversionsQuals.hasVolatile()) {
3614        // With volatile
3615        ParamTypes[0]
3616          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
3617        if (NumArgs == 1)
3618          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3619        else
3620          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3621      }
3622    }
3623    break;
3624
3625  UnaryStar:
3626    // C++ [over.built]p6:
3627    //   For every cv-qualified or cv-unqualified object type T, there
3628    //   exist candidate operator functions of the form
3629    //
3630    //       T&         operator*(T*);
3631    //
3632    // C++ [over.built]p7:
3633    //   For every function type T, there exist candidate operator
3634    //   functions of the form
3635    //       T&         operator*(T*);
3636    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3637         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3638      QualType ParamTy = *Ptr;
3639      QualType PointeeTy = ParamTy->getAs<PointerType>()->getPointeeType();
3640      AddBuiltinCandidate(Context.getLValueReferenceType(PointeeTy),
3641                          &ParamTy, Args, 1, CandidateSet);
3642    }
3643    break;
3644
3645  UnaryPlus:
3646    // C++ [over.built]p8:
3647    //   For every type T, there exist candidate operator functions of
3648    //   the form
3649    //
3650    //       T*         operator+(T*);
3651    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3652         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3653      QualType ParamTy = *Ptr;
3654      AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
3655    }
3656
3657    // Fall through
3658
3659  UnaryMinus:
3660    // C++ [over.built]p9:
3661    //  For every promoted arithmetic type T, there exist candidate
3662    //  operator functions of the form
3663    //
3664    //       T         operator+(T);
3665    //       T         operator-(T);
3666    for (unsigned Arith = FirstPromotedArithmeticType;
3667         Arith < LastPromotedArithmeticType; ++Arith) {
3668      QualType ArithTy = ArithmeticTypes[Arith];
3669      AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
3670    }
3671    break;
3672
3673  case OO_Tilde:
3674    // C++ [over.built]p10:
3675    //   For every promoted integral type T, there exist candidate
3676    //   operator functions of the form
3677    //
3678    //        T         operator~(T);
3679    for (unsigned Int = FirstPromotedIntegralType;
3680         Int < LastPromotedIntegralType; ++Int) {
3681      QualType IntTy = ArithmeticTypes[Int];
3682      AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
3683    }
3684    break;
3685
3686  case OO_New:
3687  case OO_Delete:
3688  case OO_Array_New:
3689  case OO_Array_Delete:
3690  case OO_Call:
3691    assert(false && "Special operators don't use AddBuiltinOperatorCandidates");
3692    break;
3693
3694  case OO_Comma:
3695  UnaryAmp:
3696  case OO_Arrow:
3697    // C++ [over.match.oper]p3:
3698    //   -- For the operator ',', the unary operator '&', or the
3699    //      operator '->', the built-in candidates set is empty.
3700    break;
3701
3702  case OO_EqualEqual:
3703  case OO_ExclaimEqual:
3704    // C++ [over.match.oper]p16:
3705    //   For every pointer to member type T, there exist candidate operator
3706    //   functions of the form
3707    //
3708    //        bool operator==(T,T);
3709    //        bool operator!=(T,T);
3710    for (BuiltinCandidateTypeSet::iterator
3711           MemPtr = CandidateTypes.member_pointer_begin(),
3712           MemPtrEnd = CandidateTypes.member_pointer_end();
3713         MemPtr != MemPtrEnd;
3714         ++MemPtr) {
3715      QualType ParamTypes[2] = { *MemPtr, *MemPtr };
3716      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3717    }
3718
3719    // Fall through
3720
3721  case OO_Less:
3722  case OO_Greater:
3723  case OO_LessEqual:
3724  case OO_GreaterEqual:
3725    // C++ [over.built]p15:
3726    //
3727    //   For every pointer or enumeration type T, there exist
3728    //   candidate operator functions of the form
3729    //
3730    //        bool       operator<(T, T);
3731    //        bool       operator>(T, T);
3732    //        bool       operator<=(T, T);
3733    //        bool       operator>=(T, T);
3734    //        bool       operator==(T, T);
3735    //        bool       operator!=(T, T);
3736    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3737         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3738      QualType ParamTypes[2] = { *Ptr, *Ptr };
3739      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3740    }
3741    for (BuiltinCandidateTypeSet::iterator Enum
3742           = CandidateTypes.enumeration_begin();
3743         Enum != CandidateTypes.enumeration_end(); ++Enum) {
3744      QualType ParamTypes[2] = { *Enum, *Enum };
3745      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3746    }
3747
3748    // Fall through.
3749    isComparison = true;
3750
3751  BinaryPlus:
3752  BinaryMinus:
3753    if (!isComparison) {
3754      // We didn't fall through, so we must have OO_Plus or OO_Minus.
3755
3756      // C++ [over.built]p13:
3757      //
3758      //   For every cv-qualified or cv-unqualified object type T
3759      //   there exist candidate operator functions of the form
3760      //
3761      //      T*         operator+(T*, ptrdiff_t);
3762      //      T&         operator[](T*, ptrdiff_t);    [BELOW]
3763      //      T*         operator-(T*, ptrdiff_t);
3764      //      T*         operator+(ptrdiff_t, T*);
3765      //      T&         operator[](ptrdiff_t, T*);    [BELOW]
3766      //
3767      // C++ [over.built]p14:
3768      //
3769      //   For every T, where T is a pointer to object type, there
3770      //   exist candidate operator functions of the form
3771      //
3772      //      ptrdiff_t  operator-(T, T);
3773      for (BuiltinCandidateTypeSet::iterator Ptr
3774             = CandidateTypes.pointer_begin();
3775           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3776        QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
3777
3778        // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
3779        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3780
3781        if (Op == OO_Plus) {
3782          // T* operator+(ptrdiff_t, T*);
3783          ParamTypes[0] = ParamTypes[1];
3784          ParamTypes[1] = *Ptr;
3785          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3786        } else {
3787          // ptrdiff_t operator-(T, T);
3788          ParamTypes[1] = *Ptr;
3789          AddBuiltinCandidate(Context.getPointerDiffType(), ParamTypes,
3790                              Args, 2, CandidateSet);
3791        }
3792      }
3793    }
3794    // Fall through
3795
3796  case OO_Slash:
3797  BinaryStar:
3798  Conditional:
3799    // C++ [over.built]p12:
3800    //
3801    //   For every pair of promoted arithmetic types L and R, there
3802    //   exist candidate operator functions of the form
3803    //
3804    //        LR         operator*(L, R);
3805    //        LR         operator/(L, R);
3806    //        LR         operator+(L, R);
3807    //        LR         operator-(L, R);
3808    //        bool       operator<(L, R);
3809    //        bool       operator>(L, R);
3810    //        bool       operator<=(L, R);
3811    //        bool       operator>=(L, R);
3812    //        bool       operator==(L, R);
3813    //        bool       operator!=(L, R);
3814    //
3815    //   where LR is the result of the usual arithmetic conversions
3816    //   between types L and R.
3817    //
3818    // C++ [over.built]p24:
3819    //
3820    //   For every pair of promoted arithmetic types L and R, there exist
3821    //   candidate operator functions of the form
3822    //
3823    //        LR       operator?(bool, L, R);
3824    //
3825    //   where LR is the result of the usual arithmetic conversions
3826    //   between types L and R.
3827    // Our candidates ignore the first parameter.
3828    for (unsigned Left = FirstPromotedArithmeticType;
3829         Left < LastPromotedArithmeticType; ++Left) {
3830      for (unsigned Right = FirstPromotedArithmeticType;
3831           Right < LastPromotedArithmeticType; ++Right) {
3832        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
3833        QualType Result
3834          = isComparison
3835          ? Context.BoolTy
3836          : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
3837        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
3838      }
3839    }
3840    break;
3841
3842  case OO_Percent:
3843  BinaryAmp:
3844  case OO_Caret:
3845  case OO_Pipe:
3846  case OO_LessLess:
3847  case OO_GreaterGreater:
3848    // C++ [over.built]p17:
3849    //
3850    //   For every pair of promoted integral types L and R, there
3851    //   exist candidate operator functions of the form
3852    //
3853    //      LR         operator%(L, R);
3854    //      LR         operator&(L, R);
3855    //      LR         operator^(L, R);
3856    //      LR         operator|(L, R);
3857    //      L          operator<<(L, R);
3858    //      L          operator>>(L, R);
3859    //
3860    //   where LR is the result of the usual arithmetic conversions
3861    //   between types L and R.
3862    for (unsigned Left = FirstPromotedIntegralType;
3863         Left < LastPromotedIntegralType; ++Left) {
3864      for (unsigned Right = FirstPromotedIntegralType;
3865           Right < LastPromotedIntegralType; ++Right) {
3866        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
3867        QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
3868            ? LandR[0]
3869            : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
3870        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
3871      }
3872    }
3873    break;
3874
3875  case OO_Equal:
3876    // C++ [over.built]p20:
3877    //
3878    //   For every pair (T, VQ), where T is an enumeration or
3879    //   pointer to member type and VQ is either volatile or
3880    //   empty, there exist candidate operator functions of the form
3881    //
3882    //        VQ T&      operator=(VQ T&, T);
3883    for (BuiltinCandidateTypeSet::iterator
3884           Enum = CandidateTypes.enumeration_begin(),
3885           EnumEnd = CandidateTypes.enumeration_end();
3886         Enum != EnumEnd; ++Enum)
3887      AddBuiltinAssignmentOperatorCandidates(*this, *Enum, Args, 2,
3888                                             CandidateSet);
3889    for (BuiltinCandidateTypeSet::iterator
3890           MemPtr = CandidateTypes.member_pointer_begin(),
3891         MemPtrEnd = CandidateTypes.member_pointer_end();
3892         MemPtr != MemPtrEnd; ++MemPtr)
3893      AddBuiltinAssignmentOperatorCandidates(*this, *MemPtr, Args, 2,
3894                                             CandidateSet);
3895      // Fall through.
3896
3897  case OO_PlusEqual:
3898  case OO_MinusEqual:
3899    // C++ [over.built]p19:
3900    //
3901    //   For every pair (T, VQ), where T is any type and VQ is either
3902    //   volatile or empty, there exist candidate operator functions
3903    //   of the form
3904    //
3905    //        T*VQ&      operator=(T*VQ&, T*);
3906    //
3907    // C++ [over.built]p21:
3908    //
3909    //   For every pair (T, VQ), where T is a cv-qualified or
3910    //   cv-unqualified object type and VQ is either volatile or
3911    //   empty, there exist candidate operator functions of the form
3912    //
3913    //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
3914    //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
3915    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3916         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3917      QualType ParamTypes[2];
3918      ParamTypes[1] = (Op == OO_Equal)? *Ptr : Context.getPointerDiffType();
3919
3920      // non-volatile version
3921      ParamTypes[0] = Context.getLValueReferenceType(*Ptr);
3922      AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3923                          /*IsAssigmentOperator=*/Op == OO_Equal);
3924
3925      if (!Context.getCanonicalType(*Ptr).isVolatileQualified() &&
3926          VisibleTypeConversionsQuals.hasVolatile()) {
3927        // volatile version
3928        ParamTypes[0]
3929          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
3930        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3931                            /*IsAssigmentOperator=*/Op == OO_Equal);
3932      }
3933    }
3934    // Fall through.
3935
3936  case OO_StarEqual:
3937  case OO_SlashEqual:
3938    // C++ [over.built]p18:
3939    //
3940    //   For every triple (L, VQ, R), where L is an arithmetic type,
3941    //   VQ is either volatile or empty, and R is a promoted
3942    //   arithmetic type, there exist candidate operator functions of
3943    //   the form
3944    //
3945    //        VQ L&      operator=(VQ L&, R);
3946    //        VQ L&      operator*=(VQ L&, R);
3947    //        VQ L&      operator/=(VQ L&, R);
3948    //        VQ L&      operator+=(VQ L&, R);
3949    //        VQ L&      operator-=(VQ L&, R);
3950    for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
3951      for (unsigned Right = FirstPromotedArithmeticType;
3952           Right < LastPromotedArithmeticType; ++Right) {
3953        QualType ParamTypes[2];
3954        ParamTypes[1] = ArithmeticTypes[Right];
3955
3956        // Add this built-in operator as a candidate (VQ is empty).
3957        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
3958        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3959                            /*IsAssigmentOperator=*/Op == OO_Equal);
3960
3961        // Add this built-in operator as a candidate (VQ is 'volatile').
3962        if (VisibleTypeConversionsQuals.hasVolatile()) {
3963          ParamTypes[0] = Context.getVolatileType(ArithmeticTypes[Left]);
3964          ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
3965          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3966                              /*IsAssigmentOperator=*/Op == OO_Equal);
3967        }
3968      }
3969    }
3970    break;
3971
3972  case OO_PercentEqual:
3973  case OO_LessLessEqual:
3974  case OO_GreaterGreaterEqual:
3975  case OO_AmpEqual:
3976  case OO_CaretEqual:
3977  case OO_PipeEqual:
3978    // C++ [over.built]p22:
3979    //
3980    //   For every triple (L, VQ, R), where L is an integral type, VQ
3981    //   is either volatile or empty, and R is a promoted integral
3982    //   type, there exist candidate operator functions of the form
3983    //
3984    //        VQ L&       operator%=(VQ L&, R);
3985    //        VQ L&       operator<<=(VQ L&, R);
3986    //        VQ L&       operator>>=(VQ L&, R);
3987    //        VQ L&       operator&=(VQ L&, R);
3988    //        VQ L&       operator^=(VQ L&, R);
3989    //        VQ L&       operator|=(VQ L&, R);
3990    for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
3991      for (unsigned Right = FirstPromotedIntegralType;
3992           Right < LastPromotedIntegralType; ++Right) {
3993        QualType ParamTypes[2];
3994        ParamTypes[1] = ArithmeticTypes[Right];
3995
3996        // Add this built-in operator as a candidate (VQ is empty).
3997        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
3998        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
3999        if (VisibleTypeConversionsQuals.hasVolatile()) {
4000          // Add this built-in operator as a candidate (VQ is 'volatile').
4001          ParamTypes[0] = ArithmeticTypes[Left];
4002          ParamTypes[0] = Context.getVolatileType(ParamTypes[0]);
4003          ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
4004          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
4005        }
4006      }
4007    }
4008    break;
4009
4010  case OO_Exclaim: {
4011    // C++ [over.operator]p23:
4012    //
4013    //   There also exist candidate operator functions of the form
4014    //
4015    //        bool        operator!(bool);
4016    //        bool        operator&&(bool, bool);     [BELOW]
4017    //        bool        operator||(bool, bool);     [BELOW]
4018    QualType ParamTy = Context.BoolTy;
4019    AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
4020                        /*IsAssignmentOperator=*/false,
4021                        /*NumContextualBoolArguments=*/1);
4022    break;
4023  }
4024
4025  case OO_AmpAmp:
4026  case OO_PipePipe: {
4027    // C++ [over.operator]p23:
4028    //
4029    //   There also exist candidate operator functions of the form
4030    //
4031    //        bool        operator!(bool);            [ABOVE]
4032    //        bool        operator&&(bool, bool);
4033    //        bool        operator||(bool, bool);
4034    QualType ParamTypes[2] = { Context.BoolTy, Context.BoolTy };
4035    AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
4036                        /*IsAssignmentOperator=*/false,
4037                        /*NumContextualBoolArguments=*/2);
4038    break;
4039  }
4040
4041  case OO_Subscript:
4042    // C++ [over.built]p13:
4043    //
4044    //   For every cv-qualified or cv-unqualified object type T there
4045    //   exist candidate operator functions of the form
4046    //
4047    //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
4048    //        T&         operator[](T*, ptrdiff_t);
4049    //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
4050    //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
4051    //        T&         operator[](ptrdiff_t, T*);
4052    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
4053         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4054      QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
4055      QualType PointeeType = (*Ptr)->getAs<PointerType>()->getPointeeType();
4056      QualType ResultTy = Context.getLValueReferenceType(PointeeType);
4057
4058      // T& operator[](T*, ptrdiff_t)
4059      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
4060
4061      // T& operator[](ptrdiff_t, T*);
4062      ParamTypes[0] = ParamTypes[1];
4063      ParamTypes[1] = *Ptr;
4064      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
4065    }
4066    break;
4067
4068  case OO_ArrowStar:
4069    // C++ [over.built]p11:
4070    //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
4071    //    C1 is the same type as C2 or is a derived class of C2, T is an object
4072    //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
4073    //    there exist candidate operator functions of the form
4074    //    CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
4075    //    where CV12 is the union of CV1 and CV2.
4076    {
4077      for (BuiltinCandidateTypeSet::iterator Ptr =
4078             CandidateTypes.pointer_begin();
4079           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
4080        QualType C1Ty = (*Ptr);
4081        QualType C1;
4082        QualifierCollector Q1;
4083        if (const PointerType *PointerTy = C1Ty->getAs<PointerType>()) {
4084          C1 = QualType(Q1.strip(PointerTy->getPointeeType()), 0);
4085          if (!isa<RecordType>(C1))
4086            continue;
4087          // heuristic to reduce number of builtin candidates in the set.
4088          // Add volatile/restrict version only if there are conversions to a
4089          // volatile/restrict type.
4090          if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
4091            continue;
4092          if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
4093            continue;
4094        }
4095        for (BuiltinCandidateTypeSet::iterator
4096             MemPtr = CandidateTypes.member_pointer_begin(),
4097             MemPtrEnd = CandidateTypes.member_pointer_end();
4098             MemPtr != MemPtrEnd; ++MemPtr) {
4099          const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
4100          QualType C2 = QualType(mptr->getClass(), 0);
4101          C2 = C2.getUnqualifiedType();
4102          if (C1 != C2 && !IsDerivedFrom(C1, C2))
4103            break;
4104          QualType ParamTypes[2] = { *Ptr, *MemPtr };
4105          // build CV12 T&
4106          QualType T = mptr->getPointeeType();
4107          if (!VisibleTypeConversionsQuals.hasVolatile() &&
4108              T.isVolatileQualified())
4109            continue;
4110          if (!VisibleTypeConversionsQuals.hasRestrict() &&
4111              T.isRestrictQualified())
4112            continue;
4113          T = Q1.apply(T);
4114          QualType ResultTy = Context.getLValueReferenceType(T);
4115          AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
4116        }
4117      }
4118    }
4119    break;
4120
4121  case OO_Conditional:
4122    // Note that we don't consider the first argument, since it has been
4123    // contextually converted to bool long ago. The candidates below are
4124    // therefore added as binary.
4125    //
4126    // C++ [over.built]p24:
4127    //   For every type T, where T is a pointer or pointer-to-member type,
4128    //   there exist candidate operator functions of the form
4129    //
4130    //        T        operator?(bool, T, T);
4131    //
4132    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin(),
4133         E = CandidateTypes.pointer_end(); Ptr != E; ++Ptr) {
4134      QualType ParamTypes[2] = { *Ptr, *Ptr };
4135      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4136    }
4137    for (BuiltinCandidateTypeSet::iterator Ptr =
4138           CandidateTypes.member_pointer_begin(),
4139         E = CandidateTypes.member_pointer_end(); Ptr != E; ++Ptr) {
4140      QualType ParamTypes[2] = { *Ptr, *Ptr };
4141      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4142    }
4143    goto Conditional;
4144  }
4145}
4146
4147/// \brief Add function candidates found via argument-dependent lookup
4148/// to the set of overloading candidates.
4149///
4150/// This routine performs argument-dependent name lookup based on the
4151/// given function name (which may also be an operator name) and adds
4152/// all of the overload candidates found by ADL to the overload
4153/// candidate set (C++ [basic.lookup.argdep]).
4154void
4155Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
4156                                           bool Operator,
4157                                           Expr **Args, unsigned NumArgs,
4158                       const TemplateArgumentListInfo *ExplicitTemplateArgs,
4159                                           OverloadCandidateSet& CandidateSet,
4160                                           bool PartialOverloading) {
4161  ADLResult Fns;
4162
4163  // FIXME: This approach for uniquing ADL results (and removing
4164  // redundant candidates from the set) relies on pointer-equality,
4165  // which means we need to key off the canonical decl.  However,
4166  // always going back to the canonical decl might not get us the
4167  // right set of default arguments.  What default arguments are
4168  // we supposed to consider on ADL candidates, anyway?
4169
4170  // FIXME: Pass in the explicit template arguments?
4171  ArgumentDependentLookup(Name, Operator, Args, NumArgs, Fns);
4172
4173  // Erase all of the candidates we already knew about.
4174  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
4175                                   CandEnd = CandidateSet.end();
4176       Cand != CandEnd; ++Cand)
4177    if (Cand->Function) {
4178      Fns.erase(Cand->Function);
4179      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
4180        Fns.erase(FunTmpl);
4181    }
4182
4183  // For each of the ADL candidates we found, add it to the overload
4184  // set.
4185  for (ADLResult::iterator I = Fns.begin(), E = Fns.end(); I != E; ++I) {
4186    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
4187      if (ExplicitTemplateArgs)
4188        continue;
4189
4190      AddOverloadCandidate(FD, AS_none, Args, NumArgs, CandidateSet,
4191                           false, false, PartialOverloading);
4192    } else
4193      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*I),
4194                                   AS_none, ExplicitTemplateArgs,
4195                                   Args, NumArgs, CandidateSet);
4196  }
4197}
4198
4199/// isBetterOverloadCandidate - Determines whether the first overload
4200/// candidate is a better candidate than the second (C++ 13.3.3p1).
4201bool
4202Sema::isBetterOverloadCandidate(const OverloadCandidate& Cand1,
4203                                const OverloadCandidate& Cand2) {
4204  // Define viable functions to be better candidates than non-viable
4205  // functions.
4206  if (!Cand2.Viable)
4207    return Cand1.Viable;
4208  else if (!Cand1.Viable)
4209    return false;
4210
4211  // C++ [over.match.best]p1:
4212  //
4213  //   -- if F is a static member function, ICS1(F) is defined such
4214  //      that ICS1(F) is neither better nor worse than ICS1(G) for
4215  //      any function G, and, symmetrically, ICS1(G) is neither
4216  //      better nor worse than ICS1(F).
4217  unsigned StartArg = 0;
4218  if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
4219    StartArg = 1;
4220
4221  // C++ [over.match.best]p1:
4222  //   A viable function F1 is defined to be a better function than another
4223  //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
4224  //   conversion sequence than ICSi(F2), and then...
4225  unsigned NumArgs = Cand1.Conversions.size();
4226  assert(Cand2.Conversions.size() == NumArgs && "Overload candidate mismatch");
4227  bool HasBetterConversion = false;
4228  for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
4229    switch (CompareImplicitConversionSequences(Cand1.Conversions[ArgIdx],
4230                                               Cand2.Conversions[ArgIdx])) {
4231    case ImplicitConversionSequence::Better:
4232      // Cand1 has a better conversion sequence.
4233      HasBetterConversion = true;
4234      break;
4235
4236    case ImplicitConversionSequence::Worse:
4237      // Cand1 can't be better than Cand2.
4238      return false;
4239
4240    case ImplicitConversionSequence::Indistinguishable:
4241      // Do nothing.
4242      break;
4243    }
4244  }
4245
4246  //    -- for some argument j, ICSj(F1) is a better conversion sequence than
4247  //       ICSj(F2), or, if not that,
4248  if (HasBetterConversion)
4249    return true;
4250
4251  //     - F1 is a non-template function and F2 is a function template
4252  //       specialization, or, if not that,
4253  if (Cand1.Function && !Cand1.Function->getPrimaryTemplate() &&
4254      Cand2.Function && Cand2.Function->getPrimaryTemplate())
4255    return true;
4256
4257  //   -- F1 and F2 are function template specializations, and the function
4258  //      template for F1 is more specialized than the template for F2
4259  //      according to the partial ordering rules described in 14.5.5.2, or,
4260  //      if not that,
4261  if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
4262      Cand2.Function && Cand2.Function->getPrimaryTemplate())
4263    if (FunctionTemplateDecl *BetterTemplate
4264          = getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
4265                                       Cand2.Function->getPrimaryTemplate(),
4266                       isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
4267                                                             : TPOC_Call))
4268      return BetterTemplate == Cand1.Function->getPrimaryTemplate();
4269
4270  //   -- the context is an initialization by user-defined conversion
4271  //      (see 8.5, 13.3.1.5) and the standard conversion sequence
4272  //      from the return type of F1 to the destination type (i.e.,
4273  //      the type of the entity being initialized) is a better
4274  //      conversion sequence than the standard conversion sequence
4275  //      from the return type of F2 to the destination type.
4276  if (Cand1.Function && Cand2.Function &&
4277      isa<CXXConversionDecl>(Cand1.Function) &&
4278      isa<CXXConversionDecl>(Cand2.Function)) {
4279    switch (CompareStandardConversionSequences(Cand1.FinalConversion,
4280                                               Cand2.FinalConversion)) {
4281    case ImplicitConversionSequence::Better:
4282      // Cand1 has a better conversion sequence.
4283      return true;
4284
4285    case ImplicitConversionSequence::Worse:
4286      // Cand1 can't be better than Cand2.
4287      return false;
4288
4289    case ImplicitConversionSequence::Indistinguishable:
4290      // Do nothing
4291      break;
4292    }
4293  }
4294
4295  return false;
4296}
4297
4298/// \brief Computes the best viable function (C++ 13.3.3)
4299/// within an overload candidate set.
4300///
4301/// \param CandidateSet the set of candidate functions.
4302///
4303/// \param Loc the location of the function name (or operator symbol) for
4304/// which overload resolution occurs.
4305///
4306/// \param Best f overload resolution was successful or found a deleted
4307/// function, Best points to the candidate function found.
4308///
4309/// \returns The result of overload resolution.
4310OverloadingResult Sema::BestViableFunction(OverloadCandidateSet& CandidateSet,
4311                                           SourceLocation Loc,
4312                                        OverloadCandidateSet::iterator& Best) {
4313  // Find the best viable function.
4314  Best = CandidateSet.end();
4315  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4316       Cand != CandidateSet.end(); ++Cand) {
4317    if (Cand->Viable) {
4318      if (Best == CandidateSet.end() || isBetterOverloadCandidate(*Cand, *Best))
4319        Best = Cand;
4320    }
4321  }
4322
4323  // If we didn't find any viable functions, abort.
4324  if (Best == CandidateSet.end())
4325    return OR_No_Viable_Function;
4326
4327  // Make sure that this function is better than every other viable
4328  // function. If not, we have an ambiguity.
4329  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4330       Cand != CandidateSet.end(); ++Cand) {
4331    if (Cand->Viable &&
4332        Cand != Best &&
4333        !isBetterOverloadCandidate(*Best, *Cand)) {
4334      Best = CandidateSet.end();
4335      return OR_Ambiguous;
4336    }
4337  }
4338
4339  // Best is the best viable function.
4340  if (Best->Function &&
4341      (Best->Function->isDeleted() ||
4342       Best->Function->getAttr<UnavailableAttr>()))
4343    return OR_Deleted;
4344
4345  // C++ [basic.def.odr]p2:
4346  //   An overloaded function is used if it is selected by overload resolution
4347  //   when referred to from a potentially-evaluated expression. [Note: this
4348  //   covers calls to named functions (5.2.2), operator overloading
4349  //   (clause 13), user-defined conversions (12.3.2), allocation function for
4350  //   placement new (5.3.4), as well as non-default initialization (8.5).
4351  if (Best->Function)
4352    MarkDeclarationReferenced(Loc, Best->Function);
4353  return OR_Success;
4354}
4355
4356namespace {
4357
4358enum OverloadCandidateKind {
4359  oc_function,
4360  oc_method,
4361  oc_constructor,
4362  oc_function_template,
4363  oc_method_template,
4364  oc_constructor_template,
4365  oc_implicit_default_constructor,
4366  oc_implicit_copy_constructor,
4367  oc_implicit_copy_assignment
4368};
4369
4370OverloadCandidateKind ClassifyOverloadCandidate(Sema &S,
4371                                                FunctionDecl *Fn,
4372                                                std::string &Description) {
4373  bool isTemplate = false;
4374
4375  if (FunctionTemplateDecl *FunTmpl = Fn->getPrimaryTemplate()) {
4376    isTemplate = true;
4377    Description = S.getTemplateArgumentBindingsText(
4378      FunTmpl->getTemplateParameters(), *Fn->getTemplateSpecializationArgs());
4379  }
4380
4381  if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
4382    if (!Ctor->isImplicit())
4383      return isTemplate ? oc_constructor_template : oc_constructor;
4384
4385    return Ctor->isCopyConstructor() ? oc_implicit_copy_constructor
4386                                     : oc_implicit_default_constructor;
4387  }
4388
4389  if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
4390    // This actually gets spelled 'candidate function' for now, but
4391    // it doesn't hurt to split it out.
4392    if (!Meth->isImplicit())
4393      return isTemplate ? oc_method_template : oc_method;
4394
4395    assert(Meth->isCopyAssignment()
4396           && "implicit method is not copy assignment operator?");
4397    return oc_implicit_copy_assignment;
4398  }
4399
4400  return isTemplate ? oc_function_template : oc_function;
4401}
4402
4403} // end anonymous namespace
4404
4405// Notes the location of an overload candidate.
4406void Sema::NoteOverloadCandidate(FunctionDecl *Fn) {
4407  std::string FnDesc;
4408  OverloadCandidateKind K = ClassifyOverloadCandidate(*this, Fn, FnDesc);
4409  Diag(Fn->getLocation(), diag::note_ovl_candidate)
4410    << (unsigned) K << FnDesc;
4411}
4412
4413/// Diagnoses an ambiguous conversion.  The partial diagnostic is the
4414/// "lead" diagnostic; it will be given two arguments, the source and
4415/// target types of the conversion.
4416void Sema::DiagnoseAmbiguousConversion(const ImplicitConversionSequence &ICS,
4417                                       SourceLocation CaretLoc,
4418                                       const PartialDiagnostic &PDiag) {
4419  Diag(CaretLoc, PDiag)
4420    << ICS.Ambiguous.getFromType() << ICS.Ambiguous.getToType();
4421  for (AmbiguousConversionSequence::const_iterator
4422         I = ICS.Ambiguous.begin(), E = ICS.Ambiguous.end(); I != E; ++I) {
4423    NoteOverloadCandidate(*I);
4424  }
4425}
4426
4427namespace {
4428
4429void DiagnoseBadConversion(Sema &S, OverloadCandidate *Cand, unsigned I) {
4430  const ImplicitConversionSequence &Conv = Cand->Conversions[I];
4431  assert(Conv.isBad());
4432  assert(Cand->Function && "for now, candidate must be a function");
4433  FunctionDecl *Fn = Cand->Function;
4434
4435  // There's a conversion slot for the object argument if this is a
4436  // non-constructor method.  Note that 'I' corresponds the
4437  // conversion-slot index.
4438  bool isObjectArgument = false;
4439  if (isa<CXXMethodDecl>(Fn) && !isa<CXXConstructorDecl>(Fn)) {
4440    if (I == 0)
4441      isObjectArgument = true;
4442    else
4443      I--;
4444  }
4445
4446  std::string FnDesc;
4447  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
4448
4449  Expr *FromExpr = Conv.Bad.FromExpr;
4450  QualType FromTy = Conv.Bad.getFromType();
4451  QualType ToTy = Conv.Bad.getToType();
4452
4453  if (FromTy == S.Context.OverloadTy) {
4454    assert(FromExpr);
4455    Expr *E = FromExpr->IgnoreParens();
4456    if (isa<UnaryOperator>(E))
4457      E = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
4458    DeclarationName Name = cast<OverloadExpr>(E)->getName();
4459
4460    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_overload)
4461      << (unsigned) FnKind << FnDesc
4462      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4463      << ToTy << Name << I+1;
4464    return;
4465  }
4466
4467  // Do some hand-waving analysis to see if the non-viability is due
4468  // to a qualifier mismatch.
4469  CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
4470  CanQualType CToTy = S.Context.getCanonicalType(ToTy);
4471  if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
4472    CToTy = RT->getPointeeType();
4473  else {
4474    // TODO: detect and diagnose the full richness of const mismatches.
4475    if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
4476      if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
4477        CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
4478  }
4479
4480  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
4481      !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
4482    // It is dumb that we have to do this here.
4483    while (isa<ArrayType>(CFromTy))
4484      CFromTy = CFromTy->getAs<ArrayType>()->getElementType();
4485    while (isa<ArrayType>(CToTy))
4486      CToTy = CFromTy->getAs<ArrayType>()->getElementType();
4487
4488    Qualifiers FromQs = CFromTy.getQualifiers();
4489    Qualifiers ToQs = CToTy.getQualifiers();
4490
4491    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
4492      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
4493        << (unsigned) FnKind << FnDesc
4494        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4495        << FromTy
4496        << FromQs.getAddressSpace() << ToQs.getAddressSpace()
4497        << (unsigned) isObjectArgument << I+1;
4498      return;
4499    }
4500
4501    unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4502    assert(CVR && "unexpected qualifiers mismatch");
4503
4504    if (isObjectArgument) {
4505      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
4506        << (unsigned) FnKind << FnDesc
4507        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4508        << FromTy << (CVR - 1);
4509    } else {
4510      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
4511        << (unsigned) FnKind << FnDesc
4512        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4513        << FromTy << (CVR - 1) << I+1;
4514    }
4515    return;
4516  }
4517
4518  // Diagnose references or pointers to incomplete types differently,
4519  // since it's far from impossible that the incompleteness triggered
4520  // the failure.
4521  QualType TempFromTy = FromTy.getNonReferenceType();
4522  if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
4523    TempFromTy = PTy->getPointeeType();
4524  if (TempFromTy->isIncompleteType()) {
4525    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
4526      << (unsigned) FnKind << FnDesc
4527      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4528      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
4529    return;
4530  }
4531
4532  // TODO: specialize more based on the kind of mismatch
4533  S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv)
4534    << (unsigned) FnKind << FnDesc
4535    << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4536    << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
4537}
4538
4539void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
4540                           unsigned NumFormalArgs) {
4541  // TODO: treat calls to a missing default constructor as a special case
4542
4543  FunctionDecl *Fn = Cand->Function;
4544  const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
4545
4546  unsigned MinParams = Fn->getMinRequiredArguments();
4547
4548  // at least / at most / exactly
4549  unsigned mode, modeCount;
4550  if (NumFormalArgs < MinParams) {
4551    assert(Cand->FailureKind == ovl_fail_too_few_arguments);
4552    if (MinParams != FnTy->getNumArgs() || FnTy->isVariadic())
4553      mode = 0; // "at least"
4554    else
4555      mode = 2; // "exactly"
4556    modeCount = MinParams;
4557  } else {
4558    assert(Cand->FailureKind == ovl_fail_too_many_arguments);
4559    if (MinParams != FnTy->getNumArgs())
4560      mode = 1; // "at most"
4561    else
4562      mode = 2; // "exactly"
4563    modeCount = FnTy->getNumArgs();
4564  }
4565
4566  std::string Description;
4567  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
4568
4569  S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
4570    << (unsigned) FnKind << Description << mode << modeCount << NumFormalArgs;
4571}
4572
4573/// Diagnose a failed template-argument deduction.
4574void DiagnoseBadDeduction(Sema &S, OverloadCandidate *Cand,
4575                          Expr **Args, unsigned NumArgs) {
4576  FunctionDecl *Fn = Cand->Function; // pattern
4577
4578  TemplateParameter Param = TemplateParameter::getFromOpaqueValue(
4579                                   Cand->DeductionFailure.TemplateParameter);
4580
4581  switch (Cand->DeductionFailure.Result) {
4582  case Sema::TDK_Success:
4583    llvm_unreachable("TDK_success while diagnosing bad deduction");
4584
4585  case Sema::TDK_Incomplete: {
4586    NamedDecl *ParamD;
4587    (ParamD = Param.dyn_cast<TemplateTypeParmDecl*>()) ||
4588    (ParamD = Param.dyn_cast<NonTypeTemplateParmDecl*>()) ||
4589    (ParamD = Param.dyn_cast<TemplateTemplateParmDecl*>());
4590    assert(ParamD && "no parameter found for incomplete deduction result");
4591    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_incomplete_deduction)
4592      << ParamD->getDeclName();
4593    return;
4594  }
4595
4596  // TODO: diagnose these individually, then kill off
4597  // note_ovl_candidate_bad_deduction, which is uselessly vague.
4598  case Sema::TDK_InstantiationDepth:
4599  case Sema::TDK_Inconsistent:
4600  case Sema::TDK_InconsistentQuals:
4601  case Sema::TDK_SubstitutionFailure:
4602  case Sema::TDK_NonDeducedMismatch:
4603  case Sema::TDK_TooManyArguments:
4604  case Sema::TDK_TooFewArguments:
4605  case Sema::TDK_InvalidExplicitArguments:
4606  case Sema::TDK_FailedOverloadResolution:
4607    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_deduction);
4608    return;
4609  }
4610}
4611
4612/// Generates a 'note' diagnostic for an overload candidate.  We've
4613/// already generated a primary error at the call site.
4614///
4615/// It really does need to be a single diagnostic with its caret
4616/// pointed at the candidate declaration.  Yes, this creates some
4617/// major challenges of technical writing.  Yes, this makes pointing
4618/// out problems with specific arguments quite awkward.  It's still
4619/// better than generating twenty screens of text for every failed
4620/// overload.
4621///
4622/// It would be great to be able to express per-candidate problems
4623/// more richly for those diagnostic clients that cared, but we'd
4624/// still have to be just as careful with the default diagnostics.
4625void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
4626                           Expr **Args, unsigned NumArgs) {
4627  FunctionDecl *Fn = Cand->Function;
4628
4629  // Note deleted candidates, but only if they're viable.
4630  if (Cand->Viable && (Fn->isDeleted() || Fn->hasAttr<UnavailableAttr>())) {
4631    std::string FnDesc;
4632    OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
4633
4634    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
4635      << FnKind << FnDesc << Fn->isDeleted();
4636    return;
4637  }
4638
4639  // We don't really have anything else to say about viable candidates.
4640  if (Cand->Viable) {
4641    S.NoteOverloadCandidate(Fn);
4642    return;
4643  }
4644
4645  switch (Cand->FailureKind) {
4646  case ovl_fail_too_many_arguments:
4647  case ovl_fail_too_few_arguments:
4648    return DiagnoseArityMismatch(S, Cand, NumArgs);
4649
4650  case ovl_fail_bad_deduction:
4651    return DiagnoseBadDeduction(S, Cand, Args, NumArgs);
4652
4653  case ovl_fail_trivial_conversion:
4654  case ovl_fail_bad_final_conversion:
4655    return S.NoteOverloadCandidate(Fn);
4656
4657  case ovl_fail_bad_conversion:
4658    for (unsigned I = 0, N = Cand->Conversions.size(); I != N; ++I)
4659      if (Cand->Conversions[I].isBad())
4660        return DiagnoseBadConversion(S, Cand, I);
4661
4662    // FIXME: this currently happens when we're called from SemaInit
4663    // when user-conversion overload fails.  Figure out how to handle
4664    // those conditions and diagnose them well.
4665    return S.NoteOverloadCandidate(Fn);
4666  }
4667}
4668
4669void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
4670  // Desugar the type of the surrogate down to a function type,
4671  // retaining as many typedefs as possible while still showing
4672  // the function type (and, therefore, its parameter types).
4673  QualType FnType = Cand->Surrogate->getConversionType();
4674  bool isLValueReference = false;
4675  bool isRValueReference = false;
4676  bool isPointer = false;
4677  if (const LValueReferenceType *FnTypeRef =
4678        FnType->getAs<LValueReferenceType>()) {
4679    FnType = FnTypeRef->getPointeeType();
4680    isLValueReference = true;
4681  } else if (const RValueReferenceType *FnTypeRef =
4682               FnType->getAs<RValueReferenceType>()) {
4683    FnType = FnTypeRef->getPointeeType();
4684    isRValueReference = true;
4685  }
4686  if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
4687    FnType = FnTypePtr->getPointeeType();
4688    isPointer = true;
4689  }
4690  // Desugar down to a function type.
4691  FnType = QualType(FnType->getAs<FunctionType>(), 0);
4692  // Reconstruct the pointer/reference as appropriate.
4693  if (isPointer) FnType = S.Context.getPointerType(FnType);
4694  if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
4695  if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
4696
4697  S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
4698    << FnType;
4699}
4700
4701void NoteBuiltinOperatorCandidate(Sema &S,
4702                                  const char *Opc,
4703                                  SourceLocation OpLoc,
4704                                  OverloadCandidate *Cand) {
4705  assert(Cand->Conversions.size() <= 2 && "builtin operator is not binary");
4706  std::string TypeStr("operator");
4707  TypeStr += Opc;
4708  TypeStr += "(";
4709  TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
4710  if (Cand->Conversions.size() == 1) {
4711    TypeStr += ")";
4712    S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
4713  } else {
4714    TypeStr += ", ";
4715    TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
4716    TypeStr += ")";
4717    S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
4718  }
4719}
4720
4721void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
4722                                  OverloadCandidate *Cand) {
4723  unsigned NoOperands = Cand->Conversions.size();
4724  for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
4725    const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
4726    if (ICS.isBad()) break; // all meaningless after first invalid
4727    if (!ICS.isAmbiguous()) continue;
4728
4729    S.DiagnoseAmbiguousConversion(ICS, OpLoc,
4730                              PDiag(diag::note_ambiguous_type_conversion));
4731  }
4732}
4733
4734SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
4735  if (Cand->Function)
4736    return Cand->Function->getLocation();
4737  if (Cand->IsSurrogate)
4738    return Cand->Surrogate->getLocation();
4739  return SourceLocation();
4740}
4741
4742struct CompareOverloadCandidatesForDisplay {
4743  Sema &S;
4744  CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
4745
4746  bool operator()(const OverloadCandidate *L,
4747                  const OverloadCandidate *R) {
4748    // Fast-path this check.
4749    if (L == R) return false;
4750
4751    // Order first by viability.
4752    if (L->Viable) {
4753      if (!R->Viable) return true;
4754
4755      // TODO: introduce a tri-valued comparison for overload
4756      // candidates.  Would be more worthwhile if we had a sort
4757      // that could exploit it.
4758      if (S.isBetterOverloadCandidate(*L, *R)) return true;
4759      if (S.isBetterOverloadCandidate(*R, *L)) return false;
4760    } else if (R->Viable)
4761      return false;
4762
4763    assert(L->Viable == R->Viable);
4764
4765    // Criteria by which we can sort non-viable candidates:
4766    if (!L->Viable) {
4767      // 1. Arity mismatches come after other candidates.
4768      if (L->FailureKind == ovl_fail_too_many_arguments ||
4769          L->FailureKind == ovl_fail_too_few_arguments)
4770        return false;
4771      if (R->FailureKind == ovl_fail_too_many_arguments ||
4772          R->FailureKind == ovl_fail_too_few_arguments)
4773        return true;
4774
4775      // 2. Bad conversions come first and are ordered by the number
4776      // of bad conversions and quality of good conversions.
4777      if (L->FailureKind == ovl_fail_bad_conversion) {
4778        if (R->FailureKind != ovl_fail_bad_conversion)
4779          return true;
4780
4781        // If there's any ordering between the defined conversions...
4782        // FIXME: this might not be transitive.
4783        assert(L->Conversions.size() == R->Conversions.size());
4784
4785        int leftBetter = 0;
4786        for (unsigned I = 0, E = L->Conversions.size(); I != E; ++I) {
4787          switch (S.CompareImplicitConversionSequences(L->Conversions[I],
4788                                                       R->Conversions[I])) {
4789          case ImplicitConversionSequence::Better:
4790            leftBetter++;
4791            break;
4792
4793          case ImplicitConversionSequence::Worse:
4794            leftBetter--;
4795            break;
4796
4797          case ImplicitConversionSequence::Indistinguishable:
4798            break;
4799          }
4800        }
4801        if (leftBetter > 0) return true;
4802        if (leftBetter < 0) return false;
4803
4804      } else if (R->FailureKind == ovl_fail_bad_conversion)
4805        return false;
4806
4807      // TODO: others?
4808    }
4809
4810    // Sort everything else by location.
4811    SourceLocation LLoc = GetLocationForCandidate(L);
4812    SourceLocation RLoc = GetLocationForCandidate(R);
4813
4814    // Put candidates without locations (e.g. builtins) at the end.
4815    if (LLoc.isInvalid()) return false;
4816    if (RLoc.isInvalid()) return true;
4817
4818    return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
4819  }
4820};
4821
4822/// CompleteNonViableCandidate - Normally, overload resolution only
4823/// computes up to the first
4824void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
4825                                Expr **Args, unsigned NumArgs) {
4826  assert(!Cand->Viable);
4827
4828  // Don't do anything on failures other than bad conversion.
4829  if (Cand->FailureKind != ovl_fail_bad_conversion) return;
4830
4831  // Skip forward to the first bad conversion.
4832  unsigned ConvIdx = 0;
4833  unsigned ConvCount = Cand->Conversions.size();
4834  while (true) {
4835    assert(ConvIdx != ConvCount && "no bad conversion in candidate");
4836    ConvIdx++;
4837    if (Cand->Conversions[ConvIdx - 1].isBad())
4838      break;
4839  }
4840
4841  if (ConvIdx == ConvCount)
4842    return;
4843
4844  // FIXME: these should probably be preserved from the overload
4845  // operation somehow.
4846  bool SuppressUserConversions = false;
4847  bool ForceRValue = false;
4848
4849  const FunctionProtoType* Proto;
4850  unsigned ArgIdx = ConvIdx;
4851
4852  if (Cand->IsSurrogate) {
4853    QualType ConvType
4854      = Cand->Surrogate->getConversionType().getNonReferenceType();
4855    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
4856      ConvType = ConvPtrType->getPointeeType();
4857    Proto = ConvType->getAs<FunctionProtoType>();
4858    ArgIdx--;
4859  } else if (Cand->Function) {
4860    Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
4861    if (isa<CXXMethodDecl>(Cand->Function) &&
4862        !isa<CXXConstructorDecl>(Cand->Function))
4863      ArgIdx--;
4864  } else {
4865    // Builtin binary operator with a bad first conversion.
4866    assert(ConvCount <= 3);
4867    for (; ConvIdx != ConvCount; ++ConvIdx)
4868      Cand->Conversions[ConvIdx]
4869        = S.TryCopyInitialization(Args[ConvIdx],
4870                                  Cand->BuiltinTypes.ParamTypes[ConvIdx],
4871                                  SuppressUserConversions, ForceRValue,
4872                                  /*InOverloadResolution*/ true);
4873    return;
4874  }
4875
4876  // Fill in the rest of the conversions.
4877  unsigned NumArgsInProto = Proto->getNumArgs();
4878  for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
4879    if (ArgIdx < NumArgsInProto)
4880      Cand->Conversions[ConvIdx]
4881        = S.TryCopyInitialization(Args[ArgIdx], Proto->getArgType(ArgIdx),
4882                                  SuppressUserConversions, ForceRValue,
4883                                  /*InOverloadResolution=*/true);
4884    else
4885      Cand->Conversions[ConvIdx].setEllipsis();
4886  }
4887}
4888
4889} // end anonymous namespace
4890
4891/// PrintOverloadCandidates - When overload resolution fails, prints
4892/// diagnostic messages containing the candidates in the candidate
4893/// set.
4894void
4895Sema::PrintOverloadCandidates(OverloadCandidateSet& CandidateSet,
4896                              OverloadCandidateDisplayKind OCD,
4897                              Expr **Args, unsigned NumArgs,
4898                              const char *Opc,
4899                              SourceLocation OpLoc) {
4900  // Sort the candidates by viability and position.  Sorting directly would
4901  // be prohibitive, so we make a set of pointers and sort those.
4902  llvm::SmallVector<OverloadCandidate*, 32> Cands;
4903  if (OCD == OCD_AllCandidates) Cands.reserve(CandidateSet.size());
4904  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
4905                                  LastCand = CandidateSet.end();
4906       Cand != LastCand; ++Cand) {
4907    if (Cand->Viable)
4908      Cands.push_back(Cand);
4909    else if (OCD == OCD_AllCandidates) {
4910      CompleteNonViableCandidate(*this, Cand, Args, NumArgs);
4911      Cands.push_back(Cand);
4912    }
4913  }
4914
4915  std::sort(Cands.begin(), Cands.end(),
4916            CompareOverloadCandidatesForDisplay(*this));
4917
4918  bool ReportedAmbiguousConversions = false;
4919
4920  llvm::SmallVectorImpl<OverloadCandidate*>::iterator I, E;
4921  for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
4922    OverloadCandidate *Cand = *I;
4923
4924    if (Cand->Function)
4925      NoteFunctionCandidate(*this, Cand, Args, NumArgs);
4926    else if (Cand->IsSurrogate)
4927      NoteSurrogateCandidate(*this, Cand);
4928
4929    // This a builtin candidate.  We do not, in general, want to list
4930    // every possible builtin candidate.
4931    else if (Cand->Viable) {
4932      // Generally we only see ambiguities including viable builtin
4933      // operators if overload resolution got screwed up by an
4934      // ambiguous user-defined conversion.
4935      //
4936      // FIXME: It's quite possible for different conversions to see
4937      // different ambiguities, though.
4938      if (!ReportedAmbiguousConversions) {
4939        NoteAmbiguousUserConversions(*this, OpLoc, Cand);
4940        ReportedAmbiguousConversions = true;
4941      }
4942
4943      // If this is a viable builtin, print it.
4944      NoteBuiltinOperatorCandidate(*this, Opc, OpLoc, Cand);
4945    }
4946  }
4947}
4948
4949static bool CheckUnresolvedAccess(Sema &S, OverloadExpr *E, NamedDecl *D,
4950                                  AccessSpecifier AS) {
4951  if (isa<UnresolvedLookupExpr>(E))
4952    return S.CheckUnresolvedLookupAccess(cast<UnresolvedLookupExpr>(E), D, AS);
4953
4954  return S.CheckUnresolvedMemberAccess(cast<UnresolvedMemberExpr>(E), D, AS);
4955}
4956
4957/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
4958/// an overloaded function (C++ [over.over]), where @p From is an
4959/// expression with overloaded function type and @p ToType is the type
4960/// we're trying to resolve to. For example:
4961///
4962/// @code
4963/// int f(double);
4964/// int f(int);
4965///
4966/// int (*pfd)(double) = f; // selects f(double)
4967/// @endcode
4968///
4969/// This routine returns the resulting FunctionDecl if it could be
4970/// resolved, and NULL otherwise. When @p Complain is true, this
4971/// routine will emit diagnostics if there is an error.
4972FunctionDecl *
4973Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType,
4974                                         bool Complain) {
4975  QualType FunctionType = ToType;
4976  bool IsMember = false;
4977  if (const PointerType *ToTypePtr = ToType->getAs<PointerType>())
4978    FunctionType = ToTypePtr->getPointeeType();
4979  else if (const ReferenceType *ToTypeRef = ToType->getAs<ReferenceType>())
4980    FunctionType = ToTypeRef->getPointeeType();
4981  else if (const MemberPointerType *MemTypePtr =
4982                    ToType->getAs<MemberPointerType>()) {
4983    FunctionType = MemTypePtr->getPointeeType();
4984    IsMember = true;
4985  }
4986
4987  // We only look at pointers or references to functions.
4988  FunctionType = Context.getCanonicalType(FunctionType).getUnqualifiedType();
4989  if (!FunctionType->isFunctionType())
4990    return 0;
4991
4992  // Find the actual overloaded function declaration.
4993  if (From->getType() != Context.OverloadTy)
4994    return 0;
4995
4996  // C++ [over.over]p1:
4997  //   [...] [Note: any redundant set of parentheses surrounding the
4998  //   overloaded function name is ignored (5.1). ]
4999  // C++ [over.over]p1:
5000  //   [...] The overloaded function name can be preceded by the &
5001  //   operator.
5002  OverloadExpr *OvlExpr = OverloadExpr::find(From).getPointer();
5003  TemplateArgumentListInfo ETABuffer, *ExplicitTemplateArgs = 0;
5004  if (OvlExpr->hasExplicitTemplateArgs()) {
5005    OvlExpr->getExplicitTemplateArgs().copyInto(ETABuffer);
5006    ExplicitTemplateArgs = &ETABuffer;
5007  }
5008
5009  // Look through all of the overloaded functions, searching for one
5010  // whose type matches exactly.
5011  UnresolvedSet<4> Matches;  // contains only FunctionDecls
5012  bool FoundNonTemplateFunction = false;
5013  for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
5014         E = OvlExpr->decls_end(); I != E; ++I) {
5015    // Look through any using declarations to find the underlying function.
5016    NamedDecl *Fn = (*I)->getUnderlyingDecl();
5017
5018    // C++ [over.over]p3:
5019    //   Non-member functions and static member functions match
5020    //   targets of type "pointer-to-function" or "reference-to-function."
5021    //   Nonstatic member functions match targets of
5022    //   type "pointer-to-member-function."
5023    // Note that according to DR 247, the containing class does not matter.
5024
5025    if (FunctionTemplateDecl *FunctionTemplate
5026          = dyn_cast<FunctionTemplateDecl>(Fn)) {
5027      if (CXXMethodDecl *Method
5028            = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
5029        // Skip non-static function templates when converting to pointer, and
5030        // static when converting to member pointer.
5031        if (Method->isStatic() == IsMember)
5032          continue;
5033      } else if (IsMember)
5034        continue;
5035
5036      // C++ [over.over]p2:
5037      //   If the name is a function template, template argument deduction is
5038      //   done (14.8.2.2), and if the argument deduction succeeds, the
5039      //   resulting template argument list is used to generate a single
5040      //   function template specialization, which is added to the set of
5041      //   overloaded functions considered.
5042      // FIXME: We don't really want to build the specialization here, do we?
5043      FunctionDecl *Specialization = 0;
5044      TemplateDeductionInfo Info(Context);
5045      if (TemplateDeductionResult Result
5046            = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
5047                                      FunctionType, Specialization, Info)) {
5048        // FIXME: make a note of the failed deduction for diagnostics.
5049        (void)Result;
5050      } else {
5051        // FIXME: If the match isn't exact, shouldn't we just drop this as
5052        // a candidate? Find a testcase before changing the code.
5053        assert(FunctionType
5054                 == Context.getCanonicalType(Specialization->getType()));
5055        Matches.addDecl(cast<FunctionDecl>(Specialization->getCanonicalDecl()),
5056                        I.getAccess());
5057      }
5058
5059      continue;
5060    }
5061
5062    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
5063      // Skip non-static functions when converting to pointer, and static
5064      // when converting to member pointer.
5065      if (Method->isStatic() == IsMember)
5066        continue;
5067
5068      // If we have explicit template arguments, skip non-templates.
5069      if (OvlExpr->hasExplicitTemplateArgs())
5070        continue;
5071    } else if (IsMember)
5072      continue;
5073
5074    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
5075      QualType ResultTy;
5076      if (Context.hasSameUnqualifiedType(FunctionType, FunDecl->getType()) ||
5077          IsNoReturnConversion(Context, FunDecl->getType(), FunctionType,
5078                               ResultTy)) {
5079        Matches.addDecl(cast<FunctionDecl>(FunDecl->getCanonicalDecl()),
5080                        I.getAccess());
5081        FoundNonTemplateFunction = true;
5082      }
5083    }
5084  }
5085
5086  // If there were 0 or 1 matches, we're done.
5087  if (Matches.empty())
5088    return 0;
5089  else if (Matches.size() == 1) {
5090    FunctionDecl *Result = cast<FunctionDecl>(*Matches.begin());
5091    MarkDeclarationReferenced(From->getLocStart(), Result);
5092    if (Complain)
5093      CheckUnresolvedAccess(*this, OvlExpr, Result, Matches.begin().getAccess());
5094    return Result;
5095  }
5096
5097  // C++ [over.over]p4:
5098  //   If more than one function is selected, [...]
5099  if (!FoundNonTemplateFunction) {
5100    //   [...] and any given function template specialization F1 is
5101    //   eliminated if the set contains a second function template
5102    //   specialization whose function template is more specialized
5103    //   than the function template of F1 according to the partial
5104    //   ordering rules of 14.5.5.2.
5105
5106    // The algorithm specified above is quadratic. We instead use a
5107    // two-pass algorithm (similar to the one used to identify the
5108    // best viable function in an overload set) that identifies the
5109    // best function template (if it exists).
5110
5111    UnresolvedSetIterator Result =
5112        getMostSpecialized(Matches.begin(), Matches.end(),
5113                           TPOC_Other, From->getLocStart(),
5114                           PDiag(),
5115                           PDiag(diag::err_addr_ovl_ambiguous)
5116                               << Matches[0]->getDeclName(),
5117                           PDiag(diag::note_ovl_candidate)
5118                               << (unsigned) oc_function_template);
5119    assert(Result != Matches.end() && "no most-specialized template");
5120    MarkDeclarationReferenced(From->getLocStart(), *Result);
5121    if (Complain)
5122      CheckUnresolvedAccess(*this, OvlExpr, *Result, Result.getAccess());
5123    return cast<FunctionDecl>(*Result);
5124  }
5125
5126  //   [...] any function template specializations in the set are
5127  //   eliminated if the set also contains a non-template function, [...]
5128  for (unsigned I = 0, N = Matches.size(); I != N; ) {
5129    if (cast<FunctionDecl>(Matches[I].getDecl())->getPrimaryTemplate() == 0)
5130      ++I;
5131    else {
5132      Matches.erase(I);
5133      --N;
5134    }
5135  }
5136
5137  // [...] After such eliminations, if any, there shall remain exactly one
5138  // selected function.
5139  if (Matches.size() == 1) {
5140    UnresolvedSetIterator Match = Matches.begin();
5141    MarkDeclarationReferenced(From->getLocStart(), *Match);
5142    if (Complain)
5143      CheckUnresolvedAccess(*this, OvlExpr, *Match, Match.getAccess());
5144    return cast<FunctionDecl>(*Match);
5145  }
5146
5147  // FIXME: We should probably return the same thing that BestViableFunction
5148  // returns (even if we issue the diagnostics here).
5149  Diag(From->getLocStart(), diag::err_addr_ovl_ambiguous)
5150    << Matches[0]->getDeclName();
5151  for (UnresolvedSetIterator I = Matches.begin(),
5152         E = Matches.end(); I != E; ++I)
5153    NoteOverloadCandidate(cast<FunctionDecl>(*I));
5154  return 0;
5155}
5156
5157/// \brief Given an expression that refers to an overloaded function, try to
5158/// resolve that overloaded function expression down to a single function.
5159///
5160/// This routine can only resolve template-ids that refer to a single function
5161/// template, where that template-id refers to a single template whose template
5162/// arguments are either provided by the template-id or have defaults,
5163/// as described in C++0x [temp.arg.explicit]p3.
5164FunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(Expr *From) {
5165  // C++ [over.over]p1:
5166  //   [...] [Note: any redundant set of parentheses surrounding the
5167  //   overloaded function name is ignored (5.1). ]
5168  // C++ [over.over]p1:
5169  //   [...] The overloaded function name can be preceded by the &
5170  //   operator.
5171
5172  if (From->getType() != Context.OverloadTy)
5173    return 0;
5174
5175  OverloadExpr *OvlExpr = OverloadExpr::find(From).getPointer();
5176
5177  // If we didn't actually find any template-ids, we're done.
5178  if (!OvlExpr->hasExplicitTemplateArgs())
5179    return 0;
5180
5181  TemplateArgumentListInfo ExplicitTemplateArgs;
5182  OvlExpr->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
5183
5184  // Look through all of the overloaded functions, searching for one
5185  // whose type matches exactly.
5186  FunctionDecl *Matched = 0;
5187  for (UnresolvedSetIterator I = OvlExpr->decls_begin(),
5188         E = OvlExpr->decls_end(); I != E; ++I) {
5189    // C++0x [temp.arg.explicit]p3:
5190    //   [...] In contexts where deduction is done and fails, or in contexts
5191    //   where deduction is not done, if a template argument list is
5192    //   specified and it, along with any default template arguments,
5193    //   identifies a single function template specialization, then the
5194    //   template-id is an lvalue for the function template specialization.
5195    FunctionTemplateDecl *FunctionTemplate = cast<FunctionTemplateDecl>(*I);
5196
5197    // C++ [over.over]p2:
5198    //   If the name is a function template, template argument deduction is
5199    //   done (14.8.2.2), and if the argument deduction succeeds, the
5200    //   resulting template argument list is used to generate a single
5201    //   function template specialization, which is added to the set of
5202    //   overloaded functions considered.
5203    FunctionDecl *Specialization = 0;
5204    TemplateDeductionInfo Info(Context);
5205    if (TemplateDeductionResult Result
5206          = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
5207                                    Specialization, Info)) {
5208      // FIXME: make a note of the failed deduction for diagnostics.
5209      (void)Result;
5210      continue;
5211    }
5212
5213    // Multiple matches; we can't resolve to a single declaration.
5214    if (Matched)
5215      return 0;
5216
5217    Matched = Specialization;
5218  }
5219
5220  return Matched;
5221}
5222
5223/// \brief Add a single candidate to the overload set.
5224static void AddOverloadedCallCandidate(Sema &S,
5225                                       NamedDecl *Callee,
5226                                       AccessSpecifier Access,
5227                       const TemplateArgumentListInfo *ExplicitTemplateArgs,
5228                                       Expr **Args, unsigned NumArgs,
5229                                       OverloadCandidateSet &CandidateSet,
5230                                       bool PartialOverloading) {
5231  if (isa<UsingShadowDecl>(Callee))
5232    Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
5233
5234  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
5235    assert(!ExplicitTemplateArgs && "Explicit template arguments?");
5236    S.AddOverloadCandidate(Func, Access, Args, NumArgs, CandidateSet,
5237                           false, false, PartialOverloading);
5238    return;
5239  }
5240
5241  if (FunctionTemplateDecl *FuncTemplate
5242      = dyn_cast<FunctionTemplateDecl>(Callee)) {
5243    S.AddTemplateOverloadCandidate(FuncTemplate, Access, ExplicitTemplateArgs,
5244                                   Args, NumArgs, CandidateSet);
5245    return;
5246  }
5247
5248  assert(false && "unhandled case in overloaded call candidate");
5249
5250  // do nothing?
5251}
5252
5253/// \brief Add the overload candidates named by callee and/or found by argument
5254/// dependent lookup to the given overload set.
5255void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
5256                                       Expr **Args, unsigned NumArgs,
5257                                       OverloadCandidateSet &CandidateSet,
5258                                       bool PartialOverloading) {
5259
5260#ifndef NDEBUG
5261  // Verify that ArgumentDependentLookup is consistent with the rules
5262  // in C++0x [basic.lookup.argdep]p3:
5263  //
5264  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
5265  //   and let Y be the lookup set produced by argument dependent
5266  //   lookup (defined as follows). If X contains
5267  //
5268  //     -- a declaration of a class member, or
5269  //
5270  //     -- a block-scope function declaration that is not a
5271  //        using-declaration, or
5272  //
5273  //     -- a declaration that is neither a function or a function
5274  //        template
5275  //
5276  //   then Y is empty.
5277
5278  if (ULE->requiresADL()) {
5279    for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
5280           E = ULE->decls_end(); I != E; ++I) {
5281      assert(!(*I)->getDeclContext()->isRecord());
5282      assert(isa<UsingShadowDecl>(*I) ||
5283             !(*I)->getDeclContext()->isFunctionOrMethod());
5284      assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
5285    }
5286  }
5287#endif
5288
5289  // It would be nice to avoid this copy.
5290  TemplateArgumentListInfo TABuffer;
5291  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
5292  if (ULE->hasExplicitTemplateArgs()) {
5293    ULE->copyTemplateArgumentsInto(TABuffer);
5294    ExplicitTemplateArgs = &TABuffer;
5295  }
5296
5297  for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
5298         E = ULE->decls_end(); I != E; ++I)
5299    AddOverloadedCallCandidate(*this, *I, I.getAccess(), ExplicitTemplateArgs,
5300                               Args, NumArgs, CandidateSet,
5301                               PartialOverloading);
5302
5303  if (ULE->requiresADL())
5304    AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
5305                                         Args, NumArgs,
5306                                         ExplicitTemplateArgs,
5307                                         CandidateSet,
5308                                         PartialOverloading);
5309}
5310
5311static Sema::OwningExprResult Destroy(Sema &SemaRef, Expr *Fn,
5312                                      Expr **Args, unsigned NumArgs) {
5313  Fn->Destroy(SemaRef.Context);
5314  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
5315    Args[Arg]->Destroy(SemaRef.Context);
5316  return SemaRef.ExprError();
5317}
5318
5319/// Attempts to recover from a call where no functions were found.
5320///
5321/// Returns true if new candidates were found.
5322static Sema::OwningExprResult
5323BuildRecoveryCallExpr(Sema &SemaRef, Expr *Fn,
5324                      UnresolvedLookupExpr *ULE,
5325                      SourceLocation LParenLoc,
5326                      Expr **Args, unsigned NumArgs,
5327                      SourceLocation *CommaLocs,
5328                      SourceLocation RParenLoc) {
5329
5330  CXXScopeSpec SS;
5331  if (ULE->getQualifier()) {
5332    SS.setScopeRep(ULE->getQualifier());
5333    SS.setRange(ULE->getQualifierRange());
5334  }
5335
5336  TemplateArgumentListInfo TABuffer;
5337  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
5338  if (ULE->hasExplicitTemplateArgs()) {
5339    ULE->copyTemplateArgumentsInto(TABuffer);
5340    ExplicitTemplateArgs = &TABuffer;
5341  }
5342
5343  LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
5344                 Sema::LookupOrdinaryName);
5345  if (SemaRef.DiagnoseEmptyLookup(/*Scope=*/0, SS, R))
5346    return Destroy(SemaRef, Fn, Args, NumArgs);
5347
5348  assert(!R.empty() && "lookup results empty despite recovery");
5349
5350  // Build an implicit member call if appropriate.  Just drop the
5351  // casts and such from the call, we don't really care.
5352  Sema::OwningExprResult NewFn = SemaRef.ExprError();
5353  if ((*R.begin())->isCXXClassMember())
5354    NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, R, ExplicitTemplateArgs);
5355  else if (ExplicitTemplateArgs)
5356    NewFn = SemaRef.BuildTemplateIdExpr(SS, R, false, *ExplicitTemplateArgs);
5357  else
5358    NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
5359
5360  if (NewFn.isInvalid())
5361    return Destroy(SemaRef, Fn, Args, NumArgs);
5362
5363  Fn->Destroy(SemaRef.Context);
5364
5365  // This shouldn't cause an infinite loop because we're giving it
5366  // an expression with non-empty lookup results, which should never
5367  // end up here.
5368  return SemaRef.ActOnCallExpr(/*Scope*/ 0, move(NewFn), LParenLoc,
5369                         Sema::MultiExprArg(SemaRef, (void**) Args, NumArgs),
5370                               CommaLocs, RParenLoc);
5371}
5372
5373/// ResolveOverloadedCallFn - Given the call expression that calls Fn
5374/// (which eventually refers to the declaration Func) and the call
5375/// arguments Args/NumArgs, attempt to resolve the function call down
5376/// to a specific function. If overload resolution succeeds, returns
5377/// the function declaration produced by overload
5378/// resolution. Otherwise, emits diagnostics, deletes all of the
5379/// arguments and Fn, and returns NULL.
5380Sema::OwningExprResult
5381Sema::BuildOverloadedCallExpr(Expr *Fn, UnresolvedLookupExpr *ULE,
5382                              SourceLocation LParenLoc,
5383                              Expr **Args, unsigned NumArgs,
5384                              SourceLocation *CommaLocs,
5385                              SourceLocation RParenLoc) {
5386#ifndef NDEBUG
5387  if (ULE->requiresADL()) {
5388    // To do ADL, we must have found an unqualified name.
5389    assert(!ULE->getQualifier() && "qualified name with ADL");
5390
5391    // We don't perform ADL for implicit declarations of builtins.
5392    // Verify that this was correctly set up.
5393    FunctionDecl *F;
5394    if (ULE->decls_begin() + 1 == ULE->decls_end() &&
5395        (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
5396        F->getBuiltinID() && F->isImplicit())
5397      assert(0 && "performing ADL for builtin");
5398
5399    // We don't perform ADL in C.
5400    assert(getLangOptions().CPlusPlus && "ADL enabled in C");
5401  }
5402#endif
5403
5404  OverloadCandidateSet CandidateSet;
5405
5406  // Add the functions denoted by the callee to the set of candidate
5407  // functions, including those from argument-dependent lookup.
5408  AddOverloadedCallCandidates(ULE, Args, NumArgs, CandidateSet);
5409
5410  // If we found nothing, try to recover.
5411  // AddRecoveryCallCandidates diagnoses the error itself, so we just
5412  // bailout out if it fails.
5413  if (CandidateSet.empty())
5414    return BuildRecoveryCallExpr(*this, Fn, ULE, LParenLoc, Args, NumArgs,
5415                                 CommaLocs, RParenLoc);
5416
5417  OverloadCandidateSet::iterator Best;
5418  switch (BestViableFunction(CandidateSet, Fn->getLocStart(), Best)) {
5419  case OR_Success: {
5420    FunctionDecl *FDecl = Best->Function;
5421    CheckUnresolvedLookupAccess(ULE, FDecl, Best->getAccess());
5422    Fn = FixOverloadedFunctionReference(Fn, FDecl);
5423    return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc);
5424  }
5425
5426  case OR_No_Viable_Function:
5427    Diag(Fn->getSourceRange().getBegin(),
5428         diag::err_ovl_no_viable_function_in_call)
5429      << ULE->getName() << Fn->getSourceRange();
5430    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
5431    break;
5432
5433  case OR_Ambiguous:
5434    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_ambiguous_call)
5435      << ULE->getName() << Fn->getSourceRange();
5436    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs);
5437    break;
5438
5439  case OR_Deleted:
5440    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_deleted_call)
5441      << Best->Function->isDeleted()
5442      << ULE->getName()
5443      << Fn->getSourceRange();
5444    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
5445    break;
5446  }
5447
5448  // Overload resolution failed. Destroy all of the subexpressions and
5449  // return NULL.
5450  Fn->Destroy(Context);
5451  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
5452    Args[Arg]->Destroy(Context);
5453  return ExprError();
5454}
5455
5456static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
5457  return Functions.size() > 1 ||
5458    (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
5459}
5460
5461/// \brief Create a unary operation that may resolve to an overloaded
5462/// operator.
5463///
5464/// \param OpLoc The location of the operator itself (e.g., '*').
5465///
5466/// \param OpcIn The UnaryOperator::Opcode that describes this
5467/// operator.
5468///
5469/// \param Functions The set of non-member functions that will be
5470/// considered by overload resolution. The caller needs to build this
5471/// set based on the context using, e.g.,
5472/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
5473/// set should not contain any member functions; those will be added
5474/// by CreateOverloadedUnaryOp().
5475///
5476/// \param input The input argument.
5477Sema::OwningExprResult
5478Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
5479                              const UnresolvedSetImpl &Fns,
5480                              ExprArg input) {
5481  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
5482  Expr *Input = (Expr *)input.get();
5483
5484  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
5485  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
5486  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5487
5488  Expr *Args[2] = { Input, 0 };
5489  unsigned NumArgs = 1;
5490
5491  // For post-increment and post-decrement, add the implicit '0' as
5492  // the second argument, so that we know this is a post-increment or
5493  // post-decrement.
5494  if (Opc == UnaryOperator::PostInc || Opc == UnaryOperator::PostDec) {
5495    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
5496    Args[1] = new (Context) IntegerLiteral(Zero, Context.IntTy,
5497                                           SourceLocation());
5498    NumArgs = 2;
5499  }
5500
5501  if (Input->isTypeDependent()) {
5502    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
5503    UnresolvedLookupExpr *Fn
5504      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
5505                                     0, SourceRange(), OpName, OpLoc,
5506                                     /*ADL*/ true, IsOverloaded(Fns));
5507    Fn->addDecls(Fns.begin(), Fns.end());
5508
5509    input.release();
5510    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
5511                                                   &Args[0], NumArgs,
5512                                                   Context.DependentTy,
5513                                                   OpLoc));
5514  }
5515
5516  // Build an empty overload set.
5517  OverloadCandidateSet CandidateSet;
5518
5519  // Add the candidates from the given function set.
5520  AddFunctionCandidates(Fns, &Args[0], NumArgs, CandidateSet, false);
5521
5522  // Add operator candidates that are member functions.
5523  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
5524
5525  // Add candidates from ADL.
5526  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
5527                                       Args, 1,
5528                                       /*ExplicitTemplateArgs*/ 0,
5529                                       CandidateSet);
5530
5531  // Add builtin operator candidates.
5532  AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
5533
5534  // Perform overload resolution.
5535  OverloadCandidateSet::iterator Best;
5536  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5537  case OR_Success: {
5538    // We found a built-in operator or an overloaded operator.
5539    FunctionDecl *FnDecl = Best->Function;
5540
5541    if (FnDecl) {
5542      // We matched an overloaded operator. Build a call to that
5543      // operator.
5544
5545      // Convert the arguments.
5546      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
5547        CheckMemberOperatorAccess(OpLoc, Args[0], Method, Best->getAccess());
5548
5549        if (PerformObjectArgumentInitialization(Input, Method))
5550          return ExprError();
5551      } else {
5552        // Convert the arguments.
5553        OwningExprResult InputInit
5554          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
5555                                                      FnDecl->getParamDecl(0)),
5556                                      SourceLocation(),
5557                                      move(input));
5558        if (InputInit.isInvalid())
5559          return ExprError();
5560
5561        input = move(InputInit);
5562        Input = (Expr *)input.get();
5563      }
5564
5565      // Determine the result type
5566      QualType ResultTy = FnDecl->getResultType().getNonReferenceType();
5567
5568      // Build the actual expression node.
5569      Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5570                                               SourceLocation());
5571      UsualUnaryConversions(FnExpr);
5572
5573      input.release();
5574      Args[0] = Input;
5575      ExprOwningPtr<CallExpr> TheCall(this,
5576        new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
5577                                          Args, NumArgs, ResultTy, OpLoc));
5578
5579      if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
5580                              FnDecl))
5581        return ExprError();
5582
5583      return MaybeBindToTemporary(TheCall.release());
5584    } else {
5585      // We matched a built-in operator. Convert the arguments, then
5586      // break out so that we will build the appropriate built-in
5587      // operator node.
5588        if (PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
5589                                      Best->Conversions[0], AA_Passing))
5590          return ExprError();
5591
5592        break;
5593      }
5594    }
5595
5596    case OR_No_Viable_Function:
5597      // No viable function; fall through to handling this as a
5598      // built-in operator, which will produce an error message for us.
5599      break;
5600
5601    case OR_Ambiguous:
5602      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5603          << UnaryOperator::getOpcodeStr(Opc)
5604          << Input->getSourceRange();
5605      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs,
5606                              UnaryOperator::getOpcodeStr(Opc), OpLoc);
5607      return ExprError();
5608
5609    case OR_Deleted:
5610      Diag(OpLoc, diag::err_ovl_deleted_oper)
5611        << Best->Function->isDeleted()
5612        << UnaryOperator::getOpcodeStr(Opc)
5613        << Input->getSourceRange();
5614      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
5615      return ExprError();
5616    }
5617
5618  // Either we found no viable overloaded operator or we matched a
5619  // built-in operator. In either case, fall through to trying to
5620  // build a built-in operation.
5621  input.release();
5622  return CreateBuiltinUnaryOp(OpLoc, Opc, Owned(Input));
5623}
5624
5625/// \brief Create a binary operation that may resolve to an overloaded
5626/// operator.
5627///
5628/// \param OpLoc The location of the operator itself (e.g., '+').
5629///
5630/// \param OpcIn The BinaryOperator::Opcode that describes this
5631/// operator.
5632///
5633/// \param Functions The set of non-member functions that will be
5634/// considered by overload resolution. The caller needs to build this
5635/// set based on the context using, e.g.,
5636/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
5637/// set should not contain any member functions; those will be added
5638/// by CreateOverloadedBinOp().
5639///
5640/// \param LHS Left-hand argument.
5641/// \param RHS Right-hand argument.
5642Sema::OwningExprResult
5643Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
5644                            unsigned OpcIn,
5645                            const UnresolvedSetImpl &Fns,
5646                            Expr *LHS, Expr *RHS) {
5647  Expr *Args[2] = { LHS, RHS };
5648  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
5649
5650  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
5651  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
5652  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5653
5654  // If either side is type-dependent, create an appropriate dependent
5655  // expression.
5656  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
5657    if (Fns.empty()) {
5658      // If there are no functions to store, just build a dependent
5659      // BinaryOperator or CompoundAssignment.
5660      if (Opc <= BinaryOperator::Assign || Opc > BinaryOperator::OrAssign)
5661        return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
5662                                                  Context.DependentTy, OpLoc));
5663
5664      return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
5665                                                        Context.DependentTy,
5666                                                        Context.DependentTy,
5667                                                        Context.DependentTy,
5668                                                        OpLoc));
5669    }
5670
5671    // FIXME: save results of ADL from here?
5672    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
5673    UnresolvedLookupExpr *Fn
5674      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
5675                                     0, SourceRange(), OpName, OpLoc,
5676                                     /*ADL*/ true, IsOverloaded(Fns));
5677
5678    Fn->addDecls(Fns.begin(), Fns.end());
5679    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
5680                                                   Args, 2,
5681                                                   Context.DependentTy,
5682                                                   OpLoc));
5683  }
5684
5685  // If this is the .* operator, which is not overloadable, just
5686  // create a built-in binary operator.
5687  if (Opc == BinaryOperator::PtrMemD)
5688    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5689
5690  // If this is the assignment operator, we only perform overload resolution
5691  // if the left-hand side is a class or enumeration type. This is actually
5692  // a hack. The standard requires that we do overload resolution between the
5693  // various built-in candidates, but as DR507 points out, this can lead to
5694  // problems. So we do it this way, which pretty much follows what GCC does.
5695  // Note that we go the traditional code path for compound assignment forms.
5696  if (Opc==BinaryOperator::Assign && !Args[0]->getType()->isOverloadableType())
5697    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5698
5699  // Build an empty overload set.
5700  OverloadCandidateSet CandidateSet;
5701
5702  // Add the candidates from the given function set.
5703  AddFunctionCandidates(Fns, Args, 2, CandidateSet, false);
5704
5705  // Add operator candidates that are member functions.
5706  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
5707
5708  // Add candidates from ADL.
5709  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
5710                                       Args, 2,
5711                                       /*ExplicitTemplateArgs*/ 0,
5712                                       CandidateSet);
5713
5714  // Add builtin operator candidates.
5715  AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
5716
5717  // Perform overload resolution.
5718  OverloadCandidateSet::iterator Best;
5719  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5720    case OR_Success: {
5721      // We found a built-in operator or an overloaded operator.
5722      FunctionDecl *FnDecl = Best->Function;
5723
5724      if (FnDecl) {
5725        // We matched an overloaded operator. Build a call to that
5726        // operator.
5727
5728        // Convert the arguments.
5729        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
5730          // Best->Access is only meaningful for class members.
5731          CheckMemberOperatorAccess(OpLoc, Args[0], Method, Best->getAccess());
5732
5733          OwningExprResult Arg1
5734            = PerformCopyInitialization(
5735                                        InitializedEntity::InitializeParameter(
5736                                                        FnDecl->getParamDecl(0)),
5737                                        SourceLocation(),
5738                                        Owned(Args[1]));
5739          if (Arg1.isInvalid())
5740            return ExprError();
5741
5742          if (PerformObjectArgumentInitialization(Args[0], Method))
5743            return ExprError();
5744
5745          Args[1] = RHS = Arg1.takeAs<Expr>();
5746        } else {
5747          // Convert the arguments.
5748          OwningExprResult Arg0
5749            = PerformCopyInitialization(
5750                                        InitializedEntity::InitializeParameter(
5751                                                        FnDecl->getParamDecl(0)),
5752                                        SourceLocation(),
5753                                        Owned(Args[0]));
5754          if (Arg0.isInvalid())
5755            return ExprError();
5756
5757          OwningExprResult Arg1
5758            = PerformCopyInitialization(
5759                                        InitializedEntity::InitializeParameter(
5760                                                        FnDecl->getParamDecl(1)),
5761                                        SourceLocation(),
5762                                        Owned(Args[1]));
5763          if (Arg1.isInvalid())
5764            return ExprError();
5765          Args[0] = LHS = Arg0.takeAs<Expr>();
5766          Args[1] = RHS = Arg1.takeAs<Expr>();
5767        }
5768
5769        // Determine the result type
5770        QualType ResultTy
5771          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
5772        ResultTy = ResultTy.getNonReferenceType();
5773
5774        // Build the actual expression node.
5775        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5776                                                 OpLoc);
5777        UsualUnaryConversions(FnExpr);
5778
5779        ExprOwningPtr<CXXOperatorCallExpr>
5780          TheCall(this, new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
5781                                                          Args, 2, ResultTy,
5782                                                          OpLoc));
5783
5784        if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
5785                                FnDecl))
5786          return ExprError();
5787
5788        return MaybeBindToTemporary(TheCall.release());
5789      } else {
5790        // We matched a built-in operator. Convert the arguments, then
5791        // break out so that we will build the appropriate built-in
5792        // operator node.
5793        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
5794                                      Best->Conversions[0], AA_Passing) ||
5795            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
5796                                      Best->Conversions[1], AA_Passing))
5797          return ExprError();
5798
5799        break;
5800      }
5801    }
5802
5803    case OR_No_Viable_Function: {
5804      // C++ [over.match.oper]p9:
5805      //   If the operator is the operator , [...] and there are no
5806      //   viable functions, then the operator is assumed to be the
5807      //   built-in operator and interpreted according to clause 5.
5808      if (Opc == BinaryOperator::Comma)
5809        break;
5810
5811      // For class as left operand for assignment or compound assigment operator
5812      // do not fall through to handling in built-in, but report that no overloaded
5813      // assignment operator found
5814      OwningExprResult Result = ExprError();
5815      if (Args[0]->getType()->isRecordType() &&
5816          Opc >= BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign) {
5817        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
5818             << BinaryOperator::getOpcodeStr(Opc)
5819             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5820      } else {
5821        // No viable function; try to create a built-in operation, which will
5822        // produce an error. Then, show the non-viable candidates.
5823        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5824      }
5825      assert(Result.isInvalid() &&
5826             "C++ binary operator overloading is missing candidates!");
5827      if (Result.isInvalid())
5828        PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
5829                                BinaryOperator::getOpcodeStr(Opc), OpLoc);
5830      return move(Result);
5831    }
5832
5833    case OR_Ambiguous:
5834      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5835          << BinaryOperator::getOpcodeStr(Opc)
5836          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5837      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, 2,
5838                              BinaryOperator::getOpcodeStr(Opc), OpLoc);
5839      return ExprError();
5840
5841    case OR_Deleted:
5842      Diag(OpLoc, diag::err_ovl_deleted_oper)
5843        << Best->Function->isDeleted()
5844        << BinaryOperator::getOpcodeStr(Opc)
5845        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5846      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2);
5847      return ExprError();
5848  }
5849
5850  // We matched a built-in operator; build it.
5851  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5852}
5853
5854Action::OwningExprResult
5855Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
5856                                         SourceLocation RLoc,
5857                                         ExprArg Base, ExprArg Idx) {
5858  Expr *Args[2] = { static_cast<Expr*>(Base.get()),
5859                    static_cast<Expr*>(Idx.get()) };
5860  DeclarationName OpName =
5861      Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
5862
5863  // If either side is type-dependent, create an appropriate dependent
5864  // expression.
5865  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
5866
5867    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
5868    UnresolvedLookupExpr *Fn
5869      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
5870                                     0, SourceRange(), OpName, LLoc,
5871                                     /*ADL*/ true, /*Overloaded*/ false);
5872    // Can't add any actual overloads yet
5873
5874    Base.release();
5875    Idx.release();
5876    return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
5877                                                   Args, 2,
5878                                                   Context.DependentTy,
5879                                                   RLoc));
5880  }
5881
5882  // Build an empty overload set.
5883  OverloadCandidateSet CandidateSet;
5884
5885  // Subscript can only be overloaded as a member function.
5886
5887  // Add operator candidates that are member functions.
5888  AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
5889
5890  // Add builtin operator candidates.
5891  AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
5892
5893  // Perform overload resolution.
5894  OverloadCandidateSet::iterator Best;
5895  switch (BestViableFunction(CandidateSet, LLoc, Best)) {
5896    case OR_Success: {
5897      // We found a built-in operator or an overloaded operator.
5898      FunctionDecl *FnDecl = Best->Function;
5899
5900      if (FnDecl) {
5901        // We matched an overloaded operator. Build a call to that
5902        // operator.
5903
5904        CheckMemberOperatorAccess(LLoc, Args[0], FnDecl, Best->getAccess());
5905
5906        // Convert the arguments.
5907        CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
5908        if (PerformObjectArgumentInitialization(Args[0], Method))
5909          return ExprError();
5910
5911        // Convert the arguments.
5912        OwningExprResult InputInit
5913          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
5914                                                      FnDecl->getParamDecl(0)),
5915                                      SourceLocation(),
5916                                      Owned(Args[1]));
5917        if (InputInit.isInvalid())
5918          return ExprError();
5919
5920        Args[1] = InputInit.takeAs<Expr>();
5921
5922        // Determine the result type
5923        QualType ResultTy
5924          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
5925        ResultTy = ResultTy.getNonReferenceType();
5926
5927        // Build the actual expression node.
5928        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5929                                                 LLoc);
5930        UsualUnaryConversions(FnExpr);
5931
5932        Base.release();
5933        Idx.release();
5934        ExprOwningPtr<CXXOperatorCallExpr>
5935          TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
5936                                                          FnExpr, Args, 2,
5937                                                          ResultTy, RLoc));
5938
5939        if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall.get(),
5940                                FnDecl))
5941          return ExprError();
5942
5943        return MaybeBindToTemporary(TheCall.release());
5944      } else {
5945        // We matched a built-in operator. Convert the arguments, then
5946        // break out so that we will build the appropriate built-in
5947        // operator node.
5948        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
5949                                      Best->Conversions[0], AA_Passing) ||
5950            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
5951                                      Best->Conversions[1], AA_Passing))
5952          return ExprError();
5953
5954        break;
5955      }
5956    }
5957
5958    case OR_No_Viable_Function: {
5959      if (CandidateSet.empty())
5960        Diag(LLoc, diag::err_ovl_no_oper)
5961          << Args[0]->getType() << /*subscript*/ 0
5962          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5963      else
5964        Diag(LLoc, diag::err_ovl_no_viable_subscript)
5965          << Args[0]->getType()
5966          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5967      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
5968                              "[]", LLoc);
5969      return ExprError();
5970    }
5971
5972    case OR_Ambiguous:
5973      Diag(LLoc,  diag::err_ovl_ambiguous_oper)
5974          << "[]" << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5975      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, 2,
5976                              "[]", LLoc);
5977      return ExprError();
5978
5979    case OR_Deleted:
5980      Diag(LLoc, diag::err_ovl_deleted_oper)
5981        << Best->Function->isDeleted() << "[]"
5982        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5983      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
5984                              "[]", LLoc);
5985      return ExprError();
5986    }
5987
5988  // We matched a built-in operator; build it.
5989  Base.release();
5990  Idx.release();
5991  return CreateBuiltinArraySubscriptExpr(Owned(Args[0]), LLoc,
5992                                         Owned(Args[1]), RLoc);
5993}
5994
5995/// BuildCallToMemberFunction - Build a call to a member
5996/// function. MemExpr is the expression that refers to the member
5997/// function (and includes the object parameter), Args/NumArgs are the
5998/// arguments to the function call (not including the object
5999/// parameter). The caller needs to validate that the member
6000/// expression refers to a member function or an overloaded member
6001/// function.
6002Sema::OwningExprResult
6003Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
6004                                SourceLocation LParenLoc, Expr **Args,
6005                                unsigned NumArgs, SourceLocation *CommaLocs,
6006                                SourceLocation RParenLoc) {
6007  // Dig out the member expression. This holds both the object
6008  // argument and the member function we're referring to.
6009  Expr *NakedMemExpr = MemExprE->IgnoreParens();
6010
6011  MemberExpr *MemExpr;
6012  CXXMethodDecl *Method = 0;
6013  if (isa<MemberExpr>(NakedMemExpr)) {
6014    MemExpr = cast<MemberExpr>(NakedMemExpr);
6015    Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
6016  } else {
6017    UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
6018
6019    QualType ObjectType = UnresExpr->getBaseType();
6020
6021    // Add overload candidates
6022    OverloadCandidateSet CandidateSet;
6023
6024    // FIXME: avoid copy.
6025    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6026    if (UnresExpr->hasExplicitTemplateArgs()) {
6027      UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
6028      TemplateArgs = &TemplateArgsBuffer;
6029    }
6030
6031    for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
6032           E = UnresExpr->decls_end(); I != E; ++I) {
6033
6034      NamedDecl *Func = *I;
6035      CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
6036      if (isa<UsingShadowDecl>(Func))
6037        Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
6038
6039      if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
6040        // If explicit template arguments were provided, we can't call a
6041        // non-template member function.
6042        if (TemplateArgs)
6043          continue;
6044
6045        AddMethodCandidate(Method, I.getAccess(), ActingDC, ObjectType,
6046                           Args, NumArgs,
6047                           CandidateSet, /*SuppressUserConversions=*/false);
6048      } else {
6049        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
6050                                   I.getAccess(), ActingDC, TemplateArgs,
6051                                   ObjectType, Args, NumArgs,
6052                                   CandidateSet,
6053                                   /*SuppressUsedConversions=*/false);
6054      }
6055    }
6056
6057    DeclarationName DeclName = UnresExpr->getMemberName();
6058
6059    OverloadCandidateSet::iterator Best;
6060    switch (BestViableFunction(CandidateSet, UnresExpr->getLocStart(), Best)) {
6061    case OR_Success:
6062      Method = cast<CXXMethodDecl>(Best->Function);
6063      CheckUnresolvedMemberAccess(UnresExpr, Method, Best->getAccess());
6064      break;
6065
6066    case OR_No_Viable_Function:
6067      Diag(UnresExpr->getMemberLoc(),
6068           diag::err_ovl_no_viable_member_function_in_call)
6069        << DeclName << MemExprE->getSourceRange();
6070      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6071      // FIXME: Leaking incoming expressions!
6072      return ExprError();
6073
6074    case OR_Ambiguous:
6075      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
6076        << DeclName << MemExprE->getSourceRange();
6077      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6078      // FIXME: Leaking incoming expressions!
6079      return ExprError();
6080
6081    case OR_Deleted:
6082      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
6083        << Best->Function->isDeleted()
6084        << DeclName << MemExprE->getSourceRange();
6085      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6086      // FIXME: Leaking incoming expressions!
6087      return ExprError();
6088    }
6089
6090    MemExprE = FixOverloadedFunctionReference(MemExprE, Method);
6091
6092    // If overload resolution picked a static member, build a
6093    // non-member call based on that function.
6094    if (Method->isStatic()) {
6095      return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
6096                                   Args, NumArgs, RParenLoc);
6097    }
6098
6099    MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
6100  }
6101
6102  assert(Method && "Member call to something that isn't a method?");
6103  ExprOwningPtr<CXXMemberCallExpr>
6104    TheCall(this, new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
6105                                                  NumArgs,
6106                                  Method->getResultType().getNonReferenceType(),
6107                                  RParenLoc));
6108
6109  // Check for a valid return type.
6110  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
6111                          TheCall.get(), Method))
6112    return ExprError();
6113
6114  // Convert the object argument (for a non-static member function call).
6115  Expr *ObjectArg = MemExpr->getBase();
6116  if (!Method->isStatic() &&
6117      PerformObjectArgumentInitialization(ObjectArg, Method))
6118    return ExprError();
6119  MemExpr->setBase(ObjectArg);
6120
6121  // Convert the rest of the arguments
6122  const FunctionProtoType *Proto = cast<FunctionProtoType>(Method->getType());
6123  if (ConvertArgumentsForCall(&*TheCall, MemExpr, Method, Proto, Args, NumArgs,
6124                              RParenLoc))
6125    return ExprError();
6126
6127  if (CheckFunctionCall(Method, TheCall.get()))
6128    return ExprError();
6129
6130  return MaybeBindToTemporary(TheCall.release());
6131}
6132
6133/// BuildCallToObjectOfClassType - Build a call to an object of class
6134/// type (C++ [over.call.object]), which can end up invoking an
6135/// overloaded function call operator (@c operator()) or performing a
6136/// user-defined conversion on the object argument.
6137Sema::ExprResult
6138Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
6139                                   SourceLocation LParenLoc,
6140                                   Expr **Args, unsigned NumArgs,
6141                                   SourceLocation *CommaLocs,
6142                                   SourceLocation RParenLoc) {
6143  assert(Object->getType()->isRecordType() && "Requires object type argument");
6144  const RecordType *Record = Object->getType()->getAs<RecordType>();
6145
6146  // C++ [over.call.object]p1:
6147  //  If the primary-expression E in the function call syntax
6148  //  evaluates to a class object of type "cv T", then the set of
6149  //  candidate functions includes at least the function call
6150  //  operators of T. The function call operators of T are obtained by
6151  //  ordinary lookup of the name operator() in the context of
6152  //  (E).operator().
6153  OverloadCandidateSet CandidateSet;
6154  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
6155
6156  if (RequireCompleteType(LParenLoc, Object->getType(),
6157                          PartialDiagnostic(diag::err_incomplete_object_call)
6158                          << Object->getSourceRange()))
6159    return true;
6160
6161  LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
6162  LookupQualifiedName(R, Record->getDecl());
6163  R.suppressDiagnostics();
6164
6165  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
6166       Oper != OperEnd; ++Oper) {
6167    AddMethodCandidate(*Oper, Oper.getAccess(), Object->getType(),
6168                       Args, NumArgs, CandidateSet,
6169                       /*SuppressUserConversions=*/ false);
6170  }
6171
6172  // C++ [over.call.object]p2:
6173  //   In addition, for each conversion function declared in T of the
6174  //   form
6175  //
6176  //        operator conversion-type-id () cv-qualifier;
6177  //
6178  //   where cv-qualifier is the same cv-qualification as, or a
6179  //   greater cv-qualification than, cv, and where conversion-type-id
6180  //   denotes the type "pointer to function of (P1,...,Pn) returning
6181  //   R", or the type "reference to pointer to function of
6182  //   (P1,...,Pn) returning R", or the type "reference to function
6183  //   of (P1,...,Pn) returning R", a surrogate call function [...]
6184  //   is also considered as a candidate function. Similarly,
6185  //   surrogate call functions are added to the set of candidate
6186  //   functions for each conversion function declared in an
6187  //   accessible base class provided the function is not hidden
6188  //   within T by another intervening declaration.
6189  const UnresolvedSetImpl *Conversions
6190    = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
6191  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6192         E = Conversions->end(); I != E; ++I) {
6193    NamedDecl *D = *I;
6194    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
6195    if (isa<UsingShadowDecl>(D))
6196      D = cast<UsingShadowDecl>(D)->getTargetDecl();
6197
6198    // Skip over templated conversion functions; they aren't
6199    // surrogates.
6200    if (isa<FunctionTemplateDecl>(D))
6201      continue;
6202
6203    CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6204
6205    // Strip the reference type (if any) and then the pointer type (if
6206    // any) to get down to what might be a function type.
6207    QualType ConvType = Conv->getConversionType().getNonReferenceType();
6208    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
6209      ConvType = ConvPtrType->getPointeeType();
6210
6211    if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
6212      AddSurrogateCandidate(Conv, I.getAccess(), ActingContext, Proto,
6213                            Object->getType(), Args, NumArgs,
6214                            CandidateSet);
6215  }
6216
6217  // Perform overload resolution.
6218  OverloadCandidateSet::iterator Best;
6219  switch (BestViableFunction(CandidateSet, Object->getLocStart(), Best)) {
6220  case OR_Success:
6221    // Overload resolution succeeded; we'll build the appropriate call
6222    // below.
6223    break;
6224
6225  case OR_No_Viable_Function:
6226    if (CandidateSet.empty())
6227      Diag(Object->getSourceRange().getBegin(), diag::err_ovl_no_oper)
6228        << Object->getType() << /*call*/ 1
6229        << Object->getSourceRange();
6230    else
6231      Diag(Object->getSourceRange().getBegin(),
6232           diag::err_ovl_no_viable_object_call)
6233        << Object->getType() << Object->getSourceRange();
6234    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6235    break;
6236
6237  case OR_Ambiguous:
6238    Diag(Object->getSourceRange().getBegin(),
6239         diag::err_ovl_ambiguous_object_call)
6240      << Object->getType() << Object->getSourceRange();
6241    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs);
6242    break;
6243
6244  case OR_Deleted:
6245    Diag(Object->getSourceRange().getBegin(),
6246         diag::err_ovl_deleted_object_call)
6247      << Best->Function->isDeleted()
6248      << Object->getType() << Object->getSourceRange();
6249    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6250    break;
6251  }
6252
6253  if (Best == CandidateSet.end()) {
6254    // We had an error; delete all of the subexpressions and return
6255    // the error.
6256    Object->Destroy(Context);
6257    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
6258      Args[ArgIdx]->Destroy(Context);
6259    return true;
6260  }
6261
6262  if (Best->Function == 0) {
6263    // Since there is no function declaration, this is one of the
6264    // surrogate candidates. Dig out the conversion function.
6265    CXXConversionDecl *Conv
6266      = cast<CXXConversionDecl>(
6267                         Best->Conversions[0].UserDefined.ConversionFunction);
6268
6269    CheckMemberOperatorAccess(LParenLoc, Object, Conv, Best->getAccess());
6270
6271    // We selected one of the surrogate functions that converts the
6272    // object parameter to a function pointer. Perform the conversion
6273    // on the object argument, then let ActOnCallExpr finish the job.
6274
6275    // Create an implicit member expr to refer to the conversion operator.
6276    // and then call it.
6277    CXXMemberCallExpr *CE = BuildCXXMemberCallExpr(Object, Conv);
6278
6279    return ActOnCallExpr(S, ExprArg(*this, CE), LParenLoc,
6280                         MultiExprArg(*this, (ExprTy**)Args, NumArgs),
6281                         CommaLocs, RParenLoc).release();
6282  }
6283
6284  CheckMemberOperatorAccess(LParenLoc, Object,
6285                            Best->Function, Best->getAccess());
6286
6287  // We found an overloaded operator(). Build a CXXOperatorCallExpr
6288  // that calls this method, using Object for the implicit object
6289  // parameter and passing along the remaining arguments.
6290  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
6291  const FunctionProtoType *Proto = Method->getType()->getAs<FunctionProtoType>();
6292
6293  unsigned NumArgsInProto = Proto->getNumArgs();
6294  unsigned NumArgsToCheck = NumArgs;
6295
6296  // Build the full argument list for the method call (the
6297  // implicit object parameter is placed at the beginning of the
6298  // list).
6299  Expr **MethodArgs;
6300  if (NumArgs < NumArgsInProto) {
6301    NumArgsToCheck = NumArgsInProto;
6302    MethodArgs = new Expr*[NumArgsInProto + 1];
6303  } else {
6304    MethodArgs = new Expr*[NumArgs + 1];
6305  }
6306  MethodArgs[0] = Object;
6307  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
6308    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
6309
6310  Expr *NewFn = new (Context) DeclRefExpr(Method, Method->getType(),
6311                                          SourceLocation());
6312  UsualUnaryConversions(NewFn);
6313
6314  // Once we've built TheCall, all of the expressions are properly
6315  // owned.
6316  QualType ResultTy = Method->getResultType().getNonReferenceType();
6317  ExprOwningPtr<CXXOperatorCallExpr>
6318    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn,
6319                                                    MethodArgs, NumArgs + 1,
6320                                                    ResultTy, RParenLoc));
6321  delete [] MethodArgs;
6322
6323  if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall.get(),
6324                          Method))
6325    return true;
6326
6327  // We may have default arguments. If so, we need to allocate more
6328  // slots in the call for them.
6329  if (NumArgs < NumArgsInProto)
6330    TheCall->setNumArgs(Context, NumArgsInProto + 1);
6331  else if (NumArgs > NumArgsInProto)
6332    NumArgsToCheck = NumArgsInProto;
6333
6334  bool IsError = false;
6335
6336  // Initialize the implicit object parameter.
6337  IsError |= PerformObjectArgumentInitialization(Object, Method);
6338  TheCall->setArg(0, Object);
6339
6340
6341  // Check the argument types.
6342  for (unsigned i = 0; i != NumArgsToCheck; i++) {
6343    Expr *Arg;
6344    if (i < NumArgs) {
6345      Arg = Args[i];
6346
6347      // Pass the argument.
6348
6349      OwningExprResult InputInit
6350        = PerformCopyInitialization(InitializedEntity::InitializeParameter(
6351                                                    Method->getParamDecl(i)),
6352                                    SourceLocation(), Owned(Arg));
6353
6354      IsError |= InputInit.isInvalid();
6355      Arg = InputInit.takeAs<Expr>();
6356    } else {
6357      OwningExprResult DefArg
6358        = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
6359      if (DefArg.isInvalid()) {
6360        IsError = true;
6361        break;
6362      }
6363
6364      Arg = DefArg.takeAs<Expr>();
6365    }
6366
6367    TheCall->setArg(i + 1, Arg);
6368  }
6369
6370  // If this is a variadic call, handle args passed through "...".
6371  if (Proto->isVariadic()) {
6372    // Promote the arguments (C99 6.5.2.2p7).
6373    for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
6374      Expr *Arg = Args[i];
6375      IsError |= DefaultVariadicArgumentPromotion(Arg, VariadicMethod);
6376      TheCall->setArg(i + 1, Arg);
6377    }
6378  }
6379
6380  if (IsError) return true;
6381
6382  if (CheckFunctionCall(Method, TheCall.get()))
6383    return true;
6384
6385  return MaybeBindToTemporary(TheCall.release()).release();
6386}
6387
6388/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
6389///  (if one exists), where @c Base is an expression of class type and
6390/// @c Member is the name of the member we're trying to find.
6391Sema::OwningExprResult
6392Sema::BuildOverloadedArrowExpr(Scope *S, ExprArg BaseIn, SourceLocation OpLoc) {
6393  Expr *Base = static_cast<Expr *>(BaseIn.get());
6394  assert(Base->getType()->isRecordType() && "left-hand side must have class type");
6395
6396  // C++ [over.ref]p1:
6397  //
6398  //   [...] An expression x->m is interpreted as (x.operator->())->m
6399  //   for a class object x of type T if T::operator->() exists and if
6400  //   the operator is selected as the best match function by the
6401  //   overload resolution mechanism (13.3).
6402  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
6403  OverloadCandidateSet CandidateSet;
6404  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
6405
6406  if (RequireCompleteType(Base->getLocStart(), Base->getType(),
6407                          PDiag(diag::err_typecheck_incomplete_tag)
6408                            << Base->getSourceRange()))
6409    return ExprError();
6410
6411  LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
6412  LookupQualifiedName(R, BaseRecord->getDecl());
6413  R.suppressDiagnostics();
6414
6415  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
6416       Oper != OperEnd; ++Oper) {
6417    NamedDecl *D = *Oper;
6418    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
6419    if (isa<UsingShadowDecl>(D))
6420      D = cast<UsingShadowDecl>(D)->getTargetDecl();
6421
6422    AddMethodCandidate(cast<CXXMethodDecl>(D), Oper.getAccess(), ActingContext,
6423                       Base->getType(), 0, 0, CandidateSet,
6424                       /*SuppressUserConversions=*/false);
6425  }
6426
6427  // Perform overload resolution.
6428  OverloadCandidateSet::iterator Best;
6429  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
6430  case OR_Success:
6431    // Overload resolution succeeded; we'll build the call below.
6432    break;
6433
6434  case OR_No_Viable_Function:
6435    if (CandidateSet.empty())
6436      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
6437        << Base->getType() << Base->getSourceRange();
6438    else
6439      Diag(OpLoc, diag::err_ovl_no_viable_oper)
6440        << "operator->" << Base->getSourceRange();
6441    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, &Base, 1);
6442    return ExprError();
6443
6444  case OR_Ambiguous:
6445    Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
6446      << "->" << Base->getSourceRange();
6447    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, &Base, 1);
6448    return ExprError();
6449
6450  case OR_Deleted:
6451    Diag(OpLoc,  diag::err_ovl_deleted_oper)
6452      << Best->Function->isDeleted()
6453      << "->" << Base->getSourceRange();
6454    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, &Base, 1);
6455    return ExprError();
6456  }
6457
6458  // Convert the object parameter.
6459  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
6460  if (PerformObjectArgumentInitialization(Base, Method))
6461    return ExprError();
6462
6463  // No concerns about early exits now.
6464  BaseIn.release();
6465
6466  // Build the operator call.
6467  Expr *FnExpr = new (Context) DeclRefExpr(Method, Method->getType(),
6468                                           SourceLocation());
6469  UsualUnaryConversions(FnExpr);
6470
6471  QualType ResultTy = Method->getResultType().getNonReferenceType();
6472  ExprOwningPtr<CXXOperatorCallExpr>
6473    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr,
6474                                                    &Base, 1, ResultTy, OpLoc));
6475
6476  if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall.get(),
6477                          Method))
6478          return ExprError();
6479  return move(TheCall);
6480}
6481
6482/// FixOverloadedFunctionReference - E is an expression that refers to
6483/// a C++ overloaded function (possibly with some parentheses and
6484/// perhaps a '&' around it). We have resolved the overloaded function
6485/// to the function declaration Fn, so patch up the expression E to
6486/// refer (possibly indirectly) to Fn. Returns the new expr.
6487Expr *Sema::FixOverloadedFunctionReference(Expr *E, FunctionDecl *Fn) {
6488  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
6489    Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(), Fn);
6490    if (SubExpr == PE->getSubExpr())
6491      return PE->Retain();
6492
6493    return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
6494  }
6495
6496  if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
6497    Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(), Fn);
6498    assert(Context.hasSameType(ICE->getSubExpr()->getType(),
6499                               SubExpr->getType()) &&
6500           "Implicit cast type cannot be determined from overload");
6501    if (SubExpr == ICE->getSubExpr())
6502      return ICE->Retain();
6503
6504    return new (Context) ImplicitCastExpr(ICE->getType(),
6505                                          ICE->getCastKind(),
6506                                          SubExpr,
6507                                          ICE->isLvalueCast());
6508  }
6509
6510  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
6511    assert(UnOp->getOpcode() == UnaryOperator::AddrOf &&
6512           "Can only take the address of an overloaded function");
6513    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
6514      if (Method->isStatic()) {
6515        // Do nothing: static member functions aren't any different
6516        // from non-member functions.
6517      } else {
6518        // Fix the sub expression, which really has to be an
6519        // UnresolvedLookupExpr holding an overloaded member function
6520        // or template.
6521        Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), Fn);
6522        if (SubExpr == UnOp->getSubExpr())
6523          return UnOp->Retain();
6524
6525        assert(isa<DeclRefExpr>(SubExpr)
6526               && "fixed to something other than a decl ref");
6527        assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
6528               && "fixed to a member ref with no nested name qualifier");
6529
6530        // We have taken the address of a pointer to member
6531        // function. Perform the computation here so that we get the
6532        // appropriate pointer to member type.
6533        QualType ClassType
6534          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
6535        QualType MemPtrType
6536          = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
6537
6538        return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
6539                                           MemPtrType, UnOp->getOperatorLoc());
6540      }
6541    }
6542    Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), Fn);
6543    if (SubExpr == UnOp->getSubExpr())
6544      return UnOp->Retain();
6545
6546    return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
6547                                     Context.getPointerType(SubExpr->getType()),
6548                                       UnOp->getOperatorLoc());
6549  }
6550
6551  if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
6552    // FIXME: avoid copy.
6553    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6554    if (ULE->hasExplicitTemplateArgs()) {
6555      ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
6556      TemplateArgs = &TemplateArgsBuffer;
6557    }
6558
6559    return DeclRefExpr::Create(Context,
6560                               ULE->getQualifier(),
6561                               ULE->getQualifierRange(),
6562                               Fn,
6563                               ULE->getNameLoc(),
6564                               Fn->getType(),
6565                               TemplateArgs);
6566  }
6567
6568  if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
6569    // FIXME: avoid copy.
6570    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6571    if (MemExpr->hasExplicitTemplateArgs()) {
6572      MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
6573      TemplateArgs = &TemplateArgsBuffer;
6574    }
6575
6576    Expr *Base;
6577
6578    // If we're filling in
6579    if (MemExpr->isImplicitAccess()) {
6580      if (cast<CXXMethodDecl>(Fn)->isStatic()) {
6581        return DeclRefExpr::Create(Context,
6582                                   MemExpr->getQualifier(),
6583                                   MemExpr->getQualifierRange(),
6584                                   Fn,
6585                                   MemExpr->getMemberLoc(),
6586                                   Fn->getType(),
6587                                   TemplateArgs);
6588      } else {
6589        SourceLocation Loc = MemExpr->getMemberLoc();
6590        if (MemExpr->getQualifier())
6591          Loc = MemExpr->getQualifierRange().getBegin();
6592        Base = new (Context) CXXThisExpr(Loc,
6593                                         MemExpr->getBaseType(),
6594                                         /*isImplicit=*/true);
6595      }
6596    } else
6597      Base = MemExpr->getBase()->Retain();
6598
6599    return MemberExpr::Create(Context, Base,
6600                              MemExpr->isArrow(),
6601                              MemExpr->getQualifier(),
6602                              MemExpr->getQualifierRange(),
6603                              Fn,
6604                              MemExpr->getMemberLoc(),
6605                              TemplateArgs,
6606                              Fn->getType());
6607  }
6608
6609  assert(false && "Invalid reference to overloaded function");
6610  return E->Retain();
6611}
6612
6613Sema::OwningExprResult Sema::FixOverloadedFunctionReference(OwningExprResult E,
6614                                                            FunctionDecl *Fn) {
6615  return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Fn));
6616}
6617
6618} // end namespace clang
6619