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