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