SemaOverload.cpp revision 48026d26fb58e413544874eead5491b1452e2ebf
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, OCD_AllCandidates);
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(!Function->getDescribedFunctionTemplate() &&
2311         "Use AddTemplateOverloadCandidate for function templates");
2312
2313  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
2314    if (!isa<CXXConstructorDecl>(Method)) {
2315      // If we get here, it's because we're calling a member function
2316      // that is named without a member access expression (e.g.,
2317      // "this->f") that was either written explicitly or created
2318      // implicitly. This can happen with a qualified call to a member
2319      // function, e.g., X::f(). We use an empty type for the implied
2320      // object argument (C++ [over.call.func]p3), and the acting context
2321      // is irrelevant.
2322      AddMethodCandidate(Method, Method->getParent(),
2323                         QualType(), Args, NumArgs, CandidateSet,
2324                         SuppressUserConversions, ForceRValue);
2325      return;
2326    }
2327    // We treat a constructor like a non-member function, since its object
2328    // argument doesn't participate in overload resolution.
2329  }
2330
2331  if (!CandidateSet.isNewCandidate(Function))
2332    return;
2333
2334  // Overload resolution is always an unevaluated context.
2335  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2336
2337  if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Function)){
2338    // C++ [class.copy]p3:
2339    //   A member function template is never instantiated to perform the copy
2340    //   of a class object to an object of its class type.
2341    QualType ClassType = Context.getTypeDeclType(Constructor->getParent());
2342    if (NumArgs == 1 &&
2343        Constructor->isCopyConstructorLikeSpecialization() &&
2344        Context.hasSameUnqualifiedType(ClassType, Args[0]->getType()))
2345      return;
2346  }
2347
2348  // Add this candidate
2349  CandidateSet.push_back(OverloadCandidate());
2350  OverloadCandidate& Candidate = CandidateSet.back();
2351  Candidate.Function = Function;
2352  Candidate.Viable = true;
2353  Candidate.IsSurrogate = false;
2354  Candidate.IgnoreObjectArgument = false;
2355
2356  unsigned NumArgsInProto = Proto->getNumArgs();
2357
2358  // (C++ 13.3.2p2): A candidate function having fewer than m
2359  // parameters is viable only if it has an ellipsis in its parameter
2360  // list (8.3.5).
2361  if ((NumArgs + (PartialOverloading && NumArgs)) > NumArgsInProto &&
2362      !Proto->isVariadic()) {
2363    Candidate.Viable = false;
2364    return;
2365  }
2366
2367  // (C++ 13.3.2p2): A candidate function having more than m parameters
2368  // is viable only if the (m+1)st parameter has a default argument
2369  // (8.3.6). For the purposes of overload resolution, the
2370  // parameter list is truncated on the right, so that there are
2371  // exactly m parameters.
2372  unsigned MinRequiredArgs = Function->getMinRequiredArguments();
2373  if (NumArgs < MinRequiredArgs && !PartialOverloading) {
2374    // Not enough arguments.
2375    Candidate.Viable = false;
2376    return;
2377  }
2378
2379  // Determine the implicit conversion sequences for each of the
2380  // arguments.
2381  Candidate.Conversions.resize(NumArgs);
2382  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2383    if (ArgIdx < NumArgsInProto) {
2384      // (C++ 13.3.2p3): for F to be a viable function, there shall
2385      // exist for each argument an implicit conversion sequence
2386      // (13.3.3.1) that converts that argument to the corresponding
2387      // parameter of F.
2388      QualType ParamType = Proto->getArgType(ArgIdx);
2389      Candidate.Conversions[ArgIdx]
2390        = TryCopyInitialization(Args[ArgIdx], ParamType,
2391                                SuppressUserConversions, ForceRValue,
2392                                /*InOverloadResolution=*/true);
2393      if (Candidate.Conversions[ArgIdx].ConversionKind
2394            == ImplicitConversionSequence::BadConversion) {
2395      // 13.3.3.1-p10 If several different sequences of conversions exist that
2396      // each convert the argument to the parameter type, the implicit conversion
2397      // sequence associated with the parameter is defined to be the unique conversion
2398      // sequence designated the ambiguous conversion sequence. For the purpose of
2399      // ranking implicit conversion sequences as described in 13.3.3.2, the ambiguous
2400      // conversion sequence is treated as a user-defined sequence that is
2401      // indistinguishable from any other user-defined conversion sequence
2402        if (!Candidate.Conversions[ArgIdx].ConversionFunctionSet.empty()) {
2403          Candidate.Conversions[ArgIdx].ConversionKind =
2404            ImplicitConversionSequence::UserDefinedConversion;
2405          // Set the conversion function to one of them. As due to ambiguity,
2406          // they carry the same weight and is needed for overload resolution
2407          // later.
2408          Candidate.Conversions[ArgIdx].UserDefined.ConversionFunction =
2409            Candidate.Conversions[ArgIdx].ConversionFunctionSet[0];
2410        }
2411        else {
2412          Candidate.Viable = false;
2413          break;
2414        }
2415      }
2416    } else {
2417      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2418      // argument for which there is no corresponding parameter is
2419      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2420      Candidate.Conversions[ArgIdx].ConversionKind
2421        = ImplicitConversionSequence::EllipsisConversion;
2422    }
2423  }
2424}
2425
2426/// \brief Add all of the function declarations in the given function set to
2427/// the overload canddiate set.
2428void Sema::AddFunctionCandidates(const FunctionSet &Functions,
2429                                 Expr **Args, unsigned NumArgs,
2430                                 OverloadCandidateSet& CandidateSet,
2431                                 bool SuppressUserConversions) {
2432  for (FunctionSet::const_iterator F = Functions.begin(),
2433                                FEnd = Functions.end();
2434       F != FEnd; ++F) {
2435    // FIXME: using declarations
2436    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*F)) {
2437      if (isa<CXXMethodDecl>(FD) && !cast<CXXMethodDecl>(FD)->isStatic())
2438        AddMethodCandidate(cast<CXXMethodDecl>(FD),
2439                           cast<CXXMethodDecl>(FD)->getParent(),
2440                           Args[0]->getType(), Args + 1, NumArgs - 1,
2441                           CandidateSet, SuppressUserConversions);
2442      else
2443        AddOverloadCandidate(FD, Args, NumArgs, CandidateSet,
2444                             SuppressUserConversions);
2445    } else {
2446      FunctionTemplateDecl *FunTmpl = cast<FunctionTemplateDecl>(*F);
2447      if (isa<CXXMethodDecl>(FunTmpl->getTemplatedDecl()) &&
2448          !cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl())->isStatic())
2449        AddMethodTemplateCandidate(FunTmpl,
2450                              cast<CXXRecordDecl>(FunTmpl->getDeclContext()),
2451                                   /*FIXME: explicit args */ 0,
2452                                   Args[0]->getType(), Args + 1, NumArgs - 1,
2453                                   CandidateSet,
2454                                   SuppressUserConversions);
2455      else
2456        AddTemplateOverloadCandidate(FunTmpl,
2457                                     /*FIXME: explicit args */ 0,
2458                                     Args, NumArgs, CandidateSet,
2459                                     SuppressUserConversions);
2460    }
2461  }
2462}
2463
2464/// AddMethodCandidate - Adds a named decl (which is some kind of
2465/// method) as a method candidate to the given overload set.
2466void Sema::AddMethodCandidate(NamedDecl *Decl,
2467                              QualType ObjectType,
2468                              Expr **Args, unsigned NumArgs,
2469                              OverloadCandidateSet& CandidateSet,
2470                              bool SuppressUserConversions, bool ForceRValue) {
2471
2472  // FIXME: use this
2473  CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(Decl->getDeclContext());
2474
2475  if (isa<UsingShadowDecl>(Decl))
2476    Decl = cast<UsingShadowDecl>(Decl)->getTargetDecl();
2477
2478  if (FunctionTemplateDecl *TD = dyn_cast<FunctionTemplateDecl>(Decl)) {
2479    assert(isa<CXXMethodDecl>(TD->getTemplatedDecl()) &&
2480           "Expected a member function template");
2481    AddMethodTemplateCandidate(TD, ActingContext, /*ExplicitArgs*/ 0,
2482                               ObjectType, Args, NumArgs,
2483                               CandidateSet,
2484                               SuppressUserConversions,
2485                               ForceRValue);
2486  } else {
2487    AddMethodCandidate(cast<CXXMethodDecl>(Decl), ActingContext,
2488                       ObjectType, Args, NumArgs,
2489                       CandidateSet, SuppressUserConversions, ForceRValue);
2490  }
2491}
2492
2493/// AddMethodCandidate - Adds the given C++ member function to the set
2494/// of candidate functions, using the given function call arguments
2495/// and the object argument (@c Object). For example, in a call
2496/// @c o.f(a1,a2), @c Object will contain @c o and @c Args will contain
2497/// both @c a1 and @c a2. If @p SuppressUserConversions, then don't
2498/// allow user-defined conversions via constructors or conversion
2499/// operators. If @p ForceRValue, treat all arguments as rvalues. This is
2500/// a slightly hacky way to implement the overloading rules for elidable copy
2501/// initialization in C++0x (C++0x 12.8p15).
2502void
2503Sema::AddMethodCandidate(CXXMethodDecl *Method, CXXRecordDecl *ActingContext,
2504                         QualType ObjectType, Expr **Args, unsigned NumArgs,
2505                         OverloadCandidateSet& CandidateSet,
2506                         bool SuppressUserConversions, bool ForceRValue) {
2507  const FunctionProtoType* Proto
2508    = dyn_cast<FunctionProtoType>(Method->getType()->getAs<FunctionType>());
2509  assert(Proto && "Methods without a prototype cannot be overloaded");
2510  assert(!isa<CXXConstructorDecl>(Method) &&
2511         "Use AddOverloadCandidate for constructors");
2512
2513  if (!CandidateSet.isNewCandidate(Method))
2514    return;
2515
2516  // Overload resolution is always an unevaluated context.
2517  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2518
2519  // Add this candidate
2520  CandidateSet.push_back(OverloadCandidate());
2521  OverloadCandidate& Candidate = CandidateSet.back();
2522  Candidate.Function = Method;
2523  Candidate.IsSurrogate = false;
2524  Candidate.IgnoreObjectArgument = false;
2525
2526  unsigned NumArgsInProto = Proto->getNumArgs();
2527
2528  // (C++ 13.3.2p2): A candidate function having fewer than m
2529  // parameters is viable only if it has an ellipsis in its parameter
2530  // list (8.3.5).
2531  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
2532    Candidate.Viable = false;
2533    return;
2534  }
2535
2536  // (C++ 13.3.2p2): A candidate function having more than m parameters
2537  // is viable only if the (m+1)st parameter has a default argument
2538  // (8.3.6). For the purposes of overload resolution, the
2539  // parameter list is truncated on the right, so that there are
2540  // exactly m parameters.
2541  unsigned MinRequiredArgs = Method->getMinRequiredArguments();
2542  if (NumArgs < MinRequiredArgs) {
2543    // Not enough arguments.
2544    Candidate.Viable = false;
2545    return;
2546  }
2547
2548  Candidate.Viable = true;
2549  Candidate.Conversions.resize(NumArgs + 1);
2550
2551  if (Method->isStatic() || ObjectType.isNull())
2552    // The implicit object argument is ignored.
2553    Candidate.IgnoreObjectArgument = true;
2554  else {
2555    // Determine the implicit conversion sequence for the object
2556    // parameter.
2557    Candidate.Conversions[0]
2558      = TryObjectArgumentInitialization(ObjectType, Method, ActingContext);
2559    if (Candidate.Conversions[0].ConversionKind
2560          == ImplicitConversionSequence::BadConversion) {
2561      Candidate.Viable = false;
2562      return;
2563    }
2564  }
2565
2566  // Determine the implicit conversion sequences for each of the
2567  // arguments.
2568  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2569    if (ArgIdx < NumArgsInProto) {
2570      // (C++ 13.3.2p3): for F to be a viable function, there shall
2571      // exist for each argument an implicit conversion sequence
2572      // (13.3.3.1) that converts that argument to the corresponding
2573      // parameter of F.
2574      QualType ParamType = Proto->getArgType(ArgIdx);
2575      Candidate.Conversions[ArgIdx + 1]
2576        = TryCopyInitialization(Args[ArgIdx], ParamType,
2577                                SuppressUserConversions, ForceRValue,
2578                                /*InOverloadResolution=*/true);
2579      if (Candidate.Conversions[ArgIdx + 1].ConversionKind
2580            == ImplicitConversionSequence::BadConversion) {
2581        Candidate.Viable = false;
2582        break;
2583      }
2584    } else {
2585      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2586      // argument for which there is no corresponding parameter is
2587      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2588      Candidate.Conversions[ArgIdx + 1].ConversionKind
2589        = ImplicitConversionSequence::EllipsisConversion;
2590    }
2591  }
2592}
2593
2594/// \brief Add a C++ member function template as a candidate to the candidate
2595/// set, using template argument deduction to produce an appropriate member
2596/// function template specialization.
2597void
2598Sema::AddMethodTemplateCandidate(FunctionTemplateDecl *MethodTmpl,
2599                                 CXXRecordDecl *ActingContext,
2600                        const TemplateArgumentListInfo *ExplicitTemplateArgs,
2601                                 QualType ObjectType,
2602                                 Expr **Args, unsigned NumArgs,
2603                                 OverloadCandidateSet& CandidateSet,
2604                                 bool SuppressUserConversions,
2605                                 bool ForceRValue) {
2606  if (!CandidateSet.isNewCandidate(MethodTmpl))
2607    return;
2608
2609  // C++ [over.match.funcs]p7:
2610  //   In each case where a candidate is a function template, candidate
2611  //   function template specializations are generated using template argument
2612  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
2613  //   candidate functions in the usual way.113) A given name can refer to one
2614  //   or more function templates and also to a set of overloaded non-template
2615  //   functions. In such a case, the candidate functions generated from each
2616  //   function template are combined with the set of non-template candidate
2617  //   functions.
2618  TemplateDeductionInfo Info(Context);
2619  FunctionDecl *Specialization = 0;
2620  if (TemplateDeductionResult Result
2621      = DeduceTemplateArguments(MethodTmpl, ExplicitTemplateArgs,
2622                                Args, NumArgs, Specialization, Info)) {
2623        // FIXME: Record what happened with template argument deduction, so
2624        // that we can give the user a beautiful diagnostic.
2625        (void)Result;
2626        return;
2627      }
2628
2629  // Add the function template specialization produced by template argument
2630  // deduction as a candidate.
2631  assert(Specialization && "Missing member function template specialization?");
2632  assert(isa<CXXMethodDecl>(Specialization) &&
2633         "Specialization is not a member function?");
2634  AddMethodCandidate(cast<CXXMethodDecl>(Specialization), ActingContext,
2635                     ObjectType, Args, NumArgs,
2636                     CandidateSet, SuppressUserConversions, ForceRValue);
2637}
2638
2639/// \brief Add a C++ function template specialization as a candidate
2640/// in the candidate set, using template argument deduction to produce
2641/// an appropriate function template specialization.
2642void
2643Sema::AddTemplateOverloadCandidate(FunctionTemplateDecl *FunctionTemplate,
2644                        const TemplateArgumentListInfo *ExplicitTemplateArgs,
2645                                   Expr **Args, unsigned NumArgs,
2646                                   OverloadCandidateSet& CandidateSet,
2647                                   bool SuppressUserConversions,
2648                                   bool ForceRValue) {
2649  if (!CandidateSet.isNewCandidate(FunctionTemplate))
2650    return;
2651
2652  // C++ [over.match.funcs]p7:
2653  //   In each case where a candidate is a function template, candidate
2654  //   function template specializations are generated using template argument
2655  //   deduction (14.8.3, 14.8.2). Those candidates are then handled as
2656  //   candidate functions in the usual way.113) A given name can refer to one
2657  //   or more function templates and also to a set of overloaded non-template
2658  //   functions. In such a case, the candidate functions generated from each
2659  //   function template are combined with the set of non-template candidate
2660  //   functions.
2661  TemplateDeductionInfo Info(Context);
2662  FunctionDecl *Specialization = 0;
2663  if (TemplateDeductionResult Result
2664        = DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
2665                                  Args, NumArgs, Specialization, Info)) {
2666    // FIXME: Record what happened with template argument deduction, so
2667    // that we can give the user a beautiful diagnostic.
2668    (void) Result;
2669
2670    CandidateSet.push_back(OverloadCandidate());
2671    OverloadCandidate &Candidate = CandidateSet.back();
2672    Candidate.Function = FunctionTemplate->getTemplatedDecl();
2673    Candidate.Viable = false;
2674    Candidate.IsSurrogate = false;
2675    Candidate.IgnoreObjectArgument = false;
2676    return;
2677  }
2678
2679  // Add the function template specialization produced by template argument
2680  // deduction as a candidate.
2681  assert(Specialization && "Missing function template specialization?");
2682  AddOverloadCandidate(Specialization, Args, NumArgs, CandidateSet,
2683                       SuppressUserConversions, ForceRValue);
2684}
2685
2686/// AddConversionCandidate - Add a C++ conversion function as a
2687/// candidate in the candidate set (C++ [over.match.conv],
2688/// C++ [over.match.copy]). From is the expression we're converting from,
2689/// and ToType is the type that we're eventually trying to convert to
2690/// (which may or may not be the same type as the type that the
2691/// conversion function produces).
2692void
2693Sema::AddConversionCandidate(CXXConversionDecl *Conversion,
2694                             CXXRecordDecl *ActingContext,
2695                             Expr *From, QualType ToType,
2696                             OverloadCandidateSet& CandidateSet) {
2697  assert(!Conversion->getDescribedFunctionTemplate() &&
2698         "Conversion function templates use AddTemplateConversionCandidate");
2699
2700  if (!CandidateSet.isNewCandidate(Conversion))
2701    return;
2702
2703  // Overload resolution is always an unevaluated context.
2704  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2705
2706  // Add this candidate
2707  CandidateSet.push_back(OverloadCandidate());
2708  OverloadCandidate& Candidate = CandidateSet.back();
2709  Candidate.Function = Conversion;
2710  Candidate.IsSurrogate = false;
2711  Candidate.IgnoreObjectArgument = false;
2712  Candidate.FinalConversion.setAsIdentityConversion();
2713  Candidate.FinalConversion.FromTypePtr
2714    = Conversion->getConversionType().getAsOpaquePtr();
2715  Candidate.FinalConversion.ToTypePtr = ToType.getAsOpaquePtr();
2716
2717  // Determine the implicit conversion sequence for the implicit
2718  // object parameter.
2719  Candidate.Viable = true;
2720  Candidate.Conversions.resize(1);
2721  Candidate.Conversions[0]
2722    = TryObjectArgumentInitialization(From->getType(), Conversion,
2723                                      ActingContext);
2724  // Conversion functions to a different type in the base class is visible in
2725  // the derived class.  So, a derived to base conversion should not participate
2726  // in overload resolution.
2727  if (Candidate.Conversions[0].Standard.Second == ICK_Derived_To_Base)
2728    Candidate.Conversions[0].Standard.Second = ICK_Identity;
2729  if (Candidate.Conversions[0].ConversionKind
2730      == ImplicitConversionSequence::BadConversion) {
2731    Candidate.Viable = false;
2732    return;
2733  }
2734
2735  // We won't go through a user-define type conversion function to convert a
2736  // derived to base as such conversions are given Conversion Rank. They only
2737  // go through a copy constructor. 13.3.3.1.2-p4 [over.ics.user]
2738  QualType FromCanon
2739    = Context.getCanonicalType(From->getType().getUnqualifiedType());
2740  QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
2741  if (FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon)) {
2742    Candidate.Viable = false;
2743    return;
2744  }
2745
2746
2747  // To determine what the conversion from the result of calling the
2748  // conversion function to the type we're eventually trying to
2749  // convert to (ToType), we need to synthesize a call to the
2750  // conversion function and attempt copy initialization from it. This
2751  // makes sure that we get the right semantics with respect to
2752  // lvalues/rvalues and the type. Fortunately, we can allocate this
2753  // call on the stack and we don't need its arguments to be
2754  // well-formed.
2755  DeclRefExpr ConversionRef(Conversion, Conversion->getType(),
2756                            From->getLocStart());
2757  ImplicitCastExpr ConversionFn(Context.getPointerType(Conversion->getType()),
2758                                CastExpr::CK_FunctionToPointerDecay,
2759                                &ConversionRef, false);
2760
2761  // Note that it is safe to allocate CallExpr on the stack here because
2762  // there are 0 arguments (i.e., nothing is allocated using ASTContext's
2763  // allocator).
2764  CallExpr Call(Context, &ConversionFn, 0, 0,
2765                Conversion->getConversionType().getNonReferenceType(),
2766                From->getLocStart());
2767  ImplicitConversionSequence ICS =
2768    TryCopyInitialization(&Call, ToType,
2769                          /*SuppressUserConversions=*/true,
2770                          /*ForceRValue=*/false,
2771                          /*InOverloadResolution=*/false);
2772
2773  switch (ICS.ConversionKind) {
2774  case ImplicitConversionSequence::StandardConversion:
2775    Candidate.FinalConversion = ICS.Standard;
2776    break;
2777
2778  case ImplicitConversionSequence::BadConversion:
2779    Candidate.Viable = false;
2780    break;
2781
2782  default:
2783    assert(false &&
2784           "Can only end up with a standard conversion sequence or failure");
2785  }
2786}
2787
2788/// \brief Adds a conversion function template specialization
2789/// candidate to the overload set, using template argument deduction
2790/// to deduce the template arguments of the conversion function
2791/// template from the type that we are converting to (C++
2792/// [temp.deduct.conv]).
2793void
2794Sema::AddTemplateConversionCandidate(FunctionTemplateDecl *FunctionTemplate,
2795                                     CXXRecordDecl *ActingDC,
2796                                     Expr *From, QualType ToType,
2797                                     OverloadCandidateSet &CandidateSet) {
2798  assert(isa<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl()) &&
2799         "Only conversion function templates permitted here");
2800
2801  if (!CandidateSet.isNewCandidate(FunctionTemplate))
2802    return;
2803
2804  TemplateDeductionInfo Info(Context);
2805  CXXConversionDecl *Specialization = 0;
2806  if (TemplateDeductionResult Result
2807        = DeduceTemplateArguments(FunctionTemplate, ToType,
2808                                  Specialization, Info)) {
2809    // FIXME: Record what happened with template argument deduction, so
2810    // that we can give the user a beautiful diagnostic.
2811    (void)Result;
2812    return;
2813  }
2814
2815  // Add the conversion function template specialization produced by
2816  // template argument deduction as a candidate.
2817  assert(Specialization && "Missing function template specialization?");
2818  AddConversionCandidate(Specialization, ActingDC, From, ToType, CandidateSet);
2819}
2820
2821/// AddSurrogateCandidate - Adds a "surrogate" candidate function that
2822/// converts the given @c Object to a function pointer via the
2823/// conversion function @c Conversion, and then attempts to call it
2824/// with the given arguments (C++ [over.call.object]p2-4). Proto is
2825/// the type of function that we'll eventually be calling.
2826void Sema::AddSurrogateCandidate(CXXConversionDecl *Conversion,
2827                                 CXXRecordDecl *ActingContext,
2828                                 const FunctionProtoType *Proto,
2829                                 QualType ObjectType,
2830                                 Expr **Args, unsigned NumArgs,
2831                                 OverloadCandidateSet& CandidateSet) {
2832  if (!CandidateSet.isNewCandidate(Conversion))
2833    return;
2834
2835  // Overload resolution is always an unevaluated context.
2836  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
2837
2838  CandidateSet.push_back(OverloadCandidate());
2839  OverloadCandidate& Candidate = CandidateSet.back();
2840  Candidate.Function = 0;
2841  Candidate.Surrogate = Conversion;
2842  Candidate.Viable = true;
2843  Candidate.IsSurrogate = true;
2844  Candidate.IgnoreObjectArgument = false;
2845  Candidate.Conversions.resize(NumArgs + 1);
2846
2847  // Determine the implicit conversion sequence for the implicit
2848  // object parameter.
2849  ImplicitConversionSequence ObjectInit
2850    = TryObjectArgumentInitialization(ObjectType, Conversion, ActingContext);
2851  if (ObjectInit.ConversionKind == ImplicitConversionSequence::BadConversion) {
2852    Candidate.Viable = false;
2853    return;
2854  }
2855
2856  // The first conversion is actually a user-defined conversion whose
2857  // first conversion is ObjectInit's standard conversion (which is
2858  // effectively a reference binding). Record it as such.
2859  Candidate.Conversions[0].ConversionKind
2860    = ImplicitConversionSequence::UserDefinedConversion;
2861  Candidate.Conversions[0].UserDefined.Before = ObjectInit.Standard;
2862  Candidate.Conversions[0].UserDefined.EllipsisConversion = false;
2863  Candidate.Conversions[0].UserDefined.ConversionFunction = Conversion;
2864  Candidate.Conversions[0].UserDefined.After
2865    = Candidate.Conversions[0].UserDefined.Before;
2866  Candidate.Conversions[0].UserDefined.After.setAsIdentityConversion();
2867
2868  // Find the
2869  unsigned NumArgsInProto = Proto->getNumArgs();
2870
2871  // (C++ 13.3.2p2): A candidate function having fewer than m
2872  // parameters is viable only if it has an ellipsis in its parameter
2873  // list (8.3.5).
2874  if (NumArgs > NumArgsInProto && !Proto->isVariadic()) {
2875    Candidate.Viable = false;
2876    return;
2877  }
2878
2879  // Function types don't have any default arguments, so just check if
2880  // we have enough arguments.
2881  if (NumArgs < NumArgsInProto) {
2882    // Not enough arguments.
2883    Candidate.Viable = false;
2884    return;
2885  }
2886
2887  // Determine the implicit conversion sequences for each of the
2888  // arguments.
2889  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
2890    if (ArgIdx < NumArgsInProto) {
2891      // (C++ 13.3.2p3): for F to be a viable function, there shall
2892      // exist for each argument an implicit conversion sequence
2893      // (13.3.3.1) that converts that argument to the corresponding
2894      // parameter of F.
2895      QualType ParamType = Proto->getArgType(ArgIdx);
2896      Candidate.Conversions[ArgIdx + 1]
2897        = TryCopyInitialization(Args[ArgIdx], ParamType,
2898                                /*SuppressUserConversions=*/false,
2899                                /*ForceRValue=*/false,
2900                                /*InOverloadResolution=*/false);
2901      if (Candidate.Conversions[ArgIdx + 1].ConversionKind
2902            == ImplicitConversionSequence::BadConversion) {
2903        Candidate.Viable = false;
2904        break;
2905      }
2906    } else {
2907      // (C++ 13.3.2p2): For the purposes of overload resolution, any
2908      // argument for which there is no corresponding parameter is
2909      // considered to ""match the ellipsis" (C+ 13.3.3.1.3).
2910      Candidate.Conversions[ArgIdx + 1].ConversionKind
2911        = ImplicitConversionSequence::EllipsisConversion;
2912    }
2913  }
2914}
2915
2916// FIXME: This will eventually be removed, once we've migrated all of the
2917// operator overloading logic over to the scheme used by binary operators, which
2918// works for template instantiation.
2919void Sema::AddOperatorCandidates(OverloadedOperatorKind Op, Scope *S,
2920                                 SourceLocation OpLoc,
2921                                 Expr **Args, unsigned NumArgs,
2922                                 OverloadCandidateSet& CandidateSet,
2923                                 SourceRange OpRange) {
2924  FunctionSet Functions;
2925
2926  QualType T1 = Args[0]->getType();
2927  QualType T2;
2928  if (NumArgs > 1)
2929    T2 = Args[1]->getType();
2930
2931  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
2932  if (S)
2933    LookupOverloadedOperatorName(Op, S, T1, T2, Functions);
2934  ArgumentDependentLookup(OpName, /*Operator*/true, Args, NumArgs, Functions);
2935  AddFunctionCandidates(Functions, Args, NumArgs, CandidateSet);
2936  AddMemberOperatorCandidates(Op, OpLoc, Args, NumArgs, CandidateSet, OpRange);
2937  AddBuiltinOperatorCandidates(Op, OpLoc, Args, NumArgs, CandidateSet);
2938}
2939
2940/// \brief Add overload candidates for overloaded operators that are
2941/// member functions.
2942///
2943/// Add the overloaded operator candidates that are member functions
2944/// for the operator Op that was used in an operator expression such
2945/// as "x Op y". , Args/NumArgs provides the operator arguments, and
2946/// CandidateSet will store the added overload candidates. (C++
2947/// [over.match.oper]).
2948void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
2949                                       SourceLocation OpLoc,
2950                                       Expr **Args, unsigned NumArgs,
2951                                       OverloadCandidateSet& CandidateSet,
2952                                       SourceRange OpRange) {
2953  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
2954
2955  // C++ [over.match.oper]p3:
2956  //   For a unary operator @ with an operand of a type whose
2957  //   cv-unqualified version is T1, and for a binary operator @ with
2958  //   a left operand of a type whose cv-unqualified version is T1 and
2959  //   a right operand of a type whose cv-unqualified version is T2,
2960  //   three sets of candidate functions, designated member
2961  //   candidates, non-member candidates and built-in candidates, are
2962  //   constructed as follows:
2963  QualType T1 = Args[0]->getType();
2964  QualType T2;
2965  if (NumArgs > 1)
2966    T2 = Args[1]->getType();
2967
2968  //     -- If T1 is a class type, the set of member candidates is the
2969  //        result of the qualified lookup of T1::operator@
2970  //        (13.3.1.1.1); otherwise, the set of member candidates is
2971  //        empty.
2972  if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
2973    // Complete the type if it can be completed. Otherwise, we're done.
2974    if (RequireCompleteType(OpLoc, T1, PDiag()))
2975      return;
2976
2977    LookupResult Operators(*this, OpName, OpLoc, LookupOrdinaryName);
2978    LookupQualifiedName(Operators, T1Rec->getDecl());
2979    Operators.suppressDiagnostics();
2980
2981    for (LookupResult::iterator Oper = Operators.begin(),
2982                             OperEnd = Operators.end();
2983         Oper != OperEnd;
2984         ++Oper)
2985      AddMethodCandidate(*Oper, Args[0]->getType(),
2986                         Args + 1, NumArgs - 1, CandidateSet,
2987                         /* SuppressUserConversions = */ false);
2988  }
2989}
2990
2991/// AddBuiltinCandidate - Add a candidate for a built-in
2992/// operator. ResultTy and ParamTys are the result and parameter types
2993/// of the built-in candidate, respectively. Args and NumArgs are the
2994/// arguments being passed to the candidate. IsAssignmentOperator
2995/// should be true when this built-in candidate is an assignment
2996/// operator. NumContextualBoolArguments is the number of arguments
2997/// (at the beginning of the argument list) that will be contextually
2998/// converted to bool.
2999void Sema::AddBuiltinCandidate(QualType ResultTy, QualType *ParamTys,
3000                               Expr **Args, unsigned NumArgs,
3001                               OverloadCandidateSet& CandidateSet,
3002                               bool IsAssignmentOperator,
3003                               unsigned NumContextualBoolArguments) {
3004  // Overload resolution is always an unevaluated context.
3005  EnterExpressionEvaluationContext Unevaluated(*this, Action::Unevaluated);
3006
3007  // Add this candidate
3008  CandidateSet.push_back(OverloadCandidate());
3009  OverloadCandidate& Candidate = CandidateSet.back();
3010  Candidate.Function = 0;
3011  Candidate.IsSurrogate = false;
3012  Candidate.IgnoreObjectArgument = false;
3013  Candidate.BuiltinTypes.ResultTy = ResultTy;
3014  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3015    Candidate.BuiltinTypes.ParamTypes[ArgIdx] = ParamTys[ArgIdx];
3016
3017  // Determine the implicit conversion sequences for each of the
3018  // arguments.
3019  Candidate.Viable = true;
3020  Candidate.Conversions.resize(NumArgs);
3021  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx) {
3022    // C++ [over.match.oper]p4:
3023    //   For the built-in assignment operators, conversions of the
3024    //   left operand are restricted as follows:
3025    //     -- no temporaries are introduced to hold the left operand, and
3026    //     -- no user-defined conversions are applied to the left
3027    //        operand to achieve a type match with the left-most
3028    //        parameter of a built-in candidate.
3029    //
3030    // We block these conversions by turning off user-defined
3031    // conversions, since that is the only way that initialization of
3032    // a reference to a non-class type can occur from something that
3033    // is not of the same type.
3034    if (ArgIdx < NumContextualBoolArguments) {
3035      assert(ParamTys[ArgIdx] == Context.BoolTy &&
3036             "Contextual conversion to bool requires bool type");
3037      Candidate.Conversions[ArgIdx] = TryContextuallyConvertToBool(Args[ArgIdx]);
3038    } else {
3039      Candidate.Conversions[ArgIdx]
3040        = TryCopyInitialization(Args[ArgIdx], ParamTys[ArgIdx],
3041                                ArgIdx == 0 && IsAssignmentOperator,
3042                                /*ForceRValue=*/false,
3043                                /*InOverloadResolution=*/false);
3044    }
3045    if (Candidate.Conversions[ArgIdx].ConversionKind
3046        == ImplicitConversionSequence::BadConversion) {
3047      Candidate.Viable = false;
3048      break;
3049    }
3050  }
3051}
3052
3053/// BuiltinCandidateTypeSet - A set of types that will be used for the
3054/// candidate operator functions for built-in operators (C++
3055/// [over.built]). The types are separated into pointer types and
3056/// enumeration types.
3057class BuiltinCandidateTypeSet  {
3058  /// TypeSet - A set of types.
3059  typedef llvm::SmallPtrSet<QualType, 8> TypeSet;
3060
3061  /// PointerTypes - The set of pointer types that will be used in the
3062  /// built-in candidates.
3063  TypeSet PointerTypes;
3064
3065  /// MemberPointerTypes - The set of member pointer types that will be
3066  /// used in the built-in candidates.
3067  TypeSet MemberPointerTypes;
3068
3069  /// EnumerationTypes - The set of enumeration types that will be
3070  /// used in the built-in candidates.
3071  TypeSet EnumerationTypes;
3072
3073  /// Sema - The semantic analysis instance where we are building the
3074  /// candidate type set.
3075  Sema &SemaRef;
3076
3077  /// Context - The AST context in which we will build the type sets.
3078  ASTContext &Context;
3079
3080  bool AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
3081                                               const Qualifiers &VisibleQuals);
3082  bool AddMemberPointerWithMoreQualifiedTypeVariants(QualType Ty);
3083
3084public:
3085  /// iterator - Iterates through the types that are part of the set.
3086  typedef TypeSet::iterator iterator;
3087
3088  BuiltinCandidateTypeSet(Sema &SemaRef)
3089    : SemaRef(SemaRef), Context(SemaRef.Context) { }
3090
3091  void AddTypesConvertedFrom(QualType Ty,
3092                             SourceLocation Loc,
3093                             bool AllowUserConversions,
3094                             bool AllowExplicitConversions,
3095                             const Qualifiers &VisibleTypeConversionsQuals);
3096
3097  /// pointer_begin - First pointer type found;
3098  iterator pointer_begin() { return PointerTypes.begin(); }
3099
3100  /// pointer_end - Past the last pointer type found;
3101  iterator pointer_end() { return PointerTypes.end(); }
3102
3103  /// member_pointer_begin - First member pointer type found;
3104  iterator member_pointer_begin() { return MemberPointerTypes.begin(); }
3105
3106  /// member_pointer_end - Past the last member pointer type found;
3107  iterator member_pointer_end() { return MemberPointerTypes.end(); }
3108
3109  /// enumeration_begin - First enumeration type found;
3110  iterator enumeration_begin() { return EnumerationTypes.begin(); }
3111
3112  /// enumeration_end - Past the last enumeration type found;
3113  iterator enumeration_end() { return EnumerationTypes.end(); }
3114};
3115
3116/// AddPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty to
3117/// the set of pointer types along with any more-qualified variants of
3118/// that type. For example, if @p Ty is "int const *", this routine
3119/// will add "int const *", "int const volatile *", "int const
3120/// restrict *", and "int const volatile restrict *" to the set of
3121/// pointer types. Returns true if the add of @p Ty itself succeeded,
3122/// false otherwise.
3123///
3124/// FIXME: what to do about extended qualifiers?
3125bool
3126BuiltinCandidateTypeSet::AddPointerWithMoreQualifiedTypeVariants(QualType Ty,
3127                                             const Qualifiers &VisibleQuals) {
3128
3129  // Insert this type.
3130  if (!PointerTypes.insert(Ty))
3131    return false;
3132
3133  const PointerType *PointerTy = Ty->getAs<PointerType>();
3134  assert(PointerTy && "type was not a pointer type!");
3135
3136  QualType PointeeTy = PointerTy->getPointeeType();
3137  // Don't add qualified variants of arrays. For one, they're not allowed
3138  // (the qualifier would sink to the element type), and for another, the
3139  // only overload situation where it matters is subscript or pointer +- int,
3140  // and those shouldn't have qualifier variants anyway.
3141  if (PointeeTy->isArrayType())
3142    return true;
3143  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
3144  if (const ConstantArrayType *Array =Context.getAsConstantArrayType(PointeeTy))
3145    BaseCVR = Array->getElementType().getCVRQualifiers();
3146  bool hasVolatile = VisibleQuals.hasVolatile();
3147  bool hasRestrict = VisibleQuals.hasRestrict();
3148
3149  // Iterate through all strict supersets of BaseCVR.
3150  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
3151    if ((CVR | BaseCVR) != CVR) continue;
3152    // Skip over Volatile/Restrict if no Volatile/Restrict found anywhere
3153    // in the types.
3154    if ((CVR & Qualifiers::Volatile) && !hasVolatile) continue;
3155    if ((CVR & Qualifiers::Restrict) && !hasRestrict) continue;
3156    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
3157    PointerTypes.insert(Context.getPointerType(QPointeeTy));
3158  }
3159
3160  return true;
3161}
3162
3163/// AddMemberPointerWithMoreQualifiedTypeVariants - Add the pointer type @p Ty
3164/// to the set of pointer types along with any more-qualified variants of
3165/// that type. For example, if @p Ty is "int const *", this routine
3166/// will add "int const *", "int const volatile *", "int const
3167/// restrict *", and "int const volatile restrict *" to the set of
3168/// pointer types. Returns true if the add of @p Ty itself succeeded,
3169/// false otherwise.
3170///
3171/// FIXME: what to do about extended qualifiers?
3172bool
3173BuiltinCandidateTypeSet::AddMemberPointerWithMoreQualifiedTypeVariants(
3174    QualType Ty) {
3175  // Insert this type.
3176  if (!MemberPointerTypes.insert(Ty))
3177    return false;
3178
3179  const MemberPointerType *PointerTy = Ty->getAs<MemberPointerType>();
3180  assert(PointerTy && "type was not a member pointer type!");
3181
3182  QualType PointeeTy = PointerTy->getPointeeType();
3183  // Don't add qualified variants of arrays. For one, they're not allowed
3184  // (the qualifier would sink to the element type), and for another, the
3185  // only overload situation where it matters is subscript or pointer +- int,
3186  // and those shouldn't have qualifier variants anyway.
3187  if (PointeeTy->isArrayType())
3188    return true;
3189  const Type *ClassTy = PointerTy->getClass();
3190
3191  // Iterate through all strict supersets of the pointee type's CVR
3192  // qualifiers.
3193  unsigned BaseCVR = PointeeTy.getCVRQualifiers();
3194  for (unsigned CVR = BaseCVR+1; CVR <= Qualifiers::CVRMask; ++CVR) {
3195    if ((CVR | BaseCVR) != CVR) continue;
3196
3197    QualType QPointeeTy = Context.getCVRQualifiedType(PointeeTy, CVR);
3198    MemberPointerTypes.insert(Context.getMemberPointerType(QPointeeTy, ClassTy));
3199  }
3200
3201  return true;
3202}
3203
3204/// AddTypesConvertedFrom - Add each of the types to which the type @p
3205/// Ty can be implicit converted to the given set of @p Types. We're
3206/// primarily interested in pointer types and enumeration types. We also
3207/// take member pointer types, for the conditional operator.
3208/// AllowUserConversions is true if we should look at the conversion
3209/// functions of a class type, and AllowExplicitConversions if we
3210/// should also include the explicit conversion functions of a class
3211/// type.
3212void
3213BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty,
3214                                               SourceLocation Loc,
3215                                               bool AllowUserConversions,
3216                                               bool AllowExplicitConversions,
3217                                               const Qualifiers &VisibleQuals) {
3218  // Only deal with canonical types.
3219  Ty = Context.getCanonicalType(Ty);
3220
3221  // Look through reference types; they aren't part of the type of an
3222  // expression for the purposes of conversions.
3223  if (const ReferenceType *RefTy = Ty->getAs<ReferenceType>())
3224    Ty = RefTy->getPointeeType();
3225
3226  // We don't care about qualifiers on the type.
3227  Ty = Ty.getLocalUnqualifiedType();
3228
3229  // If we're dealing with an array type, decay to the pointer.
3230  if (Ty->isArrayType())
3231    Ty = SemaRef.Context.getArrayDecayedType(Ty);
3232
3233  if (const PointerType *PointerTy = Ty->getAs<PointerType>()) {
3234    QualType PointeeTy = PointerTy->getPointeeType();
3235
3236    // Insert our type, and its more-qualified variants, into the set
3237    // of types.
3238    if (!AddPointerWithMoreQualifiedTypeVariants(Ty, VisibleQuals))
3239      return;
3240  } else if (Ty->isMemberPointerType()) {
3241    // Member pointers are far easier, since the pointee can't be converted.
3242    if (!AddMemberPointerWithMoreQualifiedTypeVariants(Ty))
3243      return;
3244  } else if (Ty->isEnumeralType()) {
3245    EnumerationTypes.insert(Ty);
3246  } else if (AllowUserConversions) {
3247    if (const RecordType *TyRec = Ty->getAs<RecordType>()) {
3248      if (SemaRef.RequireCompleteType(Loc, Ty, 0)) {
3249        // No conversion functions in incomplete types.
3250        return;
3251      }
3252
3253      CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
3254      const UnresolvedSet *Conversions
3255        = ClassDecl->getVisibleConversionFunctions();
3256      for (UnresolvedSet::iterator I = Conversions->begin(),
3257             E = Conversions->end(); I != E; ++I) {
3258
3259        // Skip conversion function templates; they don't tell us anything
3260        // about which builtin types we can convert to.
3261        if (isa<FunctionTemplateDecl>(*I))
3262          continue;
3263
3264        CXXConversionDecl *Conv = cast<CXXConversionDecl>(*I);
3265        if (AllowExplicitConversions || !Conv->isExplicit()) {
3266          AddTypesConvertedFrom(Conv->getConversionType(), Loc, false, false,
3267                                VisibleQuals);
3268        }
3269      }
3270    }
3271  }
3272}
3273
3274/// \brief Helper function for AddBuiltinOperatorCandidates() that adds
3275/// the volatile- and non-volatile-qualified assignment operators for the
3276/// given type to the candidate set.
3277static void AddBuiltinAssignmentOperatorCandidates(Sema &S,
3278                                                   QualType T,
3279                                                   Expr **Args,
3280                                                   unsigned NumArgs,
3281                                    OverloadCandidateSet &CandidateSet) {
3282  QualType ParamTypes[2];
3283
3284  // T& operator=(T&, T)
3285  ParamTypes[0] = S.Context.getLValueReferenceType(T);
3286  ParamTypes[1] = T;
3287  S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3288                        /*IsAssignmentOperator=*/true);
3289
3290  if (!S.Context.getCanonicalType(T).isVolatileQualified()) {
3291    // volatile T& operator=(volatile T&, T)
3292    ParamTypes[0]
3293      = S.Context.getLValueReferenceType(S.Context.getVolatileType(T));
3294    ParamTypes[1] = T;
3295    S.AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3296                          /*IsAssignmentOperator=*/true);
3297  }
3298}
3299
3300/// CollectVRQualifiers - This routine returns Volatile/Restrict qualifiers,
3301/// if any, found in visible type conversion functions found in ArgExpr's type.
3302static  Qualifiers CollectVRQualifiers(ASTContext &Context, Expr* ArgExpr) {
3303    Qualifiers VRQuals;
3304    const RecordType *TyRec;
3305    if (const MemberPointerType *RHSMPType =
3306        ArgExpr->getType()->getAs<MemberPointerType>())
3307      TyRec = cast<RecordType>(RHSMPType->getClass());
3308    else
3309      TyRec = ArgExpr->getType()->getAs<RecordType>();
3310    if (!TyRec) {
3311      // Just to be safe, assume the worst case.
3312      VRQuals.addVolatile();
3313      VRQuals.addRestrict();
3314      return VRQuals;
3315    }
3316
3317    CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(TyRec->getDecl());
3318    const UnresolvedSet *Conversions =
3319      ClassDecl->getVisibleConversionFunctions();
3320
3321    for (UnresolvedSet::iterator I = Conversions->begin(),
3322           E = Conversions->end(); I != E; ++I) {
3323      if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(*I)) {
3324        QualType CanTy = Context.getCanonicalType(Conv->getConversionType());
3325        if (const ReferenceType *ResTypeRef = CanTy->getAs<ReferenceType>())
3326          CanTy = ResTypeRef->getPointeeType();
3327        // Need to go down the pointer/mempointer chain and add qualifiers
3328        // as see them.
3329        bool done = false;
3330        while (!done) {
3331          if (const PointerType *ResTypePtr = CanTy->getAs<PointerType>())
3332            CanTy = ResTypePtr->getPointeeType();
3333          else if (const MemberPointerType *ResTypeMPtr =
3334                CanTy->getAs<MemberPointerType>())
3335            CanTy = ResTypeMPtr->getPointeeType();
3336          else
3337            done = true;
3338          if (CanTy.isVolatileQualified())
3339            VRQuals.addVolatile();
3340          if (CanTy.isRestrictQualified())
3341            VRQuals.addRestrict();
3342          if (VRQuals.hasRestrict() && VRQuals.hasVolatile())
3343            return VRQuals;
3344        }
3345      }
3346    }
3347    return VRQuals;
3348}
3349
3350/// AddBuiltinOperatorCandidates - Add the appropriate built-in
3351/// operator overloads to the candidate set (C++ [over.built]), based
3352/// on the operator @p Op and the arguments given. For example, if the
3353/// operator is a binary '+', this routine might add "int
3354/// operator+(int, int)" to cover integer addition.
3355void
3356Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
3357                                   SourceLocation OpLoc,
3358                                   Expr **Args, unsigned NumArgs,
3359                                   OverloadCandidateSet& CandidateSet) {
3360  // The set of "promoted arithmetic types", which are the arithmetic
3361  // types are that preserved by promotion (C++ [over.built]p2). Note
3362  // that the first few of these types are the promoted integral
3363  // types; these types need to be first.
3364  // FIXME: What about complex?
3365  const unsigned FirstIntegralType = 0;
3366  const unsigned LastIntegralType = 13;
3367  const unsigned FirstPromotedIntegralType = 7,
3368                 LastPromotedIntegralType = 13;
3369  const unsigned FirstPromotedArithmeticType = 7,
3370                 LastPromotedArithmeticType = 16;
3371  const unsigned NumArithmeticTypes = 16;
3372  QualType ArithmeticTypes[NumArithmeticTypes] = {
3373    Context.BoolTy, Context.CharTy, Context.WCharTy,
3374// FIXME:   Context.Char16Ty, Context.Char32Ty,
3375    Context.SignedCharTy, Context.ShortTy,
3376    Context.UnsignedCharTy, Context.UnsignedShortTy,
3377    Context.IntTy, Context.LongTy, Context.LongLongTy,
3378    Context.UnsignedIntTy, Context.UnsignedLongTy, Context.UnsignedLongLongTy,
3379    Context.FloatTy, Context.DoubleTy, Context.LongDoubleTy
3380  };
3381  assert(ArithmeticTypes[FirstPromotedIntegralType] == Context.IntTy &&
3382         "Invalid first promoted integral type");
3383  assert(ArithmeticTypes[LastPromotedIntegralType - 1]
3384           == Context.UnsignedLongLongTy &&
3385         "Invalid last promoted integral type");
3386  assert(ArithmeticTypes[FirstPromotedArithmeticType] == Context.IntTy &&
3387         "Invalid first promoted arithmetic type");
3388  assert(ArithmeticTypes[LastPromotedArithmeticType - 1]
3389            == Context.LongDoubleTy &&
3390         "Invalid last promoted arithmetic type");
3391
3392  // Find all of the types that the arguments can convert to, but only
3393  // if the operator we're looking at has built-in operator candidates
3394  // that make use of these types.
3395  Qualifiers VisibleTypeConversionsQuals;
3396  VisibleTypeConversionsQuals.addConst();
3397  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3398    VisibleTypeConversionsQuals += CollectVRQualifiers(Context, Args[ArgIdx]);
3399
3400  BuiltinCandidateTypeSet CandidateTypes(*this);
3401  if (Op == OO_Less || Op == OO_Greater || Op == OO_LessEqual ||
3402      Op == OO_GreaterEqual || Op == OO_EqualEqual || Op == OO_ExclaimEqual ||
3403      Op == OO_Plus || (Op == OO_Minus && NumArgs == 2) || Op == OO_Equal ||
3404      Op == OO_PlusEqual || Op == OO_MinusEqual || Op == OO_Subscript ||
3405      Op == OO_ArrowStar || Op == OO_PlusPlus || Op == OO_MinusMinus ||
3406      (Op == OO_Star && NumArgs == 1) || Op == OO_Conditional) {
3407    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
3408      CandidateTypes.AddTypesConvertedFrom(Args[ArgIdx]->getType(),
3409                                           OpLoc,
3410                                           true,
3411                                           (Op == OO_Exclaim ||
3412                                            Op == OO_AmpAmp ||
3413                                            Op == OO_PipePipe),
3414                                           VisibleTypeConversionsQuals);
3415  }
3416
3417  bool isComparison = false;
3418  switch (Op) {
3419  case OO_None:
3420  case NUM_OVERLOADED_OPERATORS:
3421    assert(false && "Expected an overloaded operator");
3422    break;
3423
3424  case OO_Star: // '*' is either unary or binary
3425    if (NumArgs == 1)
3426      goto UnaryStar;
3427    else
3428      goto BinaryStar;
3429    break;
3430
3431  case OO_Plus: // '+' is either unary or binary
3432    if (NumArgs == 1)
3433      goto UnaryPlus;
3434    else
3435      goto BinaryPlus;
3436    break;
3437
3438  case OO_Minus: // '-' is either unary or binary
3439    if (NumArgs == 1)
3440      goto UnaryMinus;
3441    else
3442      goto BinaryMinus;
3443    break;
3444
3445  case OO_Amp: // '&' is either unary or binary
3446    if (NumArgs == 1)
3447      goto UnaryAmp;
3448    else
3449      goto BinaryAmp;
3450
3451  case OO_PlusPlus:
3452  case OO_MinusMinus:
3453    // C++ [over.built]p3:
3454    //
3455    //   For every pair (T, VQ), where T is an arithmetic type, and VQ
3456    //   is either volatile or empty, there exist candidate operator
3457    //   functions of the form
3458    //
3459    //       VQ T&      operator++(VQ T&);
3460    //       T          operator++(VQ T&, int);
3461    //
3462    // C++ [over.built]p4:
3463    //
3464    //   For every pair (T, VQ), where T is an arithmetic type other
3465    //   than bool, and VQ is either volatile or empty, there exist
3466    //   candidate operator functions of the form
3467    //
3468    //       VQ T&      operator--(VQ T&);
3469    //       T          operator--(VQ T&, int);
3470    for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1);
3471         Arith < NumArithmeticTypes; ++Arith) {
3472      QualType ArithTy = ArithmeticTypes[Arith];
3473      QualType ParamTypes[2]
3474        = { Context.getLValueReferenceType(ArithTy), Context.IntTy };
3475
3476      // Non-volatile version.
3477      if (NumArgs == 1)
3478        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3479      else
3480        AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
3481      // heuristic to reduce number of builtin candidates in the set.
3482      // Add volatile version only if there are conversions to a volatile type.
3483      if (VisibleTypeConversionsQuals.hasVolatile()) {
3484        // Volatile version
3485        ParamTypes[0]
3486          = Context.getLValueReferenceType(Context.getVolatileType(ArithTy));
3487        if (NumArgs == 1)
3488          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3489        else
3490          AddBuiltinCandidate(ArithTy, ParamTypes, Args, 2, CandidateSet);
3491      }
3492    }
3493
3494    // C++ [over.built]p5:
3495    //
3496    //   For every pair (T, VQ), where T is a cv-qualified or
3497    //   cv-unqualified object type, and VQ is either volatile or
3498    //   empty, there exist candidate operator functions of the form
3499    //
3500    //       T*VQ&      operator++(T*VQ&);
3501    //       T*VQ&      operator--(T*VQ&);
3502    //       T*         operator++(T*VQ&, int);
3503    //       T*         operator--(T*VQ&, int);
3504    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3505         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3506      // Skip pointer types that aren't pointers to object types.
3507      if (!(*Ptr)->getAs<PointerType>()->getPointeeType()->isObjectType())
3508        continue;
3509
3510      QualType ParamTypes[2] = {
3511        Context.getLValueReferenceType(*Ptr), Context.IntTy
3512      };
3513
3514      // Without volatile
3515      if (NumArgs == 1)
3516        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3517      else
3518        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3519
3520      if (!Context.getCanonicalType(*Ptr).isVolatileQualified() &&
3521          VisibleTypeConversionsQuals.hasVolatile()) {
3522        // With volatile
3523        ParamTypes[0]
3524          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
3525        if (NumArgs == 1)
3526          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 1, CandidateSet);
3527        else
3528          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3529      }
3530    }
3531    break;
3532
3533  UnaryStar:
3534    // C++ [over.built]p6:
3535    //   For every cv-qualified or cv-unqualified object type T, there
3536    //   exist candidate operator functions of the form
3537    //
3538    //       T&         operator*(T*);
3539    //
3540    // C++ [over.built]p7:
3541    //   For every function type T, there exist candidate operator
3542    //   functions of the form
3543    //       T&         operator*(T*);
3544    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3545         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3546      QualType ParamTy = *Ptr;
3547      QualType PointeeTy = ParamTy->getAs<PointerType>()->getPointeeType();
3548      AddBuiltinCandidate(Context.getLValueReferenceType(PointeeTy),
3549                          &ParamTy, Args, 1, CandidateSet);
3550    }
3551    break;
3552
3553  UnaryPlus:
3554    // C++ [over.built]p8:
3555    //   For every type T, there exist candidate operator functions of
3556    //   the form
3557    //
3558    //       T*         operator+(T*);
3559    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3560         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3561      QualType ParamTy = *Ptr;
3562      AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet);
3563    }
3564
3565    // Fall through
3566
3567  UnaryMinus:
3568    // C++ [over.built]p9:
3569    //  For every promoted arithmetic type T, there exist candidate
3570    //  operator functions of the form
3571    //
3572    //       T         operator+(T);
3573    //       T         operator-(T);
3574    for (unsigned Arith = FirstPromotedArithmeticType;
3575         Arith < LastPromotedArithmeticType; ++Arith) {
3576      QualType ArithTy = ArithmeticTypes[Arith];
3577      AddBuiltinCandidate(ArithTy, &ArithTy, Args, 1, CandidateSet);
3578    }
3579    break;
3580
3581  case OO_Tilde:
3582    // C++ [over.built]p10:
3583    //   For every promoted integral type T, there exist candidate
3584    //   operator functions of the form
3585    //
3586    //        T         operator~(T);
3587    for (unsigned Int = FirstPromotedIntegralType;
3588         Int < LastPromotedIntegralType; ++Int) {
3589      QualType IntTy = ArithmeticTypes[Int];
3590      AddBuiltinCandidate(IntTy, &IntTy, Args, 1, CandidateSet);
3591    }
3592    break;
3593
3594  case OO_New:
3595  case OO_Delete:
3596  case OO_Array_New:
3597  case OO_Array_Delete:
3598  case OO_Call:
3599    assert(false && "Special operators don't use AddBuiltinOperatorCandidates");
3600    break;
3601
3602  case OO_Comma:
3603  UnaryAmp:
3604  case OO_Arrow:
3605    // C++ [over.match.oper]p3:
3606    //   -- For the operator ',', the unary operator '&', or the
3607    //      operator '->', the built-in candidates set is empty.
3608    break;
3609
3610  case OO_EqualEqual:
3611  case OO_ExclaimEqual:
3612    // C++ [over.match.oper]p16:
3613    //   For every pointer to member type T, there exist candidate operator
3614    //   functions of the form
3615    //
3616    //        bool operator==(T,T);
3617    //        bool operator!=(T,T);
3618    for (BuiltinCandidateTypeSet::iterator
3619           MemPtr = CandidateTypes.member_pointer_begin(),
3620           MemPtrEnd = CandidateTypes.member_pointer_end();
3621         MemPtr != MemPtrEnd;
3622         ++MemPtr) {
3623      QualType ParamTypes[2] = { *MemPtr, *MemPtr };
3624      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3625    }
3626
3627    // Fall through
3628
3629  case OO_Less:
3630  case OO_Greater:
3631  case OO_LessEqual:
3632  case OO_GreaterEqual:
3633    // C++ [over.built]p15:
3634    //
3635    //   For every pointer or enumeration type T, there exist
3636    //   candidate operator functions of the form
3637    //
3638    //        bool       operator<(T, T);
3639    //        bool       operator>(T, T);
3640    //        bool       operator<=(T, T);
3641    //        bool       operator>=(T, T);
3642    //        bool       operator==(T, T);
3643    //        bool       operator!=(T, T);
3644    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3645         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3646      QualType ParamTypes[2] = { *Ptr, *Ptr };
3647      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3648    }
3649    for (BuiltinCandidateTypeSet::iterator Enum
3650           = CandidateTypes.enumeration_begin();
3651         Enum != CandidateTypes.enumeration_end(); ++Enum) {
3652      QualType ParamTypes[2] = { *Enum, *Enum };
3653      AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet);
3654    }
3655
3656    // Fall through.
3657    isComparison = true;
3658
3659  BinaryPlus:
3660  BinaryMinus:
3661    if (!isComparison) {
3662      // We didn't fall through, so we must have OO_Plus or OO_Minus.
3663
3664      // C++ [over.built]p13:
3665      //
3666      //   For every cv-qualified or cv-unqualified object type T
3667      //   there exist candidate operator functions of the form
3668      //
3669      //      T*         operator+(T*, ptrdiff_t);
3670      //      T&         operator[](T*, ptrdiff_t);    [BELOW]
3671      //      T*         operator-(T*, ptrdiff_t);
3672      //      T*         operator+(ptrdiff_t, T*);
3673      //      T&         operator[](ptrdiff_t, T*);    [BELOW]
3674      //
3675      // C++ [over.built]p14:
3676      //
3677      //   For every T, where T is a pointer to object type, there
3678      //   exist candidate operator functions of the form
3679      //
3680      //      ptrdiff_t  operator-(T, T);
3681      for (BuiltinCandidateTypeSet::iterator Ptr
3682             = CandidateTypes.pointer_begin();
3683           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3684        QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
3685
3686        // operator+(T*, ptrdiff_t) or operator-(T*, ptrdiff_t)
3687        AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3688
3689        if (Op == OO_Plus) {
3690          // T* operator+(ptrdiff_t, T*);
3691          ParamTypes[0] = ParamTypes[1];
3692          ParamTypes[1] = *Ptr;
3693          AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
3694        } else {
3695          // ptrdiff_t operator-(T, T);
3696          ParamTypes[1] = *Ptr;
3697          AddBuiltinCandidate(Context.getPointerDiffType(), ParamTypes,
3698                              Args, 2, CandidateSet);
3699        }
3700      }
3701    }
3702    // Fall through
3703
3704  case OO_Slash:
3705  BinaryStar:
3706  Conditional:
3707    // C++ [over.built]p12:
3708    //
3709    //   For every pair of promoted arithmetic types L and R, there
3710    //   exist candidate operator functions of the form
3711    //
3712    //        LR         operator*(L, R);
3713    //        LR         operator/(L, R);
3714    //        LR         operator+(L, R);
3715    //        LR         operator-(L, R);
3716    //        bool       operator<(L, R);
3717    //        bool       operator>(L, R);
3718    //        bool       operator<=(L, R);
3719    //        bool       operator>=(L, R);
3720    //        bool       operator==(L, R);
3721    //        bool       operator!=(L, R);
3722    //
3723    //   where LR is the result of the usual arithmetic conversions
3724    //   between types L and R.
3725    //
3726    // C++ [over.built]p24:
3727    //
3728    //   For every pair of promoted arithmetic types L and R, there exist
3729    //   candidate operator functions of the form
3730    //
3731    //        LR       operator?(bool, L, R);
3732    //
3733    //   where LR is the result of the usual arithmetic conversions
3734    //   between types L and R.
3735    // Our candidates ignore the first parameter.
3736    for (unsigned Left = FirstPromotedArithmeticType;
3737         Left < LastPromotedArithmeticType; ++Left) {
3738      for (unsigned Right = FirstPromotedArithmeticType;
3739           Right < LastPromotedArithmeticType; ++Right) {
3740        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
3741        QualType Result
3742          = isComparison
3743          ? Context.BoolTy
3744          : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
3745        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
3746      }
3747    }
3748    break;
3749
3750  case OO_Percent:
3751  BinaryAmp:
3752  case OO_Caret:
3753  case OO_Pipe:
3754  case OO_LessLess:
3755  case OO_GreaterGreater:
3756    // C++ [over.built]p17:
3757    //
3758    //   For every pair of promoted integral types L and R, there
3759    //   exist candidate operator functions of the form
3760    //
3761    //      LR         operator%(L, R);
3762    //      LR         operator&(L, R);
3763    //      LR         operator^(L, R);
3764    //      LR         operator|(L, R);
3765    //      L          operator<<(L, R);
3766    //      L          operator>>(L, R);
3767    //
3768    //   where LR is the result of the usual arithmetic conversions
3769    //   between types L and R.
3770    for (unsigned Left = FirstPromotedIntegralType;
3771         Left < LastPromotedIntegralType; ++Left) {
3772      for (unsigned Right = FirstPromotedIntegralType;
3773           Right < LastPromotedIntegralType; ++Right) {
3774        QualType LandR[2] = { ArithmeticTypes[Left], ArithmeticTypes[Right] };
3775        QualType Result = (Op == OO_LessLess || Op == OO_GreaterGreater)
3776            ? LandR[0]
3777            : Context.UsualArithmeticConversionsType(LandR[0], LandR[1]);
3778        AddBuiltinCandidate(Result, LandR, Args, 2, CandidateSet);
3779      }
3780    }
3781    break;
3782
3783  case OO_Equal:
3784    // C++ [over.built]p20:
3785    //
3786    //   For every pair (T, VQ), where T is an enumeration or
3787    //   pointer to member type and VQ is either volatile or
3788    //   empty, there exist candidate operator functions of the form
3789    //
3790    //        VQ T&      operator=(VQ T&, T);
3791    for (BuiltinCandidateTypeSet::iterator
3792           Enum = CandidateTypes.enumeration_begin(),
3793           EnumEnd = CandidateTypes.enumeration_end();
3794         Enum != EnumEnd; ++Enum)
3795      AddBuiltinAssignmentOperatorCandidates(*this, *Enum, Args, 2,
3796                                             CandidateSet);
3797    for (BuiltinCandidateTypeSet::iterator
3798           MemPtr = CandidateTypes.member_pointer_begin(),
3799         MemPtrEnd = CandidateTypes.member_pointer_end();
3800         MemPtr != MemPtrEnd; ++MemPtr)
3801      AddBuiltinAssignmentOperatorCandidates(*this, *MemPtr, Args, 2,
3802                                             CandidateSet);
3803      // Fall through.
3804
3805  case OO_PlusEqual:
3806  case OO_MinusEqual:
3807    // C++ [over.built]p19:
3808    //
3809    //   For every pair (T, VQ), where T is any type and VQ is either
3810    //   volatile or empty, there exist candidate operator functions
3811    //   of the form
3812    //
3813    //        T*VQ&      operator=(T*VQ&, T*);
3814    //
3815    // C++ [over.built]p21:
3816    //
3817    //   For every pair (T, VQ), where T is a cv-qualified or
3818    //   cv-unqualified object type and VQ is either volatile or
3819    //   empty, there exist candidate operator functions of the form
3820    //
3821    //        T*VQ&      operator+=(T*VQ&, ptrdiff_t);
3822    //        T*VQ&      operator-=(T*VQ&, ptrdiff_t);
3823    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3824         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3825      QualType ParamTypes[2];
3826      ParamTypes[1] = (Op == OO_Equal)? *Ptr : Context.getPointerDiffType();
3827
3828      // non-volatile version
3829      ParamTypes[0] = Context.getLValueReferenceType(*Ptr);
3830      AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3831                          /*IsAssigmentOperator=*/Op == OO_Equal);
3832
3833      if (!Context.getCanonicalType(*Ptr).isVolatileQualified() &&
3834          VisibleTypeConversionsQuals.hasVolatile()) {
3835        // volatile version
3836        ParamTypes[0]
3837          = Context.getLValueReferenceType(Context.getVolatileType(*Ptr));
3838        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3839                            /*IsAssigmentOperator=*/Op == OO_Equal);
3840      }
3841    }
3842    // Fall through.
3843
3844  case OO_StarEqual:
3845  case OO_SlashEqual:
3846    // C++ [over.built]p18:
3847    //
3848    //   For every triple (L, VQ, R), where L is an arithmetic type,
3849    //   VQ is either volatile or empty, and R is a promoted
3850    //   arithmetic type, there exist candidate operator functions of
3851    //   the form
3852    //
3853    //        VQ L&      operator=(VQ L&, R);
3854    //        VQ L&      operator*=(VQ L&, R);
3855    //        VQ L&      operator/=(VQ L&, R);
3856    //        VQ L&      operator+=(VQ L&, R);
3857    //        VQ L&      operator-=(VQ L&, R);
3858    for (unsigned Left = 0; Left < NumArithmeticTypes; ++Left) {
3859      for (unsigned Right = FirstPromotedArithmeticType;
3860           Right < LastPromotedArithmeticType; ++Right) {
3861        QualType ParamTypes[2];
3862        ParamTypes[1] = ArithmeticTypes[Right];
3863
3864        // Add this built-in operator as a candidate (VQ is empty).
3865        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
3866        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3867                            /*IsAssigmentOperator=*/Op == OO_Equal);
3868
3869        // Add this built-in operator as a candidate (VQ is 'volatile').
3870        if (VisibleTypeConversionsQuals.hasVolatile()) {
3871          ParamTypes[0] = Context.getVolatileType(ArithmeticTypes[Left]);
3872          ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
3873          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet,
3874                              /*IsAssigmentOperator=*/Op == OO_Equal);
3875        }
3876      }
3877    }
3878    break;
3879
3880  case OO_PercentEqual:
3881  case OO_LessLessEqual:
3882  case OO_GreaterGreaterEqual:
3883  case OO_AmpEqual:
3884  case OO_CaretEqual:
3885  case OO_PipeEqual:
3886    // C++ [over.built]p22:
3887    //
3888    //   For every triple (L, VQ, R), where L is an integral type, VQ
3889    //   is either volatile or empty, and R is a promoted integral
3890    //   type, there exist candidate operator functions of the form
3891    //
3892    //        VQ L&       operator%=(VQ L&, R);
3893    //        VQ L&       operator<<=(VQ L&, R);
3894    //        VQ L&       operator>>=(VQ L&, R);
3895    //        VQ L&       operator&=(VQ L&, R);
3896    //        VQ L&       operator^=(VQ L&, R);
3897    //        VQ L&       operator|=(VQ L&, R);
3898    for (unsigned Left = FirstIntegralType; Left < LastIntegralType; ++Left) {
3899      for (unsigned Right = FirstPromotedIntegralType;
3900           Right < LastPromotedIntegralType; ++Right) {
3901        QualType ParamTypes[2];
3902        ParamTypes[1] = ArithmeticTypes[Right];
3903
3904        // Add this built-in operator as a candidate (VQ is empty).
3905        ParamTypes[0] = Context.getLValueReferenceType(ArithmeticTypes[Left]);
3906        AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
3907        if (VisibleTypeConversionsQuals.hasVolatile()) {
3908          // Add this built-in operator as a candidate (VQ is 'volatile').
3909          ParamTypes[0] = ArithmeticTypes[Left];
3910          ParamTypes[0] = Context.getVolatileType(ParamTypes[0]);
3911          ParamTypes[0] = Context.getLValueReferenceType(ParamTypes[0]);
3912          AddBuiltinCandidate(ParamTypes[0], ParamTypes, Args, 2, CandidateSet);
3913        }
3914      }
3915    }
3916    break;
3917
3918  case OO_Exclaim: {
3919    // C++ [over.operator]p23:
3920    //
3921    //   There also exist candidate operator functions of the form
3922    //
3923    //        bool        operator!(bool);
3924    //        bool        operator&&(bool, bool);     [BELOW]
3925    //        bool        operator||(bool, bool);     [BELOW]
3926    QualType ParamTy = Context.BoolTy;
3927    AddBuiltinCandidate(ParamTy, &ParamTy, Args, 1, CandidateSet,
3928                        /*IsAssignmentOperator=*/false,
3929                        /*NumContextualBoolArguments=*/1);
3930    break;
3931  }
3932
3933  case OO_AmpAmp:
3934  case OO_PipePipe: {
3935    // C++ [over.operator]p23:
3936    //
3937    //   There also exist candidate operator functions of the form
3938    //
3939    //        bool        operator!(bool);            [ABOVE]
3940    //        bool        operator&&(bool, bool);
3941    //        bool        operator||(bool, bool);
3942    QualType ParamTypes[2] = { Context.BoolTy, Context.BoolTy };
3943    AddBuiltinCandidate(Context.BoolTy, ParamTypes, Args, 2, CandidateSet,
3944                        /*IsAssignmentOperator=*/false,
3945                        /*NumContextualBoolArguments=*/2);
3946    break;
3947  }
3948
3949  case OO_Subscript:
3950    // C++ [over.built]p13:
3951    //
3952    //   For every cv-qualified or cv-unqualified object type T there
3953    //   exist candidate operator functions of the form
3954    //
3955    //        T*         operator+(T*, ptrdiff_t);     [ABOVE]
3956    //        T&         operator[](T*, ptrdiff_t);
3957    //        T*         operator-(T*, ptrdiff_t);     [ABOVE]
3958    //        T*         operator+(ptrdiff_t, T*);     [ABOVE]
3959    //        T&         operator[](ptrdiff_t, T*);
3960    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin();
3961         Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3962      QualType ParamTypes[2] = { *Ptr, Context.getPointerDiffType() };
3963      QualType PointeeType = (*Ptr)->getAs<PointerType>()->getPointeeType();
3964      QualType ResultTy = Context.getLValueReferenceType(PointeeType);
3965
3966      // T& operator[](T*, ptrdiff_t)
3967      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
3968
3969      // T& operator[](ptrdiff_t, T*);
3970      ParamTypes[0] = ParamTypes[1];
3971      ParamTypes[1] = *Ptr;
3972      AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
3973    }
3974    break;
3975
3976  case OO_ArrowStar:
3977    // C++ [over.built]p11:
3978    //    For every quintuple (C1, C2, T, CV1, CV2), where C2 is a class type,
3979    //    C1 is the same type as C2 or is a derived class of C2, T is an object
3980    //    type or a function type, and CV1 and CV2 are cv-qualifier-seqs,
3981    //    there exist candidate operator functions of the form
3982    //    CV12 T& operator->*(CV1 C1*, CV2 T C2::*);
3983    //    where CV12 is the union of CV1 and CV2.
3984    {
3985      for (BuiltinCandidateTypeSet::iterator Ptr =
3986             CandidateTypes.pointer_begin();
3987           Ptr != CandidateTypes.pointer_end(); ++Ptr) {
3988        QualType C1Ty = (*Ptr);
3989        QualType C1;
3990        QualifierCollector Q1;
3991        if (const PointerType *PointerTy = C1Ty->getAs<PointerType>()) {
3992          C1 = QualType(Q1.strip(PointerTy->getPointeeType()), 0);
3993          if (!isa<RecordType>(C1))
3994            continue;
3995          // heuristic to reduce number of builtin candidates in the set.
3996          // Add volatile/restrict version only if there are conversions to a
3997          // volatile/restrict type.
3998          if (!VisibleTypeConversionsQuals.hasVolatile() && Q1.hasVolatile())
3999            continue;
4000          if (!VisibleTypeConversionsQuals.hasRestrict() && Q1.hasRestrict())
4001            continue;
4002        }
4003        for (BuiltinCandidateTypeSet::iterator
4004             MemPtr = CandidateTypes.member_pointer_begin(),
4005             MemPtrEnd = CandidateTypes.member_pointer_end();
4006             MemPtr != MemPtrEnd; ++MemPtr) {
4007          const MemberPointerType *mptr = cast<MemberPointerType>(*MemPtr);
4008          QualType C2 = QualType(mptr->getClass(), 0);
4009          C2 = C2.getUnqualifiedType();
4010          if (C1 != C2 && !IsDerivedFrom(C1, C2))
4011            break;
4012          QualType ParamTypes[2] = { *Ptr, *MemPtr };
4013          // build CV12 T&
4014          QualType T = mptr->getPointeeType();
4015          if (!VisibleTypeConversionsQuals.hasVolatile() &&
4016              T.isVolatileQualified())
4017            continue;
4018          if (!VisibleTypeConversionsQuals.hasRestrict() &&
4019              T.isRestrictQualified())
4020            continue;
4021          T = Q1.apply(T);
4022          QualType ResultTy = Context.getLValueReferenceType(T);
4023          AddBuiltinCandidate(ResultTy, ParamTypes, Args, 2, CandidateSet);
4024        }
4025      }
4026    }
4027    break;
4028
4029  case OO_Conditional:
4030    // Note that we don't consider the first argument, since it has been
4031    // contextually converted to bool long ago. The candidates below are
4032    // therefore added as binary.
4033    //
4034    // C++ [over.built]p24:
4035    //   For every type T, where T is a pointer or pointer-to-member type,
4036    //   there exist candidate operator functions of the form
4037    //
4038    //        T        operator?(bool, T, T);
4039    //
4040    for (BuiltinCandidateTypeSet::iterator Ptr = CandidateTypes.pointer_begin(),
4041         E = CandidateTypes.pointer_end(); Ptr != E; ++Ptr) {
4042      QualType ParamTypes[2] = { *Ptr, *Ptr };
4043      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4044    }
4045    for (BuiltinCandidateTypeSet::iterator Ptr =
4046           CandidateTypes.member_pointer_begin(),
4047         E = CandidateTypes.member_pointer_end(); Ptr != E; ++Ptr) {
4048      QualType ParamTypes[2] = { *Ptr, *Ptr };
4049      AddBuiltinCandidate(*Ptr, ParamTypes, Args, 2, CandidateSet);
4050    }
4051    goto Conditional;
4052  }
4053}
4054
4055/// \brief Add function candidates found via argument-dependent lookup
4056/// to the set of overloading candidates.
4057///
4058/// This routine performs argument-dependent name lookup based on the
4059/// given function name (which may also be an operator name) and adds
4060/// all of the overload candidates found by ADL to the overload
4061/// candidate set (C++ [basic.lookup.argdep]).
4062void
4063Sema::AddArgumentDependentLookupCandidates(DeclarationName Name,
4064                                           Expr **Args, unsigned NumArgs,
4065                       const TemplateArgumentListInfo *ExplicitTemplateArgs,
4066                                           OverloadCandidateSet& CandidateSet,
4067                                           bool PartialOverloading) {
4068  FunctionSet Functions;
4069
4070  // FIXME: Should we be trafficking in canonical function decls throughout?
4071
4072  // Record all of the function candidates that we've already
4073  // added to the overload set, so that we don't add those same
4074  // candidates a second time.
4075  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
4076                                   CandEnd = CandidateSet.end();
4077       Cand != CandEnd; ++Cand)
4078    if (Cand->Function) {
4079      Functions.insert(Cand->Function);
4080      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
4081        Functions.insert(FunTmpl);
4082    }
4083
4084  // FIXME: Pass in the explicit template arguments?
4085  ArgumentDependentLookup(Name, /*Operator*/false, Args, NumArgs, Functions);
4086
4087  // Erase all of the candidates we already knew about.
4088  // FIXME: This is suboptimal. Is there a better way?
4089  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
4090                                   CandEnd = CandidateSet.end();
4091       Cand != CandEnd; ++Cand)
4092    if (Cand->Function) {
4093      Functions.erase(Cand->Function);
4094      if (FunctionTemplateDecl *FunTmpl = Cand->Function->getPrimaryTemplate())
4095        Functions.erase(FunTmpl);
4096    }
4097
4098  // For each of the ADL candidates we found, add it to the overload
4099  // set.
4100  for (FunctionSet::iterator Func = Functions.begin(),
4101                          FuncEnd = Functions.end();
4102       Func != FuncEnd; ++Func) {
4103    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*Func)) {
4104      if (ExplicitTemplateArgs)
4105        continue;
4106
4107      AddOverloadCandidate(FD, Args, NumArgs, CandidateSet,
4108                           false, false, PartialOverloading);
4109    } else
4110      AddTemplateOverloadCandidate(cast<FunctionTemplateDecl>(*Func),
4111                                   ExplicitTemplateArgs,
4112                                   Args, NumArgs, CandidateSet);
4113  }
4114}
4115
4116/// isBetterOverloadCandidate - Determines whether the first overload
4117/// candidate is a better candidate than the second (C++ 13.3.3p1).
4118bool
4119Sema::isBetterOverloadCandidate(const OverloadCandidate& Cand1,
4120                                const OverloadCandidate& Cand2) {
4121  // Define viable functions to be better candidates than non-viable
4122  // functions.
4123  if (!Cand2.Viable)
4124    return Cand1.Viable;
4125  else if (!Cand1.Viable)
4126    return false;
4127
4128  // C++ [over.match.best]p1:
4129  //
4130  //   -- if F is a static member function, ICS1(F) is defined such
4131  //      that ICS1(F) is neither better nor worse than ICS1(G) for
4132  //      any function G, and, symmetrically, ICS1(G) is neither
4133  //      better nor worse than ICS1(F).
4134  unsigned StartArg = 0;
4135  if (Cand1.IgnoreObjectArgument || Cand2.IgnoreObjectArgument)
4136    StartArg = 1;
4137
4138  // C++ [over.match.best]p1:
4139  //   A viable function F1 is defined to be a better function than another
4140  //   viable function F2 if for all arguments i, ICSi(F1) is not a worse
4141  //   conversion sequence than ICSi(F2), and then...
4142  unsigned NumArgs = Cand1.Conversions.size();
4143  assert(Cand2.Conversions.size() == NumArgs && "Overload candidate mismatch");
4144  bool HasBetterConversion = false;
4145  for (unsigned ArgIdx = StartArg; ArgIdx < NumArgs; ++ArgIdx) {
4146    switch (CompareImplicitConversionSequences(Cand1.Conversions[ArgIdx],
4147                                               Cand2.Conversions[ArgIdx])) {
4148    case ImplicitConversionSequence::Better:
4149      // Cand1 has a better conversion sequence.
4150      HasBetterConversion = true;
4151      break;
4152
4153    case ImplicitConversionSequence::Worse:
4154      // Cand1 can't be better than Cand2.
4155      return false;
4156
4157    case ImplicitConversionSequence::Indistinguishable:
4158      // Do nothing.
4159      break;
4160    }
4161  }
4162
4163  //    -- for some argument j, ICSj(F1) is a better conversion sequence than
4164  //       ICSj(F2), or, if not that,
4165  if (HasBetterConversion)
4166    return true;
4167
4168  //     - F1 is a non-template function and F2 is a function template
4169  //       specialization, or, if not that,
4170  if (Cand1.Function && !Cand1.Function->getPrimaryTemplate() &&
4171      Cand2.Function && Cand2.Function->getPrimaryTemplate())
4172    return true;
4173
4174  //   -- F1 and F2 are function template specializations, and the function
4175  //      template for F1 is more specialized than the template for F2
4176  //      according to the partial ordering rules described in 14.5.5.2, or,
4177  //      if not that,
4178  if (Cand1.Function && Cand1.Function->getPrimaryTemplate() &&
4179      Cand2.Function && Cand2.Function->getPrimaryTemplate())
4180    if (FunctionTemplateDecl *BetterTemplate
4181          = getMoreSpecializedTemplate(Cand1.Function->getPrimaryTemplate(),
4182                                       Cand2.Function->getPrimaryTemplate(),
4183                       isa<CXXConversionDecl>(Cand1.Function)? TPOC_Conversion
4184                                                             : TPOC_Call))
4185      return BetterTemplate == Cand1.Function->getPrimaryTemplate();
4186
4187  //   -- the context is an initialization by user-defined conversion
4188  //      (see 8.5, 13.3.1.5) and the standard conversion sequence
4189  //      from the return type of F1 to the destination type (i.e.,
4190  //      the type of the entity being initialized) is a better
4191  //      conversion sequence than the standard conversion sequence
4192  //      from the return type of F2 to the destination type.
4193  if (Cand1.Function && Cand2.Function &&
4194      isa<CXXConversionDecl>(Cand1.Function) &&
4195      isa<CXXConversionDecl>(Cand2.Function)) {
4196    switch (CompareStandardConversionSequences(Cand1.FinalConversion,
4197                                               Cand2.FinalConversion)) {
4198    case ImplicitConversionSequence::Better:
4199      // Cand1 has a better conversion sequence.
4200      return true;
4201
4202    case ImplicitConversionSequence::Worse:
4203      // Cand1 can't be better than Cand2.
4204      return false;
4205
4206    case ImplicitConversionSequence::Indistinguishable:
4207      // Do nothing
4208      break;
4209    }
4210  }
4211
4212  return false;
4213}
4214
4215/// \brief Computes the best viable function (C++ 13.3.3)
4216/// within an overload candidate set.
4217///
4218/// \param CandidateSet the set of candidate functions.
4219///
4220/// \param Loc the location of the function name (or operator symbol) for
4221/// which overload resolution occurs.
4222///
4223/// \param Best f overload resolution was successful or found a deleted
4224/// function, Best points to the candidate function found.
4225///
4226/// \returns The result of overload resolution.
4227OverloadingResult Sema::BestViableFunction(OverloadCandidateSet& CandidateSet,
4228                                           SourceLocation Loc,
4229                                        OverloadCandidateSet::iterator& Best) {
4230  // Find the best viable function.
4231  Best = CandidateSet.end();
4232  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4233       Cand != CandidateSet.end(); ++Cand) {
4234    if (Cand->Viable) {
4235      if (Best == CandidateSet.end() || isBetterOverloadCandidate(*Cand, *Best))
4236        Best = Cand;
4237    }
4238  }
4239
4240  // If we didn't find any viable functions, abort.
4241  if (Best == CandidateSet.end())
4242    return OR_No_Viable_Function;
4243
4244  // Make sure that this function is better than every other viable
4245  // function. If not, we have an ambiguity.
4246  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin();
4247       Cand != CandidateSet.end(); ++Cand) {
4248    if (Cand->Viable &&
4249        Cand != Best &&
4250        !isBetterOverloadCandidate(*Best, *Cand)) {
4251      Best = CandidateSet.end();
4252      return OR_Ambiguous;
4253    }
4254  }
4255
4256  // Best is the best viable function.
4257  if (Best->Function &&
4258      (Best->Function->isDeleted() ||
4259       Best->Function->getAttr<UnavailableAttr>()))
4260    return OR_Deleted;
4261
4262  // C++ [basic.def.odr]p2:
4263  //   An overloaded function is used if it is selected by overload resolution
4264  //   when referred to from a potentially-evaluated expression. [Note: this
4265  //   covers calls to named functions (5.2.2), operator overloading
4266  //   (clause 13), user-defined conversions (12.3.2), allocation function for
4267  //   placement new (5.3.4), as well as non-default initialization (8.5).
4268  if (Best->Function)
4269    MarkDeclarationReferenced(Loc, Best->Function);
4270  return OR_Success;
4271}
4272
4273/// Notes the location of an overload candidate.
4274void Sema::NoteOverloadCandidate(FunctionDecl *Fn) {
4275
4276  if (CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(Fn)) {
4277    // At least call it a 'constructor'.
4278    if (!Ctor->isImplicit()) {
4279      Diag(Ctor->getLocation(), diag::note_ovl_candidate_ctor);
4280      return;
4281    }
4282
4283    CXXRecordDecl *Record = Ctor->getParent();
4284    if (Ctor->isCopyConstructor()) {
4285      Diag(Record->getLocation(), diag::note_ovl_candidate_implicit_copy_ctor);
4286      return;
4287    }
4288
4289    Diag(Record->getLocation(), diag::note_ovl_candidate_implicit_default_ctor);
4290    return;
4291  }
4292
4293  if (CXXMethodDecl *Meth = dyn_cast<CXXMethodDecl>(Fn)) {
4294    // This actually gets spelled 'candidate function' for now, but
4295    // it doesn't hurt to split it out.
4296    if (!Meth->isImplicit()) {
4297      Diag(Meth->getLocation(), diag::note_ovl_candidate_meth);
4298      return;
4299    }
4300
4301    assert(Meth->isCopyAssignment()
4302           && "implicit method is not copy assignment operator?");
4303    Diag(Meth->getParent()->getLocation(),
4304         diag::note_ovl_candidate_implicit_copy_assign);
4305    return;
4306  }
4307
4308  Diag(Fn->getLocation(), diag::note_ovl_candidate);
4309}
4310
4311namespace {
4312
4313void NoteDeletedCandidate(Sema &S, OverloadCandidate *Cand) {
4314}
4315
4316void NoteFunctionCandidate(Sema &S, OverloadCandidate *Cand) {
4317  // Note deleted candidates, but only if they're viable.
4318  if (Cand->Viable &&
4319      (Cand->Function->isDeleted() ||
4320       Cand->Function->hasAttr<UnavailableAttr>())) {
4321    S.Diag(Cand->Function->getLocation(), diag::note_ovl_candidate_deleted)
4322      << Cand->Function->isDeleted();
4323    return;
4324  }
4325
4326  if (FunctionTemplateDecl *FunTmpl
4327               = Cand->Function->getPrimaryTemplate()) {
4328    // Function template specialization
4329    // FIXME: Give a better reason!
4330    S.Diag(Cand->Function->getLocation(), diag::note_ovl_template_candidate)
4331      << S.getTemplateArgumentBindingsText(FunTmpl->getTemplateParameters(),
4332                              *Cand->Function->getTemplateSpecializationArgs());
4333    return;
4334  }
4335
4336  // Normal function
4337  bool errReported = false;
4338  if (!Cand->Viable && Cand->Conversions.size() > 0) {
4339    for (int i = Cand->Conversions.size()-1; i >= 0; i--) {
4340      const ImplicitConversionSequence &Conversion =
4341        Cand->Conversions[i];
4342      if ((Conversion.ConversionKind !=
4343             ImplicitConversionSequence::BadConversion) ||
4344          Conversion.ConversionFunctionSet.size() == 0)
4345        continue;
4346      S.Diag(Cand->Function->getLocation(),
4347             diag::note_ovl_candidate_not_viable) << (i+1);
4348      errReported = true;
4349      for (int j = Conversion.ConversionFunctionSet.size()-1;
4350           j >= 0; j--) {
4351        FunctionDecl *Func = Conversion.ConversionFunctionSet[j];
4352        S.NoteOverloadCandidate(Func);
4353      }
4354    }
4355  }
4356
4357  if (!errReported)
4358    S.NoteOverloadCandidate(Cand->Function);
4359}
4360
4361void NoteSurrogateCandidate(Sema &S, OverloadCandidate *Cand) {
4362  // Desugar the type of the surrogate down to a function type,
4363  // retaining as many typedefs as possible while still showing
4364  // the function type (and, therefore, its parameter types).
4365  QualType FnType = Cand->Surrogate->getConversionType();
4366  bool isLValueReference = false;
4367  bool isRValueReference = false;
4368  bool isPointer = false;
4369  if (const LValueReferenceType *FnTypeRef =
4370        FnType->getAs<LValueReferenceType>()) {
4371    FnType = FnTypeRef->getPointeeType();
4372    isLValueReference = true;
4373  } else if (const RValueReferenceType *FnTypeRef =
4374               FnType->getAs<RValueReferenceType>()) {
4375    FnType = FnTypeRef->getPointeeType();
4376    isRValueReference = true;
4377  }
4378  if (const PointerType *FnTypePtr = FnType->getAs<PointerType>()) {
4379    FnType = FnTypePtr->getPointeeType();
4380    isPointer = true;
4381  }
4382  // Desugar down to a function type.
4383  FnType = QualType(FnType->getAs<FunctionType>(), 0);
4384  // Reconstruct the pointer/reference as appropriate.
4385  if (isPointer) FnType = S.Context.getPointerType(FnType);
4386  if (isRValueReference) FnType = S.Context.getRValueReferenceType(FnType);
4387  if (isLValueReference) FnType = S.Context.getLValueReferenceType(FnType);
4388
4389  S.Diag(Cand->Surrogate->getLocation(), diag::note_ovl_surrogate_cand)
4390    << FnType;
4391}
4392
4393void NoteBuiltinOperatorCandidate(Sema &S,
4394                                  const char *Opc,
4395                                  SourceLocation OpLoc,
4396                                  OverloadCandidate *Cand) {
4397  assert(Cand->Conversions.size() <= 2 && "builtin operator is 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    S.Diag(OpLoc, diag::note_ovl_builtin_unary_candidate) << TypeStr;
4405  } else {
4406    TypeStr += ", ";
4407    TypeStr += Cand->BuiltinTypes.ParamTypes[1].getAsString();
4408    TypeStr += ")";
4409    S.Diag(OpLoc, diag::note_ovl_builtin_binary_candidate) << TypeStr;
4410  }
4411}
4412
4413void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc,
4414                                  OverloadCandidate *Cand) {
4415  unsigned NoOperands = Cand->Conversions.size();
4416  for (unsigned ArgIdx = 0; ArgIdx < NoOperands; ++ArgIdx) {
4417    const ImplicitConversionSequence &ICS = Cand->Conversions[ArgIdx];
4418    if (ICS.ConversionKind != ImplicitConversionSequence::BadConversion ||
4419        ICS.ConversionFunctionSet.empty())
4420      continue;
4421    if (CXXConversionDecl *Func = dyn_cast<CXXConversionDecl>(
4422                     Cand->Conversions[ArgIdx].ConversionFunctionSet[0])) {
4423      QualType FromTy =
4424        QualType(static_cast<Type*>(ICS.UserDefined.Before.FromTypePtr),0);
4425      S.Diag(OpLoc, diag::note_ambiguous_type_conversion)
4426        << FromTy << Func->getConversionType();
4427    }
4428    for (unsigned j = 0; j < ICS.ConversionFunctionSet.size(); j++) {
4429      FunctionDecl *Func =
4430        Cand->Conversions[ArgIdx].ConversionFunctionSet[j];
4431      S.NoteOverloadCandidate(Func);
4432    }
4433  }
4434}
4435
4436struct CompareOverloadCandidates {
4437  SourceManager &SM;
4438  CompareOverloadCandidates(SourceManager &SM) : SM(SM) {}
4439
4440  bool operator()(const OverloadCandidate *L,
4441                  const OverloadCandidate *R) {
4442    // Order first by viability.
4443    if (L->Viable != R->Viable)
4444      return L->Viable;
4445
4446    // Put declared functions first.
4447    if (L->Function) {
4448      if (!R->Function) return true;
4449      return SM.isBeforeInTranslationUnit(L->Function->getLocation(),
4450                                          R->Function->getLocation());
4451    } else if (R->Function) return false;
4452
4453    // Then surrogates.
4454    if (L->IsSurrogate) {
4455      if (!R->IsSurrogate) return true;
4456      return SM.isBeforeInTranslationUnit(L->Surrogate->getLocation(),
4457                                          R->Surrogate->getLocation());
4458    } else if (R->IsSurrogate) return false;
4459
4460    // And builtins just come in a jumble.
4461    return false;
4462  }
4463};
4464
4465} // end anonymous namespace
4466
4467/// PrintOverloadCandidates - When overload resolution fails, prints
4468/// diagnostic messages containing the candidates in the candidate
4469/// set.
4470void
4471Sema::PrintOverloadCandidates(OverloadCandidateSet& CandidateSet,
4472                              OverloadCandidateDisplayKind OCD,
4473                              const char *Opc,
4474                              SourceLocation OpLoc) {
4475  // Sort the candidates by viability and position.  Sorting directly would
4476  // be prohibitive, so we make a set of pointers and sort those.
4477  llvm::SmallVector<OverloadCandidate*, 32> Cands;
4478  if (OCD == OCD_AllCandidates) Cands.reserve(CandidateSet.size());
4479  for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
4480                                  LastCand = CandidateSet.end();
4481       Cand != LastCand; ++Cand)
4482    if (Cand->Viable || OCD == OCD_AllCandidates)
4483      Cands.push_back(Cand);
4484  std::sort(Cands.begin(), Cands.end(), CompareOverloadCandidates(SourceMgr));
4485
4486  bool ReportedNonViableOperator = false;
4487
4488  llvm::SmallVectorImpl<OverloadCandidate*>::iterator I, E;
4489  for (I = Cands.begin(), E = Cands.end(); I != E; ++I) {
4490    OverloadCandidate *Cand = *I;
4491
4492    if (Cand->Function)
4493      NoteFunctionCandidate(*this, Cand);
4494    else if (Cand->IsSurrogate)
4495      NoteSurrogateCandidate(*this, Cand);
4496
4497    // This a builtin candidate.  We do not, in general, want to list
4498    // every possible builtin candidate.
4499
4500    // If this is a viable builtin, print it.
4501    else if (Cand->Viable)
4502      NoteBuiltinOperatorCandidate(*this, Opc, OpLoc, Cand);
4503
4504    // Otherwise, non-viability might be due to ambiguous user-defined
4505    // conversions.  Report them exactly once.
4506    else if (!ReportedNonViableOperator) {
4507      NoteAmbiguousUserConversions(*this, OpLoc, Cand);
4508      ReportedNonViableOperator = true;
4509    }
4510  }
4511}
4512
4513/// ResolveAddressOfOverloadedFunction - Try to resolve the address of
4514/// an overloaded function (C++ [over.over]), where @p From is an
4515/// expression with overloaded function type and @p ToType is the type
4516/// we're trying to resolve to. For example:
4517///
4518/// @code
4519/// int f(double);
4520/// int f(int);
4521///
4522/// int (*pfd)(double) = f; // selects f(double)
4523/// @endcode
4524///
4525/// This routine returns the resulting FunctionDecl if it could be
4526/// resolved, and NULL otherwise. When @p Complain is true, this
4527/// routine will emit diagnostics if there is an error.
4528FunctionDecl *
4529Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType,
4530                                         bool Complain) {
4531  QualType FunctionType = ToType;
4532  bool IsMember = false;
4533  if (const PointerType *ToTypePtr = ToType->getAs<PointerType>())
4534    FunctionType = ToTypePtr->getPointeeType();
4535  else if (const ReferenceType *ToTypeRef = ToType->getAs<ReferenceType>())
4536    FunctionType = ToTypeRef->getPointeeType();
4537  else if (const MemberPointerType *MemTypePtr =
4538                    ToType->getAs<MemberPointerType>()) {
4539    FunctionType = MemTypePtr->getPointeeType();
4540    IsMember = true;
4541  }
4542
4543  // We only look at pointers or references to functions.
4544  FunctionType = Context.getCanonicalType(FunctionType).getUnqualifiedType();
4545  if (!FunctionType->isFunctionType())
4546    return 0;
4547
4548  // Find the actual overloaded function declaration.
4549
4550  // C++ [over.over]p1:
4551  //   [...] [Note: any redundant set of parentheses surrounding the
4552  //   overloaded function name is ignored (5.1). ]
4553  Expr *OvlExpr = From->IgnoreParens();
4554
4555  // C++ [over.over]p1:
4556  //   [...] The overloaded function name can be preceded by the &
4557  //   operator.
4558  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(OvlExpr)) {
4559    if (UnOp->getOpcode() == UnaryOperator::AddrOf)
4560      OvlExpr = UnOp->getSubExpr()->IgnoreParens();
4561  }
4562
4563  bool HasExplicitTemplateArgs = false;
4564  TemplateArgumentListInfo ExplicitTemplateArgs;
4565
4566  llvm::SmallVector<NamedDecl*,8> Fns;
4567
4568  // Look into the overloaded expression.
4569  if (UnresolvedLookupExpr *UL
4570               = dyn_cast<UnresolvedLookupExpr>(OvlExpr)) {
4571    Fns.append(UL->decls_begin(), UL->decls_end());
4572    if (UL->hasExplicitTemplateArgs()) {
4573      HasExplicitTemplateArgs = true;
4574      UL->copyTemplateArgumentsInto(ExplicitTemplateArgs);
4575    }
4576  } else if (UnresolvedMemberExpr *ME
4577               = dyn_cast<UnresolvedMemberExpr>(OvlExpr)) {
4578    Fns.append(ME->decls_begin(), ME->decls_end());
4579    if (ME->hasExplicitTemplateArgs()) {
4580      HasExplicitTemplateArgs = true;
4581      ME->copyTemplateArgumentsInto(ExplicitTemplateArgs);
4582    }
4583  }
4584
4585  // If we didn't actually find anything, we're done.
4586  if (Fns.empty())
4587    return 0;
4588
4589  // Look through all of the overloaded functions, searching for one
4590  // whose type matches exactly.
4591  llvm::SmallPtrSet<FunctionDecl *, 4> Matches;
4592  bool FoundNonTemplateFunction = false;
4593  for (llvm::SmallVectorImpl<NamedDecl*>::iterator I = Fns.begin(),
4594         E = Fns.end(); I != E; ++I) {
4595    // Look through any using declarations to find the underlying function.
4596    NamedDecl *Fn = (*I)->getUnderlyingDecl();
4597
4598    // C++ [over.over]p3:
4599    //   Non-member functions and static member functions match
4600    //   targets of type "pointer-to-function" or "reference-to-function."
4601    //   Nonstatic member functions match targets of
4602    //   type "pointer-to-member-function."
4603    // Note that according to DR 247, the containing class does not matter.
4604
4605    if (FunctionTemplateDecl *FunctionTemplate
4606          = dyn_cast<FunctionTemplateDecl>(Fn)) {
4607      if (CXXMethodDecl *Method
4608            = dyn_cast<CXXMethodDecl>(FunctionTemplate->getTemplatedDecl())) {
4609        // Skip non-static function templates when converting to pointer, and
4610        // static when converting to member pointer.
4611        if (Method->isStatic() == IsMember)
4612          continue;
4613      } else if (IsMember)
4614        continue;
4615
4616      // C++ [over.over]p2:
4617      //   If the name is a function template, template argument deduction is
4618      //   done (14.8.2.2), and if the argument deduction succeeds, the
4619      //   resulting template argument list is used to generate a single
4620      //   function template specialization, which is added to the set of
4621      //   overloaded functions considered.
4622      // FIXME: We don't really want to build the specialization here, do we?
4623      FunctionDecl *Specialization = 0;
4624      TemplateDeductionInfo Info(Context);
4625      if (TemplateDeductionResult Result
4626            = DeduceTemplateArguments(FunctionTemplate,
4627                       (HasExplicitTemplateArgs ? &ExplicitTemplateArgs : 0),
4628                                      FunctionType, Specialization, Info)) {
4629        // FIXME: make a note of the failed deduction for diagnostics.
4630        (void)Result;
4631      } else {
4632        // FIXME: If the match isn't exact, shouldn't we just drop this as
4633        // a candidate? Find a testcase before changing the code.
4634        assert(FunctionType
4635                 == Context.getCanonicalType(Specialization->getType()));
4636        Matches.insert(
4637                cast<FunctionDecl>(Specialization->getCanonicalDecl()));
4638      }
4639
4640      continue;
4641    }
4642
4643    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
4644      // Skip non-static functions when converting to pointer, and static
4645      // when converting to member pointer.
4646      if (Method->isStatic() == IsMember)
4647        continue;
4648
4649      // If we have explicit template arguments, skip non-templates.
4650      if (HasExplicitTemplateArgs)
4651        continue;
4652    } else if (IsMember)
4653      continue;
4654
4655    if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(Fn)) {
4656      QualType ResultTy;
4657      if (Context.hasSameUnqualifiedType(FunctionType, FunDecl->getType()) ||
4658          IsNoReturnConversion(Context, FunDecl->getType(), FunctionType,
4659                               ResultTy)) {
4660        Matches.insert(cast<FunctionDecl>(FunDecl->getCanonicalDecl()));
4661        FoundNonTemplateFunction = true;
4662      }
4663    }
4664  }
4665
4666  // If there were 0 or 1 matches, we're done.
4667  if (Matches.empty())
4668    return 0;
4669  else if (Matches.size() == 1) {
4670    FunctionDecl *Result = *Matches.begin();
4671    MarkDeclarationReferenced(From->getLocStart(), Result);
4672    return Result;
4673  }
4674
4675  // C++ [over.over]p4:
4676  //   If more than one function is selected, [...]
4677  typedef llvm::SmallPtrSet<FunctionDecl *, 4>::iterator MatchIter;
4678  if (!FoundNonTemplateFunction) {
4679    //   [...] and any given function template specialization F1 is
4680    //   eliminated if the set contains a second function template
4681    //   specialization whose function template is more specialized
4682    //   than the function template of F1 according to the partial
4683    //   ordering rules of 14.5.5.2.
4684
4685    // The algorithm specified above is quadratic. We instead use a
4686    // two-pass algorithm (similar to the one used to identify the
4687    // best viable function in an overload set) that identifies the
4688    // best function template (if it exists).
4689    llvm::SmallVector<FunctionDecl *, 8> TemplateMatches(Matches.begin(),
4690                                                         Matches.end());
4691    FunctionDecl *Result =
4692        getMostSpecialized(TemplateMatches.data(), TemplateMatches.size(),
4693                           TPOC_Other, From->getLocStart(),
4694                           PDiag(),
4695                           PDiag(diag::err_addr_ovl_ambiguous)
4696                               << TemplateMatches[0]->getDeclName(),
4697                           PDiag(diag::note_ovl_template_candidate));
4698    MarkDeclarationReferenced(From->getLocStart(), Result);
4699    return Result;
4700  }
4701
4702  //   [...] any function template specializations in the set are
4703  //   eliminated if the set also contains a non-template function, [...]
4704  llvm::SmallVector<FunctionDecl *, 4> RemainingMatches;
4705  for (MatchIter M = Matches.begin(), MEnd = Matches.end(); M != MEnd; ++M)
4706    if ((*M)->getPrimaryTemplate() == 0)
4707      RemainingMatches.push_back(*M);
4708
4709  // [...] After such eliminations, if any, there shall remain exactly one
4710  // selected function.
4711  if (RemainingMatches.size() == 1) {
4712    FunctionDecl *Result = RemainingMatches.front();
4713    MarkDeclarationReferenced(From->getLocStart(), Result);
4714    return Result;
4715  }
4716
4717  // FIXME: We should probably return the same thing that BestViableFunction
4718  // returns (even if we issue the diagnostics here).
4719  Diag(From->getLocStart(), diag::err_addr_ovl_ambiguous)
4720    << RemainingMatches[0]->getDeclName();
4721  for (unsigned I = 0, N = RemainingMatches.size(); I != N; ++I)
4722    NoteOverloadCandidate(RemainingMatches[I]);
4723  return 0;
4724}
4725
4726/// \brief Given an expression that refers to an overloaded function, try to
4727/// resolve that overloaded function expression down to a single function.
4728///
4729/// This routine can only resolve template-ids that refer to a single function
4730/// template, where that template-id refers to a single template whose template
4731/// arguments are either provided by the template-id or have defaults,
4732/// as described in C++0x [temp.arg.explicit]p3.
4733FunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(Expr *From) {
4734  // C++ [over.over]p1:
4735  //   [...] [Note: any redundant set of parentheses surrounding the
4736  //   overloaded function name is ignored (5.1). ]
4737  Expr *OvlExpr = From->IgnoreParens();
4738
4739  // C++ [over.over]p1:
4740  //   [...] The overloaded function name can be preceded by the &
4741  //   operator.
4742  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(OvlExpr)) {
4743    if (UnOp->getOpcode() == UnaryOperator::AddrOf)
4744      OvlExpr = UnOp->getSubExpr()->IgnoreParens();
4745  }
4746
4747  bool HasExplicitTemplateArgs = false;
4748  TemplateArgumentListInfo ExplicitTemplateArgs;
4749
4750  llvm::SmallVector<NamedDecl*,8> Fns;
4751
4752  // Look into the overloaded expression.
4753  if (UnresolvedLookupExpr *UL
4754      = dyn_cast<UnresolvedLookupExpr>(OvlExpr)) {
4755    Fns.append(UL->decls_begin(), UL->decls_end());
4756    if (UL->hasExplicitTemplateArgs()) {
4757      HasExplicitTemplateArgs = true;
4758      UL->copyTemplateArgumentsInto(ExplicitTemplateArgs);
4759    }
4760  } else if (UnresolvedMemberExpr *ME
4761             = dyn_cast<UnresolvedMemberExpr>(OvlExpr)) {
4762    Fns.append(ME->decls_begin(), ME->decls_end());
4763    if (ME->hasExplicitTemplateArgs()) {
4764      HasExplicitTemplateArgs = true;
4765      ME->copyTemplateArgumentsInto(ExplicitTemplateArgs);
4766    }
4767  }
4768
4769  // If we didn't actually find any template-ids, we're done.
4770  if (Fns.empty() || !HasExplicitTemplateArgs)
4771    return 0;
4772
4773  // Look through all of the overloaded functions, searching for one
4774  // whose type matches exactly.
4775  FunctionDecl *Matched = 0;
4776  for (llvm::SmallVectorImpl<NamedDecl*>::iterator I = Fns.begin(),
4777       E = Fns.end(); I != E; ++I) {
4778    // C++0x [temp.arg.explicit]p3:
4779    //   [...] In contexts where deduction is done and fails, or in contexts
4780    //   where deduction is not done, if a template argument list is
4781    //   specified and it, along with any default template arguments,
4782    //   identifies a single function template specialization, then the
4783    //   template-id is an lvalue for the function template specialization.
4784    FunctionTemplateDecl *FunctionTemplate = cast<FunctionTemplateDecl>(*I);
4785
4786    // C++ [over.over]p2:
4787    //   If the name is a function template, template argument deduction is
4788    //   done (14.8.2.2), and if the argument deduction succeeds, the
4789    //   resulting template argument list is used to generate a single
4790    //   function template specialization, which is added to the set of
4791    //   overloaded functions considered.
4792    // FIXME: We don't really want to build the specialization here, do we?
4793    FunctionDecl *Specialization = 0;
4794    TemplateDeductionInfo Info(Context);
4795    if (TemplateDeductionResult Result
4796          = DeduceTemplateArguments(FunctionTemplate, &ExplicitTemplateArgs,
4797                                    Specialization, Info)) {
4798      // FIXME: make a note of the failed deduction for diagnostics.
4799      (void)Result;
4800      continue;
4801    }
4802
4803    // Multiple matches; we can't resolve to a single declaration.
4804    if (Matched)
4805      return 0;
4806
4807    Matched = Specialization;
4808  }
4809
4810  return Matched;
4811}
4812
4813/// \brief Add a single candidate to the overload set.
4814static void AddOverloadedCallCandidate(Sema &S,
4815                                       NamedDecl *Callee,
4816                       const TemplateArgumentListInfo *ExplicitTemplateArgs,
4817                                       Expr **Args, unsigned NumArgs,
4818                                       OverloadCandidateSet &CandidateSet,
4819                                       bool PartialOverloading) {
4820  if (isa<UsingShadowDecl>(Callee))
4821    Callee = cast<UsingShadowDecl>(Callee)->getTargetDecl();
4822
4823  if (FunctionDecl *Func = dyn_cast<FunctionDecl>(Callee)) {
4824    assert(!ExplicitTemplateArgs && "Explicit template arguments?");
4825    S.AddOverloadCandidate(Func, Args, NumArgs, CandidateSet, false, false,
4826                           PartialOverloading);
4827    return;
4828  }
4829
4830  if (FunctionTemplateDecl *FuncTemplate
4831      = dyn_cast<FunctionTemplateDecl>(Callee)) {
4832    S.AddTemplateOverloadCandidate(FuncTemplate, ExplicitTemplateArgs,
4833                                   Args, NumArgs, CandidateSet);
4834    return;
4835  }
4836
4837  assert(false && "unhandled case in overloaded call candidate");
4838
4839  // do nothing?
4840}
4841
4842/// \brief Add the overload candidates named by callee and/or found by argument
4843/// dependent lookup to the given overload set.
4844void Sema::AddOverloadedCallCandidates(UnresolvedLookupExpr *ULE,
4845                                       Expr **Args, unsigned NumArgs,
4846                                       OverloadCandidateSet &CandidateSet,
4847                                       bool PartialOverloading) {
4848
4849#ifndef NDEBUG
4850  // Verify that ArgumentDependentLookup is consistent with the rules
4851  // in C++0x [basic.lookup.argdep]p3:
4852  //
4853  //   Let X be the lookup set produced by unqualified lookup (3.4.1)
4854  //   and let Y be the lookup set produced by argument dependent
4855  //   lookup (defined as follows). If X contains
4856  //
4857  //     -- a declaration of a class member, or
4858  //
4859  //     -- a block-scope function declaration that is not a
4860  //        using-declaration, or
4861  //
4862  //     -- a declaration that is neither a function or a function
4863  //        template
4864  //
4865  //   then Y is empty.
4866
4867  if (ULE->requiresADL()) {
4868    for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
4869           E = ULE->decls_end(); I != E; ++I) {
4870      assert(!(*I)->getDeclContext()->isRecord());
4871      assert(isa<UsingShadowDecl>(*I) ||
4872             !(*I)->getDeclContext()->isFunctionOrMethod());
4873      assert((*I)->getUnderlyingDecl()->isFunctionOrFunctionTemplate());
4874    }
4875  }
4876#endif
4877
4878  // It would be nice to avoid this copy.
4879  TemplateArgumentListInfo TABuffer;
4880  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
4881  if (ULE->hasExplicitTemplateArgs()) {
4882    ULE->copyTemplateArgumentsInto(TABuffer);
4883    ExplicitTemplateArgs = &TABuffer;
4884  }
4885
4886  for (UnresolvedLookupExpr::decls_iterator I = ULE->decls_begin(),
4887         E = ULE->decls_end(); I != E; ++I)
4888    AddOverloadedCallCandidate(*this, *I, ExplicitTemplateArgs,
4889                               Args, NumArgs, CandidateSet,
4890                               PartialOverloading);
4891
4892  if (ULE->requiresADL())
4893    AddArgumentDependentLookupCandidates(ULE->getName(), Args, NumArgs,
4894                                         ExplicitTemplateArgs,
4895                                         CandidateSet,
4896                                         PartialOverloading);
4897}
4898
4899static Sema::OwningExprResult Destroy(Sema &SemaRef, Expr *Fn,
4900                                      Expr **Args, unsigned NumArgs) {
4901  Fn->Destroy(SemaRef.Context);
4902  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
4903    Args[Arg]->Destroy(SemaRef.Context);
4904  return SemaRef.ExprError();
4905}
4906
4907/// Attempts to recover from a call where no functions were found.
4908///
4909/// Returns true if new candidates were found.
4910static Sema::OwningExprResult
4911BuildRecoveryCallExpr(Sema &SemaRef, Expr *Fn,
4912                      UnresolvedLookupExpr *ULE,
4913                      SourceLocation LParenLoc,
4914                      Expr **Args, unsigned NumArgs,
4915                      SourceLocation *CommaLocs,
4916                      SourceLocation RParenLoc) {
4917
4918  CXXScopeSpec SS;
4919  if (ULE->getQualifier()) {
4920    SS.setScopeRep(ULE->getQualifier());
4921    SS.setRange(ULE->getQualifierRange());
4922  }
4923
4924  TemplateArgumentListInfo TABuffer;
4925  const TemplateArgumentListInfo *ExplicitTemplateArgs = 0;
4926  if (ULE->hasExplicitTemplateArgs()) {
4927    ULE->copyTemplateArgumentsInto(TABuffer);
4928    ExplicitTemplateArgs = &TABuffer;
4929  }
4930
4931  LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
4932                 Sema::LookupOrdinaryName);
4933  if (SemaRef.DiagnoseEmptyLookup(/*Scope=*/0, SS, R))
4934    return Destroy(SemaRef, Fn, Args, NumArgs);
4935
4936  assert(!R.empty() && "lookup results empty despite recovery");
4937
4938  // Build an implicit member call if appropriate.  Just drop the
4939  // casts and such from the call, we don't really care.
4940  Sema::OwningExprResult NewFn = SemaRef.ExprError();
4941  if ((*R.begin())->isCXXClassMember())
4942    NewFn = SemaRef.BuildPossibleImplicitMemberExpr(SS, R, ExplicitTemplateArgs);
4943  else if (ExplicitTemplateArgs)
4944    NewFn = SemaRef.BuildTemplateIdExpr(SS, R, false, *ExplicitTemplateArgs);
4945  else
4946    NewFn = SemaRef.BuildDeclarationNameExpr(SS, R, false);
4947
4948  if (NewFn.isInvalid())
4949    return Destroy(SemaRef, Fn, Args, NumArgs);
4950
4951  Fn->Destroy(SemaRef.Context);
4952
4953  // This shouldn't cause an infinite loop because we're giving it
4954  // an expression with non-empty lookup results, which should never
4955  // end up here.
4956  return SemaRef.ActOnCallExpr(/*Scope*/ 0, move(NewFn), LParenLoc,
4957                         Sema::MultiExprArg(SemaRef, (void**) Args, NumArgs),
4958                               CommaLocs, RParenLoc);
4959}
4960
4961/// ResolveOverloadedCallFn - Given the call expression that calls Fn
4962/// (which eventually refers to the declaration Func) and the call
4963/// arguments Args/NumArgs, attempt to resolve the function call down
4964/// to a specific function. If overload resolution succeeds, returns
4965/// the function declaration produced by overload
4966/// resolution. Otherwise, emits diagnostics, deletes all of the
4967/// arguments and Fn, and returns NULL.
4968Sema::OwningExprResult
4969Sema::BuildOverloadedCallExpr(Expr *Fn, UnresolvedLookupExpr *ULE,
4970                              SourceLocation LParenLoc,
4971                              Expr **Args, unsigned NumArgs,
4972                              SourceLocation *CommaLocs,
4973                              SourceLocation RParenLoc) {
4974#ifndef NDEBUG
4975  if (ULE->requiresADL()) {
4976    // To do ADL, we must have found an unqualified name.
4977    assert(!ULE->getQualifier() && "qualified name with ADL");
4978
4979    // We don't perform ADL for implicit declarations of builtins.
4980    // Verify that this was correctly set up.
4981    FunctionDecl *F;
4982    if (ULE->decls_begin() + 1 == ULE->decls_end() &&
4983        (F = dyn_cast<FunctionDecl>(*ULE->decls_begin())) &&
4984        F->getBuiltinID() && F->isImplicit())
4985      assert(0 && "performing ADL for builtin");
4986
4987    // We don't perform ADL in C.
4988    assert(getLangOptions().CPlusPlus && "ADL enabled in C");
4989  }
4990#endif
4991
4992  OverloadCandidateSet CandidateSet;
4993
4994  // Add the functions denoted by the callee to the set of candidate
4995  // functions, including those from argument-dependent lookup.
4996  AddOverloadedCallCandidates(ULE, Args, NumArgs, CandidateSet);
4997
4998  // If we found nothing, try to recover.
4999  // AddRecoveryCallCandidates diagnoses the error itself, so we just
5000  // bailout out if it fails.
5001  if (CandidateSet.empty())
5002    return BuildRecoveryCallExpr(*this, Fn, ULE, LParenLoc, Args, NumArgs,
5003                                 CommaLocs, RParenLoc);
5004
5005  OverloadCandidateSet::iterator Best;
5006  switch (BestViableFunction(CandidateSet, Fn->getLocStart(), Best)) {
5007  case OR_Success: {
5008    FunctionDecl *FDecl = Best->Function;
5009    Fn = FixOverloadedFunctionReference(Fn, FDecl);
5010    return BuildResolvedCallExpr(Fn, FDecl, LParenLoc, Args, NumArgs, RParenLoc);
5011  }
5012
5013  case OR_No_Viable_Function:
5014    Diag(Fn->getSourceRange().getBegin(),
5015         diag::err_ovl_no_viable_function_in_call)
5016      << ULE->getName() << Fn->getSourceRange();
5017    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5018    break;
5019
5020  case OR_Ambiguous:
5021    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_ambiguous_call)
5022      << ULE->getName() << Fn->getSourceRange();
5023    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates);
5024    break;
5025
5026  case OR_Deleted:
5027    Diag(Fn->getSourceRange().getBegin(), diag::err_ovl_deleted_call)
5028      << Best->Function->isDeleted()
5029      << ULE->getName()
5030      << Fn->getSourceRange();
5031    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5032    break;
5033  }
5034
5035  // Overload resolution failed. Destroy all of the subexpressions and
5036  // return NULL.
5037  Fn->Destroy(Context);
5038  for (unsigned Arg = 0; Arg < NumArgs; ++Arg)
5039    Args[Arg]->Destroy(Context);
5040  return ExprError();
5041}
5042
5043static bool IsOverloaded(const Sema::FunctionSet &Functions) {
5044  return Functions.size() > 1 ||
5045    (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin()));
5046}
5047
5048/// \brief Create a unary operation that may resolve to an overloaded
5049/// operator.
5050///
5051/// \param OpLoc The location of the operator itself (e.g., '*').
5052///
5053/// \param OpcIn The UnaryOperator::Opcode that describes this
5054/// operator.
5055///
5056/// \param Functions The set of non-member functions that will be
5057/// considered by overload resolution. The caller needs to build this
5058/// set based on the context using, e.g.,
5059/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
5060/// set should not contain any member functions; those will be added
5061/// by CreateOverloadedUnaryOp().
5062///
5063/// \param input The input argument.
5064Sema::OwningExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc,
5065                                                     unsigned OpcIn,
5066                                                     FunctionSet &Functions,
5067                                                     ExprArg input) {
5068  UnaryOperator::Opcode Opc = static_cast<UnaryOperator::Opcode>(OpcIn);
5069  Expr *Input = (Expr *)input.get();
5070
5071  OverloadedOperatorKind Op = UnaryOperator::getOverloadedOperator(Opc);
5072  assert(Op != OO_None && "Invalid opcode for overloaded unary operator");
5073  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5074
5075  Expr *Args[2] = { Input, 0 };
5076  unsigned NumArgs = 1;
5077
5078  // For post-increment and post-decrement, add the implicit '0' as
5079  // the second argument, so that we know this is a post-increment or
5080  // post-decrement.
5081  if (Opc == UnaryOperator::PostInc || Opc == UnaryOperator::PostDec) {
5082    llvm::APSInt Zero(Context.getTypeSize(Context.IntTy), false);
5083    Args[1] = new (Context) IntegerLiteral(Zero, Context.IntTy,
5084                                           SourceLocation());
5085    NumArgs = 2;
5086  }
5087
5088  if (Input->isTypeDependent()) {
5089    UnresolvedLookupExpr *Fn
5090      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true,
5091                                     0, SourceRange(), OpName, OpLoc,
5092                                     /*ADL*/ true, IsOverloaded(Functions));
5093    for (FunctionSet::iterator Func = Functions.begin(),
5094                            FuncEnd = Functions.end();
5095         Func != FuncEnd; ++Func)
5096      Fn->addDecl(*Func);
5097
5098    input.release();
5099    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
5100                                                   &Args[0], NumArgs,
5101                                                   Context.DependentTy,
5102                                                   OpLoc));
5103  }
5104
5105  // Build an empty overload set.
5106  OverloadCandidateSet CandidateSet;
5107
5108  // Add the candidates from the given function set.
5109  AddFunctionCandidates(Functions, &Args[0], NumArgs, CandidateSet, false);
5110
5111  // Add operator candidates that are member functions.
5112  AddMemberOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
5113
5114  // Add builtin operator candidates.
5115  AddBuiltinOperatorCandidates(Op, OpLoc, &Args[0], NumArgs, CandidateSet);
5116
5117  // Perform overload resolution.
5118  OverloadCandidateSet::iterator Best;
5119  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5120  case OR_Success: {
5121    // We found a built-in operator or an overloaded operator.
5122    FunctionDecl *FnDecl = Best->Function;
5123
5124    if (FnDecl) {
5125      // We matched an overloaded operator. Build a call to that
5126      // operator.
5127
5128      // Convert the arguments.
5129      if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
5130        if (PerformObjectArgumentInitialization(Input, Method))
5131          return ExprError();
5132      } else {
5133        // Convert the arguments.
5134        OwningExprResult InputInit
5135          = PerformCopyInitialization(InitializedEntity::InitializeParameter(
5136                                                      FnDecl->getParamDecl(0)),
5137                                      SourceLocation(),
5138                                      move(input));
5139        if (InputInit.isInvalid())
5140          return ExprError();
5141
5142        input = move(InputInit);
5143        Input = (Expr *)input.get();
5144      }
5145
5146      // Determine the result type
5147      QualType ResultTy = FnDecl->getResultType().getNonReferenceType();
5148
5149      // Build the actual expression node.
5150      Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5151                                               SourceLocation());
5152      UsualUnaryConversions(FnExpr);
5153
5154      input.release();
5155      Args[0] = Input;
5156      ExprOwningPtr<CallExpr> TheCall(this,
5157        new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
5158                                          Args, NumArgs, ResultTy, OpLoc));
5159
5160      if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
5161                              FnDecl))
5162        return ExprError();
5163
5164      return MaybeBindToTemporary(TheCall.release());
5165    } else {
5166      // We matched a built-in operator. Convert the arguments, then
5167      // break out so that we will build the appropriate built-in
5168      // operator node.
5169        if (PerformImplicitConversion(Input, Best->BuiltinTypes.ParamTypes[0],
5170                                      Best->Conversions[0], AA_Passing))
5171          return ExprError();
5172
5173        break;
5174      }
5175    }
5176
5177    case OR_No_Viable_Function:
5178      // No viable function; fall through to handling this as a
5179      // built-in operator, which will produce an error message for us.
5180      break;
5181
5182    case OR_Ambiguous:
5183      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5184          << UnaryOperator::getOpcodeStr(Opc)
5185          << Input->getSourceRange();
5186      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates,
5187                              UnaryOperator::getOpcodeStr(Opc), OpLoc);
5188      return ExprError();
5189
5190    case OR_Deleted:
5191      Diag(OpLoc, diag::err_ovl_deleted_oper)
5192        << Best->Function->isDeleted()
5193        << UnaryOperator::getOpcodeStr(Opc)
5194        << Input->getSourceRange();
5195      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5196      return ExprError();
5197    }
5198
5199  // Either we found no viable overloaded operator or we matched a
5200  // built-in operator. In either case, fall through to trying to
5201  // build a built-in operation.
5202  input.release();
5203  return CreateBuiltinUnaryOp(OpLoc, Opc, Owned(Input));
5204}
5205
5206/// \brief Create a binary operation that may resolve to an overloaded
5207/// operator.
5208///
5209/// \param OpLoc The location of the operator itself (e.g., '+').
5210///
5211/// \param OpcIn The BinaryOperator::Opcode that describes this
5212/// operator.
5213///
5214/// \param Functions The set of non-member functions that will be
5215/// considered by overload resolution. The caller needs to build this
5216/// set based on the context using, e.g.,
5217/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This
5218/// set should not contain any member functions; those will be added
5219/// by CreateOverloadedBinOp().
5220///
5221/// \param LHS Left-hand argument.
5222/// \param RHS Right-hand argument.
5223Sema::OwningExprResult
5224Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
5225                            unsigned OpcIn,
5226                            FunctionSet &Functions,
5227                            Expr *LHS, Expr *RHS) {
5228  Expr *Args[2] = { LHS, RHS };
5229  LHS=RHS=0; //Please use only Args instead of LHS/RHS couple
5230
5231  BinaryOperator::Opcode Opc = static_cast<BinaryOperator::Opcode>(OpcIn);
5232  OverloadedOperatorKind Op = BinaryOperator::getOverloadedOperator(Opc);
5233  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op);
5234
5235  // If either side is type-dependent, create an appropriate dependent
5236  // expression.
5237  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
5238    if (Functions.empty()) {
5239      // If there are no functions to store, just build a dependent
5240      // BinaryOperator or CompoundAssignment.
5241      if (Opc <= BinaryOperator::Assign || Opc > BinaryOperator::OrAssign)
5242        return Owned(new (Context) BinaryOperator(Args[0], Args[1], Opc,
5243                                                  Context.DependentTy, OpLoc));
5244
5245      return Owned(new (Context) CompoundAssignOperator(Args[0], Args[1], Opc,
5246                                                        Context.DependentTy,
5247                                                        Context.DependentTy,
5248                                                        Context.DependentTy,
5249                                                        OpLoc));
5250    }
5251
5252    UnresolvedLookupExpr *Fn
5253      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true,
5254                                     0, SourceRange(), OpName, OpLoc,
5255                                     /* ADL */ true, IsOverloaded(Functions));
5256
5257    for (FunctionSet::iterator Func = Functions.begin(),
5258                            FuncEnd = Functions.end();
5259         Func != FuncEnd; ++Func)
5260      Fn->addDecl(*Func);
5261
5262    return Owned(new (Context) CXXOperatorCallExpr(Context, Op, Fn,
5263                                                   Args, 2,
5264                                                   Context.DependentTy,
5265                                                   OpLoc));
5266  }
5267
5268  // If this is the .* operator, which is not overloadable, just
5269  // create a built-in binary operator.
5270  if (Opc == BinaryOperator::PtrMemD)
5271    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5272
5273  // If this is the assignment operator, we only perform overload resolution
5274  // if the left-hand side is a class or enumeration type. This is actually
5275  // a hack. The standard requires that we do overload resolution between the
5276  // various built-in candidates, but as DR507 points out, this can lead to
5277  // problems. So we do it this way, which pretty much follows what GCC does.
5278  // Note that we go the traditional code path for compound assignment forms.
5279  if (Opc==BinaryOperator::Assign && !Args[0]->getType()->isOverloadableType())
5280    return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5281
5282  // Build an empty overload set.
5283  OverloadCandidateSet CandidateSet;
5284
5285  // Add the candidates from the given function set.
5286  AddFunctionCandidates(Functions, Args, 2, CandidateSet, false);
5287
5288  // Add operator candidates that are member functions.
5289  AddMemberOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
5290
5291  // Add builtin operator candidates.
5292  AddBuiltinOperatorCandidates(Op, OpLoc, Args, 2, CandidateSet);
5293
5294  // Perform overload resolution.
5295  OverloadCandidateSet::iterator Best;
5296  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5297    case OR_Success: {
5298      // We found a built-in operator or an overloaded operator.
5299      FunctionDecl *FnDecl = Best->Function;
5300
5301      if (FnDecl) {
5302        // We matched an overloaded operator. Build a call to that
5303        // operator.
5304
5305        // Convert the arguments.
5306        if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FnDecl)) {
5307          OwningExprResult Arg1
5308            = PerformCopyInitialization(
5309                                        InitializedEntity::InitializeParameter(
5310                                                        FnDecl->getParamDecl(0)),
5311                                        SourceLocation(),
5312                                        Owned(Args[1]));
5313          if (Arg1.isInvalid())
5314            return ExprError();
5315
5316          if (PerformObjectArgumentInitialization(Args[0], Method))
5317            return ExprError();
5318
5319          Args[1] = RHS = Arg1.takeAs<Expr>();
5320        } else {
5321          // Convert the arguments.
5322          OwningExprResult Arg0
5323            = PerformCopyInitialization(
5324                                        InitializedEntity::InitializeParameter(
5325                                                        FnDecl->getParamDecl(0)),
5326                                        SourceLocation(),
5327                                        Owned(Args[0]));
5328          if (Arg0.isInvalid())
5329            return ExprError();
5330
5331          OwningExprResult Arg1
5332            = PerformCopyInitialization(
5333                                        InitializedEntity::InitializeParameter(
5334                                                        FnDecl->getParamDecl(1)),
5335                                        SourceLocation(),
5336                                        Owned(Args[1]));
5337          if (Arg1.isInvalid())
5338            return ExprError();
5339          Args[0] = LHS = Arg0.takeAs<Expr>();
5340          Args[1] = RHS = Arg1.takeAs<Expr>();
5341        }
5342
5343        // Determine the result type
5344        QualType ResultTy
5345          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
5346        ResultTy = ResultTy.getNonReferenceType();
5347
5348        // Build the actual expression node.
5349        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5350                                                 OpLoc);
5351        UsualUnaryConversions(FnExpr);
5352
5353        ExprOwningPtr<CXXOperatorCallExpr>
5354          TheCall(this, new (Context) CXXOperatorCallExpr(Context, Op, FnExpr,
5355                                                          Args, 2, ResultTy,
5356                                                          OpLoc));
5357
5358        if (CheckCallReturnType(FnDecl->getResultType(), OpLoc, TheCall.get(),
5359                                FnDecl))
5360          return ExprError();
5361
5362        return MaybeBindToTemporary(TheCall.release());
5363      } else {
5364        // We matched a built-in operator. Convert the arguments, then
5365        // break out so that we will build the appropriate built-in
5366        // operator node.
5367        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
5368                                      Best->Conversions[0], AA_Passing) ||
5369            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
5370                                      Best->Conversions[1], AA_Passing))
5371          return ExprError();
5372
5373        break;
5374      }
5375    }
5376
5377    case OR_No_Viable_Function: {
5378      // C++ [over.match.oper]p9:
5379      //   If the operator is the operator , [...] and there are no
5380      //   viable functions, then the operator is assumed to be the
5381      //   built-in operator and interpreted according to clause 5.
5382      if (Opc == BinaryOperator::Comma)
5383        break;
5384
5385      // For class as left operand for assignment or compound assigment operator
5386      // do not fall through to handling in built-in, but report that no overloaded
5387      // assignment operator found
5388      OwningExprResult Result = ExprError();
5389      if (Args[0]->getType()->isRecordType() &&
5390          Opc >= BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign) {
5391        Diag(OpLoc,  diag::err_ovl_no_viable_oper)
5392             << BinaryOperator::getOpcodeStr(Opc)
5393             << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5394      } else {
5395        // No viable function; try to create a built-in operation, which will
5396        // produce an error. Then, show the non-viable candidates.
5397        Result = CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5398      }
5399      assert(Result.isInvalid() &&
5400             "C++ binary operator overloading is missing candidates!");
5401      if (Result.isInvalid())
5402        PrintOverloadCandidates(CandidateSet, OCD_AllCandidates,
5403                                BinaryOperator::getOpcodeStr(Opc), OpLoc);
5404      return move(Result);
5405    }
5406
5407    case OR_Ambiguous:
5408      Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5409          << BinaryOperator::getOpcodeStr(Opc)
5410          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5411      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates,
5412                              BinaryOperator::getOpcodeStr(Opc), OpLoc);
5413      return ExprError();
5414
5415    case OR_Deleted:
5416      Diag(OpLoc, diag::err_ovl_deleted_oper)
5417        << Best->Function->isDeleted()
5418        << BinaryOperator::getOpcodeStr(Opc)
5419        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5420      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5421      return ExprError();
5422    }
5423
5424  // We matched a built-in operator; build it.
5425  return CreateBuiltinBinOp(OpLoc, Opc, Args[0], Args[1]);
5426}
5427
5428Action::OwningExprResult
5429Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
5430                                         SourceLocation RLoc,
5431                                         ExprArg Base, ExprArg Idx) {
5432  Expr *Args[2] = { static_cast<Expr*>(Base.get()),
5433                    static_cast<Expr*>(Idx.get()) };
5434  DeclarationName OpName =
5435      Context.DeclarationNames.getCXXOperatorName(OO_Subscript);
5436
5437  // If either side is type-dependent, create an appropriate dependent
5438  // expression.
5439  if (Args[0]->isTypeDependent() || Args[1]->isTypeDependent()) {
5440
5441    UnresolvedLookupExpr *Fn
5442      = UnresolvedLookupExpr::Create(Context, /*Dependent*/ true,
5443                                     0, SourceRange(), OpName, LLoc,
5444                                     /*ADL*/ true, /*Overloaded*/ false);
5445    // Can't add any actual overloads yet
5446
5447    Base.release();
5448    Idx.release();
5449    return Owned(new (Context) CXXOperatorCallExpr(Context, OO_Subscript, Fn,
5450                                                   Args, 2,
5451                                                   Context.DependentTy,
5452                                                   RLoc));
5453  }
5454
5455  // Build an empty overload set.
5456  OverloadCandidateSet CandidateSet;
5457
5458  // Subscript can only be overloaded as a member function.
5459
5460  // Add operator candidates that are member functions.
5461  AddMemberOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
5462
5463  // Add builtin operator candidates.
5464  AddBuiltinOperatorCandidates(OO_Subscript, LLoc, Args, 2, CandidateSet);
5465
5466  // Perform overload resolution.
5467  OverloadCandidateSet::iterator Best;
5468  switch (BestViableFunction(CandidateSet, LLoc, Best)) {
5469    case OR_Success: {
5470      // We found a built-in operator or an overloaded operator.
5471      FunctionDecl *FnDecl = Best->Function;
5472
5473      if (FnDecl) {
5474        // We matched an overloaded operator. Build a call to that
5475        // operator.
5476
5477        // Convert the arguments.
5478        CXXMethodDecl *Method = cast<CXXMethodDecl>(FnDecl);
5479        if (PerformObjectArgumentInitialization(Args[0], Method) ||
5480            PerformCopyInitialization(Args[1],
5481                                      FnDecl->getParamDecl(0)->getType(),
5482                                      AA_Passing))
5483          return ExprError();
5484
5485        // Determine the result type
5486        QualType ResultTy
5487          = FnDecl->getType()->getAs<FunctionType>()->getResultType();
5488        ResultTy = ResultTy.getNonReferenceType();
5489
5490        // Build the actual expression node.
5491        Expr *FnExpr = new (Context) DeclRefExpr(FnDecl, FnDecl->getType(),
5492                                                 LLoc);
5493        UsualUnaryConversions(FnExpr);
5494
5495        Base.release();
5496        Idx.release();
5497        ExprOwningPtr<CXXOperatorCallExpr>
5498          TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Subscript,
5499                                                          FnExpr, Args, 2,
5500                                                          ResultTy, RLoc));
5501
5502        if (CheckCallReturnType(FnDecl->getResultType(), LLoc, TheCall.get(),
5503                                FnDecl))
5504          return ExprError();
5505
5506        return MaybeBindToTemporary(TheCall.release());
5507      } else {
5508        // We matched a built-in operator. Convert the arguments, then
5509        // break out so that we will build the appropriate built-in
5510        // operator node.
5511        if (PerformImplicitConversion(Args[0], Best->BuiltinTypes.ParamTypes[0],
5512                                      Best->Conversions[0], AA_Passing) ||
5513            PerformImplicitConversion(Args[1], Best->BuiltinTypes.ParamTypes[1],
5514                                      Best->Conversions[1], AA_Passing))
5515          return ExprError();
5516
5517        break;
5518      }
5519    }
5520
5521    case OR_No_Viable_Function: {
5522      if (CandidateSet.empty())
5523        Diag(LLoc, diag::err_ovl_no_oper)
5524          << Args[0]->getType() << /*subscript*/ 0
5525          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5526      else
5527        Diag(LLoc, diag::err_ovl_no_viable_subscript)
5528          << Args[0]->getType()
5529          << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5530      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates,
5531                              "[]", LLoc);
5532      return ExprError();
5533    }
5534
5535    case OR_Ambiguous:
5536      Diag(LLoc,  diag::err_ovl_ambiguous_oper)
5537          << "[]" << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5538      PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates,
5539                              "[]", LLoc);
5540      return ExprError();
5541
5542    case OR_Deleted:
5543      Diag(LLoc, diag::err_ovl_deleted_oper)
5544        << Best->Function->isDeleted() << "[]"
5545        << Args[0]->getSourceRange() << Args[1]->getSourceRange();
5546      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates,
5547                              "[]", LLoc);
5548      return ExprError();
5549    }
5550
5551  // We matched a built-in operator; build it.
5552  Base.release();
5553  Idx.release();
5554  return CreateBuiltinArraySubscriptExpr(Owned(Args[0]), LLoc,
5555                                         Owned(Args[1]), RLoc);
5556}
5557
5558/// BuildCallToMemberFunction - Build a call to a member
5559/// function. MemExpr is the expression that refers to the member
5560/// function (and includes the object parameter), Args/NumArgs are the
5561/// arguments to the function call (not including the object
5562/// parameter). The caller needs to validate that the member
5563/// expression refers to a member function or an overloaded member
5564/// function.
5565Sema::OwningExprResult
5566Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
5567                                SourceLocation LParenLoc, Expr **Args,
5568                                unsigned NumArgs, SourceLocation *CommaLocs,
5569                                SourceLocation RParenLoc) {
5570  // Dig out the member expression. This holds both the object
5571  // argument and the member function we're referring to.
5572  Expr *NakedMemExpr = MemExprE->IgnoreParens();
5573
5574  MemberExpr *MemExpr;
5575  CXXMethodDecl *Method = 0;
5576  if (isa<MemberExpr>(NakedMemExpr)) {
5577    MemExpr = cast<MemberExpr>(NakedMemExpr);
5578    Method = cast<CXXMethodDecl>(MemExpr->getMemberDecl());
5579  } else {
5580    UnresolvedMemberExpr *UnresExpr = cast<UnresolvedMemberExpr>(NakedMemExpr);
5581
5582    QualType ObjectType = UnresExpr->getBaseType();
5583
5584    // Add overload candidates
5585    OverloadCandidateSet CandidateSet;
5586
5587    // FIXME: avoid copy.
5588    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
5589    if (UnresExpr->hasExplicitTemplateArgs()) {
5590      UnresExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
5591      TemplateArgs = &TemplateArgsBuffer;
5592    }
5593
5594    for (UnresolvedMemberExpr::decls_iterator I = UnresExpr->decls_begin(),
5595           E = UnresExpr->decls_end(); I != E; ++I) {
5596
5597      NamedDecl *Func = *I;
5598      CXXRecordDecl *ActingDC = cast<CXXRecordDecl>(Func->getDeclContext());
5599      if (isa<UsingShadowDecl>(Func))
5600        Func = cast<UsingShadowDecl>(Func)->getTargetDecl();
5601
5602      if ((Method = dyn_cast<CXXMethodDecl>(Func))) {
5603        // If explicit template arguments were provided, we can't call a
5604        // non-template member function.
5605        if (TemplateArgs)
5606          continue;
5607
5608        AddMethodCandidate(Method, ActingDC, ObjectType, Args, NumArgs,
5609                           CandidateSet, /*SuppressUserConversions=*/false);
5610      } else {
5611        AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(Func),
5612                                   ActingDC, TemplateArgs,
5613                                   ObjectType, Args, NumArgs,
5614                                   CandidateSet,
5615                                   /*SuppressUsedConversions=*/false);
5616      }
5617    }
5618
5619    DeclarationName DeclName = UnresExpr->getMemberName();
5620
5621    OverloadCandidateSet::iterator Best;
5622    switch (BestViableFunction(CandidateSet, UnresExpr->getLocStart(), Best)) {
5623    case OR_Success:
5624      Method = cast<CXXMethodDecl>(Best->Function);
5625      break;
5626
5627    case OR_No_Viable_Function:
5628      Diag(UnresExpr->getMemberLoc(),
5629           diag::err_ovl_no_viable_member_function_in_call)
5630        << DeclName << MemExprE->getSourceRange();
5631      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5632      // FIXME: Leaking incoming expressions!
5633      return ExprError();
5634
5635    case OR_Ambiguous:
5636      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_ambiguous_member_call)
5637        << DeclName << MemExprE->getSourceRange();
5638      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5639      // FIXME: Leaking incoming expressions!
5640      return ExprError();
5641
5642    case OR_Deleted:
5643      Diag(UnresExpr->getMemberLoc(), diag::err_ovl_deleted_member_call)
5644        << Best->Function->isDeleted()
5645        << DeclName << MemExprE->getSourceRange();
5646      PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5647      // FIXME: Leaking incoming expressions!
5648      return ExprError();
5649    }
5650
5651    MemExprE = FixOverloadedFunctionReference(MemExprE, Method);
5652
5653    // If overload resolution picked a static member, build a
5654    // non-member call based on that function.
5655    if (Method->isStatic()) {
5656      return BuildResolvedCallExpr(MemExprE, Method, LParenLoc,
5657                                   Args, NumArgs, RParenLoc);
5658    }
5659
5660    MemExpr = cast<MemberExpr>(MemExprE->IgnoreParens());
5661  }
5662
5663  assert(Method && "Member call to something that isn't a method?");
5664  ExprOwningPtr<CXXMemberCallExpr>
5665    TheCall(this, new (Context) CXXMemberCallExpr(Context, MemExprE, Args,
5666                                                  NumArgs,
5667                                  Method->getResultType().getNonReferenceType(),
5668                                  RParenLoc));
5669
5670  // Check for a valid return type.
5671  if (CheckCallReturnType(Method->getResultType(), MemExpr->getMemberLoc(),
5672                          TheCall.get(), Method))
5673    return ExprError();
5674
5675  // Convert the object argument (for a non-static member function call).
5676  Expr *ObjectArg = MemExpr->getBase();
5677  if (!Method->isStatic() &&
5678      PerformObjectArgumentInitialization(ObjectArg, Method))
5679    return ExprError();
5680  MemExpr->setBase(ObjectArg);
5681
5682  // Convert the rest of the arguments
5683  const FunctionProtoType *Proto = cast<FunctionProtoType>(Method->getType());
5684  if (ConvertArgumentsForCall(&*TheCall, MemExpr, Method, Proto, Args, NumArgs,
5685                              RParenLoc))
5686    return ExprError();
5687
5688  if (CheckFunctionCall(Method, TheCall.get()))
5689    return ExprError();
5690
5691  return MaybeBindToTemporary(TheCall.release());
5692}
5693
5694/// BuildCallToObjectOfClassType - Build a call to an object of class
5695/// type (C++ [over.call.object]), which can end up invoking an
5696/// overloaded function call operator (@c operator()) or performing a
5697/// user-defined conversion on the object argument.
5698Sema::ExprResult
5699Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Object,
5700                                   SourceLocation LParenLoc,
5701                                   Expr **Args, unsigned NumArgs,
5702                                   SourceLocation *CommaLocs,
5703                                   SourceLocation RParenLoc) {
5704  assert(Object->getType()->isRecordType() && "Requires object type argument");
5705  const RecordType *Record = Object->getType()->getAs<RecordType>();
5706
5707  // C++ [over.call.object]p1:
5708  //  If the primary-expression E in the function call syntax
5709  //  evaluates to a class object of type "cv T", then the set of
5710  //  candidate functions includes at least the function call
5711  //  operators of T. The function call operators of T are obtained by
5712  //  ordinary lookup of the name operator() in the context of
5713  //  (E).operator().
5714  OverloadCandidateSet CandidateSet;
5715  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Call);
5716
5717  if (RequireCompleteType(LParenLoc, Object->getType(),
5718                          PartialDiagnostic(diag::err_incomplete_object_call)
5719                          << Object->getSourceRange()))
5720    return true;
5721
5722  LookupResult R(*this, OpName, LParenLoc, LookupOrdinaryName);
5723  LookupQualifiedName(R, Record->getDecl());
5724  R.suppressDiagnostics();
5725
5726  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
5727       Oper != OperEnd; ++Oper) {
5728    AddMethodCandidate(*Oper, Object->getType(), Args, NumArgs, CandidateSet,
5729                       /*SuppressUserConversions=*/ false);
5730  }
5731
5732  // C++ [over.call.object]p2:
5733  //   In addition, for each conversion function declared in T of the
5734  //   form
5735  //
5736  //        operator conversion-type-id () cv-qualifier;
5737  //
5738  //   where cv-qualifier is the same cv-qualification as, or a
5739  //   greater cv-qualification than, cv, and where conversion-type-id
5740  //   denotes the type "pointer to function of (P1,...,Pn) returning
5741  //   R", or the type "reference to pointer to function of
5742  //   (P1,...,Pn) returning R", or the type "reference to function
5743  //   of (P1,...,Pn) returning R", a surrogate call function [...]
5744  //   is also considered as a candidate function. Similarly,
5745  //   surrogate call functions are added to the set of candidate
5746  //   functions for each conversion function declared in an
5747  //   accessible base class provided the function is not hidden
5748  //   within T by another intervening declaration.
5749  // FIXME: Look in base classes for more conversion operators!
5750  const UnresolvedSet *Conversions
5751    = cast<CXXRecordDecl>(Record->getDecl())->getConversionFunctions();
5752  for (UnresolvedSet::iterator I = Conversions->begin(),
5753         E = Conversions->end(); I != E; ++I) {
5754    NamedDecl *D = *I;
5755    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
5756    if (isa<UsingShadowDecl>(D))
5757      D = cast<UsingShadowDecl>(D)->getTargetDecl();
5758
5759    // Skip over templated conversion functions; they aren't
5760    // surrogates.
5761    if (isa<FunctionTemplateDecl>(D))
5762      continue;
5763
5764    CXXConversionDecl *Conv = cast<CXXConversionDecl>(D);
5765
5766    // Strip the reference type (if any) and then the pointer type (if
5767    // any) to get down to what might be a function type.
5768    QualType ConvType = Conv->getConversionType().getNonReferenceType();
5769    if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>())
5770      ConvType = ConvPtrType->getPointeeType();
5771
5772    if (const FunctionProtoType *Proto = ConvType->getAs<FunctionProtoType>())
5773      AddSurrogateCandidate(Conv, ActingContext, Proto,
5774                            Object->getType(), Args, NumArgs,
5775                            CandidateSet);
5776  }
5777
5778  // Perform overload resolution.
5779  OverloadCandidateSet::iterator Best;
5780  switch (BestViableFunction(CandidateSet, Object->getLocStart(), Best)) {
5781  case OR_Success:
5782    // Overload resolution succeeded; we'll build the appropriate call
5783    // below.
5784    break;
5785
5786  case OR_No_Viable_Function:
5787    if (CandidateSet.empty())
5788      Diag(Object->getSourceRange().getBegin(), diag::err_ovl_no_oper)
5789        << Object->getType() << /*call*/ 1
5790        << Object->getSourceRange();
5791    else
5792      Diag(Object->getSourceRange().getBegin(),
5793           diag::err_ovl_no_viable_object_call)
5794        << Object->getType() << Object->getSourceRange();
5795    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5796    break;
5797
5798  case OR_Ambiguous:
5799    Diag(Object->getSourceRange().getBegin(),
5800         diag::err_ovl_ambiguous_object_call)
5801      << Object->getType() << Object->getSourceRange();
5802    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates);
5803    break;
5804
5805  case OR_Deleted:
5806    Diag(Object->getSourceRange().getBegin(),
5807         diag::err_ovl_deleted_object_call)
5808      << Best->Function->isDeleted()
5809      << Object->getType() << Object->getSourceRange();
5810    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5811    break;
5812  }
5813
5814  if (Best == CandidateSet.end()) {
5815    // We had an error; delete all of the subexpressions and return
5816    // the error.
5817    Object->Destroy(Context);
5818    for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
5819      Args[ArgIdx]->Destroy(Context);
5820    return true;
5821  }
5822
5823  if (Best->Function == 0) {
5824    // Since there is no function declaration, this is one of the
5825    // surrogate candidates. Dig out the conversion function.
5826    CXXConversionDecl *Conv
5827      = cast<CXXConversionDecl>(
5828                         Best->Conversions[0].UserDefined.ConversionFunction);
5829
5830    // We selected one of the surrogate functions that converts the
5831    // object parameter to a function pointer. Perform the conversion
5832    // on the object argument, then let ActOnCallExpr finish the job.
5833
5834    // Create an implicit member expr to refer to the conversion operator.
5835    // and then call it.
5836    CXXMemberCallExpr *CE = BuildCXXMemberCallExpr(Object, Conv);
5837
5838    return ActOnCallExpr(S, ExprArg(*this, CE), LParenLoc,
5839                         MultiExprArg(*this, (ExprTy**)Args, NumArgs),
5840                         CommaLocs, RParenLoc).release();
5841  }
5842
5843  // We found an overloaded operator(). Build a CXXOperatorCallExpr
5844  // that calls this method, using Object for the implicit object
5845  // parameter and passing along the remaining arguments.
5846  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
5847  const FunctionProtoType *Proto = Method->getType()->getAs<FunctionProtoType>();
5848
5849  unsigned NumArgsInProto = Proto->getNumArgs();
5850  unsigned NumArgsToCheck = NumArgs;
5851
5852  // Build the full argument list for the method call (the
5853  // implicit object parameter is placed at the beginning of the
5854  // list).
5855  Expr **MethodArgs;
5856  if (NumArgs < NumArgsInProto) {
5857    NumArgsToCheck = NumArgsInProto;
5858    MethodArgs = new Expr*[NumArgsInProto + 1];
5859  } else {
5860    MethodArgs = new Expr*[NumArgs + 1];
5861  }
5862  MethodArgs[0] = Object;
5863  for (unsigned ArgIdx = 0; ArgIdx < NumArgs; ++ArgIdx)
5864    MethodArgs[ArgIdx + 1] = Args[ArgIdx];
5865
5866  Expr *NewFn = new (Context) DeclRefExpr(Method, Method->getType(),
5867                                          SourceLocation());
5868  UsualUnaryConversions(NewFn);
5869
5870  // Once we've built TheCall, all of the expressions are properly
5871  // owned.
5872  QualType ResultTy = Method->getResultType().getNonReferenceType();
5873  ExprOwningPtr<CXXOperatorCallExpr>
5874    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Call, NewFn,
5875                                                    MethodArgs, NumArgs + 1,
5876                                                    ResultTy, RParenLoc));
5877  delete [] MethodArgs;
5878
5879  if (CheckCallReturnType(Method->getResultType(), LParenLoc, TheCall.get(),
5880                          Method))
5881    return true;
5882
5883  // We may have default arguments. If so, we need to allocate more
5884  // slots in the call for them.
5885  if (NumArgs < NumArgsInProto)
5886    TheCall->setNumArgs(Context, NumArgsInProto + 1);
5887  else if (NumArgs > NumArgsInProto)
5888    NumArgsToCheck = NumArgsInProto;
5889
5890  bool IsError = false;
5891
5892  // Initialize the implicit object parameter.
5893  IsError |= PerformObjectArgumentInitialization(Object, Method);
5894  TheCall->setArg(0, Object);
5895
5896
5897  // Check the argument types.
5898  for (unsigned i = 0; i != NumArgsToCheck; i++) {
5899    Expr *Arg;
5900    if (i < NumArgs) {
5901      Arg = Args[i];
5902
5903      // Pass the argument.
5904      QualType ProtoArgType = Proto->getArgType(i);
5905      IsError |= PerformCopyInitialization(Arg, ProtoArgType, AA_Passing);
5906    } else {
5907      OwningExprResult DefArg
5908        = BuildCXXDefaultArgExpr(LParenLoc, Method, Method->getParamDecl(i));
5909      if (DefArg.isInvalid()) {
5910        IsError = true;
5911        break;
5912      }
5913
5914      Arg = DefArg.takeAs<Expr>();
5915    }
5916
5917    TheCall->setArg(i + 1, Arg);
5918  }
5919
5920  // If this is a variadic call, handle args passed through "...".
5921  if (Proto->isVariadic()) {
5922    // Promote the arguments (C99 6.5.2.2p7).
5923    for (unsigned i = NumArgsInProto; i != NumArgs; i++) {
5924      Expr *Arg = Args[i];
5925      IsError |= DefaultVariadicArgumentPromotion(Arg, VariadicMethod);
5926      TheCall->setArg(i + 1, Arg);
5927    }
5928  }
5929
5930  if (IsError) return true;
5931
5932  if (CheckFunctionCall(Method, TheCall.get()))
5933    return true;
5934
5935  return MaybeBindToTemporary(TheCall.release()).release();
5936}
5937
5938/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->
5939///  (if one exists), where @c Base is an expression of class type and
5940/// @c Member is the name of the member we're trying to find.
5941Sema::OwningExprResult
5942Sema::BuildOverloadedArrowExpr(Scope *S, ExprArg BaseIn, SourceLocation OpLoc) {
5943  Expr *Base = static_cast<Expr *>(BaseIn.get());
5944  assert(Base->getType()->isRecordType() && "left-hand side must have class type");
5945
5946  // C++ [over.ref]p1:
5947  //
5948  //   [...] An expression x->m is interpreted as (x.operator->())->m
5949  //   for a class object x of type T if T::operator->() exists and if
5950  //   the operator is selected as the best match function by the
5951  //   overload resolution mechanism (13.3).
5952  DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(OO_Arrow);
5953  OverloadCandidateSet CandidateSet;
5954  const RecordType *BaseRecord = Base->getType()->getAs<RecordType>();
5955
5956  if (RequireCompleteType(Base->getLocStart(), Base->getType(),
5957                          PDiag(diag::err_typecheck_incomplete_tag)
5958                            << Base->getSourceRange()))
5959    return ExprError();
5960
5961  LookupResult R(*this, OpName, OpLoc, LookupOrdinaryName);
5962  LookupQualifiedName(R, BaseRecord->getDecl());
5963  R.suppressDiagnostics();
5964
5965  for (LookupResult::iterator Oper = R.begin(), OperEnd = R.end();
5966       Oper != OperEnd; ++Oper) {
5967    NamedDecl *D = *Oper;
5968    CXXRecordDecl *ActingContext = cast<CXXRecordDecl>(D->getDeclContext());
5969    if (isa<UsingShadowDecl>(D))
5970      D = cast<UsingShadowDecl>(D)->getTargetDecl();
5971
5972    AddMethodCandidate(cast<CXXMethodDecl>(D), ActingContext,
5973                       Base->getType(), 0, 0, CandidateSet,
5974                       /*SuppressUserConversions=*/false);
5975  }
5976
5977  // Perform overload resolution.
5978  OverloadCandidateSet::iterator Best;
5979  switch (BestViableFunction(CandidateSet, OpLoc, Best)) {
5980  case OR_Success:
5981    // Overload resolution succeeded; we'll build the call below.
5982    break;
5983
5984  case OR_No_Viable_Function:
5985    if (CandidateSet.empty())
5986      Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
5987        << Base->getType() << Base->getSourceRange();
5988    else
5989      Diag(OpLoc, diag::err_ovl_no_viable_oper)
5990        << "operator->" << Base->getSourceRange();
5991    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
5992    return ExprError();
5993
5994  case OR_Ambiguous:
5995    Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
5996      << "->" << Base->getSourceRange();
5997    PrintOverloadCandidates(CandidateSet, OCD_ViableCandidates);
5998    return ExprError();
5999
6000  case OR_Deleted:
6001    Diag(OpLoc,  diag::err_ovl_deleted_oper)
6002      << Best->Function->isDeleted()
6003      << "->" << Base->getSourceRange();
6004    PrintOverloadCandidates(CandidateSet, OCD_AllCandidates);
6005    return ExprError();
6006  }
6007
6008  // Convert the object parameter.
6009  CXXMethodDecl *Method = cast<CXXMethodDecl>(Best->Function);
6010  if (PerformObjectArgumentInitialization(Base, Method))
6011    return ExprError();
6012
6013  // No concerns about early exits now.
6014  BaseIn.release();
6015
6016  // Build the operator call.
6017  Expr *FnExpr = new (Context) DeclRefExpr(Method, Method->getType(),
6018                                           SourceLocation());
6019  UsualUnaryConversions(FnExpr);
6020
6021  QualType ResultTy = Method->getResultType().getNonReferenceType();
6022  ExprOwningPtr<CXXOperatorCallExpr>
6023    TheCall(this, new (Context) CXXOperatorCallExpr(Context, OO_Arrow, FnExpr,
6024                                                    &Base, 1, ResultTy, OpLoc));
6025
6026  if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall.get(),
6027                          Method))
6028          return ExprError();
6029  return move(TheCall);
6030}
6031
6032/// FixOverloadedFunctionReference - E is an expression that refers to
6033/// a C++ overloaded function (possibly with some parentheses and
6034/// perhaps a '&' around it). We have resolved the overloaded function
6035/// to the function declaration Fn, so patch up the expression E to
6036/// refer (possibly indirectly) to Fn. Returns the new expr.
6037Expr *Sema::FixOverloadedFunctionReference(Expr *E, FunctionDecl *Fn) {
6038  if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
6039    Expr *SubExpr = FixOverloadedFunctionReference(PE->getSubExpr(), Fn);
6040    if (SubExpr == PE->getSubExpr())
6041      return PE->Retain();
6042
6043    return new (Context) ParenExpr(PE->getLParen(), PE->getRParen(), SubExpr);
6044  }
6045
6046  if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
6047    Expr *SubExpr = FixOverloadedFunctionReference(ICE->getSubExpr(), Fn);
6048    assert(Context.hasSameType(ICE->getSubExpr()->getType(),
6049                               SubExpr->getType()) &&
6050           "Implicit cast type cannot be determined from overload");
6051    if (SubExpr == ICE->getSubExpr())
6052      return ICE->Retain();
6053
6054    return new (Context) ImplicitCastExpr(ICE->getType(),
6055                                          ICE->getCastKind(),
6056                                          SubExpr,
6057                                          ICE->isLvalueCast());
6058  }
6059
6060  if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(E)) {
6061    assert(UnOp->getOpcode() == UnaryOperator::AddrOf &&
6062           "Can only take the address of an overloaded function");
6063    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn)) {
6064      if (Method->isStatic()) {
6065        // Do nothing: static member functions aren't any different
6066        // from non-member functions.
6067      } else {
6068        // Fix the sub expression, which really has to be an
6069        // UnresolvedLookupExpr holding an overloaded member function
6070        // or template.
6071        Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), Fn);
6072        if (SubExpr == UnOp->getSubExpr())
6073          return UnOp->Retain();
6074
6075        assert(isa<DeclRefExpr>(SubExpr)
6076               && "fixed to something other than a decl ref");
6077        assert(cast<DeclRefExpr>(SubExpr)->getQualifier()
6078               && "fixed to a member ref with no nested name qualifier");
6079
6080        // We have taken the address of a pointer to member
6081        // function. Perform the computation here so that we get the
6082        // appropriate pointer to member type.
6083        QualType ClassType
6084          = Context.getTypeDeclType(cast<RecordDecl>(Method->getDeclContext()));
6085        QualType MemPtrType
6086          = Context.getMemberPointerType(Fn->getType(), ClassType.getTypePtr());
6087
6088        return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
6089                                           MemPtrType, UnOp->getOperatorLoc());
6090      }
6091    }
6092    Expr *SubExpr = FixOverloadedFunctionReference(UnOp->getSubExpr(), Fn);
6093    if (SubExpr == UnOp->getSubExpr())
6094      return UnOp->Retain();
6095
6096    return new (Context) UnaryOperator(SubExpr, UnaryOperator::AddrOf,
6097                                     Context.getPointerType(SubExpr->getType()),
6098                                       UnOp->getOperatorLoc());
6099  }
6100
6101  if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
6102    // FIXME: avoid copy.
6103    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6104    if (ULE->hasExplicitTemplateArgs()) {
6105      ULE->copyTemplateArgumentsInto(TemplateArgsBuffer);
6106      TemplateArgs = &TemplateArgsBuffer;
6107    }
6108
6109    return DeclRefExpr::Create(Context,
6110                               ULE->getQualifier(),
6111                               ULE->getQualifierRange(),
6112                               Fn,
6113                               ULE->getNameLoc(),
6114                               Fn->getType(),
6115                               TemplateArgs);
6116  }
6117
6118  if (UnresolvedMemberExpr *MemExpr = dyn_cast<UnresolvedMemberExpr>(E)) {
6119    // FIXME: avoid copy.
6120    TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = 0;
6121    if (MemExpr->hasExplicitTemplateArgs()) {
6122      MemExpr->copyTemplateArgumentsInto(TemplateArgsBuffer);
6123      TemplateArgs = &TemplateArgsBuffer;
6124    }
6125
6126    Expr *Base;
6127
6128    // If we're filling in
6129    if (MemExpr->isImplicitAccess()) {
6130      if (cast<CXXMethodDecl>(Fn)->isStatic()) {
6131        return DeclRefExpr::Create(Context,
6132                                   MemExpr->getQualifier(),
6133                                   MemExpr->getQualifierRange(),
6134                                   Fn,
6135                                   MemExpr->getMemberLoc(),
6136                                   Fn->getType(),
6137                                   TemplateArgs);
6138      } else {
6139        SourceLocation Loc = MemExpr->getMemberLoc();
6140        if (MemExpr->getQualifier())
6141          Loc = MemExpr->getQualifierRange().getBegin();
6142        Base = new (Context) CXXThisExpr(Loc,
6143                                         MemExpr->getBaseType(),
6144                                         /*isImplicit=*/true);
6145      }
6146    } else
6147      Base = MemExpr->getBase()->Retain();
6148
6149    return MemberExpr::Create(Context, Base,
6150                              MemExpr->isArrow(),
6151                              MemExpr->getQualifier(),
6152                              MemExpr->getQualifierRange(),
6153                              Fn,
6154                              MemExpr->getMemberLoc(),
6155                              TemplateArgs,
6156                              Fn->getType());
6157  }
6158
6159  assert(false && "Invalid reference to overloaded function");
6160  return E->Retain();
6161}
6162
6163Sema::OwningExprResult Sema::FixOverloadedFunctionReference(OwningExprResult E,
6164                                                            FunctionDecl *Fn) {
6165  return Owned(FixOverloadedFunctionReference((Expr *)E.get(), Fn));
6166}
6167
6168} // end namespace clang
6169