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