SemaOverload.cpp revision a24732aaa56352ed7073e74f0b50fd48cf6037c8
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    // FIXME: Record what happened with template argument deduction, so
2746    // that we can give the user a beautiful diagnostic.
2747    (void) Result;
2748
2749    CandidateSet.push_back(OverloadCandidate());
2750    OverloadCandidate &Candidate = CandidateSet.back();
2751    Candidate.Function = FunctionTemplate->getTemplatedDecl();
2752    Candidate.Access = Access;
2753    Candidate.Viable = false;
2754    Candidate.FailureKind = ovl_fail_bad_deduction;
2755    Candidate.IsSurrogate = false;
2756    Candidate.IgnoreObjectArgument = false;
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  // Do some hand-waving analysis to see if the non-viability is due
4454  // to a qualifier mismatch.
4455  CanQualType CFromTy = S.Context.getCanonicalType(FromTy);
4456  CanQualType CToTy = S.Context.getCanonicalType(ToTy);
4457  if (CanQual<ReferenceType> RT = CToTy->getAs<ReferenceType>())
4458    CToTy = RT->getPointeeType();
4459  else {
4460    // TODO: detect and diagnose the full richness of const mismatches.
4461    if (CanQual<PointerType> FromPT = CFromTy->getAs<PointerType>())
4462      if (CanQual<PointerType> ToPT = CToTy->getAs<PointerType>())
4463        CFromTy = FromPT->getPointeeType(), CToTy = ToPT->getPointeeType();
4464  }
4465
4466  if (CToTy.getUnqualifiedType() == CFromTy.getUnqualifiedType() &&
4467      !CToTy.isAtLeastAsQualifiedAs(CFromTy)) {
4468    // It is dumb that we have to do this here.
4469    while (isa<ArrayType>(CFromTy))
4470      CFromTy = CFromTy->getAs<ArrayType>()->getElementType();
4471    while (isa<ArrayType>(CToTy))
4472      CToTy = CFromTy->getAs<ArrayType>()->getElementType();
4473
4474    Qualifiers FromQs = CFromTy.getQualifiers();
4475    Qualifiers ToQs = CToTy.getQualifiers();
4476
4477    if (FromQs.getAddressSpace() != ToQs.getAddressSpace()) {
4478      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_addrspace)
4479        << (unsigned) FnKind << FnDesc
4480        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4481        << FromTy
4482        << FromQs.getAddressSpace() << ToQs.getAddressSpace()
4483        << (unsigned) isObjectArgument << I+1;
4484      return;
4485    }
4486
4487    unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers();
4488    assert(CVR && "unexpected qualifiers mismatch");
4489
4490    if (isObjectArgument) {
4491      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr_this)
4492        << (unsigned) FnKind << FnDesc
4493        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4494        << FromTy << (CVR - 1);
4495    } else {
4496      S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_cvr)
4497        << (unsigned) FnKind << FnDesc
4498        << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4499        << FromTy << (CVR - 1) << I+1;
4500    }
4501    return;
4502  }
4503
4504  // Diagnose references or pointers to incomplete types differently,
4505  // since it's far from impossible that the incompleteness triggered
4506  // the failure.
4507  QualType TempFromTy = FromTy.getNonReferenceType();
4508  if (const PointerType *PTy = TempFromTy->getAs<PointerType>())
4509    TempFromTy = PTy->getPointeeType();
4510  if (TempFromTy->isIncompleteType()) {
4511    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv_incomplete)
4512      << (unsigned) FnKind << FnDesc
4513      << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4514      << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
4515    return;
4516  }
4517
4518  // TODO: specialize more based on the kind of mismatch
4519  S.Diag(Fn->getLocation(), diag::note_ovl_candidate_bad_conv)
4520    << (unsigned) FnKind << FnDesc
4521    << (FromExpr ? FromExpr->getSourceRange() : SourceRange())
4522    << FromTy << ToTy << (unsigned) isObjectArgument << I+1;
4523}
4524
4525void DiagnoseArityMismatch(Sema &S, OverloadCandidate *Cand,
4526                           unsigned NumFormalArgs) {
4527  // TODO: treat calls to a missing default constructor as a special case
4528
4529  FunctionDecl *Fn = Cand->Function;
4530  const FunctionProtoType *FnTy = Fn->getType()->getAs<FunctionProtoType>();
4531
4532  unsigned MinParams = Fn->getMinRequiredArguments();
4533
4534  // at least / at most / exactly
4535  unsigned mode, modeCount;
4536  if (NumFormalArgs < MinParams) {
4537    assert(Cand->FailureKind == ovl_fail_too_few_arguments);
4538    if (MinParams != FnTy->getNumArgs() || FnTy->isVariadic())
4539      mode = 0; // "at least"
4540    else
4541      mode = 2; // "exactly"
4542    modeCount = MinParams;
4543  } else {
4544    assert(Cand->FailureKind == ovl_fail_too_many_arguments);
4545    if (MinParams != FnTy->getNumArgs())
4546      mode = 1; // "at most"
4547    else
4548      mode = 2; // "exactly"
4549    modeCount = FnTy->getNumArgs();
4550  }
4551
4552  std::string Description;
4553  OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, Description);
4554
4555  S.Diag(Fn->getLocation(), diag::note_ovl_candidate_arity)
4556    << (unsigned) FnKind << Description << mode << modeCount << NumFormalArgs;
4557}
4558
4559void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand,
4560                           Expr **Args, unsigned NumArgs) {
4561  FunctionDecl *Fn = Cand->Function;
4562
4563  // Note deleted candidates, but only if they're viable.
4564  if (Cand->Viable && (Fn->isDeleted() || Fn->hasAttr<UnavailableAttr>())) {
4565    std::string FnDesc;
4566    OverloadCandidateKind FnKind = ClassifyOverloadCandidate(S, Fn, FnDesc);
4567
4568    S.Diag(Fn->getLocation(), diag::note_ovl_candidate_deleted)
4569      << FnKind << FnDesc << Fn->isDeleted();
4570    return;
4571  }
4572
4573  // We don't really have anything else to say about viable candidates.
4574  if (Cand->Viable) {
4575    S.NoteOverloadCandidate(Fn);
4576    return;
4577  }
4578
4579  switch (Cand->FailureKind) {
4580  case ovl_fail_too_many_arguments:
4581  case ovl_fail_too_few_arguments:
4582    return DiagnoseArityMismatch(S, Cand, NumArgs);
4583
4584  case ovl_fail_bad_deduction:
4585  case ovl_fail_trivial_conversion:
4586  case ovl_fail_bad_final_conversion:
4587    return S.NoteOverloadCandidate(Fn);
4588
4589  case ovl_fail_bad_conversion:
4590    for (unsigned I = 0, N = Cand->Conversions.size(); I != N; ++I)
4591      if (Cand->Conversions[I].isBad())
4592        return DiagnoseBadConversion(S, Cand, I);
4593
4594    // FIXME: this currently happens when we're called from SemaInit
4595    // when user-conversion overload fails.  Figure out how to handle
4596    // those conditions and diagnose them well.
4597    return S.NoteOverloadCandidate(Fn);
4598  }
4599}
4600
4601void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
4602  // Desugar the type of the surrogate down to a function type,
4603  // retaining as many typedefs as possible while still showing
4604  // the function type (and, therefore, its parameter types).
4605  QualType FnType = Cand->Surrogate->getConversionType();
4606  bool isLValueReference = false;
4607  bool isRValueReference = false;
4608  bool isPointer = false;
4609  if (const LValueReferenceType *FnTypeRef =
4610        FnType->getAs<LValueReferenceType>()) {
4611    FnType = FnTypeRef->getPointeeType();
4612    isLValueReference = true;
4613  } else if (const RValueReferenceType *FnTypeRef =
4614               FnType->getAs<RValueReferenceType>()) {
4615    FnType = FnTypeRef->getPointeeType();
4616    isRValueReference = true;
4617  }
4618  if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
4619    FnType = FnTypePtr->getPointeeType();
4620    isPointer = true;
4621  }
4622  // Desugar down to a function type.
4623  FnType = QualType(FnType->getAs<FunctionType>(), 0);
4624  // Reconstruct the pointer/reference as appropriate.
4625  if (isPointer) FnType = S.Context.getPointerType(FnType);
4626  if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
4627  if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
4628
4629  S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
4630    << FnType;
4631}
4632
4633void NoteBuiltinOperatorCandidate(Sema &S,
4634                                  const char *Opc,
4635                                  SourceLocation OpLoc,
4636                                  OverloadCandidate *Cand) {
4637  assert(Cand->Conversions.size() <= 2 && "builtin operator is not binary");
4638  std::string TypeStr("operator");
4639  TypeStr += Opc;
4640  TypeStr += "(";
4641  TypeStr += Cand->BuiltinTypes.ParamTypes[0].getAsString();
4642  if (Cand->Conversions.size() == 1) {
4643    TypeStr += ")";
4644    S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
4645  } else {
4646    TypeStr += ", ";
4647    TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
4648    TypeStr += ")";
4649    S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
4650  }
4651}
4652
4653void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
4654                                  OverloadCandidate *Cand) {
4655  unsigned NoOperands = Cand->Conversions.size();
4656  for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
4657    const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
4658    if (ICS.isBad()) break; // all meaningless after first invalid
4659    if (!ICS.isAmbiguous()) continue;
4660
4661    S.DiagnoseAmbiguousConversion(ICS, OpLoc,
4662                              PDiag(diag::note_ambiguous_type_conversion));
4663  }
4664}
4665
4666SourceLocation GetLocationForCandidate(const OverloadCandidate *Cand) {
4667  if (Cand->Function)
4668    return Cand->Function->getLocation();
4669  if (Cand->IsSurrogate)
4670    return Cand->Surrogate->getLocation();
4671  return SourceLocation();
4672}
4673
4674struct CompareOverloadCandidatesForDisplay {
4675  Sema &S;
4676  CompareOverloadCandidatesForDisplay(Sema &S) : S(S) {}
4677
4678  bool operator()(const OverloadCandidate *L,
4679                  const OverloadCandidate *R) {
4680    // Fast-path this check.
4681    if (L == R) return false;
4682
4683    // Order first by viability.
4684    if (L->Viable) {
4685      if (!R->Viable) return true;
4686
4687      // TODO: introduce a tri-valued comparison for overload
4688      // candidates.  Would be more worthwhile if we had a sort
4689      // that could exploit it.
4690      if (S.isBetterOverloadCandidate(*L, *R)) return true;
4691      if (S.isBetterOverloadCandidate(*R, *L)) return false;
4692    } else if (R->Viable)
4693      return false;
4694
4695    assert(L->Viable == R->Viable);
4696
4697    // Criteria by which we can sort non-viable candidates:
4698    if (!L->Viable) {
4699      // 1. Arity mismatches come after other candidates.
4700      if (L->FailureKind == ovl_fail_too_many_arguments ||
4701          L->FailureKind == ovl_fail_too_few_arguments)
4702        return false;
4703      if (R->FailureKind == ovl_fail_too_many_arguments ||
4704          R->FailureKind == ovl_fail_too_few_arguments)
4705        return true;
4706
4707      // 2. Bad conversions come first and are ordered by the number
4708      // of bad conversions and quality of good conversions.
4709      if (L->FailureKind == ovl_fail_bad_conversion) {
4710        if (R->FailureKind != ovl_fail_bad_conversion)
4711          return true;
4712
4713        // If there's any ordering between the defined conversions...
4714        // FIXME: this might not be transitive.
4715        assert(L->Conversions.size() == R->Conversions.size());
4716
4717        int leftBetter = 0;
4718        for (unsigned I = 0, E = L->Conversions.size(); I != E; ++I) {
4719          switch (S.CompareImplicitConversionSequences(L->Conversions[I],
4720                                                       R->Conversions[I])) {
4721          case ImplicitConversionSequence::Better:
4722            leftBetter++;
4723            break;
4724
4725          case ImplicitConversionSequence::Worse:
4726            leftBetter--;
4727            break;
4728
4729          case ImplicitConversionSequence::Indistinguishable:
4730            break;
4731          }
4732        }
4733        if (leftBetter > 0) return true;
4734        if (leftBetter < 0) return false;
4735
4736      } else if (R->FailureKind == ovl_fail_bad_conversion)
4737        return false;
4738
4739      // TODO: others?
4740    }
4741
4742    // Sort everything else by location.
4743    SourceLocation LLoc = GetLocationForCandidate(L);
4744    SourceLocation RLoc = GetLocationForCandidate(R);
4745
4746    // Put candidates without locations (e.g. builtins) at the end.
4747    if (LLoc.isInvalid()) return false;
4748    if (RLoc.isInvalid()) return true;
4749
4750    return S.SourceMgr.isBeforeInTranslationUnit(LLoc, RLoc);
4751  }
4752};
4753
4754/// CompleteNonViableCandidate - Normally, overload resolution only
4755/// computes up to the first
4756void CompleteNonViableCandidate(Sema &S, OverloadCandidate *Cand,
4757                                Expr **Args, unsigned NumArgs) {
4758  assert(!Cand->Viable);
4759
4760  // Don't do anything on failures other than bad conversion.
4761  if (Cand->FailureKind != ovl_fail_bad_conversion) return;
4762
4763  // Skip forward to the first bad conversion.
4764  unsigned ConvIdx = 0;
4765  unsigned ConvCount = Cand->Conversions.size();
4766  while (true) {
4767    assert(ConvIdx != ConvCount && "no bad conversion in candidate");
4768    ConvIdx++;
4769    if (Cand->Conversions[ConvIdx - 1].isBad())
4770      break;
4771  }
4772
4773  if (ConvIdx == ConvCount)
4774    return;
4775
4776  // FIXME: these should probably be preserved from the overload
4777  // operation somehow.
4778  bool SuppressUserConversions = false;
4779  bool ForceRValue = false;
4780
4781  const FunctionProtoType* Proto;
4782  unsigned ArgIdx = ConvIdx;
4783
4784  if (Cand->IsSurrogate) {
4785    QualType ConvType
4786      = Cand->Surrogate->getConversionType().getNonReferenceType();
4787    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
4788      ConvType = ConvPtrType->getPointeeType();
4789    Proto = ConvType->getAs<FunctionProtoType>();
4790    ArgIdx--;
4791  } else if (Cand->Function) {
4792    Proto = Cand->Function->getType()->getAs<FunctionProtoType>();
4793    if (isa<CXXMethodDecl>(Cand->Function) &&
4794        !isa<CXXConstructorDecl>(Cand->Function))
4795      ArgIdx--;
4796  } else {
4797    // Builtin binary operator with a bad first conversion.
4798    assert(ConvCount <= 3);
4799    for (; ConvIdx != ConvCount; ++ConvIdx)
4800      Cand->Conversions[ConvIdx]
4801        = S.TryCopyInitialization(Args[ConvIdx],
4802                                  Cand->BuiltinTypes.ParamTypes[ConvIdx],
4803                                  SuppressUserConversions, ForceRValue,
4804                                  /*InOverloadResolution*/ true);
4805    return;
4806  }
4807
4808  // Fill in the rest of the conversions.
4809  unsigned NumArgsInProto = Proto->getNumArgs();
4810  for (; ConvIdx != ConvCount; ++ConvIdx, ++ArgIdx) {
4811    if (ArgIdx < NumArgsInProto)
4812      Cand->Conversions[ConvIdx]
4813        = S.TryCopyInitialization(Args[ArgIdx], Proto->getArgType(ArgIdx),
4814                                  SuppressUserConversions, ForceRValue,
4815                                  /*InOverloadResolution=*/true);
4816    else
4817      Cand->Conversions[ConvIdx].setEllipsis();
4818  }
4819}
4820
4821} // end anonymous namespace
4822
4823/// PrintOverloadCandidates - When overload resolution fails, prints
4824/// diagnostic messages containing the candidates in the candidate
4825/// set.
4826void
4827Sema::PrintOverloadCandidates(OverloadCandidateSet& CandidateSet,
4828                              OverloadCandidateDisplayKind OCD,
4829                              Expr **Args, unsigned NumArgs,
4830                              const char *Opc,
4831                              SourceLocation OpLoc) {
4832  // Sort the candidates by viability and position.  Sorting directly would
4833  // be prohibitive, so we make a set of pointers and sort those.
4834  llvm::SmallVector<OverloadCandidate*, 32> Cands;
4835  if (OCD == OCD_AllCandidates) Cands.reserve(CandidateSet.size());
4836  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
4837                                  LastCand = CandidateSet.end();
4838       Cand != LastCand; ++Cand) {
4839    if (Cand->Viable)
4840      Cands.push_back(Cand);
4841    else if (OCD == OCD_AllCandidates) {
4842      CompleteNonViableCandidate(*this, Cand, Args, NumArgs);
4843      Cands.push_back(Cand);
4844    }
4845  }
4846
4847  std::sort(Cands.begin(), Cands.end(),
4848            CompareOverloadCandidatesForDisplay(*this));
4849
4850  bool ReportedAmbiguousConversions = false;
4851
4852  llvm::SmallVectorImpl<OverloadCandidate*>::iterator I, E;
4853  for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
4854    OverloadCandidate *Cand = *I;
4855
4856    if (Cand->Function)
4857      NoteFunctionCandidate(*this, Cand, Args, NumArgs);
4858    else if (Cand->IsSurrogate)
4859      NoteSurrogateCandidate(*this, Cand);
4860
4861    // This a builtin candidate.  We do not, in general, want to list
4862    // every possible builtin candidate.
4863    else if (Cand->Viable) {
4864      // Generally we only see ambiguities including viable builtin
4865      // operators if overload resolution got screwed up by an
4866      // ambiguous user-defined conversion.
4867      //
4868      // FIXME: It's quite possible for different conversions to see
4869      // different ambiguities, though.
4870      if (!ReportedAmbiguousConversions) {
4871        NoteAmbiguousUserConversions(*this, OpLoc, Cand);
4872        ReportedAmbiguousConversions = true;
4873      }
4874
4875      // If this is a viable builtin, print it.
4876      NoteBuiltinOperatorCandidate(*this, Opc, OpLoc, Cand);
4877    }
4878  }
4879}
4880
4881static bool CheckUnresolvedAccess(Sema &S, Expr *E, NamedDecl *D,
4882                                  AccessSpecifier AS) {
4883  if (isa<UnresolvedLookupExpr>(E))
4884    return S.CheckUnresolvedLookupAccess(cast<UnresolvedLookupExpr>(E), D, AS);
4885
4886  return S.CheckUnresolvedMemberAccess(cast<UnresolvedMemberExpr>(E), D, AS);
4887}
4888
4889/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
4890/// an overloaded function (C++ [over.over]), where @p From is an
4891/// expression with overloaded function type and @p ToType is the type
4892/// we're trying to resolve to. For example:
4893///
4894/// @code
4895/// int f(double);
4896/// int f(int);
4897///
4898/// int (*pfd)(double) = f; // selects f(double)
4899/// @endcode
4900///
4901/// This routine returns the resulting FunctionDecl if it could be
4902/// resolved, and NULL otherwise. When @p Complain is true, this
4903/// routine will emit diagnostics if there is an error.
4904FunctionDecl *
4905Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType,
4906                                         bool Complain) {
4907  QualType FunctionType = ToType;
4908  bool IsMember = false;
4909  if (const PointerType *ToTypePtr = ToType->getAs<PointerType>())
4910    FunctionType = ToTypePtr->getPointeeType();
4911  else if (const ReferenceType *ToTypeRef = ToType->getAs<ReferenceType>())
4912    FunctionType = ToTypeRef->getPointeeType();
4913  else if (const MemberPointerType *MemTypePtr =
4914                    ToType->getAs<MemberPointerType>()) {
4915    FunctionType = MemTypePtr->getPointeeType();
4916    IsMember = true;
4917  }
4918
4919  // We only look at pointers or references to functions.
4920  FunctionType = Context.getCanonicalType(FunctionType).getUnqualifiedType();
4921  if (!FunctionType->isFunctionType())
4922    return 0;
4923
4924  // Find the actual overloaded function declaration.
4925
4926  // C++ [over.over]p1:
4927  //   [...] [Note: any redundant set of parentheses surrounding the
4928  //   overloaded function name is ignored (5.1). ]
4929  Expr *OvlExpr = From->IgnoreParens();
4930
4931  // C++ [over.over]p1:
4932  //   [...] The overloaded function name can be preceded by the &
4933  //   operator.
4934  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(OvlExpr)) {
4935    if (UnOp->getOpcode() == UnaryOperator::AddrOf)
4936      OvlExpr = UnOp->getSubExpr()->IgnoreParens();
4937  }
4938
4939  bool HasExplicitTemplateArgs = false;
4940  TemplateArgumentListInfo ExplicitTemplateArgs;
4941  const UnresolvedSetImpl *Fns;
4942
4943  // Look into the overloaded expression.
4944  if (UnresolvedLookupExpr *UL
4945               = dyn_cast<UnresolvedLookupExpr>(OvlExpr)) {
4946    Fns = &UL->getDecls();
4947    if (UL->hasExplicitTemplateArgs()) {
4948      HasExplicitTemplateArgs = true;
4949      UL->copyTemplateArgumentsInto(ExplicitTemplateArgs);
4950    }
4951  } else if (UnresolvedMemberExpr *ME
4952               = dyn_cast<UnresolvedMemberExpr>(OvlExpr)) {
4953    Fns = &ME->getDecls();
4954    if (ME->hasExplicitTemplateArgs()) {
4955      HasExplicitTemplateArgs = true;
4956      ME->copyTemplateArgumentsInto(ExplicitTemplateArgs);
4957    }
4958  } else return 0;
4959
4960  // If we didn't actually find anything, we're done.
4961  if (Fns->empty())
4962    return 0;
4963
4964  // Look through all of the overloaded functions, searching for one
4965  // whose type matches exactly.
4966  UnresolvedSet<4> Matches;  // contains only FunctionDecls
4967  bool FoundNonTemplateFunction = false;
4968  for (UnresolvedSetIterator I = Fns->begin(), E = Fns->end(); I != E; ++I) {
4969    // Look through any using declarations to find the underlying function.
4970    NamedDecl *Fn = (*I)->getUnderlyingDecl();
4971
4972    // C++ [over.over]p3:
4973    //   Non-member functions and static member functions match
4974    //   targets of type "pointer-to-function" or "reference-to-function."
4975    //   Nonstatic member functions match targets of
4976    //   type "pointer-to-member-function."
4977    // Note that according to DR 247, the containing class does not matter.
4978
4979    if (FunctionTemplateDecl *FunctionTemplate
4980          = dyn_cast<FunctionTemplateDecl>(Fn)) {
4981      if (CXXMethodDecl *Method
4982            = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
4983        // Skip non-static function templates when converting to pointer, and
4984        // static when converting to member pointer.
4985        if (Method->isStatic() == IsMember)
4986          continue;
4987      } else if (IsMember)
4988        continue;
4989
4990      // C++ [over.over]p2:
4991      //   If the name is a function template, template argument deduction is
4992      //   done (14.8.2.2), and if the argument deduction succeeds, the
4993      //   resulting template argument list is used to generate a single
4994      //   function template specialization, which is added to the set of
4995      //   overloaded functions considered.
4996      // FIXME: We don't really want to build the specialization here, do we?
4997      FunctionDecl *Specialization = 0;
4998      TemplateDeductionInfo Info(Context);
4999      if (TemplateDeductionResult Result
5000            = DeduceTemplateArguments(FunctionTemplate,
5001                       (HasExplicitTemplateArgs ? &ExplicitTemplateArgs : 0),
5002                                      FunctionType, Specialization, Info)) {
5003        // FIXME: make a note of the failed deduction for diagnostics.
5004        (void)Result;
5005      } else {
5006        // FIXME: If the match isn't exact, shouldn't we just drop this as
5007        // a candidate? Find a testcase before changing the code.
5008        assert(FunctionType
5009                 == Context.getCanonicalType(Specialization->getType()));
5010        Matches.addDecl(cast<FunctionDecl>(Specialization->getCanonicalDecl()),
5011                        I.getAccess());
5012      }
5013
5014      continue;
5015    }
5016
5017    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
5018      // Skip non-static functions when converting to pointer, and static
5019      // when converting to member pointer.
5020      if (Method->isStatic() == IsMember)
5021        continue;
5022
5023      // If we have explicit template arguments, skip non-templates.
5024      if (HasExplicitTemplateArgs)
5025        continue;
5026    } else if (IsMember)
5027      continue;
5028
5029    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
5030      QualType ResultTy;
5031      if (Context.hasSameUnqualifiedType(FunctionType, FunDecl->getType()) ||
5032          IsNoReturnConversion(Context, FunDecl->getType(), FunctionType,
5033                               ResultTy)) {
5034        Matches.addDecl(cast<FunctionDecl>(FunDecl->getCanonicalDecl()),
5035                        I.getAccess());
5036        FoundNonTemplateFunction = true;
5037      }
5038    }
5039  }
5040
5041  // If there were 0 or 1 matches, we're done.
5042  if (Matches.empty())
5043    return 0;
5044  else if (Matches.size() == 1) {
5045    FunctionDecl *Result = cast<FunctionDecl>(*Matches.begin());
5046    MarkDeclarationReferenced(From->getLocStart(), Result);
5047    if (Complain)
5048      CheckUnresolvedAccess(*this, OvlExpr, Result, Matches.begin().getAccess());
5049    return Result;
5050  }
5051
5052  // C++ [over.over]p4:
5053  //   If more than one function is selected, [...]
5054  if (!FoundNonTemplateFunction) {
5055    //   [...] and any given function template specialization F1 is
5056    //   eliminated if the set contains a second function template
5057    //   specialization whose function template is more specialized
5058    //   than the function template of F1 according to the partial
5059    //   ordering rules of 14.5.5.2.
5060
5061    // The algorithm specified above is quadratic. We instead use a
5062    // two-pass algorithm (similar to the one used to identify the
5063    // best viable function in an overload set) that identifies the
5064    // best function template (if it exists).
5065
5066    UnresolvedSetIterator Result =
5067        getMostSpecialized(Matches.begin(), Matches.end(),
5068                           TPOC_Other, From->getLocStart(),
5069                           PDiag(),
5070                           PDiag(diag::err_addr_ovl_ambiguous)
5071                               << Matches[0]->getDeclName(),
5072                           PDiag(diag::note_ovl_candidate)
5073                               << (unsigned) oc_function_template);
5074    assert(Result != Matches.end() && "no most-specialized template");
5075    MarkDeclarationReferenced(From->getLocStart(), *Result);
5076    if (Complain)
5077      CheckUnresolvedAccess(*this, OvlExpr, *Result, Result.getAccess());
5078    return cast<FunctionDecl>(*Result);
5079  }
5080
5081  //   [...] any function template specializations in the set are
5082  //   eliminated if the set also contains a non-template function, [...]
5083  for (unsigned I = 0, N = Matches.size(); I != N; ) {
5084    if (cast<FunctionDecl>(Matches[I].getDecl())->getPrimaryTemplate() == 0)
5085      ++I;
5086    else {
5087      Matches.erase(I);
5088      --N;
5089    }
5090  }
5091
5092  // [...] After such eliminations, if any, there shall remain exactly one
5093  // selected function.
5094  if (Matches.size() == 1) {
5095    UnresolvedSetIterator Match = Matches.begin();
5096    MarkDeclarationReferenced(From->getLocStart(), *Match);
5097    if (Complain)
5098      CheckUnresolvedAccess(*this, OvlExpr, *Match, Match.getAccess());
5099    return cast<FunctionDecl>(*Match);
5100  }
5101
5102  // FIXME: We should probably return the same thing that BestViableFunction
5103  // returns (even if we issue the diagnostics here).
5104  Diag(From->getLocStart(), diag::err_addr_ovl_ambiguous)
5105    << Matches[0]->getDeclName();
5106  for (UnresolvedSetIterator I = Matches.begin(),
5107         E = Matches.end(); I != E; ++I)
5108    NoteOverloadCandidate(cast<FunctionDecl>(*I));
5109  return 0;
5110}
5111
5112/// \brief Given an expression that refers to an overloaded function, try to
5113/// resolve that overloaded function expression down to a single function.
5114///
5115/// This routine can only resolve template-ids that refer to a single function
5116/// template, where that template-id refers to a single template whose template
5117/// arguments are either provided by the template-id or have defaults,
5118/// as described in C++0x [temp.arg.explicit]p3.
5119FunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(Expr *From) {
5120  // C++ [over.over]p1:
5121  //   [...] [Note: any redundant set of parentheses surrounding the
5122  //   overloaded function name is ignored (5.1). ]
5123  Expr *OvlExpr = From->IgnoreParens();
5124
5125  // C++ [over.over]p1:
5126  //   [...] The overloaded function name can be preceded by the &
5127  //   operator.
5128  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(OvlExpr)) {
5129    if (UnOp->getOpcode() == UnaryOperator::AddrOf)
5130      OvlExpr = UnOp->getSubExpr()->IgnoreParens();
5131  }
5132
5133  bool HasExplicitTemplateArgs = false;
5134  TemplateArgumentListInfo ExplicitTemplateArgs;
5135  const UnresolvedSetImpl *Fns;
5136
5137  // Look into the overloaded expression.
5138  if (UnresolvedLookupExpr *UL
5139      = dyn_cast<UnresolvedLookupExpr>(OvlExpr)) {
5140    Fns = &UL->getDecls();
5141    if (UL->hasExplicitTemplateArgs()) {
5142      HasExplicitTemplateArgs = true;
5143      UL->copyTemplateArgumentsInto(ExplicitTemplateArgs);
5144    }
5145  } else if (UnresolvedMemberExpr *ME
5146             = dyn_cast<UnresolvedMemberExpr>(OvlExpr)) {
5147    Fns = &ME->getDecls();
5148    if (ME->hasExplicitTemplateArgs()) {
5149      HasExplicitTemplateArgs = true;
5150      ME->copyTemplateArgumentsInto(ExplicitTemplateArgs);
5151    }
5152  } else return 0;
5153
5154  // If we didn't actually find any template-ids, we're done.
5155  if (Fns->empty() || !HasExplicitTemplateArgs)
5156    return 0;
5157
5158  // Look through all of the overloaded functions, searching for one
5159  // whose type matches exactly.
5160  FunctionDecl *Matched = 0;
5161  for (UnresolvedSetIterator I = Fns->begin(), E = Fns->end(); I != E; ++I) {
5162    // C++0x [temp.arg.explicit]p3:
5163    //   [...] In contexts where deduction is done and fails, or in contexts
5164    //   where deduction is not done, if a template argument list is
5165    //   specified and it, along with any default template arguments,
5166    //   identifies a single function template specialization, then the
5167    //   template-id is an lvalue for the function template specialization.
5168    FunctionTemplateDecl *FunctionTemplate = cast<FunctionTemplateDecl>(*I);
5169
5170    // C++ [over.over]p2:
5171    //   If the name is a function template, template argument deduction is
5172    //   done (14.8.2.2), and if the argument deduction succeeds, the
5173    //   resulting template argument list is used to generate a single
5174    //   function template specialization, which is added to the set of
5175    //   overloaded functions considered.
5176    FunctionDecl *Specialization = 0;
5177    TemplateDeductionInfo Info(Context);
5178    if (TemplateDeductionResult Result
5179          = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
5180                                    Specialization, Info)) {
5181      // FIXME: make a note of the failed deduction for diagnostics.
5182      (void)Result;
5183      continue;
5184    }
5185
5186    // Multiple matches; we can't resolve to a single declaration.
5187    if (Matched)
5188      return 0;
5189
5190    Matched = Specialization;
5191  }
5192
5193  return Matched;
5194}
5195
5196/// \brief Add a single candidate to the overload set.
5197static void AddOverloadedCallCandidate(Sema &S,
5198                                       NamedDecl *Callee,
5199                                       AccessSpecifier Access,
5200                       const TemplateArgumentListInfo *ExplicitTemplateArgs,
5201                                       Expr **Args, unsigned NumArgs,
5202                                       OverloadCandidateSet &CandidateSet,
5203                                       bool PartialOverloading) {
5204  if (isa<UsingShadowDecl>(Callee))
5205    Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
5206
5207  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
5208    assert(!ExplicitTemplateArgs && "Explicit template arguments?");
5209    S.AddOverloadCandidate(Func, Access, Args, NumArgs, CandidateSet,
5210                           false, false, PartialOverloading);
5211    return;
5212  }
5213
5214  if (FunctionTemplateDecl *FuncTemplate
5215      = dyn_cast<FunctionTemplateDecl>(Callee)) {
5216    S.AddTemplateOverloadCandidate(FuncTemplate, Access, ExplicitTemplateArgs,
5217                                   Args, NumArgs, CandidateSet);
5218    return;
5219  }
5220
5221  assert(false && "unhandled case in overloaded call candidate");
5222
5223  // do nothing?
5224}
5225
5226/// \brief Add the overload candidates named by callee and/or found by argument
5227/// dependent lookup to the given overload set.
5228void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
5229                                       Expr **Args, unsigned NumArgs,
5230                                       OverloadCandidateSet &CandidateSet,
5231                                       bool PartialOverloading) {
5232
5233#ifndef NDEBUG
5234  // Verify that ArgumentDependentLookup is consistent with the rules
5235  // in C++0x [basic.lookup.argdep]p3:
5236  //
5237  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
5238  //   and let Y be the lookup set produced by argument dependent
5239  //   lookup (defined as follows). If X contains
5240  //
5241  //     -- a declaration of a class member, or
5242  //
5243  //     -- a block-scope function declaration that is not a
5244  //        using-declaration, or
5245  //
5246  //     -- a declaration that is neither a function or a function
5247  //        template
5248  //
5249  //   then Y is empty.
5250
5251  if (ULE->requiresADL()) {
5252    for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
5253           E = ULE->decls_end(); I != E; ++I) {
5254      assert(!(*I)->getDeclContext()->isRecord());
5255      assert(isa<UsingShadowDecl>(*I) ||
5256             !(*I)->getDeclContext()->isFunctionOrMethod());
5257      assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
5258    }
5259  }
5260#endif
5261
5262  // It would be nice to avoid this copy.
5263  TemplateArgumentListInfo TABuffer;
5264  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
5265  if (ULE->hasExplicitTemplateArgs()) {
5266    ULE->copyTemplateArgumentsInto(TABuffer);
5267    ExplicitTemplateArgs = &TABuffer;
5268  }
5269
5270  for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
5271         E = ULE->decls_end(); I != E; ++I)
5272    AddOverloadedCallCandidate(*this, *I, I.getAccess(), ExplicitTemplateArgs,
5273                               Args, NumArgs, CandidateSet,
5274                               PartialOverloading);
5275
5276  if (ULE->requiresADL())
5277    AddArgumentDependentLookupCandidates(ULE->getName(), /*Operator*/ false,
5278                                         Args, NumArgs,
5279                                         ExplicitTemplateArgs,
5280                                         CandidateSet,
5281                                         PartialOverloading);
5282}
5283
5284static Sema::OwningExprResult Destroy(Sema &SemaRef, Expr *Fn,
5285                                      Expr **Args, unsigned NumArgs) {
5286  Fn->Destroy(SemaRef.Context);
5287  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
5288    Args[Arg]->Destroy(SemaRef.Context);
5289  return SemaRef.ExprError();
5290}
5291
5292/// Attempts to recover from a call where no functions were found.
5293///
5294/// Returns true if new candidates were found.
5295static Sema::OwningExprResult
5296BuildRecoveryCallExpr(Sema &SemaRef, Expr *Fn,
5297                      UnresolvedLookupExpr *ULE,
5298                      SourceLocation LParenLoc,
5299                      Expr **Args, unsigned NumArgs,
5300                      SourceLocation *CommaLocs,
5301                      SourceLocation RParenLoc) {
5302
5303  CXXScopeSpec SS;
5304  if (ULE->getQualifier()) {
5305    SS.setScopeRep(ULE->getQualifier());
5306    SS.setRange(ULE->getQualifierRange());
5307  }
5308
5309  TemplateArgumentListInfo TABuffer;
5310  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
5311  if (ULE->hasExplicitTemplateArgs()) {
5312    ULE->copyTemplateArgumentsInto(TABuffer);
5313    ExplicitTemplateArgs = &TABuffer;
5314  }
5315
5316  LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
5317                 Sema::LookupOrdinaryName);
5318  if (SemaRef.DiagnoseEmptyLookup(/*Scope=*/0, SS, R))
5319    return Destroy(SemaRef, Fn, Args, NumArgs);
5320
5321  assert(!R.empty() && "lookup results empty despite recovery");
5322
5323  // Build an implicit member call if appropriate.  Just drop the
5324  // casts and such from the call, we don't really care.
5325  Sema::OwningExprResult NewFn = SemaRef.ExprError();
5326  if ((*R.begin())->isCXXClassMember())
5327    NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, R, ExplicitTemplateArgs);
5328  else if (ExplicitTemplateArgs)
5329    NewFn = SemaRef.BuildTemplateIdExpr(SS, R, false, *ExplicitTemplateArgs);
5330  else
5331    NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
5332
5333  if (NewFn.isInvalid())
5334    return Destroy(SemaRef, Fn, Args, NumArgs);
5335
5336  Fn->Destroy(SemaRef.Context);
5337
5338  // This shouldn't cause an infinite loop because we're giving it
5339  // an expression with non-empty lookup results, which should never
5340  // end up here.
5341  return SemaRef.ActOnCallExpr(/*Scope*/ 0, move(NewFn), LParenLoc,
5342                         Sema::MultiExprArg(SemaRef, (void**) Args, NumArgs),
5343                               CommaLocs, RParenLoc);
5344}
5345
5346/// ResolveOverloadedCallFn - Given the call expression that calls Fn
5347/// (which eventually refers to the declaration Func) and the call
5348/// arguments Args/NumArgs, attempt to resolve the function call down
5349/// to a specific function. If overload resolution succeeds, returns
5350/// the function declaration produced by overload
5351/// resolution. Otherwise, emits diagnostics, deletes all of the
5352/// arguments and Fn, and returns NULL.
5353Sema::OwningExprResult
5354Sema::BuildOverloadedCallExpr(Expr *Fn, UnresolvedLookupExpr *ULE,
5355                              SourceLocation LParenLoc,
5356                              Expr **Args, unsigned NumArgs,
5357                              SourceLocation *CommaLocs,
5358                              SourceLocation RParenLoc) {
5359#ifndef NDEBUG
5360  if (ULE->requiresADL()) {
5361    // To do ADL, we must have found an unqualified name.
5362    assert(!ULE->getQualifier() && "qualified name with ADL");
5363
5364    // We don't perform ADL for implicit declarations of builtins.
5365    // Verify that this was correctly set up.
5366    FunctionDecl *F;
5367    if (ULE->decls_begin() + 1 == ULE->decls_end() &&
5368        (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
5369        F->getBuiltinID() && F->isImplicit())
5370      assert(0 && "performing ADL for builtin");
5371
5372    // We don't perform ADL in C.
5373    assert(getLangOptions().CPlusPlus && "ADL enabled in C");
5374  }
5375#endif
5376
5377  OverloadCandidateSet CandidateSet;
5378
5379  // Add the functions denoted by the callee to the set of candidate
5380  // functions, including those from argument-dependent lookup.
5381  AddOverloadedCallCandidates(ULE, Args, NumArgs, CandidateSet);
5382
5383  // If we found nothing, try to recover.
5384  // AddRecoveryCallCandidates diagnoses the error itself, so we just
5385  // bailout out if it fails.
5386  if (CandidateSet.empty())
5387    return BuildRecoveryCallExpr(*this, Fn, ULE, LParenLoc, Args, NumArgs,
5388                                 CommaLocs, RParenLoc);
5389
5390  OverloadCandidateSet::iterator Best;
5391  switch (BestViableFunction(CandidateSet, Fn->getLocStart(), Best)) {
5392  case OR_Success: {
5393    FunctionDecl *FDecl = Best->Function;
5394    CheckUnresolvedLookupAccess(ULE, FDecl, Best->getAccess());
5395    Fn = FixOverloadedFunctionReference(Fn, FDecl);
5396    return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc);
5397  }
5398
5399  case OR_No_Viable_Function:
5400    Diag(Fn->getSourceRange().getBegin(),
5401         diag::err_ovl_no_viable_function_in_call)
5402      << ULE->getName() << Fn->getSourceRange();
5403    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
5404    break;
5405
5406  case OR_Ambiguous:
5407    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_ambiguous_call)
5408      << ULE->getName() << Fn->getSourceRange();
5409    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs);
5410    break;
5411
5412  case OR_Deleted:
5413    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_deleted_call)
5414      << Best->Function->isDeleted()
5415      << ULE->getName()
5416      << Fn->getSourceRange();
5417    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
5418    break;
5419  }
5420
5421  // Overload resolution failed. Destroy all of the subexpressions and
5422  // return NULL.
5423  Fn->Destroy(Context);
5424  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
5425    Args[Arg]->Destroy(Context);
5426  return ExprError();
5427}
5428
5429static bool IsOverloaded(const UnresolvedSetImpl &Functions) {
5430  return Functions.size() > 1 ||
5431    (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
5432}
5433
5434/// \brief Create a unary operation that may resolve to an overloaded
5435/// operator.
5436///
5437/// \param OpLoc The location of the operator itself (e.g., '*').
5438///
5439/// \param OpcIn The UnaryOperator::Opcode that describes this
5440/// operator.
5441///
5442/// \param Functions The set of non-member functions that will be
5443/// considered by overload resolution. The caller needs to build this
5444/// set based on the context using, e.g.,
5445/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
5446/// set should not contain any member functions; those will be added
5447/// by CreateOverloadedUnaryOp().
5448///
5449/// \param input The input argument.
5450Sema::OwningExprResult
5451Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
5452                              const UnresolvedSetImpl &Fns,
5453                              ExprArg input) {
5454  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
5455  Expr *Input = (Expr *)input.get();
5456
5457  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
5458  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
5459  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5460
5461  Expr *Args[2] = { Input, 0 };
5462  unsigned NumArgs = 1;
5463
5464  // For post-increment and post-decrement, add the implicit '0' as
5465  // the second argument, so that we know this is a post-increment or
5466  // post-decrement.
5467  if (Opc == UnaryOperator::PostInc || Opc == UnaryOperator::PostDec) {
5468    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
5469    Args[1] = new (Context) IntegerLiteral(Zero, Context.IntTy,
5470                                           SourceLocation());
5471    NumArgs = 2;
5472  }
5473
5474  if (Input->isTypeDependent()) {
5475    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
5476    UnresolvedLookupExpr *Fn
5477      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
5478                                     0, SourceRange(), OpName, OpLoc,
5479                                     /*ADL*/ true, IsOverloaded(Fns));
5480    Fn->addDecls(Fns.begin(), Fns.end());
5481
5482    input.release();
5483    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
5484                                                   &Args[0], NumArgs,
5485                                                   Context.DependentTy,
5486                                                   OpLoc));
5487  }
5488
5489  // Build an empty overload set.
5490  OverloadCandidateSet CandidateSet;
5491
5492  // Add the candidates from the given function set.
5493  AddFunctionCandidates(Fns, &Args[0], NumArgs, CandidateSet, false);
5494
5495  // Add operator candidates that are member functions.
5496  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
5497
5498  // Add candidates from ADL.
5499  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
5500                                       Args, 1,
5501                                       /*ExplicitTemplateArgs*/ 0,
5502                                       CandidateSet);
5503
5504  // Add builtin operator candidates.
5505  AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
5506
5507  // Perform overload resolution.
5508  OverloadCandidateSet::iterator Best;
5509  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5510  case OR_Success: {
5511    // We found a built-in operator or an overloaded operator.
5512    FunctionDecl *FnDecl = Best->Function;
5513
5514    if (FnDecl) {
5515      // We matched an overloaded operator. Build a call to that
5516      // operator.
5517
5518      // FIXME: access control
5519
5520      // Convert the arguments.
5521      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
5522        if (PerformObjectArgumentInitialization(Input, Method))
5523          return ExprError();
5524      } else {
5525        // Convert the arguments.
5526        OwningExprResult InputInit
5527          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
5528                                                      FnDecl->getParamDecl(0)),
5529                                      SourceLocation(),
5530                                      move(input));
5531        if (InputInit.isInvalid())
5532          return ExprError();
5533
5534        input = move(InputInit);
5535        Input = (Expr *)input.get();
5536      }
5537
5538      // Determine the result type
5539      QualType ResultTy = FnDecl->getResultType().getNonReferenceType();
5540
5541      // Build the actual expression node.
5542      Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5543                                               SourceLocation());
5544      UsualUnaryConversions(FnExpr);
5545
5546      input.release();
5547      Args[0] = Input;
5548      ExprOwningPtr<CallExpr> TheCall(this,
5549        new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
5550                                          Args, NumArgs, ResultTy, OpLoc));
5551
5552      if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
5553                              FnDecl))
5554        return ExprError();
5555
5556      return MaybeBindToTemporary(TheCall.release());
5557    } else {
5558      // We matched a built-in operator. Convert the arguments, then
5559      // break out so that we will build the appropriate built-in
5560      // operator node.
5561        if (PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
5562                                      Best->Conversions[0], AA_Passing))
5563          return ExprError();
5564
5565        break;
5566      }
5567    }
5568
5569    case OR_No_Viable_Function:
5570      // No viable function; fall through to handling this as a
5571      // built-in operator, which will produce an error message for us.
5572      break;
5573
5574    case OR_Ambiguous:
5575      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5576          << UnaryOperator::getOpcodeStr(Opc)
5577          << Input->getSourceRange();
5578      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs,
5579                              UnaryOperator::getOpcodeStr(Opc), OpLoc);
5580      return ExprError();
5581
5582    case OR_Deleted:
5583      Diag(OpLoc, diag::err_ovl_deleted_oper)
5584        << Best->Function->isDeleted()
5585        << UnaryOperator::getOpcodeStr(Opc)
5586        << Input->getSourceRange();
5587      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
5588      return ExprError();
5589    }
5590
5591  // Either we found no viable overloaded operator or we matched a
5592  // built-in operator. In either case, fall through to trying to
5593  // build a built-in operation.
5594  input.release();
5595  return CreateBuiltinUnaryOp(OpLoc, Opc, Owned(Input));
5596}
5597
5598/// \brief Create a binary operation that may resolve to an overloaded
5599/// operator.
5600///
5601/// \param OpLoc The location of the operator itself (e.g., '+').
5602///
5603/// \param OpcIn The BinaryOperator::Opcode that describes this
5604/// operator.
5605///
5606/// \param Functions The set of non-member functions that will be
5607/// considered by overload resolution. The caller needs to build this
5608/// set based on the context using, e.g.,
5609/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
5610/// set should not contain any member functions; those will be added
5611/// by CreateOverloadedBinOp().
5612///
5613/// \param LHS Left-hand argument.
5614/// \param RHS Right-hand argument.
5615Sema::OwningExprResult
5616Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
5617                            unsigned OpcIn,
5618                            const UnresolvedSetImpl &Fns,
5619                            Expr *LHS, Expr *RHS) {
5620  Expr *Args[2] = { LHS, RHS };
5621  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
5622
5623  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
5624  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
5625  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5626
5627  // If either side is type-dependent, create an appropriate dependent
5628  // expression.
5629  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
5630    if (Fns.empty()) {
5631      // If there are no functions to store, just build a dependent
5632      // BinaryOperator or CompoundAssignment.
5633      if (Opc <= BinaryOperator::Assign || Opc > BinaryOperator::OrAssign)
5634        return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
5635                                                  Context.DependentTy, OpLoc));
5636
5637      return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
5638                                                        Context.DependentTy,
5639                                                        Context.DependentTy,
5640                                                        Context.DependentTy,
5641                                                        OpLoc));
5642    }
5643
5644    // FIXME: save results of ADL from here?
5645    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
5646    UnresolvedLookupExpr *Fn
5647      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
5648                                     0, SourceRange(), OpName, OpLoc,
5649                                     /*ADL*/ true, IsOverloaded(Fns));
5650
5651    Fn->addDecls(Fns.begin(), Fns.end());
5652    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
5653                                                   Args, 2,
5654                                                   Context.DependentTy,
5655                                                   OpLoc));
5656  }
5657
5658  // If this is the .* operator, which is not overloadable, just
5659  // create a built-in binary operator.
5660  if (Opc == BinaryOperator::PtrMemD)
5661    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5662
5663  // If this is the assignment operator, we only perform overload resolution
5664  // if the left-hand side is a class or enumeration type. This is actually
5665  // a hack. The standard requires that we do overload resolution between the
5666  // various built-in candidates, but as DR507 points out, this can lead to
5667  // problems. So we do it this way, which pretty much follows what GCC does.
5668  // Note that we go the traditional code path for compound assignment forms.
5669  if (Opc==BinaryOperator::Assign && !Args[0]->getType()->isOverloadableType())
5670    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5671
5672  // Build an empty overload set.
5673  OverloadCandidateSet CandidateSet;
5674
5675  // Add the candidates from the given function set.
5676  AddFunctionCandidates(Fns, Args, 2, CandidateSet, false);
5677
5678  // Add operator candidates that are member functions.
5679  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
5680
5681  // Add candidates from ADL.
5682  AddArgumentDependentLookupCandidates(OpName, /*Operator*/ true,
5683                                       Args, 2,
5684                                       /*ExplicitTemplateArgs*/ 0,
5685                                       CandidateSet);
5686
5687  // Add builtin operator candidates.
5688  AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
5689
5690  // Perform overload resolution.
5691  OverloadCandidateSet::iterator Best;
5692  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5693    case OR_Success: {
5694      // We found a built-in operator or an overloaded operator.
5695      FunctionDecl *FnDecl = Best->Function;
5696
5697      if (FnDecl) {
5698        // We matched an overloaded operator. Build a call to that
5699        // operator.
5700
5701        // FIXME: access control
5702
5703        // Convert the arguments.
5704        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
5705          OwningExprResult Arg1
5706            = PerformCopyInitialization(
5707                                        InitializedEntity::InitializeParameter(
5708                                                        FnDecl->getParamDecl(0)),
5709                                        SourceLocation(),
5710                                        Owned(Args[1]));
5711          if (Arg1.isInvalid())
5712            return ExprError();
5713
5714          if (PerformObjectArgumentInitialization(Args[0], Method))
5715            return ExprError();
5716
5717          Args[1] = RHS = Arg1.takeAs<Expr>();
5718        } else {
5719          // Convert the arguments.
5720          OwningExprResult Arg0
5721            = PerformCopyInitialization(
5722                                        InitializedEntity::InitializeParameter(
5723                                                        FnDecl->getParamDecl(0)),
5724                                        SourceLocation(),
5725                                        Owned(Args[0]));
5726          if (Arg0.isInvalid())
5727            return ExprError();
5728
5729          OwningExprResult Arg1
5730            = PerformCopyInitialization(
5731                                        InitializedEntity::InitializeParameter(
5732                                                        FnDecl->getParamDecl(1)),
5733                                        SourceLocation(),
5734                                        Owned(Args[1]));
5735          if (Arg1.isInvalid())
5736            return ExprError();
5737          Args[0] = LHS = Arg0.takeAs<Expr>();
5738          Args[1] = RHS = Arg1.takeAs<Expr>();
5739        }
5740
5741        // Determine the result type
5742        QualType ResultTy
5743          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
5744        ResultTy = ResultTy.getNonReferenceType();
5745
5746        // Build the actual expression node.
5747        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5748                                                 OpLoc);
5749        UsualUnaryConversions(FnExpr);
5750
5751        ExprOwningPtr<CXXOperatorCallExpr>
5752          TheCall(this, new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
5753                                                          Args, 2, ResultTy,
5754                                                          OpLoc));
5755
5756        if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
5757                                FnDecl))
5758          return ExprError();
5759
5760        return MaybeBindToTemporary(TheCall.release());
5761      } else {
5762        // We matched a built-in operator. Convert the arguments, then
5763        // break out so that we will build the appropriate built-in
5764        // operator node.
5765        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
5766                                      Best->Conversions[0], AA_Passing) ||
5767            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
5768                                      Best->Conversions[1], AA_Passing))
5769          return ExprError();
5770
5771        break;
5772      }
5773    }
5774
5775    case OR_No_Viable_Function: {
5776      // C++ [over.match.oper]p9:
5777      //   If the operator is the operator , [...] and there are no
5778      //   viable functions, then the operator is assumed to be the
5779      //   built-in operator and interpreted according to clause 5.
5780      if (Opc == BinaryOperator::Comma)
5781        break;
5782
5783      // For class as left operand for assignment or compound assigment operator
5784      // do not fall through to handling in built-in, but report that no overloaded
5785      // assignment operator found
5786      OwningExprResult Result = ExprError();
5787      if (Args[0]->getType()->isRecordType() &&
5788          Opc >= BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign) {
5789        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
5790             << BinaryOperator::getOpcodeStr(Opc)
5791             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5792      } else {
5793        // No viable function; try to create a built-in operation, which will
5794        // produce an error. Then, show the non-viable candidates.
5795        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5796      }
5797      assert(Result.isInvalid() &&
5798             "C++ binary operator overloading is missing candidates!");
5799      if (Result.isInvalid())
5800        PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
5801                                BinaryOperator::getOpcodeStr(Opc), OpLoc);
5802      return move(Result);
5803    }
5804
5805    case OR_Ambiguous:
5806      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5807          << BinaryOperator::getOpcodeStr(Opc)
5808          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5809      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, 2,
5810                              BinaryOperator::getOpcodeStr(Opc), OpLoc);
5811      return ExprError();
5812
5813    case OR_Deleted:
5814      Diag(OpLoc, diag::err_ovl_deleted_oper)
5815        << Best->Function->isDeleted()
5816        << BinaryOperator::getOpcodeStr(Opc)
5817        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5818      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2);
5819      return ExprError();
5820  }
5821
5822  // We matched a built-in operator; build it.
5823  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5824}
5825
5826Action::OwningExprResult
5827Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
5828                                         SourceLocation RLoc,
5829                                         ExprArg Base, ExprArg Idx) {
5830  Expr *Args[2] = { static_cast<Expr*>(Base.get()),
5831                    static_cast<Expr*>(Idx.get()) };
5832  DeclarationName OpName =
5833      Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
5834
5835  // If either side is type-dependent, create an appropriate dependent
5836  // expression.
5837  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
5838
5839    CXXRecordDecl *NamingClass = 0; // because lookup ignores member operators
5840    UnresolvedLookupExpr *Fn
5841      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true, NamingClass,
5842                                     0, SourceRange(), OpName, LLoc,
5843                                     /*ADL*/ true, /*Overloaded*/ false);
5844    // Can't add any actual overloads yet
5845
5846    Base.release();
5847    Idx.release();
5848    return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
5849                                                   Args, 2,
5850                                                   Context.DependentTy,
5851                                                   RLoc));
5852  }
5853
5854  // Build an empty overload set.
5855  OverloadCandidateSet CandidateSet;
5856
5857  // Subscript can only be overloaded as a member function.
5858
5859  // Add operator candidates that are member functions.
5860  AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
5861
5862  // Add builtin operator candidates.
5863  AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
5864
5865  // Perform overload resolution.
5866  OverloadCandidateSet::iterator Best;
5867  switch (BestViableFunction(CandidateSet, LLoc, Best)) {
5868    case OR_Success: {
5869      // We found a built-in operator or an overloaded operator.
5870      FunctionDecl *FnDecl = Best->Function;
5871
5872      if (FnDecl) {
5873        // We matched an overloaded operator. Build a call to that
5874        // operator.
5875
5876        // FIXME: access control
5877
5878        // Convert the arguments.
5879        CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
5880        if (PerformObjectArgumentInitialization(Args[0], Method) ||
5881            PerformCopyInitialization(Args[1],
5882                                      FnDecl->getParamDecl(0)->getType(),
5883                                      AA_Passing))
5884          return ExprError();
5885
5886        // Determine the result type
5887        QualType ResultTy
5888          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
5889        ResultTy = ResultTy.getNonReferenceType();
5890
5891        // Build the actual expression node.
5892        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5893                                                 LLoc);
5894        UsualUnaryConversions(FnExpr);
5895
5896        Base.release();
5897        Idx.release();
5898        ExprOwningPtr<CXXOperatorCallExpr>
5899          TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
5900                                                          FnExpr, Args, 2,
5901                                                          ResultTy, RLoc));
5902
5903        if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall.get(),
5904                                FnDecl))
5905          return ExprError();
5906
5907        return MaybeBindToTemporary(TheCall.release());
5908      } else {
5909        // We matched a built-in operator. Convert the arguments, then
5910        // break out so that we will build the appropriate built-in
5911        // operator node.
5912        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
5913                                      Best->Conversions[0], AA_Passing) ||
5914            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
5915                                      Best->Conversions[1], AA_Passing))
5916          return ExprError();
5917
5918        break;
5919      }
5920    }
5921
5922    case OR_No_Viable_Function: {
5923      if (CandidateSet.empty())
5924        Diag(LLoc, diag::err_ovl_no_oper)
5925          << Args[0]->getType() << /*subscript*/ 0
5926          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5927      else
5928        Diag(LLoc, diag::err_ovl_no_viable_subscript)
5929          << Args[0]->getType()
5930          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5931      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
5932                              "[]", LLoc);
5933      return ExprError();
5934    }
5935
5936    case OR_Ambiguous:
5937      Diag(LLoc,  diag::err_ovl_ambiguous_oper)
5938          << "[]" << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5939      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, 2,
5940                              "[]", LLoc);
5941      return ExprError();
5942
5943    case OR_Deleted:
5944      Diag(LLoc, diag::err_ovl_deleted_oper)
5945        << Best->Function->isDeleted() << "[]"
5946        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5947      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, 2,
5948                              "[]", LLoc);
5949      return ExprError();
5950    }
5951
5952  // We matched a built-in operator; build it.
5953  Base.release();
5954  Idx.release();
5955  return CreateBuiltinArraySubscriptExpr(Owned(Args[0]), LLoc,
5956                                         Owned(Args[1]), RLoc);
5957}
5958
5959/// BuildCallToMemberFunction - Build a call to a member
5960/// function. MemExpr is the expression that refers to the member
5961/// function (and includes the object parameter), Args/NumArgs are the
5962/// arguments to the function call (not including the object
5963/// parameter). The caller needs to validate that the member
5964/// expression refers to a member function or an overloaded member
5965/// function.
5966Sema::OwningExprResult
5967Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
5968                                SourceLocation LParenLoc, Expr **Args,
5969                                unsigned NumArgs, SourceLocation *CommaLocs,
5970                                SourceLocation RParenLoc) {
5971  // Dig out the member expression. This holds both the object
5972  // argument and the member function we're referring to.
5973  Expr *NakedMemExpr = MemExprE->IgnoreParens();
5974
5975  MemberExpr *MemExpr;
5976  CXXMethodDecl *Method = 0;
5977  if (isa<MemberExpr>(NakedMemExpr)) {
5978    MemExpr = cast<MemberExpr>(NakedMemExpr);
5979    Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
5980  } else {
5981    UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
5982
5983    QualType ObjectType = UnresExpr->getBaseType();
5984
5985    // Add overload candidates
5986    OverloadCandidateSet CandidateSet;
5987
5988    // FIXME: avoid copy.
5989    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
5990    if (UnresExpr->hasExplicitTemplateArgs()) {
5991      UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
5992      TemplateArgs = &TemplateArgsBuffer;
5993    }
5994
5995    for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
5996           E = UnresExpr->decls_end(); I != E; ++I) {
5997
5998      NamedDecl *Func = *I;
5999      CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
6000      if (isa<UsingShadowDecl>(Func))
6001        Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
6002
6003      if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
6004        // If explicit template arguments were provided, we can't call a
6005        // non-template member function.
6006        if (TemplateArgs)
6007          continue;
6008
6009        AddMethodCandidate(Method, I.getAccess(), ActingDC, ObjectType,
6010                           Args, NumArgs,
6011                           CandidateSet, /*SuppressUserConversions=*/false);
6012      } else {
6013        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
6014                                   I.getAccess(), ActingDC, TemplateArgs,
6015                                   ObjectType, Args, NumArgs,
6016                                   CandidateSet,
6017                                   /*SuppressUsedConversions=*/false);
6018      }
6019    }
6020
6021    DeclarationName DeclName = UnresExpr->getMemberName();
6022
6023    OverloadCandidateSet::iterator Best;
6024    switch (BestViableFunction(CandidateSet, UnresExpr->getLocStart(), Best)) {
6025    case OR_Success:
6026      Method = cast<CXXMethodDecl>(Best->Function);
6027      CheckUnresolvedMemberAccess(UnresExpr, Method, Best->getAccess());
6028      break;
6029
6030    case OR_No_Viable_Function:
6031      Diag(UnresExpr->getMemberLoc(),
6032           diag::err_ovl_no_viable_member_function_in_call)
6033        << DeclName << MemExprE->getSourceRange();
6034      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6035      // FIXME: Leaking incoming expressions!
6036      return ExprError();
6037
6038    case OR_Ambiguous:
6039      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
6040        << DeclName << MemExprE->getSourceRange();
6041      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6042      // FIXME: Leaking incoming expressions!
6043      return ExprError();
6044
6045    case OR_Deleted:
6046      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
6047        << Best->Function->isDeleted()
6048        << DeclName << MemExprE->getSourceRange();
6049      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6050      // FIXME: Leaking incoming expressions!
6051      return ExprError();
6052    }
6053
6054    MemExprE = FixOverloadedFunctionReference(MemExprE, Method);
6055
6056    // If overload resolution picked a static member, build a
6057    // non-member call based on that function.
6058    if (Method->isStatic()) {
6059      return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
6060                                   Args, NumArgs, RParenLoc);
6061    }
6062
6063    MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
6064  }
6065
6066  assert(Method && "Member call to something that isn't a method?");
6067  ExprOwningPtr<CXXMemberCallExpr>
6068    TheCall(this, new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
6069                                                  NumArgs,
6070                                  Method->getResultType().getNonReferenceType(),
6071                                  RParenLoc));
6072
6073  // Check for a valid return type.
6074  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
6075                          TheCall.get(), Method))
6076    return ExprError();
6077
6078  // Convert the object argument (for a non-static member function call).
6079  Expr *ObjectArg = MemExpr->getBase();
6080  if (!Method->isStatic() &&
6081      PerformObjectArgumentInitialization(ObjectArg, Method))
6082    return ExprError();
6083  MemExpr->setBase(ObjectArg);
6084
6085  // Convert the rest of the arguments
6086  const FunctionProtoType *Proto = cast<FunctionProtoType>(Method->getType());
6087  if (ConvertArgumentsForCall(&*TheCall, MemExpr, Method, Proto, Args, NumArgs,
6088                              RParenLoc))
6089    return ExprError();
6090
6091  if (CheckFunctionCall(Method, TheCall.get()))
6092    return ExprError();
6093
6094  return MaybeBindToTemporary(TheCall.release());
6095}
6096
6097/// BuildCallToObjectOfClassType - Build a call to an object of class
6098/// type (C++ [over.call.object]), which can end up invoking an
6099/// overloaded function call operator (@c operator()) or performing a
6100/// user-defined conversion on the object argument.
6101Sema::ExprResult
6102Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
6103                                   SourceLocation LParenLoc,
6104                                   Expr **Args, unsigned NumArgs,
6105                                   SourceLocation *CommaLocs,
6106                                   SourceLocation RParenLoc) {
6107  assert(Object->getType()->isRecordType() && "Requires object type argument");
6108  const RecordType *Record = Object->getType()->getAs<RecordType>();
6109
6110  // C++ [over.call.object]p1:
6111  //  If the primary-expression E in the function call syntax
6112  //  evaluates to a class object of type "cv T", then the set of
6113  //  candidate functions includes at least the function call
6114  //  operators of T. The function call operators of T are obtained by
6115  //  ordinary lookup of the name operator() in the context of
6116  //  (E).operator().
6117  OverloadCandidateSet CandidateSet;
6118  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
6119
6120  if (RequireCompleteType(LParenLoc, Object->getType(),
6121                          PartialDiagnostic(diag::err_incomplete_object_call)
6122                          << Object->getSourceRange()))
6123    return true;
6124
6125  LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
6126  LookupQualifiedName(R, Record->getDecl());
6127  R.suppressDiagnostics();
6128
6129  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
6130       Oper != OperEnd; ++Oper) {
6131    AddMethodCandidate(*Oper, Oper.getAccess(), Object->getType(),
6132                       Args, NumArgs, CandidateSet,
6133                       /*SuppressUserConversions=*/ false);
6134  }
6135
6136  // C++ [over.call.object]p2:
6137  //   In addition, for each conversion function declared in T of the
6138  //   form
6139  //
6140  //        operator conversion-type-id () cv-qualifier;
6141  //
6142  //   where cv-qualifier is the same cv-qualification as, or a
6143  //   greater cv-qualification than, cv, and where conversion-type-id
6144  //   denotes the type "pointer to function of (P1,...,Pn) returning
6145  //   R", or the type "reference to pointer to function of
6146  //   (P1,...,Pn) returning R", or the type "reference to function
6147  //   of (P1,...,Pn) returning R", a surrogate call function [...]
6148  //   is also considered as a candidate function. Similarly,
6149  //   surrogate call functions are added to the set of candidate
6150  //   functions for each conversion function declared in an
6151  //   accessible base class provided the function is not hidden
6152  //   within T by another intervening declaration.
6153  const UnresolvedSetImpl *Conversions
6154    = cast<CXXRecordDecl>(Record->getDecl())->getVisibleConversionFunctions();
6155  for (UnresolvedSetImpl::iterator I = Conversions->begin(),
6156         E = Conversions->end(); I != E; ++I) {
6157    NamedDecl *D = *I;
6158    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
6159    if (isa<UsingShadowDecl>(D))
6160      D = cast<UsingShadowDecl>(D)->getTargetDecl();
6161
6162    // Skip over templated conversion functions; they aren't
6163    // surrogates.
6164    if (isa<FunctionTemplateDecl>(D))
6165      continue;
6166
6167    CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
6168
6169    // Strip the reference type (if any) and then the pointer type (if
6170    // any) to get down to what might be a function type.
6171    QualType ConvType = Conv->getConversionType().getNonReferenceType();
6172    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
6173      ConvType = ConvPtrType->getPointeeType();
6174
6175    if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
6176      AddSurrogateCandidate(Conv, I.getAccess(), ActingContext, Proto,
6177                            Object->getType(), Args, NumArgs,
6178                            CandidateSet);
6179  }
6180
6181  // Perform overload resolution.
6182  OverloadCandidateSet::iterator Best;
6183  switch (BestViableFunction(CandidateSet, Object->getLocStart(), Best)) {
6184  case OR_Success:
6185    // Overload resolution succeeded; we'll build the appropriate call
6186    // below.
6187    break;
6188
6189  case OR_No_Viable_Function:
6190    if (CandidateSet.empty())
6191      Diag(Object->getSourceRange().getBegin(), diag::err_ovl_no_oper)
6192        << Object->getType() << /*call*/ 1
6193        << Object->getSourceRange();
6194    else
6195      Diag(Object->getSourceRange().getBegin(),
6196           diag::err_ovl_no_viable_object_call)
6197        << Object->getType() << Object->getSourceRange();
6198    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6199    break;
6200
6201  case OR_Ambiguous:
6202    Diag(Object->getSourceRange().getBegin(),
6203         diag::err_ovl_ambiguous_object_call)
6204      << Object->getType() << Object->getSourceRange();
6205    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, Args, NumArgs);
6206    break;
6207
6208  case OR_Deleted:
6209    Diag(Object->getSourceRange().getBegin(),
6210         diag::err_ovl_deleted_object_call)
6211      << Best->Function->isDeleted()
6212      << Object->getType() << Object->getSourceRange();
6213    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, Args, NumArgs);
6214    break;
6215  }
6216
6217  if (Best == CandidateSet.end()) {
6218    // We had an error; delete all of the subexpressions and return
6219    // the error.
6220    Object->Destroy(Context);
6221    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
6222      Args[ArgIdx]->Destroy(Context);
6223    return true;
6224  }
6225
6226  if (Best->Function == 0) {
6227    // Since there is no function declaration, this is one of the
6228    // surrogate candidates. Dig out the conversion function.
6229    CXXConversionDecl *Conv
6230      = cast<CXXConversionDecl>(
6231                         Best->Conversions[0].UserDefined.ConversionFunction);
6232
6233    // We selected one of the surrogate functions that converts the
6234    // object parameter to a function pointer. Perform the conversion
6235    // on the object argument, then let ActOnCallExpr finish the job.
6236
6237    // Create an implicit member expr to refer to the conversion operator.
6238    // and then call it.
6239    CXXMemberCallExpr *CE = BuildCXXMemberCallExpr(Object, Conv);
6240
6241    return ActOnCallExpr(S, ExprArg(*this, CE), LParenLoc,
6242                         MultiExprArg(*this, (ExprTy**)Args, NumArgs),
6243                         CommaLocs, RParenLoc).release();
6244  }
6245
6246  // We found an overloaded operator(). Build a CXXOperatorCallExpr
6247  // that calls this method, using Object for the implicit object
6248  // parameter and passing along the remaining arguments.
6249  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
6250  const FunctionProtoType *Proto = Method->getType()->getAs<FunctionProtoType>();
6251
6252  unsigned NumArgsInProto = Proto->getNumArgs();
6253  unsigned NumArgsToCheck = NumArgs;
6254
6255  // Build the full argument list for the method call (the
6256  // implicit object parameter is placed at the beginning of the
6257  // list).
6258  Expr **MethodArgs;
6259  if (NumArgs < NumArgsInProto) {
6260    NumArgsToCheck = NumArgsInProto;
6261    MethodArgs = new Expr*[NumArgsInProto + 1];
6262  } else {
6263    MethodArgs = new Expr*[NumArgs + 1];
6264  }
6265  MethodArgs[0] = Object;
6266  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
6267    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
6268
6269  Expr *NewFn = new (Context) DeclRefExpr(Method, Method->getType(),
6270                                          SourceLocation());
6271  UsualUnaryConversions(NewFn);
6272
6273  // Once we've built TheCall, all of the expressions are properly
6274  // owned.
6275  QualType ResultTy = Method->getResultType().getNonReferenceType();
6276  ExprOwningPtr<CXXOperatorCallExpr>
6277    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn,
6278                                                    MethodArgs, NumArgs + 1,
6279                                                    ResultTy, RParenLoc));
6280  delete [] MethodArgs;
6281
6282  if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall.get(),
6283                          Method))
6284    return true;
6285
6286  // We may have default arguments. If so, we need to allocate more
6287  // slots in the call for them.
6288  if (NumArgs < NumArgsInProto)
6289    TheCall->setNumArgs(Context, NumArgsInProto + 1);
6290  else if (NumArgs > NumArgsInProto)
6291    NumArgsToCheck = NumArgsInProto;
6292
6293  bool IsError = false;
6294
6295  // Initialize the implicit object parameter.
6296  IsError |= PerformObjectArgumentInitialization(Object, Method);
6297  TheCall->setArg(0, Object);
6298
6299
6300  // Check the argument types.
6301  for (unsigned i = 0; i != NumArgsToCheck; i++) {
6302    Expr *Arg;
6303    if (i < NumArgs) {
6304      Arg = Args[i];
6305
6306      // Pass the argument.
6307      QualType ProtoArgType = Proto->getArgType(i);
6308      IsError |= PerformCopyInitialization(Arg, ProtoArgType, AA_Passing);
6309    } else {
6310      OwningExprResult DefArg
6311        = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
6312      if (DefArg.isInvalid()) {
6313        IsError = true;
6314        break;
6315      }
6316
6317      Arg = DefArg.takeAs<Expr>();
6318    }
6319
6320    TheCall->setArg(i + 1, Arg);
6321  }
6322
6323  // If this is a variadic call, handle args passed through "...".
6324  if (Proto->isVariadic()) {
6325    // Promote the arguments (C99 6.5.2.2p7).
6326    for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
6327      Expr *Arg = Args[i];
6328      IsError |= DefaultVariadicArgumentPromotion(Arg, VariadicMethod);
6329      TheCall->setArg(i + 1, Arg);
6330    }
6331  }
6332
6333  if (IsError) return true;
6334
6335  if (CheckFunctionCall(Method, TheCall.get()))
6336    return true;
6337
6338  return MaybeBindToTemporary(TheCall.release()).release();
6339}
6340
6341/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
6342///  (if one exists), where @c Base is an expression of class type and
6343/// @c Member is the name of the member we're trying to find.
6344Sema::OwningExprResult
6345Sema::BuildOverloadedArrowExpr(Scope *S, ExprArg BaseIn, SourceLocation OpLoc) {
6346  Expr *Base = static_cast<Expr *>(BaseIn.get());
6347  assert(Base->getType()->isRecordType() && "left-hand side must have class type");
6348
6349  // C++ [over.ref]p1:
6350  //
6351  //   [...] An expression x->m is interpreted as (x.operator->())->m
6352  //   for a class object x of type T if T::operator->() exists and if
6353  //   the operator is selected as the best match function by the
6354  //   overload resolution mechanism (13.3).
6355  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
6356  OverloadCandidateSet CandidateSet;
6357  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
6358
6359  if (RequireCompleteType(Base->getLocStart(), Base->getType(),
6360                          PDiag(diag::err_typecheck_incomplete_tag)
6361                            << Base->getSourceRange()))
6362    return ExprError();
6363
6364  LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
6365  LookupQualifiedName(R, BaseRecord->getDecl());
6366  R.suppressDiagnostics();
6367
6368  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
6369       Oper != OperEnd; ++Oper) {
6370    NamedDecl *D = *Oper;
6371    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
6372    if (isa<UsingShadowDecl>(D))
6373      D = cast<UsingShadowDecl>(D)->getTargetDecl();
6374
6375    AddMethodCandidate(cast<CXXMethodDecl>(D), Oper.getAccess(), ActingContext,
6376                       Base->getType(), 0, 0, CandidateSet,
6377                       /*SuppressUserConversions=*/false);
6378  }
6379
6380  // Perform overload resolution.
6381  OverloadCandidateSet::iterator Best;
6382  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
6383  case OR_Success:
6384    // Overload resolution succeeded; we'll build the call below.
6385    break;
6386
6387  case OR_No_Viable_Function:
6388    if (CandidateSet.empty())
6389      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
6390        << Base->getType() << Base->getSourceRange();
6391    else
6392      Diag(OpLoc, diag::err_ovl_no_viable_oper)
6393        << "operator->" << Base->getSourceRange();
6394    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, &Base, 1);
6395    return ExprError();
6396
6397  case OR_Ambiguous:
6398    Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
6399      << "->" << Base->getSourceRange();
6400    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates, &Base, 1);
6401    return ExprError();
6402
6403  case OR_Deleted:
6404    Diag(OpLoc,  diag::err_ovl_deleted_oper)
6405      << Best->Function->isDeleted()
6406      << "->" << Base->getSourceRange();
6407    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates, &Base, 1);
6408    return ExprError();
6409  }
6410
6411  // Convert the object parameter.
6412  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
6413  if (PerformObjectArgumentInitialization(Base, Method))
6414    return ExprError();
6415
6416  // No concerns about early exits now.
6417  BaseIn.release();
6418
6419  // Build the operator call.
6420  Expr *FnExpr = new (Context) DeclRefExpr(Method, Method->getType(),
6421                                           SourceLocation());
6422  UsualUnaryConversions(FnExpr);
6423
6424  QualType ResultTy = Method->getResultType().getNonReferenceType();
6425  ExprOwningPtr<CXXOperatorCallExpr>
6426    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr,
6427                                                    &Base, 1, ResultTy, OpLoc));
6428
6429  if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall.get(),
6430                          Method))
6431          return ExprError();
6432  return move(TheCall);
6433}
6434
6435/// FixOverloadedFunctionReference - E is an expression that refers to
6436/// a C++ overloaded function (possibly with some parentheses and
6437/// perhaps a '&' around it). We have resolved the overloaded function
6438/// to the function declaration Fn, so patch up the expression E to
6439/// refer (possibly indirectly) to Fn. Returns the new expr.
6440Expr *Sema::FixOverloadedFunctionReference(Expr *E, FunctionDecl *Fn) {
6441  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
6442    Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(), Fn);
6443    if (SubExpr == PE->getSubExpr())
6444      return PE->Retain();
6445
6446    return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
6447  }
6448
6449  if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
6450    Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(), Fn);
6451    assert(Context.hasSameType(ICE->getSubExpr()->getType(),
6452                               SubExpr->getType()) &&
6453           "Implicit cast type cannot be determined from overload");
6454    if (SubExpr == ICE->getSubExpr())
6455      return ICE->Retain();
6456
6457    return new (Context) ImplicitCastExpr(ICE->getType(),
6458                                          ICE->getCastKind(),
6459                                          SubExpr,
6460                                          ICE->isLvalueCast());
6461  }
6462
6463  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
6464    assert(UnOp->getOpcode() == UnaryOperator::AddrOf &&
6465           "Can only take the address of an overloaded function");
6466    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
6467      if (Method->isStatic()) {
6468        // Do nothing: static member functions aren't any different
6469        // from non-member functions.
6470      } else {
6471        // Fix the sub expression, which really has to be an
6472        // UnresolvedLookupExpr holding an overloaded member function
6473        // or template.
6474        Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), Fn);
6475        if (SubExpr == UnOp->getSubExpr())
6476          return UnOp->Retain();
6477
6478        assert(isa<DeclRefExpr>(SubExpr)
6479               && "fixed to something other than a decl ref");
6480        assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
6481               && "fixed to a member ref with no nested name qualifier");
6482
6483        // We have taken the address of a pointer to member
6484        // function. Perform the computation here so that we get the
6485        // appropriate pointer to member type.
6486        QualType ClassType
6487          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
6488        QualType MemPtrType
6489          = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
6490
6491        return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
6492                                           MemPtrType, UnOp->getOperatorLoc());
6493      }
6494    }
6495    Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), Fn);
6496    if (SubExpr == UnOp->getSubExpr())
6497      return UnOp->Retain();
6498
6499    return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
6500                                     Context.getPointerType(SubExpr->getType()),
6501                                       UnOp->getOperatorLoc());
6502  }
6503
6504  if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
6505    // FIXME: avoid copy.
6506    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6507    if (ULE->hasExplicitTemplateArgs()) {
6508      ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
6509      TemplateArgs = &TemplateArgsBuffer;
6510    }
6511
6512    return DeclRefExpr::Create(Context,
6513                               ULE->getQualifier(),
6514                               ULE->getQualifierRange(),
6515                               Fn,
6516                               ULE->getNameLoc(),
6517                               Fn->getType(),
6518                               TemplateArgs);
6519  }
6520
6521  if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
6522    // FIXME: avoid copy.
6523    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6524    if (MemExpr->hasExplicitTemplateArgs()) {
6525      MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
6526      TemplateArgs = &TemplateArgsBuffer;
6527    }
6528
6529    Expr *Base;
6530
6531    // If we're filling in
6532    if (MemExpr->isImplicitAccess()) {
6533      if (cast<CXXMethodDecl>(Fn)->isStatic()) {
6534        return DeclRefExpr::Create(Context,
6535                                   MemExpr->getQualifier(),
6536                                   MemExpr->getQualifierRange(),
6537                                   Fn,
6538                                   MemExpr->getMemberLoc(),
6539                                   Fn->getType(),
6540                                   TemplateArgs);
6541      } else {
6542        SourceLocation Loc = MemExpr->getMemberLoc();
6543        if (MemExpr->getQualifier())
6544          Loc = MemExpr->getQualifierRange().getBegin();
6545        Base = new (Context) CXXThisExpr(Loc,
6546                                         MemExpr->getBaseType(),
6547                                         /*isImplicit=*/true);
6548      }
6549    } else
6550      Base = MemExpr->getBase()->Retain();
6551
6552    return MemberExpr::Create(Context, Base,
6553                              MemExpr->isArrow(),
6554                              MemExpr->getQualifier(),
6555                              MemExpr->getQualifierRange(),
6556                              Fn,
6557                              MemExpr->getMemberLoc(),
6558                              TemplateArgs,
6559                              Fn->getType());
6560  }
6561
6562  assert(false && "Invalid reference to overloaded function");
6563  return E->Retain();
6564}
6565
6566Sema::OwningExprResult Sema::FixOverloadedFunctionReference(OwningExprResult E,
6567                                                            FunctionDecl *Fn) {
6568  return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Fn));
6569}
6570
6571} // end namespace clang
6572